geneseed 4.18.1 → 4.20.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/DESIGN.md +5 -5
  3. package/SHIPPED.md +1 -1
  4. package/docs/extending.md +22 -30
  5. package/docs/web-ui.md +1 -1
  6. package/harness.config.json +1 -1
  7. package/js/README.md +1 -1
  8. package/js/build/source.mjs +27 -0
  9. package/js/inspect/checks-authoring.mjs +1 -1
  10. package/js/inspect/checks-constitution.mjs +66 -135
  11. package/js/inspect/checks-counts.mjs +3 -6
  12. package/js/web/catalog.mjs +11 -4
  13. package/js/web/user-files.mjs +1 -1
  14. package/package.json +1 -2
  15. package/src/doctrines/comms.md +5 -0
  16. package/src/doctrines/craft.md +7 -0
  17. package/src/doctrines/ops.md +7 -0
  18. package/src/doctrines/process.md +7 -0
  19. package/src/doctrines/rigor.md +5 -0
  20. package/src/laws/universal.md +11 -1
  21. package/src/skills/rule.md +4 -2
  22. package/web/dist/assets/Activity-nRkdnrgE.js +1 -0
  23. package/web/dist/assets/ActivityDetail-CMeNtKIN.js +1 -0
  24. package/web/dist/assets/Dashboard-B5-wUlXC.js +3 -0
  25. package/web/dist/assets/Docs-QmZs08QG.js +4 -0
  26. package/web/dist/assets/EmptyState-1sPNleqv.js +1 -0
  27. package/web/dist/assets/GreenhouseView-tHIvpI6U.js +1 -0
  28. package/web/dist/assets/Installs-DDWjgFDY.js +3 -0
  29. package/web/dist/assets/JournalView-DO0pPutM.js +1 -0
  30. package/web/dist/assets/{KitApply-BYyktcdw.js → KitApply-DZGqaZpV.js} +1 -1
  31. package/web/dist/assets/Kits-C1VS-BtR.js +1 -0
  32. package/web/dist/assets/Laws-Cu3pj44B.js +3 -0
  33. package/web/dist/assets/Library-CrTK5XsD.js +2 -0
  34. package/web/dist/assets/Loops-C7DPrKbV.js +2 -0
  35. package/web/dist/assets/OperatorHudView-BN27gXFS.js +1 -0
  36. package/web/dist/assets/Personal-Cz2rcqYw.js +1 -0
  37. package/web/dist/assets/RailCats-DNlJKicm.js +1 -0
  38. package/web/dist/assets/StackBar-CXARiXzd.js +1 -0
  39. package/web/dist/assets/Tabs-ChiCgm2F.js +1 -0
  40. package/web/dist/assets/activity-BGy8Bb_l.js +1 -0
  41. package/web/dist/assets/drawable-r1qCgRMK.js +1 -0
  42. package/web/dist/assets/index-BJlfPvpv.css +1 -0
  43. package/web/dist/assets/index-osXUqzdX.js +2 -0
  44. package/web/dist/index.html +2 -2
  45. package/web/dist/assets/Activity-CrBz-58G.js +0 -1
  46. package/web/dist/assets/ActivityDetail-ZgsHrwvj.js +0 -1
  47. package/web/dist/assets/Dashboard-Ds7_blrK.js +0 -3
  48. package/web/dist/assets/Docs-f2YJDQah.js +0 -4
  49. package/web/dist/assets/GreenhouseView-De8W1BvM.js +0 -1
  50. package/web/dist/assets/Installs-BFsJIIti.js +0 -3
  51. package/web/dist/assets/JournalView-DZHR1l1P.js +0 -1
  52. package/web/dist/assets/Kits-Dfch112m.js +0 -1
  53. package/web/dist/assets/Laws-BztN3C8x.js +0 -3
  54. package/web/dist/assets/Library-CrZGLGWE.js +0 -1
  55. package/web/dist/assets/Loops-BsbkBFl-.js +0 -2
  56. package/web/dist/assets/OperatorHudView-BB8BH5PL.js +0 -1
  57. package/web/dist/assets/Personal-LRrDvMje.js +0 -1
  58. package/web/dist/assets/RailCats-D5RVYEjy.js +0 -1
  59. package/web/dist/assets/Tabs-b-L-ra4k.js +0 -1
  60. package/web/dist/assets/activity-Jw8XcPiP.js +0 -1
  61. package/web/dist/assets/drawable-CuQpH-f5.js +0 -1
  62. package/web/dist/assets/index--3760QWr.js +0 -2
  63. package/web/dist/assets/index-FWb-1Qgz.css +0 -1
  64. package/web/src/pages/Laws.jsx +0 -683
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{C as r,T as i,w as a}from"./index--3760QWr.js";var o=e(t(),1),s=n();function c({label:e,value:t,options:n,onChange:r}){return n.length?(0,s.jsx)(`select`,{className:`sel`,"aria-label":e,value:t,onChange:e=>r(e.target.value),children:n.map(e=>(0,s.jsx)(`option`,{value:e,children:e},e))}):null}var l=[`lean`,`full`];function u({on:e,disabled:t,label:n,onToggle:r}){return(0,s.jsx)(`input`,{type:`checkbox`,role:`switch`,className:`sw-toggle${e?` on`:``}`,checked:e,"aria-checked":e,disabled:t,"aria-label":n,onChange:r,onKeyDown:e=>{e.key===`Enter`&&!t&&r()}})}var d=[{key:`theme`,name:`voice`,title:`Voice`},{key:`footprint`,name:`footprint`,title:`Footprint`},{key:`posture`,name:`posture`,title:`Posture`},{key:`mode`,name:`mode`,title:`Mode`},{key:`trust`,name:`trust`,title:`Loop trust`}];function f({value:e,options:t,onChange:n,who:r}){return d.map(i=>(0,s.jsxs)(`label`,{className:`dp-field`,children:[(0,s.jsx)(`span`,{children:i.title}),(0,s.jsx)(c,{label:`${i.name} for ${r}`,value:e[i.key],options:t[i.key],onChange:e=>n(i.key,e)})]},i.key))}var p=e=>e.kits||[],m=e=>!e.editable||e.state===`unreadable`;function h(e,t){let n=i(),s=a(),c=e=>{let t=s.get(`kits`,e.id);return t&&t.base===r(p(e))?t:null},{prune:l}=s;(0,o.useEffect)(()=>{if(!e?.installs)return;let t=new Map(e.installs.map(e=>[e.id,r(p(e))]));l(`kits`,(e,n)=>t.has(e)&&t.get(e)!==n.base)},[e,l]);let u=e=>c(e)?.value??new Set(p(e));return{setOf:u,toggle:(e,t)=>{let n=new Set(u(e));n.delete(t)||n.add(t),s.put(`kits`,e.id,n,r(p(e)))},change:e=>{let t=u(e),n=new Set(p(e));return{on:[...t].filter(e=>!n.has(e)),off:[...n].filter(e=>!t.has(e))}},apply:async e=>{let r=[...u(e)],i=`Rebuild ${e.host} · ${e.scope} with kits: ${r.join(`, `)||`none`}? Members of kits turned off are removed; files you edited are kept.`;await n(i,{confirmLabel:`Rebuild`})&&await t(`install`,{host:e.host,path:e.path,kits:r})&&s.startApply(`kits`,e.id)},running:e=>s.running(`kits`,e.id)||!!c(e)?.applied,failed:e=>!!c(e)?.failed}}function g({row:e,stage:t}){let{on:n,off:r}=t.change(e),i=n.length+r.length>0,a=t.running(e),o=[...n.map(e=>`turn on ${e}`),...r.map(e=>`turn off ${e}`)].join(` · `),c=t.failed(e)?`Last rebuild failed — see console`:``,l=a?`Rebuilding…`:[c,o].filter(Boolean).join(` · `)||`No staged changes`;return(0,s.jsxs)(`div`,{className:`kit-foot`,children:[(0,s.jsx)(`span`,{className:`kit-hint${i?` staged`:``}`,role:`status`,children:l}),(0,s.jsx)(`button`,{type:`button`,className:`btn soft sm`,"aria-label":`Apply kits for ${e.host} · ${e.scope}`,disabled:m(e)||!i||a,onClick:()=>t.apply(e),children:`Apply`})]})}var _={active:[`Active`,`ok`],disabled:[`Disabled`,`warn`]},v=({row:e})=>{let[t,n]=_[e.state]||[e.state||`Unknown`,``];return(0,s.jsx)(`span`,{className:`tag ${n}`,children:t})};export{h as a,u as c,p as i,v as n,l as o,m as r,f as s,g as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{A as r,E as i,T as a}from"./index-osXUqzdX.js";var o=e(t(),1),s=n();function c({label:e,value:t,options:n,onChange:r}){return n.length?(0,s.jsx)(`select`,{className:`sel`,"aria-label":e,value:t,onChange:e=>r(e.target.value),children:n.map(e=>(0,s.jsx)(`option`,{value:e,children:e},e))}):null}var l=[`lean`,`full`];function u({on:e,disabled:t,label:n,onToggle:r}){return(0,s.jsx)(`input`,{type:`checkbox`,role:`switch`,className:`sw-toggle${e?` on`:``}`,checked:e,"aria-checked":e,disabled:t,"aria-label":n,onChange:r,onKeyDown:e=>{e.key===`Enter`&&!t&&r()}})}var d=[{key:`theme`,name:`voice`,title:`Voice`},{key:`footprint`,name:`footprint`,title:`Footprint`},{key:`posture`,name:`posture`,title:`Posture`},{key:`mode`,name:`mode`,title:`Mode`},{key:`trust`,name:`trust`,title:`Loop trust`}];function f({value:e,options:t,onChange:n,who:r}){return d.map(i=>(0,s.jsxs)(`label`,{className:`dp-field`,children:[(0,s.jsx)(`span`,{children:i.title}),(0,s.jsx)(c,{label:`${i.name} for ${r}`,value:e[i.key],options:t[i.key],onChange:e=>n(i.key,e)})]},i.key))}var p=e=>e.kits||[],m=e=>!e.editable||e.state===`unreadable`;function h(e,t){let n=r(),s=i(),c=e=>{let t=s.get(`kits`,e.id);return t&&t.base===a(p(e))?t:null},{prune:l}=s;(0,o.useEffect)(()=>{if(!e?.installs)return;let t=new Map(e.installs.map(e=>[e.id,a(p(e))]));l(`kits`,(e,n)=>t.has(e)&&t.get(e)!==n.base)},[e,l]);let u=e=>c(e)?.value??new Set(p(e));return{setOf:u,toggle:(e,t)=>{let n=new Set(u(e));n.delete(t)||n.add(t),s.put(`kits`,e.id,n,a(p(e)))},change:e=>{let t=u(e),n=new Set(p(e));return{on:[...t].filter(e=>!n.has(e)),off:[...n].filter(e=>!t.has(e))}},apply:async e=>{let r=[...u(e)],i=`Rebuild ${e.host} · ${e.scope} with kits: ${r.join(`, `)||`none`}? Members of kits turned off are removed; files you edited are kept.`;await n(i,{confirmLabel:`Rebuild`})&&await t(`install`,{host:e.host,path:e.path,kits:r})&&s.startApply(`kits`,e.id)},running:e=>s.running(`kits`,e.id)||!!c(e)?.applied,failed:e=>!!c(e)?.failed}}function g({row:e,stage:t}){let{on:n,off:r}=t.change(e),i=n.length+r.length>0,a=t.running(e),o=[...n.map(e=>`turn on ${e}`),...r.map(e=>`turn off ${e}`)].join(` · `),c=t.failed(e)?`Last rebuild failed — see console`:``,l=a?`Rebuilding…`:[c,o].filter(Boolean).join(` · `)||`No staged changes`;return(0,s.jsxs)(`div`,{className:`kit-foot`,children:[(0,s.jsx)(`span`,{className:`kit-hint${i?` staged`:``}`,role:`status`,children:l}),(0,s.jsx)(`button`,{type:`button`,className:`btn soft sm`,"aria-label":`Apply kits for ${e.host} · ${e.scope}`,disabled:m(e)||!i||a,onClick:()=>t.apply(e),children:`Apply`})]})}var _={active:[`Active`,`ok`],disabled:[`Disabled`,`warn`]},v=({row:e})=>{let[t,n]=_[e.state]||[e.state||`Unknown`,``];return(0,s.jsx)(`span`,{className:`tag ${n}`,children:t})};export{h as a,u as c,p as i,v as n,l as o,m as r,f as s,g as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{t as r}from"./api-BfpZmUMI.js";import{O as i,k as a,q as o}from"./index-osXUqzdX.js";import{t as s}from"./EmptyState-1sPNleqv.js";import{a as c,n as l,o as u,r as d,t as f}from"./RailCats-DNlJKicm.js";import{t as p}from"./Markdown-OReRRoEV.js";import{a as m,c as h,i as g,n as _,r as v,t as y}from"./KitApply-DZGqaZpV.js";var b=e(t(),1),x=n(),S=encodeURIComponent,C=`Enabled`,w=`Not enabled`,T=e=>(e||``).split(/\s+/).filter(Boolean).length,E=e=>[...new Set(e.filter(Boolean))],D=e=>(e||``).slice(0,7);function O(e,t){return[C,w].flatMap(n=>e.map(e=>({k:e,on:t.filter(t=>g(t).includes(e.name))})).filter(({on:e})=>e.length>0==(n===C)).map(({k:e,on:t})=>{let r=e.credits||[],i=E(r.map(e=>e.author||e.repo)).join(`, `),a=E(r.map(e=>e.license)).join(`, `);return{name:e.name,desc:e.description,group:n,def:e,meta:[`${(e.skills||[]).length} skills · ${(e.agents||[]).length} agents · ${T(e.rules)} rule words`,t.length?`on in ${t.map(e=>`${e.host} · ${e.scope}`).join(`, `)}`:null,i?`from ${i}${a?` (${a})`:``}`:null].filter(Boolean).join(` — `)}}))}var k=({type:e,names:t,listed:n})=>t.length?(0,x.jsx)(`ul`,{className:`kit-links`,children:t.map(t=>(0,x.jsx)(`li`,{children:n?.has(t)?(0,x.jsx)(`a`,{href:`#/item/${e}/${S(t)}`,children:t}):(0,x.jsx)(`span`,{className:`kit-link-off`,title:`Installed when this kit is on`,children:t})},t))}):(0,x.jsx)(`p`,{className:`panel-note`,children:`None.`});function A({kit:e,installs:t,stage:n,listed:r}){let i=e.credits||[];return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`reader-tags`,children:[(0,x.jsx)(`span`,{className:`tag acc`,children:`Kit`}),E(i.map(e=>e.license)).map(e=>(0,x.jsx)(`span`,{className:`tag`,children:e},e))]}),(0,x.jsx)(`h2`,{className:`reader-title`,children:e.name}),e.description?(0,x.jsx)(`p`,{className:`reader-lede`,children:e.description}):null,(0,x.jsxs)(`p`,{className:`mono dim reader-src`,children:[`kits/`,e.name,`/`]}),(0,x.jsx)(`hr`,{className:`hr`}),(0,x.jsx)(`h3`,{className:`loop-h2`,children:`Installs`}),t.length?(0,x.jsx)(`ul`,{className:`kit-list kit-box`,"aria-label":`Installs for ${e.name}`,children:t.map(t=>{let r=v(t),i=`${t.host} · ${t.scope}`;return(0,x.jsxs)(`li`,{className:`kit-install`,children:[(0,x.jsxs)(`div`,{className:`kit-row`,children:[(0,x.jsxs)(`div`,{className:`kit-main`,children:[(0,x.jsx)(`b`,{children:i}),(0,x.jsx)(`span`,{className:`mono dim`,children:t.path})]}),(0,x.jsx)(_,{row:t}),(0,x.jsx)(h,{on:n.setOf(t).has(e.name),disabled:r||n.running(t),label:`${e.name} for ${i}`,onToggle:()=>n.toggle(t,e.name)})]}),r&&(0,x.jsx)(`p`,{className:`kit-lock`,children:t.reason||t.error}),(0,x.jsx)(y,{row:t,stage:n})]},t.id)})}):(0,x.jsx)(`p`,{className:`panel-note`,children:`No install yet.`}),i.length?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`h3`,{className:`loop-h2`,children:`Upstream`}),(0,x.jsx)(`dl`,{className:`loop-facts`,children:i.map(e=>(0,x.jsxs)(b.Fragment,{children:[(0,x.jsx)(`dt`,{children:e.author||e.repo}),(0,x.jsxs)(`dd`,{children:[(0,x.jsx)(`span`,{className:`mono`,children:e.repo}),e.commit?(0,x.jsxs)(`span`,{className:`mono dim`,children:[`@ `,D(e.commit)]}):null,e.compareUrl?(0,x.jsx)(`a`,{href:e.compareUrl,target:`_blank`,rel:`noreferrer`,"aria-label":`Compare ${e.repo} @ ${D(e.commit)} with HEAD`,children:`compare`}):null,e.license?(0,x.jsx)(`span`,{className:`tag`,children:e.license}):null]})]},e.key||e.repo))})]}):null,(0,x.jsx)(`h3`,{className:`loop-h2`,children:`Skills`}),(0,x.jsx)(k,{type:`skill`,names:e.skills||[],listed:r?.skills}),(0,x.jsx)(`h3`,{className:`loop-h2`,children:`Agents`}),(0,x.jsx)(k,{type:`agent`,names:e.agents||[],listed:r?.agents}),e.rules?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`h3`,{className:`loop-h2`,children:[`Rules`,` `,(0,x.jsxs)(`span`,{className:`mono dim`,children:[T(e.rules),e.rulesWordBudget?` / ${e.rulesWordBudget}`:``,` words`]})]}),(0,x.jsx)(`div`,{className:`lib-doc detail-doc`,children:(0,x.jsx)(p,{body:e.rules})})]}):null,e.banned?.length?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`h3`,{className:`loop-h2`,children:`Banned APIs`}),(0,x.jsx)(`ul`,{className:`kit-links`,"aria-label":`Banned APIs`,children:e.banned.map(e=>(0,x.jsx)(`li`,{children:(0,x.jsx)(`span`,{className:`kit-link-off`,children:e})},e))})]}):null]})}function j({item:e,onAction:t,dataRev:n}){let{data:p,error:h}=o(()=>r.kits(),[n]),g=m(p,t),[_,v]=(0,b.useState)(``),[y,C]=(0,b.useState)(`all`),w=p?.kits||[],T=p?.installs||[],E=O(w,T),D=y===`all`?E:E.filter(e=>e.group===y),k=u(D,_),j=!!e&&!!p&&!E.some(t=>t.name===e),M=j?null:E.find(t=>t.name===e)||E[0]||null,{data:N}=o(()=>Promise.all([r.catalog(`skills`),r.catalog(`agents`)]).then(([e,t])=>({skills:new Set((e.items||[]).map(e=>e.name)),agents:new Set((t.items||[]).map(e=>e.name))})).catch(()=>null),[n]),P=h||p?.error,F=E.length>=8?l(E):[];return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(i,{error:P,style:{margin:`0 0 var(--sp-3)`}}),(0,x.jsxs)(`div`,{className:`library`,children:[(0,x.jsxs)(`aside`,{className:`lib-kinds`,"aria-label":`Kits sections`,children:[(0,x.jsxs)(`div`,{className:`lib-title`,children:[(0,x.jsx)(`h1`,{className:`h`,children:`Kits`}),(0,x.jsx)(`span`,{className:`dim`,children:`Optional bundles`})]}),F.length>1?(0,x.jsx)(`nav`,{className:`kind-list`,"aria-label":`Sections`,children:(0,x.jsx)(f,{label:`Status`,total:E.length,cats:F,cat:y,onChange:C})}):null]}),(0,x.jsx)(c,{label:`Kits`,count:_.trim()?`${k.length} of ${D.length}`:p?D.length:``,q:_,onQ:v,matched:k.length,inView:[e],children:p?E.length===0?P?null:(0,x.jsx)(s,{title:`No kits`,children:`This Geneseed ships no kit.`}):(0,x.jsx)(d,{rows:k,activeName:M?.name,hrefOf:e=>`#/kits/${S(e.name)}`}):P?null:(0,x.jsx)(a,{})}),(0,x.jsx)(`article`,{className:`lib-reader`,"aria-label":`Entry`,children:j?(0,x.jsxs)(s,{title:`No such kit`,action:(0,x.jsx)(`a`,{href:`#/kits`,children:`Back to all kits`}),children:[`No kit is named “`,e,`”.`]}):M?(0,x.jsx)(A,{kit:M.def,installs:T,stage:g,listed:N},M.name):null})]})]})}export{j as default};
@@ -0,0 +1,3 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{t as r}from"./api-BfpZmUMI.js";import{A as i,E as a,M as o,O as s,S as c,T as l,_ as u,d,et as f,f as p,g as m,h,k as g,m as _,p as v,q as y,u as b,w as ee}from"./index-osXUqzdX.js";import{t as te}from"./EmptyState-1sPNleqv.js";import{a as x,t as S}from"./Markdown-OReRRoEV.js";import{t as C}from"./StackBar-CXARiXzd.js";var w=e(t(),1);function T({items:e,packs:t,install:n,canApply:r,onAction:o,gateArmed:s}){let c=i(),u=e.filter(e=>e.tier===`doctrine`&&e.active!==!1).map(e=>e.name),d=u.join(`,`),f=a(),p=n?`${n.host}:${n.scope}:${n.path}`:``,m=l(u),{prune:h}=f,g=e.length>0;(0,w.useEffect)(()=>{g&&h(`rules`,(e,t)=>e===p&&t.base!==m)},[g,p,m,h]);let _=f.get(`rules`,p),v=_&&_.base===m?_.value:u,y=e=>f.put(`rules`,p,e(v),m),b=e=>v.includes(e),ee=e=>y(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),te=e=>e.rules.some(e=>b(e.addr)),x=e=>{let t=e.rules.map(e=>e.addr),n=e.rules.every(e=>b(e.addr));y(e=>n?e.filter(e=>!t.includes(e)):[...new Set([...e,...t])])},S=e=>{let t=e.rules.filter(e=>b(e.addr)).length;return t?e.active?`${t} of ${e.rules.length} active`:`staged on · ${t} of ${e.rules.length}`:e.active?`staged off`:`not built in`},C=t.flatMap(e=>e.rules.map(e=>e.addr)),T=C.filter(b),E=T.join(`,`)!==d,D=`process.5`,O=u.includes(D)&&!v.includes(D);return{deployedRules:u,isOn:b,toggleRule:ee,packOn:te,togglePack:x,packState:S,allRules:C,pickedRules:T,dirty:E,losingConsent:O,applyPacks:async()=>{if(!r||!E)return;let e=t.filter(e=>e.rules.some(e=>b(e.addr))).map(e=>e.pack),i=t.filter(t=>e.includes(t.pack)).flatMap(e=>e.rules.filter(e=>!b(e.addr)).map(e=>e.addr)),a=O?`
2
+
3
+ process 5 carries commit/push consent. Dropping it also removes the git-gate hook, so commits and pushes stop being confirmed at the tool boundary. `+(s?`(Real data loss stays gated: that is Rule IV’s, not the pack’s.)`:`(Rule IV’s deletion gate is off on this install, so real data loss is not asked about either.)`):``,l=T.length?`${T.length} of ${C.length} doctrine rules`:`no doctrine rules`;await c(`Rebuild ${n.host} · ${n.scope} with ${l}? It rebuilds in place, non-destructive.${a}`,{title:`Rebuild with these rules?`,confirmLabel:`Rebuild`})&&await o(`install`,{...n,doctrines:e,excludeRules:i})&&f.startApply(`rules`,p)},revert:()=>f.drop(`rules`,p)}}var E=n();function D({addr:e,isOpen:t,onToggle:n,className:i,style:a,head:o,label:c,rev:l,toggleCol:u=null,renderBody:d,srcLine:f}){let p=(0,w.useId)(),{data:m,error:h,reload:g}=y(()=>t?r.item(`law`,e):Promise.resolve(null),[t,e,l],`law-item`),_=t&&(0,E.jsxs)(`div`,{className:`law-expand`,id:p,children:[h?(0,E.jsx)(s,{error:h,onRetry:g}):m?d(m):(0,E.jsx)(`p`,{className:`dim`,children:`Loading…`}),(0,E.jsx)(`div`,{className:`law-srcline`,children:f})]}),v={type:`button`,onClick:n,"aria-expanded":t,"aria-controls":p,"aria-label":c};return u?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{className:i,style:a,"data-addr":e,children:[(0,E.jsx)(`button`,{className:`law-disclosure`,...v,children:o}),(0,E.jsx)(`span`,{className:`toggle-col`,children:u})]}),_]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`button`,{className:i,style:a,"data-addr":e,...v,children:o}),_]})}function O({law:e,isOpen:t,onToggle:n,rev:r,toggleCol:i=null}){let a=(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`span`,{className:`law-no`,children:[(0,E.jsx)(`span`,{className:`x`,"aria-hidden":`true`,children:`›`}),e.no]}),(0,E.jsxs)(`span`,{className:`law-name`,children:[(0,E.jsx)(`span`,{children:e.name}),e.ess?(0,E.jsx)(`span`,{className:`law-princ`,children:e.ess}):null]}),(0,E.jsx)(`span`,{className:`law-latin`,children:e.latin}),(0,E.jsx)(`span`,{className:`law-status ${e.statusTone}`,children:e.status}),(0,E.jsx)(`span`,{className:`law-enf${e.enf===`Hook gate`?` hook`:e.enf===`Gate off`?` gate-off`:``}`,children:e.enf})]});return(0,E.jsx)(D,{addr:e.addr,isOpen:t,onToggle:n,className:`law-row${i?` has-toggle`:``}${t?` on`:``}${e.off?` law-off`:``}`,style:{"--cc":e.c},head:a,label:`${e.no?e.no+` `:``}${e.name}, ${e.status}, ${e.enf}`,rev:r,toggleCol:i,renderBody:t=>(0,E.jsx)(S,{body:t.body||e.ess,links:t.links}),srcLine:`$ geneseed law ${e.addr} · ${e.src}`})}var k=[`invariants`,`doctrines`];function ne({tiers:e,current:t,onPick:n}){return(0,E.jsx)(`div`,{className:`tier-strip`,children:e.map((e,r)=>{let i=(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`span`,{className:`tier-k mono`,children:[`RANK `,r+1]}),(0,E.jsxs)(`span`,{className:`tier-top`,children:[(0,E.jsx)(`span`,{className:`tier-name`,children:e.name}),(0,E.jsx)(`span`,{className:`tier-n mono`,children:e.n})]}),(0,E.jsx)(`span`,{className:`tier-bar`,"aria-hidden":`true`,children:(0,E.jsx)(`span`,{style:{width:`${Math.round(e.fill*100)}%`}})}),(0,E.jsx)(`span`,{className:`tier-sub`,children:e.sub}),(0,E.jsx)(`span`,{className:`tier-sub tier-rule`,children:e.rule})]}),a=`tier${t===e.key?` on`:``}`;return e.href?(0,E.jsx)(`a`,{className:`tier`,href:e.href,children:i},e.key):n&&k.includes(e.key)?(0,E.jsx)(`button`,{type:`button`,className:a,"aria-pressed":t===e.key,onClick:()=>n(t===e.key?`all`:e.key),children:i},e.key):(0,E.jsx)(`div`,{className:a,children:i},e.key)})})}function re({gates:e,byAddr:t,onJump:n,disarmed:r=()=>!1}){let i=Object.entries(e?.asks||{}).map(([e,t])=>[e,t,r(_(e))]).sort((e,t)=>e[2]-t[2]||t[1]-e[1]),a=Math.max(1,...i.map(([,e])=>e));return(0,E.jsxs)(`section`,{className:`panel`,"aria-labelledby":`gate-asks`,children:[(0,E.jsxs)(`div`,{className:`panel-head`,children:[(0,E.jsx)(`h2`,{id:`gate-asks`,children:`Gate asks`}),(0,E.jsxs)(`span`,{className:`mono dim`,children:[e?.total??0,` in ledger`]})]}),i.length?(0,E.jsx)(`ul`,{className:`gate-list`,children:i.map(([e,r,i])=>{let o=_(e),s=t[o]?.name||o;return(0,E.jsxs)(`li`,{children:[(0,E.jsx)(`button`,{type:`button`,className:`gate-row`,onClick:()=>n(o),children:(0,E.jsxs)(`span`,{className:`gate-top`,children:[(0,E.jsx)(`span`,{className:`gate-name${i?` dim`:``}`,children:s}),(0,E.jsx)(`span`,{className:`mono dim`,children:o}),i&&(0,E.jsx)(`span`,{className:`mono off`,children:`off`}),(0,E.jsx)(`span`,{className:`mono gate-n`,children:r})]})}),(0,E.jsx)(C,{value:r,max:a,label:`${s} asks`,tone:i?`accent`:`warn`})]},e)})}):(0,E.jsx)(`p`,{className:`sub`,children:`No gate has asked yet.`}),(0,E.jsx)(`p`,{className:`panel-note`,children:e?.standing_down?.length?`Standing down: ${e.standing_down.join(`, `)}.`:`None standing down.`})]})}function ie({packs:e,sel:t,canApply:n,install:r,gateArmed:i}){let{isOn:a,packOn:o,togglePack:s,dirty:c,losingConsent:l,revert:u}=t,d=Math.max(1,...e.map(e=>e.rules.length));return(0,E.jsxs)(`section`,{className:`panel`,"aria-labelledby":`doc-packs`,children:[(0,E.jsxs)(`div`,{className:`panel-head`,children:[(0,E.jsx)(`h2`,{id:`doc-packs`,children:`Doctrine packs`}),(0,E.jsxs)(`span`,{className:`mono dim`,children:[e.filter(o).length,`/`,e.length,` on`]})]}),e.length?(0,E.jsx)(`ul`,{className:`pack-list`,children:e.map(e=>{let t=e.rules.filter(e=>a(e.addr)).length;return(0,E.jsxs)(`li`,{className:o(e)?``:`off`,children:[(0,E.jsx)(`span`,{className:`pl-name`,title:e.desc,children:e.title}),(0,E.jsx)(C,{value:t,max:d,label:`${e.title} rules on`}),(0,E.jsx)(`span`,{className:`mono pl-n`,children:t}),n?(0,E.jsx)(`button`,{type:`button`,className:`sw-toggle${o(e)?` on`:``}${t&&t<e.rules.length?` mixed`:``}`,role:`checkbox`,"aria-checked":e.rules.length&&t===e.rules.length?`true`:t?`mixed`:`false`,"aria-label":`${e.title} pack`,onClick:()=>s(e)}):null]},e.pack)})}):(0,E.jsx)(`p`,{className:`sub`,children:`This install predates the three-tier constitution.`}),n&&e.length>0&&(0,E.jsxs)(E.Fragment,{children:[l&&(0,E.jsxs)(`p`,{className:`pack-warn`,role:`status`,"aria-live":`polite`,children:[`Dropping `,(0,E.jsx)(`b`,{children:`process 5`}),` also removes the commit/push consent gate:`,` `,(0,E.jsx)(`code`,{children:`git commit`}),` and `,(0,E.jsx)(`code`,{children:`git push`}),` stop being confirmed at the tool boundary.`,` `,i?`Real data loss stays gated by Rule IV.`:`Rule IV’s deletion gate is off on this install too.`]}),(0,E.jsx)(`div`,{className:`pack-apply`,children:(0,E.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:u,disabled:!c,children:`Revert`})}),(0,E.jsx)(`p`,{className:`panel-note`,role:`status`,"aria-live":`polite`,children:c?`Not applied yet. Apply rebuilds ${r.host} · ${r.scope} once, with every change together.`:`Matches the deployed install. Changing a pack rebuilds it.`})]})]})}function ae(e){let t=[];for(let n of e){if(n.tier!==`doctrine`)continue;let e=t.find(e=>e.pack===n.pack);e||(e={pack:n.pack,title:n.packTitle||n.pack,desc:n.packDesc||``,active:n.packActive!==!1,rules:[]},t.push(e));let r=h(n.title);e.rules.push({addr:n.name,no:`${n.pack} ${n.name.split(`.`)[1]||``}`,name:r.name,latin:r.latin,ess:n.summary||``,enf:v(n.name),c:u[n.pack]||`var(--text-3)`,src:`doctrines/${n.pack}.md`})}return t}function A({selected:e,overview:t,setup:n,onAction:a,dataRev:l}){let _=i(),{data:S,error:C}=y(()=>r.catalog(`laws`),[l],`catalog:laws`),{data:D}=c(l),[k,A]=(0,w.useState)(`all`),[j,oe]=(0,w.useState)(``),M=e||null,N=e=>f(M===e?`#/laws`:`#/item/law/${encodeURIComponent(e)}`),[se,ce]=(0,w.useState)(0),P=(0,w.useRef)(null);(0,w.useEffect)(()=>{if(!e)return;let t=requestAnimationFrame(()=>{let t=document.querySelector(`[data-addr="${e}"]`);if(!t)return;let n=P.current===e;P.current=null;let r=t.getBoundingClientRect();if(n||r.top<80||r.bottom>window.innerHeight){let e=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches;t.scrollIntoView?.({block:`center`,behavior:e?`auto`:`smooth`})}n&&(t.classList.remove(`law-flash`),t.offsetWidth,t.classList.add(`law-flash`))});return()=>cancelAnimationFrame(t)},[e,se,S]);let F=S?.items||[],I=ae(F),L=e=>t?.install?.[d[e].key]!==!1,R=L(`IV`),z=t?.install,B=!!(z&&a),V=T({items:F,packs:I,install:z,canApply:B,onAction:a,gateArmed:R}),{deployedRules:H,isOn:U,toggleRule:le,packOn:ue,packState:de,allRules:W}=V;if(C)return(0,E.jsx)(s,{error:C});if(!S)return(0,E.jsx)(g,{});let G={ontology:S.nouns?.ontology||`Ethos`,law:S.nouns?.law||`Dictate`,laws:S.nouns?.laws||`Dictates`,doctrines:S.nouns?.doctrines||`Doctrines`},K=F.filter(e=>e.tier===`ontology`).map(e=>({addr:e.name,no:``,name:e.title,latin:``,ess:``,status:`Always`,statusTone:`ok`,enf:`Instruction`,c:`var(--text-3)`,src:`ontology/universal.md`})),q=F.filter(e=>(e.tier??`invariant`)===`invariant`).map(e=>{let n=e.klass&&m[e.klass]?e.klass:`craft`,r=h(e.title);return{addr:e.name,no:e.name,name:r.name,latin:r.latin,ess:e.summary||``,retired:r.retired,status:r.retired?`Retired`:`Active`,statusTone:r.retired?``:`ok`,enf:r.retired?`None`:v(e.name,t?.install),cat:n,c:m[n].c,off:r.retired,src:`laws/universal.md`}}),fe=e=>{let t=U(e.addr),n=H.includes(e.addr),r=t===n?t?`Active`:`Off`:t?`Staged on`:`Staged off`;return{...e,off:!t,status:r,statusTone:t?`ok`:t===n?``:`warn`}},pe=I.filter(e=>e.active).flatMap(e=>e.rules.filter(e=>!H.includes(e.addr)).map(e=>e.addr)),me=async e=>{if(!B)return;let{key:t,label:n}=d[e],r=n.toLowerCase(),i=!L(e),o=`${z.host} · ${z.scope}`,s=V.dirty?` Your staged doctrine changes are not part of this rebuild; they stay staged.`:``;await _((i?`Re-arm the ${r} on ${o}? ${b[e].arm} It rebuilds in place, non-destructive.`:`Switch the ${r} off on ${o}? ${b[e].off} It rebuilds in place, non-destructive.`)+s,{title:i?`Re-arm the ${r}?`:`Switch the ${r} off?`,confirmLabel:i?`Re-arm`:`Switch off`})&&a(`install`,{...z,[t]:i})},J=j.trim().toLowerCase(),Y=e=>!J||`${e.addr} ${e.name} ${e.latin} ${e.ess}`.toLowerCase().includes(J),he=e=>{let t=ye[e],n=String(e).includes(`.`);(n&&k===`invariants`||!n&&k===`doctrines`)&&A(`all`),t&&!Y(t)&&oe(``),P.current=e,ce(e=>e+1),f(`#/item/law/${encodeURIComponent(e)}`)},X=q.filter(e=>!e.retired).length,Z=H.length,Q=D?.stats,ge={ethos:{name:G.ontology,n:K.length,fill:1,sub:`${K.length} sections`},invariants:{name:G.laws,n:X,fill:q.length?X/q.length:0,sub:q.length>X?`${X} active · ${q.length-X} retired`:`${X} active`},doctrines:{name:G.doctrines,n:Z,fill:W.length?Z/W.length:0,sub:`${Z} rules · ${I.filter(e=>e.active).length} of ${I.length} packs`},yours:{name:`Your rules`,n:Q?.rules??0,fill:Q?Q.rules/Q.max_rules:0,sub:Q?`${Q.rules} of ${Q.max_rules} · ${Q.tokens}/${Q.max_tokens} tok`:`user-rules.md`,href:`#/personal/rules`}},_e=e=>{if(e===`—`)return`Nothing outranks them.`;let t=e.replace(`{{LAW}}`,G.law);return`${t[0].toUpperCase()}${t.slice(1)}.`},ve=p.map(e=>({key:e.key,...ge[e.key],rule:_e(e.against)})),ye=Object.fromEntries([...q,...I.flatMap(e=>e.rules)].map(e=>[e.addr,e])),be=[[`all`,`All`,q.length+W.length],[`invariants`,G.laws,q.length],[`doctrines`,G.doctrines,W.length]],xe=k===`all`||k===`invariants`,Se=k===`all`||k===`doctrines`,Ce=(e,t)=>(0,E.jsxs)(`div`,{className:`band-head`,role:`presentation`,children:[(0,E.jsx)(`h2`,{className:`tier-h`,children:e}),(0,E.jsx)(`span`,{className:`mono dim`,children:t})]}),$=q.filter(Y),we=(xe?$.length:0)+(Se?I.reduce((e,t)=>e+t.rules.filter(Y).length,0):0);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(ee,{title:`Constitution`,sub:`What the agent follows on every turn. Ranked: a lower rank may tighten a higher one, never repeal it. Open any rule to read its canonical text.`,primary:B&&I.length>0&&V.dirty?(0,E.jsxs)(`button`,{type:`button`,className:`btn`,onClick:V.applyPacks,children:[`Apply (`,V.pickedRules.length,`/`,W.length,` rules)`]}):null}),(0,E.jsx)(ne,{tiers:ve,current:k,onPick:A}),(0,E.jsxs)(`div`,{className:`split`,children:[(0,E.jsxs)(`section`,{className:`panel flush law-wrap${B?` with-toggle`:``}`,"aria-label":`Rules`,children:[K.length>0&&(0,E.jsxs)(E.Fragment,{children:[Ce(G.ontology,`ontology/universal.md`),K.map(e=>(0,E.jsx)(O,{law:e,rev:l,isOpen:M===e.addr,onToggle:()=>N(e.addr)},e.addr))]}),(0,E.jsxs)(`div`,{className:`law-toolbar`,children:[(0,E.jsx)(o,{"aria-label":`Show`,children:be.map(([e,t,n])=>(0,E.jsxs)(`button`,{type:`button`,className:k===e?`on`:``,"aria-pressed":k===e,onClick:()=>A(e),children:[t,` `,(0,E.jsx)(`span`,{className:`mono`,children:n})]},e))}),(0,E.jsx)(x,{className:`law-filter`,value:j,onChange:oe,placeholder:`Filter rules`,label:`Filter rules`})]}),(0,E.jsxs)(`div`,{className:`law-rowhead`,children:[(0,E.jsx)(`span`,{children:`No.`}),(0,E.jsx)(`span`,{children:`Rule`}),(0,E.jsx)(`span`,{children:`Latin name`}),(0,E.jsx)(`span`,{children:`Status`}),(0,E.jsx)(`span`,{children:`Enforced by`})]}),xe&&$.length>0&&(0,E.jsxs)(E.Fragment,{children:[Ce(G.laws,`laws/universal.md`),$.map(e=>(0,E.jsx)(O,{law:e,rev:l,isOpen:M===e.addr,onToggle:()=>N(e.addr),toggleCol:!B||e.retired?null:d[e.addr]?(0,E.jsx)(`button`,{type:`button`,className:`sw-toggle${L(e.addr)?` on`:``}`,role:`switch`,"aria-checked":L(e.addr),"aria-label":d[e.addr].label,onClick:()=>me(e.addr)}):(0,E.jsx)(`span`,{className:`no-gate`,title:`Enforced by its text alone: no hook gate`,children:`no gate`})},e.addr))]}),Se&&I.map(e=>{let t=e.rules.filter(Y);return t.length?(0,E.jsxs)(`div`,{className:`pack-wrap${ue(e)?``:` pack-off`}`,children:[(0,E.jsxs)(`div`,{className:`band-head pack-head`,children:[(0,E.jsx)(`h2`,{className:`tier-h`,style:{"--cc":u[e.pack]},children:e.title}),(0,E.jsx)(`span`,{className:`pack-desc dim`,children:e.desc}),(0,E.jsx)(`span`,{className:`pack-state mono`,children:de(e)})]}),!e.active&&!B&&(0,E.jsxs)(`div`,{className:`pack-enable`,children:[`$ geneseed-build --doctrines`,` `,I.filter(t=>t.active||t.pack===e.pack).map(e=>e.pack).join(`,`),pe.length>0&&` --exclude-rules ${pe.join(`,`)}`]}),t.map(e=>(0,E.jsx)(O,{law:fe(e),rev:l,isOpen:M===e.addr,onToggle:()=>N(e.addr),toggleCol:B?(0,E.jsx)(`button`,{type:`button`,className:`sw-toggle${U(e.addr)?` on`:``}`,role:`switch`,"aria-checked":U(e.addr),"aria-label":`${e.name} rule`,onClick:()=>le(e.addr)}):null},e.addr))]},e.pack):null}),we===0&&(0,E.jsx)(te,{title:J?`No matching rules`:`Nothing in this tier`,children:J?(0,E.jsxs)(E.Fragment,{children:[`Nothing matches “`,j.trim(),`”.`]}):(0,E.jsx)(E.Fragment,{children:`This install predates the tier.`})})]}),(0,E.jsxs)(`aside`,{className:`aside-stack`,children:[(0,E.jsx)(ie,{packs:I,sel:V,canApply:B,install:z,gateArmed:R}),(0,E.jsx)(re,{gates:n?.gates,byAddr:ye,onJump:he,disarmed:e=>!!d[e]&&!L(e)})]})]})]})}export{A as default};
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{t as r}from"./api-BfpZmUMI.js";import{n as i,t as a}from"./sections-ChwaobfW.js";import{A as o,B as s,O as c,et as l,q as u,v as d,x as ee,y as f}from"./index-osXUqzdX.js";import{t as p}from"./EmptyState-1sPNleqv.js";import{a as te,i as m,o as ne,r as re,s as ie,t as ae}from"./RailCats-DNlJKicm.js";import{t as oe}from"./Markdown-OReRRoEV.js";var h=e(t(),1),g=n();function _({load:e}){let t=String(e||`lazy`).toLowerCase();return(0,g.jsx)(`span`,{className:`mf-load mf-load-${t===`eager`?`ok`:t===`exclude`?`warn`:`muted`}`,children:t})}function v({entries:e}){return e.length?(0,g.jsxs)(`table`,{className:`mf-entries`,children:[(0,g.jsx)(`thead`,{className:`sr-only`,children:(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`th`,{scope:`col`,children:`Path`}),(0,g.jsx)(`th`,{scope:`col`,children:`Load`}),(0,g.jsx)(`th`,{scope:`col`,children:`Description`})]})}),(0,g.jsx)(`tbody`,{children:e.map((e,t)=>{let n=String(e.load).toLowerCase()===`exclude`;return(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`td`,{className:`mf-path mono ${n?`mf-struck`:``}`,children:e.path||`·`}),(0,g.jsx)(`td`,{className:`mf-load-cell`,children:(0,g.jsx)(_,{load:e.load})}),(0,g.jsx)(`td`,{className:`mf-edesc`,children:e.description||``})]},`${e.path||t}-${t}`)})})]}):null}function y({wiki:e}){let t=Array.isArray(e.entries)?e.entries:[],n=Array.isArray(e.protected)?e.protected:[];return(0,g.jsxs)(`div`,{className:`mf-vault`,children:[(0,g.jsxs)(`div`,{className:`mf-vault-head`,children:[(0,g.jsx)(`div`,{className:`mf-vault-name`,children:e.name||`wiki`}),e.path?(0,g.jsx)(`code`,{className:`mf-vault-path mono`,children:e.path}):null]}),e.description?(0,g.jsx)(`p`,{className:`mf-vault-desc`,children:e.description}):null,(0,g.jsxs)(`div`,{className:`mf-roles`,children:[e.conventions?(0,g.jsxs)(`span`,{className:`mf-role`,children:[(0,g.jsx)(s,{name:`skill`,className:`glyph`}),` conventions: `,e.conventions]}):null,e.inbox?(0,g.jsxs)(`span`,{className:`mf-role`,children:[(0,g.jsx)(s,{name:`notebook`,className:`glyph`}),` inbox: `,e.inbox]}):null,n.map(e=>(0,g.jsxs)(`span`,{className:`mf-role mf-role-danger`,children:[(0,g.jsx)(s,{name:`law`,className:`glyph`}),` protected: `,e]},e))]}),(0,g.jsx)(v,{entries:t})]})}function b({body:e}){let[t,n]=(0,h.useState)(!1),r=(0,h.useId)();return e?(0,g.jsxs)(`div`,{className:`mf-raw`,children:[(0,g.jsxs)(`button`,{type:`button`,className:`mf-raw-toggle`,"aria-expanded":t,"aria-controls":r,onClick:()=>n(e=>!e),children:[(0,g.jsx)(s,{name:`chevron`,className:`glyph mf-caret ${t?`on`:``}`}),`Raw source`]}),t?(0,g.jsx)(`pre`,{id:r,className:`mf-raw-pre`,children:e.replace(/^```json\n|\n```$/g,``)}):null]}):null}function se({manifest:e,body:t,name:n}){if(!e)return(0,g.jsx)(`pre`,{className:`mf-raw-pre`,children:(t||``).replace(/^```json\n|\n```$/g,``)});if(e.kind===`wiki`){let n=e.wikis||[];return n.length?(0,g.jsxs)(`div`,{className:`mf-doc`,children:[n.map((e,t)=>(0,g.jsx)(y,{wiki:e},e.name||t)),(0,g.jsx)(b,{body:t})]}):(0,g.jsxs)(`div`,{className:`mf-empty`,children:[(0,g.jsx)(`div`,{className:`mf-empty-title`,children:`No wiki declared yet`}),(0,g.jsxs)(`p`,{children:[`A wiki is your machine-wide knowledge base — an Obsidian vault or any folder of linked markdown the agent reads from and writes back to. Declare one in`,` `,(0,g.jsx)(`code`,{className:`mono`,children:`geneseed-wiki.jsonc`}),` to switch it on.`]}),(0,g.jsx)(`a`,{className:`btn ghost sm`,href:`#/docs/wiki`,children:`How to configure a wiki`}),(0,g.jsx)(b,{body:t})]})}let r=e.context||[];return r.length?(0,g.jsxs)(`div`,{className:`mf-doc`,children:[(0,g.jsx)(v,{entries:r}),(0,g.jsx)(b,{body:t})]}):(0,g.jsxs)(`div`,{className:`mf-empty`,children:[(0,g.jsx)(`div`,{className:`mf-empty-title`,children:`No project context declared`}),(0,g.jsxs)(`p`,{children:[`Point the agent at the docs for this project by adding entries to`,` `,(0,g.jsx)(`code`,{className:`mono`,children:n||`context.json`}),` — each with a`,` `,(0,g.jsx)(`code`,{className:`mono`,children:`path`}),`, a `,(0,g.jsx)(`code`,{className:`mono`,children:`load`}),` mode (eager or lazy), and a description.`]}),(0,g.jsx)(b,{body:t})]})}var x={fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},S={advocate:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M16 50h14M23 50V14`}),(0,g.jsx)(`path`,{className:`ag-wave ag-f`,d:`M23 15h20l-5 7.5 5 7.5H23z`}),(0,g.jsx)(`path`,{className:`ag-call`,d:`M47 38a6 6 0 0 1 0 8M51 35a11 11 0 0 1 0 14`})]}),architect:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`rect`,{x:`14`,y:`14`,width:`36`,height:`32`,rx:`2`,opacity:`.3`}),(0,g.jsx)(`path`,{className:`ag-draw`,pathLength:`100`,d:`M20 40V22h12v9h12v9z`}),(0,g.jsx)(`path`,{className:`ag-draw ag-late`,pathLength:`100`,d:`M32 31v9`}),(0,g.jsx)(`path`,{d:`M14 52h36M14 50v4M50 50v4`,opacity:`.5`})]}),developer:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`rect`,{className:`ag-f`,x:`10`,y:`14`,width:`44`,height:`36`,rx:`4`}),(0,g.jsx)(`path`,{d:`M10 22h44`,opacity:`.5`}),(0,g.jsx)(`circle`,{cx:`15`,cy:`18`,r:`1`}),(0,g.jsx)(`circle`,{cx:`19`,cy:`18`,r:`1`}),(0,g.jsx)(`path`,{className:`ag-nudge-l`,d:`M24 30l-6 6 6 6`}),(0,g.jsx)(`path`,{className:`ag-nudge-r`,d:`M40 30l6 6-6 6`}),(0,g.jsx)(`path`,{className:`ag-blink`,d:`M30 42h5`})]}),"devops-engineer":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M32 32c-5-9-18-9-18 0s13 9 18 0c5-9 18-9 18 0s-13 9-18 0z`,opacity:`.3`}),(0,g.jsx)(`path`,{className:`ag-draw`,pathLength:`100`,d:`M32 32c-5-9-18-9-18 0s13 9 18 0c5-9 18-9 18 0s-13 9-18 0z`}),(0,g.jsx)(`circle`,{className:`ag-pulse ag-f`,cx:`32`,cy:`32`,r:`3`})]}),"docker-expert":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`rect`,{className:`ag-rise ag-f`,x:`14`,y:`36`,width:`10`,height:`9`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-late ag-f`,x:`27`,y:`36`,width:`10`,height:`9`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-later ag-f`,x:`40`,y:`36`,width:`10`,height:`9`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-late ag-f`,x:`20`,y:`25`,width:`10`,height:`9`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-later ag-f`,x:`34`,y:`25`,width:`10`,height:`9`}),(0,g.jsx)(`path`,{d:`M8 52c5 0 5-3 10-3s5 3 10 3 5-3 10-3 5 3 10 3 5-3 10-3`,opacity:`.5`})]}),docs:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{className:`ag-f`,d:`M16 10h22l8 8v36H16z`}),(0,g.jsx)(`path`,{d:`M38 10v8h8`,opacity:`.5`}),(0,g.jsx)(`path`,{className:`ag-draw`,pathLength:`100`,d:`M21 26h18`}),(0,g.jsx)(`path`,{className:`ag-draw ag-late`,pathLength:`100`,d:`M21 33h18`}),(0,g.jsx)(`path`,{className:`ag-draw ag-later`,pathLength:`100`,d:`M21 40h11`}),(0,g.jsx)(`g`,{className:`ag-write`,children:(0,g.jsx)(`path`,{d:`M40 44l12-20 3 2-12 20-4 1z`})})]}),empiricist:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M12 12v40h40`,opacity:`.5`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-f`,x:`18`,y:`36`,width:`6`,height:`14`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-late ag-f`,x:`29`,y:`28`,width:`6`,height:`22`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-later ag-f`,x:`40`,y:`20`,width:`6`,height:`30`}),(0,g.jsx)(`path`,{className:`ag-draw`,pathLength:`100`,d:`M16 34l12-8 10 3 12-14`})]}),explorer:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`circle`,{cx:`32`,cy:`32`,r:`18`,opacity:`.5`}),(0,g.jsx)(`path`,{d:`M32 10v4M32 50v4M10 32h4M50 32h4`}),(0,g.jsxs)(`g`,{className:`ag-search`,children:[(0,g.jsx)(`path`,{className:`ag-f`,d:`M32 18l5 14h-10z`}),(0,g.jsx)(`path`,{d:`M32 18l5 14-5 14-5-14z`})]}),(0,g.jsx)(`circle`,{cx:`32`,cy:`32`,r:`2`})]}),framer:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`g`,{className:`ag-frame`,children:(0,g.jsx)(`path`,{d:`M12 22V12h10M42 12h10v10M52 42v10H42M22 52H12V42`})}),(0,g.jsx)(`circle`,{className:`ag-pulse`,cx:`32`,cy:`32`,r:`7`,opacity:`.6`}),(0,g.jsx)(`path`,{d:`M32 22v6M32 36v6M22 32h6M36 32h6`,opacity:`.6`}),(0,g.jsx)(`circle`,{cx:`32`,cy:`32`,r:`1.5`})]}),historian:(0,g.jsxs)(`g`,{className:`ag-turn`,children:[(0,g.jsx)(`path`,{d:`M20 12h24M20 52h24`}),(0,g.jsx)(`path`,{d:`M22 12c0 12 20 12 20 20s-20 8-20 20M42 12c0 12-20 12-20 20s20 8 20 20`}),(0,g.jsx)(`path`,{className:`ag-drain ag-f`,d:`M25 17h14c-1 6-5 9-7 11-2-2-6-5-7-11z`}),(0,g.jsx)(`path`,{className:`ag-fill ag-f`,d:`M24 49h16c-1-5-5-8-8-9-3 1-7 4-8 9z`})]}),operator:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M12 42a20 20 0 0 1 40 0`,opacity:`.4`}),(0,g.jsx)(`path`,{className:`ag-f`,d:`M40 24a20 20 0 0 1 12 18`,strokeWidth:`4`,opacity:`.7`}),(0,g.jsx)(`path`,{d:`M16 30l3 2M32 22v4M48 30l-3 2`,opacity:`.6`}),(0,g.jsx)(`g`,{className:`ag-gauge`,children:(0,g.jsx)(`path`,{d:`M32 42l10-13`})}),(0,g.jsx)(`circle`,{cx:`32`,cy:`42`,r:`3`}),(0,g.jsx)(`path`,{d:`M22 50h20`,opacity:`.5`})]}),pragmatist:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M32 14v36M22 50h20`}),(0,g.jsx)(`circle`,{cx:`32`,cy:`14`,r:`2`}),(0,g.jsxs)(`g`,{className:`ag-tilt`,children:[(0,g.jsx)(`path`,{d:`M14 18h36`}),(0,g.jsx)(`path`,{className:`ag-f`,d:`M14 18l-5 12h10zM50 18l-5 12h10z`})]})]}),"kubernetes-specialist":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`circle`,{cx:`32`,cy:`32`,r:`16`}),(0,g.jsx)(`path`,{d:`M32 8v13M32 43v13M8 32h13M43 32h13M15 15l9 9M40 40l9 9M49 15l-9 9M24 40l-9 9`,opacity:`.6`}),(0,g.jsx)(`circle`,{className:`ag-pulse ag-f`,cx:`32`,cy:`32`,r:`5`})]}),"memory-curator":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`rect`,{className:`ag-rise ag-f`,x:`17`,y:`16`,width:`14`,height:`20`,rx:`1`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-late ag-f`,x:`25`,y:`12`,width:`14`,height:`24`,rx:`1`}),(0,g.jsx)(`rect`,{className:`ag-rise ag-later ag-f`,x:`33`,y:`18`,width:`14`,height:`18`,rx:`1`}),(0,g.jsx)(`path`,{d:`M12 32h40v16a2 2 0 0 1-2 2H14a2 2 0 0 1-2-2z`}),(0,g.jsx)(`path`,{d:`M26 40h12`,opacity:`.6`})]}),researcher:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`circle`,{className:`ag-f`,cx:`30`,cy:`34`,r:`16`}),(0,g.jsx)(`path`,{d:`M14 34h32M30 18c-6 5-6 27 0 32`,opacity:`.5`}),(0,g.jsx)(`ellipse`,{className:`ag-spin`,cx:`30`,cy:`34`,rx:`7`,ry:`16`}),(0,g.jsx)(`g`,{className:`ag-orbit`,children:(0,g.jsx)(`circle`,{cx:`50`,cy:`14`,r:`3`})})]}),reviewer:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M12 18h30M12 26h40M12 34h24M12 42h34`,opacity:`.4`}),(0,g.jsx)(`path`,{className:`ag-mark`,d:`M42 30l3 3 6-6`}),(0,g.jsxs)(`g`,{className:`ag-sweep`,children:[(0,g.jsx)(`circle`,{className:`ag-f`,cx:`22`,cy:`30`,r:`9`}),(0,g.jsx)(`path`,{d:`M29 37l8 8`,strokeWidth:`3`})]})]}),performance:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M26 10h8M30 10v6M44 18l3-3`}),(0,g.jsx)(`circle`,{className:`ag-f`,cx:`30`,cy:`34`,r:`18`}),(0,g.jsx)(`path`,{d:`M30 19v3M45 34h-3M30 49v-3M15 34h3`,opacity:`.6`}),(0,g.jsx)(`g`,{className:`ag-orbit`,children:(0,g.jsx)(`path`,{d:`M30 34V22`})}),(0,g.jsx)(`circle`,{cx:`30`,cy:`34`,r:`2`})]}),security:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{className:`ag-ripple`,d:`M32 8l18 6v13c0 12-8 21-18 26-10-5-18-14-18-26V14z`}),(0,g.jsx)(`path`,{className:`ag-f`,d:`M32 8l18 6v13c0 12-8 21-18 26-10-5-18-14-18-26V14z`}),(0,g.jsx)(`path`,{className:`ag-draw`,pathLength:`100`,d:`M24 31l6 6 11-11`})]}),skeptic:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{className:`ag-f`,d:`M12 14h40v28H30l-10 8v-8h-8z`}),(0,g.jsxs)(`g`,{className:`ag-lean`,children:[(0,g.jsx)(`path`,{d:`M27 23a5 5 0 1 1 7 4.5c-1.5.8-2 2-2 3.5v1`}),(0,g.jsx)(`circle`,{cx:`32`,cy:`36`,r:`1.2`})]})]}),"spring-boot-engineer":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M22 20a16 16 0 1 0 20 0`}),(0,g.jsx)(`path`,{className:`ag-pulse`,d:`M32 12v18`}),(0,g.jsx)(`path`,{className:`ag-sway ag-f`,d:`M32 50c0-8 5-12 13-12 0 8-5 12-13 12z`})]}),"spring-reviewer":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M12 18h26M12 26h18M12 34h22M12 42h14`,opacity:`.4`}),(0,g.jsx)(`path`,{className:`ag-sway ag-f`,d:`M42 28c0-8 4-12 11-12 0 8-4 12-11 12z`}),(0,g.jsxs)(`g`,{className:`ag-sweep`,children:[(0,g.jsx)(`circle`,{className:`ag-f`,cx:`24`,cy:`32`,r:`9`}),(0,g.jsx)(`path`,{d:`M31 39l8 8`,strokeWidth:`3`})]})]}),"spring-security":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{className:`ag-ripple`,d:`M22 28v-6a10 10 0 0 1 20 0v6`}),(0,g.jsx)(`path`,{d:`M22 28v-6a10 10 0 0 1 20 0v6`}),(0,g.jsx)(`rect`,{className:`ag-f`,x:`16`,y:`28`,width:`32`,height:`24`,rx:`4`}),(0,g.jsx)(`circle`,{cx:`32`,cy:`38`,r:`3`}),(0,g.jsx)(`path`,{className:`ag-draw`,pathLength:`100`,d:`M32 41v6`})]}),"react-engineer":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`g`,{className:`ag-spin`,children:[(0,g.jsx)(`ellipse`,{cx:`32`,cy:`32`,rx:`20`,ry:`8`}),(0,g.jsx)(`ellipse`,{cx:`32`,cy:`32`,rx:`20`,ry:`8`,transform:`rotate(60 32 32)`}),(0,g.jsx)(`ellipse`,{cx:`32`,cy:`32`,rx:`20`,ry:`8`,transform:`rotate(120 32 32)`})]}),(0,g.jsx)(`circle`,{className:`ag-pulse ag-f`,cx:`32`,cy:`32`,r:`4`})]}),"react-reviewer":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`g`,{opacity:`.4`,children:[(0,g.jsx)(`ellipse`,{cx:`30`,cy:`30`,rx:`18`,ry:`7`}),(0,g.jsx)(`ellipse`,{cx:`30`,cy:`30`,rx:`18`,ry:`7`,transform:`rotate(60 30 30)`}),(0,g.jsx)(`ellipse`,{cx:`30`,cy:`30`,rx:`18`,ry:`7`,transform:`rotate(120 30 30)`})]}),(0,g.jsxs)(`g`,{className:`ag-sweep`,children:[(0,g.jsx)(`circle`,{className:`ag-f`,cx:`30`,cy:`30`,r:`8`}),(0,g.jsx)(`path`,{d:`M36 36l9 9`,strokeWidth:`3`})]})]}),steward:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M12 52h40`,opacity:`.5`}),(0,g.jsx)(`path`,{d:`M22 52c2-3 6-4 10-4s8 1 10 4`,opacity:`.4`}),(0,g.jsxs)(`g`,{className:`ag-grow`,children:[(0,g.jsx)(`path`,{d:`M32 50V26`}),(0,g.jsx)(`path`,{className:`ag-sway ag-f`,d:`M32 32c0-9 6-14 15-14 0 9-6 14-15 14z`}),(0,g.jsx)(`path`,{className:`ag-sway ag-late ag-f`,d:`M32 38c0-7-5-11-12-11 0 7 5 11 12 11z`})]})]}),tester:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{d:`M26 10h12M28 10v14L15 48a3 3 0 0 0 2.6 4.5h28.8A3 3 0 0 0 49 48L36 24V10`}),(0,g.jsx)(`path`,{className:`ag-f ag-slosh`,d:`M20 40h24l4.5 8.5H15.5z`}),(0,g.jsx)(`circle`,{className:`ag-bubble`,cx:`28`,cy:`44`,r:`2`}),(0,g.jsx)(`circle`,{className:`ag-bubble ag-late`,cx:`35`,cy:`46`,r:`1.5`}),(0,g.jsx)(`circle`,{className:`ag-bubble ag-later`,cx:`31`,cy:`42`,r:`1`})]}),"user-advocate":(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`circle`,{cx:`24`,cy:`20`,r:`6`}),(0,g.jsx)(`path`,{d:`M12 50c0-9 5-15 12-15 4 0 7 1.5 9 4`}),(0,g.jsx)(`path`,{className:`ag-beat ag-f`,d:`M44 52s-10-6-10-12.5a5 5 0 0 1 10-1.5 5 5 0 0 1 10 1.5C54 46 44 52 44 52z`}),(0,g.jsx)(`path`,{className:`ag-twinkle`,d:`M48 22v4M46 24h4`})]}),visionary:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`g`,{className:`ag-rays`,opacity:`.5`,children:(0,g.jsx)(`path`,{d:`M32 6v6M32 52v6M6 32h6M52 32h6M13.6 13.6l4.2 4.2M46.2 46.2l4.2 4.2M13.6 50.4l4.2-4.2M46.2 17.8l4.2-4.2`})}),(0,g.jsx)(`path`,{className:`ag-f ag-pulse`,d:`M32 16l4.7 10.4 11.3 1.2-8.5 7.6 2.4 11.1L32 40.6l-9.9 5.7 2.4-11.1-8.5-7.6 11.3-1.2z`}),(0,g.jsx)(`path`,{className:`ag-twinkle`,d:`M50 8v6M47 11h6`})]})},C=(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`path`,{className:`ag-f`,d:`M32 12l17 10v20L32 52 15 42V22z`}),(0,g.jsx)(`circle`,{className:`ag-pulse`,cx:`32`,cy:`32`,r:`6`})]});function ce({name:e,size:t=64}){return(0,g.jsxs)(`svg`,{className:`agent-glyph`,viewBox:`0 0 64 64`,width:t,height:t,"aria-hidden":`true`,...x,children:[(0,g.jsx)(`circle`,{className:`ag-disc`,cx:`32`,cy:`32`,r:`31`}),(0,g.jsx)(`circle`,{className:`ag-ring`,cx:`32`,cy:`32`,r:`31`,strokeWidth:`1`,strokeDasharray:`2 7`}),S[e]||C]})}function w(e,t){return e===`memory`?`memory/${t}`:e===`notebook`?`notebook/${t}`:e===`wiki`?`geneseed-wiki.jsonc`:e===`config`?t:`${e}/${t}.md`}function le({section:e,source:t}){return(0,g.jsxs)(`div`,{className:`lib-doc-empty`,children:[(0,g.jsx)(s,{name:i[e].icon,className:`glyph`}),(0,g.jsxs)(`span`,{children:[`This entry is part of the `,i[e].label.toLowerCase(),` convention; see`,` `,(0,g.jsx)(`code`,{className:`mono`,children:t}),`. It has no standalone per-entry document.`]})]})}var T=e=>e.replace(/\s+/g,` `).trim(),E=e=>e.replace(/^(?:[ \t]*\n)+/,``);function D(e,t){let n=e.replace(/\r\n/g,`
2
+ `),r=/^(?:[ \t]*\n)*[ ]{0,3}#[ \t]+(.*?)(?:[ \t]+#+)?[ \t]*(?:\n|$)/.exec(n);if(!r)return{title:null,body:e};let i=E(n.slice(r[0].length)),a=/^(?:>[^\n]*(?:\n|$))+/.exec(i),o=a?T(a[0].replace(/^>[ \t]?/gm,``)):``,s=t?T(t):``;return o&&(s===o||s.startsWith(o+` `))&&(i=E(i.slice(a[0].length))),{title:r[1].trim(),body:i}}var O=(e,t)=>t||(e&&a.includes(e)?e:a[0]),k=encodeURIComponent;function A(e){let t=e=>d[e.klass]?e.klass:`personal`,n=f.flatMap(n=>e.filter(e=>t(e)===n).map(e=>({...e,cat:n,group:d[n].label,groupC:d[n].c})));return{rows:n,cats:f.map(e=>({key:e,label:d[e].label,c:d[e].c,n:n.filter(t=>t.cat===e).length})).filter(e=>e.n>0)}}function j({overview:e,section:t,selected:n,dataRev:s,lock:f,base:_,onRulesChanged:v}){let y=o(),[b,x]=(0,h.useState)(()=>O(t,f)),[S,C]=(0,h.useState)(``),[T,E]=(0,h.useState)(`all`),[j,M]=(0,h.useState)(``),[ue,de]=(0,h.useState)(t);if(t!==ue){de(t);let e=O(t,f);e!==b&&(x(e),C(``),E(`all`))}let{data:N,error:fe,reload:P}=u(()=>r.catalog(b),[b,s],`catalog`),F=N?.section===b&&N?.items||[],I=b===`skills`,L=I?A(F):null,R=n||(I?L.rows[0]:F[0])?.name||null,z=R?F.find(e=>e.name===R):null,B=z?.type||i[b].type,{data:pe,error:V}=u(()=>R?r.item(B,R):Promise.resolve(null),[b,R,B,s]),H=V?null:pe,me=j||fe||V,he=R?{name:R,title:H?.title||R,desc:H?.desc||``}:null,U=z||he,ge=e?.counts||{},W=I?L.rows.filter(e=>T===`all`||e.cat===T):F,G=I?1/0:50,K=S.trim().toLowerCase(),q=K?ne(W,K):W.slice(0,G),_e=!K&&T===`all`&&R&&!q.some(e=>e.name===R)?[...q,...F.filter(e=>e.name===R)]:q,J=e=>_?`${_}/${k(e.name)}`:`#/item/${e.type||i[b].type}/${k(e.name)}`,ve=async()=>{let e=U?.name;if(e&&await y(`Forget the memory fact "${e}"? It leaves the index and moves to memory/archive/ (geneseed memory rm --archived --purge deletes it for good).`,{title:`Forget this fact?`,confirmLabel:`Forget`,tone:`danger`})){M(``);try{await r.memoryDelete(e)}catch(t){M(`Could not forget "${e}": ${t.message}`);return}l(_||`#/section/memory`),P()}},ye=async()=>{let e=U?.name;if(e&&await y(`Promote "${e}" into a standing rule? It is appended to user-rules.md as a trial rule (a month of probation), and the memory fact moves to memory/archive/ so the lesson isn't loaded twice.`,{title:`Promote to a rule?`,confirmLabel:`Promote`})){M(``);try{let t=await r.rules();await r.rulesPromote({name:e,fingerprint:t.fingerprint,delete_memory:!0}),ee(),v?.(),l(`#/personal/rules`)}catch(e){M(`Could not promote: ${e.message}`),P()}}},Y=H?.body?D(H.body,H.desc||U?.desc):null,X=H?.title||U?.title||U?.name,be=X===U?.name&&Y?.title?Y.title:X,Z=N?.section===b&&F.length===0,xe=H?.status||U?.status,Q=b===`skills`?d[z?.klass]:null,$=i[b].label;return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(c,{error:me,style:{margin:`0 0 var(--sp-3)`}}),(0,g.jsxs)(`div`,{className:`library${f?` locked`:``}`,children:[f?null:(0,g.jsxs)(`aside`,{className:`lib-kinds`,"aria-label":`Library kinds`,children:[(0,g.jsxs)(`div`,{className:`lib-title`,children:[(0,g.jsx)(`h1`,{className:`h`,children:`Library`}),(0,g.jsx)(`span`,{className:`dim`,children:`What the agent knows`})]}),(0,g.jsx)(`nav`,{className:`kind-list`,"aria-label":`Kinds`,children:a.map(e=>(0,g.jsxs)(h.Fragment,{children:[(0,g.jsxs)(`a`,{href:`#/section/${e}`,className:b===e?`on`:``,"aria-current":b===e?`page`:void 0,children:[i[e].label,(0,g.jsx)(`span`,{className:`mono dim`,children:ge[e]??``})]}),e===b&&I&&(0,g.jsx)(ae,{label:`Skill types`,total:F.length,cats:L.cats,cat:T,onChange:E})]},e))})]}),(0,g.jsxs)(te,{label:$,count:K?`${q.length} of ${W.length}`:W.length,q:S,onQ:C,matched:q.length,inView:[b,n],children:[(0,g.jsx)(re,{rows:_e,activeName:U?.name,hrefOf:J}),!K&&F.length>G&&(0,g.jsxs)(`div`,{className:`lib-more`,children:[`Showing `,G,` of `,F.length,`; type to search the rest.`]}),Z&&(b===`wiki`?(0,g.jsxs)(p,{title:`No wiki entries`,action:(0,g.jsx)(`a`,{href:`#/section/config`,children:`Open the setup files`}),docs:{href:`#/docs/wiki`,label:`How to configure a wiki →`},children:[`Declare a wiki in `,(0,g.jsx)(`code`,{className:`mono`,children:`geneseed-wiki.jsonc`}),` and its entries appear here.`]}):(0,g.jsx)(p,{title:`Nothing here yet`,children:`Once the harness produces entries they appear here.`}))]}),(0,g.jsx)(`article`,{className:`lib-reader`,"aria-label":`Entry`,children:U?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`reader-tags`,children:[(0,g.jsx)(`span`,{className:`tag acc`,children:$.replace(/s$/,``)}),Q?(0,g.jsx)(`span`,{className:`tag`,children:Q.label}):null,H?.kit??U.kit?(0,g.jsx)(m,{name:H?.kit??U.kit}):null,(0,g.jsx)(ie,{status:xe})]}),(0,g.jsxs)(`div`,{className:`reader-head`,children:[(0,g.jsx)(`h2`,{className:`reader-title`,children:be}),b===`agents`?(0,g.jsx)(ce,{name:U.name}):null]}),(H?.desc||U.desc)&&(0,g.jsx)(`p`,{className:`reader-lede`,children:H?.desc||U.desc}),(0,g.jsx)(`p`,{className:`mono dim reader-src`,children:H?.source||U.source||(V?null:w(b,U.name))}),b===`memory`&&U.name!==`MEMORY`&&U.name!==`README`&&(0,g.jsxs)(`div`,{className:`row gap-8`,children:[(0,g.jsx)(`button`,{type:`button`,className:`btn ghost sm`,onClick:ye,title:`Turn this lesson into a standing trial rule in user-rules.md`,children:`Promote to rule`}),(0,g.jsx)(`button`,{type:`button`,className:`btn ghost sm`,onClick:ve,children:`Forget this fact`})]}),(0,g.jsx)(`hr`,{className:`hr`}),V?(0,g.jsxs)(`p`,{className:`sub`,children:[`No `,$.replace(/s$/,``).toLowerCase(),` named `,(0,g.jsx)(`em`,{children:U.name}),` could be read in this install.`]}):U?.kind===`manifest`||H?.manifest!==void 0?H?(0,g.jsx)(se,{manifest:H.manifest,body:H.body,name:U.name}):(0,g.jsx)(`p`,{className:`sub`,children:`Loading…`}):H?.body?(0,g.jsx)(`div`,{className:`lib-doc detail-doc`,children:(0,g.jsx)(oe,{body:Y.body,links:H.links||[]})}):H===null&&R?(0,g.jsx)(`p`,{className:`sub`,children:`Loading…`}):(0,g.jsx)(le,{section:b,source:w(b,U.name)})]}):Z?null:(0,g.jsx)(p,{title:`Select an entry`,children:`Pick something from the list to read it.`})})]})]})}export{D as bodyHead,j as default,A as splitSkills};
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{t as r}from"./api-BfpZmUMI.js";import{$ as i,O as a,Q as o,k as s,q as c}from"./index-osXUqzdX.js";import{t as l}from"./EmptyState-1sPNleqv.js";import{t as u}from"./usePoll-bDFN-Hr6.js";import{a as d,n as f,o as p,r as m,t as h}from"./RailCats-DNlJKicm.js";import{t as g}from"./Markdown-OReRRoEV.js";var _=e(t(),1),v={x:260,y:190},y=110,b=28,x=14,S=44,C=e=>e*Math.PI/180,w=e=>Math.round(e*10)/10,T=(e,t=y,n=v)=>({x:w(n.x+t*Math.cos(C(e))),y:w(n.y+t*Math.sin(C(e)))}),E=e=>e/y*(180/Math.PI)+3,D=(e,t,n,r=0)=>`M${t.x},${t.y} A${e},${e} 0 ${r} 1 ${n.x},${n.y}`,O=w(T(205).x-6),k=e=>e.length*6.4,A=e=>({x:e.x-k(e.name)/2,y:e.y-7,w:k(e.name),h:14}),j=(e,t)=>e.x<t.x+t.w&&t.x<e.x+e.w&&e.y<t.y+t.h&&t.y<e.y+e.h,M=(e,t)=>e.some((n,r)=>[...e.slice(r+1),...t.filter(e=>!e.gate)].some(e=>j(A(n),A(e))));function N(e){return e?.gate===`human`?e.gateOn?.length?`Human gate on ${e.gateOn.join(`, `)}`:`Human gate`:null}function P(e,t=[]){let n=e=>t.find(t=>t.name===e),r=e=>n(e)?.effect??null,i=e=>N(n(e)),a=e.loops||[],o=a.find(e=>e.iteration);if(!o||o.nodes.length>8)return F(e,r,i);let s=Math.max(...e.nodes.map(e=>a.filter(t=>t.nodes.includes(e)).length)),c=a.filter(e=>e!==o);if(s>3||c.some(e=>!e.nodes.every(e=>o.nodes.includes(e))))return F(e,r,i);let l=o.nodes[0],u=new Set(e.edges.filter(e=>e.to===l).map(e=>e.from)),d=new Map;for(let e of[...c].sort((e,t)=>e.nodes.length-t.nodes.length))for(let t of e.nodes.slice(1))t!==l&&!u.has(t)&&!d.has(t)&&d.set(t,e);let f=o.nodes.filter(e=>!d.has(e));if(f.length<2||c.some(e=>d.has(e.nodes[0])))return F(e,r,i);let p=360/f.length,m=f.map((e,t)=>({name:e,a:-90+t*p,r:b})),h=m.findIndex(e=>r(e.name)===`mutate`);h>=0&&m.splice(h,0,{name:`validate`,a:m[h].a-p/2,r:x,gate:!0});let g=m.map(e=>({name:e.name,...T(e.a),r:e.r,effect:e.gate?null:r(e.name),gate:!!e.gate,inner:!1,human:e.gate?null:i(e.name)})),_=m.map((e,t)=>{let n=m[(t+1)%m.length],r=(t+1===m.length?n.a+360:n.a)-E(n.r)-2,i=e.a+E(e.r);return{d:D(y,T(i),T(r),+(r-i>180)),kind:`ring`}}),C=[],O=new Map;for(let e of c)O.set(e.nodes[0],[...O.get(e.nodes[0])||[],e]);for(let[e,t]of O){let n=m.find(t=>t.name===e),a=T(n.a),o=t.length>1;t.sort((e,t)=>e.nodes.length-t.nodes.length).forEach((e,t)=>{let s=T(n.a+(o?t?18:-18:0),y+(o?54:44)),c=Math.atan2(s.y-a.y,s.x-a.x)*(180/Math.PI),l=e.nodes.filter(t=>d.get(t)===e),u=e=>l.map((t,n)=>({name:t,...T(c+(n-(l.length-1)/2)*e,S,s)})),f=105;for(;f<150&&M(u(f),g);)f+=5;u(f).forEach(({name:e,...t})=>{g.push({name:e,...t,r:b,effect:r(e),gate:!1,inner:!0,human:i(e)})});let p=c+180;_.push({d:D(S,T(p+42,S,s),T(p+138,S,s)),kind:`inner`}),_.push({d:D(S,T(p+222,S,s),T(p+318,S,s)),kind:`inner`});let m=`${e.nodes.join(e.nodes.length===2?` ⇄ `:` → `)} · max ${e.max}`,h={lx:s.x,ly:s.y+S+20,anchor:`middle`};if(o){let e=s.x>=v.x,t=Math.max(S,...l.map(e=>{let t=g.find(t=>t.name===e);return Math.abs(t.x-s.x)+b}));h={lx:w(s.x+(e?t+8:-t-8)),ly:w(s.y+4),anchor:e?`start`:`end`}}C.push({loop:e.name,cx:s.x,cy:s.y,r:S,label:m,...h})})}let A=T(205).y,j=e.nodes.filter(e=>!o.nodes.includes(e)),P=j.map((e,t)=>({name:e,x:40,y:w(A-44*(j.length-1-t)),human:i(e)})),I=e.edges.find(e=>e.to===`$close`)?.from,L=g.find(e=>e.name===I),R=L?{from:I,x:L.x+200,y:L.y-30,d:`M${L.x+b},${L.y-6} C${L.x+90},${L.y-40} ${L.x+170},${L.y-40} ${L.x+200},${L.y-30}`}:null,z=Math.max(540,...g.map(e=>e.x+e.r+8),...C.map(e=>e.cx+e.r+8),...C.map(e=>e.anchor===`start`?e.lx+k(e.label)+8:e.lx+k(e.label)/2+8)),B=Math.max(300,...g.map(e=>e.y+e.r+12),...C.map(e=>Math.max(e.cy+e.r,e.ly)+12));return{mode:`ring`,width:Math.ceil(z),height:Math.ceil(B),center:{x:v.x,y:v.y,r:y},nodes:g,arcs:_,inner:C,entry:P,exit:R}}function F(e,t,n){let r=e.loops||[],i=e=>36+16*r.filter(t=>t!==e&&t.nodes.every(t=>e.nodes.includes(t))).length,a=Math.max(b,...r.map(i))+30,o=new Map(e.nodes.map((e,t)=>[e,60+t*100])),s=e.nodes.map(e=>({name:e,x:o.get(e),y:a,r:b,effect:t(e),gate:!1,inner:!1,human:n(e)})),c=e.nodes.slice(1).map((t,n)=>({d:`M${o.get(e.nodes[n])+b},${a} L${o.get(t)-b-4},${a}`,kind:`flow`})),l=r.map(e=>{let t=i(e),n=Math.min(...e.nodes.map(e=>o.get(e))),r=Math.max(...e.nodes.map(e=>o.get(e))),s={x:n-t,y:a-t,w:r-n+2*t,h:2*t};return c.push({d:`M${r},${s.y+s.h} L${n+4},${s.y+s.h}`,kind:`flow`}),{loop:e.name,label:`${e.name} · max ${e.max}`,box:s}});return{mode:`flow`,width:60+e.nodes.length*100,height:2*a,center:null,nodes:s,arcs:c,inner:l,entry:[],exit:null}}var I=n();function L({x:e,y:t,label:n}){return(0,I.jsxs)(`g`,{className:`lr-human`,children:[(0,I.jsx)(`title`,{children:n}),(0,I.jsx)(`circle`,{cx:e,cy:t,r:`9`}),(0,I.jsx)(`circle`,{cx:e,cy:t-2.4,r:`2.6`,className:`lr-human-fig`}),(0,I.jsx)(`path`,{d:`M${e-4.6},${t+5.6} a4.6,4.6 0 0 1 9.2,0 Z`,className:`lr-human-fig`})]})}function R({graph:e,bricks:t,onSelect:n,highlight:r}){let i=P(e,t),a=(e.loops||[]).find(e=>e.iteration),o=e=>t=>{(t.type===`click`||t.key===`Enter`||t.key===` `)&&(t.preventDefault(),n?.(e))};return(0,I.jsxs)(`svg`,{className:`loop-ring`,viewBox:`0 0 ${i.width} ${i.height}`,role:`img`,"aria-label":`${e.name} loop: ${e.nodes.join(`, `)}`,children:[(0,I.jsx)(`defs`,{children:[`ring`,`inner`,`flow`].map(e=>(0,I.jsx)(`marker`,{id:`lr-arrow-${e}`,markerWidth:`10`,markerHeight:`10`,refX:`7`,refY:`4`,orient:`auto`,children:(0,I.jsx)(`path`,{d:`M0,0 L8,4 L0,8 Z`,className:`lr-head-${e}`})},e))}),i.mode===`ring`&&i.inner.map(e=>(0,I.jsxs)(`g`,{children:[(0,I.jsx)(`circle`,{cx:e.cx,cy:e.cy,r:e.r,className:`lr-inner`}),(0,I.jsx)(`text`,{x:e.lx,y:e.ly,textAnchor:e.anchor,className:`lr-sub lr-good`,children:e.label})]},e.loop)),i.mode===`flow`&&i.inner.map(e=>(0,I.jsxs)(`g`,{children:[(0,I.jsx)(`rect`,{x:e.box.x,y:e.box.y,width:e.box.w,height:e.box.h,rx:`14`,className:`lr-box`}),(0,I.jsx)(`text`,{x:e.box.x+10,y:e.box.y-6,className:`lr-sub lr-good`,children:e.label})]},e.loop)),i.arcs.map((e,t)=>(0,I.jsx)(`path`,{d:e.d,className:`lr-${e.kind}`,markerEnd:`url(#lr-arrow-${e.kind})`},t)),i.entry.length>0&&(0,I.jsxs)(`g`,{children:[(0,I.jsx)(`path`,{d:`M40,${i.entry.at(-1).y} L${O},${i.entry.at(-1).y}`,className:`lr-flow`,markerEnd:`url(#lr-arrow-flow)`}),i.entry.map(e=>(0,I.jsxs)(`g`,{children:[(0,I.jsx)(`text`,{x:e.x,y:e.y-10,className:`lr-lbl`,children:e.name}),(0,I.jsx)(`text`,{x:e.x,y:e.y+18,className:`lr-sub`,children:`setup · 1×`}),e.human?(0,I.jsx)(L,{x:e.x-14,y:e.y-14,label:e.human}):null]},e.name))]}),i.nodes.map(e=>e.gate?(0,I.jsxs)(`g`,{className:`lr-gate`,children:[(0,I.jsx)(`title`,{children:`validate — the engine scores the change before the first mutate step`}),(0,I.jsx)(`circle`,{cx:e.x,cy:e.y,r:e.r}),(0,I.jsx)(`text`,{x:e.x,y:e.y+5,textAnchor:`middle`,children:`⛨`}),(0,I.jsx)(`text`,{x:e.x+20,y:e.y-10,className:`lr-sub lr-warn`,children:`validate`})]},e.name):(0,I.jsxs)(`g`,{className:`lr-node${e.inner?` inner`:``}${e.effect===`mutate`?` mutate`:``}${e.name===r?` current`:``}`,"aria-current":e.name===r?`step`:void 0,role:`button`,tabIndex:0,"aria-label":`${e.name} brick${e.human?`, ${e.human.toLowerCase()}`:``}`,onClick:o(e.name),onKeyDown:o(e.name),children:[(0,I.jsx)(`circle`,{cx:e.x,cy:e.y,r:e.r}),(0,I.jsx)(`text`,{x:e.x,y:e.y+4,textAnchor:`middle`,children:e.name}),e.human?(0,I.jsx)(L,{x:e.x+e.r*.74,y:e.y-e.r*.74,label:e.human}):null]},e.name)),i.exit&&(0,I.jsxs)(`g`,{children:[(0,I.jsx)(`path`,{d:i.exit.d,className:`lr-flow`,markerEnd:`url(#lr-arrow-flow)`}),(0,I.jsx)(`text`,{x:i.exit.x+6,y:i.exit.y+4,className:`lr-lbl`,children:`close`}),(0,I.jsx)(`text`,{x:i.exit.x-90,y:i.exit.y-10,textAnchor:`middle`,className:`lr-sub`,children:`done`})]}),i.center&&a&&(0,I.jsxs)(`g`,{children:[(0,I.jsx)(`text`,{x:i.center.x,y:i.center.y-4,textAnchor:`middle`,className:`lr-title`,children:e.name}),(0,I.jsxs)(`text`,{x:i.center.x,y:i.center.y+16,textAnchor:`middle`,className:`lr-sub lr-acc`,children:[`iterations · max `,a.max]})]})]})}function z({caption:e,captionHidden:t,columns:n,rows:r,rowKey:i,rowAction:a}){let o=e=>e.align?{textAlign:e.align}:void 0;return(0,I.jsx)(`div`,{className:`tbl-scroll`,children:(0,I.jsxs)(`table`,{className:`tbl`,children:[(0,I.jsx)(`caption`,{className:t?`sr-only`:`tbl-caption`,children:e}),(0,I.jsx)(`thead`,{children:(0,I.jsxs)(`tr`,{children:[n.map(e=>(0,I.jsx)(`th`,{scope:`col`,style:o(e),children:e.label},e.key)),a?(0,I.jsx)(`th`,{scope:`col`,children:(0,I.jsx)(`span`,{className:`sr-only`,children:`Actions`})}):null]})}),(0,I.jsx)(`tbody`,{children:r.map(e=>(0,I.jsxs)(`tr`,{children:[n.map(t=>(0,I.jsx)(`td`,{style:o(t),children:t.render?t.render(e):e[t.key]},t.key)),a?(0,I.jsx)(`td`,{className:`tbl-act`,children:a(e)}):null]},i(e)))})]})})}var B=5e3,ee=[`prudent`,`balanced`,`aggressive`],V={running:`acc`,awaiting:`warn`,unreadable:`bad`},H=e=>!!e.graph;function te(){let[e,t]=(0,_.useState)(null),[n,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(0);return u(e=>r.activeLoops().then(n=>e()&&(t(n),i(null)),t=>e()&&i(t.message)),B,[a]),{loops:e?.loops??null,error:n,onPreset:(e,t)=>r.setLoopPreset(e,t).then(()=>o(e=>e+1),e=>i(e.message))}}var U=e=>({key:e,label:e,align:`right`,render:t=>(0,I.jsx)(`span`,{className:`num`,children:t[e]})}),ne=[U(`iteration`),{key:`intent`,label:`intent`},U(`declared`),U(`actual`),{key:`decision`,label:`decision`},{key:`tests`,label:`tests`}];function re({history:e}){return e.length?(0,I.jsx)(`div`,{className:`loop-history`,children:(0,I.jsx)(z,{caption:`Iterations`,captionHidden:!0,columns:ne,rows:e,rowKey:e=>e.iteration})}):(0,I.jsx)(`p`,{className:`panel-note`,children:`No iteration finished yet.`})}function ie({loop:e,bricks:t,onPreset:n}){let r=H(e)?(e.graph.loops||[]).find(e=>e.iteration):null;return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`reader-tags`,children:[(0,I.jsx)(`span`,{className:`tag acc`,children:`Active loop`}),(0,I.jsx)(`span`,{className:`tag${V[e.status]?` ${V[e.status]}`:``}`,children:e.status})]}),(0,I.jsx)(`h2`,{className:`reader-title`,children:e.title}),(0,I.jsxs)(`p`,{className:`mono dim reader-src`,children:[e.branch,` · `,e.root]}),H(e)?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`p`,{className:`reader-lede`,children:[`Iteration `,e.iteration,r?` / ${r.max}`:``,` · at `,e.node]}),e.awaiting?(0,I.jsxs)(`p`,{className:`loop-run-wait t-warn`,children:[(0,I.jsxs)(`b`,{children:[`Awaiting `,e.awaiting.kind,e.awaiting.kind===`gate`?` at ${e.awaiting.node}`:``]}),` `,`— Answer in the agent's session.`]}):null,(0,I.jsxs)(`label`,{className:`panel-note loop-run-preset`,children:[`preset`,(0,I.jsx)(`select`,{className:`sel`,"aria-label":`Preset for ${e.title}`,value:e.preset,onChange:t=>n(e.root,t.target.value),children:ee.map(e=>(0,I.jsx)(`option`,{children:e},e))})]}),(0,I.jsx)(`a`,{href:`#/docs/loop-risk`,children:`What presets mean →`}),(0,I.jsx)(`hr`,{className:`hr`}),(0,I.jsx)(`div`,{className:`loop-graph`,children:(0,I.jsx)(R,{graph:e.graph,bricks:t,highlight:e.node})}),(0,I.jsx)(`h3`,{className:`loop-h2`,children:`Iterations`}),(0,I.jsx)(re,{history:e.history})]}):(0,I.jsx)(`p`,{className:`reader-lede`,children:e.status===`unreadable`?`Its LOOP.md cannot be read, so there is no state to show.`:`Its LOOP.md is gone: the loop closed and its state went with it.`})]})}var W=encodeURIComponent,G=o.loops.map(e=>[e,i[e]]),K={architecture:`Architecture`,tests:`Tests`,development:`Development`,refactoring:`Refactoring`,"day-to-day":`Day-to-day`},ae={project:`Project`,global:`Global`,shipped:`Shipped`},oe={templates:`Categories`,bricks:`Origins`,active:`Statuses`},se=[[`awaiting`,`Awaiting`],[`running`,`Running`],[`done`,`Done · stopped`],[`stopped`,`Done · stopped`],[`finished`,`Finished · unreadable`],[`unreadable`,`Finished · unreadable`]];function q(e,t){let n=e.filter(e=>e.startsWith(`${t} (`)).at(-1);return n?/(overrides \w+)\)$/.exec(n)?.[1]:null}var J=(e,t,n)=>n.flatMap(([n,r])=>e.filter(e=>t(e)===n).map(e=>({...e,group:r})));function Y(e,t){let n=new Set(t.filter(e=>e.gate===`human`).map(e=>e.name));return J(e.map(e=>({...e,desc:e.description,human:e.graph.nodes.some(e=>n.has(e))})),e=>K[e.graph.category]?e.graph.category:`other`,[...Object.entries(K),[`other`,`Other`]])}function X(e,t){return J(e.map(e=>({...e,desc:e.description,override:q(t,e.name)})),e=>e.origin,Object.entries(ae))}function Z(e){return J(e.map(e=>({...e,name:e.root,desc:e.branch})),e=>e.status,se)}var Q=(e,t)=>(0,I.jsx)(`span`,{className:`tag${e?` ${e}`:``}`,children:t},t),$={templates:e=>e.human?Q(`human`,`human gate`):null,bricks:e=>[e.effect===`mutate`?Q(`warn`,`mutate`):null,N(e)?Q(`human`,`human gate`):null,e.override?Q(`acc`,e.override):null,e.available===!1?Q(`bad`,`unavailable`):null],active:e=>Q(V[e.status],e.status)};function ce({name:e,brick:t,override:n,on:r}){let i=`loop-brick${r?` on`:``}${!t||t.available===!1?` dimmed`:``}`;return t?(0,I.jsxs)(`li`,{className:i,id:`brick-${e}`,children:[(0,I.jsx)(`b`,{children:(0,I.jsx)(`a`,{href:`#/loops/bricks/${W(e)}`,children:e})}),Q(t.effect===`mutate`?`warn`:``,t.effect),(0,I.jsx)(`span`,{className:`mono dim`,children:t.agent||t.skill}),(0,I.jsx)(`span`,{className:`panel-note`,children:t.outcomes.join(` · `)}),N(t)?Q(`human`,N(t).toLowerCase()):null,n?Q(`acc`,n):null]}):(0,I.jsxs)(`li`,{className:i,id:`brick-${e}`,children:[(0,I.jsx)(`b`,{children:e}),(0,I.jsx)(`span`,{className:`panel-note`,children:`Not in the catalogue: this template cannot run as is.`})]})}function le({t:e,bricks:t,overridden:n}){let[r,i]=(0,_.useState)(null),a=new Map(t.map(e=>[e.name,e]));return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`reader-tags`,children:[(0,I.jsx)(`span`,{className:`tag acc`,children:`Template`}),K[e.graph.category]?Q(``,K[e.graph.category]):null,e.human?Q(`human`,`human gate`):null]}),(0,I.jsx)(`h2`,{className:`reader-title`,children:e.name}),e.description?(0,I.jsx)(`p`,{className:`reader-lede`,children:e.description}):null,(0,I.jsxs)(`p`,{className:`mono dim reader-src`,children:[`loops/`,e.name,`.json · `,e.origin]}),(0,I.jsx)(`hr`,{className:`hr`}),(0,I.jsx)(`div`,{className:`loop-graph`,children:(0,I.jsx)(R,{graph:e.graph,bricks:t,onSelect:e=>{i(e),document.getElementById(`brick-${e}`)?.scrollIntoView?.({behavior:`smooth`,block:`nearest`})}})}),e.graph.rules?.length?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`h3`,{className:`loop-h2`,children:`Rules`}),(0,I.jsx)(`ul`,{className:`loop-rules`,"aria-label":`Rules every brick follows`,children:e.graph.rules.map(e=>(0,I.jsx)(`li`,{children:e},e))})]}):null,(0,I.jsx)(`h3`,{className:`loop-h2`,children:`Bricks`}),(0,I.jsx)(`ul`,{className:`loop-brick-list`,"aria-label":`Bricks in ${e.name}`,children:e.graph.nodes.map(e=>(0,I.jsx)(ce,{name:e,brick:a.get(e),override:q(n,e),on:r===e},e))})]})}function ue(e){return`---\n${[[`name`,e.name],[`description`,e.description],[`effect`,e.effect],[e.agent?`agent`:`skill`,e.agent||e.skill],[`gate`,e.gate],[`gateOn`,e.gateOn?.join(`, `)],[`outcomes`,e.outcomes.join(`, `)]].filter(([,e])=>e).map(([e,t])=>`${e}: ${t}`).join(`
2
+ `)}\n---\n${e.body}`}function de({b:e}){let[t,n]=(0,_.useState)(!1),r=[[`effect`,Q(e.effect===`mutate`?`warn`:``,e.effect)],[e.agent?`agent`:`skill`,(0,I.jsx)(`span`,{className:`mono`,children:e.agent||e.skill},`who`)],[`outcomes`,e.outcomes.map(e=>Q(``,e))],[`gate`,N(e)?Q(`human`,N(e).toLowerCase()):`none`],[`origin`,e.override?`${e.origin}, ${e.override}`:e.origin],[`available`,e.available===!1?(0,I.jsxs)(`span`,{className:`t-warn`,children:[`no — `,e.reason]},`why`):`yes`]];return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`reader-tags`,children:[(0,I.jsx)(`span`,{className:`tag acc`,children:`Brick`}),$.bricks(e)]}),(0,I.jsx)(`h2`,{className:`reader-title`,children:e.name}),e.description?(0,I.jsx)(`p`,{className:`reader-lede`,children:e.description}):null,(0,I.jsxs)(`p`,{className:`mono dim reader-src`,children:[`bricks/`,e.name,`.md`]}),(0,I.jsx)(`dl`,{className:`loop-facts`,children:r.map(([e,t])=>(0,I.jsxs)(_.Fragment,{children:[(0,I.jsx)(`dt`,{children:e}),(0,I.jsx)(`dd`,{children:t})]},e))}),(0,I.jsx)(`hr`,{className:`hr`}),(0,I.jsx)(`div`,{className:`row gap-8 loop-src-bar`,children:(0,I.jsx)(`button`,{type:`button`,className:`btn ghost sm`,"aria-expanded":t,onClick:()=>n(!t),children:t?`Hide source`:`View source`})}),t?(0,I.jsx)(`pre`,{className:`loop-brick-src`,"aria-label":`Source`,children:ue(e)}):(0,I.jsx)(`div`,{className:`lib-doc detail-doc`,children:(0,I.jsx)(g,{body:e.body})})]})}function fe({problems:e}){if(!e?.length)return null;let t=e.length;return(0,I.jsxs)(`div`,{className:`panel loop-problems`,role:`status`,"aria-label":`Catalogue files skipped`,children:[(0,I.jsxs)(`b`,{className:`t-warn`,children:[t,` catalogue `,t===1?`problem`:`problems`,`: these files were skipped`]}),(0,I.jsx)(`ul`,{className:`panel-note`,children:e.map(e=>(0,I.jsx)(`li`,{className:`mono`,children:e},e))})]})}var pe={templates:{title:`No templates`,body:(0,I.jsxs)(I.Fragment,{children:[`Add one under `,(0,I.jsx)(`code`,{className:`mono`,children:`.geneseed/loops/`}),` in the repo.`]})},bricks:{title:`No bricks`,body:(0,I.jsxs)(I.Fragment,{children:[`Add one under `,(0,I.jsx)(`code`,{className:`mono`,children:`.geneseed/bricks/`}),` in the repo.`]})},active:{title:`No loops yet`,body:(0,I.jsxs)(I.Fragment,{children:[`Start one with `,(0,I.jsx)(`code`,{className:`mono`,children:`geneseed loop init`}),` in a worktree, or ask the agent to run a loop. It shows up here while it runs.`]})}},me={templates:(0,I.jsxs)(I.Fragment,{children:[`A template wires bricks into a loop. `,(0,I.jsx)(`a`,{href:`#/docs/loops`,children:`How loops work →`}),` `,(0,I.jsx)(`a`,{href:`#/docs/loop-which-template`,children:`Which template? →`})]}),bricks:(0,I.jsxs)(I.Fragment,{children:[`A brick is one step: a skill or agent and its outcomes.`,` `,(0,I.jsx)(`a`,{href:`#/docs/loop-bricks`,children:`About bricks →`})]}),active:(0,I.jsxs)(I.Fragment,{children:[`Loops registered on this machine, read from their LOOP.md.`,` `,(0,I.jsx)(`a`,{href:`#/docs/loop-running`,children:`Running a loop →`})]})};function he({tab:e=`templates`,item:t,dataRev:n}){let{data:i,error:o}=c(()=>r.loops(),[n],`loops`),u=te(),[g,v]=(0,_.useState)(``),[y,b]=(0,_.useState)(`all`),[x,S]=(0,_.useState)(e);e!==x&&(S(e),v(``),b(`all`));let C=i?.bricks||[],w=e===`active`?u.loops&&Z(u.loops):i&&(e===`bricks`?X(i.bricks,i.overridden):Y(i.templates,i.bricks)),T=w||[],E=f(T),D=y===`all`?T:T.filter(e=>e.group===y),O=g.trim(),k=p(D,O),A=T.find(e=>e.name===t)||e===`active`&&T.find(H)||T[0]||null,j={templates:i?.templates.length,bricks:i?.bricks.length,active:u.loops?.length},M=G.find(([t])=>t===e)[1],N=e===`active`?u.error:o;return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(a,{error:N,style:{margin:`0 0 var(--sp-3)`}}),(0,I.jsx)(fe,{problems:i?.problems}),(0,I.jsxs)(`div`,{className:`library`,children:[(0,I.jsxs)(`aside`,{className:`lib-kinds`,"aria-label":`Loops sections`,children:[(0,I.jsxs)(`div`,{className:`lib-title`,children:[(0,I.jsx)(`h1`,{className:`h`,children:`Loops`}),(0,I.jsx)(`span`,{className:`dim`,children:`What the engine runs`})]}),(0,I.jsx)(`p`,{className:`panel-note lib-lede`,children:me[e]}),(0,I.jsx)(`nav`,{className:`kind-list`,"aria-label":`Sections`,children:G.map(([t,n])=>(0,I.jsxs)(_.Fragment,{children:[(0,I.jsxs)(`a`,{href:`#/loops/${t}`,className:e===t?`on`:``,"aria-current":e===t?`page`:void 0,children:[n,(0,I.jsx)(`span`,{className:`mono dim`,children:j[t]??``})]}),e===t&&(0,I.jsx)(h,{label:oe[t],total:T.length,cats:E,cat:y,onChange:b})]},t))})]}),(0,I.jsx)(d,{label:M,count:O?`${k.length} of ${D.length}`:w?D.length:``,q:g,onQ:v,matched:k.length,inView:[e,t],children:w?T.length===0?(0,I.jsx)(l,{title:pe[e].title,children:pe[e].body}):(0,I.jsx)(m,{rows:k,activeName:A?.name,hrefOf:t=>`#/loops/${e}/${W(t.name)}`,pills:$[e]}):N?null:(0,I.jsx)(s,{})}),(0,I.jsx)(`article`,{className:`lib-reader`,"aria-label":`Entry`,children:A?e===`active`?(0,I.jsx)(ie,{loop:A,bricks:C,onPreset:u.onPreset}):e===`bricks`?(0,I.jsx)(de,{b:A}):(0,I.jsx)(le,{t:A,bricks:C,overridden:i.overridden},A.name):e===`active`&&w?(0,I.jsx)(l,{title:`What is a loop?`,docs:{href:`#/docs/loops`,label:`How loops work →`},children:`A loop runs bricks in a ring until its gate passes.`}):null})]})]})}export{Z as activeRows,X as brickRows,ue as brickSource,he as default,Y as templateRows};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-hePW80VL.js";import{i as e,t}from"./react-DlYQp10C.js";import{n,r}from"./sections-ChwaobfW.js";import{G as i,H as a}from"./index-osXUqzdX.js";import{a as o,i as s,n as c,o as l}from"./Dashboard-B5-wUlXC.js";e();var u=t(),d=14;function f({title:e,right:t,children:n,span:r}){return(0,u.jsxs)(`div`,{className:`c-mod`,style:r?{gridColumn:`span ${r}`}:null,children:[(0,u.jsxs)(`div`,{className:`c-mod-head`,children:[(0,u.jsx)(`span`,{className:`c-tab`}),(0,u.jsx)(`h3`,{children:e}),t&&(0,u.jsx)(`span`,{className:`c-mod-right`,children:t})]}),(0,u.jsx)(`div`,{className:`c-mod-body`,children:n})]})}function p({label:e,value:t}){return(0,u.jsxs)(`div`,{className:`c-kpi`,children:[(0,u.jsx)(`div`,{className:`c-kpi-label`,children:e}),(0,u.jsx)(`div`,{className:`c-kpi-val`+(t===0?` zero`:``),children:t})]})}function m({data:e,height:t=120,hi:n}){if(!e.length)return null;let r=Math.max(...e.map(e=>e.v),1);return(0,u.jsx)(`div`,{className:`c-cols`,style:{height:t},children:e.map((e,i)=>{let a=Math.max(e.v/r*(t-6),2);return(0,u.jsx)(`div`,{className:`c-col ${i===n?`hi`:``}`,style:{height:a},title:`${e.t}: ${e.v}`},i)})})}function h({checks:e}){return(0,u.jsx)(`div`,{className:`c-band`,children:e.map((e,t)=>(0,u.jsx)(`span`,{className:`c-band-cell ${e.problems.length===0?`ok`:`bad`}`,title:`${e.label}: ${e.problems.length===0?`pass`:`${e.problems.length} problem(s)`}`},t))})}function g(e){let t={};for(let n of e||[]){let e=n.action||`unknown`;t[e]=(t[e]||0)+1}return Object.entries(t).map(([e,t])=>({label:e,value:t})).sort((e,t)=>t.value-e.value)}function _({overview:e,jobs:t,lens:_}){let v=e.counts||{},y=r.reduce((e,t)=>e+(v[t]||0),0),b=Math.max(...r.map(e=>v[e]||0),1),x=_?.doctor?.state||`loading`,S=_?.doctor?.data?.groups||[],C=S.filter(e=>e.problems.length===0).length,w=s(t||[],10,`0d`),T=w.reduce((e,t)=>e+t.v,0),E=g(t),D=Math.max(...E.map(e=>e.value),1),O=a(e.diff),k=[[`status`,e.deployed?(0,u.jsx)(`span`,{className:`c-pill ok`,children:`DEPLOYED`}):(0,u.jsx)(`span`,{className:`c-pill warn`,children:`NOT DEPLOYED`})],[`voice`,(0,u.jsx)(`span`,{className:`t-cap`,children:e.theme})],[`mode`,e.emit],[`doctor`,x===`failed`?(0,u.jsx)(`span`,{className:`c-pill warn`,children:`NO ANSWER`}):x===`ok`?S.length===0?(0,u.jsx)(`span`,{className:`c-pill`,children:`—`}):C===S.length?(0,u.jsx)(`span`,{className:`c-pill ok`,children:`CLEAN`}):(0,u.jsxs)(`span`,{className:`c-pill warn`,children:[S.length-C,` ISSUES`]}):(0,u.jsx)(`span`,{className:`c-pill`,children:`…`})],[`edits`,String(O)],[`built`,e.build_time||`—`],[`target`,(0,u.jsx)(`span`,{className:`c-dim mono`,children:e.target})]];return(0,u.jsxs)(`div`,{className:`c-root`,children:[(0,u.jsx)(`div`,{className:`c-titlebar`,children:(0,u.jsxs)(`div`,{children:[(0,u.jsx)(`h2`,{className:`c-h1`,children:`HARNESS // STATUS READOUT`}),(0,u.jsxs)(`div`,{className:`c-sub`,children:[e.target,` · rendered from src/ · inherited everywhere`]}),(0,u.jsx)(c,{verdict:_?.verdict})]})}),(0,u.jsx)(`div`,{className:`c-strip`,children:k.map(([e,t],n)=>(0,u.jsxs)(`div`,{className:`c-strip-cell`,children:[(0,u.jsx)(`div`,{className:`c-strip-k`,children:e}),(0,u.jsx)(`div`,{className:`c-strip-v`,children:t})]},n))}),(0,u.jsxs)(`div`,{className:`c-kpi-row`,children:[(0,u.jsx)(p,{label:`AGENTS`,value:v.agents??`—`}),(0,u.jsx)(p,{label:`SKILLS`,value:v.skills??`—`}),(0,u.jsx)(p,{label:`DICTATES`,value:v.laws??`—`}),(0,u.jsx)(p,{label:`PACKS`,value:v.doctrines?`${v.doctrines.active}/${v.doctrines.total}`:`—`}),(0,u.jsx)(p,{label:`MEMORY`,value:v.memory??`—`}),(0,u.jsx)(p,{label:`NOTEBOOK`,value:v.notebook??`—`}),(0,u.jsx)(p,{label:`EDITS`,value:O})]}),(0,u.jsxs)(`div`,{className:`c-grid`,children:[(0,u.jsx)(f,{title:`CAPABILITY DISTRIBUTION`,right:`${y} ENTRIES`,span:2,children:(0,u.jsxs)(`table`,{className:`c-tbl`,children:[(0,u.jsx)(`thead`,{children:(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`th`,{children:`SECTION`}),(0,u.jsx)(`th`,{children:`DETAIL`}),(0,u.jsx)(`th`,{style:{width:150},children:`SHARE`}),(0,u.jsx)(`th`,{className:`num`,children:`N`})]})}),(0,u.jsx)(`tbody`,{children:r.map(e=>(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`td`,{className:`c-name`,children:n[e].label}),(0,u.jsx)(`td`,{className:`c-dim`,children:n[e].desc}),(0,u.jsx)(`td`,{children:(0,u.jsx)(`div`,{className:`c-bar`,children:(0,u.jsx)(`i`,{style:{width:`${(v[e]||0)/b*100}%`,background:e===`agents`||e===`skills`?`var(--accent)`:`var(--line-3)`}})})}),(0,u.jsx)(`td`,{className:(v[e]||0)>0?`num`:`num c-dim`,children:v[e]??0})]},e))})]})}),(0,u.jsx)(f,{title:`DOCTOR // CHECKS`,right:S.length?`${C}/${S.length}`:`—`,children:S.length>0?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(h,{checks:S}),(0,u.jsx)(`div`,{className:`c-check-list`,children:S.map(e=>{let t=e.problems.length===0;return(0,u.jsxs)(`div`,{className:`c-check-row`,children:[(0,u.jsx)(`span`,{className:`c-dotmark ${t?`ok`:`bad`}`}),(0,u.jsx)(`span`,{className:`c-check-name`,children:e.label}),(0,u.jsx)(`span`,{className:`c-check-detail`,children:t?`clean`:`${e.problems.length} problem${e.problems.length===1?``:`s`}`})]},e.label)})})]}):(0,u.jsx)(`p`,{className:`c-dim mono c-fine`,children:x===`failed`?`Doctor did not answer.`:x===`ok`?`Doctor reported no checks.`:`Checking…`})}),(0,u.jsxs)(f,{title:`RUN RATE // 10D`,right:`${T} RUNS`,span:2,children:[(0,u.jsx)(m,{data:w,height:120,hi:w.length-1}),(0,u.jsx)(`div`,{className:`c-axis`,children:w.map((e,t)=>(0,u.jsx)(`span`,{children:t%2==0?e.t:``},t))})]}),(0,u.jsx)(f,{title:`RUN LOG // BY TYPE`,right:`${(t||[]).length} LOGGED`,children:E.length>0?(0,u.jsx)(`table`,{className:`c-tbl`,children:(0,u.jsx)(`tbody`,{children:E.map(e=>(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`td`,{className:`c-name`,style:{textTransform:`uppercase`,fontWeight:400},children:e.label}),(0,u.jsx)(`td`,{children:(0,u.jsx)(`div`,{className:`c-bar`,children:(0,u.jsx)(`i`,{style:{width:`${e.value/D*100}%`,background:`var(--accent)`}})})}),(0,u.jsx)(`td`,{className:`num`,children:e.value})]},e.label))})}):(0,u.jsx)(`p`,{className:`c-dim mono c-fine`,children:`No runs logged.`})}),(0,u.jsx)(f,{title:`RECENT // RUN LOG`,span:3,children:(0,u.jsx)(`table`,{className:`c-tbl`,children:(0,u.jsxs)(`tbody`,{children:[l(t,d).map(e=>{let t=e.status===`done`,n=e.status===`failed`?`bad`:t?`ok`:`acc`,r=o(e);return(0,u.jsxs)(`tr`,{children:[(0,u.jsxs)(`td`,{style:{width:96},children:[(0,u.jsx)(`span`,{className:`c-dotmark ${n}`}),` `,(0,u.jsx)(`span`,{className:`c-dim`,children:e.action})]}),(0,u.jsx)(`td`,{className:`c-name`,style:{fontWeight:400},title:r.command||void 0,children:[r.scope,r.result,r.duration].filter(Boolean).join(` · `)}),(0,u.jsx)(`td`,{className:`num c-dim`,children:e.started?`${i(e.started)} ago`:`—`})]},e.id)}),(!t||t.length===0)&&(0,u.jsx)(`tr`,{children:(0,u.jsx)(`td`,{colSpan:`3`,className:`c-dim c-fine`,children:`No runs logged.`})})]})})})]})]})}export{_ as default};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{t as r}from"./api-BfpZmUMI.js";import{A as i,M as a,O as o,S as s,et as c,k as l,q as u,tt as d,w as f}from"./index-osXUqzdX.js";import{t as p}from"./EmptyState-1sPNleqv.js";import{t as m}from"./Markdown-OReRRoEV.js";import{t as h}from"./Tabs-ChiCgm2F.js";import{t as g}from"./StackBar-CXARiXzd.js";import _ from"./Library-CrTK5XsD.js";var v=e(t(),1),y=e=>e(`Discard your unsaved edit?`,{title:`Unsaved edit`,confirmLabel:`Discard`,tone:`danger`}),b=`The file changed on disk — reloaded the fresh copy. Your draft is kept.`;function x({data:e,reload:t}){let n=i(),[r,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(null),[l,u]=(0,v.useState)(!1),[f,p]=(0,v.useState)(``),m=e?.fingerprint||``,h=r!==null&&JSON.stringify(r)!==JSON.stringify(o),g=(0,v.useRef)(!1),_=e=>{a(e),s(e)},x=()=>a(null);return(0,v.useEffect)(()=>{if(!h)return;let e=e=>{e.preventDefault(),e.returnValue=``};window.addEventListener(`beforeunload`,e);let t=d(({to:e})=>(g.current||(g.current=!0,y(n).then(n=>{n&&(t(),a(null),c(e))}).finally(()=>{g.current=!1})),!1));return()=>{window.removeEventListener(`beforeunload`,e),t()}},[h,n]),{draft:r,setDraft:a,open:_,close:x,discard:async()=>h&&!await y(n)?!1:(x(),!0),dirty:h,busy:l,notice:f,setNotice:p,save:async(e,{conflict:n}={})=>{u(!0),p(``);try{return await e(m)||!0}catch(e){e.status===409?p(n??b):p(e.message);return}finally{u(!1),t()}}}}var S=n(),C={title:``,body:``,scope:`project`,trial_until:``},w=[`project`,`user`,`global`],T=/\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029]/,E=e=>e.startsWith(`## `)||/^##\s+R\d+\s*[—–-]+\s*\S/.test(e),D=`user-rules.md changed on disk (an agent session?) — reloaded the fresh copy. Your draft is kept — Save again.`,O=`user-rules.md changed on disk (an agent session?) — reloaded the fresh copy. Try again.`;function k({value:e,onChange:t,onCancel:n,onSave:r,busy:i}){let[a]=(0,v.useState)(e.scope),o=n=>r=>t({...e,[n]:r.target.value}),s=e.body.trim().split(T).some(E)?`A line cannot start with “## ” — user-rules.md reads it as a new rule heading. Use ### or plain text.`:``,c=!(e.title.trim()&&e.body.trim()),l=!c&&!s;return(0,S.jsxs)(`div`,{className:`rule-form`,children:[(0,S.jsxs)(`label`,{className:`field`,children:[(0,S.jsx)(`span`,{children:`Rule title`}),(0,S.jsx)(`input`,{className:`lib-filter`,type:`text`,value:e.title,onChange:o(`title`),placeholder:`Title — short and imperative (e.g. No emoji in commit subjects)`,autoFocus:!0})]}),(0,S.jsxs)(`label`,{className:`field`,children:[(0,S.jsx)(`span`,{children:`Rule body`}),(0,S.jsx)(`textarea`,{className:`rule-body-input`,value:e.body,onChange:o(`body`),rows:4,placeholder:`The rule, stated plainly and testably, in one short paragraph.`,"aria-invalid":s?!0:void 0,"aria-describedby":s?`rule-body-error`:void 0})]}),s?(0,S.jsx)(`p`,{id:`rule-body-error`,className:`sub rule-notice`,role:`alert`,children:s}):null,(0,S.jsxs)(`div`,{className:`row wrap`,children:[(0,S.jsxs)(`label`,{className:`field`,children:[(0,S.jsx)(`span`,{children:`Rule scope`}),(0,S.jsxs)(`select`,{className:`sel`,value:e.scope,onChange:o(`scope`),children:[(0,S.jsx)(`option`,{value:`project`,children:`scope: project (this repo, committable)`}),(0,S.jsx)(`option`,{value:`user`,children:`scope: user (personal)`}),(0,S.jsx)(`option`,{value:`global`,children:`scope: global (every repository)`}),w.includes(a)?null:(0,S.jsxs)(`option`,{value:a,children:[`scope: `,a,` (as written in the file)`]})]})]}),(0,S.jsxs)(`label`,{className:`rule-trial-label`,children:[`trial until`,(0,S.jsx)(`input`,{className:`lib-filter rule-date`,type:`date`,value:e.trial_until,onChange:o(`trial_until`),"aria-label":`Trial until date (optional)`})]}),(0,S.jsxs)(`div`,{className:`row gap-8`,style:{marginLeft:`auto`},children:[(0,S.jsx)(`button`,{className:`btn sm`,disabled:!l||i,onClick:()=>r(e),"aria-describedby":c?`rule-form-hint`:void 0,children:i?`Saving…`:`Save rule`}),(0,S.jsx)(`button`,{className:`btn ghost sm`,disabled:i,onClick:n,children:`Cancel`})]})]}),c?(0,S.jsx)(`p`,{id:`rule-form-hint`,className:`panel-note`,children:`A rule needs a title and a body.`}):null]})}function A({rule:e,isOpen:t,onToggle:n,onEdit:r,onDelete:i,onGraduate:a}){return(0,S.jsxs)(`div`,{className:`rule-row ${t?`on`:``}`,children:[(0,S.jsxs)(`button`,{className:`rule-head`,onClick:n,"aria-expanded":t,"data-rule-head":e.id,children:[(0,S.jsxs)(`span`,{className:`rule-no`,children:[`R`,e.id]}),(0,S.jsx)(`span`,{className:`rule-title`,children:e.title}),(0,S.jsx)(`span`,{className:`rule-chip ${e.scope===`user`?`user`:``}`,children:e.scope}),e.status===`trial`&&(0,S.jsx)(`span`,{className:`rule-chip trial ${e.overdue?`overdue`:``}`,children:e.overdue?`review due`:`trial · ${e.trial_until}`})]}),t&&(0,S.jsxs)(`div`,{className:`rule-expand`,children:[(0,S.jsx)(`p`,{children:e.body}),e.source?(0,S.jsxs)(`div`,{className:`rule-src`,children:[`source: `,e.source]}):null,(0,S.jsxs)(`div`,{className:`row gap-8`,style:{marginTop:10},children:[e.status===`trial`&&(0,S.jsx)(`button`,{className:`btn ghost sm`,onClick:a,title:`Adopt for good — drop the trial marker`,"aria-label":`Graduate R${e.id}`,children:`Graduate`}),(0,S.jsx)(`button`,{className:`btn ghost sm`,onClick:r,"aria-label":`Edit R${e.id}`,children:`Edit`}),(0,S.jsx)(`button`,{className:`btn ghost sm`,onClick:i,"aria-label":`Retire R${e.id}`,children:`Retire`})]})]})]})}function j({onChanged:e}){let t=i(),[n,a]=(0,v.useState)(0),{data:s,error:c}=u(()=>r.rules(),[n]),[d,f]=(0,v.useState)(null),m=()=>a(e=>e+1),h=x({data:s,reload:m}),{draft:g,busy:_,notice:y}=h,b=(0,v.useRef)(null),[w,T]=(0,v.useState)(0),E=e=>{b.current=e,T(e=>e+1)},j=(0,v.useRef)(null),M=(0,v.useRef)(null);if((0,v.useEffect)(()=>{let e=b.current;b.current=null,e!==null&&(e===`add`?j.current:M.current?.querySelector(`[data-rule-head="${e}"]`))?.focus()},[w]),c)return(0,S.jsx)(o,{error:c,onRetry:m});if(!s)return(0,S.jsx)(l,{});let N=s.rules||[],P=g?.target,F=P!==void 0&&P!==`new`&&!N.some(e=>e.id===P&&e.title===g.title0),I=P===`new`||F,L=async(t,n)=>{let i=await h.save(e=>r.rulesMutate({...t,fingerprint:e}),{conflict:n?D:O});return i&&n&&h.close(),e?.(),i},R=e=>h.setDraft({...g,form:e}),z=async(e,t)=>{await L(e,!0)&&E(t)},B=async e=>{await h.discard()&&E(e)},V=async e=>{await t(`Retire rule R${e.id} — “${e.title}”? It is removed from user-rules.md.`,{title:`Retire this rule?`,confirmLabel:`Retire`,tone:`danger`})&&await L({op:`delete`,id:e.id})&&g===null&&E(`add`)},H=async e=>{await L({op:`update`,id:e.id,title:e.title,body:e.body,scope:e.scope,source:e.source,trial_until:``})&&E(e.id)};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`div`,{className:`head-row mb-16`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`div`,{className:`eyebrow`,children:`governance · yours`}),(0,S.jsx)(`h2`,{className:`h`,children:`Rules`}),(0,S.jsxs)(`p`,{className:`sub`,children:[`Your own standing rules, from `,(0,S.jsx)(`code`,{className:`mono`,children:`user-rules.md`}),` beside the deployed AGENT.md. The agent obeys them with the same force as the Laws — they may tighten a Law, never repeal one — and no update ever touches the file. Keep the set small: every rule is loaded every session.`]})]}),s.exists&&g===null&&(0,S.jsx)(`button`,{className:`btn`,ref:j,onClick:()=>h.open({target:`new`,title0:``,form:C}),children:`Add rule`})]}),y?(0,S.jsx)(`p`,{className:`sub rule-notice`,role:`status`,children:y}):null,(s.warnings||[]).map(e=>(0,S.jsxs)(`p`,{className:`sub rule-notice`,children:[`format warning: `,e]},e)),I&&(0,S.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,S.jsx)(`div`,{className:`eyebrow`,style:{marginBottom:10},children:`new rule`}),F?(0,S.jsxs)(`p`,{className:`sub rule-notice`,role:`status`,children:[`Rule R`,P,` is no longer in user-rules.md (an agent session removed or renumbered it). Your draft is kept — Save adds it as a new rule.`]}):null,(0,S.jsx)(k,{value:g.form,onChange:R,busy:_,onCancel:()=>B(`add`),onSave:e=>z({op:`add`,...e},`add`)})]}),s.exists?N.length===0&&!I?(0,S.jsx)(p,{title:`No rules yet`,children:`The file is seeded and loaded every session — it is just empty. Add your first standing rule here, ask the agent for one in-session (the rule skill), or promote a recurring memory fact from the Library.`}):(0,S.jsx)(`div`,{className:`card rules-list`,ref:M,children:N.map(e=>!F&&P===e.id?(0,S.jsx)(`div`,{className:`rule-row on`,children:(0,S.jsx)(`div`,{className:`rule-expand`,style:{paddingTop:14},children:(0,S.jsx)(k,{value:g.form,onChange:R,busy:_,onCancel:()=>B(e.id),onSave:t=>z({op:`update`,id:e.id,source:e.source,...t},e.id)})})},e.id):(0,S.jsx)(A,{rule:e,isOpen:d===e.id,onToggle:()=>f(d===e.id?null:e.id),onEdit:()=>{f(e.id),h.open({target:e.id,title0:e.title,form:{title:e.title,body:e.body,scope:e.scope,trial_until:e.trial_until}})},onDelete:()=>V(e),onGraduate:()=>H(e)},e.id))}):(0,S.jsxs)(p,{title:`No user-rules.md here yet`,children:[`The build seeds it beside AGENT.md — run a build/update from the Dashboard (or`,` `,(0,S.jsx)(`code`,{className:`mono`,children:`geneseed update`}),`) and it appears, ready for your rules.`]})]})}var M=`PROFILE.md changed on disk since you opened it — reloaded the fresh copy. Your draft is kept — Save again.`;function N({onChanged:e}){let{data:t,error:n,loading:i,reload:s,setData:c}=u(()=>r.profile(),[]),d=x({data:t,reload:s}),{draft:f,dirty:h,busy:g,notice:_}=d,[y,b]=(0,v.useState)(!1);if(t&&!y&&(b(!0),(t.text||``).trim()||d.open(t.text||``)),i&&!t)return(0,S.jsx)(l,{});if(n)return(0,S.jsx)(o,{error:n,onRetry:s});let C=f!==null,w=t?.text||``;return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`div`,{className:`head-row mb-16`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`div`,{className:`eyebrow`,children:`identity · yours`}),(0,S.jsx)(`h2`,{className:`h`,children:`Profile`}),(0,S.jsxs)(`p`,{className:`sub`,children:[`Who you are and how you like to work, from `,(0,S.jsx)(`code`,{className:`mono`,children:`PROFILE.md`}),` `,`beside the deployed AGENT.md. Unlike `,(0,S.jsx)(`code`,{className:`mono`,children:`user-rules.md`}),`, it is identity, not rules — it colours how the agent works but never binds (precedence is Laws, then rules, then this). Seeded once, never overwritten by an update. Prefer not to write it by hand? Ask the agent to run the `,(0,S.jsx)(`code`,{className:`mono`,children:`profile`}),` skill — it interviews you and drafts this file with your consent.`]})]}),(0,S.jsxs)(`div`,{className:`row`,children:[(0,S.jsxs)(a,{"aria-label":`Profile mode`,children:[(0,S.jsx)(`button`,{className:C?``:`on`,"aria-pressed":!C,onClick:d.discard,children:`View`}),(0,S.jsx)(`button`,{className:C?`on`:``,"aria-pressed":C,onClick:()=>C||d.open(w),children:`Edit`})]}),C&&(0,S.jsx)(`button`,{className:`btn`,disabled:!h||g,onClick:async()=>{let t=await d.save(e=>r.profileSave({text:f,fingerprint:e}),{conflict:M});t&&(c(e=>({...e,text:f,seeded:!1,fingerprint:t.fingerprint||``})),d.setNotice(`Saved.`),d.close(),e?.())},children:g?`Saving…`:`Save`})]})]}),_?(0,S.jsx)(`p`,{className:`sub rule-notice`,role:`status`,children:_}):null,C?(0,S.jsx)(`textarea`,{className:`rule-body-input`,style:{width:`100%`,minHeight:`60vh`,fontFamily:`var(--mono, monospace)`},value:f,onChange:e=>d.setDraft(e.target.value),spellCheck:!1,"aria-label":`Profile markdown`}):w.trim()?(0,S.jsxs)(S.Fragment,{children:[t?.seeded?(0,S.jsxs)(p,{title:`This is still the template`,action:(0,S.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>d.open(w),children:`Edit it here`}),children:[`Ask the agent to run the `,(0,S.jsx)(`code`,{className:`mono`,children:`profile`}),` skill — it interviews you and drafts this file with your consent.`]}):null,(0,S.jsx)(`div`,{className:`card pad-lg`,children:(0,S.jsx)(m,{body:w})})]}):(0,S.jsxs)(p,{title:`No profile yet`,children:[`Switch to Edit to write one, or ask the agent to run the`,` `,(0,S.jsx)(`code`,{className:`mono`,children:`profile`}),` skill.`]})]})}var P=(e,t)=>`${e} ${t}${e===1?``:`s`}`,F=new Set([`MEMORY`,`NOTEBOOK`,`README`]),I=e=>e?(e.items||[]).filter(e=>!F.has(String(e.name).toUpperCase())).length:null;function L({rules:e,profile:t,facts:n,notes:r}){let i=e?.exists?e.stats:null;if(!i)return null;let a=Math.round(Math.max(i.rules/i.max_rules,i.tokens/i.max_tokens)*100),[o,s]=a>=100?[`bad`,`over budget: a bloated rule set dilutes the rules that matter`]:a>=70?[`warn`,`getting heavy; consider merging or pruning`]:[`accent`,i.rules?`${i.rules} rules in ${i.lines} lines.`:`All of it is the file’s preamble; no rule text yet.`],c=[{k:`Profile`,v:t?.seeded?`template`:t?.exists?`written`:`missing`,warn:!!t?.seeded},{k:`Rules`,v:`${i.rules}/${i.max_rules}`},{k:`Memory`,v:n==null?`n/a`:P(n,`fact`)},{k:`Notebook`,v:r==null?`n/a`:P(r,`note`)}];return(0,S.jsxs)(`div`,{className:`card-row`,children:[(0,S.jsxs)(`section`,{className:`panel`,"aria-labelledby":`pc-budget`,children:[(0,S.jsxs)(`div`,{className:`panel-head`,children:[(0,S.jsx)(`h2`,{id:`pc-budget`,children:`Rule budget`}),(0,S.jsxs)(`span`,{className:`mono dim`,children:[i.rules,` of `,i.max_rules]})]}),(0,S.jsx)(`div`,{className:`slots`,style:{"--slots":i.max_rules},role:`img`,"aria-label":`${i.rules} of ${i.max_rules} rule slots used`,children:Array.from({length:i.max_rules},(e,t)=>(0,S.jsx)(`span`,{className:t<i.rules?`used`:``},t))}),(0,S.jsxs)(`p`,{className:`big-num`,children:[(0,S.jsx)(`span`,{className:`mono`,children:i.tokens}),` `,(0,S.jsxs)(`span`,{className:`dim`,children:[`/ `,i.max_tokens.toLocaleString(`en-US`),` tokens, every turn`]})]}),(0,S.jsx)(g,{value:i.tokens,max:i.max_tokens,label:`tokens`,tone:o}),(0,S.jsx)(`p`,{className:`panel-note`,children:s})]}),(0,S.jsxs)(`section`,{className:`panel`,"aria-labelledby":`pc-known`,children:[(0,S.jsx)(`div`,{className:`panel-head`,children:(0,S.jsx)(`h2`,{id:`pc-known`,children:`What the agent knows about you`})}),(0,S.jsx)(`ul`,{className:`hbars`,children:c.map(e=>(0,S.jsxs)(`li`,{children:[(0,S.jsx)(`span`,{className:`hb-label`,children:e.k}),(0,S.jsx)(`span`,{className:`mono hb-n${e.warn?` warn`:``}`,children:e.v})]},e.k))})]})]})}var R={memory:{title:`No facts yet`,body:`The agent writes facts through the rule skill — say “remember that…” in a session.`},notebook:{title:`No notes yet`,body:`The notebook is the agent’s own scratch space: plans and notes it keeps for itself.`}};function z({tab:e=`rules`,item:t,dataRev:n}){let i=e=>Promise.resolve(e).catch(()=>null),{data:a,reload:o}=s(n),{data:c,reload:l}=u(()=>i(r.profile()),[n]),{data:d,reload:m}=u(()=>r.catalog(`memory`),[`memory`,n],`catalog`),{data:g}=u(()=>r.catalog(`notebook`),[`notebook`,n],`catalog`),v=I(d),y=I(g),b={memory:v,notebook:y},x={rules:a?.stats?.rules,profile:c?.seeded?`template`:null,memory:v,notebook:y},C=e===`memory`||e===`notebook`;return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(f,{title:`Personal`,sub:`The only files you write. They survive updates, reinstalls and voice changes.`}),(0,S.jsx)(h,{page:`personal`,current:e,badges:x,label:`Personal files`}),e===`rules`&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(L,{rules:a,profile:c,facts:v,notes:y}),(0,S.jsx)(j,{onChanged:o})]}),e===`profile`&&(0,S.jsx)(N,{onChanged:l}),C&&b[e]===0&&!t?(0,S.jsx)(p,{title:R[e].title,children:R[e].body}):C?(0,S.jsx)(_,{lock:e,base:`#/personal/${e}`,selected:t,dataRev:n,onRulesChanged:()=>{o(),m()}},e):null]})}export{z as default};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{a as r}from"./Markdown-OReRRoEV.js";var i=e(t(),1),a=n(),o={experimental:{label:`experimental`,cls:`warn`,hint:`Shipped, but not yet confirmed by real use.`},deprecated:{label:`deprecated`,cls:`bad`,hint:`On its way out — look for the replacement before building on it.`},personal:{label:`personal`,cls:``,hint:`Yours — present in this install, not shipped or versioned by Geneseed.`},unknown:{label:`no status`,cls:``,hint:`Not listed in registry.json.`}};function s({status:e}){let t=o[e];return t?(0,a.jsxs)(`span`,{className:`badge ${t.cls}`,title:t.hint,children:[(0,a.jsx)(`span`,{className:`dot`}),t.label]}):null}var c=({name:e})=>(0,a.jsxs)(`span`,{className:`tag acc`,title:`Ships with the ${e} kit`,children:[`kit: `,e]});function l(e,t){let n=(t||``).trim().toLowerCase();return n?e.filter(e=>`${e.title||``} ${e.name||``} ${e.desc||``}`.toLowerCase().includes(n)):e}function u({label:e,count:t,extra:n,q:o,onQ:s,matched:c,inView:l,children:u}){let d=h(l);(0,i.useLayoutEffect)(()=>m(d.current));let[f,g]=(0,i.useState)(``),_=(0,i.useRef)(!0);return(0,i.useEffect)(()=>{if(_.current){_.current=!1;return}g(d.current?.querySelector(`.lib-row.on`)?.dataset.title||``)},l),(0,a.jsxs)(`section`,{className:`lib-list`,"aria-label":e,onKeyDown:e=>{e.key===`ArrowDown`&&e.target.classList?.contains(`lib-filter`)&&(e.preventDefault(),d.current?.querySelector(`.lib-row`)?.focus())},children:[(0,a.jsxs)(`div`,{className:`lib-list-head`,children:[(0,a.jsxs)(`b`,{children:[e,` `,(0,a.jsx)(`span`,{className:`mono dim`,children:t})]}),n]}),(0,a.jsx)(r,{value:o,onChange:s,placeholder:`Filter ${e.toLowerCase()}`,label:`Filter ${e}`}),(0,a.jsxs)(`div`,{className:`lib-rows`,ref:d,onKeyDown:p,onFocus:e=>m(e.currentTarget),children:[u,o.trim()&&c===0&&(0,a.jsxs)(`div`,{className:`empty`,style:{padding:32},children:[(0,a.jsx)(`div`,{className:`big`,children:`No matches`}),`Nothing in `,e.toLowerCase(),` matches “`,o.trim(),`”.`]})]}),(0,a.jsx)(`p`,{className:`sr-only`,role:`status`,"aria-live":`polite`,children:f?`${f} opened`:``})]})}function d({item:e,isOpen:t,href:n,children:r}){return(0,a.jsxs)(`a`,{className:`lib-row${t?` on`:``}`,href:n,"aria-current":t?`true`:void 0,"data-title":e.title||e.name,children:[(0,a.jsxs)(`span`,{className:`lr-name`,children:[e.title||e.name,(0,a.jsx)(s,{status:e.status}),e.kit?(0,a.jsx)(c,{name:e.kit}):null,r]}),e.desc?(0,a.jsx)(`span`,{className:`lr-desc`,children:e.desc}):null,e.meta?(0,a.jsx)(`span`,{className:`lr-meta mono`,children:e.meta}):null]})}function f({rows:e,activeName:t,hrefOf:n,pills:r}){let i=null,o=[];for(let s of e)s.group&&s.group!==i&&(i=s.group,o.push((0,a.jsxs)(`div`,{className:`lib-group`,children:[s.groupC?(0,a.jsx)(`span`,{className:`cdot`,style:{"--cc":s.groupC},"aria-hidden":`true`}):null,s.group]},`g-${s.group}`))),o.push((0,a.jsx)(d,{item:s,isOpen:t===s.name,href:n(s),children:r?.(s)},s.name));return o}function p(e){let t=[...e.currentTarget.querySelectorAll(`.lib-row`)],n=t.indexOf(document.activeElement);if(n===-1)return;let r={ArrowDown:Math.min(n+1,t.length-1),ArrowUp:Math.max(n-1,0),Home:0,End:t.length-1}[e.key];r!==void 0&&(e.preventDefault(),t[r].focus())}function m(e){if(!e)return;let t=[...e.querySelectorAll(`.lib-row`)],n=t.find(e=>e===document.activeElement)||e.querySelector(`.lib-row.on`)||t[0];for(let e of t)e.tabIndex=e===n?0:-1}function h(e){let t=(0,i.useRef)(null);return(0,i.useEffect)(()=>{let e=t.current,n=e?.querySelector(`.lib-row.on`);if(!n||!e)return;let r=n.offsetTop;r>=e.scrollTop&&r+n.clientHeight<=e.scrollTop+e.clientHeight||(e.scrollTop=Math.max(0,r-e.clientHeight/2+n.clientHeight/2))},e),t}function g({label:e,total:t,cats:n,cat:r,onChange:i}){if(n.length<=1)return null;let o=[{key:`all`,label:`All`,n:t,c:`var(--text-3)`},...n];return(0,a.jsxs)(`div`,{className:`rail-cats`,children:[(0,a.jsx)(`ul`,{"aria-label":e,children:o.map(({key:e,label:t,n,c:o})=>(0,a.jsx)(`li`,{children:(0,a.jsxs)(`button`,{type:`button`,className:r===e?`on`:``,"aria-pressed":r===e,style:{"--cc":o},onClick:()=>i(e),children:[(0,a.jsx)(`span`,{className:`cdot`,"aria-hidden":`true`}),(0,a.jsx)(`span`,{className:`rc-name`,children:t}),(0,a.jsx)(`span`,{className:`mono dim`,children:n})]})},e))}),(0,a.jsx)(`div`,{className:`rail-mix`,"aria-hidden":`true`,children:n.map(({key:e,n:t,c:n})=>(0,a.jsx)(`span`,{className:r===`all`||r===e?``:`dim`,style:{"--cc":n,flexGrow:t}},e))})]})}function _(e){let t=[],n=new Map;for(let r of e)n.has(r.group)||t.push(r.group),n.set(r.group,(n.get(r.group)||0)+1);return t.map(e=>({key:e,label:e,n:n.get(e),c:`var(--accent)`}))}export{u as a,c as i,_ as n,l as o,f as r,s,g as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{ct as r,dt as i,it as a,rt as o}from"./index-osXUqzdX.js";var s=e(t(),1),c=n(),l=500;function u({parts:e,total:t,label:n}){let u=e.reduce((e,t)=>e+t.n,0),d=t??u,f=e=>d>0?`${e/d*100}%`:`0%`,p=e.map(e=>`${e.label}: ${e.n} of ${d}`).join(`, `),m=(0,s.useRef)(null),h=e.map(e=>e.n).join(`,`)+`/${d}`;return(0,s.useLayoutEffect)(()=>{if(m.current&&o())return r(m.current,{scaleX:0}),a(i(m.current,{scaleX:[0,1],duration:l,ease:`outExpo`}),l)},[h]),(0,c.jsxs)(`div`,{className:`stackbar-box`,children:[(0,c.jsx)(`div`,{className:`stackbar sweep`,role:`img`,"aria-label":n?`${n}: ${p}`:p,ref:m,children:e.map(e=>e.n>0?(0,c.jsx)(`span`,{className:`tone-${e.tone||`muted`}`,style:{width:f(e.n)},title:`${e.label}: ${e.n}`},e.key):null)}),(0,c.jsx)(`ul`,{className:`stackbar-legend`,"aria-hidden":`true`,children:e.map(e=>(0,c.jsxs)(`li`,{children:[(0,c.jsx)(`i`,{className:`tone-${e.tone||`muted`}`}),e.label,` `,(0,c.jsx)(`span`,{className:`mono`,children:e.n})]},e.key))})]})}function d({value:e,max:t,label:n=`value`,tone:r=`accent`}){let i=t>0?t:0;return(0,c.jsx)(u,{parts:[{key:`v`,label:n,n:Math.min(Math.max(e||0,0),i),tone:r}],total:i})}export{d as t};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-hePW80VL.js";import{i as e,t}from"./react-DlYQp10C.js";import{$ as n,Q as r}from"./index-osXUqzdX.js";e();var i=t();function a({page:e,current:t,badges:a={},label:o}){return(0,i.jsx)(`nav`,{className:`tabs`,"aria-label":o,children:r[e].map(r=>(0,i.jsxs)(`a`,{href:`#/${e}/${r}`,className:t===r?`on`:``,"aria-current":t===r?`page`:void 0,children:[n[r],a[r]==null?null:(0,i.jsx)(`span`,{className:`tab-badge`,children:a[r]})]},r))})}export{a as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-DlYQp10C.js";import{B as r}from"./index-osXUqzdX.js";var i=e(t(),1),a=n(),o={busy:{cls:`acc`,label:`working`,accent:`var(--accent)`},"waiting-input":{cls:`warn`,label:`your move`,accent:`var(--warn)`},blocked:{cls:`bad`,label:`blocked`,accent:`var(--bad)`},idle:{cls:``,label:`idle`,accent:`var(--line)`}};function s(e){if(!e)return``;let t=e.replace(/\\/g,`/`).replace(/\/+$/,``).split(`/`);return t[t.length-1]||e}var c=e=>e?e<1e3?String(e):e<1e5?(e/1e3).toFixed(1)+`k`:e<1e6?(e/1e3).toFixed(0)+`k`:(e/1e6).toFixed(1)+`M`:`0`;function l(e){if(e=Math.max(0,Math.floor(e)),e<60)return`${e}s`;let t=Math.floor(e/60);return t<60?`${t}m ${e%60}s`:`${Math.floor(t/60)}h ${t%60}m`}function u({startedAt:e}){let[t,n]=(0,i.useState)(()=>Date.now()/1e3);return(0,i.useEffect)(()=>{let e=setInterval(()=>n(Date.now()/1e3),1e3);return()=>clearInterval(e)},[]),l(t-e)}function d({done:e,total:t}){let n=Math.min(t,10),r=Math.min(n,Math.round(e/t*n));return(0,a.jsxs)(`span`,{className:`act-todo`,children:[(0,a.jsx)(`span`,{className:`on`,children:`●`.repeat(r)}),(0,a.jsx)(`span`,{className:`dim`,children:`○`.repeat(n-r)})]})}var f=e=>!!(e.tokens>0||e.cost>0||e.turn_started_at||e.files?.count>0);function p({s:e,heading:t,id:n,children:i}){let s=o[e.status]||o.idle,l=e.files,d=f(e),p=e=>n?`${n}-${e}`:void 0;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(`div`,{className:`row between wrap gap-12`,children:[t?(0,a.jsxs)(`div`,{className:`row gap-10 act-min`,children:[(0,a.jsx)(`span`,{className:`feed-dot act-dot ${s.cls||`acc`}`}),(0,a.jsxs)(`div`,{className:`act-min`,children:[(0,a.jsx)(`h2`,{className:`act-title`,id:p(`t`),children:t}),e.cwd&&(0,a.jsx)(`div`,{className:`dim mono act-cwd`,title:e.cwd,children:e.cwd})]})]}):null,(0,a.jsxs)(`div`,{className:`row gap-8 act-fixed`,children:[e.model&&(0,a.jsx)(`span`,{className:`badge mono`,title:`model`,children:e.model}),e.agent&&(0,a.jsx)(`span`,{className:`badge`,children:e.agent}),(0,a.jsxs)(`span`,{className:`badge ${s.cls}`,id:p(`st`),children:[(0,a.jsx)(`span`,{className:`dot`}),s.label]}),i]})]}),e.phase&&(0,a.jsxs)(`div`,{className:`row gap-8 act-phase`,children:[(0,a.jsx)(r,{name:`activity`}),(0,a.jsx)(`span`,{className:`act-ell`,children:e.phase})]}),d&&(0,a.jsxs)(`div`,{className:`row wrap act-counters`,id:p(`c`),children:[e.tokens>0&&(0,a.jsxs)(`span`,{children:[c(e.tokens),` tok`]}),e.cost>0&&(0,a.jsxs)(`span`,{children:[`$`,e.cost.toFixed(2)]}),e.turn_started_at?(0,a.jsx)(`span`,{children:(0,a.jsx)(u,{startedAt:e.turn_started_at})}):null,l&&l.count>0&&(0,a.jsxs)(`span`,{children:[l.count,` file`,l.count===1?``:`s`,` `,(0,a.jsxs)(`span`,{className:`t-good`,children:[`+`,l.additions]}),` `,(0,a.jsxs)(`span`,{className:`t-bad`,children:[`−`,l.deletions]})]})]}),(e.error||e.blocked_on)&&(0,a.jsx)(`div`,{className:`act-err-row`,children:(0,a.jsx)(`span`,{className:`badge bad act-ell`,title:e.error||e.blocked_on,children:e.error||e.blocked_on})})]})}export{f as a,c as i,d as n,s as r,p as t};
@@ -0,0 +1 @@
1
+ import{Pt as e,St as t,jt as n,kt as r,pt as i}from"./index-osXUqzdX.js";var a=e=>{let t=1;if(e&&e.getCTM){let n=e.getCTM();n&&(t=(r(n.a*n.a+n.b*n.b)+r(n.c*n.c+n.d*n.d))/2)}return t},o=(r,i,o)=>{let s=n,c=getComputedStyle(r),l=c.strokeLinecap,u=c.vectorEffect===`non-scaling-stroke`?r:null,d=l,f=new Proxy(r,{get(n,r){let i=n[r];return r===e?n:r===`setAttribute`?(...e)=>{if(e[0]===`draw`){let t=e[1].split(` `),r=+t[0],i=+t[1],o=a(u),c=r*-s*o,f=i*s*o+c,p=s*o+(r===0&&i===1||r===1&&i===0?0:10*o)-f;if(l!==`butt`){let e=r===i?`butt`:l;d!==e&&(n.style.strokeLinecap=`${e}`,d=e)}n.setAttribute(`stroke-dashoffset`,`${c}`),n.setAttribute(`stroke-dasharray`,`${f} ${p}`)}return Reflect.apply(i,n,e)}:t(i)?(...e)=>Reflect.apply(i,n,e):i}});return r.getAttribute(`pathLength`)!==`${s}`&&(r.setAttribute(`pathLength`,`${s}`),f.setAttribute(`draw`,`${i} ${o}`)),f},s=(e,t=0,n=0)=>i(e).map(e=>o(e,t,n));export{s as t};
@@ -0,0 +1 @@
1
+ @font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2)format("woff2")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2)format("woff2")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2)format("woff2")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2)format("woff2")}@font-face{font-family:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/hanken-grotesk-latin-400-normal-BG6hkEXj.woff2)format("woff2")}@font-face{font-family:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/hanken-grotesk-latin-500-normal-DrDcrrxK.woff2)format("woff2")}@font-face{font-family:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/hanken-grotesk-latin-600-normal-CIXX6EOa.woff2)format("woff2")}@font-face{font-family:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/hanken-grotesk-latin-700-normal-CeQ8H3UY.woff2)format("woff2")}@font-face{font-family:Hanken Grotesk;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/hanken-grotesk-latin-400-italic-Bserb8X5.woff2)format("woff2")}@font-face{font-family:Hanken Grotesk;font-style:italic;font-display:swap;font-weight:500;src:url(/assets/hanken-grotesk-latin-500-italic-BGfwwhek.woff2)format("woff2")}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/geist-mono-latin-400-normal-DTRLJnHl.woff2)format("woff2")}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/geist-mono-latin-500-normal-YINYabwD.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2)format("woff2")}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-mono-latin-400-normal-Rg4St2Dn.woff2)format("woff2")}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-mono-latin-700-normal-mWgeinG7.woff2)format("woff2")}@font-face{font-family:Space Mono;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/space-mono-latin-400-italic-YylcN9Ay.woff2)format("woff2")}@font-face{font-family:Space Mono;font-style:italic;font-display:swap;font-weight:700;src:url(/assets/space-mono-latin-700-italic-vNvENeTh.woff2)format("woff2")}:root{--bg:#08090b;--bg-2:#0c0e11;--surface:#101317;--surface-2:#14181d;--surface-3:#1b2026;--line:#2c333b;--line-2:#3a434d;--line-3:#4c5762;--text:#eaeef2;--text-2:#9aa6b2;--text-3:#727f8e;--accent:#3ad4c4;--accent-2:#2ba89b;--accent-ink:#04100d;--accent-soft:color-mix(in srgb, var(--accent) 13%, transparent);--accent-line:color-mix(in srgb, var(--accent) 34%, transparent);--good:#4ed888;--warn:#e8b53d;--bad:#ff5c57;--bad-ink:#1a0605;--r-xs:4px;--r-sm:7px;--r-md:11px;--r-lg:16px;--r-xl:22px;--rail-w:248px;--topbar-h:64px;--shadow-pop:0 18px 50px -12px #000000b3, 0 2px 0 #ffffff05 inset;--shadow-card:0 1px 0 #ffffff05 inset, 0 14px 40px -28px #000000e6;--font-display:"Hanken Grotesk", system-ui, sans-serif;--font-ui:"Hanken Grotesk", system-ui, sans-serif;--font-mono:"Geist Mono", ui-monospace, monospace;--fs-2xs:11px;--fs-xs:12px;--fs-sm:13px;--fs-md:14px;--fs-lg:17px;--fs-xl:22px;--fs-2xl:28px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-7:32px;--sp-8:48px;--z-page:1;--z-sticky:6;--z-spotlight:12;--z-console:20;--z-tabbar:25;--z-scrim:39;--z-drawer:40;--z-pop:45;--z-toast:50;--z-modal:60;--z-splash:100}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:14px;line-height:1.55}#root{height:100%}::selection{background:var(--accent-soft);color:var(--text)}a{color:var(--accent-text,var(--accent));text-decoration:none}button{font-family:inherit}:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px;border-radius:var(--r-xs)}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:var(--z-splash);border:1px solid var(--accent);background:var(--surface);color:var(--text);border-radius:10px;padding:10px 16px;font-size:13px;text-decoration:none;position:fixed;top:8px;left:-999px}.skip-link:focus{left:8px}.atmos{pointer-events:none;z-index:0;background:radial-gradient(900px 520px at 78% -8%, var(--accent-soft), transparent 60%), radial-gradient(700px 600px at -6% 102%, color-mix(in srgb, var(--accent) 5%, transparent), transparent 60%);opacity:.9;position:fixed;inset:0}.atmos:after{content:"";opacity:.025;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.4'/%3E%3C/svg%3E");position:absolute;inset:0}.app{z-index:var(--z-page);color:var(--text);background:var(--bg);grid-template-columns:var(--rail-w) 1fr;scrollbar-color:var(--line-2) transparent;min-height:100%;display:grid;position:relative}.app,.app *{scrollbar-width:thin}.app ::-webkit-scrollbar{width:9px;height:9px}.app ::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:999px}.app ::-webkit-scrollbar-thumb:hover{background:var(--line-3)}.app ::-webkit-scrollbar-track{background:0 0}.app ::-webkit-scrollbar-corner{background:0 0}.col{flex-direction:column;min-width:0;min-height:100vh;display:flex}.topbar{z-index:var(--z-sticky);height:var(--topbar-h);border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--bg) 78%, transparent);-webkit-backdrop-filter:blur(14px)saturate(140%);backdrop-filter:blur(14px)saturate(140%);align-items:center;gap:16px;padding:0 26px;display:flex;position:sticky;top:0}.topbar-spacer{flex:1}.tb-search{position:relative}.tb-search input{background:var(--surface);width:240px;color:var(--text);border:1px solid var(--line);border-radius:var(--r-sm);font-family:var(--font-ui);padding:8px 12px 8px 32px;font-size:13px;transition:border-color .14s}.tb-search input:focus{border-color:var(--accent-line)}.tb-search .mag{width:14px;height:14px;color:var(--text-3);position:absolute;top:50%;left:11px;transform:translateY(-50%)}.kbd{font-family:var(--font-mono);color:var(--text-3);border:1px solid var(--line-2);border-radius:4px;padding:1px 5px;font-size:10px;position:absolute;top:50%;right:9px;transform:translateY(-50%)}.spotlight{width:380px;max-height:60vh;z-index:var(--z-spotlight);background:var(--surface);color:var(--text);border:1px solid var(--line);border-radius:var(--r-sm);padding:6px 0;position:absolute;top:calc(100% + 6px);right:0;overflow-y:auto;box-shadow:0 14px 40px #00000052}.spot-empty{color:var(--text-3);padding:14px 16px;font-size:12.5px}.spot-group+.spot-group{border-top:1px solid var(--line-2);margin-top:4px;padding-top:4px}.spot-group-head{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);padding:6px 14px 4px;font-size:10px}.spot-row{cursor:pointer;padding:7px 14px}.spot-row.on{background:color-mix(in srgb, var(--accent) 16%, transparent)}.spot-title{color:var(--text);font-size:13px}.spot-desc{color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:11.5px;overflow:hidden}.page{flex:1;padding:30px 34px 120px;overflow:auto}.page.center{width:100%;max-width:1180px;margin:0 auto}.pad{max-width:1180px;margin:0 auto}.eyebrow{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--text-3);align-items:center;gap:8px;font-size:10px;display:inline-flex}.eyebrow:before{content:"";background:var(--accent);border-radius:2px;width:14px;height:2px}h1.h{font-family:var(--font-display);letter-spacing:-.02em;margin:10px 0 4px;font-size:27px;font-weight:600}h2.h{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:19px;font-weight:600}.sub{color:var(--text-2);max-width:70ch;margin:0;font-size:14px}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.muted{color:var(--text-2)}.dim{color:var(--text-3)}svg.glyph{flex:none;width:16px;height:16px}.card{background:linear-gradient(180deg, var(--surface), var(--surface-2));border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.card.pad-lg{padding:22px 24px}.card.pad-md{padding:18px 20px}.act-card{color:inherit;text-decoration:none;transition:border-color .15s,transform .12s;display:block}.act-card:hover{border-color:var(--line-2);transform:translateY(-1px)}.act-chev{color:var(--text-3);transition:color .14s,transform .14s}.act-card:hover .act-chev{color:var(--text);transform:translate(2px)}.card-head{align-items:center;gap:12px;margin-bottom:16px;display:flex}.card-head h3,.card-head h2{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:16.5px;font-weight:600}.card-head .right{align-items:center;gap:8px;margin-left:auto;display:flex}.tick{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);font-size:10px}.metric{font-family:var(--font-display);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:500;line-height:1}.badge{font-family:var(--font-mono);letter-spacing:.02em;border:1px solid var(--line-2);color:var(--text-2);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:11px;display:inline-flex}.badge .dot{background:currentColor;border-radius:50%;width:6px;height:6px}.badge.ok{color:var(--good-text);border-color:color-mix(in srgb, var(--good) 36%, transparent);background:color-mix(in srgb, var(--good) 9%, transparent)}.badge.warn{color:var(--warn-text);border-color:color-mix(in srgb, var(--warn) 36%, transparent);background:color-mix(in srgb, var(--warn) 9%, transparent)}.badge.bad{color:var(--bad-text);border-color:color-mix(in srgb, var(--bad) 36%, transparent);background:color-mix(in srgb, var(--bad) 9%, transparent)}.badge.acc{color:var(--accent-text);border-color:var(--accent-line);background:var(--accent-soft)}.btn{cursor:pointer;white-space:nowrap;font-family:var(--font-ui);border-radius:var(--r-sm);background:var(--accent);color:var(--accent-ink);border:1px solid #0000;align-items:center;gap:8px;padding:9px 15px;font-size:13px;font-weight:600;transition:filter .14s,transform 80ms;display:inline-flex}.btn:hover{filter:brightness(1.08)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:default;filter:none}.btn.ghost{color:var(--text);border-color:var(--line-2);background:0 0}.btn.ghost:hover{border-color:var(--accent-line);background:var(--surface);filter:none}.btn.soft{background:var(--accent-soft);color:var(--accent-text);border-color:var(--accent-line)}.btn.soft:hover{background:color-mix(in srgb, var(--accent) 18%, transparent);filter:none}.btn.sm{padding:5px 10px;font-size:12px}.stale-banner{color:var(--warn-text);border:1px solid color-mix(in srgb, var(--warn) 36%, transparent);background:color-mix(in srgb, var(--warn) 10%, transparent);border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;padding:10px 14px;display:flex}.btn .glyph{width:15px;height:15px}.fl-matrix .btn:not(.ghost):not(.soft):not(.btn-grid):disabled{box-shadow:none;background-image:none}.seg{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);gap:2px;padding:3px;display:inline-flex}.seg button{cursor:pointer;color:var(--text-2);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;background:0 0;border:0;border-radius:5px;padding:6px 13px;font-size:11px;transition:color .14s,background .14s}.seg button:hover{color:var(--text)}.seg button.on{color:var(--accent-ink);background:var(--accent)}.kv{border-bottom:1px solid var(--line);grid-template-columns:168px 1fr;align-items:baseline;gap:16px;padding:11px 0;font-size:13.5px;display:grid}.kv:last-child{border-bottom:0}.kv .k{color:var(--text-3);font-family:var(--font-mono);letter-spacing:.04em;font-size:11.5px}.kv .v{color:var(--text);word-break:break-word}.hr{background:var(--line);border:0;height:1px;margin:22px 0}code{font-family:var(--font-mono);background:var(--surface-3);border:1px solid var(--line);border-radius:var(--r-xs);color:var(--text);padding:1px 6px;font-size:.92em}.sel{background:var(--surface);color:var(--text);border:1px solid var(--line-2);border-radius:var(--r-sm);font-family:var(--font-mono);cursor:pointer;min-width:180px;padding:9px 12px;font-size:12.5px}.sel:focus{border-color:var(--accent-line)}.sel option{background:var(--surface-2)}.grid{gap:16px;display:grid}.row{align-items:center;gap:12px;display:flex}.wrap{flex-wrap:wrap}.between{justify-content:space-between}.stack{flex-direction:column;display:flex}.grid.split-status{grid-template-columns:1.55fr 1fr;align-items:start}.grid.split-operator{grid-template-columns:1.6fr 1fr;align-items:start}.grid.split-even{grid-template-columns:1fr 1fr;align-items:start}.head-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:24px;display:flex}.hero{grid-template-columns:232px 1fr;align-items:center;gap:28px;display:grid}.ring-wrap{width:232px;height:232px;position:relative}.ring-wrap svg{width:100%;height:100%;transform:rotate(-90deg)}.ring-center{text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.ring-center .pct{font-family:var(--font-display);letter-spacing:-.03em;font-size:44px;font-weight:600;line-height:1}.ring-center .lbl{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--text-3);margin-top:6px;font-size:9.5px}.hero-facts{flex-direction:column;gap:4px;display:flex}.hero-facts .ttl{font-family:var(--font-display);letter-spacing:-.02em;font-size:25px;font-weight:600}.hero-chips{flex-wrap:wrap;gap:8px;margin:14px 0 18px;display:flex}.chip{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);font-family:var(--font-mono);align-items:center;gap:8px;padding:7px 12px;font-size:12px;display:inline-flex}.chip .ck{color:var(--text-3)}.chip .cv{color:var(--text)}.kpiband{flex-wrap:wrap;align-items:center;gap:30px;padding:16px 22px;display:flex}.kseg{cursor:pointer;font:inherit;color:inherit;background:0 0;border:0;align-items:baseline;gap:9px;padding:0;text-decoration:none;display:flex}.kseg-n{font-family:var(--font-display);letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:27px;font-weight:500;line-height:1}.kseg-n.zero{color:var(--text-3)}.kseg-l{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);font-size:10px}.kseg:hover .kseg-l{color:var(--accent-text)}.kseg-spacer{flex:1}.kseg.hot .kseg-n{color:var(--good-text)}.delta{font-family:var(--font-mono);font-size:11.5px}.delta.up{color:var(--good-text)}.genome{grid-template-columns:repeat(auto-fill,minmax(216px,1fr));gap:14px;display:grid}.gcell{cursor:pointer;background:var(--bg-2);box-shadow:none;border-radius:var(--r-md);padding:18px;transition:border-color .15s,transform .15s,background .15s;position:relative;overflow:hidden}.gcell:hover{border-color:var(--accent-line);background:var(--surface-2);transform:translateY(-2px)}.gcell .gtop{justify-content:space-between;align-items:center;display:flex}.gcell .gname{font-family:var(--font-display);font-size:15px;font-weight:600}.gcell .gcount{font-family:var(--font-display);letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin:14px 0 4px;font-size:34px;font-weight:500;line-height:1}.gcell .gcount.zero{color:var(--text-3)}.gcell .gdesc{color:var(--text-2);font-size:12.5px}.gcell .gicon{width:20px;height:20px;color:var(--text-3)}.gcell:hover .gicon{color:var(--accent)}.feed{flex-direction:column;display:flex}.feed-row{border-bottom:1px solid var(--line);grid-template-columns:14px 1fr auto;align-items:center;gap:12px;padding:11px 0;display:grid}.feed-row:last-child{border-bottom:0}.feed-dot{background:var(--text-3);border-radius:50%;width:8px;height:8px}.feed-dot.ok{background:var(--good)}.feed-dot.acc{background:var(--accent)}.feed-dot.warn{background:var(--warn)}.feed-dot.bad{background:var(--bad)}.feed-txt{font-size:13px}.feed-txt b{font-weight:600}.feed-when{font-family:var(--font-mono);color:var(--text-3);font-size:11px}.tbl{border-collapse:collapse;width:100%}.tbl th{text-align:left;font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);border-bottom:1px solid var(--line);padding:0 14px 11px;font-size:10px;font-weight:500}.tbl td{border-bottom:1px solid var(--line);vertical-align:middle;padding:12px 14px;font-size:13.5px}.tbl tr:last-child td{border-bottom:0}.tbl tbody tr{transition:background .1s}.tbl tbody tr:hover{background:var(--surface-2)}.tbl .num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right}.tbl .name{font-weight:600}.tbl .clickable{cursor:pointer;position:relative}.stretch-link:after{content:"";position:absolute;inset:0}.strand{border-bottom:1px solid var(--line);cursor:pointer;justify-content:space-between;align-items:center;padding:13px 0;display:flex;position:relative}.strand .strand-name{align-items:center;gap:12px;min-width:150px;font-weight:600;display:flex}.strand .strand-link{color:inherit;text-decoration:none}.strand .strand-link:hover{text-decoration:underline}.strand .strand-dot{background:var(--accent);border-radius:50%;flex:none;width:7px;height:7px}.strand .hbar{flex:1;margin:0 16px}.strand .strand-val{font-family:var(--font-mono);text-align:right;width:34px;font-size:14px}.lineage-track{padding-left:26px;position:relative}.lineage-track .spine{background:linear-gradient(var(--accent), var(--line-2));width:2px;position:absolute;top:6px;bottom:18px;left:7px}.lineage-step{position:relative}.lineage-step:not(:last-child){margin-bottom:22px}.lineage-step .node{border:2px solid var(--bg);background:var(--surface-3);border-radius:50%;width:14px;height:14px;position:absolute;top:3px;left:-26px}.lineage-step .node.on{background:var(--accent);box-shadow:0 0 10px var(--accent)}.lineage-step .lt{font-family:var(--font-display);font-size:15px;font-weight:600}.lineage-step .ld{color:var(--text-2);font-size:13px}.lineage-step .ltag{font-family:var(--font-mono);color:var(--text-3);margin-top:2px;font-size:11px}.lib-filter{box-sizing:border-box;background:var(--surface);width:100%;color:var(--text);border:0;border-bottom:1px solid var(--line);font-family:var(--font-mono);padding:10px 16px;font-size:12px}.lib-filter:focus{border-bottom-color:var(--accent-line)}.lib-filter::placeholder{color:var(--text-3)}.lib-more{font-family:var(--font-mono);color:var(--text-3);border-bottom:1px solid var(--line);padding:12px 16px;font-size:11px}.lib-rows{max-height:calc(100vh - 280px);overflow:auto}.lib-row{text-align:left;border:0;border-bottom:1px solid var(--line);cursor:pointer;width:100%;font:inherit;color:var(--text);background:0 0;padding:12px 16px;transition:background .1s;display:block}.lib-row:hover{background:var(--surface-2)}.lib-row.on{background:var(--accent-soft)}.lib-row.on .lr-name{color:var(--accent-text)}.lib-row .lr-name{align-items:center;gap:8px;font-size:13.5px;font-weight:600;display:flex}.lib-row .lr-name .mono{color:var(--text-3);font-size:11px}.lib-row .lr-desc{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:12px;overflow:hidden}.lib-group{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);background:var(--surface-2);border-bottom:1px solid var(--line);padding:10px 16px 4px;font-size:10px}.lib-group .cdot{background:var(--cc,var(--text-3));vertical-align:1px;border-radius:50%;width:7px;height:7px;margin-right:8px;display:inline-block}.mf-doc{flex-direction:column;gap:18px;display:flex}.mf-vault{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);padding:14px 16px}.mf-vault-head{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.mf-vault-name{font-family:var(--font-display);font-size:15px;font-weight:600}.mf-vault-path{color:var(--text-3);font-size:11.5px}.mf-vault-desc{color:var(--text-2);margin:4px 0 10px;font-size:13px}.mf-roles{flex-wrap:wrap;gap:6px;margin-bottom:12px;display:flex}.mf-role{border-radius:var(--r-sm);background:var(--bg-2);color:var(--text-2);align-items:center;gap:5px;padding:3px 8px;font-size:11.5px;display:inline-flex}.mf-role .glyph{width:13px;height:13px}.mf-role-danger{color:var(--bad-text);background:color-mix(in srgb, var(--bad) 12%, transparent)}.mf-entries{border-collapse:collapse;width:100%;font-size:12.5px}.mf-entries td{border-top:1px solid var(--line);vertical-align:top;padding:7px 0}.mf-entries tr:first-child td{border-top:0}.mf-path{width:42%;color:var(--text)}.mf-struck{color:var(--text-3);text-decoration:line-through}.mf-load-cell{white-space:nowrap;width:74px}.mf-edesc{color:var(--text-2)}.mf-load{font-family:var(--font-mono);letter-spacing:.04em;border:1px solid color-mix(in srgb, currentColor 36%, transparent);border-radius:999px;padding:2px 8px;font-size:10px;display:inline-block}.mf-load-ok{color:var(--good-text)}.mf-load-warn{color:var(--warn-text)}.mf-load-muted{color:var(--text-3)}.mf-empty{color:var(--text-2)}.mf-empty-title{font-family:var(--font-display);color:var(--text);margin-bottom:6px;font-size:15px;font-weight:600}.mf-empty p{margin:0 0 12px;font-size:13px}.mf-raw{margin-top:16px}.mf-raw-toggle{cursor:pointer;font:inherit;color:var(--text-3);background:0 0;border:0;align-items:center;gap:6px;padding:4px 0;font-size:12px;display:inline-flex}.mf-raw-toggle:hover{color:var(--text)}.mf-caret{width:13px;height:13px;transition:transform .12s}.mf-caret.on{transform:rotate(90deg)}.mf-raw-pre{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);font-family:var(--font-mono);color:var(--text-2);margin-top:8px;padding:14px 16px;font-size:12px;overflow:auto}.detail-doc{padding:28px 32px}.detail-doc h1{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 4px;font-size:24px;font-weight:600}.detail-doc .doc-meta{flex-wrap:wrap;gap:8px;margin:12px 0 22px;display:flex}.detail-doc h2{font-family:var(--font-display);margin:26px 0 8px;font-size:16px;font-weight:600}.detail-doc p{color:var(--text);margin:0 0 12px}.detail-doc ul{color:var(--text);margin:0 0 14px;padding-left:20px}.detail-doc li{margin:4px 0}.detail-doc pre{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);font-family:var(--font-mono);color:var(--text-2);padding:14px 16px;font-size:12.5px;overflow:auto}.check{padding:16px 20px;transition:border-color .15s}.check.bad{border-color:color-mix(in srgb, var(--bad) 34%, var(--line))}.check-head{cursor:pointer;width:100%;color:inherit;font:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:12px;display:flex}.check-head:disabled{cursor:default}.check-head:focus-visible{outline:2px solid var(--accent-text);outline-offset:-2px;border-radius:4px}.check-head h3{font-family:var(--font-display);margin:0;font-size:14.5px;font-weight:600}.check-head .chev{color:var(--text-3);margin-left:auto;transition:transform .15s}.check.open .check-head .chev{transform:rotate(90deg)}.check-body{border-top:1px solid var(--line);flex-direction:column;gap:8px;margin:14px 0 0;padding:14px 0 0;display:flex}.problem{color:var(--text-2);font-size:13px;font-family:var(--font-mono);grid-template-columns:16px 1fr;gap:10px;display:grid}.problem .x{color:var(--bad-text)}.diff-file{overflow:hidden}.diff-head{cursor:pointer;border-bottom:1px solid #0000;align-items:center;gap:12px;padding:13px 18px;display:flex}.diff-file.open .diff-head{border-bottom-color:var(--line)}.diff-head .chk{width:16px;height:16px;accent-color:var(--accent)}.diff-head .fname{font-family:var(--font-mono);font-size:13px;font-weight:500}.diff-body{font-family:var(--font-mono);padding:6px 0;font-size:12.5px;line-height:1.7;overflow:auto}.diff-line{white-space:pre;padding:0 18px}.diff-line.add{background:color-mix(in srgb, var(--good) 9%, transparent);color:var(--good-text)}.diff-line.del{background:color-mix(in srgb, var(--bad) 9%, transparent);color:var(--bad-text)}.diff-line.ctx{color:var(--text-3)}.diff-line.hunk{color:var(--accent-text);background:var(--accent-soft)}.mcp-target{border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:14px;overflow:hidden}.mcp-target .mt-head{background:var(--bg-2);font-family:var(--font-mono);color:var(--text-2);align-items:center;gap:8px;padding:11px 16px;font-size:11.5px;display:flex}.mcp-row{border-top:1px solid var(--line);align-items:center;gap:14px;padding:13px 16px;display:flex}.sw-toggle{background:var(--surface-3);border:1px solid var(--line-2);cursor:pointer;appearance:none;border-radius:999px;flex:none;width:38px;height:22px;margin:0;padding:0;transition:background .15s;position:relative}.sw-toggle:after{content:"";background:var(--text-2);border-radius:50%;width:16px;height:16px;transition:transform .15s,background .15s;position:absolute;top:2px;left:2px}.sw-toggle.on{background:var(--accent-soft);border-color:var(--accent-line)}.sw-toggle.on:after{background:var(--accent);transform:translate(16px)}.console{left:var(--rail-w);z-index:var(--z-console);background:linear-gradient(180deg, var(--surface), var(--bg-2));border-top:1px solid var(--line-2);flex-direction:column;transition:transform .18s cubic-bezier(.22,1,.36,1);display:flex;position:fixed;bottom:0;right:0;box-shadow:0 -16px 40px -20px #000c}@media (width<=720px){.console{left:0}}.console-head{cursor:pointer;-webkit-user-select:none;user-select:none;flex:none;align-items:center;gap:12px;height:42px;padding:0 18px;display:flex}.console-head .ttl{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-2);align-items:center;gap:9px;font-size:11px;display:flex}.console-head .ttl .live{background:var(--text-3);border-radius:50%;width:7px;height:7px}.console-head .ttl .live.on{background:var(--warn);animation:1.1s infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.console-head .count{font-family:var(--font-mono);color:var(--text-3);border:1px solid var(--line-2);border-radius:999px;padding:0 7px;font-size:11px}.console-head .right{align-items:center;gap:6px;margin-left:auto;display:flex}.console-body{font-family:var(--font-mono);flex:1;padding:8px 18px 16px;font-size:12px;line-height:1.6;overflow:auto}.console-empty{color:var(--text-3);padding:14px 0;font-style:italic}.run{margin-bottom:12px}.run-head{align-items:center;gap:9px;display:flex}.run-head .pr{color:var(--accent-text);font-weight:600}.run-head .act{color:var(--text)}.run-head .st{margin-left:auto;font-size:11px}.run-head .st.running{color:var(--warn-text)}.run-head .st.done{color:var(--good-text)}.run-head .st.failed{color:var(--bad-text)}.run-out{white-space:pre-wrap;color:var(--text-2);border-left:2px solid var(--line-2);margin:5px 0 0;padding-left:12px}.iconbtn{border-radius:var(--r-sm);cursor:pointer;width:28px;height:28px;color:var(--text-2);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.iconbtn:hover{background:var(--surface-3);color:var(--text)}.iconbtn .glyph{width:16px;height:16px}.pop{width:204px;z-index:var(--z-pop);background:var(--surface-2);border:1px solid var(--line-2);border-radius:var(--r-md);box-shadow:var(--shadow-pop);max-height:60vh;padding:8px;position:fixed;bottom:72px;left:14px;overflow:auto}.pop-item{border-radius:var(--r-sm);cursor:pointer;width:100%;color:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:10px;padding:8px 10px;font-family:inherit;font-size:13px;display:flex}.pop-item:focus-visible{outline:2px solid var(--accent-text);outline-offset:-2px}.pop-item:hover{background:var(--surface-3)}.pop-item .po{border-radius:50%;flex:none;width:11px;height:11px}.pop-item .pn{text-transform:capitalize;font-weight:500}.pop-item.on{background:var(--accent-soft)}.pop-item.on .pn{color:var(--accent-text)}@keyframes rise{0%{transform:translateY(9px)}to{transform:none}}.rise{animation:.5s cubic-bezier(.2,.7,.2,1) both rise;animation-delay:calc(var(--i,0) * 50ms)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.empty{text-align:center;color:var(--text-3);padding:60px 20px}.empty .big{font-family:var(--font-display);color:var(--text-2);margin-bottom:6px;font-size:18px}@media (width<=1180px){.hero{grid-template-columns:1fr}}.app.light{--chart-skill:#3f7fa6;--chart-agent:#7a63a8;--chart-context:#3c8f78;--shadow-card:0 1px 2px #1f2a210a, 0 14px 36px -28px #1f2a2166;--shadow-pop:0 18px 50px -16px #1f2a2147;--shadow-modal:0 24px 60px -18px #1f2a214d}.app.light .atmos{background:radial-gradient(900px 520px at 80% -10%, var(--accent-soft), transparent 62%), radial-gradient(700px 600px at -6% 102%, color-mix(in srgb, var(--accent) 7%, transparent), transparent 60%);opacity:.7}.app.light .atmos:after{opacity:.015}.app.light .sprout{filter:none}.app.light .kbd{color:var(--text-3)}.app.light .diff-line.add{background:color-mix(in srgb, var(--good) 13%, transparent)}.app.light .diff-line.del{background:color-mix(in srgb, var(--bad) 13%, transparent)}.app.light .sel option{background:var(--surface)}.voice-readout{font-family:var(--font-mono);color:var(--text-2);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-sm);align-items:center;gap:10px;max-width:64ch;margin:4px 0 16px;padding:9px 13px;font-size:12.5px;display:flex}.voice-readout .vr-cur{color:var(--accent-text);flex:none;font-weight:600}.voice-readout .vr-txt{color:var(--text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.toast{z-index:var(--z-toast);background:var(--surface-2);border:1px solid var(--line-2);border-radius:var(--r-md);max-width:380px;box-shadow:var(--shadow-pop);padding:14px 16px;font-size:13px;transition:opacity .22s cubic-bezier(.22,1,.36,1),transform .22s cubic-bezier(.22,1,.36,1);position:fixed;bottom:56px;right:18px}@starting-style{.toast{opacity:0;transform:translateY(10px)}}.toast-region{z-index:var(--z-toast);position:fixed}.toast.err{border-color:color-mix(in srgb, var(--bad) 45%, var(--line-2))}.toast.info{border-color:color-mix(in srgb, var(--accent) 45%, var(--line-2))}.run-cancel{margin-left:8px}.detail-doc .markdown h1,.detail-doc .markdown h2,.detail-doc .markdown h3{font-family:var(--font-display);letter-spacing:-.01em;font-weight:600}.detail-doc .markdown h1{margin:22px 0 8px;font-size:20px}.detail-doc .markdown h2{margin:22px 0 8px;font-size:16px}.detail-doc .markdown h3{margin:18px 0 6px;font-size:14px}.detail-doc .markdown p{color:var(--text);margin:0 0 12px}.detail-doc .markdown ul,.detail-doc .markdown ol{margin:0 0 14px;padding-left:20px}.detail-doc .markdown li{margin:4px 0}.detail-doc .markdown a{color:var(--accent-text);border-bottom:1px dashed var(--accent-line)}.detail-doc .markdown pre{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);font-family:var(--font-mono);color:var(--text-2);padding:14px 16px;font-size:12.5px;overflow:auto}.detail-doc .markdown pre code{background:0 0;border:0;padding:0}.detail-doc .markdown blockquote{border-left:2px solid var(--line-2);color:var(--text-2);margin:0 0 12px;padding:2px 14px}.detail-doc .markdown table{border-collapse:collapse;margin:0 0 14px}.detail-doc .markdown th,.detail-doc .markdown td{border:1px solid var(--line);padding:6px 10px;font-size:13px}.loading{color:var(--text-3);font-family:var(--font-mono);padding:40px 0;font-size:12.5px}.skel{gap:10px;max-width:560px;margin-top:16px;display:grid}.skel-bar{border-radius:var(--r-sm);background:linear-gradient(90deg, var(--surface-2) 25%, var(--surface-3) 50%, var(--surface-2) 75%);background-size:200% 100%;height:13px;animation:1.3s linear infinite skel-shimmer}.skel-bar:nth-child(2){width:72%}.skel-bar:nth-child(3){width:46%}@keyframes skel-shimmer{0%{background-position:200% 0}to{background-position:0 0}}dialog.confirm{background:var(--surface);color:var(--text);border:1px solid var(--line-2);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);max-width:400px;padding:20px 22px}dialog.confirm::backdrop{background:#0000008c}dialog.confirm[open]{transition:opacity .2s cubic-bezier(.22,1,.36,1),transform .2s cubic-bezier(.22,1,.36,1)}dialog.confirm[open]::backdrop{transition:opacity .2s ease-out}@starting-style{dialog.confirm[open]{opacity:0;transform:scale(.96)translateY(6px)}dialog.confirm[open]::backdrop{opacity:0}}.confirm-title{font-family:var(--font-display);margin:0 0 8px;font-size:17px;font-weight:600}.confirm-body{color:var(--text-2);white-space:pre-line;font-size:13px;line-height:1.5}.confirm-actions{justify-content:flex-end;gap:8px;margin-top:18px;display:flex}.law-toolbar .law-filter{border:1px solid var(--line);border-radius:var(--r-sm);max-width:200px;margin:0;padding:8px 12px}.mb-14{margin-bottom:14px}.mb-16{margin-bottom:16px}.mb-18{margin-bottom:18px}.gap-8{gap:8px}.gap-10{gap:10px}.gap-12{gap:12px}.gap-16{gap:16px}.narrow{max-width:820px}.narrow-lg{max-width:860px}.docs-wrap{container:docs/inline-size}.library.docs-lib{overflow:clip}.docs-lib .lib-kinds .seg{grid-template-columns:1fr 1fr;margin:0 8px;display:grid}.docs-lib .lib-kinds .seg button{white-space:nowrap;padding:6px 8px}.docs-lib .lib-list-head .track-prog{margin:10px 0 0}.docs-read-mark{color:var(--good-text);font-size:12px}.docs-crumbs{color:var(--text-3);flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;display:flex}.docs-crumbs a{color:var(--text-2)}.docs-crumbs a:hover{color:var(--accent-text)}.docs-crumbs [aria-current]{color:var(--text)}.docs-read{grid-template-columns:minmax(0,1fr);align-items:start;gap:28px;display:grid}.docs-toc{border:1px solid var(--line-2);background:var(--surface);border-radius:10px;margin:6px 0 22px;padding:12px 16px}.docs-toc-head{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);margin-bottom:6px;font-size:10.5px}.docs-toc ul{margin:0;padding:0;list-style:none}.docs-toc li{padding:2px 0}.docs-toc li.lvl-3{padding-left:14px}.docs-toc a{color:var(--text-2);font-size:13px;text-decoration:none}.docs-toc a:hover{color:var(--accent-text)}.markdown .docs-here{background:var(--accent-soft);border:1px solid var(--accent-line);border-radius:8px;padding:6px 10px}.docs-article{min-width:0}.docs-margin{order:-1;gap:16px;display:grid;position:static;top:16px}.docs-margin .docs-toc{margin:0}.docs-gloss{gap:8px;display:none}.docs-gloss-card{border:1px solid var(--line);background:var(--surface);border-radius:var(--r-sm);padding:10px 12px}.docs-gloss-card b{font-family:var(--font-mono);color:var(--accent-text);font-size:12px}.docs-gloss-card p{color:var(--text-2);margin:4px 0 0;font-size:12.5px;line-height:1.45}@container docs (width>=1422px){.library.docs-lib{grid-template-columns:232px minmax(0,280px) minmax(0,1fr)}.docs-read{grid-template-columns:minmax(0,1fr) 210px}.docs-margin{order:0;position:sticky}.docs-gloss{display:grid}}@container docs (width>=869px) and (width<=1421.98px){.library.docs-lib{grid-template-rows:auto 1fr;grid-template-columns:280px minmax(0,1fr)}.docs-lib .lib-kinds{border-bottom:1px solid var(--line);grid-area:1/1}.docs-lib .lib-list{grid-area:2/1}.docs-lib .lib-reader{grid-area:1/2/3/3;padding:28px}}.track-prog{background:var(--surface-3);border-radius:99px;height:3px;overflow:hidden}.track-prog i{background:var(--accent);height:100%;transition:width .3s cubic-bezier(.22,1,.36,1);display:block}.track-bar{border-top:1px solid var(--line);justify-content:space-between;gap:10px;margin-top:28px;padding-top:16px;display:flex}.detail-doc .markdown blockquote.analogy{border:1px solid var(--accent-line);background:var(--accent-soft);border-radius:var(--r-md);color:var(--text);padding:10px 14px}.detail-doc .markdown blockquote.analogy strong:first-child{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--accent-text);margin-bottom:4px;font-size:10.5px;display:block}.docs-map{grid-template-columns:minmax(0,1fr) 280px;align-items:start;gap:16px;margin-top:18px;display:grid}.map-tree{border:1px solid var(--line);border-radius:var(--r-md);margin:0;padding:0;list-style:none;overflow:hidden}.map-tree li+li{border-top:1px solid var(--line)}.map-node{text-align:left;cursor:pointer;width:100%;font:inherit;color:var(--text);background:0 0;border:0;grid-template-columns:minmax(0,1fr) auto 120px;align-items:center;gap:12px;padding:10px 14px;font-size:13px;display:grid}.map-node:hover{background:var(--surface-2)}.map-node.on{background:var(--accent-soft)}.map-cost{text-align:right;font-size:11.5px}.map-detail{position:sticky;top:16px}.map-detail dl{margin:12px 0 0;font-size:13px}.map-detail dt{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);margin-top:10px;font-size:10.5px}.map-detail dd{color:var(--text);margin:3px 0 0}@media (width<=1180px){.docs-map{grid-template-columns:1fr}.map-detail{position:static}}@media (width<=720px){.map-node{grid-template-columns:minmax(0,1fr) auto}.map-cost{display:none}}.newhere{border:1px solid var(--accent-line);background:var(--accent-soft);border-radius:var(--r-md);align-items:center;gap:16px;margin-bottom:20px;padding:14px 18px;display:flex}.newhere-body{flex:1;min-width:0}.newhere-body p{color:var(--text-2);margin:2px 0 8px;font-size:13px}.newhere-dots{gap:6px;display:flex}.newhere-dots i{background:var(--line-2);border-radius:99px;width:22px;height:4px}.newhere-dots i.f{background:var(--accent)}.newhere-x{color:var(--text-3);cursor:pointer;background:0 0;border:0;padding:4px 6px;font-size:18px;line-height:1}.newhere-x:hover{color:var(--text)}@media (width<=720px){.newhere{flex-wrap:wrap}}.cli-card .cli-syn{background:var(--surface);border:1px solid var(--line);font-family:var(--font-mono);white-space:pre-wrap;color:var(--text);border-radius:8px;margin:10px 0;padding:10px 12px;font-size:12.5px}.cli-block{margin-top:10px}.cli-block-head{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);margin-bottom:6px;font-size:10.5px}.cli-arg{border-bottom:1px dashed var(--line);padding:6px 0}.cli-arg:last-child{border-bottom:0}.cli-arg-name{font-family:var(--font-mono);color:var(--text);font-weight:600}.cli-arg-meta{color:var(--text-3);font-size:11.5px}.cli-arg-help{color:var(--text-2);margin-top:2px;font-size:13px}.glossary-table{border-collapse:collapse;width:100%;font-size:13px}.glossary-table th,.glossary-table td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:9px 10px}.glossary-table th{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);font-size:10.5px;font-weight:500}.glossary-table td.dim{color:var(--text-2)}.fl-cultivar,:root:has(.app.fl-cultivar){--bg:#0b0e12;--bg-2:#0f1318;--surface:#14181d;--surface-2:#1b2026;--surface-3:#232a31;--line:#2c333b;--line-2:#3a434d;--line-3:#4c5762;--text:#eaeef2;--text-2:#9aa6b2;--text-3:#86919d;--good:#4ed888;--warn:#e8b53d;--bad:#ff6b66;--good-text:var(--good);--warn-text:var(--warn);--bad-text:var(--bad);--bad-ink:#1a0605;--r-xs:4px;--r-sm:8px;--r-md:12px;--r-lg:16px;--r-xl:20px;--font-display:"Hanken Grotesk", system-ui, sans-serif;--font-ui:"Hanken Grotesk", system-ui, sans-serif;--font-mono:"Geist Mono", ui-monospace, monospace;--shadow-card:0 1px 0 #ffffff08 inset, 0 16px 40px -28px #000000e6}.fl-cultivar.light,:root:has(.app.fl-cultivar.light){--bg:#eef2f1;--bg-2:#e6eceb;--surface:#fbfdfc;--surface-2:#f3f6f6;--surface-3:#e9efee;--line:#dde5e4;--line-2:#c7d2d1;--line-3:#9dacac;--text:#0e1620;--text-2:#46535f;--text-3:#5d6b7b;--good:#14855a;--warn:#9e6410;--bad:#cc3a44;--good-text:#11724d;--warn-text:#8b580e;--bad-text:#b1323b;--bad-ink:#fff}.fl-cultivar h1.h,.fl-cultivar h2,.fl-cultivar h3{font-family:var(--font-display);letter-spacing:-.012em}.fl-cultivar .card-head h3,.fl-cultivar .card-head h2{font-family:var(--font-display);letter-spacing:-.01em;font-weight:600}.fl-cultivar .card{background:var(--surface);box-shadow:inset 0 1px 0 var(--accent-soft), var(--shadow-card)}.fl-cultivar .btn:not(.ghost):not(.soft):not(.danger){box-shadow:inset 0 1px 0 #ffffff24, 0 6px 16px -10px color-mix(in srgb, var(--accent) 60%, transparent)}.fl-cultivar .badge{border-radius:var(--r-sm)}.fl-cultivar .atmos{background:radial-gradient(880px 520px at 82% -10%, var(--accent-soft), transparent 62%), radial-gradient(680px 560px at -8% 104%, color-mix(in srgb, var(--accent) 4%, transparent), transparent 60%);opacity:.85}.fl-cultivar .atmos:after{content:"";pointer-events:none;background-image:radial-gradient(color-mix(in srgb, var(--text) 5%, transparent) 1px, transparent 1px);opacity:.5;background-size:26px 26px;position:absolute;inset:0}.fl-operator,:root:has(.app.fl-operator){--bg:#0a0c0e;--bg-2:#0a0c0e;--surface:#11151a;--surface-2:#171c22;--surface-3:#1e242c;--line:#262d36;--line-2:#333c46;--line-3:#48535f;--text:#d6dee6;--text-2:#92a0ae;--text-3:#808b9b;--good:#4fb37e;--warn:#e8a23b;--bad:#e8625a;--good-text:var(--good);--warn-text:var(--warn);--bad-text:#e96a62;--bad-ink:#160806;--r-xs:0px;--r-sm:0px;--r-md:0px;--r-lg:0px;--r-xl:0px;--font-display:"JetBrains Mono", ui-monospace, monospace;--font-ui:"JetBrains Mono", ui-monospace, monospace;--font-mono:"JetBrains Mono", ui-monospace, monospace;--shadow-card:none}.fl-operator.light,:root:has(.app.fl-operator.light){--bg:#eceef1;--bg-2:#eceef1;--surface:#fbfdfc;--surface-2:#f4f6f8;--surface-3:#e9ecf0;--line:#dce0e5;--line-2:#c4cad1;--line-3:#97a0aa;--text:#141a21;--text-2:#47525e;--text-3:#616c79;--good:#1a7a4d;--warn:#8f5e10;--bad:#c2403f;--good-text:#187148;--warn-text:#88590f;--bad-text:#af3a39;--bad-ink:#fff}.fl-operator{--shadow-card:none}.fl-operator h1.h,.fl-operator h2,.fl-operator h3{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.12em;font-weight:600}.fl-operator .card{background:var(--surface);box-shadow:none;border:1px solid var(--line)}.fl-operator .btn{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;border-radius:0}.fl-operator .btn:not(.ghost):not(.soft):not(.danger){box-shadow:inset 0 1px 0 color-mix(in srgb, var(--accent-ink) 22%, transparent)}.fl-operator .badge{text-transform:uppercase;letter-spacing:.06em;border-radius:0}.fl-operator .atmos{background:0 0}.fl-operator .atmos:after{content:"";pointer-events:none;background-image:repeating-linear-gradient(0deg, color-mix(in srgb, var(--accent) 5%, transparent) 0 1px, transparent 1px 3px);opacity:1;mix-blend-mode:normal;position:absolute;inset:0}.fl-matrix,:root:has(.app.fl-matrix){--bg:#04070a;--bg-2:#04070a;--surface:#0b1116;--surface-2:#121a21;--surface-3:#18242c;--line:#16242b;--line-2:#22343c;--line-3:#33514c;--text:#d2ebd9;--text-2:#86a492;--text-3:#75917e;--good:#2dd68a;--warn:#d4a024;--bad:#f2495b;--good-text:var(--good);--warn-text:var(--warn);--bad-text:#f35666;--bad-ink:#19040a;--r-xs:2px;--r-sm:2px;--r-md:2px;--r-lg:2px;--r-xl:2px;--font-display:"Space Mono", ui-monospace, monospace;--font-ui:"Space Mono", ui-monospace, monospace;--font-mono:"Space Mono", ui-monospace, monospace;--shadow-card:none}.fl-matrix.light,:root:has(.app.fl-matrix.light){--bg:#e8f1eb;--bg-2:#e8f1eb;--surface:#fbfdfc;--surface-2:#e9f4ed;--surface-3:#dceae0;--line:#d0e2d6;--line-2:#b4cdbc;--line-3:#86a793;--text:#0a1410;--text-2:#41564b;--text-3:#586c60;--good:#117a4e;--warn:#9a6410;--bad:#c2403f;--good-text:#0f6f47;--warn-text:#86570e;--bad-text:#ab3837;--bad-ink:#fff}.fl-matrix .card{background:var(--surface);box-shadow:none}.fl-matrix h1.h,.fl-matrix h2,.fl-matrix h3{letter-spacing:.03em}.fl-matrix .btn{font-family:var(--font-mono);letter-spacing:.05em;border-radius:2px}.fl-matrix .badge{text-transform:uppercase;letter-spacing:.04em;border-radius:2px}.fl-matrix .btn:not(.ghost):not(.soft):not(.btn-grid):not(.danger){box-shadow:0 1px 2px #0006, inset 0 1px 0 color-mix(in srgb, var(--accent) 22%, transparent), 0 2px 10px -3px color-mix(in srgb, var(--accent) 34%, transparent)}.fl-matrix .atmos{background:0 0}.fl-matrix .atmos:after{content:"";pointer-events:none;background-image:repeating-linear-gradient(0deg, color-mix(in srgb, var(--text) 5%, transparent) 0 1px, transparent 1px 26px), repeating-linear-gradient(90deg, color-mix(in srgb, var(--text) 5%, transparent) 0 1px, transparent 1px 26px);position:absolute;inset:0}.fl-atlas,:root:has(.app.fl-atlas){--bg:#15130e;--bg-2:#100e0a;--surface:#1c1a12;--surface-2:#211e15;--surface-3:#2a2619;--line:#322d22;--line-2:#453e2e;--line-3:#5c5340;--text:#efeae0;--text-2:#b5ac99;--text-3:#958c7f;--good:#8fd694;--warn:#e8b53d;--bad:#ff6f69;--good-text:var(--good);--warn-text:var(--warn);--bad-text:var(--bad);--bad-ink:#1c0706;--r-xs:8px;--r-sm:12px;--r-md:16px;--r-lg:20px;--r-xl:24px;--font-display:"Space Grotesk", system-ui, sans-serif;--font-ui:"Hanken Grotesk", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--shadow-card:0 1px 0 #ffffff08 inset, 0 22px 50px -32px #000000d9}.fl-atlas.light,:root:has(.app.fl-atlas.light){--bg:#f4f0e6;--bg-2:#ebe6d8;--surface:#fcfaf4;--surface-2:#f6f2e7;--surface-3:#ede8d9;--line:#e2dac6;--line-2:#cfc5ac;--line-3:#a2977c;--text:#1f1d16;--text-2:#56503f;--text-3:#6d6756;--good:#1c8450;--warn:#9c6a10;--bad:#cc4a45;--good-text:#187044;--warn-text:#855a0e;--bad-text:#a93d39;--bad-ink:#fff}.fl-atlas h1.h,.fl-atlas h2,.fl-atlas h3{font-family:var(--font-display);letter-spacing:-.015em;font-weight:600}.fl-atlas .card-head h3,.fl-atlas .card-head h2{font-family:var(--font-display);font-weight:600}.fl-atlas .card{background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 4%, var(--surface)) 0%, var(--surface) 22%);border-radius:var(--r-lg)}.fl-atlas .btn{border-radius:999px}.fl-atlas .btn:not(.ghost):not(.soft):not(.danger){box-shadow:inset 0 1px 0 #ffffff24, 0 8px 20px -12px color-mix(in srgb, var(--accent) 55%, transparent);background-image:linear-gradient(#ffffff1a,#0000)}.fl-atlas .badge,.fl-atlas .tb-search,.fl-atlas .sel,.fl-atlas .inp{border-radius:999px}.fl-atlas .atmos{background:radial-gradient(900px 560px at 70% -10%, color-mix(in srgb, var(--accent) 8%, transparent), transparent 60%);opacity:1}.fl-atlas .atmos:after{content:"";pointer-events:none;opacity:.03;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.4'/%3E%3C/svg%3E");position:absolute;inset:0}.dir-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-top:4px;display:grid}.dir-tile{text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:var(--r-md);cursor:pointer;font:inherit;color:var(--text);flex-direction:column;gap:11px;padding:12px;transition:border-color .14s,transform .1s,box-shadow .14s;display:flex}.dir-tile:hover{border-color:var(--accent-line);transform:translateY(-2px)}.dir-tile.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset, 0 12px 28px -22px var(--accent)}.dir-thumb{border:1px solid #ffffff0f;border-radius:8px;flex-direction:column;justify-content:center;gap:6px;height:78px;padding:10px 10px 10px 34px;display:flex;position:relative;overflow:hidden}.dir-thumb-rail{opacity:.9;width:24px;position:absolute;top:0;bottom:0;left:0}.dir-thumb-bar{opacity:.92;border-radius:3px;height:6px}.dir-thumb-dot{border-radius:50%;width:9px;height:9px;position:absolute;top:10px;right:10px}.dir-cultivar .dir-thumb{background:#0b0e12;border-radius:12px}.dir-cultivar .dir-thumb-rail{background:#14181d;border-right:1px solid #2c333b}.dir-cultivar .dir-thumb-bar{background:#3ad4c4}.dir-cultivar .dir-thumb-bar:nth-child(2),.dir-cultivar .dir-thumb-bar:nth-child(3){background:#2c333b}.dir-cultivar .dir-thumb-dot{background:#3ad4c4;box-shadow:0 0 8px #2ba89b}.dir-atlas .dir-thumb{background:#15130e;border-radius:18px}.dir-atlas .dir-thumb-rail{background:#1c1a12;border-right:1px solid #322d22}.dir-atlas .dir-thumb-bar{background:#8fd694;border-radius:999px}.dir-atlas .dir-thumb-bar:nth-child(2),.dir-atlas .dir-thumb-bar:nth-child(3){background:#322d22}.dir-atlas .dir-thumb-dot{background:#c9e8a8;box-shadow:0 0 8px #5c7a50}.dir-operator .dir-thumb{background:#0a0c0e;border-radius:0}.dir-operator .dir-thumb-rail{background:#11151a;border-right:1px solid #262d36}.dir-operator .dir-thumb-bar{background:#e8a23b}.dir-operator .dir-thumb-bar:nth-child(2),.dir-operator .dir-thumb-bar:nth-child(3){background:#262d36}.dir-operator .dir-thumb-dot{background:#e8a23b;box-shadow:0 0 8px #e8a23b}.dir-matrix .dir-thumb{background:#04070a;border-radius:2px}.dir-matrix .dir-thumb-rail{background:#0b1116;border-right:1px solid #16242b}.dir-matrix .dir-thumb-bar{background:#19e37c}.dir-matrix .dir-thumb-bar:nth-child(2),.dir-matrix .dir-thumb-bar:nth-child(3){background:#18242c}.dir-matrix .dir-thumb-dot{background:#19e37c;box-shadow:0 0 8px #19e37c}.dir-meta{flex-direction:column;gap:4px;display:flex}.dir-name{font-family:var(--font-display);align-items:center;gap:8px;font-size:14.5px;font-weight:600;display:flex}.dir-check{font-family:var(--font-mono);color:var(--accent-text);margin-left:auto;font-size:10px}.dir-tag{color:var(--text-2);font-size:12px;line-height:1.45}.dir-layout{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:16px;display:flex}.dir-layout .tick{color:var(--text-2)}.dir-layout-note{font-size:12px}@media (width<=960px){.dir-grid{grid-template-columns:1fr}}.fl-operator .card{background:var(--surface);box-shadow:none;border-radius:0}.fl-operator .card-head{border-bottom:1px solid var(--line);margin-bottom:14px;padding-bottom:11px}.fl-operator .card-head h3,.fl-operator .card-head h2{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-2);padding-left:22px;font-size:10.5px;font-weight:500;position:relative}.fl-operator .card-head h3:before,.fl-operator .card-head h2:before{content:"";background:var(--accent);width:14px;height:2px;position:absolute;top:50%;left:0;transform:translateY(-50%)}.fl-operator .hero-facts .ttl{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;font-size:17px;font-weight:600}.fl-operator .voice-readout .vr-txt{font-family:var(--font-mono);color:var(--text-3);letter-spacing:.02em;font-size:11.5px}.fl-operator .chip{border:1px solid var(--line);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;background:0 0;border-radius:2px;padding:5px 10px;font-size:10.5px}.fl-operator .chip .ck{color:var(--text-3)}.fl-operator .chip .cv{color:var(--text)}.fl-operator .kpiband{border:1px solid var(--line);border-radius:0;padding:12px 14px}.fl-operator .kseg-l{letter-spacing:.14em;font-size:9px}.fl-operator .kseg-n{font-family:var(--font-mono);letter-spacing:-.01em;font-size:24px;font-weight:500}.fl-operator .gcell{border:1px solid var(--line);border-radius:0;padding:14px 16px}.fl-operator .gcell .gname{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-2);font-size:11px}.fl-operator .gcell .gcount{font-family:var(--font-mono);letter-spacing:-.01em;font-size:30px}.fl-operator .gcell .gdesc{font-family:var(--font-mono);letter-spacing:.04em;color:var(--text-3);font-size:10.5px}.fl-operator .feed-row{border-bottom:1px solid var(--line);font-family:var(--font-mono);padding:9px 0;font-size:12px}.fl-operator .seg{border:1px solid var(--line);background:var(--surface);border-radius:0}.fl-operator .seg button{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;border-radius:0;font-size:10.5px}.fl-operator .atmos:after{content:"";pointer-events:none;background-image:radial-gradient(#ffffff06 1px,#0000 1px);background-size:22px 22px;position:absolute;inset:0}.fl-operator.light .atmos:after{background-image:radial-gradient(#141c260a 1px,#0000 1px)}.b-greet{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:18px;display:flex}.b-greet h1.b-h{letter-spacing:-.025em;margin:4px 0 0;font-size:31px}.b-greet .badge{margin-top:8px}.b-hero-retry{align-self:flex-start}.b-hero-grid{grid-template-columns:1.25fr 1fr;align-items:stretch}.b-hero{align-items:center;gap:24px;min-height:220px;padding:24px;display:flex}.b-hero-ring{flex:none}.b-hero-side{flex-direction:column;gap:9px;min-width:0;display:flex}.b-hero-title{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:21px;font-weight:600}.b-chips{flex-wrap:wrap;gap:8px;margin-top:4px;display:flex}.b-chip{background:var(--surface-3);border:1px solid var(--line);color:var(--text-2);white-space:nowrap;border-radius:999px;padding:6px 13px;font-size:12.5px}.b-chip b{color:var(--text);font-weight:500}.b-hero-checks{flex-direction:column;gap:5px;margin:2px 0;padding:0;list-style:none;display:flex}.b-hcheck{color:var(--text-2);grid-template-columns:16px 1fr;align-items:center;gap:9px;font-size:12.5px;display:grid}.b-hcheck-mark{border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.b-hcheck.ok .b-hcheck-mark{color:var(--good-text);background:color-mix(in srgb, var(--good) 14%, transparent)}.b-hcheck.bad .b-hcheck-mark{color:var(--bad-text);background:color-mix(in srgb, var(--bad) 14%, transparent)}.b-hcheck.bad .b-hcheck-label{color:var(--text)}.b-tiles{grid-template-columns:1fr 1fr;gap:14px;display:grid}.b-tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-card);flex-direction:column;gap:10px;padding:18px;display:flex;position:relative}.b-tile-ic{border-radius:12px;justify-content:center;align-items:center;width:38px;height:38px;display:flex}.b-tile-ic .glyph{width:19px;height:19px}.b-tile-body{flex-direction:column;gap:2px;display:flex}.b-tile-val{font-family:var(--font-display);letter-spacing:-.02em;font-size:32px;font-weight:600;line-height:1}.b-tile-val.zero{color:var(--text-3)}.b-tile-label{color:var(--text-2);font-size:13px}.b-tile-sub{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--text-3);font-size:9.5px;position:absolute;top:18px;right:18px}.b-mix-card{flex-direction:column;display:flex}.b-mix{flex:1;grid-template-columns:auto 1fr;align-items:center;gap:26px;display:grid}.b-legend{flex-direction:column;gap:11px;display:flex}.b-leg-row{grid-template-columns:12px 90px 1fr 32px;align-items:center;gap:10px;display:grid}.b-leg-dot{border-radius:4px;width:11px;height:11px}.b-leg-name{font-size:13px}.b-leg-bar{background:var(--surface-3);border-radius:999px;height:8px;overflow:hidden}.b-leg-bar i{border-radius:999px;height:100%;display:block}.b-leg-val{font-family:var(--font-mono);text-align:right;font-variant-numeric:tabular-nums;font-size:13px}.b-stat-lead{align-items:baseline;gap:10px;margin-bottom:10px;display:flex}.b-stat-big{font-family:var(--font-display);letter-spacing:-.02em;font-size:34px;font-weight:600}.b-stat-cap{color:var(--text-2);font-size:12.5px}.b-timeline{flex-direction:column;display:flex}.b-tl-row{border-bottom:1px solid var(--line);grid-template-columns:16px 1fr auto;align-items:center;gap:14px;padding:12px 0;display:grid}.b-tl-row:last-child{border-bottom:0}.b-tl-node{background:var(--text-3);width:10px;height:10px;box-shadow:0 0 0 4px var(--surface);border-radius:50%}.b-tl-node.ok{background:var(--good)}.b-tl-node.acc{background:var(--accent)}.b-tl-node.warn{background:var(--warn)}.b-tl-body{word-break:break-word;min-width:0;font-size:13.5px}.b-tl-body b{text-transform:capitalize}.b-tl-when{font-family:var(--font-mono);color:var(--text-3);white-space:nowrap;font-size:11px}.donut-c-num{font-family:var(--font-display);fill:var(--text);font-size:28px;font-weight:600}.donut-c-cap{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;fill:var(--text-3);font-size:10px}@media (width<=1180px){.b-hero-grid{grid-template-columns:1fr}.b-tiles{grid-template-columns:repeat(4,1fr)}}@media (width<=720px){.b-tiles{grid-template-columns:1fr 1fr}.b-hero{flex-direction:column;align-items:flex-start}.b-mix{grid-template-columns:1fr}}.c-root{font-family:var(--font-mono)}.c-titlebar{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:16px;display:flex}.c-titlebar .badge{margin-top:8px}.c-h1{font-family:var(--font-mono);letter-spacing:.02em;color:var(--text);margin:0;font-size:17px;font-weight:600}.c-sub{font-family:var(--font-mono);color:var(--text-3);margin-top:5px;font-size:11.5px}.c-root .btn{font-family:var(--font-mono);letter-spacing:.05em;border-radius:var(--r-sm);font-size:11px}.c-strip{border:1px solid var(--line);background:var(--surface);border-radius:var(--r-sm);grid-template-columns:repeat(7,1fr);margin-bottom:14px;display:grid}.c-strip-cell{border-right:1px solid var(--line);min-width:0;padding:11px 14px}.c-strip-cell:last-child{border-right:0}.c-strip-k{letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);font-size:9px}.c-strip-v{color:var(--text);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;margin-top:6px;font-size:13.5px;overflow:hidden}.c-pill{letter-spacing:.08em;border-radius:var(--r-sm);text-transform:uppercase;border:1px solid;padding:2px 7px;font-size:9.5px;display:inline-block}.c-pill.ok{color:var(--good-text)}.c-pill.warn{color:var(--warn-text)}.c-pill.bad{color:var(--bad-text)}.c-kpi-row{border:1px solid var(--line);background:var(--surface);border-radius:var(--r-sm);grid-template-columns:repeat(7,1fr);margin-bottom:14px;display:grid}.c-kpi{border-right:1px solid var(--line);padding:14px 16px;position:relative}.c-kpi:last-child{border-right:0}.c-kpi-label{letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);font-size:9px}.c-kpi-val{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--text);margin-top:6px;font-size:29px;font-weight:500}.c-kpi-val.zero{color:var(--text-3)}.c-grid{grid-template-columns:repeat(3,1fr);gap:14px;display:grid}.c-mod{border:1px solid var(--line);background:var(--surface);border-radius:var(--r-sm);flex-direction:column;min-width:0;display:flex}.c-mod-head{border-bottom:1px solid var(--line);align-items:center;gap:9px;padding:11px 14px;display:flex}.c-tab{background:var(--accent);flex:none;width:16px;height:2px}.c-mod-head h3{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-2);margin:0;font-size:10.5px;font-weight:500}.c-mod-right{letter-spacing:.1em;color:var(--text-3);margin-left:auto;font-size:10.5px}.c-mod-body{flex:1;padding:14px}.c-tbl{border-collapse:collapse;width:100%;font-family:var(--font-mono)}.c-tbl th{text-align:left;letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);border-bottom:1px solid var(--line);padding:0 10px 9px;font-size:9px;font-weight:500}.c-tbl td{border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;padding:8px 10px;font-size:12.5px}.c-tbl tr:last-child td{border-bottom:0}.c-tbl .num{text-align:right}.c-name{color:var(--text);font-weight:500}.c-dim{color:var(--text-3)}.c-bar{background:var(--surface-3);border-radius:var(--r-sm);height:7px;overflow:hidden}.c-bar i{height:100%;display:block}.c-check-list{flex-direction:column;margin-top:12px;display:flex}.c-check-row{border-top:1px solid var(--line);grid-template-columns:12px 1fr auto;align-items:center;gap:10px;padding:7px 0;font-size:12px;display:grid}.c-check-row:first-child{border-top:0}.c-dotmark{background:var(--text-3);border-radius:2px;width:8px;height:8px}.c-dotmark.ok{background:var(--good)}.c-dotmark.bad{background:var(--bad)}.c-dotmark.acc{background:var(--accent)}.c-dotmark.warn{background:var(--warn)}.c-check-name{color:var(--text)}.c-check-detail{color:var(--text-3);text-align:right;font-size:11px}.c-axis{color:var(--text-3);font-size:9px;font-family:var(--font-mono);justify-content:space-between;margin-top:6px;display:flex}.c-axis span{text-align:center;flex:1}.c-cols{align-items:flex-end;gap:4px;width:100%;display:flex}.c-col{background:var(--surface-3);flex:1;min-width:4px;transition:background .12s}.c-col.hi{background:var(--accent)}.c-band{gap:3px;margin-bottom:12px;display:flex}.c-band-cell{background:var(--surface-3);flex:1;height:14px}.c-band-cell.ok{background:var(--good)}.c-band-cell.bad{background:var(--bad)}@media (width<=1180px){.c-strip{grid-template-columns:repeat(4,1fr)}.c-kpi-row{grid-template-columns:repeat(3,1fr)}.c-grid{grid-template-columns:repeat(2,1fr)}.c-grid .c-mod[style*=span\ 3],.c-grid .c-mod[style*=span\ 2]{grid-column:span 2!important}}@media (width<=720px){.c-strip,.c-kpi-row{grid-template-columns:repeat(2,1fr)}.c-grid{grid-template-columns:1fr}.c-grid .c-mod[style*=span]{grid-column:span 1!important}}.lib-doc{font-size:14px}.lib-doc-empty{border:1px dashed var(--line-2);border-radius:var(--r-sm);color:var(--text-2);align-items:flex-start;gap:10px;padding:16px;font-size:13px;display:flex}.lib-doc-empty .glyph{width:20px;height:20px;color:var(--text-3);flex:none}.boot-splash{z-index:var(--z-splash);background:var(--bg);flex-direction:column;justify-content:center;align-items:center;gap:20px;display:flex;position:fixed;inset:0}.boot-splash.fading{animation:.55s forwards splashOut}.boot-dial{width:172px;height:172px;animation:1.8s ease-in-out infinite glowPulse;position:relative}.boot-ring{width:100%;height:100%;transform:rotate(-90deg)}.boot-progress{stroke-dasharray:452;stroke-dashoffset:452px;--end:0;animation:.4s cubic-bezier(.2,.7,.2,1) forwards ringFill}.boot-sprout{width:58px;height:58px;position:absolute;top:50%;left:50%;overflow:visible;transform:translate(-50%,-50%)}.boot-sprout .bs-stem{transform-origin:12px 21.5px;animation:.3s cubic-bezier(.2,.7,.2,1) .1s forwards stemGrow;transform:scaleY(0)}.boot-sprout .bs-leaf{transform-origin:12px 12px;transform:scale(0)}.boot-sprout .bs-leaf-main{animation:.2s cubic-bezier(.22,1,.36,1) .25s forwards leafIn}.boot-sprout .bs-leaf-back{animation:.2s cubic-bezier(.22,1,.36,1) .35s forwards leafIn}.boot-status{font:500 12px var(--font-mono);color:var(--text-2);align-items:center;display:flex}.boot-caret{background:var(--accent);width:6px;height:13px;margin-left:7px;animation:1s step-end infinite blink}@keyframes splashOut{to{opacity:0;visibility:hidden}}@keyframes stemGrow{0%{transform:scaleY(0)}to{transform:scaleY(1)}}@keyframes leafIn{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes ringFill{to{stroke-dashoffset:var(--end)}}@keyframes glowPulse{0%,to{filter:drop-shadow(0 0 6px var(--accent-soft))}50%{filter:drop-shadow(0 0 16px var(--accent-line))}}.deploy-pop{border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface);flex-direction:column;gap:10px;margin-bottom:16px;padding:12px;display:flex}.deploy-pop .dp-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.deploy-pop .dp-path{background:var(--surface-2);min-width:200px;color:var(--text);border:1px solid var(--line-2);border-radius:var(--r-xs);font-family:var(--font-mono,monospace);flex:260px;padding:7px 10px;font-size:13px}.deploy-pop .dp-path:focus{border-color:var(--accent-line)}.deploy-pop .dp-note{color:var(--text-2);margin:0}.deploy-pop .dp-note code{color:var(--text)}.deploy-pop .dp-field{align-items:center;gap:6px;display:flex}.deploy-pop .dp-field>span{color:var(--text-2);white-space:nowrap;font-size:12px}.rules-list{overflow:hidden}.rule-row{border-bottom:1px solid var(--line)}.rule-row:last-child{border-bottom:0}.rule-head{text-align:left;cursor:pointer;width:100%;font:inherit;color:var(--text);background:0 0;border:0;align-items:center;gap:12px;padding:13px 18px;transition:background .1s;display:flex}.rule-head:hover{background:var(--surface-2)}.rule-row.on .rule-head{background:var(--accent-soft)}.rule-no{font-family:var(--font-mono);color:var(--accent-text);font-variant-numeric:tabular-nums;min-width:34px;font-size:13px}.rule-title{font-family:var(--font-display);letter-spacing:-.01em;flex:1;font-size:15px;font-weight:600}.rule-chip{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);border:1px solid var(--line-2);border-radius:999px;padding:3px 9px;font-size:10.5px}.rule-chip.user{color:var(--accent-text);border-color:var(--accent-line)}.rule-chip.trial{color:var(--warn-text);border-color:color-mix(in srgb, var(--warn) 45%, transparent)}.rule-chip.trial.overdue{color:var(--bg);background:var(--warn-text);border-color:var(--warn-text)}.rule-expand{background:color-mix(in srgb, var(--accent) 4%, transparent);padding:2px 18px 18px 64px}.rule-expand p{color:var(--text-2);white-space:pre-wrap;font-size:13.5px;line-height:1.66}.rule-src{font-family:var(--font-mono);color:var(--text-3);margin-top:8px;font-size:11px}.rule-notice{color:var(--warn-text);margin:0 0 12px}.rules-meter{align-items:center;gap:12px;margin-bottom:16px;display:flex}.rules-meter-bar{background:var(--surface-3);border:1px solid var(--line);border-radius:999px;flex:0 0 180px;height:6px;overflow:hidden}.rules-meter-fill{background:var(--accent);height:100%;transition:width .2s}.rules-meter.warn .rules-meter-fill{background:var(--warn)}.rules-meter.over .rules-meter-fill{background:oklch(62% .19 25)}.rules-meter-label{font-family:var(--font-mono);color:var(--text-3);font-size:11.5px}.rules-meter.warn .rules-meter-label{color:var(--warn-text)}.rules-meter.over .rules-meter-label{color:oklch(62% .19 25)}.rule-form{flex-direction:column;gap:10px;display:flex}.rule-form .lib-filter{width:100%}.rule-body-input{resize:vertical;background:var(--surface);width:100%;color:var(--text);border:1px solid var(--line-2);border-radius:var(--r-sm);font-family:var(--font-mono);padding:10px 12px;font-size:12.5px;line-height:1.6}.rule-body-input:focus{border-color:var(--accent-line)}.rule-trial-label{font-family:var(--font-mono);color:var(--text-3);text-transform:uppercase;letter-spacing:.06em;align-items:center;gap:8px;font-size:11px;display:inline-flex}.rule-date{width:150px}.voice-ref{padding:0}.voice-ref>summary{cursor:pointer;border-radius:var(--r-md);align-items:baseline;gap:12px;padding:12px 18px;list-style:none;display:flex}.voice-ref>summary::-webkit-details-marker{display:none}.voice-ref>summary:before{content:"";border-right:1.5px solid var(--text-3);border-bottom:1.5px solid var(--text-3);flex:none;width:5px;height:5px;margin-right:2px;transition:transform .15s;transform:rotate(-45deg)}.voice-ref[open]>summary:before{transform:rotate(45deg)}.voice-ref>summary:hover{background:var(--surface-2)}.voice-ref .vr-title{font-family:var(--font-display);font-size:14px;font-weight:600}.vr-list{padding:2px 12px 12px}.voice-row{border-radius:var(--r-xs);border:1px solid #0000;align-items:baseline;gap:12px;padding:5px 8px;display:flex}.voice-row.current{border-color:var(--accent-line);background:var(--accent-soft)}.vr-name{width:108px;font-family:var(--font-display);text-transform:capitalize;flex:none;font-size:12.5px;font-weight:600}.vr-desc{min-width:0;color:var(--text-2);flex:1;font-size:11.5px;font-style:italic}.jr-head{margin-bottom:14px}.jr-head .badge{margin-top:8px}.jr-row2{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:14px;display:grid}.jr-card{padding-top:14px;padding-bottom:14px}.jr-card .card-head{margin-bottom:10px}.jr-ring{width:100%;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:9px;padding:5px 0;display:flex}.jr-ring:hover .jr-ring-label{color:var(--text)}.jr-ring-label{width:88px;color:var(--text-2);flex:none;font-size:11.5px}.jr-ring-track{background:var(--surface-3);border-radius:999px;flex:1;height:8px;overflow:hidden}.jr-ring-fill{background:linear-gradient(90deg, var(--accent-2), var(--accent));border-radius:999px;height:100%;display:block}.jr-ring-num{text-align:right;width:34px;font-family:var(--font-mono);color:var(--accent-text);flex:none;font-size:10.5px}.jr-fresh{border:0;border-bottom:1px solid var(--line-2);width:100%;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;align-items:baseline;gap:10px;padding:6px 0;display:flex}.jr-fresh:hover .jr-fresh-name{color:var(--accent-text)}.jr-fresh-kind{width:64px;font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--accent-text);flex:none;font-size:8.5px}.jr-fresh-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11.5px;overflow:hidden}.jr-fresh-when{font-family:var(--font-mono);color:var(--text-3);flex:none;font-size:10px}.jr-skipped{margin:8px 0 0;font-size:11px}.jr-care{border-top:1px solid var(--line-2);color:var(--text-3);margin:8px 0 0;padding-top:9px;font-size:11.5px}.jr-go{font-family:var(--font-mono);color:var(--accent-text);cursor:pointer;background:0 0;border:0;padding:0;font-size:10.5px}.jr-go:hover{text-decoration:underline}.jr-go.right{margin-left:auto}.jr-map{border-color:var(--accent-line)}.jr-others{margin:14px 0 0;font-size:11.5px}.cmap{width:100%;height:auto;min-height:300px;display:block}.cm-edge{fill:none;stroke:var(--line-3);stroke-width:1.5px}.cm-edge-gov{fill:none;stroke:var(--line-2);stroke-width:1.2px;stroke-dasharray:4 5}.cm-node{cursor:pointer}.cmap .cm-node,.cmap .cm-mini>g{transform-box:fill-box;transform-origin:50%}.cm-node:hover circle{stroke-width:2.6px}.cm-node:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px}.cm-hub-disc{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2px}.cm-hub-name{fill:var(--accent-text);font-family:var(--font-display);font-size:17px;font-weight:600}.cm-hub-num{fill:var(--text);font-family:var(--font-mono);font-size:10px}.cm-sat-disc{fill:var(--surface-2);stroke:var(--accent);stroke-width:1.5px}.cm-sat-name{fill:var(--text);font-family:var(--font-display);font-size:12.5px;font-weight:600}.cm-sat-num{fill:var(--accent-text);font-family:var(--font-mono);font-size:10px}.cm-sat-big{fill:var(--accent-text);font-family:var(--font-mono);font-size:13px;font-weight:500}.cm-mini{font-family:var(--font-mono);font-size:7.5px}.cm-pack-disc{fill:var(--accent-soft);stroke-width:1.2px}.cm-pack-id{fill:var(--text)}.cm-gov-disc{fill:var(--surface);stroke:var(--line-3);stroke-width:1.3px}.cm-gov-name{fill:var(--text);font-family:var(--font-display);font-size:10.5px;font-weight:600}.cm-gov-num{fill:var(--accent-text);font-family:var(--font-mono);font-size:9px}.cm-note{fill:var(--text-3);font-family:var(--font-mono);font-size:8.5px}.cm-govern-label{fill:var(--text-3);font-family:var(--font-mono);letter-spacing:1.5px;font-size:8.5px}@media (width<=1180px){.jr-row2{grid-template-columns:1fr}}@media (width<=720px){.vr-name{width:100%}.voice-row{flex-wrap:wrap}}.col:has(.pad>.jr-head){height:100vh}.page:has(>.pad>.jr-head){flex-direction:column;display:flex}.pad:has(>.jr-head){flex-direction:column;flex:1;width:100%;max-width:none;min-height:0;margin:0;display:flex}.pad:has(>.jr-head) .jr-map{flex-direction:column;flex:1;min-height:324px;display:flex}.pad:has(>.jr-head) .jr-map .card-head{flex:none}.pad:has(>.jr-head) .cmap{flex:1;height:auto;min-height:240px}.pad:has(>.jr-head) .jr-others{flex:none}:root{--ease-out:cubic-bezier(.22,1,.36,1)}.glide{pointer-events:none;opacity:0;width:0;height:0;position:absolute;top:0;left:0}.seg:has(>.glide){position:relative}.seg>.glide{background:var(--accent);border-radius:5px}.fl-operator .seg>.glide{border-radius:0}.seg:has(>.glide) button{position:relative}.seg:has(>.glide) button.on{background:0 0}@keyframes viewIn{0%{opacity:.4;transform:translateY(5px)}}.view-in{animation:viewIn .22s var(--ease-out)}.console-head{position:relative}.console-progress{height:2px;position:absolute;top:-1px;left:0;right:0;overflow:hidden}.console-progress:after{content:"";background:linear-gradient(90deg, transparent, var(--warn), transparent);width:30%;animation:1.3s cubic-bezier(.45,0,.55,1) infinite consoleScan;position:absolute;inset:0}@keyframes consoleScan{0%{transform:translate(-100%)}to{transform:translate(340%)}}.console-head.flash-ok{animation:.9s ease-out flashOk}.console-head.flash-bad{animation:.9s ease-out flashBad}@keyframes flashOk{0%{background:color-mix(in srgb, var(--good) 28%, transparent)}}@keyframes flashBad{0%{background:color-mix(in srgb, var(--bad) 28%, transparent)}}@keyframes dotPop{0%{transform:scale(.2)}60%{transform:scale(1.35)}}.check.rise .feed-dot{animation:dotPop .4s var(--ease-out) both;animation-delay:calc(var(--i,0) * 50ms + .14s)}:root{interpolate-size:allow-keywords}.law-expand,.rule-expand,.check-body,.mf-raw-pre{transition:height .28s var(--ease-out), opacity .2s ease-out, padding-top .28s var(--ease-out), margin-top .28s var(--ease-out);overflow:clip}@starting-style{.law-expand,.rule-expand,.mf-raw-pre{opacity:0;height:0}.check-body{opacity:0;height:0;margin-top:0;padding-top:0}}.spot-hit{background:color-mix(in srgb, var(--accent) 26%, transparent);color:inherit;border-radius:2px;padding:0 1px;animation:.5s ease-out hitIn}@keyframes hitIn{0%{background:color-mix(in srgb, var(--accent) 55%, transparent)}}::view-transition-old(root){animation-duration:.32s;animation-timing-function:var(--ease-out)}::view-transition-new(root){animation-duration:.32s;animation-timing-function:var(--ease-out)}.app{--accent-text:var(--accent);--chart-skill:#5aa9d6;--chart-agent:#a08bd8;--chart-context:#4fc4a4;--accent-soft:color-mix(in srgb, var(--accent) 13%, transparent);--accent-line:color-mix(in srgb, var(--accent) 34%, transparent);--accent-dim:color-mix(in srgb, var(--accent-2) 62%, transparent);font-family:var(--font-ui);grid-template-columns:var(--rail-w) minmax(0, 1fr)}.t-good{color:var(--good-text)}.t-warn{color:var(--warn-text)}.sidebar{background:var(--bg-2);border-right:1px solid var(--line);flex-direction:column;align-self:start;gap:2px;height:100vh;padding:20px 12px 14px;display:flex;position:sticky;top:0;overflow-y:auto}.sb-brand{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:4px 8px 20px;display:flex}.sb-mark{border-radius:var(--r-sm);background:var(--surface);border:1px solid var(--line);flex:none;place-items:center;width:30px;height:30px;display:grid}.sb-mark .sprout{filter:none;width:20px;height:20px}.sb-brand:hover .sprout{transform:rotate(-7deg)}.sb-brand-text{flex-direction:column;min-width:0;line-height:1.25;display:flex}.sb-name{font-size:15px;font-weight:700}.sb-ver{font-family:var(--font-mono);color:var(--text-3);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}a.sb-item{border-radius:var(--r-sm);color:var(--text-2);align-items:center;gap:10px;padding:9px 10px;font-weight:500;transition:background .14s,color .14s;display:flex}a.sb-item:hover{background:var(--surface);color:var(--text)}.sb-item .glyph{width:18px;height:18px}.sb-label{flex:1;min-width:0}.sb-count{font-family:var(--font-mono);color:var(--text-3);font-variant-numeric:tabular-nums;font-size:12px}a.sb-item.on{background:var(--accent-soft);color:var(--accent-text);font-weight:600}a.sb-item.on .sb-count{color:var(--accent-text)}.sb-spacer{flex:1;min-height:16px}.sb-vitals{border-top:1px solid var(--line);font-family:var(--font-mono);color:var(--text-3);flex-direction:column;gap:7px;margin-top:8px;padding:14px 10px 4px;font-size:12px;display:flex}.sb-vitals>div,.sb-voice{justify-content:space-between;gap:8px;display:flex}.sb-vitals b{color:var(--text);font-weight:500}.sb-vitals b.good{color:var(--good-text)}.sb-vitals b.warn{color:var(--warn-text)}.sb-vitals b.bad{color:var(--bad-text)}.sb-voice{width:100%;font:inherit;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;padding:0}.sb-voice b{align-items:center;gap:3px;display:inline-flex}.sb-voice .glyph{width:12px;height:12px}.sb-voice:hover b{color:var(--accent-text)}.topbar{background:var(--bg-2);-webkit-backdrop-filter:none;backdrop-filter:none;gap:10px;padding:0 32px}.crumbs{min-width:0;color:var(--text-3);white-space:nowrap;align-items:center;gap:8px;display:flex;overflow:hidden}.crumb-root{text-overflow:ellipsis;font-size:13px;overflow:hidden}.crumb-here{color:var(--text);font-weight:600}.topbar .iconbtn{border-color:var(--line);background:var(--surface);width:38px;height:38px}.topbar .iconbtn:hover{border-color:var(--line-2)}.tb-search input{width:320px;height:38px;padding-left:34px}.tb-harness{min-width:0;max-width:200px;height:38px;padding:0 10px}.tb-pop-anchor{position:relative}.appearance-pop{z-index:var(--z-pop);background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-md);width:max-content;max-width:min(92vw,540px);box-shadow:var(--shadow-pop);flex-direction:column;gap:14px;padding:16px;display:flex;position:absolute;top:calc(100% + 8px);right:0}.ap-group{flex-direction:column;gap:6px;display:flex}.ap-label{color:var(--text-2);font-size:12px;font-weight:600}.accent-picker{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.accent-src{border:1px solid var(--line-2);color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:5px 12px;font-size:12px;font-weight:600}.accent-src:hover{color:var(--text)}.accent-src.on{color:var(--text);border-color:var(--accent-line);background:var(--accent-soft)}.accent-swatches{gap:8px;display:flex}.accent-swatch{cursor:pointer;background:var(--sw);border:2px solid var(--bg-2);width:22px;height:22px;box-shadow:0 0 0 1px var(--line-2);border-radius:50%;padding:0;position:relative}.accent-swatch:hover{box-shadow:0 0 0 1px var(--text-3)}.accent-swatch.on{box-shadow:0 0 0 2px var(--text)}.accent-custom{background:conic-gradient(#ff5c57,#e8b53d,#4ed888,#3ad4c4,#5b8cff,#c77dff,#ff5c57)}.accent-custom.picked{background:var(--sw)}.accent-custom input{opacity:0;cursor:pointer;border:0;width:100%;height:100%;margin:0;padding:0;position:absolute;inset:0}.accent-custom:focus-within{outline:2px solid var(--accent-text);outline-offset:2px}.appearance-pop .seg{flex-wrap:wrap}.page{padding:28px 32px 120px}.pad{max-width:1320px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px;display:flex}.page-head h1.h,.lib-title h1.h{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 4px;font-size:28px;font-weight:700}.page-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.btn.danger{background:var(--bad);color:var(--bad-ink)}.btn.danger-line{color:var(--bad-text);border-color:color-mix(in srgb, var(--bad) 45%, transparent)}.btn.danger-line:hover{background:color-mix(in srgb, var(--bad) 10%, transparent);border-color:var(--bad)}.page-crumbs ol{gap:var(--sp-2);margin:0 0 var(--sp-2);font-size:var(--fs-xs);color:var(--text-3);flex-wrap:wrap;padding:0;list-style:none;display:flex}.page-crumbs li+li:before{content:"/";margin-right:var(--sp-2)}.page-crumbs a{color:var(--text-2)}.page-crumbs [aria-current]{color:var(--text)}.empty-actions{justify-content:center;align-items:center;gap:var(--sp-3);margin-top:var(--sp-4);display:flex}.empty-actions a{color:var(--accent-text);font-size:var(--fs-sm)}.error-state{align-items:center;gap:var(--sp-3);flex-wrap:wrap;display:flex}.error-state .badge{margin:0}.tbl-caption{caption-side:top;text-align:left;padding:0 14px var(--sp-3);font-size:var(--fs-sm);color:var(--text-2)}.tbl .tbl-act{text-align:right;white-space:nowrap}.stat{gap:var(--sp-1);flex-direction:column;display:flex}.stat-label{font-size:var(--fs-xs);color:var(--text-2)}.stat-value{font-size:var(--fs-2xl);color:var(--text);font-weight:600}.stat-delta{font-size:var(--fs-xs);color:var(--text-2)}.tone-good{--tone:var(--good)}.tone-warn{--tone:var(--warn)}.tone-bad{--tone:var(--bad)}.tone-accent{--tone:var(--accent)}.tone-muted{--tone:var(--text-3)}.stackbar.sweep{transform-origin:0;background:var(--surface-3);border-radius:3px}.stackbar.sweep>span{background:var(--tone,var(--text-3))}.stackbar-legend{gap:var(--sp-2) var(--sp-4);margin:var(--sp-2) 0 0;font-size:var(--fs-xs);color:var(--text-2);flex-wrap:wrap;padding:0;list-style:none;display:flex}.stackbar-legend li{align-items:center;gap:var(--sp-1);display:inline-flex}.stackbar-legend i{background:var(--tone,var(--text-3));border-radius:2px;width:8px;height:8px}.ring-track{stroke:var(--surface-3)}.ring-arc{stroke:var(--tone,var(--text-3))}.popover{z-index:var(--z-pop);background:var(--surface-2);border:1px solid var(--line-2);border-radius:var(--r-md);box-shadow:var(--shadow-pop);padding:var(--sp-2);position:absolute}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);flex-direction:column;gap:12px;min-width:0;padding:18px 20px;display:flex}.panel.flush{gap:0;padding:0;overflow:hidden}.panel-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.panel-head h2{font-family:var(--font-ui);letter-spacing:0;margin:0;font-size:15px;font-weight:700}.panel-head a.mono{color:var(--text-3)}.panel-head a.mono:hover{color:var(--accent-text)}.panel-note{color:var(--text-3);margin:0;font-size:12px}.tag{background:var(--surface-3);color:var(--text-2);white-space:nowrap;border-radius:999px;place-self:center start;align-items:center;padding:2px 9px;font-size:12px;font-weight:600;display:inline-flex}.tag.ok{background:color-mix(in srgb, var(--good) 13%, transparent);color:var(--good-text)}.tag.warn{background:color-mix(in srgb, var(--warn) 15%, transparent);color:var(--warn-text)}.tag.bad{background:color-mix(in srgb, var(--bad) 13%, transparent);color:var(--bad-text)}.tag.acc{background:var(--accent-soft);color:var(--accent-text)}.tag.human{color:var(--text);box-shadow:inset 0 0 0 1px var(--line-3)}.tag.note{white-space:normal}.tabs{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);gap:4px;max-width:100%;margin-bottom:20px;padding:3px;display:inline-flex;overflow-x:auto}.tabs a{border-radius:max(0px, calc(var(--r-sm) - 2px));color:var(--text-2);white-space:nowrap;padding:6px 14px;font-weight:600}.tabs a:hover{color:var(--text)}.tabs a.on{background:var(--bg-2);color:var(--text);box-shadow:0 0 0 1px var(--line)}.tab-badge{font-family:var(--font-mono);color:var(--text-3);margin-left:6px;font-weight:400}.stackbar{gap:3px;height:12px;display:flex}.stackbar>span{border-radius:3px;min-width:3px}.stackbar.thin{gap:2px;height:8px}.sb-ethos{background:var(--text)}.sb-invariants{background:var(--accent)}.sb-doctrines{background:var(--accent-dim)}.sb-yours{border:1px dashed var(--line-3)}.sb-rest{background:var(--line-2)}.legend{flex-direction:column;gap:8px;margin:0;padding:0;font-size:13px;list-style:none;display:flex}.legend li{align-items:center;gap:8px;display:flex}.swatch{border-radius:3px;flex:none;width:10px;height:10px}.hbars{flex-direction:column;gap:7px;margin:0;padding:0;font-size:12px;list-style:none;display:flex}.hbars li{align-items:center;gap:10px;display:flex}.hb-label{width:84px;color:var(--text-2);flex:none}.hb-track{background:var(--surface-2);border-radius:2px;flex:1;gap:2px;height:9px;display:flex}.hb-track>span{border-radius:2px}.hb-ok{background:var(--accent)}.hb-n{text-align:right;min-width:22px}.hbar{background:var(--surface-3);border-radius:3px;flex:1;min-width:40px;height:8px;display:block;overflow:hidden}.hbar>span,.hbar>i{background:var(--accent);height:100%;display:block}.hbar.ok>span,.hbar.ok>i{background:var(--good)}.hbar.warn>span,.hbar.warn>i{background:var(--warn)}.hbar.bad>span,.hbar.bad>i{background:var(--bad)}.chart-axis{justify-content:space-between;gap:8px;font-size:11px;display:flex}.ov-stack{flex-direction:column;gap:20px;display:flex}.ov-charts{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;display:grid}.health{border-radius:var(--r-md);--tone:var(--good);border:1px solid color-mix(in srgb, var(--tone) 30%, transparent);background:color-mix(in srgb, var(--tone) 8%, transparent);align-items:center;gap:16px;padding:14px 18px;display:flex}.health.warn{--tone:var(--warn)}.health.bad{--tone:var(--bad)}.health-dot{background:var(--tone);width:10px;height:10px;box-shadow:0 0 0 4px color-mix(in srgb, var(--tone) 14%, transparent);border-radius:99px;flex:none}.health p{flex:1;min-width:0;margin:0}.needs{grid-template-columns:max-content minmax(0,1fr) max-content max-content;column-gap:16px;margin:0 -20px -18px;padding:0;list-style:none;display:grid}.needs li{grid-column:1/-1;grid-template-columns:subgrid;border-top:1px solid var(--line);align-items:center;padding:11px 20px;display:grid}.needs .tag{justify-self:start}.needs-where{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.needs-verb{color:var(--accent-text);white-space:nowrap;justify-self:end;font-weight:600}.needs-verb:hover{text-decoration:underline}.needs-empty{color:var(--text-2);margin:0}.ver-chip{align-self:center;font-size:12px}.ver-new{color:var(--text);background:var(--surface-3);border:1px solid var(--line-2);border-radius:99px;margin-left:6px;padding:2px 9px}.verdict-facts{flex-wrap:wrap;align-items:baseline;gap:2px 16px;display:flex}.ldg-scroll{margin:0 -20px -18px;overflow-x:auto}.ldg-fleet{border-collapse:collapse;width:100%;min-width:760px;font-size:13px}.ldg-fleet th{text-align:left;font-family:var(--font-mono);letter-spacing:.13em;text-transform:uppercase;color:var(--text-3);padding:10px 10px 8px 0;font-size:10px;font-weight:500}.ldg-fleet th:first-child,.ldg-fleet td:first-child{padding-left:20px}.ldg-fleet td{border-top:1px solid var(--line);vertical-align:middle;padding:11px 10px 11px 0}.ldg-fleet tr.ldg-off td{color:var(--text-3)}.ldg-host{font-weight:600}.ldg-path{margin-top:2px;font-size:11.5px}.ldg-act{text-align:right;padding-right:20px!important}.ldg-cost{align-items:center;gap:10px;display:flex}.ldg-cost>span{line-height:1.3;display:grid}.ldg-sub{font-size:11px}.ldg-ring{flex:none;width:34px;height:34px;transform:rotate(-90deg)}.ldg-ring .bg{fill:none;stroke:var(--surface-3);stroke-width:4px}.ldg-ring .fg{fill:none;stroke:var(--accent);stroke-width:4px;stroke-linecap:round}.ldg-ring .fg.over{stroke:var(--bad)}.pill{font-family:var(--font-mono);border:1px solid var(--line-2);white-space:nowrap;border-radius:99px;align-items:center;gap:6px;padding:2px 9px 2px 7px;font-size:11.5px;display:inline-flex}.pill:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px}.pill.good{color:var(--good-text);border-color:color-mix(in srgb, var(--good) 40%, var(--line))}.pill.warn{color:var(--warn-text);border-color:color-mix(in srgb, var(--warn) 45%, var(--line))}.pill.off{color:var(--text-3)}.pill.off:before{background:0 0;border:1px solid}.needs li.sugg{color:var(--text-2)}.needs li.sugg b{font-weight:500}.needs-verb.linkish{font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600}.chart-foot{margin:0;font-size:11.5px}.cost-row{gap:5px;display:grid}.cost-lab{justify-content:space-between;font-size:12.5px;display:flex}.cost-stack{background:var(--surface-3);border-radius:3px;height:14px;position:relative}.cost-segs{border-radius:3px;height:100%;display:flex;overflow:hidden}.cost-segs>span{height:100%}.cost-ceil{border-left:1.5px dashed var(--text-2);position:absolute;top:-4px;bottom:-4px}.cs-carrier{background:var(--accent)}.cs-skills{background:var(--chart-skill)}.cs-agents{background:var(--chart-agent)}.cs-context{background:var(--chart-context)}.cost-key{color:var(--text-2);flex-wrap:wrap;gap:6px 12px;font-size:11.5px;display:flex}.cost-key i{vertical-align:-1px;border-radius:2px;width:9px;height:9px;margin-right:5px;display:inline-block}.cost-key .cost-ceil-key{border-left:1.5px dashed var(--text-2);border-radius:0;width:0;height:10px}.daytrack{grid-template-columns:repeat(30,1fr);gap:2px;display:grid}.daytrack i{background:var(--surface-3);border-radius:1px;height:10px}.daytrack i.on{background:var(--chart-skill)}.cols30-wrap{gap:4px;display:grid}.cols30{border-bottom:1px solid var(--line);grid-template-columns:repeat(30,1fr);align-items:end;gap:2px;height:52px;display:grid}.cols30 i{background:var(--chart-skill);transform-origin:bottom;border-radius:1.5px 1.5px 0 0;min-height:1px;display:block}.cols30 i.today{background:var(--accent)}.ubars{gap:6px;margin:0;padding:0;font-size:12.5px;list-style:none;display:grid}.ubars li{grid-template-columns:92px 1fr 30px;align-items:center;gap:8px;display:grid}.ubars li>:last-child{text-align:right}.ub-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ub-trk{height:7px}.ub-trk i{background:var(--chart-skill);transform-origin:0;border-radius:3px;height:100%;display:block}.ubars li.agent .ub-trk i{background:var(--chart-agent)}.ub-never{border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line);justify-content:space-between;align-items:center;padding:8px 10px;font-size:12.5px;display:flex}.gate-rows{gap:9px;margin:0;padding:0;font-size:12.5px;list-style:none;display:grid}.gate-rows li{grid-template-columns:1fr 96px 26px;align-items:center;gap:10px;display:grid}.gate-rows li>:last-child{text-align:right}.spark{width:96px;height:22px;display:block;overflow:visible}.spk-base{fill:none;stroke:var(--line);stroke-width:1px}.spk-area{fill:color-mix(in srgb, var(--text-2) 14%, transparent);stroke:none}.spk-line{fill:none;stroke:var(--text-2);stroke-width:1.4px;stroke-linejoin:round}.spk-end{fill:var(--accent)}.ldg .ldg-ring .fg{animation:1.1s cubic-bezier(.22,1,.36,1) both ldg-ring;animation-delay:calc(var(--i,0) * .12s + .1s)}.ldg .cost-segs{animation:.9s cubic-bezier(.22,1,.36,1) both ldg-sweep;animation-delay:calc(var(--i,0) * 90ms + .12s)}.ldg .cost-ceil{animation:.4s ease-out .9s both ldg-fade}.ldg .cols30 i{animation:.6s cubic-bezier(.22,1,.36,1) both ldg-grow-y;animation-delay:calc(var(--i,0) * 18ms + .15s)}.ldg .ub-trk i{animation:.7s cubic-bezier(.22,1,.36,1) both ldg-grow-x;animation-delay:calc(var(--i,0) * 55ms + .2s)}.ldg .spk-line{stroke-dasharray:1;animation:1.2s cubic-bezier(.65,0,.35,1) both ldg-draw;animation-delay:calc(var(--i,0) * .15s + .25s)}.ldg .spk-area{animation:.6s ease-out both ldg-fade;animation-delay:calc(var(--i,0) * .15s + .9s)}.ldg .spk-end{transform-box:fill-box;transform-origin:50%;animation:.35s cubic-bezier(.22,1,.36,1) both ldg-pop;animation-delay:calc(var(--i,0) * .15s + 1.35s)}@keyframes ldg-ring{0%{stroke-dashoffset:var(--circ)}}@keyframes ldg-sweep{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}@keyframes ldg-grow-x{0%{transform:scaleX(0)}}@keyframes ldg-grow-y{0%{transform:scaleY(0)}}@keyframes ldg-draw{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}@keyframes ldg-fade{0%{opacity:0}}@keyframes ldg-pop{0%{transform:scale(0)}}.tier-strip{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:20px;display:grid;overflow:hidden}.tier{border-right:1px solid var(--line);color:var(--text);flex-direction:column;gap:8px;padding:16px 20px;display:flex}.tier:last-child{border-right:0}.tier.on{background:var(--accent-soft);box-shadow:inset 0 -2px 0 var(--accent)}a.tier:hover{background:var(--surface-2)}.tier-k{color:var(--text-3);font-size:11px}.tier.on .tier-k{color:var(--accent-text)}.tier-top{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.tier-name{font-size:16px;font-weight:700}.tier-n{font-size:18px}.tier-bar{background:var(--surface-3);border-radius:99px;height:6px;overflow:hidden}.tier-bar>span{background:var(--accent);height:100%;display:block}a.tier .tier-bar>span{background:var(--line-3)}.tier-sub{color:var(--text-3);font-size:12px}.split{align-items:flex-start;gap:20px;display:flex}.split>.panel{flex:1}.aside-stack{flex-direction:column;flex:none;gap:16px;width:340px;display:flex}.law-toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:12px;padding:10px 16px;display:flex}.law-toolbar .law-filter{background:var(--bg-2);min-width:0;color:var(--text);border:1px solid var(--line);border-radius:var(--r-sm);font:inherit;flex:0 220px;margin:0;padding:7px 11px;font-size:13px}.law-toolbar .law-filter:focus{border-color:var(--accent-line)}.law-wrap{--law-5:92px minmax(0, 1.4fr) minmax(0, 1fr) 96px 104px;--law-cols:var(--law-5)}.law-wrap.with-toggle{--law-cols:var(--law-5) 44px}.law-rowhead,.law-row{grid-template-columns:var(--law-cols);border-bottom:1px solid var(--line);align-items:center;gap:14px;padding:9px 20px;display:grid}.law-rowhead{color:var(--text-3);font-size:12px;font-weight:600}.law-row{width:100%;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border-top:0;border-left:0;border-right:0;padding:10px 20px;transition:background .1s}.law-row.has-toggle{grid-template-columns:minmax(0,1fr) 44px;padding-top:0;padding-bottom:0}.law-disclosure{grid-template-columns:var(--law-5);min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:14px;padding:10px 0;display:grid}.law-disclosure:focus-visible{outline:2px solid var(--accent-text);outline-offset:-2px}.law-row .toggle-col{justify-content:center;align-items:center;display:flex}.law-row .no-gate{color:var(--text-3);white-space:nowrap;font-size:11px}.law-row:hover{background:var(--surface-2)}.law-row.on{background:var(--accent-soft)}.law-no{white-space:nowrap;font-family:var(--font-mono);color:var(--accent-text);font-variant-numeric:tabular-nums;align-items:center;gap:8px;display:flex}.law-no .x{color:var(--text-3);font-size:11px;transition:transform .14s}.law-row.on .law-no .x{transform:rotate(90deg)}.law-name{flex-direction:column;gap:2px;min-width:0;font-weight:600;display:flex}.law-princ{color:var(--text-3);font-size:12.5px;font-weight:400;line-height:1.4}.law-latin{min-width:0;color:var(--text-3);font-style:italic}.law-status{white-space:nowrap;background:var(--surface-3);color:var(--text-3);border-radius:999px;justify-self:start;padding:2px 9px;font-size:12px;font-weight:600}.law-status.ok{background:color-mix(in srgb, var(--good) 13%, transparent);color:var(--good-text)}.law-status.warn{background:color-mix(in srgb, var(--warn) 15%, transparent);color:var(--warn-text)}.law-enf{color:var(--text-2);font-size:13px}.law-enf.hook{color:var(--accent-text);font-weight:600}.law-enf.gate-off{color:var(--warn-text);font-weight:600}.law-row.law-off .law-no,.law-row.law-off .law-name>span:first-child{color:var(--text-3)}.law-expand{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--accent) 4%, transparent);padding:4px 20px 18px 46px}.law-expand p{max-width:75ch;color:var(--text-2);margin:6px 0 0;font-size:13.5px;line-height:1.66}.law-expand em{color:var(--text)}.law-srcline{font-family:var(--font-mono);color:var(--text-3);margin-top:13px;font-size:11px}.band-head{background:var(--bg-2);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:baseline;gap:12px;padding:12px 20px 8px;display:flex}.band-head .mono{font-size:11px}.tier-h{letter-spacing:.08em;text-transform:uppercase;color:var(--text-2);align-items:center;gap:7px;margin:0;font-size:12px;font-weight:700;display:inline-flex}.pack-head .tier-h:before{content:"";background:var(--cc,var(--text-3));border-radius:50%;width:8px;height:8px}.pack-desc{flex:1;font-size:13px}.pack-state{color:var(--text-3);font-size:12px}.pack-wrap.pack-off .law-row{opacity:.72}.pack-wrap.pack-off .pack-state{color:var(--warn-text)}.pack-enable{border-bottom:1px solid var(--line);white-space:nowrap;font-family:var(--font-mono);color:var(--text-3);padding:9px 20px;font-size:12px;overflow-x:auto}.pack-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.pack-list li{align-items:center;gap:10px;display:flex}.pack-list li.off .pl-name{color:var(--text-3)}.pl-name{text-overflow:ellipsis;white-space:nowrap;flex:none;width:78px;font-weight:600;overflow:hidden}.pl-n{text-align:right;width:18px;font-size:12px}.pack-apply{flex-wrap:wrap;gap:10px;display:flex}.pack-warn{color:var(--warn-text);border:1px solid color-mix(in srgb, var(--warn) 36%, transparent);border-radius:var(--r-sm);background:color-mix(in srgb, var(--warn) 8%, transparent);margin:0;padding:10px 13px;font-size:13px}.gate-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.gate-list li{flex-direction:column;gap:5px;display:flex}.gate-top{align-items:baseline;gap:8px;font-size:13px;display:flex}.gate-row{border-radius:var(--r-sm);width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;box-sizing:content-box;background:0 0;border:0;flex-direction:column;gap:5px;margin:-6px -8px;padding:6px 8px;display:flex}.gate-row:hover{background:var(--surface-2)}.gate-row:hover .gate-name{color:var(--accent-text)}.gate-name{color:var(--text)}@keyframes lawFlash{0%{box-shadow:inset 0 0 0 2px var(--accent);background:var(--accent-soft)}to{background:0 0;box-shadow:inset 0 0 0 2px #0000}}.law-flash{animation:1.6s cubic-bezier(.22,1,.36,1) lawFlash}@media (prefers-reduced-motion:reduce){.law-flash{animation-duration:10ms}}.gate-n{margin-left:auto}.gate-list .hbar{flex:none;width:100%}.pad-wide{max-width:none}.library{min-height:calc(100vh - var(--topbar-h) - 150px);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);grid-template-columns:232px minmax(0,380px) minmax(0,1fr);display:grid;overflow:hidden}.library.locked{grid-template-columns:minmax(0,380px) minmax(0,1fr)}.lib-kinds{background:var(--bg-2);border-right:1px solid var(--line);flex-direction:column;gap:16px;padding:22px 14px;display:flex}.lib-title{flex-direction:column;gap:2px;padding:0 8px;font-size:13px;display:flex}.lib-title h1.h{margin:0;font-size:24px}.lib-kinds .stackbar{margin:0 8px}.kind-list{flex-direction:column;gap:2px;display:flex}.kind-list a{border-radius:var(--r-sm);color:var(--text-2);justify-content:space-between;gap:8px;padding:8px;display:flex}.kind-list a:hover{background:var(--surface);color:var(--text)}.kind-list a.on{background:var(--surface-3);color:var(--text);font-weight:600}.rail-cats{border-left:1px solid var(--line-2);flex-direction:column;gap:6px;margin:2px 0 6px 12px;padding-left:8px;display:flex}.rail-cats ul{flex-direction:column;gap:1px;margin:0;padding:0;list-style:none;display:flex}.rail-cats button{border-radius:var(--r-sm);width:100%;color:var(--text-2);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:5px 8px;font-size:12.5px;display:flex}.rail-cats button:hover{background:var(--surface);color:var(--text)}.rail-cats button.on{background:var(--surface-3);color:var(--text);font-weight:600}.rail-cats .cdot{background:var(--cc,var(--text-3));border-radius:50%;flex:none;width:7px;height:7px}.rail-cats .rc-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.rail-mix{gap:2px;height:4px;margin:0 8px;display:flex}.rail-mix span{background:var(--cc,var(--text-3));border-radius:2px;flex-basis:0;transition:opacity .14s}.rail-mix span.dim{opacity:.25}.lib-list{border-right:1px solid var(--line);flex-direction:column;min-width:0;min-height:0;display:flex}.lib-list-head{border-bottom:1px solid var(--line);padding:14px 18px}.library .lib-rows{max-height:calc(100vh - var(--topbar-h) - 250px);flex:1;overflow:auto}.library .lib-row{color:var(--text);flex-direction:column;gap:3px;padding:10px 18px;display:flex}.library .lib-row.on{background:var(--accent-soft)}.library .lib-row.on .lr-name{color:var(--text)}.library .lr-desc{font-size:13px}.lib-reader{flex-direction:column;gap:12px;min-width:0;padding:28px 36px;display:flex}.reader-tags{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.reader-title{font-family:var(--font-display);letter-spacing:-.02em;overflow-wrap:anywhere;margin:0;font-size:28px;font-weight:700}.reader-lede{max-width:62ch;color:var(--text-2);margin:0;font-size:16px;line-height:1.5}.reader-src{overflow-wrap:anywhere;margin:0;font-size:12px}.lib-reader .hr{margin:6px 0}.lib-reader .detail-doc{max-width:76ch;padding:0}.card-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:20px;display:grid}.big-num{color:var(--text-3);margin:0}.big-num .mono{color:var(--text);font-size:26px}.slots{grid-template-columns:repeat(var(--slots,15), minmax(0, 1fr));gap:4px;padding-top:6px;display:grid}.slots span{border:1px dashed var(--line-3);border-radius:4px;height:26px}.slots span.used{background:var(--accent);border:0}.hb-n.warn{color:var(--warn-text)}.hosts{grid-template-columns:minmax(0,1fr) 380px;align-items:start;gap:20px;display:grid}.hosts-main{flex-direction:column;gap:16px;min-width:0;display:flex}.inst-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 20px 12px;display:flex}.inst-head h2{margin:0;font-size:15px;font-weight:700}.inst-head p{margin:2px 0 0;font-size:13px}.inst-deploy{border-bottom:1px solid var(--line);padding:16px 20px}.inst-empty{color:var(--text-3);padding:20px;font-size:13px}.toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;font-size:13px;display:flex}.tbl-scroll{overflow-x:auto}.hosts-tbl th{font-family:var(--font-ui);letter-spacing:0;text-transform:none;padding:12px 14px 10px;font-size:12px;font-weight:600}.hosts-tbl th:first-child,.hosts-tbl td:first-child{padding-left:20px}.hosts-tbl td{white-space:nowrap}.hosts-tbl tr.pickable{cursor:pointer}.hosts-tbl tr.pickable:hover{background:var(--surface-2)}.hosts-tbl tr.on,.hosts-tbl tr.on:hover{background:var(--accent-soft)}.hosts-tbl tr.on .row-pick{color:var(--accent-text)}.hosts-tbl .pick-mark{text-align:right;color:var(--accent-text);white-space:nowrap;font-size:12px;font-weight:600}.install-panel .ip-eyebrow{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--accent-text);font-size:10.5px}.install-panel .ip-kind{color:var(--text-2);margin-top:-6px;font-size:13px}.hosts-tbl tr.quiet td{color:var(--text-3)}.path-cell{text-overflow:ellipsis;max-width:280px;color:var(--text-2);font-size:12px;overflow:hidden}.row-pick{font:inherit;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600}.row-pick:hover{color:var(--accent-text)}.install-panel{top:calc(var(--topbar-h) + 16px);background:var(--bg-2);border:1px solid var(--accent-line);border-radius:var(--r-md);flex-direction:column;gap:16px;padding:24px;display:flex;position:sticky}.ip-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.ip-head h2{margin:0;font-size:20px;font-weight:700}code.ip-path{color:var(--text-3);overflow-wrap:anywhere;background:0 0;border:0;padding:0;font-size:12px}.ip-picks{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.ip-picks .dp-field,.field{flex-direction:column;gap:6px;min-width:0;font-size:13px;font-weight:600;display:flex}.ip-picks .dp-field:first-child{grid-column:1/-1}.ip-picks .sel,.field .sel{width:100%;min-width:0;font-family:var(--font-ui)}.ip-block{flex-direction:column;gap:6px;display:flex}.ip-label{font-size:13px;font-weight:600}.install-panel .mcp-target{border:0;border-radius:0;margin:0;overflow:visible}.install-panel .mcp-target .mt-head{background:0 0;flex-wrap:wrap;padding:4px 0}.install-panel .mcp-row{justify-content:space-between;padding:9px 0}.install-panel .card{box-shadow:none;background:0 0;border:0;margin:0;padding:0}.install-panel .card .card-head{margin-bottom:6px}.install-panel .card .card-head h3{font-family:var(--font-ui);font-size:13px;font-weight:600}.ip-switch{color:var(--text-2);align-items:center;gap:10px;font-size:13px;display:flex}.ip-spacer{flex:1}.ip-actions{border-top:1px solid var(--line);flex-wrap:wrap;gap:10px;padding-top:16px;display:flex}.install-panel .h-remove{border:1px solid color-mix(in srgb, var(--bad) 40%, transparent);border-radius:var(--r-sm);background:color-mix(in srgb, var(--bad) 5%, transparent);flex-direction:column;align-items:stretch;gap:10px;padding:14px;display:flex}.hr-msg{margin:0;font-size:13px}.kv-grid{grid-template-columns:96px minmax(0,1fr);row-gap:8px;margin:0;font-size:13px;display:grid}.kv-grid dt{color:var(--text-3)}.kv-grid dd{overflow-wrap:anywhere;margin:0}.kits-tab{flex-direction:column;gap:16px;display:flex}.kit-list{margin:0;padding:0;list-style:none}.kit-list.kit-box{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}.kit-row{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:12px 20px;display:flex}.kit-box .kit-row{padding:12px 16px}.kit-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.kit-main b,.kit-name{color:var(--text);font-size:14px;font-weight:600}a.kit-name:hover{color:var(--accent-text)}.kit-main .mono{overflow-wrap:anywhere;font-size:12px}.kit-desc{color:var(--text-2);font-size:13px}.kit-lock,.kit-kept{border-bottom:1px solid var(--line);margin:0;padding:10px 20px;font-size:13px}.kit-lock{color:var(--warn-text);background:color-mix(in srgb, var(--warn) 8%, transparent)}.kit-kept{font-size:12px}.kit-foot{background:var(--surface-2);justify-content:space-between;align-items:center;gap:12px;padding:10px 20px;display:flex}.kit-install:not(:last-child){border-bottom:1px solid var(--line)}.kit-install .kit-foot,.kit-box .kit-lock{padding-inline:16px}.kit-install .kit-row:last-child{border-bottom:0}.kit-hint{color:var(--text-2);overflow-wrap:anywhere;min-width:0;font-size:12.5px}.kit-hint.staged{color:var(--accent-text)}.kit-links{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.kit-links a{font-family:var(--font-mono);color:var(--text-2);border:1px solid var(--line);border-radius:999px;padding:3px 10px;font-size:12px;display:inline-block}.kit-links .kit-link-off{font-family:var(--font-mono);color:var(--text-3);border:1px dashed var(--line);border-radius:999px;padding:3px 10px;font-size:12px;display:inline-block}.kit-links a:hover{color:var(--accent-text);border-color:var(--accent-line)}.library .lr-meta{color:var(--text-3);overflow-wrap:anywhere;font-size:11px}.loop-h2 .mono{font-size:12px;font-weight:400}.tabbar,.tb-menu,.nav-scrim{display:none}@media (width<=1180px){.ov-charts,.card-row{grid-template-columns:repeat(2,minmax(0,1fr))}.split{flex-direction:column;align-items:stretch}.aside-stack{width:auto}.hosts{grid-template-columns:minmax(0,1fr)}.install-panel{position:static}.library{grid-template-columns:200px minmax(0,1fr)}.library .lib-reader{border-top:1px solid var(--line);grid-column:1/-1}.library.locked .lib-reader{border-top:0;grid-column:auto}.law-wrap{--law-5:80px minmax(0, 1fr) 96px 104px}.law-latin,.law-rowhead>span:nth-child(3){display:none}.needs{grid-template-columns:max-content minmax(0,1fr) max-content}.needs-where{display:none}}@media (width<=960px){:root{--rail-w:62px}.sidebar{align-items:stretch;padding:18px 8px}.sb-brand{justify-content:center;padding:4px 0 16px}.sb-brand-text,.sb-vitals{display:none}.sb-label,.sb-count{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}a.sb-item{justify-content:center;padding:10px 0}.tier-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.tier:nth-child(2){border-right:0}.tier:nth-child(-n+2){border-bottom:1px solid var(--line)}.tb-search input{width:200px}}@media (width<=720px){:root{--rail-w:248px}.app{grid-template-columns:minmax(0,1fr)}.tb-menu{flex:none;place-items:center;display:inline-grid}.topbar{padding:0 16px}.crumb-root,.crumbs>[aria-hidden],.tb-harness{display:none}.tb-search input{width:112px}.tb-search .kbd{display:none}.page .seg{flex-wrap:wrap;max-width:100%}.sidebar{z-index:var(--z-drawer);width:var(--rail-w);visibility:hidden;height:100dvh;padding:20px 12px 14px;transition:transform .22s,visibility .22s;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%);box-shadow:0 0 60px -10px #000c}.app.nav-open .sidebar{visibility:visible;transform:none}.sb-brand{justify-content:flex-start;padding:4px 8px 20px}.sb-brand-text,.sb-vitals{display:flex}.sb-label,.sb-count{clip-path:none;width:auto;height:auto;position:static}a.sb-item{justify-content:flex-start;padding:9px 10px}.nav-scrim{z-index:var(--z-scrim);cursor:pointer;background:#0000008c;border:0;padding:0;display:block;position:fixed;inset:0}.page{padding:18px 16px 150px}.tabbar{z-index:var(--z-tabbar);background:var(--bg-2);border-top:1px solid var(--line);grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;height:64px;display:grid;position:fixed;bottom:0;left:0;right:0}.tabbar a{min-width:0;color:var(--text-3);white-space:nowrap;flex-direction:column;justify-content:center;align-items:center;gap:3px;font-size:11px;font-weight:600;display:flex;overflow:hidden}.tabbar a.on{color:var(--accent-text)}.tabbar .glyph{width:20px;height:20px}.console{bottom:64px}.ov-charts,.card-row{grid-template-columns:minmax(0,1fr)}.health{flex-wrap:wrap}.needs{grid-template-columns:minmax(0,1fr) max-content;column-gap:10px}.needs .tag{display:none}.law-wrap{--law-5:64px minmax(0, 1fr) 84px}.law-enf,.law-rowhead>span:nth-child(5){display:none}.library,.library.locked{grid-template-columns:minmax(0,1fr)}.lib-kinds{border-right:0;border-bottom:1px solid var(--line);padding:16px 12px}.kind-list{grid-auto-columns:max-content;grid-auto-flow:column;gap:2px;display:grid;overflow-x:auto}.kind-list a{white-space:nowrap;grid-row:1}.lib-kinds{container-type:inline-size}.rail-cats{border-left:0;grid-area:2/1/auto/span 12;width:100cqi;margin:6px 0 0;padding:0;position:sticky;left:0}.rail-cats ul{flex-flow:wrap;gap:4px}.rail-cats button{border:1px solid var(--line);width:auto}.lib-list{border-right:0}.library .lib-rows{max-height:45vh}.library .lib-reader{border-top:1px solid var(--line);grid-column:auto;padding:20px 16px}.hosts-tbl th:nth-child(2),.hosts-tbl td:nth-child(2){display:none}.ip-picks{grid-template-columns:minmax(0,1fr)}.slots span{height:20px}}@media (width<=720px) and (prefers-reduced-motion:reduce){.sidebar{transition:none}}.reader-head{align-items:center;gap:18px;display:flex}.reader-head .reader-title{flex:0 auto;width:auto;min-width:0;margin:0}.agent-glyph{color:var(--accent-text);flex:none;display:block;overflow:visible}.agent-glyph g,.agent-glyph path,.agent-glyph circle,.agent-glyph ellipse,.agent-glyph rect{transform-box:fill-box;transform-origin:50%}.agent-glyph .ag-f{fill:currentColor;fill-opacity:.18}.ag-disc{fill:currentColor;fill-opacity:.07;stroke:none}.ag-ring{opacity:.35;animation:40s linear infinite agRing}.ag-late{animation-delay:.5s!important}.ag-later{animation-delay:1s!important}.ag-wave{transform-origin:0;animation:2.6s ease-in-out infinite agWave}.ag-call{opacity:.6;animation:2.6s ease-out infinite agCall}.ag-draw{stroke-dasharray:100;animation:4.5s cubic-bezier(.65,0,.35,1) infinite agDraw}.ag-blink{animation:1.1s step-end infinite agBlink}.ag-nudge-l{animation:3s ease-in-out infinite agNudgeL}.ag-nudge-r{animation:3s ease-in-out infinite agNudgeR}.ag-write{animation:4.5s ease-in-out infinite agWrite}.ag-rise{transform-origin:bottom;animation:4s cubic-bezier(.22,1,.36,1) infinite agRise}.ag-search{animation:4s ease-in-out infinite agSearch}.ag-frame{animation:3s ease-in-out infinite agFrame}.ag-turn{animation:6s cubic-bezier(.65,0,.35,1) infinite agTurn}.ag-drain{transform-origin:bottom;animation:6s linear infinite agDrain}.ag-fill{transform-origin:bottom;animation:6s linear infinite agFillUp}.ag-gauge{transform-origin:0 100%;animation:3.2s ease-in-out infinite agGauge}.ag-tilt{transform-origin:top;animation:3.6s ease-in-out infinite agTilt}.ag-spin{animation:4s linear infinite agSpin}.ag-orbit{transform-box:view-box;transform-origin:30px 34px;animation:8s linear infinite agOrbit}.ag-sweep{animation:4s ease-in-out infinite agSweep}.ag-mark{opacity:0;animation:4s ease-in-out infinite agMark}.ag-ripple{animation:2.8s ease-out infinite agRipple}.ag-lean{transform-origin:bottom;animation:3s ease-in-out infinite agLean}.ag-grow{transform-origin:bottom;animation:5s ease-in-out infinite agGrow}.ag-sway{transform-origin:0 100%;animation:3s ease-in-out infinite agSway}.ag-slosh{animation:3s ease-in-out infinite agSlosh}.ag-bubble{animation:2.4s ease-in infinite agBubble}.ag-beat{animation:1.5s ease-in-out infinite agBeat}.ag-twinkle{animation:2.2s ease-in-out infinite agTwinkle}.ag-rays{animation:24s linear infinite agRing}.ag-pulse{animation:2.6s ease-in-out infinite agPulse}@keyframes agRing{to{transform:rotate(360deg)}}@keyframes agWave{50%{transform:skewY(-7deg)scaleX(.93)}}@keyframes agCall{0%{opacity:0;transform:translate(-3px)}40%{opacity:.7}to{opacity:0;transform:translate(2px)}}@keyframes agDraw{0%{stroke-dashoffset:100px}45%,80%{stroke-dashoffset:0}to{stroke-dashoffset:-100px}}@keyframes agBlink{50%{opacity:0}}@keyframes agNudgeL{50%{transform:translate(-2px)}}@keyframes agNudgeR{50%{transform:translate(2px)}}@keyframes agWrite{0%,to{transform:translate(0)}30%{transform:translate(-14px,-12px)}60%{transform:translate(-8px,-4px)}}@keyframes agRise{0%{transform:scaleY(.2)}40%,85%{transform:scaleY(1)}to{transform:scaleY(.2)}}@keyframes agSearch{20%{transform:rotate(35deg)}45%{transform:rotate(-25deg)}70%{transform:rotate(10deg)}}@keyframes agFrame{50%{transform:scale(.86)}}@keyframes agTurn{0%,42%{transform:rotate(0)}50%,92%{transform:rotate(180deg)}to{transform:rotate(180deg)}}@keyframes agDrain{0%{transform:scaleY(1)}42%,to{transform:scaleY(.15)}}@keyframes agFillUp{0%{transform:scaleY(.15)}42%,to{transform:scaleY(1)}}@keyframes agGauge{0%,to{transform:rotate(-70deg)}55%{transform:rotate(8deg)}65%{transform:rotate(-2deg)}}@keyframes agTilt{25%{transform:rotate(7deg)}60%{transform:rotate(-4deg)}80%{transform:rotate(1deg)}}@keyframes agSpin{50%{transform:scaleX(.12)}}@keyframes agOrbit{to{transform:rotate(360deg)}}@keyframes agSweep{50%{transform:translate(16px)}}@keyframes agMark{0%,45%{opacity:0}55%,90%{opacity:1}to{opacity:0}}@keyframes agRipple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.25)}}@keyframes agLean{50%{transform:rotate(-12deg)}}@keyframes agGrow{0%,to{transform:scale(.9)}50%{transform:scale(1)}}@keyframes agSway{50%{transform:rotate(-8deg)}}@keyframes agSlosh{50%{transform:skew(4deg)}}@keyframes agBubble{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-16px)}}@keyframes agBeat{12%{transform:scale(1.14)}24%{transform:scale(.98)}36%{transform:scale(1.08)}50%{transform:scale(1)}}@keyframes agTwinkle{50%{opacity:.15;transform:rotate(45deg)scale(.7)}}@keyframes agPulse{50%{opacity:.75;transform:scale(1.07)}}@media (prefers-reduced-motion:reduce){.agent-glyph *{animation:none!important}.ag-draw{stroke-dasharray:none}.ag-mark{opacity:1}}.loop-graph{min-width:0}.loop-rules{max-width:76ch;color:var(--text-2);margin:0;padding-left:18px;font-size:13.5px}.loop-rules li+li{margin-top:4px}.loop-ring{width:100%;max-width:680px;height:auto;font-family:var(--font-ui);margin:0 auto;display:block}.loop-run-wait{margin:0;font-size:12.5px}.loop-run-preset{align-items:center;gap:8px;display:flex}.loop-history{border:1px solid var(--line);border-radius:var(--r-md);overflow-x:auto}.loop-h2{margin:10px 0 0;font-size:15px;font-weight:700}.loop-brick-list{border:1px solid var(--line);border-radius:var(--r-md);margin:0;padding:0;list-style:none;overflow:hidden}.loop-brick{border-bottom:1px solid var(--line);scroll-margin-top:calc(var(--topbar-h) + 12px);flex-wrap:wrap;align-items:center;gap:6px 10px;padding:9px 14px;transition:background .2s;display:flex}.loop-brick:last-child{border-bottom:0}.loop-brick.on{background:var(--accent-soft)}.loop-brick.dimmed{opacity:.55}.loop-brick b{min-width:9em;font-size:13.5px}.loop-brick b a{color:var(--text)}.loop-brick b a:hover{color:var(--accent-text)}.loop-brick .mono{font-size:12px}.loop-facts{grid-template-columns:max-content minmax(0,1fr);gap:6px 18px;margin:0;font-size:13.5px;display:grid}.loop-facts dt{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);align-self:center;font-size:11px}.loop-facts dd{overflow-wrap:anywhere;flex-wrap:wrap;align-items:center;gap:4px;margin:0;display:flex}.loop-src-bar{margin-bottom:12px}.loop-brick-src{white-space:pre-wrap;max-height:480px;font-family:var(--font-mono);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-sm);margin:0;padding:10px 12px;font-size:12px;overflow:auto}.loop-problems{border-color:color-mix(in srgb, var(--warn) 40%, transparent);margin-bottom:16px}.loop-problems ul{margin:0;padding-left:18px}.lr-ring{fill:none;stroke:var(--accent);stroke-width:3px;stroke-linecap:round}.lr-inner{fill:color-mix(in srgb, var(--good) 6%, transparent);stroke:color-mix(in srgb, var(--good) 25%, transparent);stroke-width:1px}path.lr-inner{fill:none;stroke:var(--good);stroke-width:2.5px;stroke-linecap:round}.lr-flow{fill:none;stroke:var(--line-3);stroke-width:1.6px}.app.light .lr-flow{stroke:var(--text-3)}.lr-box{fill:none;stroke:color-mix(in srgb, var(--good) 45%, transparent);stroke-width:1.2px}.lr-head-ring{fill:var(--accent)}.lr-head-inner{fill:var(--good)}.lr-head-flow{fill:var(--line-3)}.lr-node{cursor:pointer}.lr-node circle{fill:color-mix(in srgb, var(--accent) 12%, var(--surface));stroke:var(--accent);stroke-width:2px}.lr-node.inner circle{stroke:var(--good);fill:color-mix(in srgb, var(--good) 12%, var(--surface))}.lr-node text{fill:var(--text);font-size:11.5px;font-weight:600}.lr-node:hover circle,.lr-node:focus-visible circle{stroke-width:3px}.lr-node.current circle,.lr-node.inner.current circle{fill:var(--accent);stroke:var(--accent);stroke-width:4px}.lr-node:focus-visible circle,.lr-node.inner:focus-visible circle{stroke:var(--text);stroke-width:3px}.lr-node:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px}.lr-node.current text{fill:var(--accent-ink)}.lr-gate circle{fill:var(--warn)}.lr-gate text:first-of-type{fill:var(--surface);font-size:14px}.loop-ring .lr-human circle:first-of-type{fill:var(--surface);stroke:var(--text-2);stroke-width:1.4px}.loop-ring .lr-human path.lr-human-fig,.loop-ring .lr-human circle.lr-human-fig{fill:var(--text);stroke:none}.lr-lbl{fill:var(--text);font-size:14px;font-weight:600}.lr-sub{fill:var(--text-2);font-size:11px}.lr-sub.lr-good{fill:var(--good-text)}.lr-sub.lr-warn{fill:var(--warn-text)}.lr-sub.lr-acc{fill:var(--accent-text)}.lr-title{fill:var(--text);font-size:18px;font-weight:700}#main:focus{outline:none}html{scrollbar-gutter:stable}.sw-toggle.on.mixed{background:var(--surface-3);border-color:var(--accent-line)}.sw-toggle.on.mixed:after{background:var(--accent);transform:translate(8px)}.gate-top .off{color:var(--text-3);border:1px solid var(--line);border-radius:4px;padding:0 4px;font-size:11px}.tier-rule{font-style:italic}.detail-doc .markdown .table-scroll{max-width:100%;margin:0 0 14px;overflow-x:auto}.cost-lane{height:4px;margin-top:3px}:where(.jr-head) h2.h{letter-spacing:-.02em;margin:10px 0 4px;font-size:27px}.b-greet h2.b-h{letter-spacing:-.025em;margin:4px 0 0;font-size:31px}.c-titlebar h2.c-h1{font-family:var(--font-mono);letter-spacing:.02em;color:var(--text);margin:0;font-size:17px;font-weight:600}.ring-box{display:inline-flex;position:relative}.ring-center .pct-unit{color:var(--text-3);font-size:20px}.ring-center .donut-c-num{font-family:var(--font-display);color:var(--text);font-size:28px;font-weight:600;line-height:1}.ring-center .donut-c-cap{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--text-3);margin-top:6px;font-size:10px}.tone-cat0{--tone:#2bb673}.tone-cat1{--tone:#16a6a6}.tone-cat2{--tone:#e8a23b}.tone-cat3{--tone:#e07a5f}.tone-cat4{--tone:#8e7dbe}.tone-cat5{--tone:#5bd08a}.tone-cat6{--tone:#79856e}.t-cap{text-transform:capitalize}.c-fine{font-size:var(--fs-2xs)}.popover.appearance-pop{top:calc(var(--topbar-h) / 2 + 27px);background:var(--surface);padding:16px;position:fixed;right:80px}.crumbs ol{align-items:center;gap:8px;min-width:0;margin:0;padding:0;list-style:none;display:flex}.crumbs li+li:before{content:"/" / "";margin-right:8px}.crumbs a{color:inherit}.crumbs a:hover{color:var(--text)}.sb-voice-rail{display:none}@media (width<=960px){.sb-voice-rail{border-radius:var(--r-sm);color:var(--text-2);cursor:pointer;background:0 0;border:0;place-items:center;padding:10px 0;display:grid}.sb-voice-rail:hover{background:var(--surface);color:var(--text)}.sb-voice-rail .glyph{width:18px;height:18px}}@media (width<=720px){.sb-voice-rail,.crumb-root{display:none}.crumbs li.crumb-root+li:before{content:none}.popover.appearance-pop{right:var(--sp-4)}.spotlight{top:calc(var(--topbar-h) + 6px);left:var(--sp-4);right:var(--sp-4);width:auto;position:fixed}.tabbar .tab-more{min-width:0;font:inherit;color:var(--text-3);white-space:nowrap;cursor:pointer;background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:3px;padding:0;font-size:11px;font-weight:600;display:flex;overflow:hidden}.tabbar .tab-more.on{color:var(--accent-text)}}.detail-doc .doc-link{margin-top:var(--sp-6)}.cli-head{align-items:flex-start}.gap-4{gap:var(--sp-1)}.cli-card h2,.map-detail h2{margin:0;font-family:inherit;font-size:1.17em;font-weight:700}.map-detail h2{margin-bottom:var(--sp-2)}.cli-card .sub{margin:0}.cap{text-transform:capitalize}.lib-title p.h{font-family:var(--font-display);letter-spacing:-.02em;margin:0;font-size:24px;font-weight:700}.t-bad{color:var(--bad-text)}.act-min{min-width:0}.act-fixed{flex-shrink:0}.act-grow{flex:1;min-width:0}.act-ell{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.act-cwd{font-size:var(--fs-xs);text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.act-xs{font-size:var(--fs-xs)}.act-sm{font-size:var(--fs-sm)}.act-dot{width:9px;height:9px}.act-title{font-size:var(--fs-lg);margin:0}.act-phase{font-size:var(--fs-md);margin-top:10px}.act-counters{gap:var(--sp-4);margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--text-2)}.act-foot{margin-top:var(--sp-3);border-top:1px solid var(--line);padding-top:10px}.act-err-row{margin-top:10px}.act-err-row .badge{max-width:100%}.act-updated{font-size:var(--fs-2xs);margin-top:var(--sp-2)}.act-gap{margin-bottom:var(--sp-3)}.act-back{margin-bottom:var(--sp-3);gap:6px}.act-back .glyph{transform:rotate(180deg)}.act-line{align-items:baseline}.act-who{flex-shrink:0;justify-content:center;min-width:52px}.act-inline-dot{margin-right:var(--sp-2);vertical-align:middle;display:inline-block}.act-panels{margin-top:var(--sp-3);grid-template-columns:1fr}.act-panels.two{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.act-list{margin-top:var(--sp-2);gap:6px}.act-done{color:var(--text-3);text-decoration:line-through}.act-mt{margin-top:var(--sp-3)}.act-tl-head{margin-bottom:var(--sp-3);justify-content:space-between}.act-todo{letter-spacing:2px}.act-todo .on{color:var(--accent-text)}.sel-all{font-size:var(--fs-sm);cursor:pointer}.sel-all input{accent-color:var(--accent)}.diff-behind{margin-top:var(--sp-6)}.diff-behind h3{margin:0}.diff-lines{font-size:var(--fs-xs);margin-left:auto}.diff-head .iconbtn{transition:transform .15s}.diff-file.open .diff-head .iconbtn{transform:rotate(90deg)}.check-head .feed-dot{width:9px;height:9px}.doc-summary .mono{font-size:var(--fs-xs)}.badge.cap{text-transform:capitalize}.check-fold>summary{cursor:pointer;padding:var(--sp-3) var(--sp-5);color:var(--text-2);font-size:var(--fs-sm)}.check-fold[open]>summary{margin-bottom:var(--sp-3)}.dir-thumb-bar.w70{width:70%}.dir-thumb-bar.w52{width:52%}.panel.flush>.empty{padding:var(--sp-5);font-size:var(--fs-sm)}.inst-head{flex-wrap:wrap}.lib-rows .empty{padding:var(--sp-7)}.lib-kinds .lib-lede{padding:0 var(--sp-2)}.lib-lede a{margin-left:var(--sp-1)}.card-row.two{grid-template-columns:repeat(2,minmax(0,1fr))}@media (width<=720px){.card-row.two{grid-template-columns:1fr}}.panel-note.warn{color:var(--warn-text)}.panel-note.bad{color:var(--bad-text)}