@apollion-dsi/tokens 5.9.0 → 6.0.0

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/lib/build.cjs CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";var U=Object.defineProperty;var Bn=Object.getOwnPropertyDescriptor;var Hn=Object.getOwnPropertyNames;var Wn=Object.prototype.hasOwnProperty;var s=(e,n)=>U(e,"name",{value:n,configurable:!0});var zn=(e,n)=>{for(var o in n)U(e,o,{get:n[o],enumerable:!0})},Jn=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Hn(n))!Wn.call(e,t)&&t!==o&&U(e,t,{get:()=>n[t],enumerable:!(r=Bn(n,t))||r.enumerable});return e};var Kn=e=>Jn(U({},"__esModule",{value:!0}),e);var No={};zn(No,{build:()=>Eo,check:()=>Mo});module.exports=Kn(No);var x=require("node:fs/promises"),_n=require("node:os"),A=require("node:path");var re=require("culori");var H=require("@apollion-dsi/core/themes/border"),Ee=require("@apollion-dsi/core/themes/colors"),ne=require("@apollion-dsi/core/themes/depth"),D=require("@apollion-dsi/core/themes/font"),he=require("@apollion-dsi/core/themes/spacing"),P=require("culori");var Ce=require("@apollion-dsi/core/themes/breakpoints");function Ve(e=Ce.defaultInputBreakpoints){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(Ve,"breakpointEntries");var Y=require("@apollion-dsi/core/themes/layout");function Ae(e=Y.defaultInputContainerSizes){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(Ae,"containerSizeEntries");function Le(e=Y.defaultInputLayout){return[["page-max-width",`${e.pageMaxWidth}px`]]}s(Le,"layoutEntries");var Oe=require("@apollion-dsi/core/themes/dimension");function Z({multiplier:e=.25,alias:n},o){let r=o!==void 0?Oe.DIMENSION_MULTIPLIERS[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(Z,"createSpacing");var me={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ge(e){let n=Object.keys(me).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}s(ge,"assertTokenMetaResolves");var qn=(0,P.converter)("oklch");function b(e){return typeof e.type=="string"&&"value"in e}s(b,"isToken");function v(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(v,"kebab");function Me(e){return e.split(".").map(v).join(".")}s(Me,"kebabPath");function C(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(C,"rawValue");function Q(e,n){return Number(e.toFixed(n))||0}s(Q,"round");function ye(e){let n=qn((0,P.parse)(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[Q(n.l,4),Q(n.c,4),Q(n.h??0,2)],r=(0,P.formatHex)(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:Q(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(ye,"toColorValue");var Ge=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function $(e){let n=Ge.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}s($,"toDimensionValue");function S(e){return{type:"color",value:ye(e)}}s(S,"colorToken");function N(e){let n={};for(let[o,r]of Object.entries(e))n[o]=S(r);return n}s(N,"recordColorGroup");function Ne(e){let n=(0,Ee.createReadableTextLayer)(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=S(t);return o.neutral=N(n.neutral),o}s(Ne,"buildReadableTextGroup");var Xn=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function je(e){let n={};for(let o of Xn){let r=e[o];n[o]={base:S(r.base),dark:S(r.dark),action:S(r.action),active:S(r.active),light:S(r.light),onLight:S(r.onLight)}}return n.grayscale=N(e.grayscale),n.neutral=N(e.neutral),n.surface=N(e.surface),n.ink=N(e.ink),n.edge=N(e.edge),n.wash=N(e.wash),n.baseDark=S(e.baseDark??"#000000"),n.baseLight=S(e.baseLight??"#ffffff"),n.deepDark=S(e.deepDark??"#000000"),n.deepLight=S(e.deepLight??"#ffffff"),n}s(je,"buildColorPrimitives");function Fe(e){let n=Z(he.defaultInputSpacing,e),o={};for(let r of Object.keys(he.defaultInputSpacing.alias))o[r]={type:"dimension",value:$(n(r))};return o}s(Fe,"buildSpacePrimitives");function Pe(){let e={};for(let[n,o]of Object.entries(H.defaultInputBorder.borderWidth))e[n]={type:"dimension",value:$(o)};return e}s(Pe,"buildBorderWidthPrimitives");function Un(e,n){return{color:je(e),space:Fe(n),borderWidth:Pe()}}s(Un,"buildPrimitives");var _e={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},Be={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},He={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function Yn(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}s(Yn,"lookupPrimitive");function F(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Yn(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:ye(i)}}:S(i)}return r}s(F,"colorRefGroup");var We={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},Zn={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function Qn(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let i of o.slice(1))if(t&&!b(t)&&i in t)t=t[i];else return;return t&&b(t)&&t.value.kind==="dimension"?t.value.raw:void 0}s(Qn,"lookupDimensionPrimitive");function be(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Qn(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:$(i)}}:{type:"dimension",value:$(i)}}return r}s(be,"dimensionRefGroup");function ze(e){let n={},o={};for(let[i,a]of Object.entries(H.defaultInputBorder.borderRadius))Ge.test(a)?n[i]={type:"dimension",value:$(a)}:o[i]=a;let r=be(H.defaultInputBorder.borderWidth,e,Zn),t={};for(let[i,a]of Object.entries(H.defaultInputBorder.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(ze,"buildBorder");function Je(e){let n=(0,D.createFont)(D.defaultInputFont,e),o={};for(let[c,l]of Object.entries(D.defaultInputFont.fontFamily)){let g=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:g,family:g}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:$(l)};let t={};for(let[c,l]of Object.entries(D.defaultInputFont.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(D.defaultInputFont.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:D.defaultInputFont.letterSpacing,textTransform:D.defaultInputFont.textTransform,fontStyle:D.defaultInputFont.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(Je,"buildFont");var eo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function no(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(eo),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>$(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:ye(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(no,"parseShadow");function Ke(e){let n=(0,ne.createDeth)(e),o={};for(let r of Object.keys(ne.levelValues))o[r]={type:"shadow",value:no(n(r))};return o}s(Ke,"buildShadow");function ee(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${v(t)}`:v(t);if(b(i)){o.add(a);let c=me[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...i,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:i}else r[t]=ee(i,a,o)}return r}s(ee,"decorateGroup");function oo(e){let n=new Set,o=ee(e.primitives,"",n),r=ee(e.groups,"",n);return ge(n),{...e,primitives:o,groups:r}}s(oo,"decorateMeta");function oe(e,n){return ee(e,"",n)}s(oe,"decorateSlice");function qe(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${v(r)}`:v(r);b(t)?o.add(i):qe(t,i,o)}}s(qe,"collectPaths");function Xe(e){let n=new Set;for(let o of e)qe(o.groups,"",n);ge(n)}s(Xe,"assertSlicesMetaComplete");function Ue(){let e={};for(let[n,o]of Ve())e[n]={type:"dimension",value:$(o)};return e}s(Ue,"buildBreakpoints");function Ye(){let e={};for(let[n,o]of Ae())e[n]={type:"dimension",value:$(o)};return e}s(Ye,"buildContainerSizes");function Ze(){let e={};for(let[n,o]of Le())e[n]={type:"dimension",value:$(o)};return e}s(Ze,"buildLayoutConstants");var Qe={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function en(){let e=Pe(),o=ze({borderWidth:e}),r={"com.apollion.breakpoint":Qe};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:oe({"border-width":e,border:o.group,breakpoint:Ue(),"container-size":Ye(),layout:Ze()},t),extensions:r}}s(en,"buildBaseIR");function nn(e){let n=Je(e),o=new Set;return{groups:oe({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(nn,"buildFontIR");function on(e,n){let o=je(n),r=new Set;return{groups:oe({color:o,bg:F(e.bg,n,_e),text:F(e.text,n,Be),edge:F(e.edge,n,He),tx:Ne(n),shadow:Ke(n)},r),extensions:{}}}s(on,"buildColorIR");function rn(e,n){let o=Fe(n),r={space:o},t=new Set;return{groups:oe({space:o,spacing:be(e.spacing,r,We)},t),extensions:{}}}s(rn,"buildSpacingIR");function ro(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=Un(n,o.dimension),i=ze(t),a=Je(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":Qe};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:F(e.bg,n,_e),text:F(e.text,n,Be),edge:F(e.edge,n,He),tx:Ne(n),spacing:be(e.spacing,t,We),border:i.group,breakpoint:Ue(),"container-size":Ye(),layout:Ze(),font:a.group,shadow:Ke(n)},extensions:c};return oo(l)}s(ro,"buildIR");var _=ro;var to=(0,re.converter)("rgb"),tn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Re(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(Re,"colorPayload");function ke(e){return e.alpha===void 0}s(ke,"isOpaqueColor");function sn(e){let n=to((0,re.parse)(e.hex));if(!n)return"0 0 0";let o=s(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}s(sn,"rgbTriplet");function W(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];if(b(t))o.set(i.join("-"),t);else for(let[a,c]of W(t,i))o.set(a,c)}return o}s(W,"flatTokens");function R(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||b(o))return{};o=o[r]}return o&&!b(o)?o:{}}s(R,"groupAt");function an(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of W(R(e.groups,o),[o])){let i=Re(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:ke(i)})}return n}s(an,"colorEntries");function E(e,n){return[...W(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s(E,"varEntries");function V(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}s(V,"pushScale");function cn(e){let n=[tn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=an(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:i}of o)i?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),V(n,"screens",[...W(R(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,C(t.value)])),V(n,"spacing",E(R(e.groups,"spacing"),["spacing"])),V(n,"borderRadius",E(R(e.groups,"border","radius"),["border","radius"])),V(n,"borderWidth",E(R(e.groups,"border","width"),["border","width"])),V(n,"fontFamily",E(R(e.groups,"font","family"),["font","family"])),V(n,"fontSize",E(R(e.groups,"font","size"),["font","size"])),V(n,"fontWeight",E(R(e.groups,"font","weight"),["font","weight"])),V(n,"lineHeight",E(R(e.groups,"font","lineHeight"),["font","line-height"])),V(n,"boxShadow",E(R(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
2
- `)}s(cn,"renderTailwindPreset");function ln(e){let n=s(t=>[...W(t).keys()],"keys"),o=s(t=>`[${t.map(i=>JSON.stringify(i)).join(", ")}]`,"list");return[tn,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(an(e).map(t=>t.key))},`,` spacing: ${o(n(R(e.groups,"spacing")))},`,` borderRadius: ${o(n(R(e.groups,"border","radius")))},`,` borderWidth: ${o(n(R(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(R(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(R(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(R(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(R(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(R(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
3
- `)}s(ln,"renderTwMergeExtension");var dn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function te(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];b(t)?o.push(` --apollion-${i.join("-")}: ${C(t.value)};`):te(t,i,o)}}s(te,"emitVars");function ie(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];if(!b(t)){ie(t,i,o);continue}let a=Re(t);a&&ke(a)&&o.push(` --apollion-${i.join("-")}-rgb: ${sn(a)};`)}}s(ie,"emitRgbVars");function Ie(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];b(t)?t.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${C(t.value)}; }`):Ie(t,i,o)}}s(Ie,"emitProperties");function un(e,n={}){let{brand:o,mode:r,surface:t,dimension:i}=e.meta,a=[dn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${i} */`,"",":root {"),te(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),ie(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),Ie(e.groups,[],a),a.push("}",""),a.join(`
4
- `)}s(un,"renderCss");function pn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:i,surface:a,dimension:c}=e.meta,l=[dn,""],g=s((w,d,u)=>{l.push(`${w} {`,` color-scheme: ${u};`),te(d.groups,[],l),t&&ie(d.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${i} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),g(`:root, html[${r}="light"]`,e,"light"),g(`html[${r}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${r}]) {`," color-scheme: dark;");let k=[];te(n.groups,[],k),t&&ie(n.groups,[],k);for(let w of k)l.push(` ${w}`);return l.push(" }","}",""),l.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),Ie(e.groups,[],l),l.push("}",""),l.join(`
5
- `)}s(pn,"renderCssModes");var io="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function xe(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${r}`:r;b(t)?o.push([i,C(t.value)]):xe(t,i,o)}}s(xe,"flatten");function so(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}s(so,"yamlEscape");function ao(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}s(ao,"variantKey");function fn(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let i=[];xe(t.groups,"",i),o.push(` ${ao(t)}:`);for(let[a,c]of i)o.push(` ${a}: ${so(c)}`)}o.push("---");let r=["",io,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:i,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${i} \xB7 ${a} \xB7 ${c}\``,"");let l=[];xe(t.groups,"",l);let g=new Map;for(let[k,w]of l){let d=k.split(".")[0]??k,u=g.get(d)??[];u.push([k,w]),g.set(d,u)}for(let[k,w]of g){r.push(`### ${k}`,"","| Token | Value |","| --- | --- |");for(let[d,u]of w)r.push(`| \`${d}\` | \`${u}\` |`);r.push("")}}return`${o.join(`
1
+ "use strict";var Y=Object.defineProperty;var qn=Object.getOwnPropertyDescriptor;var Xn=Object.getOwnPropertyNames;var Un=Object.prototype.hasOwnProperty;var i=(e,n)=>Y(e,"name",{value:n,configurable:!0});var Yn=(e,n)=>{for(var o in n)Y(e,o,{get:n[o],enumerable:!0})},Zn=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Xn(n))!Un.call(e,t)&&t!==o&&Y(e,t,{get:()=>n[t],enumerable:!(r=qn(n,t))||r.enumerable});return e};var Qn=e=>Zn(Y({},"__esModule",{value:!0}),e);var Ko={};Yn(Ko,{build:()=>Bo,check:()=>zo});module.exports=Qn(Ko);var x=require("node:fs/promises"),Jn=require("node:os"),A=require("node:path");var te=require("culori");var H=require("@apollion-dsi/core/themes/border"),Fe=require("@apollion-dsi/core/themes/colors"),oe=require("@apollion-dsi/core/themes/depth"),C=require("@apollion-dsi/core/themes/font"),he=require("@apollion-dsi/core/themes/spacing"),_=require("culori");var Ve=require("@apollion-dsi/core/themes/breakpoints");function Me(e=Ve.defaultInputBreakpoints){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Me,"breakpointEntries");var Z=require("@apollion-dsi/core/themes/layout");function Ee(e=Z.defaultInputContainerSizes){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ee,"containerSizeEntries");function Ae(e=Z.defaultInputLayout){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(Ae,"layoutEntries");var $=require("@apollion-dsi/core/themes/motion");function Le(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.duration).map(o=>[o,{ms:e.duration[o],css:n.duration[o]}])}i(Le,"motionDurationEntries");function Oe(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.easing).map(o=>[o,{points:e.easing[o],css:n.easing[o]}])}i(Oe,"motionEasingEntries");function Ge(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.indicator).map(o=>[o,{ms:e.indicator[o],css:n.indicator[o]}])}i(Ge,"motionIndicatorEntries");function Ne(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.intent).map(o=>{let r=e.intent[o],t=typeof r.duration=="number"?null:r.duration,s=typeof r.duration=="number"?r.duration:e.duration[r.duration];return[o,{durationRef:t,duration:{ms:s,css:n.intent[o].duration},easingRef:r.easing,easing:{points:e.easing[r.easing],css:n.intent[o].easing}}]})}i(Ne,"motionIntentEntries");var je=require("@apollion-dsi/core/themes/dimension");function Q({multiplier:e=.25,alias:n},o){let r=o!==void 0?je.DIMENSION_MULTIPLIERS[o]:e;return(...t)=>t.map(s=>{let a=typeof s=="string"?n[s]:s;return`${r*a}rem`}).join(" ")}i(Q,"createSpacing");var ge={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ye(e){let n=Object.keys(ge).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}i(ye,"assertTokenMetaResolves");var eo=(0,_.converter)("oklch");function R(e){return typeof e.type=="string"&&"value"in e}i(R,"isToken");function v(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(v,"kebab");function Pe(e){return e.split(".").map(v).join(".")}i(Pe,"kebabPath");function E(e){return e.kind==="ref"?e.resolved.raw:e.raw}i(E,"rawValue");function ee(e,n){return Number(e.toFixed(n))||0}i(ee,"round");function be(e){let n=eo((0,_.parse)(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[ee(n.l,4),ee(n.c,4),ee(n.h??0,2)],r=(0,_.formatHex)(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:ee(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}i(be,"toColorValue");var _e=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function V(e){let n=_e.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}i(V,"toDimensionValue");function S(e){return{type:"color",value:be(e)}}i(S,"colorToken");function j(e){let n={};for(let[o,r]of Object.entries(e))n[o]=S(r);return n}i(j,"recordColorGroup");function Be(e){let n=(0,Fe.createReadableTextLayer)(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=S(t);return o.neutral=j(n.neutral),o}i(Be,"buildReadableTextGroup");var no=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function ze(e){let n={};for(let o of no){let r=e[o];n[o]={base:S(r.base),dark:S(r.dark),action:S(r.action),active:S(r.active),light:S(r.light),onLight:S(r.onLight)}}return n.grayscale=j(e.grayscale),n.neutral=j(e.neutral),n.surface=j(e.surface),n.ink=j(e.ink),n.edge=j(e.edge),n.wash=j(e.wash),n.baseDark=S(e.baseDark??"#000000"),n.baseLight=S(e.baseLight??"#ffffff"),n.deepDark=S(e.deepDark??"#000000"),n.deepLight=S(e.deepLight??"#ffffff"),n}i(ze,"buildColorPrimitives");function He(e){let n=Q(he.defaultInputSpacing,e),o={};for(let r of Object.keys(he.defaultInputSpacing.alias))o[r]={type:"dimension",value:V(n(r))};return o}i(He,"buildSpacePrimitives");function Ke(){let e={};for(let[n,o]of Object.entries(H.defaultInputBorder.borderWidth))e[n]={type:"dimension",value:V(o)};return e}i(Ke,"buildBorderWidthPrimitives");function oo(e,n){return{color:ze(e),space:He(n),borderWidth:Ke()}}i(oo,"buildPrimitives");var We={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},Je={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},qe={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function ro(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}i(ro,"lookupPrimitive");function P(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?ro(n,a):void 0;r[t]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:be(s)}}:S(s)}return r}i(P,"colorRefGroup");var Xe={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},to={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function io(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let s of o.slice(1))if(t&&!R(t)&&s in t)t=t[s];else return;return t&&R(t)&&t.value.kind==="dimension"?t.value.raw:void 0}i(io,"lookupDimensionPrimitive");function Re(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?io(n,a):void 0;r[t]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:V(s)}}:{type:"dimension",value:V(s)}}return r}i(Re,"dimensionRefGroup");function Ue(e){let n={},o={};for(let[s,a]of Object.entries(H.defaultInputBorder.borderRadius))_e.test(a)?n[s]={type:"dimension",value:V(a)}:o[s]=a;let r=Re(H.defaultInputBorder.borderWidth,e,to),t={};for(let[s,a]of Object.entries(H.defaultInputBorder.borderStyle))t[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}i(Ue,"buildBorder");function Ye(e){let n=(0,C.createFont)(C.defaultInputFont,e),o={};for(let[c,u]of Object.entries(C.defaultInputFont.fontFamily)){let g=u.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:g,family:g}}}let r={};for(let[c,u]of Object.entries(n.fontSize))r[c]={type:"dimension",value:V(u)};let t={};for(let[c,u]of Object.entries(C.defaultInputFont.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${u}`,weight:u}};let s={};for(let[c,u]of Object.entries(C.defaultInputFont.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${u}`,number:u}};let a={letterSpacing:C.defaultInputFont.letterSpacing,textTransform:C.defaultInputFont.textTransform,fontStyle:C.defaultInputFont.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:s},extensions:a}}i(Ye,"buildFont");var so=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function ao(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(so),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=i(u=>V(a[u]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:be(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(ao,"parseShadow");function Ze(e){let n=(0,oe.createDeth)(e),o={};for(let r of Object.keys(oe.levelValues))o[r]={type:"shadow",value:ao(n(r))};return o}i(Ze,"buildShadow");function ne(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=n?`${n}.${v(t)}`:v(t);if(R(s)){o.add(a);let c=ge[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...s,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:s}else r[t]=ne(s,a,o)}return r}i(ne,"decorateGroup");function co(e){let n=new Set,o=ne(e.primitives,"",n),r=ne(e.groups,"",n);return ye(n),{...e,primitives:o,groups:r}}i(co,"decorateMeta");function re(e,n){return ne(e,"",n)}i(re,"decorateSlice");function Qe(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${v(r)}`:v(r);R(t)?o.add(s):Qe(t,s,o)}}i(Qe,"collectPaths");function en(e){let n=new Set;for(let o of e)Qe(o.groups,"",n);ye(n)}i(en,"assertSlicesMetaComplete");function nn(){let e={};for(let[n,o]of Me())e[n]={type:"dimension",value:V(o)};return e}i(nn,"buildBreakpoints");function on(){let e={};for(let[n,o]of Ee())e[n]={type:"dimension",value:V(o)};return e}i(on,"buildContainerSizes");function rn(){let e={};for(let[n,o]of Ae())e[n]={type:"dimension",value:V(o)};return e}i(rn,"buildLayoutConstants");function tn(){let e=i(a=>({type:"duration",value:{kind:"duration",raw:a.css,value:a.ms,unit:"ms"}}),"durationToken"),n=i(a=>({type:"cubicBezier",value:{kind:"cubicBezier",raw:a.css,points:a.points}}),"easingToken"),o={};for(let[a,c]of Le())o[a]=e(c);let r={};for(let[a,c]of Oe())r[a]=n(c);let t={};for(let[a,c]of Ge())t[a]=e(c);let s={};for(let[a,c]of Ne()){let u=e(c.duration).value;s[a]={duration:c.durationRef?{type:"duration",value:{kind:"ref",path:`motion.duration.${c.durationRef}`,resolved:u}}:e(c.duration),easing:{type:"cubicBezier",value:{kind:"ref",path:`motion.easing.${c.easingRef}`,resolved:n(c.easing).value}}}}return{duration:o,easing:r,indicator:t,intent:s}}i(tn,"buildMotion");var sn={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function an(){let e=Ke(),o=Ue({borderWidth:e}),r={"com.apollion.breakpoint":sn};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:re({"border-width":e,border:o.group,breakpoint:nn(),"container-size":on(),layout:rn(),motion:tn()},t),extensions:r}}i(an,"buildBaseIR");function cn(e){let n=Ye(e),o=new Set;return{groups:re({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(cn,"buildFontIR");function un(e,n){let o=ze(n),r=new Set;return{groups:re({color:o,bg:P(e.bg,n,We),text:P(e.text,n,Je),edge:P(e.edge,n,qe),tx:Be(n),shadow:Ze(n)},r),extensions:{}}}i(un,"buildColorIR");function ln(e,n){let o=He(n),r={space:o},t=new Set;return{groups:re({space:o,spacing:Re(e.spacing,r,Xe)},t),extensions:{}}}i(ln,"buildSpacingIR");function uo(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=oo(n,o.dimension),s=Ue(t),a=Ye(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":sn};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let u={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:P(e.bg,n,We),text:P(e.text,n,Je),edge:P(e.edge,n,qe),tx:Be(n),spacing:Re(e.spacing,t,Xe),border:s.group,breakpoint:nn(),"container-size":on(),layout:rn(),motion:tn(),font:a.group,shadow:Ze(n)},extensions:c};return co(u)}i(uo,"buildIR");var B=uo;var lo=(0,te.converter)("rgb"),dn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function ke(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(ke,"colorPayload");function Ie(e){return e.alpha===void 0}i(Ie,"isOpaqueColor");function pn(e){let n=lo((0,te.parse)(e.hex));if(!n)return"0 0 0";let o=i(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}i(pn,"rgbTriplet");function K(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let s=[...n,v(r)];if(R(t))o.set(s.join("-"),t);else for(let[a,c]of K(t,s))o.set(a,c)}return o}i(K,"flatTokens");function h(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||R(o))return{};o=o[r]}return o&&!R(o)?o:{}}i(h,"groupAt");function fn(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of K(h(e.groups,o),[o])){let s=ke(t);s&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:Ie(s)})}return n}i(fn,"colorEntries");function M(e,n){return[...K(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(M,"varEntries");function w(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}i(w,"pushScale");function mn(e){let n=[dn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=fn(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:s}of o)s?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),w(n,"screens",[...K(h(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,E(t.value)])),w(n,"spacing",M(h(e.groups,"spacing"),["spacing"])),w(n,"borderRadius",M(h(e.groups,"border","radius"),["border","radius"])),w(n,"borderWidth",M(h(e.groups,"border","width"),["border","width"])),w(n,"fontFamily",M(h(e.groups,"font","family"),["font","family"])),w(n,"fontSize",M(h(e.groups,"font","size"),["font","size"])),w(n,"fontWeight",M(h(e.groups,"font","weight"),["font","weight"])),w(n,"lineHeight",M(h(e.groups,"font","lineHeight"),["font","line-height"])),w(n,"boxShadow",M(h(e.groups,"shadow"),["shadow"])),w(n,"transitionDuration",M(h(e.groups,"motion","duration"),["motion","duration"])),w(n,"transitionTimingFunction",M(h(e.groups,"motion","easing"),["motion","easing"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
2
+ `)}i(mn,"renderTailwindPreset");function gn(e){let n=i(t=>[...K(t).keys()],"keys"),o=i(t=>`[${t.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[dn,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(fn(e).map(t=>t.key))},`,` spacing: ${o(n(h(e.groups,"spacing")))},`,` borderRadius: ${o(n(h(e.groups,"border","radius")))},`,` borderWidth: ${o(n(h(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(h(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(h(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(h(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(h(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(h(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
3
+ `)}i(gn,"renderTwMergeExtension");var yn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function ie(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,v(r)];R(t)?o.push(` --apollion-${s.join("-")}: ${E(t.value)};`):ie(t,s,o)}}i(ie,"emitVars");function se(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,v(r)];if(!R(t)){se(t,s,o);continue}let a=ke(t);a&&Ie(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${pn(a)};`)}}i(se,"emitRgbVars");function xe(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,v(r)];R(t)?t.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${E(t.value)}; }`):xe(t,s,o)}}i(xe,"emitProperties");function hn(e,n={}){let{brand:o,mode:r,surface:t,dimension:s}=e.meta,a=[yn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${s} */`,"",":root {"),ie(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),se(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),xe(e.groups,[],a),a.push("}",""),a.join(`
4
+ `)}i(hn,"renderCss");function bn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:s,surface:a,dimension:c}=e.meta,u=[yn,""],g=i((D,l,d)=>{u.push(`${D} {`,` color-scheme: ${d};`),ie(l.groups,[],u),t&&se(l.groups,[],u),u.push("}","")},"block");u.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),g(`:root, html[${r}="light"]`,e,"light"),g(`html[${r}="dark"]`,n,"dark"),u.push("@media (prefers-color-scheme: dark) {"),u.push(` html:not([${r}]) {`," color-scheme: dark;");let k=[];ie(n.groups,[],k),t&&se(n.groups,[],k);for(let D of k)u.push(` ${D}`);return u.push(" }","}",""),u.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),xe(e.groups,[],u),u.push("}",""),u.join(`
5
+ `)}i(bn,"renderCssModes");var po="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Se(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${r}`:r;R(t)?o.push([s,E(t.value)]):Se(t,s,o)}}i(Se,"flatten");function fo(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(fo,"yamlEscape");function mo(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}i(mo,"variantKey");function Rn(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let s=[];Se(t.groups,"",s),o.push(` ${mo(t)}:`);for(let[a,c]of s)o.push(` ${a}: ${fo(c)}`)}o.push("---");let r=["",po,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:s,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${s} \xB7 ${a} \xB7 ${c}\``,"");let u=[];Se(t.groups,"",u);let g=new Map;for(let[k,D]of u){let l=k.split(".")[0]??k,d=g.get(l)??[];d.push([k,D]),g.set(l,d)}for(let[k,D]of g){r.push(`### ${k}`,"","| Token | Value |","| --- | --- |");for(let[l,d]of D)r.push(`| \`${l}\` | \`${d}\` |`);r.push("")}}return`${o.join(`
6
6
  `)}
7
7
  ${r.join(`
8
- `)}`}s(fn,"renderDesignMd");function mn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(mn,"colorValue");function z(e){return{value:e.value,unit:e.unit}}s(z,"dimensionValue");function co(e){let n=e.shadow,o={color:mn(n.color),offsetX:z(n.offsetX),offsetY:z(n.offsetY),blur:z(n.blur),spread:z(n.spread)};return n.inset&&(o.inset=!0),o}s(co,"shadowValue");function lo(e){switch(e.kind){case"ref":return`{${Me(e.path)}}`;case"color":return mn(e);case"dimension":return z(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return co(e)}}s(lo,"projectValue");function uo(e){let n={$value:lo(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(uo,"projectToken");function Se(e){let n={};for(let[o,r]of Object.entries(e))n[v(o)]=b(r)?uo(r):Se(r);return n}s(Se,"projectGroup");function se(e,n){let o={$description:n,...Se(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
9
- `}s(se,"renderSet");function gn(e){return se(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(gn,"renderBaseSet");function hn(e,n,o,r){return se(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}s(hn,"renderColorSet");function yn(e,n){return se(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s(yn,"renderSpacingSet");function bn(e,n){return se(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(bn,"renderFontSet");function Rn(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(i,null,2)}
10
- `}s(Rn,"renderResolver");var po="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function fo(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}s(fo,"emitDoc");function kn(e,n,o){let r=" ".repeat(n);for(let[t,i]of Object.entries(e))b(i)?(fo(i,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(C(i.value))},`)):(o.push(`${r}${t}: {`),kn(i,n+1,o),o.push(`${r}},`))}s(kn,"emitGroup");function In(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,i=[po,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return kn(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
11
- `)}s(In,"renderTs");var mo=["light","dark"],go=["positive","negative"],ho=["compact","normal","spacious"];function ae(e){let n=e.modes??mo,o=e.surfaces??go,r=e.dimensions??ho,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of t)for(let l of n)for(let g of o)for(let k of r)i.push({brand:a,colors:c,mode:l,surface:g,dimension:k});return i}s(ae,"expandVariants");function xn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(xn,"variantName");var Sn=require("node:crypto");function ce(e){return(0,Sn.createHash)("sha256").update(e).digest("hex")}s(ce,"sha256");function we(e){return ce(ve(e))}s(we,"hashConfig");function ve(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(ve).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${ve(e[r])}`).join(",")}}`}s(ve,"stableStringify");function vn(e){try{let{execSync:n}=require("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(vn,"detectGitCommit");function wn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(wn,"buildEnv");function Tn(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
12
- `}s(Tn,"serializeManifest");var yo="json/sets",Dn="json/resolver.json";function le(e){return`${yo}/${e}.json`}s(le,"setFile");function bo(e,n,o){return`${e}.color.${n}.${o}`}s(bo,"colorSetName");function Ro(e){return`spacing.${e}`}s(Ro,"spacingSetName");function ko(e){return`font.${e}`}s(ko,"fontSetName");function de(e,n){e.includes(n)||e.push(n)}s(de,"pushUnique");function $n(e){let n=ae(e),o=[],r=[],t=[],i=[],a=new Set,c=[],l=new Set,g=[],k=new Set,w=[];for(let d of n){de(o,d.brand),de(r,d.mode),de(t,d.surface),de(i,d.dimension);let u=bo(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:le(u),brand:d.brand,mode:d.mode,surface:d.surface}));let y=Ro(d.dimension);l.has(y)||(l.add(y),g.push({kind:"spacing",name:y,file:le(y),dimension:d.dimension}));let f=ko(d.dimension);k.has(f)||(k.add(f),w.push({kind:"font",name:f,file:le(f),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:le("base")},spacing:g,font:w,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:i}}}s($n,"planSets");var Nn=require("@apollion-dsi/core/themes/colors"),$e=require("@apollion-dsi/core/themes/foundation"),jn=require("@apollion-dsi/core/themes/semantic"),Fn=require("@apollion-dsi/core/themes/spacing"),Pn=require("@apollion-dsi/core/themes/surface");var h=require("culori");var q=(0,h.converter)("oklch"),Io=(0,h.converter)("rgb");function p(e,n,o){let r=(0,h.parse)(e),t=(0,h.parse)(n);if(!r||!t)return e;let i=(0,h.interpolate)([r,t],"oklch");return(0,h.formatHex)(i(o))??e}s(p,"mixOklch");function xo(e){return e?typeof e=="string"?e:e.base:"#000"}s(xo,"coerceToHex");var ue=1.3,So=.05,Cn=.04,M=s((e,n)=>{let o=(0,h.parse)(e),r=(0,h.parse)(n);return!o||!r?1:(0,h.wcagContrast)(o,r)},"contrastRatio"),J=s(e=>{let n=q((0,h.parse)(e));return n?n.l??0:null},"oklchLightness"),vo=4.5;function K(e,n,o=vo){let r=(0,h.parse)(n),t=q((0,h.parse)(e));if(!r||!t)return e;let i=M("#fff",n)>=M("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=(0,h.formatHex)(t)??e,l=(0,h.parse)(c);if(l&&(0,h.wcagContrast)(l,r)>=o)return c;let g=Math.min(1,Math.max(0,(t.l??0)+i));if(g===(t.l??0))break;t={...t,l:g}}return(0,h.formatHex)(t)??e}s(K,"readableColor");var Vn=s((e,n)=>{if(M(e,n)>=ue)return!0;let o=J(e),r=J(n);return o!==null&&r!==null&&Math.abs(o-r)>=So},"isPerceptibleState"),Te=s(e=>e?M("#fff",e)>M("#000",e):!1,"isDarkSurface");function An(e,n,o){let r=q((0,h.parse)(e));if(!r)return null;let t={...r,l:o??r.l??0},i=n?Cn:-Cn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+i));if(c===(t.l??0))break;t={...t,l:c};let l=(0,h.formatHex)(t);if(l&&M(e,l)>=ue)return l}return(0,h.formatHex)(t)??null}s(An,"derivePerceptibleState");function Ln(e,n,o){let r=An(e,n,o);if(r&&M(e,r)>=ue)return r;let t=An(e,!n);return t&&M(e,t)>=ue?t:r??t}s(Ln,"perceptibleStateFor");function T(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=xo(e),t=n.deepDark,i=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,i,.6),light:p(r,i,.9),onLight:r};if((0,h.parse)(r)){let c=Te(n.baseLight),l=Vn(r,a.action);if(l||(a.action=Ln(r,c)??a.action),!Vn(r,a.active)){let g=l?void 0:J(a.action)??void 0;a.active=Ln(r,c,g)??a.active}}if(a.onLight=K(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??K(c,l)}}return a}s(T,"mountSingleColor");function On(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}s(On,"mountGreyscaleColors");function En(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=s(a=>1/17*(a-1),"interpolation"),i=p(r,o,.5);return{0:p(i,n,t(18)),5:p(i,n,t(17.5)),10:p(i,n,t(17)),20:p(i,n,t(16)),30:p(i,n,t(15)),40:p(i,n,t(14)),50:p(i,n,t(13)),60:p(i,n,t(12)),70:p(i,n,t(11)),80:p(i,n,t(10)),90:p(i,n,t(9)),100:p(i,n,t(8)),110:p(i,n,t(7)),120:p(i,n,t(6)),130:p(i,n,t(5)),140:p(i,n,t(4)),150:p(i,n,t(3)),160:p(i,n,t(2)),170:i,180:p(i,o,.25)}}s(En,"mountNeutralColors");function B(e,n){let o=q((0,h.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return(0,h.formatHex)({...o,l:r})??e}s(B,"shiftLightness");function pe(e,n){let o=q((0,h.parse)(e));if(!o)return e;let r=o.l??0,t=n.min??0,i=n.max??1;return r>=t&&r<=i?e:(0,h.formatHex)({...o,l:Math.min(i,Math.max(t,r))})??e}s(pe,"clampLightness");function j(e,n){let o=Io((0,h.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=s(i=>Math.round((i??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}s(j,"toRgbaString");var m=require("@apollion-dsi/core/themes/colors");var wo="#FFFFFF",De="#000000";function To(e){return Te(e.baseLight)?"dark":"light"}s(To,"resolvePolarity");function Do(e){let n=m.HALATION_FLOORS.CANVAS_MIN_L;return e<=n?1:e>=m.DARK_BOOST_TAPER_MAX_L?0:(m.DARK_BOOST_TAPER_MAX_L-e)/(m.DARK_BOOST_TAPER_MAX_L-n)}s(Do,"darkElevationBoostFactor");function Mn(e,n,o){if(Math.abs((0,m.apcaContrast)(e,n))>=o)return e;let r=Math.abs((0,m.apcaContrast)("#ffffff",n))>=Math.abs((0,m.apcaContrast)("#000000",n)),t=e;for(let i=0;i<40;i+=1){let a=B(t,r?.02:-.02);if(a===t||(t=a,Math.abs((0,m.apcaContrast)(t,n))>=o))break}return t}s(Mn,"ensureApca");function $o(e,n){let o=e.baseLight??wo,r=n==="dark",t=r?pe(o,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):o,i=B(t,m.LADDER_DELTAS.sunken),a=r?Do(J(t)??0):0,c=s(l=>m.LADDER_DELTAS[l]+a*m.DARK_ELEVATION_BOOST[l],"delta");return{canvas:t,sunken:r?pe(i,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):i,paper:B(t,c("paper")),raised:B(t,c("raised")),overlay:B(t,c("overlay")),scrim:r?e.deepLight??De:e.neutral?.["180"]??e.baseDark??De}}s($o,"deriveSurface");function Co(e,n){let o=e.baseDark??De,r=pe(Mn(K(o,n.paper,m.MIN_CONTRAST_AA),n.paper,m.INK_APCA_MIN.primary),{max:m.HALATION_FLOORS.INK_MAX_L}),t=s((i,a)=>Mn(K(p(r,n.canvas,i),n.paper,m.MIN_CONTRAST_AA),n.paper,a),"tier");return{primary:r,secondary:t(m.INK_MIX.secondary,m.INK_APCA_MIN.secondary),muted:t(m.INK_MIX.muted,m.INK_APCA_MIN.muted),disabled:p(r,n.canvas,m.INK_MIX.disabled)}}s(Co,"deriveInk");function Vo(e){return{hairline:j(e.primary,m.EDGE_ALPHA.hairline),border:j(e.primary,m.EDGE_ALPHA.border),strong:j(e.primary,m.EDGE_ALPHA.strong)}}s(Vo,"deriveEdge");function Ao(e,n){let o=m.WASH_ALPHA[n];return{hover:j(e.primary,o.hover),pressed:j(e.primary,o.pressed),selected:j(e.primary,o.selected)}}s(Ao,"deriveWash");function Lo(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}s(Lo,"applyOverride");function Gn(e,n){let o=To(e),r=$o(e,o),t=Co(e,r),i={surface:r,ink:t,edge:Vo(t),wash:Ao(t,o)};return Lo(i,n?.[o])}s(Gn,"resolveSurfaceLadder");function Oo(e){let n=En(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:On(e),...Gn({...e,neutral:n},e.ladder),main:T(e.main,e),opposite:T(e.opposite,e),complementary:T(e.complementary,e),danger:T(e.danger,e),information:T(e.information,e),success:T(e.success,e),warning:T(e.warning,e),primary:T(e.primary,e),secondary:T(e.secondary,e),tertiary:T(e.tertiary,e)}}s(Oo,"composeColors");function G(e,n=Fn.defaultInputSpacing){let o=e.mode==="dark"?(0,Nn.toDarkColors)(e.colors):e.colors,r=Oo(o),t=Z(n,e.dimension),i=(0,jn.createSemantic)({colors:r,spacing:t}),a=(0,$e.createFoundation)(i);return e.surface==="negative"&&(a=(0,$e.createFoundation)((0,Pn.invertForSurface)({semantic:i,colors:r},"negative").semantic)),{foundation:a,colors:r}}s(G,"buildVariantThemes");async function Eo(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,i=ae(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await(0,x.mkdtemp)((0,A.join)((0,_n.tmpdir)(),"apollion-tokens-"));try{let l=[],g=s(async(d,u)=>{await Go(c,d,u),l.push({path:d,sha256:ce(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=$n(n),u=[],y=en();u.push(y),await g(d.base.file,gn(y));for(let f of d.spacing){let I=i.find(X=>X.dimension===f.dimension),{foundation:L}=G(I),O=rn(L,f.dimension);u.push(O),await g(f.file,yn(O,f.dimension))}for(let f of d.font){let I=nn(f.dimension);u.push(I),await g(f.file,bn(I,f.dimension))}for(let f of d.color){let I=i.find(fe=>fe.brand===f.brand&&fe.mode===f.mode&&fe.surface===f.surface),{foundation:L,colors:O}=G(I),X=on(L,O);u.push(X),await g(f.file,hn(X,f.brand,f.mode,f.surface))}Xe(u),await g(Dn,Rn(n,d))}if(a.css||a.ts)for(let d of i){let{foundation:u,colors:y}=G(d),f=_(u,y,d),I=xn(d);a.css&&await g(`css/${I}.css`,un(f,{rgbCompanions:a.tailwind})),a.ts&&await g(`ts/${I}.d.ts`,In(f))}if(a.cssModes){let d=new Map;for(let u of i){let y=`${u.brand}.${u.surface}.${u.dimension}`,f=d.get(y)??{};f[u.mode]=u,d.set(y,f)}for(let[u,{light:y,dark:f}]of d){if(!y||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let I=G(y),L=G(f),O=pn(_(I.foundation,I.colors,y),_(L.foundation,L.colors,f),{rgbCompanions:a.tailwind});await g(`css/${u}.modes.css`,O)}}if(a.tailwind){let d=i[0],{foundation:u,colors:y}=G(d),f=_(u,y,d);await g("tailwind/preset.mjs",cn(f)),await g("tailwind/tw-merge.mjs",ln(f))}if(a.designMd){let d=[...new Set(i.map(u=>u.brand))];for(let u of d){let f=i.filter(I=>I.brand===u).map(I=>{let{foundation:L,colors:O}=G(I);return _(L,O,I)});await g(`design/${u}.design.md`,fn(u,f))}}let k={configHash:we(n),files:l,gitCommit:vn(r),buildEnv:wn()},w=Tn(k);return await(0,x.writeFile)((0,A.join)(c,"manifest.json"),w),await(0,x.rm)(o,{recursive:!0,force:!0}),await(0,x.mkdir)((0,A.dirname)(o),{recursive:!0}),await(0,x.rename)(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:k,outDir:o}}catch(l){throw await(0,x.rm)(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(Eo,"build");async function Mo(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await(0,x.readFile)((0,A.join)(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==we(n))return!1;for(let t of r.files){let i;try{i=await(0,x.readFile)((0,A.join)(o,t.path))}catch{return!1}if(ce(i)!==t.sha256)return!1}return!0}s(Mo,"check");async function Go(e,n,o){let r=(0,A.join)(e,n);await(0,x.mkdir)((0,A.dirname)(r),{recursive:!0}),await(0,x.writeFile)(r,o)}s(Go,"writeAt");0&&(module.exports={build,check});
8
+ `)}`}i(Rn,"renderDesignMd");function kn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}i(kn,"colorValue");function W(e){return{value:e.value,unit:e.unit}}i(W,"dimensionValue");function go(e){return{value:e.value,unit:e.unit}}i(go,"durationValue");function yo(e){return[...e.points]}i(yo,"cubicBezierValue");function ho(e){let n=e.shadow,o={color:kn(n.color),offsetX:W(n.offsetX),offsetY:W(n.offsetY),blur:W(n.blur),spread:W(n.spread)};return n.inset&&(o.inset=!0),o}i(ho,"shadowValue");function bo(e){switch(e.kind){case"ref":return`{${Pe(e.path)}}`;case"color":return kn(e);case"dimension":return W(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return ho(e);case"duration":return go(e);case"cubicBezier":return yo(e)}}i(bo,"projectValue");function Ro(e){let n={$value:bo(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(Ro,"projectToken");function ve(e){let n={};for(let[o,r]of Object.entries(e))n[v(o)]=R(r)?Ro(r):ve(r);return n}i(ve,"projectGroup");function ae(e,n){let o={$description:n,...ve(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
9
+ `}i(ae,"renderSet");function In(e){return ae(e,"Apollion DS \u2014 base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.")}i(In,"renderBaseSet");function xn(e,n,o,r){return ae(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}i(xn,"renderColorSet");function Sn(e,n){return ae(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(Sn,"renderSpacingSet");function vn(e,n){return ae(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(vn,"renderFontSet");function Dn(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],s={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(s,null,2)}
10
+ `}i(Dn,"renderResolver");var ko="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Io(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}i(Io,"emitDoc");function wn(e,n,o){let r=" ".repeat(n);for(let[t,s]of Object.entries(e))R(s)?(Io(s,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(E(s.value))},`)):(o.push(`${r}${t}: {`),wn(s,n+1,o),o.push(`${r}},`))}i(wn,"emitGroup");function Tn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,s=[ko,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return wn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
11
+ `)}i(Tn,"renderTs");var xo=["light","dark"],So=["positive","negative"],vo=["compact","normal","spacious"];function ce(e){let n=e.modes??xo,o=e.surfaces??So,r=e.dimensions??vo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of t)for(let u of n)for(let g of o)for(let k of r)s.push({brand:a,colors:c,mode:u,surface:g,dimension:k});return s}i(ce,"expandVariants");function $n(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i($n,"variantName");var Cn=require("node:crypto");function ue(e){return(0,Cn.createHash)("sha256").update(e).digest("hex")}i(ue,"sha256");function we(e){return ue(De(e))}i(we,"hashConfig");function De(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(De).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${De(e[r])}`).join(",")}}`}i(De,"stableStringify");function Vn(e){try{let{execSync:n}=require("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}i(Vn,"detectGitCommit");function Mn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(Mn,"buildEnv");function En(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
12
+ `}i(En,"serializeManifest");var Do="json/sets",An="json/resolver.json";function le(e){return`${Do}/${e}.json`}i(le,"setFile");function wo(e,n,o){return`${e}.color.${n}.${o}`}i(wo,"colorSetName");function To(e){return`spacing.${e}`}i(To,"spacingSetName");function $o(e){return`font.${e}`}i($o,"fontSetName");function de(e,n){e.includes(n)||e.push(n)}i(de,"pushUnique");function Ln(e){let n=ce(e),o=[],r=[],t=[],s=[],a=new Set,c=[],u=new Set,g=[],k=new Set,D=[];for(let l of n){de(o,l.brand),de(r,l.mode),de(t,l.surface),de(s,l.dimension);let d=wo(l.brand,l.mode,l.surface);a.has(d)||(a.add(d),c.push({kind:"color",name:d,file:le(d),brand:l.brand,mode:l.mode,surface:l.surface}));let b=To(l.dimension);u.has(b)||(u.add(b),g.push({kind:"spacing",name:b,file:le(b),dimension:l.dimension}));let f=$o(l.dimension);k.has(f)||(k.add(f),D.push({kind:"font",name:f,file:le(f),dimension:l.dimension}))}return{base:{kind:"base",name:"base",file:le("base")},spacing:g,font:D,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:s}}}i(Ln,"planSets");var zn=require("@apollion-dsi/core/themes/colors"),Ce=require("@apollion-dsi/core/themes/foundation"),Hn=require("@apollion-dsi/core/themes/semantic"),Kn=require("@apollion-dsi/core/themes/spacing"),Wn=require("@apollion-dsi/core/themes/surface");var y=require("culori");var X=(0,y.converter)("oklch"),Co=(0,y.converter)("rgb");function p(e,n,o){let r=(0,y.parse)(e),t=(0,y.parse)(n);if(!r||!t)return e;let s=(0,y.interpolate)([r,t],"oklch");return(0,y.formatHex)(s(o))??e}i(p,"mixOklch");function Vo(e){return e?typeof e=="string"?e:e.base:"#000"}i(Vo,"coerceToHex");var pe=1.3,Mo=.05,On=.04,G=i((e,n)=>{let o=(0,y.parse)(e),r=(0,y.parse)(n);return!o||!r?1:(0,y.wcagContrast)(o,r)},"contrastRatio"),J=i(e=>{let n=X((0,y.parse)(e));return n?n.l??0:null},"oklchLightness"),Eo=4.5;function q(e,n,o=Eo){let r=(0,y.parse)(n),t=X((0,y.parse)(e));if(!r||!t)return e;let s=G("#fff",n)>=G("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=(0,y.formatHex)(t)??e,u=(0,y.parse)(c);if(u&&(0,y.wcagContrast)(u,r)>=o)return c;let g=Math.min(1,Math.max(0,(t.l??0)+s));if(g===(t.l??0))break;t={...t,l:g}}return(0,y.formatHex)(t)??e}i(q,"readableColor");var Gn=i((e,n)=>{if(G(e,n)>=pe)return!0;let o=J(e),r=J(n);return o!==null&&r!==null&&Math.abs(o-r)>=Mo},"isPerceptibleState"),Te=i(e=>e?G("#fff",e)>G("#000",e):!1,"isDarkSurface");function Nn(e,n,o){let r=X((0,y.parse)(e));if(!r)return null;let t={...r,l:o??r.l??0},s=n?On:-On;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+s));if(c===(t.l??0))break;t={...t,l:c};let u=(0,y.formatHex)(t);if(u&&G(e,u)>=pe)return u}return(0,y.formatHex)(t)??null}i(Nn,"derivePerceptibleState");function jn(e,n,o){let r=Nn(e,n,o);if(r&&G(e,r)>=pe)return r;let t=Nn(e,!n);return t&&G(e,t)>=pe?t:r??t}i(jn,"perceptibleStateFor");function T(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Vo(e),t=n.deepDark,s=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,s,.6),light:p(r,s,.9),onLight:r};if((0,y.parse)(r)){let c=Te(n.baseLight),u=Gn(r,a.action);if(u||(a.action=jn(r,c)??a.action),!Gn(r,a.active)){let g=u?void 0:J(a.action)??void 0;a.active=jn(r,c,g)??a.active}}if(a.onLight=q(a.action,a.light),o){let c=o.action??a.action,u=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:u,onLight:o.onLight??q(c,u)}}return a}i(T,"mountSingleColor");function Fn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}i(Fn,"mountGreyscaleColors");function Pn(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=i(a=>1/17*(a-1),"interpolation"),s=p(r,o,.5);return{0:p(s,n,t(18)),5:p(s,n,t(17.5)),10:p(s,n,t(17)),20:p(s,n,t(16)),30:p(s,n,t(15)),40:p(s,n,t(14)),50:p(s,n,t(13)),60:p(s,n,t(12)),70:p(s,n,t(11)),80:p(s,n,t(10)),90:p(s,n,t(9)),100:p(s,n,t(8)),110:p(s,n,t(7)),120:p(s,n,t(6)),130:p(s,n,t(5)),140:p(s,n,t(4)),150:p(s,n,t(3)),160:p(s,n,t(2)),170:s,180:p(s,o,.25)}}i(Pn,"mountNeutralColors");function z(e,n){let o=X((0,y.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return(0,y.formatHex)({...o,l:r})??e}i(z,"shiftLightness");function fe(e,n){let o=X((0,y.parse)(e));if(!o)return e;let r=o.l??0,t=n.min??0,s=n.max??1;return r>=t&&r<=s?e:(0,y.formatHex)({...o,l:Math.min(s,Math.max(t,r))})??e}i(fe,"clampLightness");function F(e,n){let o=Co((0,y.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=i(s=>Math.round((s??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}i(F,"toRgbaString");var m=require("@apollion-dsi/core/themes/colors");var Ao="#FFFFFF",$e="#000000";function Lo(e){return Te(e.baseLight)?"dark":"light"}i(Lo,"resolvePolarity");function Oo(e){let n=m.HALATION_FLOORS.CANVAS_MIN_L;return e<=n?1:e>=m.DARK_BOOST_TAPER_MAX_L?0:(m.DARK_BOOST_TAPER_MAX_L-e)/(m.DARK_BOOST_TAPER_MAX_L-n)}i(Oo,"darkElevationBoostFactor");function _n(e,n,o){if(Math.abs((0,m.apcaContrast)(e,n))>=o)return e;let r=Math.abs((0,m.apcaContrast)("#ffffff",n))>=Math.abs((0,m.apcaContrast)("#000000",n)),t=e;for(let s=0;s<40;s+=1){let a=z(t,r?.02:-.02);if(a===t||(t=a,Math.abs((0,m.apcaContrast)(t,n))>=o))break}return t}i(_n,"ensureApca");function Go(e,n){let o=e.baseLight??Ao,r=n==="dark",t=r?fe(o,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):o,s=z(t,m.LADDER_DELTAS.sunken),a=r?Oo(J(t)??0):0,c=i(u=>m.LADDER_DELTAS[u]+a*m.DARK_ELEVATION_BOOST[u],"delta");return{canvas:t,sunken:r?fe(s,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):s,paper:z(t,c("paper")),raised:z(t,c("raised")),overlay:z(t,c("overlay")),scrim:r?e.deepLight??$e:e.neutral?.["180"]??e.baseDark??$e}}i(Go,"deriveSurface");function No(e,n){let o=e.baseDark??$e,r=fe(_n(q(o,n.paper,m.MIN_CONTRAST_AA),n.paper,m.INK_APCA_MIN.primary),{max:m.HALATION_FLOORS.INK_MAX_L}),t=i((s,a)=>_n(q(p(r,n.canvas,s),n.paper,m.MIN_CONTRAST_AA),n.paper,a),"tier");return{primary:r,secondary:t(m.INK_MIX.secondary,m.INK_APCA_MIN.secondary),muted:t(m.INK_MIX.muted,m.INK_APCA_MIN.muted),disabled:p(r,n.canvas,m.INK_MIX.disabled)}}i(No,"deriveInk");function jo(e){return{hairline:F(e.primary,m.EDGE_ALPHA.hairline),border:F(e.primary,m.EDGE_ALPHA.border),strong:F(e.primary,m.EDGE_ALPHA.strong)}}i(jo,"deriveEdge");function Fo(e,n){let o=m.WASH_ALPHA[n];return{hover:F(e.primary,o.hover),pressed:F(e.primary,o.pressed),selected:F(e.primary,o.selected)}}i(Fo,"deriveWash");function Po(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}i(Po,"applyOverride");function Bn(e,n){let o=Lo(e),r=Go(e,o),t=No(e,r),s={surface:r,ink:t,edge:jo(t),wash:Fo(t,o)};return Po(s,n?.[o])}i(Bn,"resolveSurfaceLadder");function _o(e){let n=Pn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Fn(e),...Bn({...e,neutral:n},e.ladder),main:T(e.main,e),opposite:T(e.opposite,e),complementary:T(e.complementary,e),danger:T(e.danger,e),information:T(e.information,e),success:T(e.success,e),warning:T(e.warning,e),primary:T(e.primary,e),secondary:T(e.secondary,e),tertiary:T(e.tertiary,e)}}i(_o,"composeColors");function N(e,n=Kn.defaultInputSpacing){let o=e.mode==="dark"?(0,zn.toDarkColors)(e.colors):e.colors,r=_o(o),t=Q(n,e.dimension),s=(0,Hn.createSemantic)({colors:r,spacing:t}),a=(0,Ce.createFoundation)(s);return e.surface==="negative"&&(a=(0,Ce.createFoundation)((0,Wn.invertForSurface)({semantic:s,colors:r},"negative").semantic)),{foundation:a,colors:r}}i(N,"buildVariantThemes");async function Bo(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,s=ce(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await(0,x.mkdtemp)((0,A.join)((0,Jn.tmpdir)(),"apollion-tokens-"));try{let u=[],g=i(async(l,d)=>{await Ho(c,l,d),u.push({path:l,sha256:ue(d)}),t&&console.log(` \u2713 ${l}`)},"emit");if(a.json){let l=Ln(n),d=[],b=an();d.push(b),await g(l.base.file,In(b));for(let f of l.spacing){let I=s.find(U=>U.dimension===f.dimension),{foundation:L}=N(I),O=ln(L,f.dimension);d.push(O),await g(f.file,Sn(O,f.dimension))}for(let f of l.font){let I=cn(f.dimension);d.push(I),await g(f.file,vn(I,f.dimension))}for(let f of l.color){let I=s.find(me=>me.brand===f.brand&&me.mode===f.mode&&me.surface===f.surface),{foundation:L,colors:O}=N(I),U=un(L,O);d.push(U),await g(f.file,xn(U,f.brand,f.mode,f.surface))}en(d),await g(An,Dn(n,l))}if(a.css||a.ts)for(let l of s){let{foundation:d,colors:b}=N(l),f=B(d,b,l),I=$n(l);a.css&&await g(`css/${I}.css`,hn(f,{rgbCompanions:a.tailwind})),a.ts&&await g(`ts/${I}.d.ts`,Tn(f))}if(a.cssModes){let l=new Map;for(let d of s){let b=`${d.brand}.${d.surface}.${d.dimension}`,f=l.get(b)??{};f[d.mode]=d,l.set(b,f)}for(let[d,{light:b,dark:f}]of l){if(!b||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${d} (config.modes)`);let I=N(b),L=N(f),O=bn(B(I.foundation,I.colors,b),B(L.foundation,L.colors,f),{rgbCompanions:a.tailwind});await g(`css/${d}.modes.css`,O)}}if(a.tailwind){let l=s[0],{foundation:d,colors:b}=N(l),f=B(d,b,l);await g("tailwind/preset.mjs",mn(f)),await g("tailwind/tw-merge.mjs",gn(f))}if(a.designMd){let l=[...new Set(s.map(d=>d.brand))];for(let d of l){let f=s.filter(I=>I.brand===d).map(I=>{let{foundation:L,colors:O}=N(I);return B(L,O,I)});await g(`design/${d}.design.md`,Rn(d,f))}}let k={configHash:we(n),files:u,gitCommit:Vn(r),buildEnv:Mn()},D=En(k);return await(0,x.writeFile)((0,A.join)(c,"manifest.json"),D),await(0,x.rm)(o,{recursive:!0,force:!0}),await(0,x.mkdir)((0,A.dirname)(o),{recursive:!0}),await(0,x.rename)(c,o),t&&console.log(`\u2713 ${u.length} files \u2192 ${o}`),{manifest:k,outDir:o}}catch(u){throw await(0,x.rm)(c,{recursive:!0,force:!0}).catch(()=>{}),u}}i(Bo,"build");async function zo(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await(0,x.readFile)((0,A.join)(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==we(n))return!1;for(let t of r.files){let s;try{s=await(0,x.readFile)((0,A.join)(o,t.path))}catch{return!1}if(ue(s)!==t.sha256)return!1}return!0}i(zo,"check");async function Ho(e,n,o){let r=(0,A.join)(e,n);await(0,x.mkdir)((0,A.dirname)(r),{recursive:!0}),await(0,x.writeFile)(r,o)}i(Ho,"writeAt");0&&(module.exports={build,check});
package/lib/build.esm.js CHANGED
@@ -1,12 +1,12 @@
1
- var Bn=Object.defineProperty;var s=(e,n)=>Bn(e,"name",{value:n,configurable:!0}),Hn=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{mkdir as Fn,mkdtemp as Yo,readFile as Nn,rename as Zo,rm as jn,writeFile as Pn}from"node:fs/promises";import{tmpdir as Qo}from"node:os";import{dirname as _n,join as z}from"node:path";import{converter as po,parse as fo}from"culori";import{defaultInputBorder as X}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as qn}from"@apollion-dsi/core/themes/colors";import{createDeth as Xn,levelValues as Un}from"@apollion-dsi/core/themes/depth";import{createFont as Yn,defaultInputFont as O}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ve}from"@apollion-dsi/core/themes/spacing";import{converter as Zn,formatHex as Qn,parse as eo}from"culori";import{defaultInputBreakpoints as Wn}from"@apollion-dsi/core/themes/breakpoints";function De(e=Wn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(De,"breakpointEntries");import{defaultInputContainerSizes as zn,defaultInputLayout as Jn}from"@apollion-dsi/core/themes/layout";function $e(e=zn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s($e,"containerSizeEntries");function Ce(e=Jn){return[["page-max-width",`${e.pageMaxWidth}px`]]}s(Ce,"layoutEntries");import{DIMENSION_MULTIPLIERS as Kn}from"@apollion-dsi/core/themes/dimension";function K({multiplier:e=.25,alias:n},o){let r=o!==void 0?Kn[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(K,"createSpacing");var de={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ue(e){let n=Object.keys(de).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}s(ue,"assertTokenMetaResolves");var no=Zn("oklch");function h(e){return typeof e.type=="string"&&"value"in e}s(h,"isToken");function I(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(I,"kebab");function Ae(e){return e.split(".").map(I).join(".")}s(Ae,"kebabPath");function T(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(T,"rawValue");function q(e,n){return Number(e.toFixed(n))||0}s(q,"round");function pe(e){let n=no(eo(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[q(n.l,4),q(n.c,4),q(n.h??0,2)],r=Qn(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:q(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(pe,"toColorValue");var Le=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function w(e){let n=Le.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}s(w,"toDimensionValue");function k(e){return{type:"color",value:pe(e)}}s(k,"colorToken");function E(e){let n={};for(let[o,r]of Object.entries(e))n[o]=k(r);return n}s(E,"recordColorGroup");function Oe(e){let n=qn(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=k(t);return o.neutral=E(n.neutral),o}s(Oe,"buildReadableTextGroup");var oo=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function Ee(e){let n={};for(let o of oo){let r=e[o];n[o]={base:k(r.base),dark:k(r.dark),action:k(r.action),active:k(r.active),light:k(r.light),onLight:k(r.onLight)}}return n.grayscale=E(e.grayscale),n.neutral=E(e.neutral),n.surface=E(e.surface),n.ink=E(e.ink),n.edge=E(e.edge),n.wash=E(e.wash),n.baseDark=k(e.baseDark??"#000000"),n.baseLight=k(e.baseLight??"#ffffff"),n.deepDark=k(e.deepDark??"#000000"),n.deepLight=k(e.deepLight??"#ffffff"),n}s(Ee,"buildColorPrimitives");function Me(e){let n=K(Ve,e),o={};for(let r of Object.keys(Ve.alias))o[r]={type:"dimension",value:w(n(r))};return o}s(Me,"buildSpacePrimitives");function Ge(){let e={};for(let[n,o]of Object.entries(X.borderWidth))e[n]={type:"dimension",value:w(o)};return e}s(Ge,"buildBorderWidthPrimitives");function ro(e,n){return{color:Ee(e),space:Me(n),borderWidth:Ge()}}s(ro,"buildPrimitives");var Ne={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},je={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},Fe={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function to(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}s(to,"lookupPrimitive");function N(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?to(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:pe(i)}}:k(i)}return r}s(N,"colorRefGroup");var Pe={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},io={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function so(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let i of o.slice(1))if(t&&!h(t)&&i in t)t=t[i];else return;return t&&h(t)&&t.value.kind==="dimension"?t.value.raw:void 0}s(so,"lookupDimensionPrimitive");function fe(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?so(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:w(i)}}:{type:"dimension",value:w(i)}}return r}s(fe,"dimensionRefGroup");function _e(e){let n={},o={};for(let[i,a]of Object.entries(X.borderRadius))Le.test(a)?n[i]={type:"dimension",value:w(a)}:o[i]=a;let r=fe(X.borderWidth,e,io),t={};for(let[i,a]of Object.entries(X.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(_e,"buildBorder");function Be(e){let n=Yn(O,e),o={};for(let[c,l]of Object.entries(O.fontFamily)){let m=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:w(l)};let t={};for(let[c,l]of Object.entries(O.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(O.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:O.letterSpacing,textTransform:O.textTransform,fontStyle:O.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(Be,"buildFont");var ao=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function co(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(ao),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>w(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:pe(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(co,"parseShadow");function He(e){let n=Xn(e),o={};for(let r of Object.keys(Un))o[r]={type:"shadow",value:co(n(r))};return o}s(He,"buildShadow");function U(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${I(t)}`:I(t);if(h(i)){o.add(a);let c=de[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...i,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:i}else r[t]=U(i,a,o)}return r}s(U,"decorateGroup");function lo(e){let n=new Set,o=U(e.primitives,"",n),r=U(e.groups,"",n);return ue(n),{...e,primitives:o,groups:r}}s(lo,"decorateMeta");function Y(e,n){return U(e,"",n)}s(Y,"decorateSlice");function We(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${I(r)}`:I(r);h(t)?o.add(i):We(t,i,o)}}s(We,"collectPaths");function ze(e){let n=new Set;for(let o of e)We(o.groups,"",n);ue(n)}s(ze,"assertSlicesMetaComplete");function Je(){let e={};for(let[n,o]of De())e[n]={type:"dimension",value:w(o)};return e}s(Je,"buildBreakpoints");function Ke(){let e={};for(let[n,o]of $e())e[n]={type:"dimension",value:w(o)};return e}s(Ke,"buildContainerSizes");function qe(){let e={};for(let[n,o]of Ce())e[n]={type:"dimension",value:w(o)};return e}s(qe,"buildLayoutConstants");var Xe={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function Ue(){let e=Ge(),o=_e({borderWidth:e}),r={"com.apollion.breakpoint":Xe};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:Y({"border-width":e,border:o.group,breakpoint:Je(),"container-size":Ke(),layout:qe()},t),extensions:r}}s(Ue,"buildBaseIR");function Ye(e){let n=Be(e),o=new Set;return{groups:Y({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(Ye,"buildFontIR");function Ze(e,n){let o=Ee(n),r=new Set;return{groups:Y({color:o,bg:N(e.bg,n,Ne),text:N(e.text,n,je),edge:N(e.edge,n,Fe),tx:Oe(n),shadow:He(n)},r),extensions:{}}}s(Ze,"buildColorIR");function Qe(e,n){let o=Me(n),r={space:o},t=new Set;return{groups:Y({space:o,spacing:fe(e.spacing,r,Pe)},t),extensions:{}}}s(Qe,"buildSpacingIR");function uo(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=ro(n,o.dimension),i=_e(t),a=Be(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":Xe};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:N(e.bg,n,Ne),text:N(e.text,n,je),edge:N(e.edge,n,Fe),tx:Oe(n),spacing:fe(e.spacing,t,Pe),border:i.group,breakpoint:Je(),"container-size":Ke(),layout:qe(),font:a.group,shadow:He(n)},extensions:c};return lo(l)}s(uo,"buildIR");var j=uo;var mo=po("rgb"),en="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function me(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(me,"colorPayload");function ge(e){return e.alpha===void 0}s(ge,"isOpaqueColor");function nn(e){let n=mo(fo(e.hex));if(!n)return"0 0 0";let o=s(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}s(nn,"rgbTriplet");function P(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];if(h(t))o.set(i.join("-"),t);else for(let[a,c]of P(t,i))o.set(a,c)}return o}s(P,"flatTokens");function y(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||h(o))return{};o=o[r]}return o&&!h(o)?o:{}}s(y,"groupAt");function on(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of P(y(e.groups,o),[o])){let i=me(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:ge(i)})}return n}s(on,"colorEntries");function V(e,n){return[...P(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s(V,"varEntries");function D(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}s(D,"pushScale");function rn(e){let n=[en,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=on(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:i}of o)i?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),D(n,"screens",[...P(y(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,T(t.value)])),D(n,"spacing",V(y(e.groups,"spacing"),["spacing"])),D(n,"borderRadius",V(y(e.groups,"border","radius"),["border","radius"])),D(n,"borderWidth",V(y(e.groups,"border","width"),["border","width"])),D(n,"fontFamily",V(y(e.groups,"font","family"),["font","family"])),D(n,"fontSize",V(y(e.groups,"font","size"),["font","size"])),D(n,"fontWeight",V(y(e.groups,"font","weight"),["font","weight"])),D(n,"lineHeight",V(y(e.groups,"font","lineHeight"),["font","line-height"])),D(n,"boxShadow",V(y(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
2
- `)}s(rn,"renderTailwindPreset");function tn(e){let n=s(t=>[...P(t).keys()],"keys"),o=s(t=>`[${t.map(i=>JSON.stringify(i)).join(", ")}]`,"list");return[en,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(on(e).map(t=>t.key))},`,` spacing: ${o(n(y(e.groups,"spacing")))},`,` borderRadius: ${o(n(y(e.groups,"border","radius")))},`,` borderWidth: ${o(n(y(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(y(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(y(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(y(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(y(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(y(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
3
- `)}s(tn,"renderTwMergeExtension");var sn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function Z(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];h(t)?o.push(` --apollion-${i.join("-")}: ${T(t.value)};`):Z(t,i,o)}}s(Z,"emitVars");function Q(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];if(!h(t)){Q(t,i,o);continue}let a=me(t);a&&ge(a)&&o.push(` --apollion-${i.join("-")}-rgb: ${nn(a)};`)}}s(Q,"emitRgbVars");function he(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];h(t)?t.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${T(t.value)}; }`):he(t,i,o)}}s(he,"emitProperties");function an(e,n={}){let{brand:o,mode:r,surface:t,dimension:i}=e.meta,a=[sn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${i} */`,"",":root {"),Z(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),Q(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),he(e.groups,[],a),a.push("}",""),a.join(`
4
- `)}s(an,"renderCss");function cn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:i,surface:a,dimension:c}=e.meta,l=[sn,""],m=s((S,d,u)=>{l.push(`${S} {`,` color-scheme: ${u};`),Z(d.groups,[],l),t&&Q(d.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${i} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),m(`:root, html[${r}="light"]`,e,"light"),m(`html[${r}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${r}]) {`," color-scheme: dark;");let b=[];Z(n.groups,[],b),t&&Q(n.groups,[],b);for(let S of b)l.push(` ${S}`);return l.push(" }","}",""),l.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),he(e.groups,[],l),l.push("}",""),l.join(`
5
- `)}s(cn,"renderCssModes");var go="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function ye(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${r}`:r;h(t)?o.push([i,T(t.value)]):ye(t,i,o)}}s(ye,"flatten");function ho(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}s(ho,"yamlEscape");function yo(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}s(yo,"variantKey");function ln(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let i=[];ye(t.groups,"",i),o.push(` ${yo(t)}:`);for(let[a,c]of i)o.push(` ${a}: ${ho(c)}`)}o.push("---");let r=["",go,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:i,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${i} \xB7 ${a} \xB7 ${c}\``,"");let l=[];ye(t.groups,"",l);let m=new Map;for(let[b,S]of l){let d=b.split(".")[0]??b,u=m.get(d)??[];u.push([b,S]),m.set(d,u)}for(let[b,S]of m){r.push(`### ${b}`,"","| Token | Value |","| --- | --- |");for(let[d,u]of S)r.push(`| \`${d}\` | \`${u}\` |`);r.push("")}}return`${o.join(`
1
+ var Xn=Object.defineProperty;var i=(e,n)=>Xn(e,"name",{value:n,configurable:!0}),Un=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{mkdir as Wn,mkdtemp as sr,readFile as Hn,rename as ar,rm as Kn,writeFile as Jn}from"node:fs/promises";import{tmpdir as cr}from"node:os";import{dirname as qn,join as K}from"node:path";import{converter as Ro,parse as ko}from"culori";import{defaultInputBorder as Y}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as no}from"@apollion-dsi/core/themes/colors";import{createDeth as oo,levelValues as ro}from"@apollion-dsi/core/themes/depth";import{createFont as to,defaultInputFont as A}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ge}from"@apollion-dsi/core/themes/spacing";import{converter as io,formatHex as so,parse as ao}from"culori";import{defaultInputBreakpoints as Yn}from"@apollion-dsi/core/themes/breakpoints";function Ce(e=Yn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ce,"breakpointEntries");import{defaultInputContainerSizes as Zn,defaultInputLayout as Qn}from"@apollion-dsi/core/themes/layout";function Ve(e=Zn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ve,"containerSizeEntries");function Me(e=Qn){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(Me,"layoutEntries");import{createMotion as J,defaultInputMotion as q}from"@apollion-dsi/core/themes/motion";function Ee(e=q){let n=J(e);return Object.keys(e.duration).map(o=>[o,{ms:e.duration[o],css:n.duration[o]}])}i(Ee,"motionDurationEntries");function Ae(e=q){let n=J(e);return Object.keys(e.easing).map(o=>[o,{points:e.easing[o],css:n.easing[o]}])}i(Ae,"motionEasingEntries");function Le(e=q){let n=J(e);return Object.keys(e.indicator).map(o=>[o,{ms:e.indicator[o],css:n.indicator[o]}])}i(Le,"motionIndicatorEntries");function Oe(e=q){let n=J(e);return Object.keys(e.intent).map(o=>{let r=e.intent[o],t=typeof r.duration=="number"?null:r.duration,s=typeof r.duration=="number"?r.duration:e.duration[r.duration];return[o,{durationRef:t,duration:{ms:s,css:n.intent[o].duration},easingRef:r.easing,easing:{points:e.easing[r.easing],css:n.intent[o].easing}}]})}i(Oe,"motionIntentEntries");import{DIMENSION_MULTIPLIERS as eo}from"@apollion-dsi/core/themes/dimension";function X({multiplier:e=.25,alias:n},o){let r=o!==void 0?eo[o]:e;return(...t)=>t.map(s=>{let a=typeof s=="string"?n[s]:s;return`${r*a}rem`}).join(" ")}i(X,"createSpacing");var pe={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function fe(e){let n=Object.keys(pe).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}i(fe,"assertTokenMetaResolves");var co=io("oklch");function h(e){return typeof e.type=="string"&&"value"in e}i(h,"isToken");function I(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(I,"kebab");function Ne(e){return e.split(".").map(I).join(".")}i(Ne,"kebabPath");function $(e){return e.kind==="ref"?e.resolved.raw:e.raw}i($,"rawValue");function U(e,n){return Number(e.toFixed(n))||0}i(U,"round");function me(e){let n=co(ao(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[U(n.l,4),U(n.c,4),U(n.h??0,2)],r=so(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:U(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}i(me,"toColorValue");var je=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function w(e){let n=je.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}i(w,"toDimensionValue");function k(e){return{type:"color",value:me(e)}}i(k,"colorToken");function L(e){let n={};for(let[o,r]of Object.entries(e))n[o]=k(r);return n}i(L,"recordColorGroup");function Fe(e){let n=no(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=k(t);return o.neutral=L(n.neutral),o}i(Fe,"buildReadableTextGroup");var uo=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function Pe(e){let n={};for(let o of uo){let r=e[o];n[o]={base:k(r.base),dark:k(r.dark),action:k(r.action),active:k(r.active),light:k(r.light),onLight:k(r.onLight)}}return n.grayscale=L(e.grayscale),n.neutral=L(e.neutral),n.surface=L(e.surface),n.ink=L(e.ink),n.edge=L(e.edge),n.wash=L(e.wash),n.baseDark=k(e.baseDark??"#000000"),n.baseLight=k(e.baseLight??"#ffffff"),n.deepDark=k(e.deepDark??"#000000"),n.deepLight=k(e.deepLight??"#ffffff"),n}i(Pe,"buildColorPrimitives");function _e(e){let n=X(Ge,e),o={};for(let r of Object.keys(Ge.alias))o[r]={type:"dimension",value:w(n(r))};return o}i(_e,"buildSpacePrimitives");function Be(){let e={};for(let[n,o]of Object.entries(Y.borderWidth))e[n]={type:"dimension",value:w(o)};return e}i(Be,"buildBorderWidthPrimitives");function lo(e,n){return{color:Pe(e),space:_e(n),borderWidth:Be()}}i(lo,"buildPrimitives");var ze={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},He={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},Ke={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function po(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}i(po,"lookupPrimitive");function N(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?po(n,a):void 0;r[t]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:me(s)}}:k(s)}return r}i(N,"colorRefGroup");var We={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},fo={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function mo(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let s of o.slice(1))if(t&&!h(t)&&s in t)t=t[s];else return;return t&&h(t)&&t.value.kind==="dimension"?t.value.raw:void 0}i(mo,"lookupDimensionPrimitive");function ge(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?mo(n,a):void 0;r[t]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:w(s)}}:{type:"dimension",value:w(s)}}return r}i(ge,"dimensionRefGroup");function Je(e){let n={},o={};for(let[s,a]of Object.entries(Y.borderRadius))je.test(a)?n[s]={type:"dimension",value:w(a)}:o[s]=a;let r=ge(Y.borderWidth,e,fo),t={};for(let[s,a]of Object.entries(Y.borderStyle))t[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}i(Je,"buildBorder");function qe(e){let n=to(A,e),o={};for(let[c,u]of Object.entries(A.fontFamily)){let m=u.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let r={};for(let[c,u]of Object.entries(n.fontSize))r[c]={type:"dimension",value:w(u)};let t={};for(let[c,u]of Object.entries(A.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${u}`,weight:u}};let s={};for(let[c,u]of Object.entries(A.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${u}`,number:u}};let a={letterSpacing:A.letterSpacing,textTransform:A.textTransform,fontStyle:A.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:s},extensions:a}}i(qe,"buildFont");var go=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function yo(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(go),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=i(u=>w(a[u]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:me(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(yo,"parseShadow");function Xe(e){let n=oo(e),o={};for(let r of Object.keys(ro))o[r]={type:"shadow",value:yo(n(r))};return o}i(Xe,"buildShadow");function Z(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=n?`${n}.${I(t)}`:I(t);if(h(s)){o.add(a);let c=pe[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...s,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:s}else r[t]=Z(s,a,o)}return r}i(Z,"decorateGroup");function ho(e){let n=new Set,o=Z(e.primitives,"",n),r=Z(e.groups,"",n);return fe(n),{...e,primitives:o,groups:r}}i(ho,"decorateMeta");function Q(e,n){return Z(e,"",n)}i(Q,"decorateSlice");function Ue(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${I(r)}`:I(r);h(t)?o.add(s):Ue(t,s,o)}}i(Ue,"collectPaths");function Ye(e){let n=new Set;for(let o of e)Ue(o.groups,"",n);fe(n)}i(Ye,"assertSlicesMetaComplete");function Ze(){let e={};for(let[n,o]of Ce())e[n]={type:"dimension",value:w(o)};return e}i(Ze,"buildBreakpoints");function Qe(){let e={};for(let[n,o]of Ve())e[n]={type:"dimension",value:w(o)};return e}i(Qe,"buildContainerSizes");function en(){let e={};for(let[n,o]of Me())e[n]={type:"dimension",value:w(o)};return e}i(en,"buildLayoutConstants");function nn(){let e=i(a=>({type:"duration",value:{kind:"duration",raw:a.css,value:a.ms,unit:"ms"}}),"durationToken"),n=i(a=>({type:"cubicBezier",value:{kind:"cubicBezier",raw:a.css,points:a.points}}),"easingToken"),o={};for(let[a,c]of Ee())o[a]=e(c);let r={};for(let[a,c]of Ae())r[a]=n(c);let t={};for(let[a,c]of Le())t[a]=e(c);let s={};for(let[a,c]of Oe()){let u=e(c.duration).value;s[a]={duration:c.durationRef?{type:"duration",value:{kind:"ref",path:`motion.duration.${c.durationRef}`,resolved:u}}:e(c.duration),easing:{type:"cubicBezier",value:{kind:"ref",path:`motion.easing.${c.easingRef}`,resolved:n(c.easing).value}}}}return{duration:o,easing:r,indicator:t,intent:s}}i(nn,"buildMotion");var on={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function rn(){let e=Be(),o=Je({borderWidth:e}),r={"com.apollion.breakpoint":on};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:Q({"border-width":e,border:o.group,breakpoint:Ze(),"container-size":Qe(),layout:en(),motion:nn()},t),extensions:r}}i(rn,"buildBaseIR");function tn(e){let n=qe(e),o=new Set;return{groups:Q({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(tn,"buildFontIR");function sn(e,n){let o=Pe(n),r=new Set;return{groups:Q({color:o,bg:N(e.bg,n,ze),text:N(e.text,n,He),edge:N(e.edge,n,Ke),tx:Fe(n),shadow:Xe(n)},r),extensions:{}}}i(sn,"buildColorIR");function an(e,n){let o=_e(n),r={space:o},t=new Set;return{groups:Q({space:o,spacing:ge(e.spacing,r,We)},t),extensions:{}}}i(an,"buildSpacingIR");function bo(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=lo(n,o.dimension),s=Je(t),a=qe(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":on};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let u={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:N(e.bg,n,ze),text:N(e.text,n,He),edge:N(e.edge,n,Ke),tx:Fe(n),spacing:ge(e.spacing,t,We),border:s.group,breakpoint:Ze(),"container-size":Qe(),layout:en(),motion:nn(),font:a.group,shadow:Xe(n)},extensions:c};return ho(u)}i(bo,"buildIR");var j=bo;var Io=Ro("rgb"),cn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function ye(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(ye,"colorPayload");function he(e){return e.alpha===void 0}i(he,"isOpaqueColor");function un(e){let n=Io(ko(e.hex));if(!n)return"0 0 0";let o=i(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}i(un,"rgbTriplet");function P(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];if(h(t))o.set(s.join("-"),t);else for(let[a,c]of P(t,s))o.set(a,c)}return o}i(P,"flatTokens");function g(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||h(o))return{};o=o[r]}return o&&!h(o)?o:{}}i(g,"groupAt");function ln(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of P(g(e.groups,o),[o])){let s=ye(t);s&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:he(s)})}return n}i(ln,"colorEntries");function T(e,n){return[...P(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(T,"varEntries");function v(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}i(v,"pushScale");function dn(e){let n=[cn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=ln(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:s}of o)s?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),v(n,"screens",[...P(g(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,$(t.value)])),v(n,"spacing",T(g(e.groups,"spacing"),["spacing"])),v(n,"borderRadius",T(g(e.groups,"border","radius"),["border","radius"])),v(n,"borderWidth",T(g(e.groups,"border","width"),["border","width"])),v(n,"fontFamily",T(g(e.groups,"font","family"),["font","family"])),v(n,"fontSize",T(g(e.groups,"font","size"),["font","size"])),v(n,"fontWeight",T(g(e.groups,"font","weight"),["font","weight"])),v(n,"lineHeight",T(g(e.groups,"font","lineHeight"),["font","line-height"])),v(n,"boxShadow",T(g(e.groups,"shadow"),["shadow"])),v(n,"transitionDuration",T(g(e.groups,"motion","duration"),["motion","duration"])),v(n,"transitionTimingFunction",T(g(e.groups,"motion","easing"),["motion","easing"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
2
+ `)}i(dn,"renderTailwindPreset");function pn(e){let n=i(t=>[...P(t).keys()],"keys"),o=i(t=>`[${t.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[cn,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(ln(e).map(t=>t.key))},`,` spacing: ${o(n(g(e.groups,"spacing")))},`,` borderRadius: ${o(n(g(e.groups,"border","radius")))},`,` borderWidth: ${o(n(g(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(g(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(g(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(g(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(g(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(g(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
3
+ `)}i(pn,"renderTwMergeExtension");var fn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function ee(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];h(t)?o.push(` --apollion-${s.join("-")}: ${$(t.value)};`):ee(t,s,o)}}i(ee,"emitVars");function ne(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];if(!h(t)){ne(t,s,o);continue}let a=ye(t);a&&he(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${un(a)};`)}}i(ne,"emitRgbVars");function be(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];h(t)?t.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${$(t.value)}; }`):be(t,s,o)}}i(be,"emitProperties");function mn(e,n={}){let{brand:o,mode:r,surface:t,dimension:s}=e.meta,a=[fn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${s} */`,"",":root {"),ee(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),ne(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),be(e.groups,[],a),a.push("}",""),a.join(`
4
+ `)}i(mn,"renderCss");function gn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:s,surface:a,dimension:c}=e.meta,u=[fn,""],m=i((S,l,d)=>{u.push(`${S} {`,` color-scheme: ${d};`),ee(l.groups,[],u),t&&ne(l.groups,[],u),u.push("}","")},"block");u.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),m(`:root, html[${r}="light"]`,e,"light"),m(`html[${r}="dark"]`,n,"dark"),u.push("@media (prefers-color-scheme: dark) {"),u.push(` html:not([${r}]) {`," color-scheme: dark;");let b=[];ee(n.groups,[],b),t&&ne(n.groups,[],b);for(let S of b)u.push(` ${S}`);return u.push(" }","}",""),u.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),be(e.groups,[],u),u.push("}",""),u.join(`
5
+ `)}i(gn,"renderCssModes");var xo="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Re(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${r}`:r;h(t)?o.push([s,$(t.value)]):Re(t,s,o)}}i(Re,"flatten");function So(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(So,"yamlEscape");function vo(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}i(vo,"variantKey");function yn(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let s=[];Re(t.groups,"",s),o.push(` ${vo(t)}:`);for(let[a,c]of s)o.push(` ${a}: ${So(c)}`)}o.push("---");let r=["",xo,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:s,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${s} \xB7 ${a} \xB7 ${c}\``,"");let u=[];Re(t.groups,"",u);let m=new Map;for(let[b,S]of u){let l=b.split(".")[0]??b,d=m.get(l)??[];d.push([b,S]),m.set(l,d)}for(let[b,S]of m){r.push(`### ${b}`,"","| Token | Value |","| --- | --- |");for(let[l,d]of S)r.push(`| \`${l}\` | \`${d}\` |`);r.push("")}}return`${o.join(`
6
6
  `)}
7
7
  ${r.join(`
8
- `)}`}s(ln,"renderDesignMd");function dn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(dn,"colorValue");function _(e){return{value:e.value,unit:e.unit}}s(_,"dimensionValue");function bo(e){let n=e.shadow,o={color:dn(n.color),offsetX:_(n.offsetX),offsetY:_(n.offsetY),blur:_(n.blur),spread:_(n.spread)};return n.inset&&(o.inset=!0),o}s(bo,"shadowValue");function Ro(e){switch(e.kind){case"ref":return`{${Ae(e.path)}}`;case"color":return dn(e);case"dimension":return _(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return bo(e)}}s(Ro,"projectValue");function ko(e){let n={$value:Ro(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(ko,"projectToken");function be(e){let n={};for(let[o,r]of Object.entries(e))n[I(o)]=h(r)?ko(r):be(r);return n}s(be,"projectGroup");function ee(e,n){let o={$description:n,...be(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
9
- `}s(ee,"renderSet");function un(e){return ee(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(un,"renderBaseSet");function pn(e,n,o,r){return ee(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}s(pn,"renderColorSet");function fn(e,n){return ee(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s(fn,"renderSpacingSet");function mn(e,n){return ee(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(mn,"renderFontSet");function gn(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(i,null,2)}
10
- `}s(gn,"renderResolver");var Io="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function xo(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}s(xo,"emitDoc");function hn(e,n,o){let r=" ".repeat(n);for(let[t,i]of Object.entries(e))h(i)?(xo(i,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(T(i.value))},`)):(o.push(`${r}${t}: {`),hn(i,n+1,o),o.push(`${r}},`))}s(hn,"emitGroup");function yn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,i=[Io,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return hn(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
11
- `)}s(yn,"renderTs");var So=["light","dark"],vo=["positive","negative"],wo=["compact","normal","spacious"];function ne(e){let n=e.modes??So,o=e.surfaces??vo,r=e.dimensions??wo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of t)for(let l of n)for(let m of o)for(let b of r)i.push({brand:a,colors:c,mode:l,surface:m,dimension:b});return i}s(ne,"expandVariants");function bn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(bn,"variantName");import{createHash as To}from"node:crypto";function oe(e){return To("sha256").update(e).digest("hex")}s(oe,"sha256");function ke(e){return oe(Re(e))}s(ke,"hashConfig");function Re(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Re).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Re(e[r])}`).join(",")}}`}s(Re,"stableStringify");function Rn(e){try{let{execSync:n}=Hn("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(Rn,"detectGitCommit");function kn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(kn,"buildEnv");function In(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
12
- `}s(In,"serializeManifest");var Do="json/sets",xn="json/resolver.json";function re(e){return`${Do}/${e}.json`}s(re,"setFile");function $o(e,n,o){return`${e}.color.${n}.${o}`}s($o,"colorSetName");function Co(e){return`spacing.${e}`}s(Co,"spacingSetName");function Vo(e){return`font.${e}`}s(Vo,"fontSetName");function te(e,n){e.includes(n)||e.push(n)}s(te,"pushUnique");function Sn(e){let n=ne(e),o=[],r=[],t=[],i=[],a=new Set,c=[],l=new Set,m=[],b=new Set,S=[];for(let d of n){te(o,d.brand),te(r,d.mode),te(t,d.surface),te(i,d.dimension);let u=$o(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:re(u),brand:d.brand,mode:d.mode,surface:d.surface}));let g=Co(d.dimension);l.has(g)||(l.add(g),m.push({kind:"spacing",name:g,file:re(g),dimension:d.dimension}));let f=Vo(d.dimension);b.has(f)||(b.add(f),S.push({kind:"font",name:f,file:re(f),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:re("base")},spacing:m,font:S,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:i}}}s(Sn,"planSets");import{toDarkColors as Jo}from"@apollion-dsi/core/themes/colors";import{createFoundation as Gn}from"@apollion-dsi/core/themes/foundation";import{createSemantic as Ko}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as qo}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as Xo}from"@apollion-dsi/core/themes/surface";import{converter as $n,formatHex as M,interpolate as Ao,parse as x,wcagContrast as Cn}from"culori";var W=$n("oklch"),Lo=$n("rgb");function p(e,n,o){let r=x(e),t=x(n);if(!r||!t)return e;let i=Ao([r,t],"oklch");return M(i(o))??e}s(p,"mixOklch");function Oo(e){return e?typeof e=="string"?e:e.base:"#000"}s(Oo,"coerceToHex");var ie=1.3,Eo=.05,vn=.04,A=s((e,n)=>{let o=x(e),r=x(n);return!o||!r?1:Cn(o,r)},"contrastRatio"),B=s(e=>{let n=W(x(e));return n?n.l??0:null},"oklchLightness"),Mo=4.5;function H(e,n,o=Mo){let r=x(n),t=W(x(e));if(!r||!t)return e;let i=A("#fff",n)>=A("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=M(t)??e,l=x(c);if(l&&Cn(l,r)>=o)return c;let m=Math.min(1,Math.max(0,(t.l??0)+i));if(m===(t.l??0))break;t={...t,l:m}}return M(t)??e}s(H,"readableColor");var wn=s((e,n)=>{if(A(e,n)>=ie)return!0;let o=B(e),r=B(n);return o!==null&&r!==null&&Math.abs(o-r)>=Eo},"isPerceptibleState"),Ie=s(e=>e?A("#fff",e)>A("#000",e):!1,"isDarkSurface");function Tn(e,n,o){let r=W(x(e));if(!r)return null;let t={...r,l:o??r.l??0},i=n?vn:-vn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+i));if(c===(t.l??0))break;t={...t,l:c};let l=M(t);if(l&&A(e,l)>=ie)return l}return M(t)??null}s(Tn,"derivePerceptibleState");function Dn(e,n,o){let r=Tn(e,n,o);if(r&&A(e,r)>=ie)return r;let t=Tn(e,!n);return t&&A(e,t)>=ie?t:r??t}s(Dn,"perceptibleStateFor");function v(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Oo(e),t=n.deepDark,i=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,i,.6),light:p(r,i,.9),onLight:r};if(x(r)){let c=Ie(n.baseLight),l=wn(r,a.action);if(l||(a.action=Dn(r,c)??a.action),!wn(r,a.active)){let m=l?void 0:B(a.action)??void 0;a.active=Dn(r,c,m)??a.active}}if(a.onLight=H(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??H(c,l)}}return a}s(v,"mountSingleColor");function Vn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}s(Vn,"mountGreyscaleColors");function An(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=s(a=>1/17*(a-1),"interpolation"),i=p(r,o,.5);return{0:p(i,n,t(18)),5:p(i,n,t(17.5)),10:p(i,n,t(17)),20:p(i,n,t(16)),30:p(i,n,t(15)),40:p(i,n,t(14)),50:p(i,n,t(13)),60:p(i,n,t(12)),70:p(i,n,t(11)),80:p(i,n,t(10)),90:p(i,n,t(9)),100:p(i,n,t(8)),110:p(i,n,t(7)),120:p(i,n,t(6)),130:p(i,n,t(5)),140:p(i,n,t(4)),150:p(i,n,t(3)),160:p(i,n,t(2)),170:i,180:p(i,o,.25)}}s(An,"mountNeutralColors");function F(e,n){let o=W(x(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return M({...o,l:r})??e}s(F,"shiftLightness");function se(e,n){let o=W(x(e));if(!o)return e;let r=o.l??0,t=n.min??0,i=n.max??1;return r>=t&&r<=i?e:M({...o,l:Math.min(i,Math.max(t,r))})??e}s(se,"clampLightness");function G(e,n){let o=Lo(x(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=s(i=>Math.round((i??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}s(G,"toRgbaString");import{apcaContrast as ae,DARK_BOOST_TAPER_MAX_L as xe,DARK_ELEVATION_BOOST as Go,EDGE_ALPHA as Se,HALATION_FLOORS as ce,INK_APCA_MIN as ve,INK_MIX as we,LADDER_DELTAS as Ln,MIN_CONTRAST_AA as On,WASH_ALPHA as No}from"@apollion-dsi/core/themes/colors";var jo="#FFFFFF",Te="#000000";function Fo(e){return Ie(e.baseLight)?"dark":"light"}s(Fo,"resolvePolarity");function Po(e){let n=ce.CANVAS_MIN_L;return e<=n?1:e>=xe?0:(xe-e)/(xe-n)}s(Po,"darkElevationBoostFactor");function En(e,n,o){if(Math.abs(ae(e,n))>=o)return e;let r=Math.abs(ae("#ffffff",n))>=Math.abs(ae("#000000",n)),t=e;for(let i=0;i<40;i+=1){let a=F(t,r?.02:-.02);if(a===t||(t=a,Math.abs(ae(t,n))>=o))break}return t}s(En,"ensureApca");function _o(e,n){let o=e.baseLight??jo,r=n==="dark",t=r?se(o,{min:ce.CANVAS_MIN_L}):o,i=F(t,Ln.sunken),a=r?Po(B(t)??0):0,c=s(l=>Ln[l]+a*Go[l],"delta");return{canvas:t,sunken:r?se(i,{min:ce.CANVAS_MIN_L}):i,paper:F(t,c("paper")),raised:F(t,c("raised")),overlay:F(t,c("overlay")),scrim:r?e.deepLight??Te:e.neutral?.["180"]??e.baseDark??Te}}s(_o,"deriveSurface");function Bo(e,n){let o=e.baseDark??Te,r=se(En(H(o,n.paper,On),n.paper,ve.primary),{max:ce.INK_MAX_L}),t=s((i,a)=>En(H(p(r,n.canvas,i),n.paper,On),n.paper,a),"tier");return{primary:r,secondary:t(we.secondary,ve.secondary),muted:t(we.muted,ve.muted),disabled:p(r,n.canvas,we.disabled)}}s(Bo,"deriveInk");function Ho(e){return{hairline:G(e.primary,Se.hairline),border:G(e.primary,Se.border),strong:G(e.primary,Se.strong)}}s(Ho,"deriveEdge");function Wo(e,n){let o=No[n];return{hover:G(e.primary,o.hover),pressed:G(e.primary,o.pressed),selected:G(e.primary,o.selected)}}s(Wo,"deriveWash");function zo(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}s(zo,"applyOverride");function Mn(e,n){let o=Fo(e),r=_o(e,o),t=Bo(e,r),i={surface:r,ink:t,edge:Ho(t),wash:Wo(t,o)};return zo(i,n?.[o])}s(Mn,"resolveSurfaceLadder");function Uo(e){let n=An(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Vn(e),...Mn({...e,neutral:n},e.ladder),main:v(e.main,e),opposite:v(e.opposite,e),complementary:v(e.complementary,e),danger:v(e.danger,e),information:v(e.information,e),success:v(e.success,e),warning:v(e.warning,e),primary:v(e.primary,e),secondary:v(e.secondary,e),tertiary:v(e.tertiary,e)}}s(Uo,"composeColors");function L(e,n=qo){let o=e.mode==="dark"?Jo(e.colors):e.colors,r=Uo(o),t=K(n,e.dimension),i=Ko({colors:r,spacing:t}),a=Gn(i);return e.surface==="negative"&&(a=Gn(Xo({semantic:i,colors:r},"negative").semantic)),{foundation:a,colors:r}}s(L,"buildVariantThemes");async function Ct(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,i=ne(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await Yo(z(Qo(),"apollion-tokens-"));try{let l=[],m=s(async(d,u)=>{await er(c,d,u),l.push({path:d,sha256:oe(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=Sn(n),u=[],g=Ue();u.push(g),await m(d.base.file,un(g));for(let f of d.spacing){let R=i.find(J=>J.dimension===f.dimension),{foundation:$}=L(R),C=Qe($,f.dimension);u.push(C),await m(f.file,fn(C,f.dimension))}for(let f of d.font){let R=Ye(f.dimension);u.push(R),await m(f.file,mn(R,f.dimension))}for(let f of d.color){let R=i.find(le=>le.brand===f.brand&&le.mode===f.mode&&le.surface===f.surface),{foundation:$,colors:C}=L(R),J=Ze($,C);u.push(J),await m(f.file,pn(J,f.brand,f.mode,f.surface))}ze(u),await m(xn,gn(n,d))}if(a.css||a.ts)for(let d of i){let{foundation:u,colors:g}=L(d),f=j(u,g,d),R=bn(d);a.css&&await m(`css/${R}.css`,an(f,{rgbCompanions:a.tailwind})),a.ts&&await m(`ts/${R}.d.ts`,yn(f))}if(a.cssModes){let d=new Map;for(let u of i){let g=`${u.brand}.${u.surface}.${u.dimension}`,f=d.get(g)??{};f[u.mode]=u,d.set(g,f)}for(let[u,{light:g,dark:f}]of d){if(!g||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let R=L(g),$=L(f),C=cn(j(R.foundation,R.colors,g),j($.foundation,$.colors,f),{rgbCompanions:a.tailwind});await m(`css/${u}.modes.css`,C)}}if(a.tailwind){let d=i[0],{foundation:u,colors:g}=L(d),f=j(u,g,d);await m("tailwind/preset.mjs",rn(f)),await m("tailwind/tw-merge.mjs",tn(f))}if(a.designMd){let d=[...new Set(i.map(u=>u.brand))];for(let u of d){let f=i.filter(R=>R.brand===u).map(R=>{let{foundation:$,colors:C}=L(R);return j($,C,R)});await m(`design/${u}.design.md`,ln(u,f))}}let b={configHash:ke(n),files:l,gitCommit:Rn(r),buildEnv:kn()},S=In(b);return await Pn(z(c,"manifest.json"),S),await jn(o,{recursive:!0,force:!0}),await Fn(_n(o),{recursive:!0}),await Zo(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:b,outDir:o}}catch(l){throw await jn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(Ct,"build");async function Vt(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await Nn(z(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==ke(n))return!1;for(let t of r.files){let i;try{i=await Nn(z(o,t.path))}catch{return!1}if(oe(i)!==t.sha256)return!1}return!0}s(Vt,"check");async function er(e,n,o){let r=z(e,n);await Fn(_n(r),{recursive:!0}),await Pn(r,o)}s(er,"writeAt");export{Ct as build,Vt as check};
8
+ `)}`}i(yn,"renderDesignMd");function hn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}i(hn,"colorValue");function _(e){return{value:e.value,unit:e.unit}}i(_,"dimensionValue");function Do(e){return{value:e.value,unit:e.unit}}i(Do,"durationValue");function wo(e){return[...e.points]}i(wo,"cubicBezierValue");function To(e){let n=e.shadow,o={color:hn(n.color),offsetX:_(n.offsetX),offsetY:_(n.offsetY),blur:_(n.blur),spread:_(n.spread)};return n.inset&&(o.inset=!0),o}i(To,"shadowValue");function $o(e){switch(e.kind){case"ref":return`{${Ne(e.path)}}`;case"color":return hn(e);case"dimension":return _(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return To(e);case"duration":return Do(e);case"cubicBezier":return wo(e)}}i($o,"projectValue");function Co(e){let n={$value:$o(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(Co,"projectToken");function ke(e){let n={};for(let[o,r]of Object.entries(e))n[I(o)]=h(r)?Co(r):ke(r);return n}i(ke,"projectGroup");function oe(e,n){let o={$description:n,...ke(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
9
+ `}i(oe,"renderSet");function bn(e){return oe(e,"Apollion DS \u2014 base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.")}i(bn,"renderBaseSet");function Rn(e,n,o,r){return oe(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}i(Rn,"renderColorSet");function kn(e,n){return oe(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(kn,"renderSpacingSet");function In(e,n){return oe(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(In,"renderFontSet");function xn(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],s={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(s,null,2)}
10
+ `}i(xn,"renderResolver");var Vo="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Mo(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}i(Mo,"emitDoc");function Sn(e,n,o){let r=" ".repeat(n);for(let[t,s]of Object.entries(e))h(s)?(Mo(s,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify($(s.value))},`)):(o.push(`${r}${t}: {`),Sn(s,n+1,o),o.push(`${r}},`))}i(Sn,"emitGroup");function vn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,s=[Vo,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return Sn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
11
+ `)}i(vn,"renderTs");var Eo=["light","dark"],Ao=["positive","negative"],Lo=["compact","normal","spacious"];function re(e){let n=e.modes??Eo,o=e.surfaces??Ao,r=e.dimensions??Lo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of t)for(let u of n)for(let m of o)for(let b of r)s.push({brand:a,colors:c,mode:u,surface:m,dimension:b});return s}i(re,"expandVariants");function Dn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i(Dn,"variantName");import{createHash as Oo}from"node:crypto";function te(e){return Oo("sha256").update(e).digest("hex")}i(te,"sha256");function xe(e){return te(Ie(e))}i(xe,"hashConfig");function Ie(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Ie).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Ie(e[r])}`).join(",")}}`}i(Ie,"stableStringify");function wn(e){try{let{execSync:n}=Un("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}i(wn,"detectGitCommit");function Tn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(Tn,"buildEnv");function $n(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
12
+ `}i($n,"serializeManifest");var Go="json/sets",Cn="json/resolver.json";function ie(e){return`${Go}/${e}.json`}i(ie,"setFile");function No(e,n,o){return`${e}.color.${n}.${o}`}i(No,"colorSetName");function jo(e){return`spacing.${e}`}i(jo,"spacingSetName");function Fo(e){return`font.${e}`}i(Fo,"fontSetName");function se(e,n){e.includes(n)||e.push(n)}i(se,"pushUnique");function Vn(e){let n=re(e),o=[],r=[],t=[],s=[],a=new Set,c=[],u=new Set,m=[],b=new Set,S=[];for(let l of n){se(o,l.brand),se(r,l.mode),se(t,l.surface),se(s,l.dimension);let d=No(l.brand,l.mode,l.surface);a.has(d)||(a.add(d),c.push({kind:"color",name:d,file:ie(d),brand:l.brand,mode:l.mode,surface:l.surface}));let y=jo(l.dimension);u.has(y)||(u.add(y),m.push({kind:"spacing",name:y,file:ie(y),dimension:l.dimension}));let f=Fo(l.dimension);b.has(f)||(b.add(f),S.push({kind:"font",name:f,file:ie(f),dimension:l.dimension}))}return{base:{kind:"base",name:"base",file:ie("base")},spacing:m,font:S,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:s}}}i(Vn,"planSets");import{toDarkColors as nr}from"@apollion-dsi/core/themes/colors";import{createFoundation as zn}from"@apollion-dsi/core/themes/foundation";import{createSemantic as or}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as rr}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as tr}from"@apollion-dsi/core/themes/surface";import{converter as On,formatHex as O,interpolate as Po,parse as x,wcagContrast as Gn}from"culori";var H=On("oklch"),_o=On("rgb");function p(e,n,o){let r=x(e),t=x(n);if(!r||!t)return e;let s=Po([r,t],"oklch");return O(s(o))??e}i(p,"mixOklch");function Bo(e){return e?typeof e=="string"?e:e.base:"#000"}i(Bo,"coerceToHex");var ae=1.3,zo=.05,Mn=.04,M=i((e,n)=>{let o=x(e),r=x(n);return!o||!r?1:Gn(o,r)},"contrastRatio"),B=i(e=>{let n=H(x(e));return n?n.l??0:null},"oklchLightness"),Ho=4.5;function z(e,n,o=Ho){let r=x(n),t=H(x(e));if(!r||!t)return e;let s=M("#fff",n)>=M("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=O(t)??e,u=x(c);if(u&&Gn(u,r)>=o)return c;let m=Math.min(1,Math.max(0,(t.l??0)+s));if(m===(t.l??0))break;t={...t,l:m}}return O(t)??e}i(z,"readableColor");var En=i((e,n)=>{if(M(e,n)>=ae)return!0;let o=B(e),r=B(n);return o!==null&&r!==null&&Math.abs(o-r)>=zo},"isPerceptibleState"),Se=i(e=>e?M("#fff",e)>M("#000",e):!1,"isDarkSurface");function An(e,n,o){let r=H(x(e));if(!r)return null;let t={...r,l:o??r.l??0},s=n?Mn:-Mn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+s));if(c===(t.l??0))break;t={...t,l:c};let u=O(t);if(u&&M(e,u)>=ae)return u}return O(t)??null}i(An,"derivePerceptibleState");function Ln(e,n,o){let r=An(e,n,o);if(r&&M(e,r)>=ae)return r;let t=An(e,!n);return t&&M(e,t)>=ae?t:r??t}i(Ln,"perceptibleStateFor");function D(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Bo(e),t=n.deepDark,s=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,s,.6),light:p(r,s,.9),onLight:r};if(x(r)){let c=Se(n.baseLight),u=En(r,a.action);if(u||(a.action=Ln(r,c)??a.action),!En(r,a.active)){let m=u?void 0:B(a.action)??void 0;a.active=Ln(r,c,m)??a.active}}if(a.onLight=z(a.action,a.light),o){let c=o.action??a.action,u=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:u,onLight:o.onLight??z(c,u)}}return a}i(D,"mountSingleColor");function Nn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}i(Nn,"mountGreyscaleColors");function jn(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=i(a=>1/17*(a-1),"interpolation"),s=p(r,o,.5);return{0:p(s,n,t(18)),5:p(s,n,t(17.5)),10:p(s,n,t(17)),20:p(s,n,t(16)),30:p(s,n,t(15)),40:p(s,n,t(14)),50:p(s,n,t(13)),60:p(s,n,t(12)),70:p(s,n,t(11)),80:p(s,n,t(10)),90:p(s,n,t(9)),100:p(s,n,t(8)),110:p(s,n,t(7)),120:p(s,n,t(6)),130:p(s,n,t(5)),140:p(s,n,t(4)),150:p(s,n,t(3)),160:p(s,n,t(2)),170:s,180:p(s,o,.25)}}i(jn,"mountNeutralColors");function F(e,n){let o=H(x(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return O({...o,l:r})??e}i(F,"shiftLightness");function ce(e,n){let o=H(x(e));if(!o)return e;let r=o.l??0,t=n.min??0,s=n.max??1;return r>=t&&r<=s?e:O({...o,l:Math.min(s,Math.max(t,r))})??e}i(ce,"clampLightness");function G(e,n){let o=_o(x(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=i(s=>Math.round((s??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}i(G,"toRgbaString");import{apcaContrast as ue,DARK_BOOST_TAPER_MAX_L as ve,DARK_ELEVATION_BOOST as Ko,EDGE_ALPHA as De,HALATION_FLOORS as le,INK_APCA_MIN as we,INK_MIX as Te,LADDER_DELTAS as Fn,MIN_CONTRAST_AA as Pn,WASH_ALPHA as Wo}from"@apollion-dsi/core/themes/colors";var Jo="#FFFFFF",$e="#000000";function qo(e){return Se(e.baseLight)?"dark":"light"}i(qo,"resolvePolarity");function Xo(e){let n=le.CANVAS_MIN_L;return e<=n?1:e>=ve?0:(ve-e)/(ve-n)}i(Xo,"darkElevationBoostFactor");function _n(e,n,o){if(Math.abs(ue(e,n))>=o)return e;let r=Math.abs(ue("#ffffff",n))>=Math.abs(ue("#000000",n)),t=e;for(let s=0;s<40;s+=1){let a=F(t,r?.02:-.02);if(a===t||(t=a,Math.abs(ue(t,n))>=o))break}return t}i(_n,"ensureApca");function Uo(e,n){let o=e.baseLight??Jo,r=n==="dark",t=r?ce(o,{min:le.CANVAS_MIN_L}):o,s=F(t,Fn.sunken),a=r?Xo(B(t)??0):0,c=i(u=>Fn[u]+a*Ko[u],"delta");return{canvas:t,sunken:r?ce(s,{min:le.CANVAS_MIN_L}):s,paper:F(t,c("paper")),raised:F(t,c("raised")),overlay:F(t,c("overlay")),scrim:r?e.deepLight??$e:e.neutral?.["180"]??e.baseDark??$e}}i(Uo,"deriveSurface");function Yo(e,n){let o=e.baseDark??$e,r=ce(_n(z(o,n.paper,Pn),n.paper,we.primary),{max:le.INK_MAX_L}),t=i((s,a)=>_n(z(p(r,n.canvas,s),n.paper,Pn),n.paper,a),"tier");return{primary:r,secondary:t(Te.secondary,we.secondary),muted:t(Te.muted,we.muted),disabled:p(r,n.canvas,Te.disabled)}}i(Yo,"deriveInk");function Zo(e){return{hairline:G(e.primary,De.hairline),border:G(e.primary,De.border),strong:G(e.primary,De.strong)}}i(Zo,"deriveEdge");function Qo(e,n){let o=Wo[n];return{hover:G(e.primary,o.hover),pressed:G(e.primary,o.pressed),selected:G(e.primary,o.selected)}}i(Qo,"deriveWash");function er(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}i(er,"applyOverride");function Bn(e,n){let o=qo(e),r=Uo(e,o),t=Yo(e,r),s={surface:r,ink:t,edge:Zo(t),wash:Qo(t,o)};return er(s,n?.[o])}i(Bn,"resolveSurfaceLadder");function ir(e){let n=jn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Nn(e),...Bn({...e,neutral:n},e.ladder),main:D(e.main,e),opposite:D(e.opposite,e),complementary:D(e.complementary,e),danger:D(e.danger,e),information:D(e.information,e),success:D(e.success,e),warning:D(e.warning,e),primary:D(e.primary,e),secondary:D(e.secondary,e),tertiary:D(e.tertiary,e)}}i(ir,"composeColors");function E(e,n=rr){let o=e.mode==="dark"?nr(e.colors):e.colors,r=ir(o),t=X(n,e.dimension),s=or({colors:r,spacing:t}),a=zn(s);return e.surface==="negative"&&(a=zn(tr({semantic:s,colors:r},"negative").semantic)),{foundation:a,colors:r}}i(E,"buildVariantThemes");async function Bt(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,s=re(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await sr(K(cr(),"apollion-tokens-"));try{let u=[],m=i(async(l,d)=>{await ur(c,l,d),u.push({path:l,sha256:te(d)}),t&&console.log(` \u2713 ${l}`)},"emit");if(a.json){let l=Vn(n),d=[],y=rn();d.push(y),await m(l.base.file,bn(y));for(let f of l.spacing){let R=s.find(W=>W.dimension===f.dimension),{foundation:C}=E(R),V=an(C,f.dimension);d.push(V),await m(f.file,kn(V,f.dimension))}for(let f of l.font){let R=tn(f.dimension);d.push(R),await m(f.file,In(R,f.dimension))}for(let f of l.color){let R=s.find(de=>de.brand===f.brand&&de.mode===f.mode&&de.surface===f.surface),{foundation:C,colors:V}=E(R),W=sn(C,V);d.push(W),await m(f.file,Rn(W,f.brand,f.mode,f.surface))}Ye(d),await m(Cn,xn(n,l))}if(a.css||a.ts)for(let l of s){let{foundation:d,colors:y}=E(l),f=j(d,y,l),R=Dn(l);a.css&&await m(`css/${R}.css`,mn(f,{rgbCompanions:a.tailwind})),a.ts&&await m(`ts/${R}.d.ts`,vn(f))}if(a.cssModes){let l=new Map;for(let d of s){let y=`${d.brand}.${d.surface}.${d.dimension}`,f=l.get(y)??{};f[d.mode]=d,l.set(y,f)}for(let[d,{light:y,dark:f}]of l){if(!y||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${d} (config.modes)`);let R=E(y),C=E(f),V=gn(j(R.foundation,R.colors,y),j(C.foundation,C.colors,f),{rgbCompanions:a.tailwind});await m(`css/${d}.modes.css`,V)}}if(a.tailwind){let l=s[0],{foundation:d,colors:y}=E(l),f=j(d,y,l);await m("tailwind/preset.mjs",dn(f)),await m("tailwind/tw-merge.mjs",pn(f))}if(a.designMd){let l=[...new Set(s.map(d=>d.brand))];for(let d of l){let f=s.filter(R=>R.brand===d).map(R=>{let{foundation:C,colors:V}=E(R);return j(C,V,R)});await m(`design/${d}.design.md`,yn(d,f))}}let b={configHash:xe(n),files:u,gitCommit:wn(r),buildEnv:Tn()},S=$n(b);return await Jn(K(c,"manifest.json"),S),await Kn(o,{recursive:!0,force:!0}),await Wn(qn(o),{recursive:!0}),await ar(c,o),t&&console.log(`\u2713 ${u.length} files \u2192 ${o}`),{manifest:b,outDir:o}}catch(u){throw await Kn(c,{recursive:!0,force:!0}).catch(()=>{}),u}}i(Bt,"build");async function zt(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await Hn(K(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==xe(n))return!1;for(let t of r.files){let s;try{s=await Hn(K(o,t.path))}catch{return!1}if(te(s)!==t.sha256)return!1}return!0}i(zt,"check");async function ur(e,n,o){let r=K(e,n);await Wn(qn(r),{recursive:!0}),await Jn(r,o)}i(ur,"writeAt");export{Bt as build,zt as check};
package/lib/cli.mjs CHANGED
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
- var Zn=Object.defineProperty;var i=(e,n)=>Zn(e,"name",{value:n,configurable:!0}),Qn=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{readFile as Rr}from"node:fs/promises";import{resolve as Ve}from"node:path";import{mkdir as zn,mkdtemp as ar,readFile as Hn,rename as cr,rm as Wn,writeFile as Jn}from"node:fs/promises";import{tmpdir as lr}from"node:os";import{dirname as Kn,join as q}from"node:path";import{converter as xo,parse as So}from"culori";import{defaultInputBorder as Z}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as to}from"@apollion-dsi/core/themes/colors";import{createDeth as io,levelValues as so}from"@apollion-dsi/core/themes/depth";import{createFont as ao,defaultInputFont as M}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ge}from"@apollion-dsi/core/themes/spacing";import{converter as co,formatHex as lo,parse as uo}from"culori";import{defaultInputBreakpoints as eo}from"@apollion-dsi/core/themes/breakpoints";function Le(e=eo){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Le,"breakpointEntries");import{defaultInputContainerSizes as no,defaultInputLayout as oo}from"@apollion-dsi/core/themes/layout";function Ee(e=no){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ee,"containerSizeEntries");function Me(e=oo){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(Me,"layoutEntries");import{DIMENSION_MULTIPLIERS as ro}from"@apollion-dsi/core/themes/dimension";function X({multiplier:e=.25,alias:n},o){let r=o!==void 0?ro[o]:e;return(...t)=>t.map(s=>{let a=typeof s=="string"?n[s]:s;return`${r*a}rem`}).join(" ")}i(X,"createSpacing");var me={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ge(e){let n=Object.keys(me).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}i(ge,"assertTokenMetaResolves");var po=co("oklch");function y(e){return typeof e.type=="string"&&"value"in e}i(y,"isToken");function x(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(x,"kebab");function je(e){return e.split(".").map(x).join(".")}i(je,"kebabPath");function $(e){return e.kind==="ref"?e.resolved.raw:e.raw}i($,"rawValue");function Y(e,n){return Number(e.toFixed(n))||0}i(Y,"round");function he(e){let n=po(uo(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[Y(n.l,4),Y(n.c,4),Y(n.h??0,2)],r=lo(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:Y(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}i(he,"toColorValue");var Pe=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function T(e){let n=Pe.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}i(T,"toDimensionValue");function I(e){return{type:"color",value:he(e)}}i(I,"colorToken");function G(e){let n={};for(let[o,r]of Object.entries(e))n[o]=I(r);return n}i(G,"recordColorGroup");function Ne(e){let n=to(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=I(t);return o.neutral=G(n.neutral),o}i(Ne,"buildReadableTextGroup");var fo=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function _e(e){let n={};for(let o of fo){let r=e[o];n[o]={base:I(r.base),dark:I(r.dark),action:I(r.action),active:I(r.active),light:I(r.light),onLight:I(r.onLight)}}return n.grayscale=G(e.grayscale),n.neutral=G(e.neutral),n.surface=G(e.surface),n.ink=G(e.ink),n.edge=G(e.edge),n.wash=G(e.wash),n.baseDark=I(e.baseDark??"#000000"),n.baseLight=I(e.baseLight??"#ffffff"),n.deepDark=I(e.deepDark??"#000000"),n.deepLight=I(e.deepLight??"#ffffff"),n}i(_e,"buildColorPrimitives");function Fe(e){let n=X(Ge,e),o={};for(let r of Object.keys(Ge.alias))o[r]={type:"dimension",value:T(n(r))};return o}i(Fe,"buildSpacePrimitives");function Be(){let e={};for(let[n,o]of Object.entries(Z.borderWidth))e[n]={type:"dimension",value:T(o)};return e}i(Be,"buildBorderWidthPrimitives");function mo(e,n){return{color:_e(e),space:Fe(n),borderWidth:Be()}}i(mo,"buildPrimitives");var He={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},We={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},ze={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function go(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}i(go,"lookupPrimitive");function _(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?go(n,a):void 0;r[t]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:he(s)}}:I(s)}return r}i(_,"colorRefGroup");var Je={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},ho={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function yo(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let s of o.slice(1))if(t&&!y(t)&&s in t)t=t[s];else return;return t&&y(t)&&t.value.kind==="dimension"?t.value.raw:void 0}i(yo,"lookupDimensionPrimitive");function ye(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?yo(n,a):void 0;r[t]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:T(s)}}:{type:"dimension",value:T(s)}}return r}i(ye,"dimensionRefGroup");function Ke(e){let n={},o={};for(let[s,a]of Object.entries(Z.borderRadius))Pe.test(a)?n[s]={type:"dimension",value:T(a)}:o[s]=a;let r=ye(Z.borderWidth,e,ho),t={};for(let[s,a]of Object.entries(Z.borderStyle))t[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}i(Ke,"buildBorder");function qe(e){let n=ao(M,e),o={};for(let[c,l]of Object.entries(M.fontFamily)){let f=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:f,family:f}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:T(l)};let t={};for(let[c,l]of Object.entries(M.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let s={};for(let[c,l]of Object.entries(M.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:M.letterSpacing,textTransform:M.textTransform,fontStyle:M.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:s},extensions:a}}i(qe,"buildFont");var bo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function Ro(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(bo),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=i(l=>T(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:he(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(Ro,"parseShadow");function Ue(e){let n=io(e),o={};for(let r of Object.keys(so))o[r]={type:"shadow",value:Ro(n(r))};return o}i(Ue,"buildShadow");function Q(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=n?`${n}.${x(t)}`:x(t);if(y(s)){o.add(a);let c=me[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...s,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:s}else r[t]=Q(s,a,o)}return r}i(Q,"decorateGroup");function ko(e){let n=new Set,o=Q(e.primitives,"",n),r=Q(e.groups,"",n);return ge(n),{...e,primitives:o,groups:r}}i(ko,"decorateMeta");function ee(e,n){return Q(e,"",n)}i(ee,"decorateSlice");function Xe(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${x(r)}`:x(r);y(t)?o.add(s):Xe(t,s,o)}}i(Xe,"collectPaths");function Ye(e){let n=new Set;for(let o of e)Xe(o.groups,"",n);ge(n)}i(Ye,"assertSlicesMetaComplete");function Ze(){let e={};for(let[n,o]of Le())e[n]={type:"dimension",value:T(o)};return e}i(Ze,"buildBreakpoints");function Qe(){let e={};for(let[n,o]of Ee())e[n]={type:"dimension",value:T(o)};return e}i(Qe,"buildContainerSizes");function en(){let e={};for(let[n,o]of Me())e[n]={type:"dimension",value:T(o)};return e}i(en,"buildLayoutConstants");var nn={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function on(){let e=Be(),o=Ke({borderWidth:e}),r={"com.apollion.breakpoint":nn};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:ee({"border-width":e,border:o.group,breakpoint:Ze(),"container-size":Qe(),layout:en()},t),extensions:r}}i(on,"buildBaseIR");function rn(e){let n=qe(e),o=new Set;return{groups:ee({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(rn,"buildFontIR");function tn(e,n){let o=_e(n),r=new Set;return{groups:ee({color:o,bg:_(e.bg,n,He),text:_(e.text,n,We),edge:_(e.edge,n,ze),tx:Ne(n),shadow:Ue(n)},r),extensions:{}}}i(tn,"buildColorIR");function sn(e,n){let o=Fe(n),r={space:o},t=new Set;return{groups:ee({space:o,spacing:ye(e.spacing,r,Je)},t),extensions:{}}}i(sn,"buildSpacingIR");function Io(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=mo(n,o.dimension),s=Ke(t),a=qe(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":nn};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:_(e.bg,n,He),text:_(e.text,n,We),edge:_(e.edge,n,ze),tx:Ne(n),spacing:ye(e.spacing,t,Je),border:s.group,breakpoint:Ze(),"container-size":Qe(),layout:en(),font:a.group,shadow:Ue(n)},extensions:c};return ko(l)}i(Io,"buildIR");var F=Io;var wo=xo("rgb"),an="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function be(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(be,"colorPayload");function Re(e){return e.alpha===void 0}i(Re,"isOpaqueColor");function cn(e){let n=wo(So(e.hex));if(!n)return"0 0 0";let o=i(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}i(cn,"rgbTriplet");function H(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];if(y(t))o.set(s.join("-"),t);else for(let[a,c]of H(t,s))o.set(a,c)}return o}i(H,"flatTokens");function b(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||y(o))return{};o=o[r]}return o&&!y(o)?o:{}}i(b,"groupAt");function ln(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of H(b(e.groups,o),[o])){let s=be(t);s&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:Re(s)})}return n}i(ln,"colorEntries");function V(e,n){return[...H(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(V,"varEntries");function C(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}i(C,"pushScale");function dn(e){let n=[an,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=ln(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:s}of o)s?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),C(n,"screens",[...H(b(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,$(t.value)])),C(n,"spacing",V(b(e.groups,"spacing"),["spacing"])),C(n,"borderRadius",V(b(e.groups,"border","radius"),["border","radius"])),C(n,"borderWidth",V(b(e.groups,"border","width"),["border","width"])),C(n,"fontFamily",V(b(e.groups,"font","family"),["font","family"])),C(n,"fontSize",V(b(e.groups,"font","size"),["font","size"])),C(n,"fontWeight",V(b(e.groups,"font","weight"),["font","weight"])),C(n,"lineHeight",V(b(e.groups,"font","lineHeight"),["font","line-height"])),C(n,"boxShadow",V(b(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
3
- `)}i(dn,"renderTailwindPreset");function un(e){let n=i(t=>[...H(t).keys()],"keys"),o=i(t=>`[${t.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[an,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(ln(e).map(t=>t.key))},`,` spacing: ${o(n(b(e.groups,"spacing")))},`,` borderRadius: ${o(n(b(e.groups,"border","radius")))},`,` borderWidth: ${o(n(b(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(b(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(b(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(b(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(b(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(b(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
4
- `)}i(un,"renderTwMergeExtension");var pn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function ne(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];y(t)?o.push(` --apollion-${s.join("-")}: ${$(t.value)};`):ne(t,s,o)}}i(ne,"emitVars");function oe(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];if(!y(t)){oe(t,s,o);continue}let a=be(t);a&&Re(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${cn(a)};`)}}i(oe,"emitRgbVars");function ke(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];y(t)?t.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${$(t.value)}; }`):ke(t,s,o)}}i(ke,"emitProperties");function fn(e,n={}){let{brand:o,mode:r,surface:t,dimension:s}=e.meta,a=[pn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${s} */`,"",":root {"),ne(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),oe(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),ke(e.groups,[],a),a.push("}",""),a.join(`
5
- `)}i(fn,"renderCss");function mn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:s,surface:a,dimension:c}=e.meta,l=[pn,""],f=i((w,d,u)=>{l.push(`${w} {`,` color-scheme: ${u};`),ne(d.groups,[],l),t&&oe(d.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),f(`:root, html[${r}="light"]`,e,"light"),f(`html[${r}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${r}]) {`," color-scheme: dark;");let R=[];ne(n.groups,[],R),t&&oe(n.groups,[],R);for(let w of R)l.push(` ${w}`);return l.push(" }","}",""),l.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),ke(e.groups,[],l),l.push("}",""),l.join(`
6
- `)}i(mn,"renderCssModes");var vo="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Ie(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${r}`:r;y(t)?o.push([s,$(t.value)]):Ie(t,s,o)}}i(Ie,"flatten");function Do(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(Do,"yamlEscape");function To(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}i(To,"variantKey");function gn(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let s=[];Ie(t.groups,"",s),o.push(` ${To(t)}:`);for(let[a,c]of s)o.push(` ${a}: ${Do(c)}`)}o.push("---");let r=["",vo,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:s,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${s} \xB7 ${a} \xB7 ${c}\``,"");let l=[];Ie(t.groups,"",l);let f=new Map;for(let[R,w]of l){let d=R.split(".")[0]??R,u=f.get(d)??[];u.push([R,w]),f.set(d,u)}for(let[R,w]of f){r.push(`### ${R}`,"","| Token | Value |","| --- | --- |");for(let[d,u]of w)r.push(`| \`${d}\` | \`${u}\` |`);r.push("")}}return`${o.join(`
2
+ var io=Object.defineProperty;var i=(e,n)=>io(e,"name",{value:n,configurable:!0}),so=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{readFile as $t}from"node:fs/promises";import{resolve as Oe}from"node:path";import{mkdir as Zn,mkdtemp as ht,readFile as Xn,rename as yt,rm as Yn,writeFile as Qn}from"node:fs/promises";import{tmpdir as bt}from"node:os";import{dirname as eo,join as q}from"node:path";import{converter as Co,parse as Vo}from"culori";import{defaultInputBorder as ee}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as po}from"@apollion-dsi/core/themes/colors";import{createDeth as fo,levelValues as mo}from"@apollion-dsi/core/themes/depth";import{createFont as go,defaultInputFont as L}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Be}from"@apollion-dsi/core/themes/spacing";import{converter as ho,formatHex as yo,parse as bo}from"culori";import{defaultInputBreakpoints as ao}from"@apollion-dsi/core/themes/breakpoints";function Le(e=ao){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Le,"breakpointEntries");import{defaultInputContainerSizes as co,defaultInputLayout as lo}from"@apollion-dsi/core/themes/layout";function Ge(e=co){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ge,"containerSizeEntries");function je(e=lo){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(je,"layoutEntries");import{createMotion as X,defaultInputMotion as Y}from"@apollion-dsi/core/themes/motion";function Pe(e=Y){let n=X(e);return Object.keys(e.duration).map(o=>[o,{ms:e.duration[o],css:n.duration[o]}])}i(Pe,"motionDurationEntries");function Ne(e=Y){let n=X(e);return Object.keys(e.easing).map(o=>[o,{points:e.easing[o],css:n.easing[o]}])}i(Ne,"motionEasingEntries");function Fe(e=Y){let n=X(e);return Object.keys(e.indicator).map(o=>[o,{ms:e.indicator[o],css:n.indicator[o]}])}i(Fe,"motionIndicatorEntries");function _e(e=Y){let n=X(e);return Object.keys(e.intent).map(o=>{let t=e.intent[o],r=typeof t.duration=="number"?null:t.duration,s=typeof t.duration=="number"?t.duration:e.duration[t.duration];return[o,{durationRef:r,duration:{ms:s,css:n.intent[o].duration},easingRef:t.easing,easing:{points:e.easing[t.easing],css:n.intent[o].easing}}]})}i(_e,"motionIntentEntries");import{DIMENSION_MULTIPLIERS as uo}from"@apollion-dsi/core/themes/dimension";function Z({multiplier:e=.25,alias:n},o){let t=o!==void 0?uo[o]:e;return(...r)=>r.map(s=>{let a=typeof s=="string"?n[s]:s;return`${t*a}rem`}).join(" ")}i(Z,"createSpacing");var he={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ye(e){let n=Object.keys(he).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}i(ye,"assertTokenMetaResolves");var Ro=ho("oklch");function b(e){return typeof e.type=="string"&&"value"in e}i(b,"isToken");function x(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(x,"kebab");function ze(e){return e.split(".").map(x).join(".")}i(ze,"kebabPath");function V(e){return e.kind==="ref"?e.resolved.raw:e.raw}i(V,"rawValue");function Q(e,n){return Number(e.toFixed(n))||0}i(Q,"round");function be(e){let n=Ro(bo(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[Q(n.l,4),Q(n.c,4),Q(n.h??0,2)],t=yo(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:Q(n.alpha,4),hex:t}:{kind:"color",raw:e,components:o,hex:t}}i(be,"toColorValue");var He=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function $(e){let n=He.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}i($,"toDimensionValue");function I(e){return{type:"color",value:be(e)}}i(I,"colorToken");function G(e){let n={};for(let[o,t]of Object.entries(e))n[o]=I(t);return n}i(G,"recordColorGroup");function Ke(e){let n=po(e),o={};for(let[t,r]of Object.entries(n.palettes))o[t]=I(r);return o.neutral=G(n.neutral),o}i(Ke,"buildReadableTextGroup");var ko=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function We(e){let n={};for(let o of ko){let t=e[o];n[o]={base:I(t.base),dark:I(t.dark),action:I(t.action),active:I(t.active),light:I(t.light),onLight:I(t.onLight)}}return n.grayscale=G(e.grayscale),n.neutral=G(e.neutral),n.surface=G(e.surface),n.ink=G(e.ink),n.edge=G(e.edge),n.wash=G(e.wash),n.baseDark=I(e.baseDark??"#000000"),n.baseLight=I(e.baseLight??"#ffffff"),n.deepDark=I(e.deepDark??"#000000"),n.deepLight=I(e.deepLight??"#ffffff"),n}i(We,"buildColorPrimitives");function Je(e){let n=Z(Be,e),o={};for(let t of Object.keys(Be.alias))o[t]={type:"dimension",value:$(n(t))};return o}i(Je,"buildSpacePrimitives");function qe(){let e={};for(let[n,o]of Object.entries(ee.borderWidth))e[n]={type:"dimension",value:$(o)};return e}i(qe,"buildBorderWidthPrimitives");function Io(e,n){return{color:We(e),space:Je(n),borderWidth:qe()}}i(Io,"buildPrimitives");var Ue={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},Xe={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},Ye={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function xo(e,n){let o=e;for(let t of n.split(".").slice(1))if(o&&typeof o=="object"&&t in o)o=o[t];else return;return typeof o=="string"?o:void 0}i(xo,"lookupPrimitive");function F(e,n,o){let t={};for(let[r,s]of Object.entries(e)){let a=o[r],c=a?xo(n,a):void 0;t[r]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:be(s)}}:I(s)}return t}i(F,"colorRefGroup");var Ze={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},So={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function wo(e,n){let o=n.split("."),t=o[0]==="border-width"?"borderWidth":o[0],r=e[t];for(let s of o.slice(1))if(r&&!b(r)&&s in r)r=r[s];else return;return r&&b(r)&&r.value.kind==="dimension"?r.value.raw:void 0}i(wo,"lookupDimensionPrimitive");function Re(e,n,o){let t={};for(let[r,s]of Object.entries(e)){let a=o[r],c=a?wo(n,a):void 0;t[r]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:$(s)}}:{type:"dimension",value:$(s)}}return t}i(Re,"dimensionRefGroup");function Qe(e){let n={},o={};for(let[s,a]of Object.entries(ee.borderRadius))He.test(a)?n[s]={type:"dimension",value:$(a)}:o[s]=a;let t=Re(ee.borderWidth,e,So),r={};for(let[s,a]of Object.entries(ee.borderStyle))r[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:t,style:r},extensions:o}}i(Qe,"buildBorder");function en(e){let n=go(L,e),o={};for(let[c,l]of Object.entries(L.fontFamily)){let f=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:f,family:f}}}let t={};for(let[c,l]of Object.entries(n.fontSize))t[c]={type:"dimension",value:$(l)};let r={};for(let[c,l]of Object.entries(L.fontWeight))r[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let s={};for(let[c,l]of Object.entries(L.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:L.letterSpacing,textTransform:L.textTransform,fontStyle:L.fontStyle};return{group:{family:o,size:t,weight:r,lineHeight:s},extensions:a}}i(en,"buildFont");var vo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function Do(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let t=n.match(vo),r=t?t[0]:"#000000",a=(t?n.slice(0,t.index).trim():n).split(/\s+/).filter(Boolean),c=i(l=>$(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:be(r),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(Do,"parseShadow");function nn(e){let n=fo(e),o={};for(let t of Object.keys(mo))o[t]={type:"shadow",value:Do(n(t))};return o}i(nn,"buildShadow");function ne(e,n,o){let t={};for(let[r,s]of Object.entries(e)){let a=n?`${n}.${x(r)}`:x(r);if(b(s)){o.add(a);let c=he[a];t[r]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...s,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:s}else t[r]=ne(s,a,o)}return t}i(ne,"decorateGroup");function To(e){let n=new Set,o=ne(e.primitives,"",n),t=ne(e.groups,"",n);return ye(n),{...e,primitives:o,groups:t}}i(To,"decorateMeta");function oe(e,n){return ne(e,"",n)}i(oe,"decorateSlice");function on(e,n,o){for(let[t,r]of Object.entries(e)){let s=n?`${n}.${x(t)}`:x(t);b(r)?o.add(s):on(r,s,o)}}i(on,"collectPaths");function tn(e){let n=new Set;for(let o of e)on(o.groups,"",n);ye(n)}i(tn,"assertSlicesMetaComplete");function rn(){let e={};for(let[n,o]of Le())e[n]={type:"dimension",value:$(o)};return e}i(rn,"buildBreakpoints");function sn(){let e={};for(let[n,o]of Ge())e[n]={type:"dimension",value:$(o)};return e}i(sn,"buildContainerSizes");function an(){let e={};for(let[n,o]of je())e[n]={type:"dimension",value:$(o)};return e}i(an,"buildLayoutConstants");function cn(){let e=i(a=>({type:"duration",value:{kind:"duration",raw:a.css,value:a.ms,unit:"ms"}}),"durationToken"),n=i(a=>({type:"cubicBezier",value:{kind:"cubicBezier",raw:a.css,points:a.points}}),"easingToken"),o={};for(let[a,c]of Pe())o[a]=e(c);let t={};for(let[a,c]of Ne())t[a]=n(c);let r={};for(let[a,c]of Fe())r[a]=e(c);let s={};for(let[a,c]of _e()){let l=e(c.duration).value;s[a]={duration:c.durationRef?{type:"duration",value:{kind:"ref",path:`motion.duration.${c.durationRef}`,resolved:l}}:e(c.duration),easing:{type:"cubicBezier",value:{kind:"ref",path:`motion.easing.${c.easingRef}`,resolved:n(c.easing).value}}}}return{duration:o,easing:t,indicator:r,intent:s}}i(cn,"buildMotion");var ln={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function un(){let e=qe(),o=Qe({borderWidth:e}),t={"com.apollion.breakpoint":ln};Object.keys(o.extensions).length>0&&(t["com.apollion.border"]={radius:o.extensions});let r=new Set;return{groups:oe({"border-width":e,border:o.group,breakpoint:rn(),"container-size":sn(),layout:an(),motion:cn()},r),extensions:t}}i(un,"buildBaseIR");function dn(e){let n=en(e),o=new Set;return{groups:oe({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(dn,"buildFontIR");function pn(e,n){let o=We(n),t=new Set;return{groups:oe({color:o,bg:F(e.bg,n,Ue),text:F(e.text,n,Xe),edge:F(e.edge,n,Ye),tx:Ke(n),shadow:nn(n)},t),extensions:{}}}i(pn,"buildColorIR");function fn(e,n){let o=Je(n),t={space:o},r=new Set;return{groups:oe({space:o,spacing:Re(e.spacing,t,Ze)},r),extensions:{}}}i(fn,"buildSpacingIR");function $o(e,n,o){let t={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},r=Io(n,o.dimension),s=Qe(r),a=en(o.dimension),c={"com.apollion.variant":t,"com.apollion.font":a.extensions,"com.apollion.breakpoint":ln};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${t.brand}/${t.mode}/${t.surface}/${t.dimension}.`,meta:t,primitives:r,groups:{bg:F(e.bg,n,Ue),text:F(e.text,n,Xe),edge:F(e.edge,n,Ye),tx:Ke(n),spacing:Re(e.spacing,r,Ze),border:s.group,breakpoint:rn(),"container-size":sn(),layout:an(),motion:cn(),font:a.group,shadow:nn(n)},extensions:c};return To(l)}i($o,"buildIR");var _=$o;var Mo=Co("rgb"),mn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function ke(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(ke,"colorPayload");function Ie(e){return e.alpha===void 0}i(Ie,"isOpaqueColor");function gn(e){let n=Mo(Vo(e.hex));if(!n)return"0 0 0";let o=i(t=>Math.min(255,Math.max(0,Math.round(t*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}i(gn,"rgbTriplet");function z(e,n=[]){let o=new Map;for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];if(b(r))o.set(s.join("-"),r);else for(let[a,c]of z(r,s))o.set(a,c)}return o}i(z,"flatTokens");function h(e,...n){let o=e[n[0]];for(let t of n.slice(1)){if(!o||b(o))return{};o=o[t]}return o&&!b(o)?o:{}}i(h,"groupAt");function hn(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[t,r]of z(h(e.groups,o),[o])){let s=ke(r);s&&n.push({key:t,cssVar:`--apollion-${t}`,opaque:Ie(s)})}return n}i(hn,"colorEntries");function C(e,n){return[...z(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(C,"varEntries");function D(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[t,r]of o)e.push(` ${JSON.stringify(t)}: ${JSON.stringify(r)},`);e.push(" },")}}i(D,"pushScale");function yn(e){let n=[mn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=hn(e);n.push(" colors: {");for(let{key:t,cssVar:r,opaque:s}of o)s?n.push(` ${JSON.stringify(t)}: ${JSON.stringify(`rgb(var(${r}-rgb) / <alpha-value>)`)},`):(n.push(` // ${t} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(t)}: ${JSON.stringify(`var(${r})`)},`));return n.push(" },"),D(n,"screens",[...z(h(e.groups,"breakpoint"))].filter(([t])=>t!=="xs").map(([t,r])=>[t,V(r.value)])),D(n,"spacing",C(h(e.groups,"spacing"),["spacing"])),D(n,"borderRadius",C(h(e.groups,"border","radius"),["border","radius"])),D(n,"borderWidth",C(h(e.groups,"border","width"),["border","width"])),D(n,"fontFamily",C(h(e.groups,"font","family"),["font","family"])),D(n,"fontSize",C(h(e.groups,"font","size"),["font","size"])),D(n,"fontWeight",C(h(e.groups,"font","weight"),["font","weight"])),D(n,"lineHeight",C(h(e.groups,"font","lineHeight"),["font","line-height"])),D(n,"boxShadow",C(h(e.groups,"shadow"),["shadow"])),D(n,"transitionDuration",C(h(e.groups,"motion","duration"),["motion","duration"])),D(n,"transitionTimingFunction",C(h(e.groups,"motion","easing"),["motion","easing"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
3
+ `)}i(yn,"renderTailwindPreset");function bn(e){let n=i(r=>[...z(r).keys()],"keys"),o=i(r=>`[${r.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[mn,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(hn(e).map(r=>r.key))},`,` spacing: ${o(n(h(e.groups,"spacing")))},`,` borderRadius: ${o(n(h(e.groups,"border","radius")))},`,` borderWidth: ${o(n(h(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(h(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(h(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(h(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(h(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(h(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
4
+ `)}i(bn,"renderTwMergeExtension");var Rn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function te(e,n,o){for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];b(r)?o.push(` --apollion-${s.join("-")}: ${V(r.value)};`):te(r,s,o)}}i(te,"emitVars");function re(e,n,o){for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];if(!b(r)){re(r,s,o);continue}let a=ke(r);a&&Ie(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${gn(a)};`)}}i(re,"emitRgbVars");function xe(e,n,o){for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];b(r)?r.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${V(r.value)}; }`):xe(r,s,o)}}i(xe,"emitProperties");function kn(e,n={}){let{brand:o,mode:t,surface:r,dimension:s}=e.meta,a=[Rn,""];return a.push(`/* Variant: brand=${o} mode=${t} surface=${r} dimension=${s} */`,"",":root {"),te(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),re(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),xe(e.groups,[],a),a.push("}",""),a.join(`
5
+ `)}i(kn,"renderCss");function In(e,n,o={}){let{attribute:t="data-apollion-mode",rgbCompanions:r}=o,{brand:s,surface:a,dimension:c}=e.meta,l=[Rn,""],f=i((w,u,d)=>{l.push(`${w} {`,` color-scheme: ${d};`),te(u.groups,[],l),r&&re(u.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${t}) */`,""),f(`:root, html[${t}="light"]`,e,"light"),f(`html[${t}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${t}]) {`," color-scheme: dark;");let R=[];te(n.groups,[],R),r&&re(n.groups,[],R);for(let w of R)l.push(` ${w}`);return l.push(" }","}",""),l.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),xe(e.groups,[],l),l.push("}",""),l.join(`
6
+ `)}i(In,"renderCssModes");var Eo="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Se(e,n,o){for(let[t,r]of Object.entries(e)){let s=n?`${n}.${t}`:t;b(r)?o.push([s,V(r.value)]):Se(r,s,o)}}i(Se,"flatten");function Ao(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(Ao,"yamlEscape");function Oo(e){let{mode:n,surface:o,dimension:t}=e.meta;return`${n}.${o}.${t}`}i(Oo,"variantKey");function xn(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let r of n){let s=[];Se(r.groups,"",s),o.push(` ${Oo(r)}:`);for(let[a,c]of s)o.push(` ${a}: ${Ao(c)}`)}o.push("---");let t=["",Eo,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let r of n){let{mode:s,surface:a,dimension:c}=r.meta;t.push(`## Variant \`${s} \xB7 ${a} \xB7 ${c}\``,"");let l=[];Se(r.groups,"",l);let f=new Map;for(let[R,w]of l){let u=R.split(".")[0]??R,d=f.get(u)??[];d.push([R,w]),f.set(u,d)}for(let[R,w]of f){t.push(`### ${R}`,"","| Token | Value |","| --- | --- |");for(let[u,d]of w)t.push(`| \`${u}\` | \`${d}\` |`);t.push("")}}return`${o.join(`
7
7
  `)}
8
- ${r.join(`
9
- `)}`}i(gn,"renderDesignMd");function hn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}i(hn,"colorValue");function W(e){return{value:e.value,unit:e.unit}}i(W,"dimensionValue");function $o(e){let n=e.shadow,o={color:hn(n.color),offsetX:W(n.offsetX),offsetY:W(n.offsetY),blur:W(n.blur),spread:W(n.spread)};return n.inset&&(o.inset=!0),o}i($o,"shadowValue");function Co(e){switch(e.kind){case"ref":return`{${je(e.path)}}`;case"color":return hn(e);case"dimension":return W(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return $o(e)}}i(Co,"projectValue");function Ao(e){let n={$value:Co(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(Ao,"projectToken");function xe(e){let n={};for(let[o,r]of Object.entries(e))n[x(o)]=y(r)?Ao(r):xe(r);return n}i(xe,"projectGroup");function re(e,n){let o={$description:n,...xe(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
10
- `}i(re,"renderSet");function yn(e){return re(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}i(yn,"renderBaseSet");function bn(e,n,o,r){return re(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}i(bn,"renderColorSet");function Rn(e,n){return re(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(Rn,"renderSpacingSet");function kn(e,n){return re(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(kn,"renderFontSet");function In(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],s={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(s,null,2)}
11
- `}i(In,"renderResolver");var Oo="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Vo(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}i(Vo,"emitDoc");function xn(e,n,o){let r=" ".repeat(n);for(let[t,s]of Object.entries(e))y(s)?(Vo(s,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify($(s.value))},`)):(o.push(`${r}${t}: {`),xn(s,n+1,o),o.push(`${r}},`))}i(xn,"emitGroup");function Sn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,s=[Oo,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return xn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
12
- `)}i(Sn,"renderTs");var Lo=["light","dark"],Eo=["positive","negative"],Mo=["compact","normal","spacious"];function te(e){let n=e.modes??Lo,o=e.surfaces??Eo,r=e.dimensions??Mo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of t)for(let l of n)for(let f of o)for(let R of r)s.push({brand:a,colors:c,mode:l,surface:f,dimension:R});return s}i(te,"expandVariants");function wn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i(wn,"variantName");import{createHash as Go}from"node:crypto";function ie(e){return Go("sha256").update(e).digest("hex")}i(ie,"sha256");function we(e){return ie(Se(e))}i(we,"hashConfig");function Se(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Se).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Se(e[r])}`).join(",")}}`}i(Se,"stableStringify");function vn(e){try{let{execSync:n}=Qn("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}i(vn,"detectGitCommit");function Dn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(Dn,"buildEnv");function Tn(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
13
- `}i(Tn,"serializeManifest");var jo="json/sets",$n="json/resolver.json";function se(e){return`${jo}/${e}.json`}i(se,"setFile");function Po(e,n,o){return`${e}.color.${n}.${o}`}i(Po,"colorSetName");function No(e){return`spacing.${e}`}i(No,"spacingSetName");function _o(e){return`font.${e}`}i(_o,"fontSetName");function ae(e,n){e.includes(n)||e.push(n)}i(ae,"pushUnique");function Cn(e){let n=te(e),o=[],r=[],t=[],s=[],a=new Set,c=[],l=new Set,f=[],R=new Set,w=[];for(let d of n){ae(o,d.brand),ae(r,d.mode),ae(t,d.surface),ae(s,d.dimension);let u=Po(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:se(u),brand:d.brand,mode:d.mode,surface:d.surface}));let h=No(d.dimension);l.has(h)||(l.add(h),f.push({kind:"spacing",name:h,file:se(h),dimension:d.dimension}));let m=_o(d.dimension);R.has(m)||(R.add(m),w.push({kind:"font",name:m,file:se(m),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:se("base")},spacing:f,font:w,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:s}}}i(Cn,"planSets");import{toDarkColors as or}from"@apollion-dsi/core/themes/colors";import{createFoundation as Bn}from"@apollion-dsi/core/themes/foundation";import{createSemantic as rr}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as tr}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as ir}from"@apollion-dsi/core/themes/surface";import{converter as En,formatHex as j,interpolate as Fo,parse as S,wcagContrast as Mn}from"culori";var K=En("oklch"),Bo=En("rgb");function p(e,n,o){let r=S(e),t=S(n);if(!r||!t)return e;let s=Fo([r,t],"oklch");return j(s(o))??e}i(p,"mixOklch");function Ho(e){return e?typeof e=="string"?e:e.base:"#000"}i(Ho,"coerceToHex");var ce=1.3,Wo=.05,An=.04,L=i((e,n)=>{let o=S(e),r=S(n);return!o||!r?1:Mn(o,r)},"contrastRatio"),z=i(e=>{let n=K(S(e));return n?n.l??0:null},"oklchLightness"),zo=4.5;function J(e,n,o=zo){let r=S(n),t=K(S(e));if(!r||!t)return e;let s=L("#fff",n)>=L("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=j(t)??e,l=S(c);if(l&&Mn(l,r)>=o)return c;let f=Math.min(1,Math.max(0,(t.l??0)+s));if(f===(t.l??0))break;t={...t,l:f}}return j(t)??e}i(J,"readableColor");var On=i((e,n)=>{if(L(e,n)>=ce)return!0;let o=z(e),r=z(n);return o!==null&&r!==null&&Math.abs(o-r)>=Wo},"isPerceptibleState"),ve=i(e=>e?L("#fff",e)>L("#000",e):!1,"isDarkSurface");function Vn(e,n,o){let r=K(S(e));if(!r)return null;let t={...r,l:o??r.l??0},s=n?An:-An;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+s));if(c===(t.l??0))break;t={...t,l:c};let l=j(t);if(l&&L(e,l)>=ce)return l}return j(t)??null}i(Vn,"derivePerceptibleState");function Ln(e,n,o){let r=Vn(e,n,o);if(r&&L(e,r)>=ce)return r;let t=Vn(e,!n);return t&&L(e,t)>=ce?t:r??t}i(Ln,"perceptibleStateFor");function D(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Ho(e),t=n.deepDark,s=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,s,.6),light:p(r,s,.9),onLight:r};if(S(r)){let c=ve(n.baseLight),l=On(r,a.action);if(l||(a.action=Ln(r,c)??a.action),!On(r,a.active)){let f=l?void 0:z(a.action)??void 0;a.active=Ln(r,c,f)??a.active}}if(a.onLight=J(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??J(c,l)}}return a}i(D,"mountSingleColor");function Gn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}i(Gn,"mountGreyscaleColors");function jn(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=i(a=>1/17*(a-1),"interpolation"),s=p(r,o,.5);return{0:p(s,n,t(18)),5:p(s,n,t(17.5)),10:p(s,n,t(17)),20:p(s,n,t(16)),30:p(s,n,t(15)),40:p(s,n,t(14)),50:p(s,n,t(13)),60:p(s,n,t(12)),70:p(s,n,t(11)),80:p(s,n,t(10)),90:p(s,n,t(9)),100:p(s,n,t(8)),110:p(s,n,t(7)),120:p(s,n,t(6)),130:p(s,n,t(5)),140:p(s,n,t(4)),150:p(s,n,t(3)),160:p(s,n,t(2)),170:s,180:p(s,o,.25)}}i(jn,"mountNeutralColors");function B(e,n){let o=K(S(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return j({...o,l:r})??e}i(B,"shiftLightness");function le(e,n){let o=K(S(e));if(!o)return e;let r=o.l??0,t=n.min??0,s=n.max??1;return r>=t&&r<=s?e:j({...o,l:Math.min(s,Math.max(t,r))})??e}i(le,"clampLightness");function P(e,n){let o=Bo(S(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=i(s=>Math.round((s??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}i(P,"toRgbaString");import{apcaContrast as de,DARK_BOOST_TAPER_MAX_L as De,DARK_ELEVATION_BOOST as Jo,EDGE_ALPHA as Te,HALATION_FLOORS as ue,INK_APCA_MIN as $e,INK_MIX as Ce,LADDER_DELTAS as Pn,MIN_CONTRAST_AA as Nn,WASH_ALPHA as Ko}from"@apollion-dsi/core/themes/colors";var qo="#FFFFFF",Ae="#000000";function Uo(e){return ve(e.baseLight)?"dark":"light"}i(Uo,"resolvePolarity");function Xo(e){let n=ue.CANVAS_MIN_L;return e<=n?1:e>=De?0:(De-e)/(De-n)}i(Xo,"darkElevationBoostFactor");function _n(e,n,o){if(Math.abs(de(e,n))>=o)return e;let r=Math.abs(de("#ffffff",n))>=Math.abs(de("#000000",n)),t=e;for(let s=0;s<40;s+=1){let a=B(t,r?.02:-.02);if(a===t||(t=a,Math.abs(de(t,n))>=o))break}return t}i(_n,"ensureApca");function Yo(e,n){let o=e.baseLight??qo,r=n==="dark",t=r?le(o,{min:ue.CANVAS_MIN_L}):o,s=B(t,Pn.sunken),a=r?Xo(z(t)??0):0,c=i(l=>Pn[l]+a*Jo[l],"delta");return{canvas:t,sunken:r?le(s,{min:ue.CANVAS_MIN_L}):s,paper:B(t,c("paper")),raised:B(t,c("raised")),overlay:B(t,c("overlay")),scrim:r?e.deepLight??Ae:e.neutral?.["180"]??e.baseDark??Ae}}i(Yo,"deriveSurface");function Zo(e,n){let o=e.baseDark??Ae,r=le(_n(J(o,n.paper,Nn),n.paper,$e.primary),{max:ue.INK_MAX_L}),t=i((s,a)=>_n(J(p(r,n.canvas,s),n.paper,Nn),n.paper,a),"tier");return{primary:r,secondary:t(Ce.secondary,$e.secondary),muted:t(Ce.muted,$e.muted),disabled:p(r,n.canvas,Ce.disabled)}}i(Zo,"deriveInk");function Qo(e){return{hairline:P(e.primary,Te.hairline),border:P(e.primary,Te.border),strong:P(e.primary,Te.strong)}}i(Qo,"deriveEdge");function er(e,n){let o=Ko[n];return{hover:P(e.primary,o.hover),pressed:P(e.primary,o.pressed),selected:P(e.primary,o.selected)}}i(er,"deriveWash");function nr(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}i(nr,"applyOverride");function Fn(e,n){let o=Uo(e),r=Yo(e,o),t=Zo(e,r),s={surface:r,ink:t,edge:Qo(t),wash:er(t,o)};return nr(s,n?.[o])}i(Fn,"resolveSurfaceLadder");function sr(e){let n=jn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Gn(e),...Fn({...e,neutral:n},e.ladder),main:D(e.main,e),opposite:D(e.opposite,e),complementary:D(e.complementary,e),danger:D(e.danger,e),information:D(e.information,e),success:D(e.success,e),warning:D(e.warning,e),primary:D(e.primary,e),secondary:D(e.secondary,e),tertiary:D(e.tertiary,e)}}i(sr,"composeColors");function E(e,n=tr){let o=e.mode==="dark"?or(e.colors):e.colors,r=sr(o),t=X(n,e.dimension),s=rr({colors:r,spacing:t}),a=Bn(s);return e.surface==="negative"&&(a=Bn(ir({semantic:s,colors:r},"negative").semantic)),{foundation:a,colors:r}}i(E,"buildVariantThemes");async function qn(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,s=te(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await ar(q(lr(),"apollion-tokens-"));try{let l=[],f=i(async(d,u)=>{await dr(c,d,u),l.push({path:d,sha256:ie(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=Cn(n),u=[],h=on();u.push(h),await f(d.base.file,yn(h));for(let m of d.spacing){let k=s.find(U=>U.dimension===m.dimension),{foundation:A}=E(k),O=sn(A,m.dimension);u.push(O),await f(m.file,Rn(O,m.dimension))}for(let m of d.font){let k=rn(m.dimension);u.push(k),await f(m.file,kn(k,m.dimension))}for(let m of d.color){let k=s.find(fe=>fe.brand===m.brand&&fe.mode===m.mode&&fe.surface===m.surface),{foundation:A,colors:O}=E(k),U=tn(A,O);u.push(U),await f(m.file,bn(U,m.brand,m.mode,m.surface))}Ye(u),await f($n,In(n,d))}if(a.css||a.ts)for(let d of s){let{foundation:u,colors:h}=E(d),m=F(u,h,d),k=wn(d);a.css&&await f(`css/${k}.css`,fn(m,{rgbCompanions:a.tailwind})),a.ts&&await f(`ts/${k}.d.ts`,Sn(m))}if(a.cssModes){let d=new Map;for(let u of s){let h=`${u.brand}.${u.surface}.${u.dimension}`,m=d.get(h)??{};m[u.mode]=u,d.set(h,m)}for(let[u,{light:h,dark:m}]of d){if(!h||!m)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let k=E(h),A=E(m),O=mn(F(k.foundation,k.colors,h),F(A.foundation,A.colors,m),{rgbCompanions:a.tailwind});await f(`css/${u}.modes.css`,O)}}if(a.tailwind){let d=s[0],{foundation:u,colors:h}=E(d),m=F(u,h,d);await f("tailwind/preset.mjs",dn(m)),await f("tailwind/tw-merge.mjs",un(m))}if(a.designMd){let d=[...new Set(s.map(u=>u.brand))];for(let u of d){let m=s.filter(k=>k.brand===u).map(k=>{let{foundation:A,colors:O}=E(k);return F(A,O,k)});await f(`design/${u}.design.md`,gn(u,m))}}let R={configHash:we(n),files:l,gitCommit:vn(r),buildEnv:Dn()},w=Tn(R);return await Jn(q(c,"manifest.json"),w),await Wn(o,{recursive:!0,force:!0}),await zn(Kn(o),{recursive:!0}),await cr(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:R,outDir:o}}catch(l){throw await Wn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}i(qn,"build");async function Un(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await Hn(q(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==we(n))return!1;for(let t of r.files){let s;try{s=await Hn(q(o,t.path))}catch{return!1}if(ie(s)!==t.sha256)return!1}return!0}i(Un,"check");async function dr(e,n,o){let r=q(e,n);await zn(Kn(r),{recursive:!0}),await Jn(r,o)}i(dr,"writeAt");import{readFile as pr}from"node:fs/promises";import{resolve as fr}from"node:path";import{createContext as mr,Script as gr}from"node:vm";import{z as g}from"zod";var v=g.string().regex(/^#([0-9a-fA-F]{3}){1,2}$|^transparent$|^rgb\(.*\)$|^oklch\(.*\)$/,{message:'Must be hex, rgb(), oklch(), or "transparent"'}),ur=g.object({baseDark:g.string().optional(),baseLight:g.string().optional(),deepDark:v,deepLight:v,transparent:g.string().optional(),main:v.optional(),opposite:v.optional(),complementary:v.optional(),information:v.optional(),success:v.optional(),danger:v.optional(),warning:v.optional(),primary:v.optional(),secondary:v.optional(),tertiary:v.optional()}).passthrough(),Xn=g.object({brands:g.record(g.string(),ur).refine(e=>Object.keys(e).length>0,{message:"apollion.config.mjs: brands must contain at least 1 entry"}),modes:g.array(g.enum(["light","dark"])).optional(),surfaces:g.array(g.enum(["positive","negative"])).optional(),dimensions:g.array(g.enum(["compact","normal","spacious"])).optional(),output:g.object({runtime:g.boolean().optional(),css:g.boolean().optional(),json:g.boolean().optional(),ts:g.boolean().optional(),designMd:g.boolean().optional(),tailwind:g.boolean().optional(),cssModes:g.boolean().optional()}).passthrough().optional()}).passthrough();var hr=[/\brequire\s*\(/,/\bimport\s*\(/,/^\s*import\s+/m],yr=1e3;var Oe=class Oe extends Error{constructor(o,r){super(o);this.configPath=r;this.name="ConfigLoadError"}};i(Oe,"ConfigLoadError");var N=Oe;async function Yn(e){let n=fr(e.configPath),o=await pr(n,"utf8");for(let l of hr)if(l.test(o))throw new N(`apollion.config: dynamic require/import not allowed (matched ${l}). Declarative config only \u2014 see ADR-006 \xA73.8 B3.`,n);let r=o.replace(/(^|\n)\s*export\s+default\s+/,(l,f)=>`${f}__apollion_config_export = `);if(r===o)throw new N("apollion.config: missing `export default <object>;` \u2014 config must export a default object literal.",n);let t={__apollion_config_export:void 0,console:br(),Symbol,Number,String,Boolean,Array,Object,JSON,Math,defineConfig:i(l=>l,"defineConfig")},s=mr(t);try{new gr(r,{filename:n}).runInContext(s,{timeout:yr})}catch(l){throw new N(`apollion.config: evaluation failed \u2014 ${l instanceof Error?l.message:String(l)}`,n)}let a=t.__apollion_config_export;if(a===void 0)throw new N("apollion.config: `export default` produced undefined.",n);let c=Xn.safeParse(a);if(!c.success){let l=c.error.issues.map(f=>` ${f.path.join(".")||"(root)"}: ${f.message}`).join(`
8
+ ${t.join(`
9
+ `)}`}i(xn,"renderDesignMd");function Sn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}i(Sn,"colorValue");function H(e){return{value:e.value,unit:e.unit}}i(H,"dimensionValue");function Lo(e){return{value:e.value,unit:e.unit}}i(Lo,"durationValue");function Go(e){return[...e.points]}i(Go,"cubicBezierValue");function jo(e){let n=e.shadow,o={color:Sn(n.color),offsetX:H(n.offsetX),offsetY:H(n.offsetY),blur:H(n.blur),spread:H(n.spread)};return n.inset&&(o.inset=!0),o}i(jo,"shadowValue");function Po(e){switch(e.kind){case"ref":return`{${ze(e.path)}}`;case"color":return Sn(e);case"dimension":return H(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return jo(e);case"duration":return Lo(e);case"cubicBezier":return Go(e)}}i(Po,"projectValue");function No(e){let n={$value:Po(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(No,"projectToken");function we(e){let n={};for(let[o,t]of Object.entries(e))n[x(o)]=b(t)?No(t):we(t);return n}i(we,"projectGroup");function ie(e,n){let o={$description:n,...we(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
10
+ `}i(ie,"renderSet");function wn(e){return ie(e,"Apollion DS \u2014 base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.")}i(wn,"renderBaseSet");function vn(e,n,o,t){return ie(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${t}. DTCG 2025.10.`)}i(vn,"renderColorSet");function Dn(e,n){return ie(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(Dn,"renderSpacingSet");function Tn(e,n){return ie(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(Tn,"renderFontSet");function $n(e,n){let{modifiers:o}=n,t=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],s={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:t,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(s,null,2)}
11
+ `}i($n,"renderResolver");var Fo="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function _o(e,n,o){let t=[];if(e.description!==void 0&&t.push(e.description),e.deprecated===!0?t.push("@deprecated"):typeof e.deprecated=="string"&&t.push(`@deprecated ${e.deprecated}`),t.length!==0){o.push(`${n}/**`);for(let r of t)o.push(`${n} * ${r.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}i(_o,"emitDoc");function Cn(e,n,o){let t=" ".repeat(n);for(let[r,s]of Object.entries(e))b(s)?(_o(s,t,o),o.push(`${t}${JSON.stringify(r)}: ${JSON.stringify(V(s.value))},`)):(o.push(`${t}${r}: {`),Cn(s,n+1,o),o.push(`${t}},`))}i(Cn,"emitGroup");function Vn(e){let{brand:n,mode:o,surface:t,dimension:r}=e.meta,s=[Fo,`// Variant: brand=${n} mode=${o} surface=${t} dimension=${r}`,"","export const tokens = {"];return Cn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
12
+ `)}i(Vn,"renderTs");var Bo=["light","dark"],zo=["positive","negative"],Ho=["compact","normal","spacious"];function se(e){let n=e.modes??Bo,o=e.surfaces??zo,t=e.dimensions??Ho,r=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of r)for(let l of n)for(let f of o)for(let R of t)s.push({brand:a,colors:c,mode:l,surface:f,dimension:R});return s}i(se,"expandVariants");function Mn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i(Mn,"variantName");import{createHash as Ko}from"node:crypto";function ae(e){return Ko("sha256").update(e).digest("hex")}i(ae,"sha256");function De(e){return ae(ve(e))}i(De,"hashConfig");function ve(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(ve).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${ve(e[t])}`).join(",")}}`}i(ve,"stableStringify");function En(e){try{let{execSync:n}=so("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}i(En,"detectGitCommit");function An(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(An,"buildEnv");function On(e){let n=[...e.files].sort((t,r)=>t.path.localeCompare(r.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
13
+ `}i(On,"serializeManifest");var Wo="json/sets",Ln="json/resolver.json";function ce(e){return`${Wo}/${e}.json`}i(ce,"setFile");function Jo(e,n,o){return`${e}.color.${n}.${o}`}i(Jo,"colorSetName");function qo(e){return`spacing.${e}`}i(qo,"spacingSetName");function Uo(e){return`font.${e}`}i(Uo,"fontSetName");function le(e,n){e.includes(n)||e.push(n)}i(le,"pushUnique");function Gn(e){let n=se(e),o=[],t=[],r=[],s=[],a=new Set,c=[],l=new Set,f=[],R=new Set,w=[];for(let u of n){le(o,u.brand),le(t,u.mode),le(r,u.surface),le(s,u.dimension);let d=Jo(u.brand,u.mode,u.surface);a.has(d)||(a.add(d),c.push({kind:"color",name:d,file:ce(d),brand:u.brand,mode:u.mode,surface:u.surface}));let y=qo(u.dimension);l.has(y)||(l.add(y),f.push({kind:"spacing",name:y,file:ce(y),dimension:u.dimension}));let m=Uo(u.dimension);R.has(m)||(R.add(m),w.push({kind:"font",name:m,file:ce(m),dimension:u.dimension}))}return{base:{kind:"base",name:"base",file:ce("base")},spacing:f,font:w,color:c,modifiers:{brand:o,mode:t,surface:r,dimension:s}}}i(Gn,"planSets");import{toDarkColors as dt}from"@apollion-dsi/core/themes/colors";import{createFoundation as Un}from"@apollion-dsi/core/themes/foundation";import{createSemantic as pt}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as ft}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as mt}from"@apollion-dsi/core/themes/surface";import{converter as _n,formatHex as j,interpolate as Xo,parse as S,wcagContrast as Bn}from"culori";var J=_n("oklch"),Yo=_n("rgb");function p(e,n,o){let t=S(e),r=S(n);if(!t||!r)return e;let s=Xo([t,r],"oklch");return j(s(o))??e}i(p,"mixOklch");function Zo(e){return e?typeof e=="string"?e:e.base:"#000"}i(Zo,"coerceToHex");var ue=1.3,Qo=.05,jn=.04,A=i((e,n)=>{let o=S(e),t=S(n);return!o||!t?1:Bn(o,t)},"contrastRatio"),K=i(e=>{let n=J(S(e));return n?n.l??0:null},"oklchLightness"),et=4.5;function W(e,n,o=et){let t=S(n),r=J(S(e));if(!t||!r)return e;let s=A("#fff",n)>=A("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=j(r)??e,l=S(c);if(l&&Bn(l,t)>=o)return c;let f=Math.min(1,Math.max(0,(r.l??0)+s));if(f===(r.l??0))break;r={...r,l:f}}return j(r)??e}i(W,"readableColor");var Pn=i((e,n)=>{if(A(e,n)>=ue)return!0;let o=K(e),t=K(n);return o!==null&&t!==null&&Math.abs(o-t)>=Qo},"isPerceptibleState"),Te=i(e=>e?A("#fff",e)>A("#000",e):!1,"isDarkSurface");function Nn(e,n,o){let t=J(S(e));if(!t)return null;let r={...t,l:o??t.l??0},s=n?jn:-jn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(r.l??0)+s));if(c===(r.l??0))break;r={...r,l:c};let l=j(r);if(l&&A(e,l)>=ue)return l}return j(r)??null}i(Nn,"derivePerceptibleState");function Fn(e,n,o){let t=Nn(e,n,o);if(t&&A(e,t)>=ue)return t;let r=Nn(e,!n);return r&&A(e,r)>=ue?r:t??r}i(Fn,"perceptibleStateFor");function T(e,n){let o=typeof e=="object"&&e!==null?e:void 0,t=Zo(e),r=n.deepDark,s=n.deepLight,a={base:t,dark:p(t,r,.6),action:p(t,r,.2),active:p(t,s,.6),light:p(t,s,.9),onLight:t};if(S(t)){let c=Te(n.baseLight),l=Pn(t,a.action);if(l||(a.action=Fn(t,c)??a.action),!Pn(t,a.active)){let f=l?void 0:K(a.action)??void 0;a.active=Fn(t,c,f)??a.active}}if(a.onLight=W(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:t,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??W(c,l)}}return a}i(T,"mountSingleColor");function zn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}i(zn,"mountGreyscaleColors");function Hn(e){let n=e.deepLight,o=e.deepDark,t=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,r=i(a=>1/17*(a-1),"interpolation"),s=p(t,o,.5);return{0:p(s,n,r(18)),5:p(s,n,r(17.5)),10:p(s,n,r(17)),20:p(s,n,r(16)),30:p(s,n,r(15)),40:p(s,n,r(14)),50:p(s,n,r(13)),60:p(s,n,r(12)),70:p(s,n,r(11)),80:p(s,n,r(10)),90:p(s,n,r(9)),100:p(s,n,r(8)),110:p(s,n,r(7)),120:p(s,n,r(6)),130:p(s,n,r(5)),140:p(s,n,r(4)),150:p(s,n,r(3)),160:p(s,n,r(2)),170:s,180:p(s,o,.25)}}i(Hn,"mountNeutralColors");function B(e,n){let o=J(S(e));if(!o)return e;let t=Math.min(1,Math.max(0,(o.l??0)+n));return j({...o,l:t})??e}i(B,"shiftLightness");function de(e,n){let o=J(S(e));if(!o)return e;let t=o.l??0,r=n.min??0,s=n.max??1;return t>=r&&t<=s?e:j({...o,l:Math.min(s,Math.max(r,t))})??e}i(de,"clampLightness");function P(e,n){let o=Yo(S(e));if(!o)return e;let t=Math.min(1,Math.max(0,n)),r=i(s=>Math.round((s??0)*255),"channel");return`rgba(${r(o.r)}, ${r(o.g)}, ${r(o.b)}, ${t})`}i(P,"toRgbaString");import{apcaContrast as pe,DARK_BOOST_TAPER_MAX_L as $e,DARK_ELEVATION_BOOST as nt,EDGE_ALPHA as Ce,HALATION_FLOORS as fe,INK_APCA_MIN as Ve,INK_MIX as Me,LADDER_DELTAS as Kn,MIN_CONTRAST_AA as Wn,WASH_ALPHA as ot}from"@apollion-dsi/core/themes/colors";var tt="#FFFFFF",Ee="#000000";function rt(e){return Te(e.baseLight)?"dark":"light"}i(rt,"resolvePolarity");function it(e){let n=fe.CANVAS_MIN_L;return e<=n?1:e>=$e?0:($e-e)/($e-n)}i(it,"darkElevationBoostFactor");function Jn(e,n,o){if(Math.abs(pe(e,n))>=o)return e;let t=Math.abs(pe("#ffffff",n))>=Math.abs(pe("#000000",n)),r=e;for(let s=0;s<40;s+=1){let a=B(r,t?.02:-.02);if(a===r||(r=a,Math.abs(pe(r,n))>=o))break}return r}i(Jn,"ensureApca");function st(e,n){let o=e.baseLight??tt,t=n==="dark",r=t?de(o,{min:fe.CANVAS_MIN_L}):o,s=B(r,Kn.sunken),a=t?it(K(r)??0):0,c=i(l=>Kn[l]+a*nt[l],"delta");return{canvas:r,sunken:t?de(s,{min:fe.CANVAS_MIN_L}):s,paper:B(r,c("paper")),raised:B(r,c("raised")),overlay:B(r,c("overlay")),scrim:t?e.deepLight??Ee:e.neutral?.["180"]??e.baseDark??Ee}}i(st,"deriveSurface");function at(e,n){let o=e.baseDark??Ee,t=de(Jn(W(o,n.paper,Wn),n.paper,Ve.primary),{max:fe.INK_MAX_L}),r=i((s,a)=>Jn(W(p(t,n.canvas,s),n.paper,Wn),n.paper,a),"tier");return{primary:t,secondary:r(Me.secondary,Ve.secondary),muted:r(Me.muted,Ve.muted),disabled:p(t,n.canvas,Me.disabled)}}i(at,"deriveInk");function ct(e){return{hairline:P(e.primary,Ce.hairline),border:P(e.primary,Ce.border),strong:P(e.primary,Ce.strong)}}i(ct,"deriveEdge");function lt(e,n){let o=ot[n];return{hover:P(e.primary,o.hover),pressed:P(e.primary,o.pressed),selected:P(e.primary,o.selected)}}i(lt,"deriveWash");function ut(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}i(ut,"applyOverride");function qn(e,n){let o=rt(e),t=st(e,o),r=at(e,t),s={surface:t,ink:r,edge:ct(r),wash:lt(r,o)};return ut(s,n?.[o])}i(qn,"resolveSurfaceLadder");function gt(e){let n=Hn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:zn(e),...qn({...e,neutral:n},e.ladder),main:T(e.main,e),opposite:T(e.opposite,e),complementary:T(e.complementary,e),danger:T(e.danger,e),information:T(e.information,e),success:T(e.success,e),warning:T(e.warning,e),primary:T(e.primary,e),secondary:T(e.secondary,e),tertiary:T(e.tertiary,e)}}i(gt,"composeColors");function O(e,n=ft){let o=e.mode==="dark"?dt(e.colors):e.colors,t=gt(o),r=Z(n,e.dimension),s=pt({colors:t,spacing:r}),a=Un(s);return e.surface==="negative"&&(a=Un(mt({semantic:s,colors:t},"negative").semantic)),{foundation:a,colors:t}}i(O,"buildVariantThemes");async function no(e){let{config:n,outDir:o,cwd:t=process.cwd(),verbose:r=!1}=e,s=se(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await ht(q(bt(),"apollion-tokens-"));try{let l=[],f=i(async(u,d)=>{await Rt(c,u,d),l.push({path:u,sha256:ae(d)}),r&&console.log(` \u2713 ${u}`)},"emit");if(a.json){let u=Gn(n),d=[],y=un();d.push(y),await f(u.base.file,wn(y));for(let m of u.spacing){let k=s.find(U=>U.dimension===m.dimension),{foundation:M}=O(k),E=fn(M,m.dimension);d.push(E),await f(m.file,Dn(E,m.dimension))}for(let m of u.font){let k=dn(m.dimension);d.push(k),await f(m.file,Tn(k,m.dimension))}for(let m of u.color){let k=s.find(ge=>ge.brand===m.brand&&ge.mode===m.mode&&ge.surface===m.surface),{foundation:M,colors:E}=O(k),U=pn(M,E);d.push(U),await f(m.file,vn(U,m.brand,m.mode,m.surface))}tn(d),await f(Ln,$n(n,u))}if(a.css||a.ts)for(let u of s){let{foundation:d,colors:y}=O(u),m=_(d,y,u),k=Mn(u);a.css&&await f(`css/${k}.css`,kn(m,{rgbCompanions:a.tailwind})),a.ts&&await f(`ts/${k}.d.ts`,Vn(m))}if(a.cssModes){let u=new Map;for(let d of s){let y=`${d.brand}.${d.surface}.${d.dimension}`,m=u.get(y)??{};m[d.mode]=d,u.set(y,m)}for(let[d,{light:y,dark:m}]of u){if(!y||!m)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${d} (config.modes)`);let k=O(y),M=O(m),E=In(_(k.foundation,k.colors,y),_(M.foundation,M.colors,m),{rgbCompanions:a.tailwind});await f(`css/${d}.modes.css`,E)}}if(a.tailwind){let u=s[0],{foundation:d,colors:y}=O(u),m=_(d,y,u);await f("tailwind/preset.mjs",yn(m)),await f("tailwind/tw-merge.mjs",bn(m))}if(a.designMd){let u=[...new Set(s.map(d=>d.brand))];for(let d of u){let m=s.filter(k=>k.brand===d).map(k=>{let{foundation:M,colors:E}=O(k);return _(M,E,k)});await f(`design/${d}.design.md`,xn(d,m))}}let R={configHash:De(n),files:l,gitCommit:En(t),buildEnv:An()},w=On(R);return await Qn(q(c,"manifest.json"),w),await Yn(o,{recursive:!0,force:!0}),await Zn(eo(o),{recursive:!0}),await yt(c,o),r&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:R,outDir:o}}catch(l){throw await Yn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}i(no,"build");async function oo(e){let{config:n,outDir:o}=e,t;try{t=JSON.parse(await Xn(q(o,"manifest.json"),"utf8"))}catch{return!1}if(t.configHash!==De(n))return!1;for(let r of t.files){let s;try{s=await Xn(q(o,r.path))}catch{return!1}if(ae(s)!==r.sha256)return!1}return!0}i(oo,"check");async function Rt(e,n,o){let t=q(e,n);await Zn(eo(t),{recursive:!0}),await Qn(t,o)}i(Rt,"writeAt");import{readFile as It}from"node:fs/promises";import{resolve as xt}from"node:path";import{createContext as St,Script as wt}from"node:vm";import{z as g}from"zod";var v=g.string().regex(/^#([0-9a-fA-F]{3}){1,2}$|^transparent$|^rgb\(.*\)$|^oklch\(.*\)$/,{message:'Must be hex, rgb(), oklch(), or "transparent"'}),kt=g.object({baseDark:g.string().optional(),baseLight:g.string().optional(),deepDark:v,deepLight:v,transparent:g.string().optional(),main:v.optional(),opposite:v.optional(),complementary:v.optional(),information:v.optional(),success:v.optional(),danger:v.optional(),warning:v.optional(),primary:v.optional(),secondary:v.optional(),tertiary:v.optional()}).passthrough(),to=g.object({brands:g.record(g.string(),kt).refine(e=>Object.keys(e).length>0,{message:"apollion.config.mjs: brands must contain at least 1 entry"}),modes:g.array(g.enum(["light","dark"])).optional(),surfaces:g.array(g.enum(["positive","negative"])).optional(),dimensions:g.array(g.enum(["compact","normal","spacious"])).optional(),output:g.object({runtime:g.boolean().optional(),css:g.boolean().optional(),json:g.boolean().optional(),ts:g.boolean().optional(),designMd:g.boolean().optional(),tailwind:g.boolean().optional(),cssModes:g.boolean().optional()}).passthrough().optional()}).passthrough();var vt=[/\brequire\s*\(/,/\bimport\s*\(/,/^\s*import\s+/m],Dt=1e3;var Ae=class Ae extends Error{constructor(o,t){super(o);this.configPath=t;this.name="ConfigLoadError"}};i(Ae,"ConfigLoadError");var N=Ae;async function ro(e){let n=xt(e.configPath),o=await It(n,"utf8");for(let l of vt)if(l.test(o))throw new N(`apollion.config: dynamic require/import not allowed (matched ${l}). Declarative config only \u2014 see ADR-006 \xA73.8 B3.`,n);let t=o.replace(/(^|\n)\s*export\s+default\s+/,(l,f)=>`${f}__apollion_config_export = `);if(t===o)throw new N("apollion.config: missing `export default <object>;` \u2014 config must export a default object literal.",n);let r={__apollion_config_export:void 0,console:Tt(),Symbol,Number,String,Boolean,Array,Object,JSON,Math,defineConfig:i(l=>l,"defineConfig")},s=St(r);try{new wt(t,{filename:n}).runInContext(s,{timeout:Dt})}catch(l){throw new N(`apollion.config: evaluation failed \u2014 ${l instanceof Error?l.message:String(l)}`,n)}let a=r.__apollion_config_export;if(a===void 0)throw new N("apollion.config: `export default` produced undefined.",n);let c=to.safeParse(a);if(!c.success){let l=c.error.issues.map(f=>` ${f.path.join(".")||"(root)"}: ${f.message}`).join(`
14
14
  `);throw new N(`apollion.config: schema validation failed \u2014
15
- ${l}`,n)}return c.data}i(Yn,"loadConfig");function br(){return{log:i((...e)=>console.log("[apollion.config]",...e),"log"),warn:i((...e)=>console.warn("[apollion.config]",...e),"warn"),error:i((...e)=>console.error("[apollion.config]",...e),"error")}}i(br,"makeReadOnlyConsole");function kr(e){let n=e.slice(2),o=n[0];o!=="build"&&pe(`Unknown command "${o??""}". Usage: apollion-tokens build [--check] [--verbose] --config <path> [--out <dir>]`);let r="apollion.config.mjs",t="dist",s=!1,a=!1;for(let c=1;c<n.length;c++){let l=n[c];switch(l){case"--config":r=n[++c]??pe("--config needs a path");break;case"--out":t=n[++c]??pe("--out needs a path");break;case"--check":s=!0;break;case"--verbose":a=!0;break;default:pe(`Unknown flag "${l}"`)}}return{command:o,configPath:r,outDir:t,check:s,verbose:a}}i(kr,"parseArgs");function pe(e){console.error(`apollion-tokens: ${e}`),process.exit(2)}i(pe,"fail");async function Ir(e){let n=Ve(e);if(n.endsWith(".json")){let o=await Rr(n,"utf8");return JSON.parse(o)}return Yn({configPath:n})}i(Ir,"loadConfigFromPath");async function xr(){let e=kr(process.argv),n=await Ir(e.configPath);if(e.check){await Un({config:n,outDir:Ve(e.outDir)})||(console.error("apollion-tokens: dist/ is stale, missing, or has drifted from its manifest. Re-run `apollion-tokens build` without --check."),process.exit(1)),console.log("apollion-tokens: dist/ is up-to-date with config.");return}let{manifest:o}=await qn({config:n,outDir:Ve(e.outDir),verbose:e.verbose});console.log(`apollion-tokens: wrote ${o.files.length} file(s) \u2014 configHash=${o.configHash.slice(0,12)}\u2026`)}i(xr,"main");xr().catch(e=>{console.error(`apollion-tokens: ${e instanceof Error?e.message:String(e)}`),process.exit(1)});
15
+ ${l}`,n)}return c.data}i(ro,"loadConfig");function Tt(){return{log:i((...e)=>console.log("[apollion.config]",...e),"log"),warn:i((...e)=>console.warn("[apollion.config]",...e),"warn"),error:i((...e)=>console.error("[apollion.config]",...e),"error")}}i(Tt,"makeReadOnlyConsole");function Ct(e){let n=e.slice(2),o=n[0];o!=="build"&&me(`Unknown command "${o??""}". Usage: apollion-tokens build [--check] [--verbose] --config <path> [--out <dir>]`);let t="apollion.config.mjs",r="dist",s=!1,a=!1;for(let c=1;c<n.length;c++){let l=n[c];switch(l){case"--config":t=n[++c]??me("--config needs a path");break;case"--out":r=n[++c]??me("--out needs a path");break;case"--check":s=!0;break;case"--verbose":a=!0;break;default:me(`Unknown flag "${l}"`)}}return{command:o,configPath:t,outDir:r,check:s,verbose:a}}i(Ct,"parseArgs");function me(e){console.error(`apollion-tokens: ${e}`),process.exit(2)}i(me,"fail");async function Vt(e){let n=Oe(e);if(n.endsWith(".json")){let o=await $t(n,"utf8");return JSON.parse(o)}return ro({configPath:n})}i(Vt,"loadConfigFromPath");async function Mt(){let e=Ct(process.argv),n=await Vt(e.configPath);if(e.check){await oo({config:n,outDir:Oe(e.outDir)})||(console.error("apollion-tokens: dist/ is stale, missing, or has drifted from its manifest. Re-run `apollion-tokens build` without --check."),process.exit(1)),console.log("apollion-tokens: dist/ is up-to-date with config.");return}let{manifest:o}=await no({config:n,outDir:Oe(e.outDir),verbose:e.verbose});console.log(`apollion-tokens: wrote ${o.files.length} file(s) \u2014 configHash=${o.configHash.slice(0,12)}\u2026`)}i(Mt,"main");Mt().catch(e=>{console.error(`apollion-tokens: ${e instanceof Error?e.message:String(e)}`),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollion-dsi/tokens",
3
- "version": "5.9.0",
3
+ "version": "6.0.0",
4
4
  "description": "Apollion Design System — Framework-agnostic design tokens",
5
5
  "homepage": "https://www.apollion.com.br",
6
6
  "license": "MIT",
@@ -67,7 +67,7 @@
67
67
  },
68
68
  "devDependencies": {
69
69
  "@apollion-dsi/core": "workspace:*",
70
- "@apollion-dsi/eslint-config": "0.9.1",
70
+ "@apollion-dsi/eslint-config": "0.10.0",
71
71
  "@types/culori": "4.0.1",
72
72
  "@types/jest": "30.0.0",
73
73
  "@types/node": "25.7.0",
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Motion builder — **Strangler Fig duplicate** of
3
+ * `@apollion-dsi/core/themes/motion` (ADR-027).
4
+ *
5
+ * Mirrors the Tier-1 duration/easing scales, the reduced-motion-exempt
6
+ * indicator channel, and the Tier-2 intents. Axis-invariant (identical for
7
+ * every brand/mode/surface/dimension). Formatting is delegated to core's
8
+ * `createMotion`, so raw CSS strings are byte-equal by construction; the
9
+ * parity suite pins the mirror.
10
+ *
11
+ * @see ./colors.ts (Strangler Fig contract notes)
12
+ */
13
+ import type {
14
+ MotionDurationKey,
15
+ MotionEasingKey,
16
+ MotionEasingPoints,
17
+ MotionIndicatorKey,
18
+ MotionInput,
19
+ MotionIntentKey,
20
+ } from '@apollion-dsi/core/themes/motion';
21
+ import { createMotion, defaultInputMotion } from '@apollion-dsi/core/themes/motion';
22
+
23
+ /** A resolved duration: the numeric ms plus the CSS string core emits. */
24
+ export interface MotionDurationEntryValue {
25
+ readonly ms: number;
26
+ readonly css: string;
27
+ }
28
+
29
+ /** A resolved easing: the bezier control points plus the CSS string core emits. */
30
+ export interface MotionEasingEntryValue {
31
+ readonly points: MotionEasingPoints;
32
+ readonly css: string;
33
+ }
34
+
35
+ /** A resolved Tier-2 intent, with reference targets for DTCG aliasing. */
36
+ export interface MotionIntentEntryValue {
37
+ /** Tier-1 duration key the intent references, or `null` for a direct value
38
+ * (the `settle` 2750ms outlier). */
39
+ readonly durationRef: MotionDurationKey | null;
40
+ readonly duration: MotionDurationEntryValue;
41
+ /** Tier-1 easing key the intent references (always a reference). */
42
+ readonly easingRef: MotionEasingKey;
43
+ readonly easing: MotionEasingEntryValue;
44
+ }
45
+
46
+ /** Resolved `[key, { ms, css }]` pairs of the Tier-1 duration scale, ascending. */
47
+ export function motionDurationEntries(
48
+ input: MotionInput = defaultInputMotion,
49
+ ): ReadonlyArray<readonly [MotionDurationKey, MotionDurationEntryValue]> {
50
+ const resolved = createMotion(input);
51
+ return (Object.keys(input.duration) as MotionDurationKey[]).map(
52
+ (key) => [key, { ms: input.duration[key], css: resolved.duration[key] }] as const,
53
+ );
54
+ }
55
+
56
+ /** Resolved `[key, { points, css }]` pairs of the Tier-1 easing scale. */
57
+ export function motionEasingEntries(
58
+ input: MotionInput = defaultInputMotion,
59
+ ): ReadonlyArray<readonly [MotionEasingKey, MotionEasingEntryValue]> {
60
+ const resolved = createMotion(input);
61
+ return (Object.keys(input.easing) as MotionEasingKey[]).map(
62
+ (key) => [key, { points: input.easing[key], css: resolved.easing[key] }] as const,
63
+ );
64
+ }
65
+
66
+ /** Resolved `[key, { ms, css }]` pairs of the indicator channel. */
67
+ export function motionIndicatorEntries(
68
+ input: MotionInput = defaultInputMotion,
69
+ ): ReadonlyArray<readonly [MotionIndicatorKey, MotionDurationEntryValue]> {
70
+ const resolved = createMotion(input);
71
+ return (Object.keys(input.indicator) as MotionIndicatorKey[]).map(
72
+ (key) => [key, { ms: input.indicator[key], css: resolved.indicator[key] }] as const,
73
+ );
74
+ }
75
+
76
+ /** Resolved `[key, intent]` pairs of the Tier-2 intents, with reference targets. */
77
+ export function motionIntentEntries(
78
+ input: MotionInput = defaultInputMotion,
79
+ ): ReadonlyArray<readonly [MotionIntentKey, MotionIntentEntryValue]> {
80
+ const resolved = createMotion(input);
81
+ return (Object.keys(input.intent) as MotionIntentKey[]).map((key) => {
82
+ const intent = input.intent[key];
83
+ const durationRef = typeof intent.duration === 'number' ? null : intent.duration;
84
+ const ms = typeof intent.duration === 'number' ? intent.duration : input.duration[intent.duration];
85
+ return [
86
+ key,
87
+ {
88
+ durationRef,
89
+ duration: { ms, css: resolved.intent[key].duration },
90
+ easingRef: intent.easing,
91
+ easing: { points: input.easing[intent.easing], css: resolved.intent[key].easing },
92
+ },
93
+ ] as const;
94
+ });
95
+ }
package/src/ir.ts CHANGED
@@ -40,6 +40,12 @@ import { converter, formatHex, parse } from 'culori';
40
40
 
41
41
  import { breakpointEntries } from './builders/breakpoints';
42
42
  import { containerSizeEntries, layoutEntries } from './builders/layout';
43
+ import {
44
+ motionDurationEntries,
45
+ motionEasingEntries,
46
+ motionIndicatorEntries,
47
+ motionIntentEntries,
48
+ } from './builders/motion';
43
49
  import { createSpacing } from './builders/spacing';
44
50
  import type { Variant } from './config-schema';
45
51
  import type { ColorsThemeInterface } from './theme-factory';
@@ -47,7 +53,16 @@ import { assertTokenMetaResolves, TOKEN_META } from './token-meta';
47
53
 
48
54
  const toOklch = converter('oklch');
49
55
 
50
- export type IRTokenType = 'color' | 'dimension' | 'fontFamily' | 'fontWeight' | 'number' | 'strokeStyle' | 'shadow';
56
+ export type IRTokenType =
57
+ | 'color'
58
+ | 'dimension'
59
+ | 'fontFamily'
60
+ | 'fontWeight'
61
+ | 'number'
62
+ | 'strokeStyle'
63
+ | 'shadow'
64
+ | 'duration'
65
+ | 'cubicBezier';
51
66
 
52
67
  export interface IRColorValue {
53
68
  readonly kind: 'color';
@@ -91,6 +106,23 @@ export interface IRStrokeStyleValue {
91
106
  readonly style: string;
92
107
  }
93
108
 
109
+ /** DTCG `duration` — milliseconds by contract (ADR-027 motion scales). */
110
+ export interface IRDurationValue {
111
+ readonly kind: 'duration';
112
+ readonly raw: string;
113
+ readonly value: number;
114
+ readonly unit: 'ms';
115
+ }
116
+
117
+ /** DTCG `cubicBezier` — the four control points `[x1, y1, x2, y2]`. `raw` is
118
+ * always the functional `cubic-bezier(…)` form, never keywords (deterministic
119
+ * emission, parity-pinned against core). */
120
+ export interface IRCubicBezierValue {
121
+ readonly kind: 'cubicBezier';
122
+ readonly raw: string;
123
+ readonly points: readonly [number, number, number, number];
124
+ }
125
+
94
126
  export interface IRShadowLayer {
95
127
  readonly color: IRColorValue;
96
128
  readonly offsetX: IRDimensionValue;
@@ -111,7 +143,7 @@ export interface IRShadowValue {
111
143
  export interface IRReference {
112
144
  readonly kind: 'ref';
113
145
  readonly path: string;
114
- readonly resolved: IRColorValue | IRDimensionValue;
146
+ readonly resolved: IRColorValue | IRDimensionValue | IRDurationValue | IRCubicBezierValue;
115
147
  }
116
148
 
117
149
  export type IRValue =
@@ -122,6 +154,8 @@ export type IRValue =
122
154
  | IRNumberValue
123
155
  | IRStrokeStyleValue
124
156
  | IRShadowValue
157
+ | IRDurationValue
158
+ | IRCubicBezierValue
125
159
  | IRReference;
126
160
 
127
161
  export interface IRToken {
@@ -697,6 +731,61 @@ function buildLayoutConstants(): IRGroup {
697
731
  return out;
698
732
  }
699
733
 
734
+ /**
735
+ * Motion scales (ADR-027) — axis-invariant mirror of `theme.motion` via the
736
+ * Strangler Fig builder. Tier-1 `duration`/`easing` primitives, the
737
+ * reduced-motion-exempt `indicator` channel, and Tier-2 `intent` pairs whose
738
+ * members alias the Tier-1 tokens (DTCG references) — the `settle` duration
739
+ * is the one documented direct value (a component-tuned outlier kept out of
740
+ * the clean primitive scale).
741
+ *
742
+ * CSS emission (`--apollion-motion-*`) is byte-identical to what core's
743
+ * `GlobalStyle` emits at runtime (`motionVars`) — one canonical emitter per
744
+ * consumer class; the parity suite pins the values.
745
+ */
746
+ function buildMotion(): IRGroup {
747
+ const durationToken = (entry: { ms: number; css: string }): IRToken => ({
748
+ type: 'duration',
749
+ value: { kind: 'duration', raw: entry.css, value: entry.ms, unit: 'ms' },
750
+ });
751
+ const easingToken = (entry: { points: readonly [number, number, number, number]; css: string }): IRToken => ({
752
+ type: 'cubicBezier',
753
+ value: { kind: 'cubicBezier', raw: entry.css, points: entry.points },
754
+ });
755
+
756
+ const duration: Record<string, IRToken> = {};
757
+ for (const [key, entry] of motionDurationEntries()) duration[key] = durationToken(entry);
758
+
759
+ const easing: Record<string, IRToken> = {};
760
+ for (const [key, entry] of motionEasingEntries()) easing[key] = easingToken(entry);
761
+
762
+ const indicator: Record<string, IRToken> = {};
763
+ for (const [key, entry] of motionIndicatorEntries()) indicator[key] = durationToken(entry);
764
+
765
+ const intent: Record<string, IRGroup> = {};
766
+ for (const [key, entry] of motionIntentEntries()) {
767
+ const durationValue = durationToken(entry.duration).value as IRDurationValue;
768
+ intent[key] = {
769
+ duration: entry.durationRef
770
+ ? {
771
+ type: 'duration',
772
+ value: { kind: 'ref', path: `motion.duration.${entry.durationRef}`, resolved: durationValue },
773
+ }
774
+ : durationToken(entry.duration),
775
+ easing: {
776
+ type: 'cubicBezier',
777
+ value: {
778
+ kind: 'ref',
779
+ path: `motion.easing.${entry.easingRef}`,
780
+ resolved: easingToken(entry.easing).value as IRCubicBezierValue,
781
+ },
782
+ },
783
+ };
784
+ }
785
+
786
+ return { duration, easing, indicator, intent };
787
+ }
788
+
700
789
  /** `$extensions` payload documenting the breakpoint interval contract. */
701
790
  const BREAKPOINT_EXTENSION = {
702
791
  unit: 'px',
@@ -732,6 +821,7 @@ export function buildBaseIR(): IRSlice {
732
821
  breakpoint: buildBreakpoints(),
733
822
  'container-size': buildContainerSizes(),
734
823
  layout: buildLayoutConstants(),
824
+ motion: buildMotion(),
735
825
  },
736
826
  seen,
737
827
  );
@@ -835,6 +925,7 @@ export function buildIR(foundation: FoundationLayer, colors: ColorsThemeInterfac
835
925
  breakpoint: buildBreakpoints(),
836
926
  'container-size': buildContainerSizes(),
837
927
  layout: buildLayoutConstants(),
928
+ motion: buildMotion(),
838
929
  font: font.group,
839
930
  shadow: buildShadow(colors),
840
931
  },
@@ -11,7 +11,16 @@
11
11
  * @see https://www.designtokens.org/TR/drafts/format/ (DTCG 2025.10)
12
12
  */
13
13
 
14
- import type { IRColorValue, IRDimensionValue, IRGroup, IRShadowValue, IRToken, IRValue } from '../ir';
14
+ import type {
15
+ IRColorValue,
16
+ IRCubicBezierValue,
17
+ IRDimensionValue,
18
+ IRDurationValue,
19
+ IRGroup,
20
+ IRShadowValue,
21
+ IRToken,
22
+ IRValue,
23
+ } from '../ir';
15
24
  import { isToken, kebab, kebabPath } from '../ir';
16
25
 
17
26
  export interface DtcgColorValue {
@@ -35,7 +44,20 @@ export interface DtcgShadowValue {
35
44
  inset?: boolean;
36
45
  }
37
46
 
38
- export type DtcgTokenValue = DtcgColorValue | DtcgDimensionValue | DtcgShadowValue | string | number;
47
+ /** DTCG `duration` composite value — `{ value, unit }`, ms by contract. */
48
+ export interface DtcgDurationValue {
49
+ value: number;
50
+ unit: 'ms';
51
+ }
52
+
53
+ export type DtcgTokenValue =
54
+ | DtcgColorValue
55
+ | DtcgDimensionValue
56
+ | DtcgShadowValue
57
+ | DtcgDurationValue
58
+ | number[]
59
+ | string
60
+ | number;
39
61
 
40
62
  export interface DtcgToken {
41
63
  $value: DtcgTokenValue;
@@ -58,6 +80,15 @@ function dimensionValue(v: IRDimensionValue): DtcgDimensionValue {
58
80
  return { value: v.value, unit: v.unit };
59
81
  }
60
82
 
83
+ function durationValue(v: IRDurationValue): DtcgDurationValue {
84
+ return { value: v.value, unit: v.unit };
85
+ }
86
+
87
+ /** DTCG `cubicBezier` — the bare four-point array `[x1, y1, x2, y2]`. */
88
+ function cubicBezierValue(v: IRCubicBezierValue): number[] {
89
+ return [...v.points];
90
+ }
91
+
61
92
  function shadowValue(v: IRShadowValue): DtcgShadowValue {
62
93
  const s = v.shadow;
63
94
  const out: DtcgShadowValue = {
@@ -89,6 +120,10 @@ export function projectValue(value: IRValue): DtcgTokenValue {
89
120
  return value.style;
90
121
  case 'shadow':
91
122
  return shadowValue(value);
123
+ case 'duration':
124
+ return durationValue(value);
125
+ case 'cubicBezier':
126
+ return cubicBezierValue(value);
92
127
  }
93
128
  }
94
129
 
@@ -60,9 +60,12 @@ function renderSet(slice: IRSlice, description: string): string {
60
60
  return `${JSON.stringify(doc, null, 2)}\n`;
61
61
  }
62
62
 
63
- /** Axis-invariant base set (border). */
63
+ /** Axis-invariant base set (border, breakpoints, container sizes, layout, motion). */
64
64
  export function renderBaseSet(slice: IRSlice): string {
65
- return renderSet(slice, 'Apollion DS — base set (axis-invariant: border). DTCG 2025.10.');
65
+ return renderSet(
66
+ slice,
67
+ 'Apollion DS — base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.',
68
+ );
66
69
  }
67
70
 
68
71
  /** Colour set for one (brand × mode × surface). */
@@ -20,8 +20,11 @@
20
20
  * **Scope (v1):** foundation groups only — `bg`/`text`/`tx` → `colors`,
21
21
  * `spacing` → `spacing`, `border.radius`/`border.width` → `borderRadius`/
22
22
  * `borderWidth`, `font.*` → `fontFamily`/`fontSize`/`fontWeight`/`lineHeight`,
23
- * `shadow` → `boxShadow`. `border.style` has no Tailwind theme scale —
24
- * deliberately unmapped. No dependency on the component-token tier.
23
+ * `shadow` → `boxShadow`, `motion.duration`/`motion.easing` →
24
+ * `transitionDuration`/`transitionTimingFunction` (ADR-027; Tier-1 only —
25
+ * the `intent` pairs and the `indicator` channel have no composite Tailwind
26
+ * scale and stay var-informational). `border.style` has no Tailwind theme
27
+ * scale — deliberately unmapped. No dependency on the component-token tier.
25
28
  *
26
29
  * @see ../ir.ts (source of truth) · css.ts (`-rgb` companions) ·
27
30
  * docs/plans/tailwind-preset-renderer.md (divergence-matrix row 6)
@@ -164,6 +167,8 @@ export function renderTailwindPreset(ir: IRDocument): string {
164
167
  pushScale(out, 'fontWeight', varEntries(groupAt(ir.groups, 'font', 'weight'), ['font', 'weight']));
165
168
  pushScale(out, 'lineHeight', varEntries(groupAt(ir.groups, 'font', 'lineHeight'), ['font', 'line-height']));
166
169
  pushScale(out, 'boxShadow', varEntries(groupAt(ir.groups, 'shadow'), ['shadow']));
170
+ pushScale(out, 'transitionDuration', varEntries(groupAt(ir.groups, 'motion', 'duration'), ['motion', 'duration']));
171
+ pushScale(out, 'transitionTimingFunction', varEntries(groupAt(ir.groups, 'motion', 'easing'), ['motion', 'easing']));
167
172
 
168
173
  out.push(' },', ' },', '};', '', 'export default preset;', '');
169
174
  return out.join('\n');