skillex 0.3.1 โ 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +262 -1
- package/README.md +57 -10
- package/dist/auto-sync.d.ts +66 -0
- package/dist/auto-sync.js +91 -0
- package/dist/catalog.js +5 -29
- package/dist/cli.d.ts +13 -0
- package/dist/cli.js +247 -141
- package/dist/confirm.js +3 -1
- package/dist/direct-github.d.ts +60 -0
- package/dist/direct-github.js +177 -0
- package/dist/doctor.d.ts +31 -0
- package/dist/doctor.js +172 -0
- package/dist/downloader.d.ts +42 -0
- package/dist/downloader.js +41 -0
- package/dist/fs.d.ts +21 -1
- package/dist/fs.js +30 -3
- package/dist/http.d.ts +28 -7
- package/dist/http.js +143 -42
- package/dist/install.d.ts +23 -9
- package/dist/install.js +75 -348
- package/dist/lockfile.d.ts +46 -0
- package/dist/lockfile.js +169 -0
- package/dist/output.d.ts +11 -0
- package/dist/output.js +49 -0
- package/dist/recommended.d.ts +13 -0
- package/dist/recommended.js +21 -0
- package/dist/runner.js +9 -9
- package/dist/skill.d.ts +2 -0
- package/dist/skill.js +3 -0
- package/dist/sync.js +12 -9
- package/dist/types.d.ts +39 -0
- package/dist/types.js +28 -0
- package/dist/ui.js +1 -1
- package/dist/user-config.d.ts +5 -0
- package/dist/user-config.js +22 -1
- package/dist/web-ui.js +5 -0
- package/dist-ui/assets/CatalogPage-CbtMTkxd.js +1 -0
- package/dist-ui/assets/CatalogPage-W5MqylAz.css +1 -0
- package/dist-ui/assets/DoctorPage-oUZyX91t.js +1 -0
- package/dist-ui/assets/Skeleton-B_xm5L3P.js +1 -0
- package/dist-ui/assets/Skeleton-_Ooiw1nN.css +1 -0
- package/dist-ui/assets/SkillDetailPage-5JHQLq3q.js +1 -0
- package/dist-ui/assets/SkillDetailPage-CBAaWpcc.css +1 -0
- package/dist-ui/assets/{index-UBECch6X.css โ index-CWm7zQTg.css} +1 -1
- package/dist-ui/assets/index-I0b-syhc.js +26 -0
- package/dist-ui/assets/recommended-D_i10hwH.js +1 -0
- package/dist-ui/index.html +2 -2
- package/package.json +2 -2
- package/dist-ui/assets/CatalogPage-B_qic36n.js +0 -1
- package/dist-ui/assets/SkillDetailPage-BJ3onKk4.js +0 -1
- package/dist-ui/assets/index-DN-z--cR.js +0 -25
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as G,w as ce,o as J,a as Z,c as ee,b as te,e as n,f as o,g as P,h as t,t as d,n as A,i as f,T as le,r as T,u as se,j as p,F as x,k as E,l as ke,m as b,p as $,q as ve,s as N}from"./index-I0b-syhc.js";import{_ as K,S as ge}from"./Skeleton-B_xm5L3P.js";import{RECOMMENDED_SKILL_IDS as he}from"./recommended-D_i10hwH.js";const fe=["aria-labelledby"],me=["id"],pe={class:"confirm-message"},ye={class:"confirm-actions"},be=G({__name:"ConfirmDialog",props:{open:{type:Boolean},title:{},message:{},confirmLabel:{},cancelLabel:{},tone:{}},emits:["confirm","cancel"],setup(i,{emit:w}){const C=i,s=w,S=T(null),h=T(null);function m(k){var g;C.open&&(k.key==="Escape"&&(k.preventDefault(),s("cancel")),k.key==="Enter"&&((g=document.activeElement)==null?void 0:g.tagName)!=="BUTTON"&&(k.preventDefault(),s("confirm")))}return ce(()=>C.open,async k=>{var g;k&&(await new Promise(R=>setTimeout(R,0)),(g=h.value)==null||g.focus())}),J(()=>window.addEventListener("keydown",m)),Z(()=>window.removeEventListener("keydown",m)),(k,g)=>(n(),ee(le,{name:"confirm"},{default:te(()=>[i.open?(n(),o("div",{key:0,ref_key:"dialogEl",ref:S,class:"confirm-backdrop",role:"presentation",onClick:g[2]||(g[2]=P(R=>s("cancel"),["self"]))},[t("div",{class:"confirm-card",role:"dialog","aria-modal":"true","aria-labelledby":`confirm-title-${i.title.replace(/\s+/g,"-")}`},[t("h3",{id:`confirm-title-${i.title.replace(/\s+/g,"-")}`,class:"confirm-title"},d(i.title),9,me),t("p",pe,d(i.message),1),t("div",ye,[t("button",{ref_key:"cancelBtn",ref:h,class:"button button-ghost",type:"button",onClick:g[0]||(g[0]=R=>s("cancel"))},d(i.cancelLabel||"Cancel"),513),t("button",{class:A(["button",i.tone==="danger"?"button-danger":"button-primary"]),type:"button",onClick:g[1]||(g[1]=R=>s("confirm"))},d(i.confirmLabel||"Confirm"),3)])],8,fe)],512)):f("",!0)]),_:1}))}}),Y=K(be,[["__scopeId","data-v-2119c01b"]]);function X(i,w){if(!i)return[{text:"",match:!1}];const C=w.trim();if(!C)return[{text:i,match:!1}];const s=i.toLowerCase(),S=C.toLowerCase(),h=[];let m=0,k=s.indexOf(S,m);for(;k!==-1;)k>m&&h.push({text:i.slice(m,k),match:!1}),h.push({text:i.slice(k,k+S.length),match:!0}),m=k+S.length,k=s.indexOf(S,m);return m<i.length&&h.push({text:i.slice(m),match:!1}),h.length===0?[{text:i,match:!1}]:h}const we=["aria-checked","aria-label"],Ce={key:0,width:"12",height:"12",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},Se={class:"skill-card-body"},$e={class:"skill-card-icon-row"},xe={key:0,class:"skill-installed-dot"},Ie={class:"skill-card-meta"},Le={class:"downloads-count"},Me={class:"skill-card-head"},Be={key:0,class:"search-mark"},Re={class:"version-badge"},Ae={class:"skill-description"},Ee={key:0,class:"search-mark"},Te={key:0,class:"tag-block"},je={key:1,class:"tag-block tag-block-compat"},De={class:"skill-card-footer"},_e={class:"skill-author"},ze={key:0,class:"inferred-chip",title:"Category inferred from id/tags. Add `category:` to the skill manifest to override."},Oe=["disabled"],Ne={key:0,class:"card-spinner","aria-label":"Working"},Pe={key:1,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ve=["disabled"],Fe={key:0,class:"card-spinner","aria-label":"Working"},He=G({__name:"SkillCard",props:{skill:{},onOpen:{type:Function},onInstall:{type:Function},onRemove:{type:Function},onSelectRange:{type:Function},inferredCategory:{type:Boolean},resolvedCategoryId:{}},setup(i){const w=i,C=se(),s=b(()=>C.state.busyCards.has(w.skill.id)),S=b(()=>C.state.searchQuery),h=b(()=>X(w.skill.name,S.value)),m=b(()=>X(w.skill.description,S.value)),k=b(()=>C.state.selectedSkillIds.has(w.skill.id)),g=b(()=>C.state.selectedSkillIds.size>0);function R(v){var l;if(v.shiftKey){v.preventDefault(),(l=window.getSelection())==null||l.removeAllRanges(),w.onSelectRange?w.onSelectRange(w.skill.id):C.toggleSelectedSkill(w.skill.id);return}if(g.value){v.preventDefault(),C.toggleSelectedSkill(w.skill.id);return}w.onOpen(w.skill.id)}function V(v){v.stopPropagation(),C.toggleSelectedSkill(w.skill.id)}const j={workflow:"icon-bg-workflow",testing:"icon-bg-testing",devops:"icon-bg-devops",tools:"icon-bg-tools",security:"icon-bg-security"},F={git:"tag-git",github:"tag-git",commit:"tag-git",testing:"tag-test",jest:"tag-test",tdd:"tag-test",test:"tag-test",docker:"tag-docker",devops:"tag-docker",yaml:"tag-docker",security:"tag-security",owasp:"tag-security",audit:"tag-security",react:"tag-react",hooks:"tag-react",python:"tag-python",docs:"tag-python"};function M(v){const l=v.tags.map(r=>r.toLowerCase());return l.some(r=>["git","github","commit","workflow"].includes(r))?"icon-bg-workflow":l.some(r=>["testing","jest","tdd","test","vitest"].includes(r))?"icon-bg-testing":l.some(r=>["docker","devops","ci","cd"].includes(r))?"icon-bg-devops":l.some(r=>["security","owasp","audit"].includes(r))?"icon-bg-security":l.some(r=>["tools","python","scraper","web"].includes(r))?"icon-bg-tools":j[v.id]??"icon-bg-default"}function I(v){return F[v.toLowerCase()]??"tag-default"}function L(v){const l=v.id.toLowerCase();return l.includes("git")||l.includes("commit")?"๐ฟ":l.includes("test")||l.includes("jest")?"๐งช":l.includes("docker")?"๐ณ":l.includes("security")||l.includes("guard")?"๐ก๏ธ":l.includes("react")?"โ๏ธ":l.includes("python")?"๐":l.includes("typescript")||l.includes("ts")?"๐ท":l.includes("cpp")||l.includes("c++")?"โ๏ธ":l.includes("latex")?"๐":l.includes("create")?"โจ":l.includes("code")||l.includes("review")?"๐":l.includes("error")?"๐":"๐ฆ"}function _(v){const l=(v.author||v.source.repo).trim();if(!l)return"?";const r=l.replace(/[/_-]+/g," ").split(/\s+/).filter(Boolean);return r.length>=2?(r[0][0]+r[1][0]).toUpperCase():r[0].slice(0,2).toUpperCase()}function B(v){const l=(v.author||v.source.repo).trim();let r=0;for(let z=0;z<l.length;z++)r=r*31+l.charCodeAt(z)|0;return`hsl(${Math.abs(r)%360}deg 70% 35%)`}return(v,l)=>(n(),o("article",{class:A(["skill-card",{"is-installed":i.skill.installed,"is-busy":s.value,"is-selected":k.value,"in-selection-mode":g.value}]),onClick:R},[g.value?(n(),o("button",{key:0,type:"button",class:A(["skill-card-checkbox",{checked:k.value}]),"aria-checked":k.value,"aria-label":`${k.value?"Deselect":"Select"} ${i.skill.name}`,role:"checkbox",onClick:P(V,["stop"])},[k.value?(n(),o("svg",Ce,[...l[3]||(l[3]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"3",d:"M5 13l4 4L19 7"},null,-1)])])):f("",!0)],10,we)):f("",!0),t("div",Se,[t("div",$e,[t("div",{class:A(["skill-icon-wrap",M(i.skill)])},[p(d(L(i.skill))+" ",1),i.skill.installed?(n(),o("div",xe,[...l[4]||(l[4]=[t("svg",{fill:"currentColor",viewBox:"0 0 20 20"},[t("path",{"fill-rule":"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z","clip-rule":"evenodd"})],-1)])])):f("",!0)],2),t("div",Ie,[t("span",Le,[l[5]||(l[5]=t("svg",{fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"})],-1)),p(" "+d(i.skill.source.repo),1)])])]),t("div",Me,[t("h3",null,[(n(!0),o(x,null,E(h.value,(r,D)=>(n(),o(x,{key:`name-${D}`},[r.match?(n(),o("mark",Be,d(r.text),1)):(n(),o(x,{key:1},[p(d(r.text),1)],64))],64))),128))]),t("span",Re,"v"+d(i.skill.version),1)]),t("p",Ae,[(n(!0),o(x,null,E(m.value,(r,D)=>(n(),o(x,{key:`desc-${D}`},[r.match?(n(),o("mark",Ee,d(r.text),1)):(n(),o(x,{key:1},[p(d(r.text),1)],64))],64))),128))]),i.skill.tags.length>0?(n(),o("div",Te,[(n(!0),o(x,null,E(i.skill.tags,r=>(n(),o("span",{key:`${i.skill.id}-${r}`,class:A(["skill-tag",I(r)])},d(r),3))),128))])):f("",!0),i.skill.compatibility.length>0?(n(),o("div",je,[(n(!0),o(x,null,E(i.skill.compatibility,r=>(n(),o("span",{key:`${i.skill.id}-${r}`,class:"chip chip-accent",style:{height:"20px","font-size":"10px",padding:"0 8px"}},d(r),1))),128))])):f("",!0)]),t("div",De,[t("div",_e,[t("span",{class:"skill-author-avatar",style:ke({background:B(i.skill)}),"aria-hidden":!0},d(_(i.skill)),5),p(" "+d(i.skill.author||i.skill.source.repo),1)]),t("div",{class:"skill-card-actions",onClick:l[2]||(l[2]=P(()=>{},["stop"]))},[i.inferredCategory?(n(),o("span",ze," (inferred) ")):f("",!0),i.skill.installed?(n(),o(x,{key:1},[l[7]||(l[7]=t("span",{class:"installed-label"},"Installed",-1)),t("button",{class:"remove-btn",type:"button",title:"Remove",disabled:s.value,onClick:l[0]||(l[0]=r=>i.onRemove(i.skill.id))},[s.value?(n(),o("span",Ne)):(n(),o("svg",Pe,[...l[6]||(l[6]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"},null,-1)])]))],8,Oe)],64)):(n(),o("button",{key:2,class:"button button-primary",style:{"min-height":"28px",padding:"0 12px","font-size":"0.75rem"},type:"button",disabled:s.value,onClick:l[1]||(l[1]=r=>i.onInstall(i.skill))},[s.value?(n(),o("span",Fe)):(n(),o(x,{key:1},[l[8]||(l[8]=t("svg",{width:"11",height:"11",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M12 4v16m8-8H4"})],-1)),l[9]||(l[9]=p(" Install ",-1))],64))],8,Ve))])])],2))}}),Ge=K(He,[["__scopeId","data-v-9ad9747c"]]),Ke={class:"page-column"},Qe={class:"panel"},Ue={class:"panel-head",style:{"align-items":"flex-start","flex-wrap":"wrap",gap:"16px"}},qe={key:0,class:"bulk-actions"},We=["disabled","title"],Ye={key:0,class:"bulk-count"},Xe={key:1,class:"bulk-shortcut","aria-hidden":"true"},Je=["disabled","title"],Ze={class:"bulk-count",style:{background:"rgba(16,185,129,0.18)",color:"var(--accent)"}},et=["disabled","title"],tt={key:0,class:"bulk-select-hint"},lt={class:"catalog-overview"},st={class:"overview-card"},nt={class:"overview-card"},ot=["aria-pressed","title"],it={key:0,style:{"font-size":"0.6em",color:"var(--text-dim)","font-weight":"500"}},at={class:"category-pills"},rt=["onClick"],dt={"aria-hidden":"true"},ut={key:0,class:"category-pill-count"},ct=["aria-pressed","title"],kt={key:0,class:"selection-bar",role:"region","aria-label":"Bulk selection"},vt={class:"selection-bar-info"},gt={class:"selection-bar-hint"},ht={class:"selection-bar-actions"},ft=["disabled"],mt=["disabled"],pt={key:0,class:"catalog-grid"},yt={key:1,class:"onboarding-card"},bt={class:"onboarding-text"},wt=["disabled"],Ct={key:2,class:"empty-state"},St={width:"40",height:"40",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",style:{color:"var(--text-dim)","margin-bottom":"4px"},"aria-hidden":"true"},$t={key:0,class:"source-group-head"},xt={key:0,class:"source-group-repo"},It={class:"source-group-count"},Lt={class:"catalog-grid"},Mt=G({__name:"CatalogPage",setup(i){const C=typeof navigator<"u"&&/Mac|iPad|iPhone|iPod/.test(navigator.platform)?"โงโA":"Ctrl+Shift+A",s=se(),S=T("all"),h=T(!1),m=T(!1),k=T(!1),g=T(!1),R=[{id:"all",name:"All",icon:"โฆ"},{id:"code",name:"Code",icon:"๐ป"},{id:"engineering",name:"Engineering",icon:"โก"},{id:"workflow",name:"Workflow",icon:"๐ฟ"},{id:"testing",name:"Testing",icon:"๐งช"},{id:"security",name:"Security",icon:"๐ก๏ธ"},{id:"devops",name:"DevOps",icon:"๐ณ"},{id:"research",name:"Research",icon:"๐"},{id:"data",name:"Data",icon:"๐"},{id:"tools",name:"Tools",icon:"๐ง"},{id:"other",name:"Other",icon:"๐ฆ"}];function V(a,e){const c=[a,...e].map(y=>y.toLowerCase()).join(" ");return/wikipedia|arxiv|pubmed|ncbi|duckduckgo|web-search|web-scraper|research-wikipedia|research-arxiv|research-pubmed/.test(c)?"research":/data-engineer|data-scientist|data-science|machine-learning|\bml\b|etl|elt|\bdbt\b|airflow|pipeline|feature-engineering|data-warehouse|data-modeling/.test(c)?"data":/simulation|mna|z-domain|magnetics|mosfet|igbt|waveform|fft|thd|newton-raphson|psim|schematic|netlist|altium|datasheet|curve-digitization|semiconductor/.test(c)?"engineering":/typescript|python|cpp-pro|c-pro|code-review|error-handling/.test(c)?"code":/git|commit|workflow|branch/.test(c)?"workflow":/test|jest|tdd|vitest|spec/.test(c)?"testing":/security|owasp|audit|guard/.test(c)?"security":/docker|devops|ci|cd|helm/.test(c)?"devops":/pdf|extraction|document|scraper|tool|docs|web/.test(c)?"tools":"other"}function j(a){var c;const e=(c=a.category)==null?void 0:c.trim();return e?{id:e.toLowerCase(),inferred:!1}:{id:V(a.id,a.tags),inferred:!0}}function F(a){var e,c;return a==="all"?((e=s.state.catalog)==null?void 0:e.skills.length)??0:(((c=s.state.catalog)==null?void 0:c.skills)??[]).filter(y=>j(y).id===a).length}const M=b(()=>{var a;return((a=s.state.catalog)==null?void 0:a.skills.length)??0}),I=b(()=>{var a;return((a=s.state.dashboard)==null?void 0:a.installed.length)??0}),L=b(()=>Math.max(0,M.value-I.value)),_=b(()=>{var c,y;const a=new Set((((c=s.state.catalog)==null?void 0:c.skills)??[]).map(u=>u.id)),e=new Set((((y=s.state.dashboard)==null?void 0:y.installed)??[]).map(u=>u.id));return he.filter(u=>a.has(u)&&!e.has(u))}),B=b(()=>{let a=s.filteredSkills.value;return S.value!=="all"&&(a=a.filter(e=>j(e).id===S.value)),h.value&&(a=a.filter(e=>e.installed)),a}),v=b(()=>s.state.catalog===null),l=b(()=>{if(!m.value)return[{key:"_all",label:"",repo:"",skills:B.value}];const a=new Map;for(const e of B.value){const c=`${e.source.repo}@${e.source.ref}`,y=e.source.label||e.source.repo;a.has(c)||a.set(c,{key:c,label:y,repo:e.source.repo,skills:[]}),a.get(c).skills.push(e)}return[...a.values()].sort((e,c)=>e.label.localeCompare(c.label))}),r=b(()=>{var a,e;return(((e=(a=s.state.catalog)==null?void 0:a.sources)==null?void 0:e.length)??0)>1}),D=b(()=>!v.value&&M.value>0&&I.value===0);async function z(){k.value=!1;try{await s.installAll()}catch{}}async function ne(){try{await s.installRecommended()}catch{}}async function oe(){g.value=!1;try{await s.removeAllInstalled()}catch{}}function ie(){s.setSearchQuery(""),S.value="all",h.value=!1}function Q(){L.value===0||s.state.busyLabel||(k.value=!0)}function U(a){if(a.key!=="Escape"||a.defaultPrevented||s.state.selectedSkillIds.size===0||k.value||g.value)return;const e=a.target;e&&(e.tagName==="INPUT"||e.tagName==="TEXTAREA")||(a.preventDefault(),s.clearSelection())}const H=b(()=>s.state.selectedSkillIds.size),q=b(()=>{var c;const a=new Set((((c=s.state.dashboard)==null?void 0:c.installed)??[]).map(y=>y.id));let e=0;for(const y of s.state.selectedSkillIds)a.has(y)||(e+=1);return e}),W=b(()=>{var c;const a=new Set((((c=s.state.dashboard)==null?void 0:c.installed)??[]).map(y=>y.id));let e=0;for(const y of s.state.selectedSkillIds)a.has(y)&&(e+=1);return e});function ae(){s.setSelectedSkills(B.value.map(a=>a.id))}function re(a){s.selectRangeFromAnchor(a,B.value.map(e=>e.id))}async function de(){try{await s.installSelectedSkills()}catch{}}async function ue(){try{await s.removeSelectedSkills()}catch{}}return J(()=>{window.addEventListener("skillex:request-install-all",Q),window.addEventListener("keydown",U)}),Z(()=>{window.removeEventListener("skillex:request-install-all",Q),window.removeEventListener("keydown",U)}),(a,e)=>{var c,y;return n(),o("section",Ke,[t("div",Qe,[t("div",Ue,[e[14]||(e[14]=t("div",{class:"panel-head-title"},[t("p",{class:"eyebrow"},"Discovery"),t("h2",null,"Marketplace"),t("p",null,"Browse skills from your configured catalog sources and install them in your workspace.")],-1)),!v.value&&M.value>0?(n(),o("div",qe,[t("button",{class:"button button-primary",type:"button",disabled:L.value===0||$(s).state.busyLabel!==null,title:L.value===0?"All skills are already installed.":`Install all ${L.value} remaining skill(s) into your workspace. (${$(C)})`,onClick:e[0]||(e[0]=u=>k.value=!0)},[e[9]||(e[9]=t("svg",{width:"14",height:"14",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M12 4v16m8-8H4"})],-1)),e[10]||(e[10]=p(" Install all ",-1)),L.value>0?(n(),o("span",Ye,d(L.value),1)):f("",!0),L.value>0?(n(),o("span",Xe,d($(C)),1)):f("",!0)],8,We),_.value.length>0?(n(),o("button",{key:0,class:"button button-secondary",type:"button",disabled:$(s).state.busyLabel!==null,title:`Install the curated starter pack: ${_.value.join(", ")}`,onClick:ne},[e[11]||(e[11]=t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.539 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.196-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"})],-1)),e[12]||(e[12]=p(" Install recommended ",-1)),t("span",Ze,d(_.value.length),1)],8,Je)):f("",!0),I.value>0?(n(),o("button",{key:1,class:"button button-ghost danger-ghost",type:"button",disabled:$(s).state.busyLabel!==null,title:`Remove all ${I.value} installed skill(s) from your workspace.`,onClick:e[1]||(e[1]=u=>g.value=!0)},[e[13]||(e[13]=t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)),p(" Remove all ("+d(I.value)+") ",1)],8,et)):f("",!0)])):f("",!0)]),!v.value&&M.value>0&&H.value===0?(n(),o("p",tt,[...e[15]||(e[15]=[t("kbd",null,"Shift",-1),p(" + click any card to start a multi-select. Hold ",-1),t("kbd",null,"Shift",-1),p(" on a second card to select the range between them. ",-1)])])):f("",!0),t("div",lt,[t("article",st,[e[16]||(e[16]=t("span",null,"Visible",-1)),t("strong",null,d(B.value.length),1)]),t("article",nt,[e[17]||(e[17]=t("span",null,"Sources",-1)),t("strong",null,d(((c=$(s).state.catalog)==null?void 0:c.sources.length)??0),1)]),t("article",{class:A(["overview-card overview-card-clickable",{active:h.value}]),role:"button",tabindex:"0","aria-pressed":h.value,title:h.value?"Showing installed only โ click to clear":"Click to filter installed only",onClick:e[2]||(e[2]=u=>h.value=!h.value),onKeydown:e[3]||(e[3]=ve(P(u=>h.value=!h.value,["prevent"]),["enter","space"]))},[e[18]||(e[18]=t("span",null,"Installed",-1)),t("strong",null,[p(d(I.value),1),I.value>0?(n(),o("span",it," / "+d(M.value),1)):f("",!0)])],42,ot)]),t("div",at,[(n(),o(x,null,E(R,u=>t("button",{key:u.id,class:A(["category-pill",{active:S.value===u.id}]),type:"button",onClick:O=>S.value=u.id},[t("span",dt,d(u.icon),1),p(" "+d(u.name)+" ",1),u.id!=="all"?(n(),o("span",ut,d(F(u.id)),1)):f("",!0)],10,rt)),64)),r.value?(n(),o("button",{key:0,class:A(["category-pill group-toggle",{active:m.value}]),type:"button","aria-pressed":m.value,title:m.value?"Click to flatten the grid":"Group skills by their catalog source",onClick:e[4]||(e[4]=u=>m.value=!m.value)},[...e[19]||(e[19]=[t("svg",{width:"11",height:"11",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 6h16M4 12h16M4 18h7"})],-1),p(" Group by source ",-1)])],10,ct)):f("",!0)])]),N(le,{name:"selection-bar"},{default:te(()=>[H.value>0?(n(),o("div",kt,[t("div",vt,[t("strong",null,d(H.value)+" selected",1),t("span",gt,[e[20]||(e[20]=p(" Shift+click cards to add/remove ยท ",-1)),t("button",{type:"button",class:"link-button",onClick:ae},"Select all visible ("+d(B.value.length)+")",1)])]),t("div",ht,[q.value>0?(n(),o("button",{key:0,class:"button button-primary",type:"button",disabled:$(s).state.busyLabel!==null,onClick:de},[e[21]||(e[21]=t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M12 4v16m8-8H4"})],-1)),p(" Install "+d(q.value),1)],8,ft)):f("",!0),W.value>0?(n(),o("button",{key:1,class:"button button-danger",type:"button",disabled:$(s).state.busyLabel!==null,onClick:ue},[e[22]||(e[22]=t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)),p(" Remove "+d(W.value),1)],8,mt)):f("",!0),t("button",{class:"button button-ghost",type:"button",title:"Clear selection (Esc)",onClick:e[5]||(e[5]=u=>$(s).clearSelection())}," Clear ")])])):f("",!0)]),_:1}),v.value?(n(),o("div",pt,[(n(),o(x,null,E(6,u=>N(ge,{key:`skeleton-${u}`,variant:"card"})),64))])):D.value&&!h.value&&S.value==="all"&&!$(s).state.searchQuery?(n(),o("div",yt,[e[25]||(e[25]=t("div",{class:"onboarding-icon","aria-hidden":"true"},[t("svg",{width:"32",height:"32",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.8",d:"M9 12l2 2 4-4m5 2a9 9 0 11-18 0 9 9 0 0118 0z"})])],-1)),t("div",bt,[e[23]||(e[23]=t("strong",null,"Your workspace is set up. Install your first skill.",-1)),t("p",null,d(M.value)+" skill(s) are available across "+d(((y=$(s).state.catalog)==null?void 0:y.sources.length)??0)+" source(s). Pick one below, or install everything at once.",1)]),t("button",{class:"button button-primary",type:"button",disabled:$(s).state.busyLabel!==null,onClick:e[6]||(e[6]=u=>k.value=!0)},[e[24]||(e[24]=t("svg",{width:"14",height:"14",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M12 4v16m8-8H4"})],-1)),p(" Install all "+d(M.value)+" skills ",1)],8,wt)])):B.value.length===0?(n(),o("div",Ct,[(n(),o("svg",St,[...e[26]||(e[26]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"},null,-1)])])),e[29]||(e[29]=t("strong",null,"No skills match your filters",-1)),t("p",null,[e[27]||(e[27]=p(" Try a different category or search term, or ",-1)),t("button",{type:"button",class:"link-button",onClick:ie},"clear all filters"),e[28]||(e[28]=p(". ",-1))])])):(n(!0),o(x,{key:3},E(l.value,u=>(n(),o(x,{key:u.key},[m.value&&u.label?(n(),o("div",$t,[e[30]||(e[30]=t("span",{class:"source-group-icon","aria-hidden":"true"},"๐ฆ",-1)),t("strong",null,d(u.label),1),u.label!==u.repo?(n(),o("code",xt,d(u.repo),1)):f("",!0),t("span",It,d(u.skills.length)+" skill(s)",1)])):f("",!0),t("div",Lt,[(n(!0),o(x,null,E(u.skills,O=>(n(),ee(Ge,{key:`${u.key}-${O.id}`,skill:O,"inferred-category":j(O).inferred,"resolved-category-id":j(O).id,"on-open":$(s).navigateToSkill,"on-install":$(s).installSkill,"on-remove":$(s).removeSkill,"on-select-range":re},null,8,["skill","inferred-category","resolved-category-id","on-open","on-install","on-remove"]))),128))])],64))),128)),N(Y,{open:k.value,title:"Install every skill in the catalog?",message:`This will download and install ${L.value} skill(s) into your workspace. The active agent will be auto-synced when finished.`,"confirm-label":"Install all",onConfirm:z,onCancel:e[7]||(e[7]=u=>k.value=!1)},null,8,["open","message"]),N(Y,{open:g.value,tone:"danger",title:"Remove every installed skill?",message:`This will remove ${I.value} skill(s) from your workspace. Synced adapter targets will be cleaned up automatically. This cannot be undone (you can reinstall via 'Install all').`,"confirm-label":"Remove all",onConfirm:oe,onCancel:e[8]||(e[8]=u=>g.value=!1)},null,8,["open","message"])])}}}),Et=K(Mt,[["__scopeId","data-v-552dec63"]]);export{Et as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.confirm-backdrop[data-v-2119c01b]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:200;padding:16px}.confirm-card[data-v-2119c01b]{background:var(--bg-elevated);border:1px solid var(--line-strong);border-radius:var(--radius-xl);padding:24px;width:100%;max-width:440px;box-shadow:var(--shadow);animation:confirm-pop-2119c01b .18s ease}.confirm-title[data-v-2119c01b]{margin:0 0 8px;font-size:1.05rem;font-weight:700;color:var(--text)}.confirm-message[data-v-2119c01b]{margin:0 0 20px;color:var(--text-muted);font-size:.875rem;line-height:1.5}.confirm-actions[data-v-2119c01b]{display:flex;gap:8px;justify-content:flex-end}@keyframes confirm-pop-2119c01b{0%{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}.confirm-enter-active[data-v-2119c01b],.confirm-leave-active[data-v-2119c01b]{transition:opacity .16s ease}.confirm-enter-from[data-v-2119c01b],.confirm-leave-to[data-v-2119c01b]{opacity:0}.skill-card.is-busy[data-v-9ad9747c]{opacity:.65;filter:saturate(.7);pointer-events:none}.skill-card.is-busy .skill-card-actions[data-v-9ad9747c]{pointer-events:auto}.card-spinner[data-v-9ad9747c]{display:inline-block;width:12px;height:12px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:card-spin-9ad9747c .7s linear infinite}@keyframes card-spin-9ad9747c{to{transform:rotate(360deg)}}.inferred-chip[data-v-9ad9747c]{font-size:9px;padding:2px 6px;border-radius:999px;border:1px dashed rgba(82,82,91,.6);color:var(--text-dim);letter-spacing:.04em}.search-mark[data-v-9ad9747c]{background:#10b98138;color:#fff;border-radius:3px;padding:0 2px;font-weight:inherit}.skill-card-checkbox[data-v-9ad9747c]{position:absolute;top:10px;left:10px;width:22px;height:22px;border-radius:6px;border:1.5px solid var(--line-strong);background:#18181bd9;color:#fff;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;z-index:5;transition:background .12s,border-color .12s}.skill-card-checkbox[data-v-9ad9747c]:hover{border-color:var(--accent-ring)}.skill-card-checkbox.checked[data-v-9ad9747c]{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}.skill-card-checkbox[data-v-9ad9747c]:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.skill-card.is-selected[data-v-9ad9747c]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),var(--shadow-soft)}.skill-card.in-selection-mode[data-v-9ad9747c]{transition:border-color .15s,box-shadow .15s,transform .15s}.bulk-actions[data-v-552dec63]{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.bulk-count[data-v-552dec63]{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:18px;padding:0 6px;margin-left:4px;border-radius:999px;background:#ffffff2e;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;color:#fff}.bulk-shortcut[data-v-552dec63]{margin-left:6px;padding:2px 6px;border-radius:6px;background:#00000038;font-family:monospace;font-size:10px;font-weight:600;color:#ffffffd9}@media(max-width:900px){.bulk-shortcut[data-v-552dec63]{display:none}}.danger-ghost[data-v-552dec63]{color:var(--danger);border-color:#f871714d}.danger-ghost[data-v-552dec63]:hover:not(:disabled){background:var(--danger-soft);border-color:#f8717180}.overview-card-clickable[data-v-552dec63]{cursor:pointer;transition:border-color .15s,background .15s;outline:none}.overview-card-clickable[data-v-552dec63]:hover,.overview-card-clickable[data-v-552dec63]:focus-visible{border-color:var(--accent-ring)}.overview-card-clickable.active[data-v-552dec63]{border-color:var(--accent);background:var(--accent-soft)}.onboarding-card[data-v-552dec63]{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center;padding:20px 24px;border-radius:var(--radius-xl);border:1px solid var(--accent-ring);background:linear-gradient(135deg,var(--accent-soft) 0%,rgba(16,185,129,.04) 100%)}.onboarding-icon[data-v-552dec63]{width:48px;height:48px;border-radius:50%;background:var(--accent-soft);border:1px solid var(--accent-ring);display:flex;align-items:center;justify-content:center;color:var(--accent)}.onboarding-text strong[data-v-552dec63]{display:block;font-size:.95rem;color:var(--text);margin-bottom:2px}.onboarding-text p[data-v-552dec63]{margin:0;font-size:.8rem;color:var(--text-muted)}.link-button[data-v-552dec63]{background:none;border:0;padding:0;color:var(--accent);font:inherit;text-decoration:underline;cursor:pointer}.link-button[data-v-552dec63]:hover{color:var(--accent-hover)}.group-toggle[data-v-552dec63]{margin-left:auto;display:inline-flex;align-items:center;gap:6px}.source-group-head[data-v-552dec63]{display:flex;align-items:center;gap:10px;padding:14px 4px 8px;border-bottom:1px solid var(--line);margin-top:8px}.source-group-head strong[data-v-552dec63]{color:var(--text);font-size:.92rem}.source-group-icon[data-v-552dec63]{font-size:1.05rem}.source-group-repo[data-v-552dec63]{font-family:monospace;font-size:11px;color:var(--text-dim);background:#27272a80;padding:2px 6px;border-radius:6px}.source-group-count[data-v-552dec63]{margin-left:auto;font-size:11px;color:var(--text-dim)}.selection-bar[data-v-552dec63]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding:12px 18px;border-radius:var(--radius-lg);border:1px solid var(--accent);background:linear-gradient(135deg,var(--accent-soft) 0%,rgba(16,185,129,.04) 100%);position:sticky;top:8px;z-index:20;box-shadow:var(--shadow-soft)}.selection-bar-info strong[data-v-552dec63]{color:var(--accent);font-size:.95rem}.selection-bar-hint[data-v-552dec63]{display:block;margin-top:2px;font-size:.75rem;color:var(--text-muted)}.selection-bar-hint .link-button[data-v-552dec63]{font-size:.75rem}.selection-bar-actions[data-v-552dec63]{display:flex;gap:6px;flex-wrap:wrap}.selection-bar-enter-active[data-v-552dec63],.selection-bar-leave-active[data-v-552dec63]{transition:opacity .18s ease,transform .18s ease}.selection-bar-enter-from[data-v-552dec63],.selection-bar-leave-to[data-v-552dec63]{opacity:0;transform:translateY(-6px)}.bulk-select-hint[data-v-552dec63]{margin:4px 0 12px;font-size:11px;color:var(--text-dim);display:flex;align-items:center;gap:6px}.bulk-select-hint kbd[data-v-552dec63]{font-family:monospace;font-size:10px;padding:1px 5px;border:1px solid var(--line-strong);border-radius:4px;background:var(--bg-elevated);color:var(--text-muted)}@media(max-width:680px){.bulk-select-hint[data-v-552dec63]{display:none}}@media(max-width:680px){.onboarding-card[data-v-552dec63]{grid-template-columns:1fr;text-align:center}.onboarding-icon[data-v-552dec63]{margin:0 auto}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{S as _}from"./Skeleton-B_xm5L3P.js";import{d as f,u as h,o as k,f as t,h as e,j as y,t as l,i as d,F as m,k as v,r as u,s as b,l as S,e as s}from"./index-I0b-syhc.js";const w={class:"doctor-page",style:{padding:"24px",display:"grid",gap:"16px"}},z={class:"panel",style:{padding:"20px"}},D={style:{"margin-top":"12px",display:"flex",gap:"8px","align-items":"center"}},F=["disabled"],N={key:0},V={key:1},B={key:0,style:{"font-size":"12px",color:"var(--text-dim)"}},C={style:{"font-family":"monospace"}},E={key:0,class:"status-banner","data-tone":"error"},R={key:1,class:"panel",style:{padding:"8px",display:"grid",gap:"8px"}},j={key:2,class:"panel",style:{padding:"0",overflow:"hidden"}},A=["data-status"],H={style:{"font-family":"monospace","font-size":"12px",color:"var(--text)"}},L={style:{margin:"0",color:"var(--text)","font-size":"13px"}},M={key:0,style:{margin:"6px 0 0",color:"var(--text-dim)","font-size":"12px"}},P={key:3,class:"status-banner","data-tone":"success"},q=f({__name:"DoctorPage",setup(T){const g=h(),o=u(null),p=u(null),i=u(!1);async function c(){i.value=!0,p.value=null;try{o.value=await g.loadDoctor()}catch(r){p.value=r instanceof Error?r.message:String(r)}finally{i.value=!1}}k(c);function x(r){return r==="fail"?"โ":r==="warn"?"โ ":"โ"}return(r,n)=>(s(),t("section",w,[e("header",z,[n[0]||(n[0]=e("p",{class:"eyebrow"},"Diagnostics",-1)),n[1]||(n[1]=e("h2",{style:{margin:"6px 0 4px"}},"Doctor",-1)),n[2]||(n[2]=e("p",{style:{margin:"0",color:"var(--text-dim)","font-size":"13px"}}," Six health checks for the workspace and your environment. ",-1)),e("div",D,[e("button",{class:"button button-primary",type:"button",disabled:i.value,onClick:c},[i.value?(s(),t("span",N,"Running...")):(s(),t("span",V,"Re-run checks"))],8,F),o.value?(s(),t("span",B,[y(" Scope: "+l(o.value.scope)+" ยท State: ",1),e("code",C,l(o.value.stateDir),1)])):d("",!0)])]),p.value?(s(),t("div",E,l(p.value),1)):d("",!0),i.value&&!o.value?(s(),t("div",R,[(s(),t(m,null,v(4,a=>b(_,{key:`doctor-skel-${a}`,variant:"row"})),64))])):o.value?(s(),t("div",j,[(s(!0),t(m,null,v(o.value.checks,a=>(s(),t("div",{key:a.name,"data-status":a.status,style:{display:"grid","grid-template-columns":"32px 110px 1fr",gap:"14px",padding:"14px 18px","border-bottom":"1px solid rgba(63,63,70,0.3)","align-items":"start"}},[e("span",{style:S({fontWeight:700,color:a.status==="fail"?"var(--danger)":a.status==="warn"?"#facc15":"var(--success, #34d399)"})},l(x(a.status)),5),e("strong",H,l(a.name),1),e("div",null,[e("p",L,l(a.message),1),a.hint?(s(),t("p",M,[n[3]||(n[3]=e("strong",{style:{color:"var(--text-muted)"}},"Hint:",-1)),y(" "+l(a.hint),1)])):d("",!0)])],8,A))),128))])):d("",!0),o.value&&!o.value.hasFailures?(s(),t("div",P," All checks passed. ")):d("",!0)]))}});export{q as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as p,f as i,h as s,x as n,e as a}from"./index-I0b-syhc.js";const r=(t,l)=>{const e=t.__vccOpts||t;for(const[d,o]of l)e[d]=o;return e},c={key:0,class:"skeleton skeleton-row"},v={key:1,class:"skeleton skeleton-card"},h=p({__name:"Skeleton",props:{variant:{}},setup(t){return(l,e)=>t.variant==="row"?(a(),i("div",c,[...e[0]||(e[0]=[s("div",{class:"skeleton-pill",style:{width:"18px",height:"18px"}},null,-1),s("div",{class:"skeleton-pill",style:{width:"80px",height:"14px"}},null,-1),s("div",{class:"skeleton-pill",style:{flex:"1",height:"14px"}},null,-1)])])):(a(),i("article",v,[...e[1]||(e[1]=[n('<div class="skeleton-pill" style="width:48px;height:48px;border-radius:12px;" data-v-cb55574f></div><div class="skeleton-pill" style="width:65%;height:18px;" data-v-cb55574f></div><div class="skeleton-pill" style="width:90%;height:12px;" data-v-cb55574f></div><div class="skeleton-pill" style="width:75%;height:12px;" data-v-cb55574f></div><div style="display:flex;gap:6px;margin-top:8px;" data-v-cb55574f><div class="skeleton-pill" style="width:60px;height:20px;border-radius:999px;" data-v-cb55574f></div><div class="skeleton-pill" style="width:48px;height:20px;border-radius:999px;" data-v-cb55574f></div><div class="skeleton-pill" style="width:80px;height:20px;border-radius:999px;" data-v-cb55574f></div></div><div class="skeleton-pill" style="width:100%;height:36px;border-radius:10px;margin-top:12px;" data-v-cb55574f></div>',6)])]))}}),k=r(h,[["__scopeId","data-v-cb55574f"]]);export{k as S,r as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.skeleton[data-v-cb55574f]{border:1px solid rgba(63,63,70,.4);border-radius:14px;background:#18181b99;display:flex}.skeleton-card[data-v-cb55574f]{flex-direction:column;gap:10px;padding:18px;min-height:230px}.skeleton-row[data-v-cb55574f]{flex-direction:row;align-items:center;gap:14px;padding:14px 18px}.skeleton-pill[data-v-cb55574f]{background:linear-gradient(90deg,#3f3f4673,#52525ba6,#3f3f4673);background-size:200% 100%;border-radius:6px;animation:skeleton-shimmer-cb55574f 1.4s ease-in-out infinite}@keyframes skeleton-shimmer-cb55574f{0%{background-position:200% 0}to{background-position:-200% 0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as $,v as N,u as z,w as R,o as T,f as i,h as t,p,j as h,i as c,t as o,F as k,s as m,x as D,l as E,k as b,m as w,e as a}from"./index-I0b-syhc.js";import{S as g,_ as Y}from"./Skeleton-B_xm5L3P.js";const A={class:"page-column"},F={class:"panel"},P={class:"detail-topbar"},K={class:"breadcrumbs","aria-label":"Breadcrumb"},O={key:0,class:"breadcrumb-sep","aria-hidden":"true"},U={key:1,class:"breadcrumb-segment"},q={class:"breadcrumb-current","aria-current":"page"},G={key:0,class:"detail-hero"},J={class:"detail-description"},Q={class:"detail-actions"},W=["title"],X={class:"panel detail-skeleton-grid"},Z={class:"panel"},tt={class:"detail-metadata-grid"},et={class:"metadata-card"},st={style:{"font-family":"monospace","font-size":"0.82rem"}},lt={class:"metadata-card"},it={class:"metadata-card"},at={style:{"font-family":"monospace"}},ot={class:"metadata-card"},nt={class:"detail-chip-sections"},rt={class:"chip-row"},dt={key:0,style:{"font-size":"0.8rem",color:"var(--text-dim)"}},ut={class:"chip-row"},ct={key:0,style:{"font-size":"0.8rem",color:"var(--text-dim)"}},pt={class:"panel"},vt={key:0,class:"error-card",style:{margin:"0 20px 20px"}},kt=["innerHTML"],ht={key:0,class:"panel"},mt={class:"related-grid"},bt={key:1,class:"panel"},gt={class:"panel-head"},yt={class:"panel-head-title"},wt={class:"related-grid"},_t=["title","onClick"],ft={class:"related-card-head"},xt={key:0,class:"related-installed-mark","aria-label":"Installed"},Ct={class:"related-card-tags"},St=$({__name:"SkillDetailPage",setup(Lt){const C=N(),r=z(),y=w(()=>typeof C.params.skillId=="string"?C.params.skillId:""),s=w(()=>r.state.detail);async function S(){y.value&&await r.loadSkillDetail(y.value)}R(y,()=>void S()),T(()=>void S());const _=w(()=>{var l,v;const u=(l=s.value)==null?void 0:l.skill;if(!u)return null;const e=(v=u.category)==null?void 0:v.trim();if(e)return e;const d=[u.id,...u.tags].join(" ").toLowerCase();return/git|commit|workflow|branch/.test(d)?"workflow":/test|jest|tdd|vitest|spec/.test(d)?"testing":/security|owasp|audit|guard/.test(d)?"security":/typescript|python|cpp-pro|c-pro|code-review|error-handling/.test(d)?"code":/docker|devops|ci|cd|helm/.test(d)?"devops":/wikipedia|arxiv|pubmed|web-search|web-scraper|research/.test(d)?"research":null}),f=w(()=>{var L,M,I;const u=(L=s.value)==null?void 0:L.skill;if(!u)return[];const e=((M=r.state.catalog)==null?void 0:M.skills)??[];if(e.length===0)return[];const d=new Set(u.tags.map(n=>n.toLowerCase())),l=(I=u.category)==null?void 0:I.trim().toLowerCase();return e.filter(n=>n.id!==u.id).map(n=>{var B;const x=n.tags.reduce((j,H)=>j+(d.has(H.toLowerCase())?1:0),0),V=l&&((B=n.category)==null?void 0:B.trim().toLowerCase())===l?.5:0;return{skill:n,score:x+V}}).filter(n=>n.score>0).sort((n,x)=>x.score-n.score).slice(0,4).map(n=>n.skill)});return(u,e)=>{var d;return a(),i("section",A,[t("div",F,[t("div",P,[t("nav",K,[t("button",{class:"breadcrumb-link",type:"button",onClick:e[0]||(e[0]=l=>p(r).navigateHome())},[...e[5]||(e[5]=[t("svg",{width:"12",height:"12",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 12l9-9 9 9M5 10v10a1 1 0 001 1h3v-6h6v6h3a1 1 0 001-1V10"})],-1),h(" Catalog ",-1)])]),_.value?(a(),i("span",O,"/")):c("",!0),_.value?(a(),i("span",U,o(_.value),1)):c("",!0),e[6]||(e[6]=t("span",{class:"breadcrumb-sep","aria-hidden":"true"},"/",-1)),t("span",q,o(((d=s.value)==null?void 0:d.skill.name)??y.value),1)])]),s.value?(a(),i("div",G,[t("div",null,[e[7]||(e[7]=t("p",{class:"eyebrow"},"Skill",-1)),t("h2",null,o(s.value.skill.name),1),t("p",J,o(s.value.skill.description),1)]),t("div",Q,[t("button",{class:"button button-ghost",type:"button",onClick:e[1]||(e[1]=l=>p(r).syncNow()),title:"Re-sync this workspace's adapters"},[...e[8]||(e[8]=[t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})],-1),h(" Sync ",-1)])]),s.value.skill.installed?(a(),i("button",{key:0,class:"button button-secondary",type:"button",title:`Re-fetch ${s.value.skill.id} from its source`,onClick:e[2]||(e[2]=l=>p(r).updateSkill(s.value.skill.id))},[...e[9]||(e[9]=[t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M16 12a4 4 0 11-8 0 4 4 0 018 0zM12 8V4m0 16v-4m4-4h4M4 12h4"})],-1),h(" Update ",-1)])],8,W)):c("",!0),s.value.skill.installed?(a(),i("button",{key:2,class:"button button-danger",type:"button",onClick:e[4]||(e[4]=l=>p(r).removeSkill(s.value.skill.id))},[...e[11]||(e[11]=[t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1),h(" Remove ",-1)])])):(a(),i("button",{key:1,class:"button button-primary",type:"button",onClick:e[3]||(e[3]=l=>p(r).installSkill(s.value.skill))},[...e[10]||(e[10]=[t("svg",{width:"13",height:"13",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M12 4v16m8-8H4"})],-1),h(" Install ",-1)])]))])])):c("",!0)]),p(r).state.detailLoading&&!s.value?(a(),i(k,{key:0},[t("div",X,[m(g,{variant:"row"}),m(g,{variant:"row"}),m(g,{variant:"row"}),m(g,{variant:"row"})]),e[12]||(e[12]=D('<div class="panel" style="padding:18px;display:grid;gap:10px;" data-v-e10b653b><div class="skeleton-pill" style="width:30%;height:12px;border-radius:6px;" data-v-e10b653b></div><div class="skeleton-pill" style="width:90%;height:14px;border-radius:6px;" data-v-e10b653b></div><div class="skeleton-pill" style="width:80%;height:14px;border-radius:6px;" data-v-e10b653b></div><div class="skeleton-pill" style="width:60%;height:14px;border-radius:6px;" data-v-e10b653b></div><div class="skeleton-pill" style="width:75%;height:14px;border-radius:6px;" data-v-e10b653b></div></div>',1))],64)):s.value?(a(),i(k,{key:1},[t("div",Z,[t("div",tt,[t("article",et,[e[13]||(e[13]=t("span",null,"Skill ID",-1)),t("strong",st,o(s.value.skill.id),1)]),t("article",lt,[e[14]||(e[14]=t("span",null,"Source",-1)),t("strong",null,o(s.value.skill.source.label||s.value.skill.source.repo),1)]),t("article",it,[e[15]||(e[15]=t("span",null,"Version",-1)),t("strong",at,"v"+o(s.value.skill.version),1)]),t("article",ot,[e[16]||(e[16]=t("span",null,"Installed",-1)),t("strong",{style:E(s.value.skill.installed?"color:var(--accent)":"color:var(--text-muted)")},o(s.value.skill.installed?"โ Yes":"No"),5)])]),t("div",nt,[t("div",null,[e[17]||(e[17]=t("p",{class:"section-label",style:{margin:"0 0 8px",display:"block"}},"Tags",-1)),t("div",rt,[(a(!0),i(k,null,b(s.value.skill.tags,l=>(a(),i("span",{key:l,class:"chip"},o(l),1))),128)),s.value.skill.tags.length===0?(a(),i("span",dt,"โ")):c("",!0)])]),t("div",null,[e[18]||(e[18]=t("p",{class:"section-label",style:{margin:"0 0 8px",display:"block"}},"Compatibility",-1)),t("div",ut,[(a(!0),i(k,null,b(s.value.skill.compatibility,l=>(a(),i("span",{key:l,class:"chip chip-accent"},o(l),1))),128)),s.value.skill.compatibility.length===0?(a(),i("span",ct,"โ")):c("",!0)])])])]),t("div",pt,[e[20]||(e[20]=t("div",{class:"panel-head"},[t("div",{class:"panel-head-title"},[t("p",{class:"eyebrow"},"Instructions"),t("h2",null,"SKILL.md"),t("p",null,"Content rendered by the backend.")])],-1)),s.value.instructionsError?(a(),i("div",vt,[e[19]||(e[19]=t("strong",null,"Instructions unavailable",-1)),t("p",null,o(s.value.instructionsError),1)])):(a(),i("article",{key:1,class:"markdown-body",innerHTML:s.value.instructionsHtml},null,8,kt))]),f.value.length===0&&p(r).state.catalog===null?(a(),i("div",ht,[e[21]||(e[21]=t("div",{class:"panel-head"},[t("div",{class:"panel-head-title"},[t("p",{class:"eyebrow"},"You might also like"),t("h2",null,"Related skills")])],-1)),t("div",mt,[(a(),i(k,null,b(4,l=>m(g,{key:`related-skel-${l}`,variant:"card"})),64))])])):f.value.length>0?(a(),i("div",bt,[t("div",gt,[t("div",yt,[e[22]||(e[22]=t("p",{class:"eyebrow"},"You might also like",-1)),e[23]||(e[23]=t("h2",null,"Related skills",-1)),t("p",null,"Suggested by shared tags"+o(s.value.skill.category?" and category":"")+".",1)])]),t("div",wt,[(a(!0),i(k,null,b(f.value,l=>(a(),i("button",{key:l.id,class:"related-card",type:"button",title:l.description,onClick:v=>p(r).navigateToSkill(l.id)},[t("div",ft,[t("strong",null,o(l.name),1),l.installed?(a(),i("span",xt,"โ")):c("",!0)]),t("p",null,o(l.description),1),t("div",Ct,[(a(!0),i(k,null,b(l.tags.slice(0,3),v=>(a(),i("span",{key:v,class:"chip",style:{height:"18px","font-size":"9px",padding:"0 6px"}},o(v),1))),128))])],8,_t))),128))])])):c("",!0)],64)):c("",!0)])}}}),Bt=Y(St,[["__scopeId","data-v-e10b653b"]]);export{Bt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.related-grid[data-v-e10b653b]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;padding:0 20px 20px}.related-card[data-v-e10b653b]{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border-radius:var(--radius-md);border:1px solid var(--line);background:#18181b8c;text-align:left;cursor:pointer;transition:border-color .15s,background .15s,transform .15s}.related-card[data-v-e10b653b]:hover{border-color:var(--accent-ring);background:#27272ab3;transform:translateY(-1px)}.related-card[data-v-e10b653b]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.related-card-head[data-v-e10b653b]{display:flex;align-items:center;gap:6px}.related-card-head strong[data-v-e10b653b]{color:var(--text);font-size:.85rem}.related-installed-mark[data-v-e10b653b]{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:10px;font-weight:700}.related-card p[data-v-e10b653b]{margin:0;color:var(--text-muted);font-size:.78rem;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.related-card-tags[data-v-e10b653b]{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}.breadcrumbs[data-v-e10b653b]{display:flex;align-items:center;gap:6px;font-size:.78rem;color:var(--text-dim)}.breadcrumb-link[data-v-e10b653b]{display:inline-flex;align-items:center;gap:5px;background:none;border:0;padding:4px 8px;border-radius:6px;color:var(--text-muted);font:inherit;cursor:pointer;transition:background .12s,color .12s}.breadcrumb-link[data-v-e10b653b]:hover{background:var(--bg-hover);color:var(--text)}.breadcrumb-link[data-v-e10b653b]:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.breadcrumb-sep[data-v-e10b653b]{color:var(--text-dim);-webkit-user-select:none;user-select:none}.breadcrumb-segment[data-v-e10b653b]{text-transform:capitalize;color:var(--text-muted)}.breadcrumb-current[data-v-e10b653b]{color:var(--text);font-weight:500;max-width:320px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.detail-skeleton-grid[data-v-e10b653b]{padding:14px;display:grid;gap:8px}.skeleton-pill[data-v-e10b653b]{background:linear-gradient(90deg,#3f3f4673,#52525ba6,#3f3f4673);background-size:200% 100%;animation:detail-shimmer-e10b653b 1.4s ease-in-out infinite}@keyframes detail-shimmer-e10b653b{0%{background-position:200% 0}to{background-position:-200% 0}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
*,*:before,*:after{box-sizing:border-box}html,body,#app{margin:0;height:100%;min-height:100%}button,input,select{font:inherit}a{color:inherit;text-decoration:none}:root{--bg: #1a1a1f;--bg-panel: rgba(30, 30, 36, .8);--bg-elevated: #242429;--bg-hover: rgba(52, 52, 60, .65);--line: rgba(80, 80, 92, .55);--line-strong: rgba(105, 105, 118, .75);--text: #f0f0f3;--text-muted: #9898a8;--text-dim: #70707e;--accent: #10b981;--accent-hover: #34d399;--accent-soft: rgba(16, 185, 129, .12);--accent-ring: rgba(16, 185, 129, .25);--danger: #f87171;--danger-soft: rgba(248, 113, 113, .1);--danger-ring: rgba(239, 68, 68, .25);--warn: #fbbf24;--warn-soft: rgba(251, 191, 36, .1);--radius-xl: 18px;--radius-lg: 14px;--radius-md: 10px;--radius-sm: 8px;--shadow: 0 8px 32px rgba(0, 0, 0, .5);--shadow-soft: 0 4px 16px rgba(0, 0, 0, .3);font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif;color-scheme:dark}body{background:var(--bg);color:var(--text);overflow:hidden;height:100vh}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(circle,rgba(255,255,255,.035) 1px,transparent 1px);background-size:24px 24px;pointer-events:none;z-index:0}.app-shell{position:relative;display:flex;height:100vh;overflow:hidden;z-index:1}.shell-background{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0}.shell-glow{position:absolute;border-radius:50%;filter:blur(1px)}.shell-glow-left{width:600px;height:600px;top:-150px;left:-150px;background:radial-gradient(circle,rgba(16,185,129,.07) 0%,transparent 70%)}.shell-glow-right{width:500px;height:500px;bottom:-100px;right:-100px;background:radial-gradient(circle,rgba(99,102,241,.05) 0%,transparent 70%)}.shell-grid{display:none}.sidebar{width:232px;flex-shrink:0;display:flex;flex-direction:column;background:#18181b80;border-right:1px solid var(--line);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);z-index:2;overflow-y:auto}.sidebar-logo{height:56px;display:flex;align-items:center;padding:0 20px;border-bottom:1px solid var(--line);gap:8px;font-size:1rem;font-weight:700;color:#fff;letter-spacing:-.02em;flex-shrink:0}.sidebar-logo svg{color:var(--accent);filter:drop-shadow(0 0 6px rgba(16,185,129,.5))}.sidebar-logo .accent-dot{color:var(--accent)}.sidebar-nav{padding:12px;display:flex;flex-direction:column;gap:2px;flex:1}.nav-section-label{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--text-dim);padding:0 10px;margin:12px 0 4px}.nav-section-label:first-child{margin-top:4px}.nav-btn{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--radius-md);border:1px solid transparent;background:transparent;color:var(--text-muted);font-size:.875rem;font-weight:500;cursor:pointer;width:100%;text-align:left;transition:background .15s,color .15s,border-color .15s}.nav-btn svg{flex-shrink:0;opacity:.7}.nav-btn:hover{background:var(--bg-hover);color:var(--text)}.nav-btn:hover svg{opacity:1}.nav-btn.active{background:var(--bg-elevated);color:#fff;border-color:var(--line-strong)}.nav-btn.active svg{opacity:1}.nav-badge{margin-left:auto;background:var(--accent-soft);border:1px solid rgba(16,185,129,.25);color:var(--accent);font-size:10px;font-weight:700;padding:1px 6px;border-radius:999px;font-variant-numeric:tabular-nums}.sidebar-footer{padding:12px;border-top:1px solid var(--line);flex-shrink:0}.adapter-badge{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-md);background:#27272a80;border:1px solid rgba(63,63,70,.4)}.adapter-badge-icon{font-size:1.25rem;line-height:1}.adapter-badge-info{flex:1;min-width:0}.adapter-badge-label{font-size:10px;color:var(--text-dim);line-height:1;margin-bottom:3px}.adapter-badge-name{font-size:.8rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.adapter-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0;box-shadow:0 0 6px #10b98199;animation:pulse-dot 2s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.5}}.sidebar-meta{display:flex;justify-content:space-between;padding:8px 12px 0;font-size:11px;color:var(--text-dim)}.main-col{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;position:relative;z-index:1}.topbar{height:56px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 24px;border-bottom:1px solid var(--line);background:#09090bbf;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);z-index:10}.search-shell{position:relative;flex:1;max-width:340px}.search-shell svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:var(--text-dim);pointer-events:none;transition:color .15s}.search-shell:focus-within svg{color:var(--accent)}.search-shell input{width:100%;padding:7px 36px 7px 32px;border:1px solid rgba(63,63,70,.5);border-radius:var(--radius-md);background:#18181b99;color:var(--text);font-size:.875rem;outline:none;transition:border-color .15s,box-shadow .15s}.search-shell input::placeholder{color:var(--text-dim)}.search-shell input:focus{border-color:#10b98166;box-shadow:0 0 0 3px var(--accent-ring)}.search-kbd{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:10px;font-family:monospace;color:var(--text-dim);background:var(--bg-elevated);border:1px solid var(--line-strong);padding:1px 5px;border-radius:5px;pointer-events:none}.toggle-group{display:flex;align-items:center;background:var(--bg-elevated);border:1px solid rgba(63,63,70,.5);border-radius:var(--radius-md);padding:3px;gap:2px}.toggle-btn{padding:5px 10px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text-muted);font-size:.75rem;font-weight:500;cursor:pointer;transition:background .15s,color .15s;white-space:nowrap}.toggle-btn:hover{color:var(--text)}.toggle-btn.active{background:#3f3f46cc;color:#fff;box-shadow:var(--shadow-soft)}.adapter-toggle-btn{width:30px;height:30px;padding:0;display:flex;align-items:center;justify-content:center;font-size:1rem;border-radius:var(--radius-sm);border:none;background:transparent;cursor:pointer;transition:background .15s,opacity .15s;opacity:.45}.adapter-toggle-btn:hover{opacity:.8;background:var(--bg-hover)}.adapter-toggle-btn.active{background:#3f3f46cc;opacity:1}.topbar-divider{width:1px;height:20px;background:var(--line);flex-shrink:0}.topbar-actions{display:flex;align-items:center;gap:6px}.status-banner{padding:10px 24px;font-size:.8rem;background:var(--accent-soft);border-bottom:1px solid rgba(16,185,129,.2);color:var(--accent-hover)}.status-banner[data-tone=error]{background:var(--danger-soft);border-color:#f8717133;color:var(--danger)}.status-banner[data-tone=info]{background:#6366f114;border-color:#6366f133;color:#a5b4fc}.workspace-layout{flex:1;overflow-y:auto;padding:24px}.panel{background:#18181b8c;border:1px solid var(--line);border-radius:var(--radius-xl);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.panel-body{padding:20px}.panel-head{padding:20px 20px 0;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.panel-head-title{display:grid;gap:4px}.eyebrow{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.panel-head h2{margin:0;font-size:1.2rem;font-weight:700;letter-spacing:-.03em;color:#fff}.panel-head p{margin:0;font-size:.825rem;color:var(--text-muted);line-height:1.5}.section-label{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim)}.stat-grid,.hero-metrics,.catalog-overview,.detail-metadata-grid{display:grid;gap:10px;padding:0 20px 20px}.hero-metrics,.catalog-overview{grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.detail-metadata-grid{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));padding:0 20px 20px}.stat-card,.overview-card,.hero-metric,.metadata-card{padding:12px 14px;border-radius:var(--radius-lg);background:#27272a73;border:1px solid rgba(63,63,70,.35)}.stat-card span,.overview-card span,.hero-metric span,.metadata-card span{display:block;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin-bottom:6px}.stat-card strong,.overview-card strong,.hero-metric strong,.metadata-card strong{display:block;font-size:1.05rem;font-weight:700;color:var(--text);letter-spacing:-.02em;word-break:break-all}.path-value{font-size:.72rem!important;font-family:JetBrains Mono,Fira Code,monospace;word-break:break-all;opacity:.8}.button,.link-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:0 14px;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s,transform .12s,color .15s}.button:active{transform:scale(.97)}.button:disabled{opacity:.5;cursor:not-allowed;transform:none}.button-primary{background:var(--accent);color:#030712;box-shadow:0 0 14px #10b98133}.button-primary:hover:not(:disabled){background:var(--accent-hover);box-shadow:0 0 20px #10b98159}.button-secondary{background:#3f3f4673;border-color:#3f3f4699;color:var(--text)}.button-secondary:hover:not(:disabled){background:#3f3f46b3}.button-ghost,.link-button{background:transparent;border-color:#3f3f4680;color:var(--text-muted)}.button-ghost:hover:not(:disabled),.link-button:hover{background:var(--bg-hover);color:var(--text);border-color:var(--line-strong)}.button-danger{background:var(--danger-soft);border-color:#f8717133;color:var(--danger)}.button-danger:hover:not(:disabled){background:#f871712e}.button-icon{width:32px;min-height:32px;padding:0;border-radius:var(--radius-md)}.action-cluster{display:flex;align-items:center;gap:8px}.action-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.chip{display:inline-flex;align-items:center;height:26px;padding:0 10px;border-radius:999px;border:1px solid rgba(63,63,70,.45);background:#27272a8c;font-size:.75rem;font-weight:600;color:var(--text-muted)}.chip-accent{background:var(--accent-soft);border-color:#10b98133;color:var(--accent)}.chip-row,.tag-block{display:flex;flex-wrap:wrap;gap:6px}.chip-section{padding:0 20px 20px;display:grid;gap:8px}.tag-block{padding:0 20px}.tag-block-compat{padding-bottom:20px}.source-form{display:grid;gap:8px;padding:0 20px 16px}.source-form input,.search-shell-standalone input{width:100%;padding:8px 12px;border:1px solid rgba(63,63,70,.5);border-radius:var(--radius-md);background:#09090b99;color:var(--text);font-size:.8rem;outline:none;transition:border-color .15s,box-shadow .15s}.source-form input::placeholder{color:var(--text-dim);font-size:.8rem}.source-form input:focus{border-color:#10b98159;box-shadow:0 0 0 3px var(--accent-ring)}.source-list,.sync-list{display:grid;gap:6px;padding:0 20px 20px}.source-item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-md);background:#27272a66;border:1px solid rgba(63,63,70,.35)}.source-item strong{font-size:.825rem;color:var(--text)}.source-item p{margin:3px 0 0;font-size:.75rem;color:var(--text-dim);font-family:monospace}.sync-item{padding:10px 12px;border-radius:var(--radius-md);background:#27272a66;border:1px solid rgba(63,63,70,.35);display:grid;gap:4px}.sync-item-head{display:flex;justify-content:space-between;gap:8px;align-items:baseline}.sync-item strong{font-size:.825rem;color:var(--text)}.sync-item p{margin:0;font-size:.72rem;color:var(--text-dim);font-family:monospace;word-break:break-all}.sync-item-head span{font-size:.7rem;color:var(--text-dim);white-space:nowrap}.muted-copy{font-size:.8rem;color:var(--text-dim);padding:0 20px 16px}.page-column{display:grid;gap:16px}.category-pills{display:flex;flex-wrap:wrap;gap:8px;padding:0 20px 20px}.category-pill{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:999px;border:1px solid rgba(63,63,70,.45);background:#18181b99;color:var(--text-muted);font-size:.78rem;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.category-pill:hover{color:var(--text);border-color:var(--line-strong)}.category-pill.active{background:var(--accent-soft);border-color:#10b98159;color:var(--accent)}.category-pill-count{font-size:10px;opacity:.6}.catalog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;padding:0 20px 20px}.skill-card{position:relative;display:flex;flex-direction:column;border:1px solid rgba(63,63,70,.45);border-radius:var(--radius-xl);background:#18181ba6;cursor:pointer;overflow:hidden;transition:border-color .2s,box-shadow .2s,transform .2s}.skill-card:hover{border-color:#10b98138;box-shadow:0 0 0 1px #10b9811f,0 8px 28px #10b98112,0 2px 8px #0006;transform:translateY(-2px)}.skill-card.is-installed{border-color:#10b9814d;box-shadow:0 0 0 1px #10b9811f}.skill-card.is-installed:hover{box-shadow:0 0 0 1px #10b98159,0 8px 28px #10b9811a}.skill-card.is-installed:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(16,185,129,.04) 0%,transparent 60%);pointer-events:none;z-index:0}.skill-card-accent{display:none}.skill-card-body{padding:18px;flex:1;display:flex;flex-direction:column;gap:12px;position:relative;z-index:1}.skill-card-icon-row{display:flex;justify-content:space-between;align-items:flex-start}.skill-icon-wrap{position:relative;width:48px;height:48px;border-radius:14px;border:1px solid rgba(63,63,70,.4);display:flex;align-items:center;justify-content:center;font-size:1.5rem;flex-shrink:0}.icon-bg-workflow{background:linear-gradient(135deg,#14532d,#052e16);border-color:#22c55e33}.icon-bg-testing{background:linear-gradient(135deg,#1e3a5f,#0c1a2e);border-color:#3b82f633}.icon-bg-devops{background:linear-gradient(135deg,#0e3a4a,#042f3e);border-color:#06b6d433}.icon-bg-tools{background:linear-gradient(135deg,#3b1c6a,#1e0e3a);border-color:#8b5cf633}.icon-bg-security{background:linear-gradient(135deg,#4a1818,#2d0c0c);border-color:#ef444433}.icon-bg-default{background:linear-gradient(135deg,#27272a,#18181b);border-color:#71717a33}.skill-installed-dot{position:absolute;top:-4px;right:-4px;width:16px;height:16px;border-radius:50%;background:var(--accent);border:2px solid #09090b;display:flex;align-items:center;justify-content:center;box-shadow:0 0 6px #10b98180}.skill-installed-dot svg{width:9px;height:9px;color:#030712}.skill-card-meta{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.verified-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:5px;font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;background:var(--accent-soft);border:1px solid rgba(16,185,129,.2);color:var(--accent)}.downloads-count{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-dim)}.downloads-count svg{width:12px;height:12px}.skill-card-head{display:flex;align-items:baseline;gap:8px}.skill-card-head h3{margin:0;font-size:.975rem;font-weight:700;letter-spacing:-.02em;color:#fff;transition:color .15s;line-height:1.2}.skill-card:hover .skill-card-head h3{color:var(--accent)}.version-badge{font-size:11px;font-family:JetBrains Mono,monospace;color:var(--text-dim);white-space:nowrap}.skill-description{margin:0;font-size:.8rem;color:var(--text-muted);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tag-block{padding:0;gap:5px}.skill-tag{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;border:1px solid;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.tag-git{background:#22c55e14;color:#86efac;border-color:#22c55e2e}.tag-test{background:#3b82f614;color:#93c5fd;border-color:#3b82f62e}.tag-docker{background:#06b6d414;color:#67e8f9;border-color:#06b6d42e}.tag-security{background:#ef444414;color:#fca5a5;border-color:#ef44442e}.tag-react{background:#38bdf814;color:#7dd3fc;border-color:#38bdf82e}.tag-python{background:#facc1514;color:#fde68a;border-color:#facc152e}.tag-default{background:#71717a1f;color:#a1a1aa;border-color:#71717a33}.skill-card-footer{display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-top:1px solid rgba(63,63,70,.35);position:relative;z-index:1}.skill-card.is-installed .skill-card-footer{background:#10b98108}.skill-author{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-dim)}.skill-author img{width:16px;height:16px;border-radius:50%;background:var(--bg-elevated)}.skill-card-actions{display:flex;align-items:center;gap:6px}.installed-label{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--accent)}.installed-label:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);display:inline-block}.remove-btn{padding:5px;border-radius:var(--radius-sm);border:1px solid transparent;background:transparent;color:var(--text-dim);cursor:pointer;transition:color .15s,background .15s,border-color .15s;display:flex;align-items:center;justify-content:center}.remove-btn svg{width:14px;height:14px}.remove-btn:hover{color:var(--danger);background:var(--danger-soft);border-color:#f8717133}.meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.meta-grid .section-label{display:block;margin-bottom:3px}.meta-grid strong{font-size:.78rem;color:var(--text)}.tag-block-compat{margin-top:4px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:56px 24px;border:1px dashed rgba(63,63,70,.5);border-radius:var(--radius-xl);text-align:center;gap:8px}.empty-state strong{color:var(--text);font-size:.95rem}.empty-state p{color:var(--text-muted);font-size:.825rem;margin:0}.error-card{padding:16px 20px;border-radius:var(--radius-lg);border:1px solid rgba(248,113,113,.2);background:var(--danger-soft);display:grid;gap:6px}.error-card strong{color:var(--danger);font-size:.875rem}.error-card p{margin:0;font-size:.8rem;color:var(--text-muted)}.detail-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px 0}.detail-hero{padding:0 20px 20px;display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.detail-hero h2{margin:6px 0 0;font-size:1.4rem;font-weight:700;letter-spacing:-.03em;color:#fff}.detail-description{margin:8px 0 0;font-size:.85rem;color:var(--text-muted);line-height:1.6;max-width:60ch}.detail-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;align-items:flex-start;padding-top:8px}.detail-chip-sections{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;padding:0 20px 20px}.markdown-body{padding:0 20px 20px;max-width:78ch;line-height:1.7;color:var(--text-muted);font-size:.875rem}.markdown-body :is(h1,h2,h3,h4){color:var(--text);letter-spacing:-.03em}.markdown-body h1{font-size:1.6rem;margin:0 0 1rem}.markdown-body h2{font-size:1.25rem;margin:1.6rem 0 .6rem}.markdown-body h3{font-size:1.05rem;margin:1.2rem 0 .4rem}.markdown-body pre,.markdown-body code{font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.82em}.markdown-body pre{overflow-x:auto;padding:14px 16px;border-radius:var(--radius-lg);background:#00000080;border:1px solid var(--line);color:#d4d4d8}.markdown-body :not(pre)>code{background:#3f3f4666;border:1px solid var(--line);padding:1px 5px;border-radius:4px;color:var(--accent)}.markdown-body table{width:100%;border-collapse:collapse;margin:1rem 0;font-size:.875rem}.markdown-body th,.markdown-body td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left}.markdown-body th{color:var(--text);font-weight:600}.toast{position:fixed;right:20px;bottom:20px;min-width:260px;max-width:340px;border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--line-strong);box-shadow:0 8px 32px #00000080,0 0 0 1px #ffffff0a;overflow:hidden;z-index:60}.toast-content{display:flex;align-items:flex-start;gap:10px;padding:14px 16px}.toast-icon svg{width:16px;height:16px}.toast[data-tone=success] .toast-icon svg{color:var(--accent)}.toast[data-tone=error] .toast-icon svg{color:var(--danger)}.toast[data-tone=info] .toast-icon svg{color:#a5b4fc}.toast-text{flex:1}.toast-text strong{display:block;font-size:.8rem;color:var(--text);margin-bottom:2px}.toast-text span{font-size:.775rem;color:var(--text-muted)}.toast-bar{height:2px;animation:toast-progress 2.6s linear forwards}.toast[data-tone=success] .toast-bar{background:var(--accent)}.toast[data-tone=error] .toast-bar{background:var(--danger)}.toast[data-tone=info] .toast-bar{background:#818cf8}@keyframes toast-progress{0%{width:100%}to{width:0%}}.toast-enter-active,.toast-leave-active{transition:all .2s cubic-bezier(.16,1,.3,1)}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(16px) scale(.96)}.busy-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#09090bb3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:50}.busy-card{display:grid;gap:10px;justify-items:center;padding:24px 32px;border-radius:var(--radius-xl);background:var(--bg-elevated);border:1px solid var(--line-strong);box-shadow:var(--shadow)}.busy-card strong{font-size:.9rem;color:var(--text)}.busy-card span{font-size:.8rem;color:var(--text-muted)}.busy-spinner{width:32px;height:32px;border-radius:50%;border:2px solid rgba(16,185,129,.15);border-top-color:var(--accent);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#3f3f4699;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#52525bcc}@media(max-width:900px){.sidebar{width:200px}}@media(max-width:680px){.sidebar{display:none}.detail-hero,.detail-topbar{flex-direction:column;align-items:stretch}.detail-actions{justify-content:stretch}.detail-chip-sections,.catalog-grid{grid-template-columns:1fr}}
|
|
1
|
+
*,*:before,*:after{box-sizing:border-box}html,body,#app{margin:0;height:100%;min-height:100%}button,input,select{font:inherit}a{color:inherit;text-decoration:none}:root{--bg: #1a1a1f;--bg-panel: rgba(30, 30, 36, .8);--bg-elevated: #242429;--bg-hover: rgba(52, 52, 60, .65);--line: rgba(80, 80, 92, .55);--line-strong: rgba(105, 105, 118, .75);--text: #f0f0f3;--text-muted: #9898a8;--text-dim: #70707e;--accent: #10b981;--accent-hover: #34d399;--accent-soft: rgba(16, 185, 129, .12);--accent-ring: rgba(16, 185, 129, .25);--danger: #f87171;--danger-soft: rgba(248, 113, 113, .1);--danger-ring: rgba(239, 68, 68, .25);--warn: #fbbf24;--warn-soft: rgba(251, 191, 36, .1);--radius-xl: 18px;--radius-lg: 14px;--radius-md: 10px;--radius-sm: 8px;--shadow: 0 8px 32px rgba(0, 0, 0, .5);--shadow-soft: 0 4px 16px rgba(0, 0, 0, .3);font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif;color-scheme:dark}body{background:var(--bg);color:var(--text);overflow:hidden;height:100vh}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(circle,rgba(255,255,255,.035) 1px,transparent 1px);background-size:24px 24px;pointer-events:none;z-index:0}.app-shell{position:relative;display:flex;height:100vh;overflow:hidden;z-index:1}.shell-background{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0}.shell-glow{position:absolute;border-radius:50%;filter:blur(1px)}.shell-glow-left{width:600px;height:600px;top:-150px;left:-150px;background:radial-gradient(circle,rgba(16,185,129,.07) 0%,transparent 70%)}.shell-glow-right{width:500px;height:500px;bottom:-100px;right:-100px;background:radial-gradient(circle,rgba(99,102,241,.05) 0%,transparent 70%)}.shell-grid{display:none}.sidebar{width:232px;flex-shrink:0;display:flex;flex-direction:column;background:#18181b80;border-right:1px solid var(--line);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);z-index:2;overflow-y:auto}.sidebar-logo{height:56px;display:flex;align-items:center;padding:0 20px;border-bottom:1px solid var(--line);gap:8px;font-size:1rem;font-weight:700;color:#fff;letter-spacing:-.02em;flex-shrink:0}.sidebar-logo svg{color:var(--accent);filter:drop-shadow(0 0 6px rgba(16,185,129,.5))}.sidebar-logo .accent-dot{color:var(--accent)}.sidebar-nav{padding:12px;display:flex;flex-direction:column;gap:2px;flex:1}.nav-section-label{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--text-dim);padding:0 10px;margin:12px 0 4px}.nav-section-label:first-child{margin-top:4px}.nav-btn{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--radius-md);border:1px solid transparent;background:transparent;color:var(--text-muted);font-size:.875rem;font-weight:500;cursor:pointer;width:100%;text-align:left;transition:background .15s,color .15s,border-color .15s}.nav-btn svg{flex-shrink:0;opacity:.7}.nav-btn:hover{background:var(--bg-hover);color:var(--text)}.nav-btn:hover svg{opacity:1}.nav-btn.active{background:var(--bg-elevated);color:#fff;border-color:var(--line-strong)}.nav-btn.active svg{opacity:1}.nav-badge{margin-left:auto;background:var(--accent-soft);border:1px solid rgba(16,185,129,.25);color:var(--accent);font-size:10px;font-weight:700;padding:1px 6px;border-radius:999px;font-variant-numeric:tabular-nums}.sidebar-footer{padding:12px;border-top:1px solid var(--line);flex-shrink:0}.adapter-badge{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-md);background:#27272a80;border:1px solid rgba(63,63,70,.4)}.adapter-badge-icon{font-size:1.25rem;line-height:1}.adapter-badge-info{flex:1;min-width:0}.adapter-badge-label{font-size:10px;color:var(--text-dim);line-height:1;margin-bottom:3px}.adapter-badge-name{font-size:.8rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.adapter-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0;box-shadow:0 0 6px #10b98199;animation:pulse-dot 2s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.5}}.sidebar-meta{display:flex;justify-content:space-between;padding:8px 12px 0;font-size:11px;color:var(--text-dim)}.main-col{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;position:relative;z-index:1}.topbar{height:56px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 24px;border-bottom:1px solid var(--line);background:#09090bbf;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);z-index:10}.search-shell{position:relative;flex:1;max-width:340px}.search-shell svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:var(--text-dim);pointer-events:none;transition:color .15s}.search-shell:focus-within svg{color:var(--accent)}.search-shell input{width:100%;padding:7px 36px 7px 32px;border:1px solid rgba(63,63,70,.5);border-radius:var(--radius-md);background:#18181b99;color:var(--text);font-size:.875rem;outline:none;transition:border-color .15s,box-shadow .15s}.search-shell input::placeholder{color:var(--text-dim)}.search-shell input:focus{border-color:#10b98166;box-shadow:0 0 0 3px var(--accent-ring)}.search-kbd{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:10px;font-family:monospace;color:var(--text-dim);background:var(--bg-elevated);border:1px solid var(--line-strong);padding:1px 5px;border-radius:5px;pointer-events:none}.toggle-group{display:flex;align-items:center;background:var(--bg-elevated);border:1px solid rgba(63,63,70,.5);border-radius:var(--radius-md);padding:3px;gap:2px}.toggle-btn{padding:5px 10px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text-muted);font-size:.75rem;font-weight:500;cursor:pointer;transition:background .15s,color .15s;white-space:nowrap}.toggle-btn:hover{color:var(--text)}.toggle-btn.active{background:#3f3f46cc;color:#fff;box-shadow:var(--shadow-soft)}.adapter-toggle-btn{width:30px;height:30px;padding:0;display:flex;align-items:center;justify-content:center;font-size:1rem;border-radius:var(--radius-sm);border:none;background:transparent;cursor:pointer;transition:background .15s,opacity .15s;opacity:.45}.adapter-toggle-btn:hover{opacity:.8;background:var(--bg-hover)}.adapter-toggle-btn.active{background:#3f3f46cc;opacity:1}.topbar-divider{width:1px;height:20px;background:var(--line);flex-shrink:0}.topbar-actions{display:flex;align-items:center;gap:6px}.status-banner{padding:10px 24px;font-size:.8rem;background:var(--accent-soft);border-bottom:1px solid rgba(16,185,129,.2);color:var(--accent-hover)}.status-banner[data-tone=error]{background:var(--danger-soft);border-color:#f8717133;color:var(--danger)}.status-banner[data-tone=info]{background:#6366f114;border-color:#6366f133;color:#a5b4fc}.workspace-layout{flex:1;overflow-y:auto;padding:24px}.panel{background:#18181b8c;border:1px solid var(--line);border-radius:var(--radius-xl);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.panel-body{padding:20px}.panel-head{padding:20px 20px 0;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.panel-head-title{display:grid;gap:4px}.eyebrow{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.panel-head h2{margin:0;font-size:1.2rem;font-weight:700;letter-spacing:-.03em;color:#fff}.panel-head p{margin:0;font-size:.825rem;color:var(--text-muted);line-height:1.5}.section-label{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim)}.stat-grid,.hero-metrics,.catalog-overview,.detail-metadata-grid{display:grid;gap:10px;padding:0 20px 20px}.hero-metrics,.catalog-overview{grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.detail-metadata-grid{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));padding:0 20px 20px}.stat-card,.overview-card,.hero-metric,.metadata-card{padding:12px 14px;border-radius:var(--radius-lg);background:#27272a73;border:1px solid rgba(63,63,70,.35)}.stat-card span,.overview-card span,.hero-metric span,.metadata-card span{display:block;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin-bottom:6px}.stat-card strong,.overview-card strong,.hero-metric strong,.metadata-card strong{display:block;font-size:1.05rem;font-weight:700;color:var(--text);letter-spacing:-.02em;word-break:break-all}.path-value{font-size:.72rem!important;font-family:JetBrains Mono,Fira Code,monospace;word-break:break-all;opacity:.8}.button,.link-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:0 14px;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;font-size:.8rem;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s,transform .12s,color .15s}.button:active{transform:scale(.97)}.button:disabled{opacity:.5;cursor:not-allowed;transform:none}.button-primary{background:var(--accent);color:#030712;box-shadow:0 0 14px #10b98133}.button-primary:hover:not(:disabled){background:var(--accent-hover);box-shadow:0 0 20px #10b98159}.button-secondary{background:#3f3f4673;border-color:#3f3f4699;color:var(--text)}.button-secondary:hover:not(:disabled){background:#3f3f46b3}.button-ghost,.link-button{background:transparent;border-color:#3f3f4680;color:var(--text-muted)}.button-ghost:hover:not(:disabled),.link-button:hover{background:var(--bg-hover);color:var(--text);border-color:var(--line-strong)}.button-danger{background:var(--danger-soft);border-color:#f8717133;color:var(--danger)}.button-danger:hover:not(:disabled){background:#f871712e}.button-icon{width:32px;min-height:32px;padding:0;border-radius:var(--radius-md)}.action-cluster{display:flex;align-items:center;gap:8px}.action-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.chip{display:inline-flex;align-items:center;height:26px;padding:0 10px;border-radius:999px;border:1px solid rgba(63,63,70,.45);background:#27272a8c;font-size:.75rem;font-weight:600;color:var(--text-muted)}.chip-accent{background:var(--accent-soft);border-color:#10b98133;color:var(--accent)}.chip-row,.tag-block{display:flex;flex-wrap:wrap;gap:6px}.chip-section{padding:0 20px 20px;display:grid;gap:8px}.tag-block{padding:0 20px}.tag-block-compat{padding-bottom:20px}.source-form{display:grid;gap:8px;padding:0 20px 16px}.source-form input,.search-shell-standalone input{width:100%;padding:8px 12px;border:1px solid rgba(63,63,70,.5);border-radius:var(--radius-md);background:#09090b99;color:var(--text);font-size:.8rem;outline:none;transition:border-color .15s,box-shadow .15s}.source-form input::placeholder{color:var(--text-dim);font-size:.8rem}.source-form input:focus{border-color:#10b98159;box-shadow:0 0 0 3px var(--accent-ring)}.source-list,.sync-list{display:grid;gap:6px;padding:0 20px 20px}.source-item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-md);background:#27272a66;border:1px solid rgba(63,63,70,.35)}.source-item strong{font-size:.825rem;color:var(--text)}.source-item p{margin:3px 0 0;font-size:.75rem;color:var(--text-dim);font-family:monospace}.sync-item{padding:10px 12px;border-radius:var(--radius-md);background:#27272a66;border:1px solid rgba(63,63,70,.35);display:grid;gap:4px}.sync-item-head{display:flex;justify-content:space-between;gap:8px;align-items:baseline}.sync-item strong{font-size:.825rem;color:var(--text)}.sync-item p{margin:0;font-size:.72rem;color:var(--text-dim);font-family:monospace;word-break:break-all}.sync-item-head span{font-size:.7rem;color:var(--text-dim);white-space:nowrap}.muted-copy{font-size:.8rem;color:var(--text-dim);padding:0 20px 16px}.page-column{display:grid;gap:16px}.category-pills{display:flex;flex-wrap:wrap;gap:8px;padding:0 20px 20px}.category-pill{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:999px;border:1px solid rgba(63,63,70,.45);background:#18181b99;color:var(--text-muted);font-size:.78rem;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.category-pill:hover{color:var(--text);border-color:var(--line-strong)}.category-pill.active{background:var(--accent-soft);border-color:#10b98159;color:var(--accent)}.category-pill-count{font-size:10px;opacity:.6}.catalog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;padding:0 20px 20px}.skill-card{position:relative;display:flex;flex-direction:column;border:1px solid rgba(63,63,70,.45);border-radius:var(--radius-xl);background:#18181ba6;cursor:pointer;overflow:hidden;transition:border-color .2s,box-shadow .2s,transform .2s}.skill-card:hover{border-color:#10b98138;box-shadow:0 0 0 1px #10b9811f,0 8px 28px #10b98112,0 2px 8px #0006;transform:translateY(-2px)}.skill-card.is-installed{border-color:#10b9814d;box-shadow:0 0 0 1px #10b9811f}.skill-card.is-installed:hover{box-shadow:0 0 0 1px #10b98159,0 8px 28px #10b9811a}.skill-card.is-installed:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(16,185,129,.04) 0%,transparent 60%);pointer-events:none;z-index:0}.skill-card-accent{display:none}.skill-card-body{padding:18px;flex:1;display:flex;flex-direction:column;gap:12px;position:relative;z-index:1}.skill-card-icon-row{display:flex;justify-content:space-between;align-items:flex-start}.skill-icon-wrap{position:relative;width:48px;height:48px;border-radius:14px;border:1px solid rgba(63,63,70,.4);display:flex;align-items:center;justify-content:center;font-size:1.5rem;flex-shrink:0}.icon-bg-workflow{background:linear-gradient(135deg,#14532d,#052e16);border-color:#22c55e33}.icon-bg-testing{background:linear-gradient(135deg,#1e3a5f,#0c1a2e);border-color:#3b82f633}.icon-bg-devops{background:linear-gradient(135deg,#0e3a4a,#042f3e);border-color:#06b6d433}.icon-bg-tools{background:linear-gradient(135deg,#3b1c6a,#1e0e3a);border-color:#8b5cf633}.icon-bg-security{background:linear-gradient(135deg,#4a1818,#2d0c0c);border-color:#ef444433}.icon-bg-default{background:linear-gradient(135deg,#27272a,#18181b);border-color:#71717a33}.skill-installed-dot{position:absolute;top:-4px;right:-4px;width:16px;height:16px;border-radius:50%;background:var(--accent);border:2px solid #09090b;display:flex;align-items:center;justify-content:center;box-shadow:0 0 6px #10b98180}.skill-installed-dot svg{width:9px;height:9px;color:#030712}.skill-card-meta{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.verified-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:5px;font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;background:var(--accent-soft);border:1px solid rgba(16,185,129,.2);color:var(--accent)}.downloads-count{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-dim)}.downloads-count svg{width:12px;height:12px}.skill-card-head{display:flex;align-items:baseline;gap:8px}.skill-card-head h3{margin:0;font-size:.975rem;font-weight:700;letter-spacing:-.02em;color:#fff;transition:color .15s;line-height:1.2}.skill-card:hover .skill-card-head h3{color:var(--accent)}.version-badge{font-size:11px;font-family:JetBrains Mono,monospace;color:var(--text-dim);white-space:nowrap}.skill-description{margin:0;font-size:.8rem;color:var(--text-muted);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tag-block{padding:0;gap:5px}.skill-tag{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;border:1px solid;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.tag-git{background:#22c55e14;color:#86efac;border-color:#22c55e2e}.tag-test{background:#3b82f614;color:#93c5fd;border-color:#3b82f62e}.tag-docker{background:#06b6d414;color:#67e8f9;border-color:#06b6d42e}.tag-security{background:#ef444414;color:#fca5a5;border-color:#ef44442e}.tag-react{background:#38bdf814;color:#7dd3fc;border-color:#38bdf82e}.tag-python{background:#facc1514;color:#fde68a;border-color:#facc152e}.tag-default{background:#71717a1f;color:#a1a1aa;border-color:#71717a33}.skill-card-footer{display:flex;align-items:center;justify-content:space-between;padding:10px 18px;border-top:1px solid rgba(63,63,70,.35);position:relative;z-index:1}.skill-card.is-installed .skill-card-footer{background:#10b98108}.skill-author{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-dim)}.skill-author img{width:16px;height:16px;border-radius:50%;background:var(--bg-elevated)}.skill-card-actions{display:flex;align-items:center;gap:6px}.installed-label{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--accent)}.installed-label:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);display:inline-block}.remove-btn{padding:5px;border-radius:var(--radius-sm);border:1px solid transparent;background:transparent;color:var(--text-dim);cursor:pointer;transition:color .15s,background .15s,border-color .15s;display:flex;align-items:center;justify-content:center}.remove-btn svg{width:14px;height:14px}.remove-btn:hover{color:var(--danger);background:var(--danger-soft);border-color:#f8717133}.meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.meta-grid .section-label{display:block;margin-bottom:3px}.meta-grid strong{font-size:.78rem;color:var(--text)}.tag-block-compat{margin-top:4px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:56px 24px;border:1px dashed rgba(63,63,70,.5);border-radius:var(--radius-xl);text-align:center;gap:8px}.empty-state strong{color:var(--text);font-size:.95rem}.empty-state p{color:var(--text-muted);font-size:.825rem;margin:0}.error-card{padding:16px 20px;border-radius:var(--radius-lg);border:1px solid rgba(248,113,113,.2);background:var(--danger-soft);display:grid;gap:6px}.error-card strong{color:var(--danger);font-size:.875rem}.error-card p{margin:0;font-size:.8rem;color:var(--text-muted)}.detail-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px 0}.detail-hero{padding:0 20px 20px;display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.detail-hero h2{margin:6px 0 0;font-size:1.4rem;font-weight:700;letter-spacing:-.03em;color:#fff}.detail-description{margin:8px 0 0;font-size:.85rem;color:var(--text-muted);line-height:1.6;max-width:60ch}.detail-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;align-items:flex-start;padding-top:8px}.detail-chip-sections{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;padding:0 20px 20px}.markdown-body{padding:0 20px 20px;max-width:78ch;line-height:1.7;color:var(--text-muted);font-size:.875rem}.markdown-body :is(h1,h2,h3,h4){color:var(--text);letter-spacing:-.03em}.markdown-body h1{font-size:1.6rem;margin:0 0 1rem}.markdown-body h2{font-size:1.25rem;margin:1.6rem 0 .6rem}.markdown-body h3{font-size:1.05rem;margin:1.2rem 0 .4rem}.markdown-body pre,.markdown-body code{font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.82em}.markdown-body pre{overflow-x:auto;padding:14px 16px;border-radius:var(--radius-lg);background:#00000080;border:1px solid var(--line);color:#d4d4d8}.markdown-body :not(pre)>code{background:#3f3f4666;border:1px solid var(--line);padding:1px 5px;border-radius:4px;color:var(--accent)}.markdown-body table{width:100%;border-collapse:collapse;margin:1rem 0;font-size:.875rem}.markdown-body th,.markdown-body td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left}.markdown-body th{color:var(--text);font-weight:600}.toast{position:fixed;right:20px;bottom:20px;min-width:260px;max-width:340px;border-radius:var(--radius-lg);background:var(--bg-elevated);border:1px solid var(--line-strong);box-shadow:0 8px 32px #00000080,0 0 0 1px #ffffff0a;overflow:hidden;z-index:60}.toast-content{display:flex;align-items:flex-start;gap:10px;padding:14px 16px}.toast-icon svg{width:16px;height:16px}.toast[data-tone=success] .toast-icon svg{color:var(--accent)}.toast[data-tone=error] .toast-icon svg{color:var(--danger)}.toast[data-tone=info] .toast-icon svg{color:#a5b4fc}.toast-text{flex:1}.toast-text strong{display:block;font-size:.8rem;color:var(--text);margin-bottom:2px}.toast-text span{font-size:.775rem;color:var(--text-muted)}.toast-bar{height:2px;animation:toast-progress 2.6s linear forwards}.toast[data-tone=success] .toast-bar{background:var(--accent)}.toast[data-tone=error] .toast-bar{background:var(--danger)}.toast[data-tone=info] .toast-bar{background:#818cf8}@keyframes toast-progress{0%{width:100%}to{width:0%}}.toast-enter-active,.toast-leave-active{transition:all .2s cubic-bezier(.16,1,.3,1)}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(16px) scale(.96)}.busy-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#09090bb3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:50}.busy-card{display:grid;gap:10px;justify-items:center;padding:24px 32px;border-radius:var(--radius-xl);background:var(--bg-elevated);border:1px solid var(--line-strong);box-shadow:var(--shadow)}.busy-card strong{font-size:.9rem;color:var(--text)}.busy-card span{font-size:.8rem;color:var(--text-muted)}.busy-spinner{width:32px;height:32px;border-radius:50%;border:2px solid rgba(16,185,129,.15);border-top-color:var(--accent);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#3f3f4699;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#52525bcc}.adapter-dropdown{position:relative;display:none}.adapter-dropdown-trigger{display:inline-flex;align-items:center;gap:6px;padding:0 10px;height:30px;font-size:.75rem;white-space:nowrap}.adapter-dropdown-menu{position:absolute;top:calc(100% + 6px);right:0;min-width:180px;background:var(--bg-elevated);border:1px solid var(--line-strong);border-radius:var(--radius-md);box-shadow:var(--shadow);padding:4px;display:flex;flex-direction:column;gap:2px;z-index:50}.adapter-dropdown-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border:none;background:transparent;color:var(--text-muted);font-size:.8rem;text-align:left;cursor:pointer;border-radius:var(--radius-sm);transition:background .12s,color .12s}.adapter-dropdown-item:hover{background:var(--bg-hover);color:var(--text)}.adapter-dropdown-item.active{background:var(--accent-soft);color:var(--accent)}.adapter-dropdown-item svg{margin-left:auto}@media(max-width:1100px){.adapter-toggle-row{display:none}.adapter-dropdown{display:inline-flex}}.doctor-status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:auto;box-shadow:0 0 0 2px #18181b99}.doctor-status-dot[data-status=pass]{background:#34d399}.doctor-status-dot[data-status=warn]{background:#facc15}.doctor-status-dot[data-status=fail]{background:#f87171;animation:doctor-pulse 1.6s ease-in-out infinite}@keyframes doctor-pulse{0%,to{box-shadow:0 0 0 2px #18181b99,0 0 #f8717166}50%{box-shadow:0 0 0 2px #18181b99,0 0 0 6px #f8717100}}.search-kbd{font-family:monospace;font-size:10px;padding:2px 6px;border-radius:6px;border:1px solid rgba(82,82,91,.4);background:#27272a80;color:var(--text-dim)}.mobile-hamburger{display:none;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;border:1px solid rgba(63,63,70,.5);background:#09090b99;color:#f4f4f5;cursor:pointer}.mobile-hamburger:hover{background:#27272a99}.mobile-drawer-backdrop{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;border:0;padding:0;z-index:90;cursor:pointer}.skill-author-avatar{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;font-size:9px;font-weight:700;color:#fff;letter-spacing:.04em}@media(max-width:900px){.sidebar{width:200px}}@media(max-width:680px){.sidebar{position:fixed;inset:0 auto 0 0;width:260px;z-index:100;transform:translate(-110%);transition:transform .22s ease;box-shadow:12px 0 30px #0006}.app-shell.drawer-open .sidebar{transform:translate(0)}.app-shell.drawer-open .mobile-drawer-backdrop{display:block}.mobile-hamburger{display:inline-flex}.detail-hero,.detail-topbar{flex-direction:column;align-items:stretch}.detail-actions{justify-content:stretch}.detail-chip-sections,.catalog-grid{grid-template-columns:1fr}}
|