@glyphs-ai/glyph 0.1.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.
@@ -0,0 +1 @@
1
+ :root{--color-bg:#fff;--color-surface:#f7f8fa;--color-surface-hover:#eef0f4;--color-border:#e4e7eb;--color-border-strong:#c8cdd5;--color-text:#1a1d23;--color-text-muted:#6b7280;--color-text-subtle:#9aa1ac;--color-text-meta:#5d6470;--color-accent:#2563eb;--color-accent-hover:#1d4ed8;--color-accent-bg:#eef4ff;--color-success:#15803d;--color-success-bg:#ecfdf5;--color-warn:#b45309;--color-warn-bg:#fef3c7;--color-danger:#b91c1c;--color-danger-bg:#fef2f2;--color-sidebar-bg:#fafbfc;--color-sidebar-border:#e4e7eb;--color-sidebar-text:#4b5563;--color-sidebar-text-muted:#9aa1ac;--color-sidebar-active-bg:#eef4ff;--color-sidebar-active-text:#1d4ed8;--color-sidebar-active-border:#2563eb;--color-sidebar-hover-bg:#f0f1f5;--color-sidebar-divider:#e4e7eb;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "Inter", system-ui, sans-serif;--shadow-sm:0 1px 2px #0f172a0a;--shadow-md:0 1px 3px #0f172a14, 0 1px 2px #0f172a0a;--sidebar-width:240px;--topbar-height:72px}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{font-family:var(--font-sans);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}code,pre,.mono{font-family:var(--font-mono);font-size:.92em}a{color:var(--color-accent);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;font-size:inherit;cursor:pointer}.shell{grid-template-columns:var(--sidebar-width) 1fr;height:100vh;display:grid}.sidebar{background:var(--color-sidebar-bg);border-right:1px solid var(--color-sidebar-border);color:var(--color-sidebar-text);flex-direction:column;display:flex}.sidebar__header{height:var(--topbar-height);padding:0 var(--space-3);border-bottom:1px solid var(--color-sidebar-divider);flex-direction:column;flex-shrink:0;justify-content:center;gap:4px;display:flex}.sidebar__switcher{align-items:center;gap:4px;display:flex}.sidebar__switcher-select-wrap{flex:1;min-width:0}.sidebar__switcher-select{width:100%;color:var(--color-sidebar-text,var(--color-text));border-radius:var(--radius-md);letter-spacing:-.01em;cursor:pointer;background:0 0;border:1px solid #0000;padding:6px 8px;font-family:inherit;font-size:14px;font-weight:600;transition:background .12s,border-color .12s}.sidebar__switcher-select:hover,.sidebar__switcher-select:focus-visible{background:var(--color-sidebar-hover-bg,var(--color-surface));border-color:var(--color-sidebar-border,var(--color-border));outline:none}.sidebar__icon-btn{border-radius:var(--radius-md);width:28px;height:28px;color:var(--color-sidebar-text-muted,var(--color-text-muted));cursor:pointer;background:0 0;border:1px solid #0000;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.sidebar__icon-btn:hover:not(:disabled),.sidebar__icon-btn:focus-visible:not(:disabled){background:var(--color-sidebar-hover-bg,var(--color-surface));color:var(--color-sidebar-text,var(--color-text));outline:none}.sidebar__icon-btn:disabled{opacity:.4;cursor:not-allowed}.sidebar__icon-btn-svg{width:14px;height:14px}.sidebar__rename{align-items:center;gap:4px;display:flex}.sidebar__rename-input{background:var(--color-bg);min-width:0;color:var(--color-text);border:1px solid var(--color-accent);border-radius:var(--radius-md);font-size:14px;font-weight:600;font-family:var(--font-mono);letter-spacing:-.01em;flex:1;padding:6px 8px}.sidebar__rename-input:focus{outline:none;box-shadow:0 0 0 2px #5e6ad233}.sidebar__rename-error{color:var(--color-danger,#c84747);padding:0 var(--space-2);word-break:break-word;font-size:11px}.sidebar__nav{padding:var(--space-4) var(--space-3);flex:1;overflow-y:auto}.sidebar__group{flex-direction:column;display:flex}.sidebar__children{padding:0 0 0 var(--space-3);flex-direction:column;margin:0;list-style:none;display:flex}.sidebar__item--parent{margin-bottom:0}.sidebar__item--child{padding-left:var(--space-3);font-size:13px}.sidebar__icon--child{opacity:.85}.sidebar__item{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--color-sidebar-text);text-align:left;cursor:pointer;background:0 0;border:0;width:100%;margin-bottom:2px;font-size:13px;font-weight:500;transition:background .1s;display:flex}.sidebar__item:hover{background:var(--color-sidebar-hover-bg);color:var(--color-text)}.sidebar__item--active{background:var(--color-sidebar-active-bg);color:var(--color-sidebar-active-text);font-weight:600}.sidebar__item--active:hover{background:var(--color-sidebar-active-bg)}.sidebar__item--disabled{opacity:.5;cursor:not-allowed}.sidebar__item--disabled:hover{color:var(--color-sidebar-text);background:0 0}.sidebar__icon{color:currentColor;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.sidebar__icon svg{width:16px;height:16px;display:block}.sidebar__badge{background:var(--color-surface-hover);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em;border-radius:999px;margin-left:auto;padding:1px 6px;font-size:10px;font-weight:600}.sidebar__footer{padding:var(--space-2) var(--space-3) var(--space-3);flex-shrink:0}.sidebar__home-link{align-items:center;gap:var(--space-3);width:100%;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--color-sidebar-text-muted);font-size:13px;font-weight:500;text-decoration:none;transition:background .1s,color .1s;display:flex}.sidebar__home-link:hover,.sidebar__home-link:focus-visible{background:var(--color-sidebar-hover-bg);color:var(--color-sidebar-text);outline:none;text-decoration:none}.sidebar__home-link-icon{flex-shrink:0;width:16px;height:16px}.main{background:var(--color-bg);flex-direction:column;display:flex;overflow:hidden}.topbar{height:var(--topbar-height);border-bottom:1px solid var(--color-border);padding:0 var(--space-6);align-items:center;gap:var(--space-4);background:var(--color-bg);display:flex}.topbar__title{letter-spacing:-.01em;margin:0;font-size:18px;font-weight:600}.topbar__crumb{color:var(--color-text-muted);font-size:13px}.topbar__spacer{flex:1}.topbar__actions{align-items:center;gap:var(--space-2);display:flex}.content{padding:var(--space-6);flex:1;overflow-y:auto}.section-tabs{gap:var(--space-1);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-5);display:flex}.section-tabs button{padding:var(--space-3) var(--space-4);color:var(--color-text-muted);background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;font-size:14px}.section-tabs button:hover{color:var(--color-text)}.section-tabs button.active{color:var(--color-accent);border-bottom-color:var(--color-accent);font-weight:600}.section-tabs .count{margin-left:var(--space-2);background:var(--color-surface);color:var(--color-text-muted);border-radius:999px;padding:1px 6px;font-size:11px}.section-tabs button.active .count{background:var(--color-accent-bg);color:var(--color-accent)}.btn{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);font-size:13px;transition:background .1s;display:inline-flex}.btn svg{width:14px;height:14px}.btn:hover{background:var(--color-surface-hover)}.btn--primary{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.btn--primary:hover{background:var(--color-accent-hover)}.btn--ghost{background:0 0;border-color:#0000}.btn--ghost:hover{background:var(--color-surface)}.btn--icon{padding:var(--space-2);line-height:0}.btn--icon svg{width:16px;height:16px}.btn--danger{background:var(--color-danger);border-color:var(--color-danger);color:#fff}.btn--danger:hover{background:#991b1b}.btn:disabled{opacity:.5;cursor:not-allowed}.page-toolbar{justify-content:space-between;align-items:flex-end;gap:var(--space-4);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-5);display:flex}.page-toolbar .section-tabs{border-bottom:0;margin-bottom:0}.page-toolbar__actions{padding:0 0 var(--space-3);gap:var(--space-2);display:flex}.filter-menu{display:inline-block;position:relative}.filter-menu__trigger{cursor:pointer;align-items:center;gap:var(--space-1);display:inline-flex}.filter-menu__icon{font-size:13px;line-height:1}.filter-menu__sep{color:var(--color-text-subtle);margin:0 2px}.filter-menu__current{color:var(--color-accent);font-weight:600}.filter-menu__trigger--active{background:var(--color-accent-bg);color:var(--color-accent)}.filter-menu__panel{z-index:30;min-width:200px;padding:var(--space-2);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);flex-direction:column;gap:2px;display:flex;position:absolute;top:calc(100% + 4px);right:0}.filter-menu__group-label{padding:var(--space-1) var(--space-2);letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-subtle);font-size:11px;font-weight:600}.filter-menu__option{align-items:center;gap:var(--space-2);padding:var(--space-2);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;text-align:left;background:0 0;border:0;font-size:13px;display:flex}.filter-menu__option:hover{background:var(--color-surface-hover)}.filter-menu__option--active{color:var(--color-accent);font-weight:600}.filter-menu__radio{text-align:center;width:14px;color:var(--color-text-subtle);font-size:12px}.filter-menu__option--active .filter-menu__radio{color:var(--color-accent)}.filter-menu__option-label{flex:1}.filter-menu__option-count{background:var(--color-surface);min-width:18px;color:var(--color-text-muted);border-radius:999px;justify-content:center;align-items:center;padding:1px 6px;font-size:11px;font-weight:500;display:inline-flex}.card{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5);box-shadow:var(--shadow-sm)}.card__header{margin-bottom:var(--space-3);align-items:center;display:flex}.card__title{letter-spacing:-.01em;margin:0;font-size:15px;font-weight:600}.stat-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));display:grid}.stat{background:var(--color-surface);border-radius:var(--radius-lg);padding:var(--space-4) var(--space-5);border:1px solid var(--color-border)}.stat__value{letter-spacing:-.02em;font-size:28px;font-weight:600;line-height:1.1}.stat__value--warn{color:var(--color-danger)}.stat__label{margin-top:var(--space-1);text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted);font-size:12px;font-weight:500}.table{border-collapse:collapse;table-layout:fixed;width:100%;max-width:1100px;font-size:13px}.table th{text-align:left;padding:var(--space-3);text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);background:var(--color-surface);font-size:11px;font-weight:500}.table td{padding:var(--space-3);border-bottom:1px solid var(--color-border);vertical-align:top}.table tbody tr:hover{background:var(--color-surface-hover)}.table .name-cell{font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.table .name-cell .link-button{text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;max-width:100%;display:inline-block;overflow:hidden}.table .desc-cell{color:var(--color-text-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.table .desc-cell.mono{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.table .version-cell{font-family:var(--font-mono);color:var(--color-text-muted);white-space:nowrap;font-size:12px}.table th.col-name{width:200px}.table th.col-version{width:80px}.table th.col-status{width:110px}.table th.col-path{width:auto}.badge{align-items:center;gap:var(--space-1);border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.04em;padding:2px 8px;font-size:11px;font-weight:500;display:inline-flex}.badge--ready{color:var(--color-success);background:#15803d1a}.badge--disabled{color:var(--color-warn);background:#b453091a}.badge--ok,.badge--success{color:var(--color-success);background:#15803d1a}.badge--danger{background:var(--color-danger-bg,#dc26261a);color:var(--color-danger)}.badge--muted{background:var(--color-surface-hover);color:var(--color-text-muted)}.badge--info{color:var(--color-accent);background:#2563eb1a}.badge--warn{color:var(--color-warn);background:#b453091a}.muted{color:var(--color-text-muted)}.copy-row{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--color-surface-hover);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:12px;display:flex}.copy-row__text{white-space:nowrap;flex:auto;min-width:0;overflow-x:auto}.copy-row__btn{flex:none}.empty{text-align:center;padding:var(--space-7) var(--space-5);color:var(--color-text-muted);border:1px dashed var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface)}.empty__icon{margin-bottom:var(--space-3);opacity:.6;font-size:32px}.empty__icon svg{width:1em;height:1em}.empty__title{color:var(--color-text);margin:0 0 var(--space-2);font-size:15px;font-weight:600}.empty__hint{margin:0;font-size:13px}.empty__hint code{background:var(--color-surface-hover);border-radius:4px;padding:1px 6px}.alert{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);margin-bottom:var(--space-4);align-items:center;gap:var(--space-2);display:flex}.alert--error{background:var(--color-danger-bg);color:var(--color-danger);border:1px solid var(--color-danger)}.alert--info{background:var(--color-accent-bg);color:var(--color-accent);border:1px solid var(--color-accent);font-size:13px;line-height:1.5;display:block}.alert--info code{word-break:break-all;background:#0000000d;border-radius:3px;padding:0 4px;font-size:12px}.detail-dialog{overflow-wrap:anywhere;min-width:0}.detail-hero{align-items:flex-start;gap:var(--space-3);flex:1;min-width:0;display:flex}.detail-hero__icon{border-radius:var(--radius-md);background:#0000000a;border:1px solid #00000014;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:20px;line-height:1;display:inline-flex}.detail-hero__text{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.detail-hero__kind{letter-spacing:.08em;color:var(--color-text-muted);text-transform:uppercase;font-size:10px;font-weight:600}.detail-hero__title{align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0;display:flex}.detail-hero__name{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);letter-spacing:-.01em;word-break:break-word;min-width:0;font-size:17px;font-weight:600}.detail-hero__status{border:1px solid #0000;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:11px;font-weight:500;display:inline-flex}.detail-hero__status--ready{color:#1f7a3a;background:#1f7a3a14;border-color:#1f7a3a33}.detail-hero__status--blocked{color:#b54708;background:#b5470814;border-color:#b5470833}.detail-hero__status-dot{font-size:8px;line-height:1}.detail-hero__status-dot--ready{color:#1f7a3a}.detail-hero__status-dot--blocked{color:#b54708}.detail-hero__namespace{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);color:var(--color-text-muted);word-break:break-word;font-size:12px}.detail-dialog__tabs{gap:var(--space-2);border-bottom:1px solid var(--color-border);margin:calc(-1 * var(--space-2)) 0 0 0;display:flex}.detail-dialog__tab{appearance:none;padding:var(--space-2) var(--space-3);color:var(--color-text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;font-size:13px;font-weight:500;transition:color .12s,border-color .12s}.detail-dialog__tab:hover{color:var(--color-text)}.detail-dialog__tab--active{color:var(--color-text);border-bottom-color:var(--color-accent)}.detail-dialog__dl{gap:var(--space-2) var(--space-4);margin:0 0 var(--space-4) 0;grid-template-columns:110px 1fr;font-size:13px;line-height:1.5;display:grid}.detail-dialog__dl dt{color:var(--color-text-muted);padding-top:2px;font-weight:500}.detail-dialog__dl dd{word-wrap:break-word;min-width:0;margin:0}.detail-dialog__dl code{background:#0000000d;border-radius:3px;padding:1px 6px;font-size:12px}.detail-dialog__origin{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);color:var(--color-accent);word-break:break-all;font-size:12px;text-decoration:none}.detail-dialog__origin:hover{text-decoration:underline}.detail-dialog__origin-scheme{color:var(--color-text-muted);font-size:11px}.detail-dialog__status{align-items:center;gap:6px;display:inline-flex}.detail-dialog__empty{color:var(--color-text-muted);font-style:italic}.detail-dialog__deps{flex-direction:column;gap:4px;min-width:0;margin:0;padding:0;list-style:none;display:flex}.detail-dialog__deps li{min-width:0;margin:0}.detail-dialog__dep{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);color:var(--color-text);word-break:break-all;overflow-wrap:anywhere;background:#0000000a;border:1px solid #00000014;border-radius:4px;padding:4px 8px;font-size:11px;line-height:1.4;text-decoration:none;display:block}.detail-dialog__dep:hover{background:var(--color-accent-bg);border-color:var(--color-accent);color:var(--color-accent)}.detail-dialog__prereqs{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);white-space:pre-wrap;word-wrap:break-word;background:#00000008;margin:0;font-size:12px}.detail-dialog__code{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);white-space:pre;background:#0000000a;max-height:400px;margin:0;font-size:12px;line-height:1.45;overflow-x:auto}.kv-list{gap:var(--space-3) var(--space-5);grid-template-columns:180px 1fr;font-size:13px;display:grid}.kv-list dt{color:var(--color-text-muted);font-weight:500}.kv-list dd{font-family:var(--font-mono);word-break:break-all;margin:0}.env-hint{vertical-align:middle;align-items:center;margin-left:4px;display:inline-flex;position:relative}.env-hint__trigger{color:var(--color-text-muted);cursor:help;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;padding:0;display:inline-flex}.env-hint__trigger:hover,.env-hint__trigger:focus-visible{color:var(--color-text);outline:none}.env-hint__icon{width:14px;height:14px}.env-hint__bubble{color:#f5f6f8;width:max-content;max-width:260px;box-shadow:var(--shadow-md);font-family:var(--font-sans);text-align:left;white-space:normal;opacity:0;visibility:hidden;pointer-events:none;z-index:100;background:#1a1d23eb;border-radius:4px;padding:5px 8px;font-size:11px;font-weight:400;line-height:1.45;transition:opacity .12s .15s,visibility .12s .15s;position:absolute;top:calc(100% + 4px);left:0}.env-hint:hover .env-hint__bubble,.env-hint:focus-within .env-hint__bubble{opacity:1;visibility:visible}.card-grid{gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(360px,1fr));display:grid}.card-grid__item{gap:var(--space-2);padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-bg);cursor:pointer;border-left-width:3px;flex-direction:column;transition:border-color .1s,box-shadow .1s,transform .1s;display:flex;position:relative}.card-grid__item[data-status=ready]{border-left-color:var(--color-success)}.card-grid__item[data-status=blocked]{border-left-color:var(--color-warn);background:var(--color-surface)}.card-grid__item:hover{border-color:var(--color-border-strong);box-shadow:var(--shadow-md)}.card-grid__item[data-status=ready]:hover{border-left-color:var(--color-success)}.card-grid__item[data-status=blocked]:hover{border-left-color:var(--color-warn)}.card-grid__item:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.card-grid__item--highlight{animation:2s ease-out both card-grid-highlight}@keyframes card-grid-highlight{0%{background:var(--color-accent-bg);box-shadow:0 0 0 2px var(--color-accent)}to{background:0 0;box-shadow:0 0 #0000}}.card-grid__header{justify-content:space-between;align-items:center;min-height:18px;display:flex}.card-grid__kind{letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-subtle);align-items:center;gap:4px;font-size:10px;font-weight:600;display:inline-flex}.card-grid__title{margin-top:var(--space-1);flex-direction:column;gap:2px;display:flex}.card-grid__namespace{font-family:var(--font-mono);color:var(--color-text-subtle);letter-spacing:-.01em;word-break:break-all;min-height:13.2px;font-size:11px;line-height:1.2}.card-grid__short{letter-spacing:-.01em;color:var(--color-text);word-break:break-word;overflow-wrap:anywhere;font-size:16px;font-weight:600;line-height:1.25}.card-grid__reason{padding:var(--space-1) 0;color:#0000;min-height:calc(12px * 1.4 + var(--space-1) * 2);align-items:baseline;gap:4px;margin:0;font-size:12px;line-height:1.4;display:flex}.card-grid__reason--filled{color:var(--color-warn)}.card-grid__footer{align-items:center;gap:var(--space-2);color:var(--color-text-subtle);padding-top:var(--space-2);border-top:1px solid var(--color-border);margin-top:auto;font-size:11px;display:flex}.card-grid__meta-item{font-family:var(--font-mono)}.card-grid__meta-sep{background:var(--color-border);width:1px;height:12px}.card-grid__meta-spacer{flex:1}.card-grid__status{font-family:var(--font-sans);align-items:center;gap:5px;font-size:11px;font-weight:500;display:inline-flex}.card-grid__status-dot{background:currentColor;border-radius:50%;width:6px;height:6px}.card-grid__status--ready{color:var(--color-success)}.card-grid__status--blocked{color:var(--color-warn)}.card-grid__action--icon{border-radius:var(--radius-sm);color:var(--color-text-subtle);cursor:pointer;opacity:0;background:0 0;border:0;flex-shrink:0;align-items:center;padding:4px;transition:opacity .1s,background .1s,color .1s;display:inline-flex}.card-grid__item:hover .card-grid__action--icon,.card-grid__action--icon:focus-visible{opacity:1}.card-grid__action--icon:hover{background:var(--color-danger-bg);color:var(--color-danger)}.card-grid__action--icon svg{width:14px;height:14px;display:block}.card-grid__desc{color:var(--color-text-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:37.7px;margin:0;font-size:13px;line-height:1.45;display:-webkit-box;overflow:hidden}.modal{border-radius:var(--radius-lg);background:var(--color-bg);width:480px;max-width:90vw;max-height:85vh;color:var(--color-text);border:0;padding:0;overflow:hidden;box-shadow:0 12px 32px #0f172a2e}.modal--large{width:800px;max-width:95vw}.modal::backdrop{background:#0f172a66}.modal__inner{flex-direction:column;max-height:85vh;display:flex}.modal__header{padding:var(--space-3) var(--space-3) var(--space-3) var(--space-5);border-bottom:1px solid var(--color-border);flex-shrink:0;align-items:center;display:flex}.modal__header--rich{padding:var(--space-4) var(--space-3) var(--space-4) var(--space-5);align-items:flex-start}.modal__close{flex-shrink:0}.modal__header--rich .modal__close{margin-top:4px}.modal__title{letter-spacing:-.01em;flex:1;margin:0;font-size:15px;font-weight:600}.modal__body{padding:var(--space-5);gap:var(--space-4);flex-direction:column;flex:1;min-height:0;display:flex;overflow-y:auto}.modal__inner>form{flex-direction:column;flex:auto;min-height:0;display:flex;overflow:hidden}.modal__body--scroll{padding:var(--space-4) var(--space-5)}.modal__body p{color:var(--color-text);margin:0}.modal__body p code{background:var(--color-surface-hover);border-radius:4px;padding:1px 6px}.modal__footer{justify-content:flex-end;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-top:1px solid var(--color-border);background:var(--color-surface);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg);flex-shrink:0;display:flex}.modal__footer-secondary{margin-right:auto}.form-field{gap:var(--space-2);flex-direction:column;display:flex}.form-field label{color:var(--color-text);font-size:12px;font-weight:500}.form-label-aside{color:var(--color-text-muted);margin-left:6px;font-weight:400}.form-field input,.form-field textarea,.form-field select{font-family:var(--font-sans);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);resize:vertical;font-size:13px}.form-field input{font-family:var(--font-mono)}.form-field select{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%23666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='3 4.5 6 7.5 9 4.5'/></svg>");background-repeat:no-repeat;background-position:right var(--space-3) center;padding-right:calc(var(--space-3) + 18px);cursor:pointer;background-size:12px 12px}.form-field input:focus,.form-field textarea:focus,.form-field select:focus{outline:2px solid var(--color-accent);outline-offset:-1px;border-color:var(--color-accent)}.form-field input:disabled,.form-field textarea:disabled,.form-field select:disabled{background:var(--color-surface);cursor:not-allowed}.install-dialog__provider{max-width:200px}.metadata-form{gap:var(--space-4);flex-direction:column;display:flex}.chips{position:relative}.chips__row{align-items:center;gap:var(--space-1);padding:var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);flex-wrap:wrap;min-height:36px;display:flex}.chips__row:focus-within{outline:2px solid var(--color-accent);outline-offset:-1px;border-color:var(--color-accent)}.chips__chip{align-items:center;gap:var(--space-1);background:var(--color-accent-bg);border-radius:var(--radius-sm);font-family:var(--font-mono);color:var(--color-accent);padding:2px 4px 2px 8px;font-size:12px;display:inline-flex}.chips__chip--invalid{color:#b91c1c;background:#dc26261a}.chips__chip--invalid .chips__chip-remove{color:#b91c1c}.chips__chip--invalid .chips__chip-remove:hover{background:#dc26262e}.chips__chip-text{line-height:1.2}.chips__chip-remove{width:16px;height:16px;color:var(--color-accent);cursor:pointer;background:0 0;border:0;border-radius:3px;justify-content:center;align-items:center;padding:0;display:inline-flex}.chips__chip-remove:hover{background:#2563eb2e}.chips__chip-remove svg{width:12px;height:12px}.chips__input{min-width:100px;font-family:var(--font-mono);color:var(--color-text);background:0 0;border:0;outline:none;flex:1;padding:2px 4px;font-size:12px}.chips__empty{color:var(--color-text-subtle);padding:0 var(--space-1);font-size:12px;font-style:italic}.chips__suggest{z-index:1000;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);max-height:200px;box-shadow:var(--shadow-md);padding:var(--space-1);position:fixed;overflow-y:auto}.chips__suggest-item{align-items:center;gap:var(--space-2);width:100%;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-family:var(--font-mono);text-align:left;color:var(--color-text);cursor:pointer;background:0 0;border:0;font-size:12px;display:flex}.chips__suggest-item:hover{background:var(--color-surface-hover)}.chips__suggest-item svg{width:12px;height:12px;color:var(--color-text-subtle)}.form-hint{color:var(--color-text-muted);margin:0;font-size:12px}.form-hint code{background:var(--color-surface-hover);border-radius:4px;padding:1px 6px;font-size:11px}.code-editor{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);overflow:hidden}.code-editor:focus-within{border-color:var(--color-accent);outline:2px solid var(--color-accent);outline-offset:-1px}.code-editor .cm-editor{background:var(--color-bg)}.code-editor .cm-editor.cm-focused{outline:none}.code-editor .cm-scroller{overflow:auto}.code-editor .cm-gutters{background:var(--color-surface);border-right:1px solid var(--color-border);color:var(--color-text-subtle)}.code-editor .cm-activeLine{background:#2563eb0a}.code-editor .cm-activeLineGutter{background:#2563eb0f}.link-button{color:var(--color-accent);font-family:var(--font-mono);font-size:inherit;cursor:pointer;text-align:left;background:0 0;border:0;padding:0;font-weight:500}.select{padding:var(--space-2) var(--space-3);padding-right:var(--space-6);border:1px solid var(--color-border);border-radius:var(--radius-md);background-color:var(--color-bg);color:var(--color-text);cursor:pointer;appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");background-repeat:no-repeat;background-position:right var(--space-3) center;background-size:12px;font-family:inherit;font-size:13px;line-height:1.4}.select:hover{border-color:var(--color-border-strong)}.select:focus{outline:2px solid var(--color-accent);outline-offset:-1px;border-color:var(--color-accent)}.select:disabled{opacity:.5;cursor:not-allowed;background-color:var(--color-surface)}.select--full{width:100%}.input{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background-color:var(--color-bg);color:var(--color-text);font-family:inherit;font-size:13px;line-height:1.4}.input:hover{border-color:var(--color-border-strong)}.input:focus{outline:2px solid var(--color-accent);outline-offset:-1px;border-color:var(--color-accent)}.input:disabled{opacity:.5;cursor:not-allowed;background-color:var(--color-surface)}.pills{border:1px solid var(--color-border);border-radius:var(--radius-md);background-color:var(--color-bg);flex-shrink:0;display:inline-flex;overflow:hidden}.pills__btn{appearance:none;padding:var(--space-2) var(--space-3);color:var(--color-text-muted);cursor:pointer;background:0 0;border:0;font-family:inherit;font-size:13px;line-height:1.4}.pills__btn:not(:last-child){border-right:1px solid var(--color-border)}.pills__btn:hover:not(.pills__btn--active){background-color:var(--color-surface);color:var(--color-text)}.pills__btn--active{background-color:var(--color-accent);color:#fff;cursor:default}.pills__btn:disabled{opacity:.5;cursor:not-allowed}.table .col-session{width:200px}.table .col-agent{max-width:280px}.activity-cell{align-items:baseline;gap:var(--space-2);min-width:0;font-size:13px;display:flex}.activity-cell__count{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-text);flex:0 auto;font-weight:600;overflow:hidden}.activity-cell__sep{color:var(--color-text-subtle);flex:none}.activity-cell .muted{white-space:nowrap;flex:none}@keyframes spin{to{transform:rotate(360deg)}}.spin{animation:.9s linear infinite spin}.landing{background:radial-gradient(ellipse 1000px 600px at 50% -10%, #6366f11a, transparent 60%), radial-gradient(ellipse 700px 500px at 50% 110%, #2563eb0d, transparent 60%), var(--color-bg);flex-direction:column;min-height:100vh;display:flex;position:relative;overflow:hidden}.landing__topbar{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-3) var(--space-6);border-bottom:1px solid var(--color-border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:1;background:#ffffff8c;display:flex;position:relative}.landing__topbar-brand{align-items:center;gap:var(--space-3);flex-direction:row;display:flex}.landing__topbar-brand .landing__brand-glyph{filter:drop-shadow(0 3px 10px #6366f138);width:40px;height:40px;margin-bottom:0}.landing__topbar-brand .landing__brand-glyph svg{width:100%;height:100%;display:block}.landing__topbar-wordmark{letter-spacing:-.025em;background:linear-gradient(135deg,#2563eb 0%,#6366f1 45%,#8b5cf6 100%);color:#0000;-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin:0;padding-bottom:.12em;font-size:20px;font-weight:600;line-height:1}.landing__topbar-actions{justify-content:flex-end;align-items:center;gap:var(--space-3);display:flex}.landing__search{align-items:center;width:260px;display:flex;position:relative}.landing__search svg{left:var(--space-3);width:14px;height:14px;color:var(--color-text-subtle);pointer-events:none;position:absolute}.landing__search-input{width:100%;padding:8px var(--space-3) 8px calc(var(--space-3) + 22px);font-size:13px;font-family:var(--font-sans);color:var(--color-text);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);outline:none;transition:border-color .12s,box-shadow .12s}.landing__search-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px #2563eb1f}.landing__search-input::placeholder{color:var(--color-text-subtle)}.landing__main{width:100%;max-width:1200px;padding:var(--space-6) var(--space-6) var(--space-7);gap:var(--space-4);z-index:1;flex-direction:column;flex:1;margin:0 auto;display:flex;position:relative}.landing__section-header{align-items:center;gap:var(--space-3);display:flex}.landing__section-title{color:var(--color-text);align-items:center;gap:var(--space-2);letter-spacing:-.01em;margin:0;font-size:18px;font-weight:600;display:flex}.landing__section-count{color:var(--color-text-subtle);background:var(--color-surface);letter-spacing:0;border-radius:999px;padding:2px 8px;font-size:12px;font-weight:500}.landing__grid{gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));display:grid}.landing__card{align-items:stretch;gap:var(--space-3);padding:var(--space-4);border-radius:var(--radius-lg);border:1px solid var(--color-border);background:var(--color-bg);cursor:pointer;text-align:left;transition:border-color .12s,background .12s,box-shadow .12s,transform .12s;display:flex}.landing__card:hover{border-color:var(--color-accent);transform:translateY(-1px);box-shadow:0 4px 16px #2563eb1a}.landing__card:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.landing__card-body{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.landing__card-header{align-items:center;gap:var(--space-2);min-width:0;display:flex}.landing__card-name{color:var(--color-text);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:600;overflow:hidden}.landing__card-badge{text-transform:uppercase;letter-spacing:.06em;color:var(--color-accent);background:var(--color-accent-bg);border-radius:999px;flex-shrink:0;padding:2px 8px;font-size:10px;font-weight:600}.landing__card-path{font-family:var(--font-mono);color:var(--color-text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.landing__card-footer{justify-content:space-between;align-items:center;gap:var(--space-3);padding-top:var(--space-1);margin-top:auto;display:flex}.landing__card-meta{color:var(--color-text-subtle);white-space:nowrap;font-size:11px}.landing__card-remove{border-radius:var(--radius-md);width:26px;height:26px;color:var(--color-text-subtle);cursor:pointer;opacity:0;background:0 0;border:0;justify-content:center;align-items:center;padding:0;transition:background .1s,color .1s,opacity .12s;display:inline-flex}.landing__card:hover .landing__card-remove,.landing__card:focus-within .landing__card-remove{opacity:1}.landing__card-remove svg{width:14px;height:14px}.landing__card-remove:hover:not(:disabled){background:var(--color-danger-bg);color:var(--color-danger)}.landing__card-remove:disabled{opacity:.4;cursor:not-allowed}.landing__footer{justify-content:center;align-items:center;gap:var(--space-5);padding:var(--space-4) var(--space-6) var(--space-5);border-top:1px solid var(--color-border);z-index:1;display:flex;position:relative}.landing__footer-link{color:var(--color-text-muted);letter-spacing:.01em;align-items:center;gap:6px;font-size:12px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.landing__footer-link:hover{color:var(--color-accent)}.landing__footer-link svg{width:14px;height:14px}.landing__footer-version{font-family:var(--font-mono);color:var(--color-text-subtle);letter-spacing:.04em;font-size:11px}@media (width<=720px){.landing__topbar{gap:var(--space-3);padding:var(--space-4);flex-direction:column}.landing__topbar-actions{flex-wrap:wrap;justify-content:center}.landing__search{width:100%}.landing__main{padding:var(--space-5) var(--space-4)}}.landing__empty{border:1px dashed var(--color-border-strong);border-radius:var(--radius-lg);padding:var(--space-6);text-align:center;background:var(--color-surface)}.landing__empty-title{color:var(--color-text);margin:0 0 var(--space-2);font-size:14px;font-weight:600}.session-list{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.session-list__item{gap:var(--space-2);padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-bg);flex-direction:column;transition:border-color .1s,box-shadow .1s;display:flex}.session-list__item:hover{border-color:var(--color-border-strong);box-shadow:var(--shadow-md)}.session-list__head{justify-content:space-between;align-items:flex-start;gap:var(--space-2);display:flex}.session-list__headline{min-width:0;color:var(--color-text);word-break:break-word;flex:1 1 0;font-size:13px;font-weight:500}.session-list__id{font-family:var(--font-mono);color:var(--color-text-subtle);word-break:break-all;font-size:11px}.session-list__meta{align-items:baseline;gap:0 var(--space-1);flex-wrap:wrap;font-size:12px;display:flex}.session-list__sep{color:var(--color-text-muted,var(--color-text-subtle));opacity:.5}.session-list__actions{align-items:center;gap:var(--space-1);flex-shrink:0;display:flex}.session-list__activity{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.resume-split{align-items:stretch;display:inline-flex;position:relative}.resume-split__main{border-top-right-radius:0;border-bottom-right-radius:0}.resume-split__chevron{padding-left:var(--space-2);padding-right:var(--space-2);border-left:1px solid #ffffff2e;border-top-left-radius:0;border-bottom-left-radius:0}.resume-split__chevron svg{width:14px;height:14px}.resume-split__menu{z-index:10;background:var(--color-bg);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);min-width:220px;box-shadow:var(--shadow-md);padding:var(--space-1);flex-direction:column;gap:2px;display:flex;position:absolute;top:calc(100% + 4px);right:0}.resume-split__menu-item{align-items:flex-start;gap:var(--space-2);padding:var(--space-2);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;text-align:left;background:0 0;border:0;font-family:inherit;transition:background .1s;display:flex}.resume-split__menu-item:hover{background:var(--color-surface-hover)}.resume-split__menu-item--active{background:var(--color-surface)}.resume-split__menu-item svg{flex-shrink:0;width:16px;height:16px;margin-top:2px}.resume-split__menu-text{flex-direction:column;gap:1px;display:flex}.resume-split__menu-title{font-size:13px;font-weight:500}.resume-split__menu-hint{color:var(--color-text-subtle);font-size:11px}.task-list{margin:0;padding:0;list-style:none}.task-list__item{border-bottom:1px solid var(--color-border);grid-template-columns:minmax(0,1fr) auto;align-items:start;transition:background .12s;display:grid}.task-list__item:last-child{border-bottom:0}.task-list__item:hover{background:var(--color-surface-hover)}.task-list__item--selected{background:var(--color-surface-hover);box-shadow:inset 3px 0 0 var(--color-accent,#3b82f6)}.task-list__item-select{gap:var(--space-1);width:100%;padding:var(--space-3) var(--space-2) var(--space-3) var(--space-4);color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;margin:0;display:flex}.task-list__item-select:focus-visible{outline:2px solid var(--color-accent,#3b82f6);outline-offset:-2px}.task-list__item-head{align-items:flex-start;gap:var(--space-2);display:flex}.task-list__item-meta{align-items:baseline;gap:0 var(--space-1);flex-wrap:wrap;font-size:12px;display:flex}.task-list__id{font-family:var(--font-mono);color:var(--color-text-subtle);word-break:break-all;font-size:11px;display:block}.task-list__item-headline{color:var(--color-text);-webkit-line-clamp:2;word-break:break-word;-webkit-box-orient:vertical;font-size:13px;font-weight:500;display:-webkit-box;overflow:hidden}.task-list__sep{color:var(--color-text-muted,var(--color-text-subtle));opacity:.5}.badge--with-dot{align-items:center;gap:6px;display:inline-flex}.badge__dot{background:currentColor;border-radius:50%;width:6px;height:6px}.badge__dot--pulse{animation:1.4s ease-in-out infinite badge-pulse}@keyframes badge-pulse{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}.task-list__item--running .task-list__item-headline{color:var(--color-text)}.tasks-pane{gap:var(--space-3);grid-template-columns:minmax(280px,380px) minmax(0,1fr);align-items:stretch;min-height:0;display:grid}.tasks-pane__list{border:1px solid var(--color-border);border-radius:var(--radius-md);flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.tasks-pane__list-scroll{flex:auto;min-height:0;overflow-y:auto}.tasks-pane__detail{gap:var(--space-3);padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);flex-direction:column;min-width:0;height:100%;min-height:240px;display:flex;overflow:hidden}.tasks-pane__detail--empty{justify-content:center;align-items:center;min-height:240px}.tasks-pane--zero{grid-template-columns:minmax(0,1fr)}.tasks-pane__zero{justify-content:center;align-items:center;gap:var(--space-3);width:100%;min-height:240px;padding:var(--space-7) var(--space-4);border:1px dashed var(--color-border);border-radius:var(--radius-md);text-align:center;flex-direction:column;grid-column:1/-1;display:flex}.tasks-pane__zero .empty__title{margin:0}.tasks-pane__zero .empty__hint{max-width:480px}@media (width<=1024px){.tasks-pane{grid-template-columns:minmax(0,1fr)}}.task-detail__head{gap:var(--space-2);padding-bottom:var(--space-3);border-bottom:1px solid var(--color-border);flex-direction:column;display:flex}.task-detail__title{color:var(--color-text);word-break:break-word;margin:0;font-size:1.05rem;font-weight:600;line-height:1.3}.task-detail__statbar{gap:var(--space-1) var(--space-3);color:var(--color-text);flex-wrap:wrap;font-size:12px;display:flex}.task-detail__statbar-key{color:var(--color-text-subtle);margin-right:2px;font-weight:500}.task-detail__body{flex:1;min-height:200px;overflow:auto}.activity-list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.activity-row{gap:var(--space-1);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-surface);flex-direction:column;min-width:0;display:flex}.activity-row--user{background:#2563eb0a}.activity-row--summary{background:var(--color-surface-hover)}.activity-row__head{align-items:baseline;gap:var(--space-2);display:flex}.activity-row__role{text-transform:uppercase;letter-spacing:.04em;border-radius:var(--radius-sm);padding:1px 6px;font-size:11px;font-weight:600}.activity-row__role--user{color:var(--color-accent);background:#2563eb1a}.activity-row__role--assistant{color:var(--color-success);background:#15803d1a}.activity-row__role--summary{color:var(--color-text-subtle);background:var(--color-surface-hover)}.activity-row__time{color:var(--color-text-subtle);font-size:11px}.activity-row__body{color:var(--color-text);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;min-width:0;margin:0;font-size:13px;line-height:1.5}.activity-row__pre{font-family:var(--font-mono);color:var(--color-text);background:var(--color-surface-hover);padding:var(--space-2);border-radius:var(--radius-sm);white-space:pre-wrap;word-break:break-all;overflow-wrap:anywhere;min-width:0;max-height:240px;margin:0;font-size:11px;line-height:1.45;overflow-y:auto}.activity-row__tool{font-family:var(--font-mono);border-radius:var(--radius-sm);background:var(--color-surface-hover);color:var(--color-text-subtle);padding:1px 6px;font-size:11px}.activity-row__summary-grid{color:var(--color-text);flex-direction:column;gap:2px;font-size:12px;display:flex}.resolve-tree{gap:var(--space-3);margin-top:var(--space-3);flex-direction:column;display:flex}.resolve-tree__summary{flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;display:flex}.resolve-tree__count{color:var(--color-text-muted);background:#0000000d;border-radius:999px;align-items:center;padding:2px 8px;font-weight:500;display:inline-flex}.resolve-tree__count--new{background:var(--color-accent-bg);color:var(--color-accent)}.resolve-tree__count--existing{color:var(--color-text-muted);background:#0000000d}.resolve-tree__count--sync{color:#92400e;background:#fef3c7}.resolve-tree__count--problem{background:var(--color-danger-bg);color:var(--color-danger)}.resolve-tree__list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.resolve-tree__item{margin:0}.resolve-tree__row{align-items:flex-start;gap:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);display:flex}.resolve-tree__row--root{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent-bg)}.resolve-tree__row--problem{border-color:var(--color-danger);background:var(--color-danger-bg)}.resolve-tree__kind{background:#0000000a;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:14px;line-height:1;display:inline-flex}.resolve-tree__kind[data-kind=agent]{background:#ede9fe}.resolve-tree__kind[data-kind=skill]{background:#dbeafe}.resolve-tree__kind[data-kind=mcp]{background:#fef3c7}.resolve-tree__main{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.resolve-tree__line{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.resolve-tree__fqn{font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);color:var(--color-text);word-break:break-all;background:#0000000a;border-radius:4px;max-width:100%;padding:2px 8px;font-size:12px}.resolve-tree__root-tag{text-transform:uppercase;letter-spacing:.04em;color:var(--color-accent);background:var(--color-accent-bg);border-radius:3px;padding:2px 6px;font-size:10px;font-weight:600}.resolve-tree__status{white-space:nowrap;border-radius:999px;margin-left:auto;padding:2px 8px;font-size:11px;font-weight:500}.resolve-tree__status--new{background:var(--color-accent-bg);color:var(--color-accent)}.resolve-tree__status--already-installed{color:var(--color-text-muted);background:#0000000d}.resolve-tree__status--will-sync{color:#92400e;background:#fef3c7}.resolve-tree__status--would-conflict,.resolve-tree__status--fetch-failed,.resolve-tree__status--parse-failed{background:var(--color-danger);color:#fff}.resolve-tree__error{color:var(--color-danger);align-items:flex-start;gap:6px;font-size:12px;line-height:1.45;display:flex}.resolve-tree__error-icon{flex-shrink:0}.resolve-tree__error-msg{word-break:break-word;font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);font-size:11px}.task-list__item-menu{padding:var(--space-3) var(--space-4) var(--space-3) 0;display:inline-flex;position:relative}.task-list__item-menu-trigger{padding:4px}.task-list__item-menu-panel{z-index:40;min-width:160px;padding:var(--space-2);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);max-height:var(--menu-max-height,none);transform-origin:100% 0;flex-direction:column;gap:2px;display:flex;position:absolute;right:0;overflow-y:auto}.task-list__item-menu-panel--below{transform-origin:100% 0;top:calc(100% + 4px);bottom:auto}.task-list__item-menu-panel--above{transform-origin:100% 100%;top:auto;bottom:calc(100% + 4px)}.task-list__item-menu-option{align-items:center;gap:var(--space-2);padding:var(--space-2);border-radius:var(--radius-sm);color:var(--color-text);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;font-size:13px;display:flex}.task-list__item-menu-option:hover{background:var(--color-surface-hover)}.task-list__item-menu-option:disabled,.task-list__item-menu-option[aria-disabled=true]{opacity:.6;cursor:not-allowed}.task-list__item-menu-option--danger{color:var(--color-danger,#c0392b)}.task-list__item-menu-option--danger:hover{background:var(--color-danger-bg,#c0392b14)}.task-list__item--paused .task-list__item-headline,.task-list__item--paused .task-list__item-meta{color:var(--color-text-muted)}.task-filters{gap:var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);background:var(--color-bg);flex-direction:column;flex:none;display:flex}.task-filters__row{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.task-filters__row--compact{gap:var(--space-2)}.task-filters__search-wrap{flex:200px;align-items:center;min-width:200px;display:flex;position:relative}.task-filters__search-icon{color:var(--color-text-subtle);pointer-events:none;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.task-filters__search{box-sizing:border-box;width:100%;height:32px;padding-top:4px;padding-bottom:4px;padding-left:30px;font-size:12px;line-height:1.2}.task-filters__select{flex:0 auto;min-width:92px;height:30px;padding-top:2px;padding-bottom:2px;font-size:12px}.task-filters__pills{flex:0 auto}.task-list-groups{gap:var(--space-3);padding:var(--space-2);flex-direction:column;display:flex}.task-list-group{gap:var(--space-1);flex-direction:column;display:flex}.task-list-group__header{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-2);cursor:pointer;font:inherit;color:var(--color-text-muted);text-align:left;border-radius:var(--radius-sm);background:0 0;border:0;display:flex}.task-list-group__header:hover{background:var(--color-surface-hover)}.task-list-group__caret{width:12px;color:var(--color-text-subtle);font-size:10px;transition:transform .12s;display:inline-block}.task-list-group__label{text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:700}.task-list-group__count{color:var(--color-text-subtle);background:var(--color-surface);padding:0 var(--space-2);border:1px solid var(--color-border);border-radius:999px;margin-left:auto;font-size:11px}.task-list-group--empty .task-list-group__header{opacity:.55;cursor:default}.task-list-group--empty .task-list-group__header:hover{background:0 0}.task-detail__title-row{justify-content:space-between;align-items:flex-start;gap:var(--space-3);padding:0 0 var(--space-2);flex-wrap:wrap;display:flex}.task-detail__title-row>.task-detail__title{flex:auto;min-width:0}.task-detail__title-actions{align-items:center;gap:var(--space-2);flex-shrink:0;display:flex}.fire-task-nav{align-items:center;gap:var(--space-1);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);flex-wrap:nowrap;padding:2px 4px;font-size:.85rem;line-height:1;display:inline-flex}.fire-task-nav--fallback{gap:var(--space-2);padding:var(--space-2) var(--space-3);border:0;border-bottom:1px solid var(--color-border);background:0 0;border-radius:0;flex:none;display:flex}.fire-task-nav__back{border-radius:var(--radius-sm);max-width:180px;color:var(--color-text);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:2px;padding:4px 8px;display:inline-flex}.fire-task-nav__back:hover{background:var(--color-surface-hover)}.fire-task-nav__back-label{text-overflow:ellipsis;white-space:nowrap;max-width:140px;overflow:hidden}.fire-task-nav__sep{background:var(--color-border);width:1px;height:16px;margin:0 2px}.fire-task-nav__step{border-radius:var(--radius-sm);min-width:22px;height:22px;color:var(--color-text);font:inherit;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.fire-task-nav__step:hover:not(:disabled){background:var(--color-surface-hover)}.fire-task-nav__step:disabled{color:var(--color-text-subtle);cursor:not-allowed;opacity:.5}.fire-task-nav__pos{font-variant-numeric:tabular-nums;color:var(--color-text-subtle);text-align:center;white-space:nowrap;min-width:36px;padding:0 4px}.task-detail__meta-row{gap:var(--space-2);padding:0 0 var(--space-3);flex-wrap:wrap;display:flex}.task-detail__meta-chip{align-items:center;gap:var(--space-1);padding:2px var(--space-2);color:var(--color-text-muted);background:var(--color-surface);border:1px solid var(--color-border);border-radius:999px;font-size:12px;display:inline-flex}.task-detail__statbar-id{color:var(--color-text-subtle);align-items:center;gap:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;display:inline-flex}.task-detail__statbar-id>code{font:inherit;color:inherit}.task-tabs{gap:var(--space-1);padding:0 var(--space-4);border-bottom:1px solid var(--color-border);display:flex}.task-tabs__btn{padding:var(--space-2) var(--space-3);font:inherit;color:var(--color-text-muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;font-size:13px}.task-tabs__btn:hover{color:var(--color-text)}.task-tabs__btn--active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.overview-tab{gap:var(--space-3);padding:var(--space-4);flex-direction:column;flex:auto;min-height:0;display:flex}.task-details{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3)}.task-details__copy{border-radius:var(--radius-sm);cursor:pointer;color:var(--color-text-subtle);background:0 0;border:0;justify-content:center;align-items:center;padding:2px;font-size:11px;line-height:0;display:inline-flex}.task-details__copy:hover{background:var(--color-surface-hover);color:var(--color-text)}.task-details__copy-wrap{align-items:center;display:inline-flex}.artifacts-pane{gap:var(--space-3);flex-direction:column;height:100%;min-height:0;display:flex}.artifacts-pane__header{align-items:center;gap:var(--space-3);flex:none;display:flex}.artifacts-pane__selector-label{flex:auto;min-width:0}.artifacts-pane__selector{background:var(--color-surface);width:100%;color:var(--color-text);border:1px solid var(--color-border);border-radius:var(--radius-sm,4px);font:inherit;cursor:pointer;padding:6px 10px}.artifacts-pane__selector:focus-visible{outline:2px solid var(--color-accent,var(--color-text));outline-offset:1px}.artifacts-pane__download{color:var(--color-text-subtle);border:1px solid var(--color-border);border-radius:var(--radius-sm,4px);background:var(--color-surface);flex:none;padding:6px 12px;font-size:12px;text-decoration:none}.artifacts-pane__download:hover{color:var(--color-text)}.artifacts-pane__download--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.artifacts-pane__preview{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);min-height:0;padding:var(--space-3);flex-direction:column;flex:auto;display:flex;overflow:auto}.artifacts-pane__preview>*{flex:auto;min-height:0}.artifact-viewer{color:var(--color-text);min-height:60px;font-size:13px}.artifact-viewer--empty,.artifact-viewer--error{padding:var(--space-6,24px);color:var(--color-text-subtle);justify-content:center;align-items:center;gap:var(--space-2);display:flex}.artifact-viewer--error{color:var(--color-danger,#c92a2a)}.artifact-viewer__spinner{border:2px solid var(--color-border);border-top-color:var(--color-text);border-radius:50%;width:12px;height:12px;animation:.8s linear infinite artifact-spinner;display:inline-block}@keyframes artifact-spinner{to{transform:rotate(360deg)}}.artifact-viewer--code,.artifact-viewer--text{padding:var(--space-3);background:var(--color-surface-elevated,var(--color-surface));border-radius:var(--radius-sm,4px);font-family:var(--font-mono,ui-monospace, SFMono-Regular, monospace);white-space:pre-wrap;word-break:break-word;margin:0;font-size:12px;line-height:1.5;overflow:auto}.artifact-viewer--code code{font:inherit;background:0 0;padding:0}.artifact-viewer--html{flex-direction:column;height:100%;min-height:0;padding:0;display:flex}.artifact-viewer__html-controls{justify-content:space-between;align-items:center;row-gap:var(--space-1);gap:var(--space-2);border-bottom:1px solid var(--color-border);background:var(--color-surface-elevated,var(--color-surface));color:var(--color-text-muted);flex-wrap:wrap;flex:none;padding:4px 8px;font-size:12px;display:flex}.artifact-viewer__html-status{font-variant-numeric:tabular-nums}.artifact-viewer__html-status[data-scripts=on]{color:var(--color-accent,var(--color-text));font-weight:600}.artifact-viewer__html-toggle{cursor:pointer;color:var(--color-text);-webkit-user-select:none;user-select:none;align-items:center;gap:6px;display:inline-flex}.artifact-viewer__html-toggle input{cursor:pointer;margin:0}.artifact-viewer__html-toggle input:focus-visible{outline:2px solid var(--color-accent,var(--color-text));outline-offset:2px}.artifact-viewer__iframe{border-radius:var(--radius-sm,4px);background:#fff;border:0;flex:auto;width:100%;height:100%;min-height:0}.artifact-viewer--image{padding:var(--space-2);justify-content:center;align-items:center;display:flex}.artifact-viewer__img{object-fit:contain;max-width:100%;height:auto;max-height:100%}.artifact-viewer--binary{gap:var(--space-2);padding:var(--space-4);text-align:center;flex-direction:column;align-items:center;display:flex}.artifact-viewer__download{border:1px solid var(--color-border);border-radius:var(--radius-sm,4px);color:var(--color-text);padding:6px 12px;text-decoration:none;display:inline-block}.artifact-viewer__download:hover{background:var(--color-surface-elevated,var(--color-surface))}.task-list__item-headline--clamp{-webkit-line-clamp:2;word-break:break-word;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.task-list__id--muted{color:var(--color-text-subtle);text-align:right;text-overflow:ellipsis;white-space:nowrap;align-self:flex-end;max-width:100%;margin-left:auto;font-size:10px;overflow:hidden}.overview-tab__failure-callout{gap:var(--space-2);flex-direction:column;flex:none;margin:0;display:flex}.overview-tab__strip{flex:none;margin:0}.overview-tab__failure-head{align-items:center;gap:var(--space-2);font-size:13px;display:flex}.overview-tab__failure-chip{border-radius:var(--radius-sm);background:#0000000f;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.overview-tab__failure-message{word-break:break-word;margin:0;font-size:13px;line-height:1.5}.overview-tab__failure-meta{margin:0;font-size:12px}.overview-tab__failure-actions{gap:var(--space-3);flex-wrap:wrap;display:flex}.overview-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);flex-direction:column;flex:1 1 0;min-height:200px;display:flex;overflow:hidden}.overview-card__head{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);background:var(--color-bg);flex:none}.overview-card__title{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-subtle);margin:0;font-size:11px}.overview-card__body{min-height:0;padding:var(--space-3);flex:auto;overflow:auto}.overview-card__pre{white-space:pre-wrap;word-break:break-word;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.5}.overview-tab__no-details{margin:0;font-size:13px}.overview-tab__running-hint{font-size:13px;line-height:1.5}.link-button{font:inherit;color:var(--color-accent);cursor:pointer;background:0 0;border:0;margin:0;padding:0;text-decoration:underline}.link-button:hover{text-decoration:none}.md{color:var(--color-text);font-size:14px;line-height:1.6}.md h1,.md h2,.md h3{margin:var(--space-4) 0 var(--space-2)}.md h1{font-size:18px}.md h2{font-size:16px}.md h3{text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);font-size:14px}.md p{margin:0 0 var(--space-3)}.md ul,.md ol{margin:0 0 var(--space-3);padding-left:var(--space-5)}.md li{margin-bottom:var(--space-1)}.md a{color:var(--color-accent);text-decoration:underline}.md-code{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.md pre{margin:0 0 var(--space-3);padding:var(--space-3);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.5;overflow-x:auto}.md pre code{background:0 0;border:0;padding:0}@media (width<=768px){.tasks-pane--with-detail{grid-template-columns:1fr}}.tasks-page{flex-direction:column;height:100%;min-height:0;display:flex}.tasks-page>.alert{flex:none}.tasks-page>.tasks-pane{flex:auto;min-height:0}.tasks-pane__detail>.task-detail__head,.tasks-pane__detail>.task-tabs{flex:none}.tasks-pane__detail>.overview-tab,.tasks-pane__detail>.task-detail__body,.tasks-pane__detail>.activity-view,.tasks-pane__detail>.artifacts{flex:auto;min-height:0;overflow:auto}.tasks-pane__detail>.agent-detail__header{flex:none}.tasks-pane__detail>.agent-overview,.tasks-pane__detail>.empty,.tasks-pane__detail>.alert{flex:auto;min-height:0;overflow:auto}.task-details__copy-icon{stroke-width:1.5px;width:12px;height:12px;transform:translateY(1px)}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.overview-tab__no-summary{color:var(--color-text-muted);margin:0;font-size:13px;line-height:1.5}.agent-overview__list{gap:var(--space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.agent-overview__item{margin:0}.agent-overview__row{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:inherit;border:1px solid #0000;text-decoration:none;transition:background-color .1s,border-color .1s;display:flex}.agent-overview__row:hover,.agent-overview__row:focus-visible{background:var(--color-bg-subtle,#0000000a);border-color:var(--color-border);outline:none;text-decoration:none}.agent-overview__title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.agent-overview__meta{flex:none}.session-list__item--preselected{border-color:var(--color-accent,var(--color-border-strong));box-shadow:var(--shadow-md)}.agents-page{flex-direction:column;height:100%;min-height:0;display:flex}.agents-page>.alert{flex:none}.agents-page>.tasks-pane{flex:auto;min-height:0}.agents-list-toolbar{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);background:var(--color-bg);flex-wrap:wrap;flex:none;display:flex}.agents-list-toolbar__search{flex:160px;min-width:160px;max-width:320px;margin-left:auto}.agents-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.agents-list__item{border-bottom:1px solid var(--color-border);margin:0;transition:background-color .1s;position:relative}.agents-list__item:last-child{border-bottom:0}.agents-list__item-select{align-items:center;gap:var(--space-3);width:100%;min-height:64px;padding:var(--space-3) var(--space-4);color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:0;transition:background-color .1s;display:flex}.agents-list__item-select:hover{background:var(--color-surface-hover)}.agents-list__item-select:focus-visible{outline:2px solid var(--color-accent,#3b82f6);outline-offset:-2px}.agents-list__item--selected{background:var(--color-surface-hover);box-shadow:inset 4px 0 0 var(--color-accent,#3b82f6)}.agents-list__item--selected .agent-fqn__short,.agents-list__item--selected .agent-fqn__sep{font-weight:700}.agents-list__item--selected .agent-fqn__scope{font-weight:500}.agents-list__identity{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.agents-list__subline{font-size:12px;line-height:1.3}.agents-list__status-col{align-items:flex-end;gap:var(--space-1);flex-direction:column;flex:none;display:flex}.agents-list__activity{align-items:center;min-height:14px;font-size:12px;display:inline-flex}.skeleton{background:linear-gradient(90deg, var(--color-surface-hover) 0%, var(--color-surface) 50%, var(--color-surface-hover) 100%);border-radius:var(--radius-sm);background-size:200% 100%;animation:1.4s ease-in-out infinite skeleton-shimmer;display:inline-block}.skeleton--text{width:56px;height:10px}@keyframes skeleton-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.agent-status-pill{align-items:center;gap:var(--space-1);padding:2px var(--space-2);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text-muted);white-space:nowrap;border-radius:999px;font-size:12px;font-weight:500;line-height:1.4;display:inline-flex}.agent-status-pill__dot{background:var(--color-text-subtle);border-radius:50%;flex:none;width:6px;height:6px}.agent-status-pill--running{color:var(--color-success);background:#15803d14;border-color:#15803d59}.agent-status-pill--running .agent-status-pill__dot{background:var(--color-success)}.agent-status-pill--idle{background:var(--color-surface)}.agent-detail__header{gap:var(--space-3);flex-direction:column;display:flex}.agent-detail__title-row{align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.agent-detail__name-block{flex-direction:column;gap:2px;min-width:0;display:flex}.agent-detail__title{color:var(--color-text);margin:0;font-size:24px;font-weight:700;line-height:1.15}.agent-detail__scope{color:var(--color-text-muted);font-size:13px}.agent-detail__version{color:var(--color-text-subtle);font-size:12px;font-family:var(--font-mono,monospace)}.agent-detail__spacer{flex:1}.agent-detail__actions{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:inline-flex}.agent-detail__kpis{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}@media (width<=1024px){.agent-detail__kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=640px){.agent-detail__kpis{grid-template-columns:1fr}}.kpi-tile{gap:var(--space-1);padding:var(--space-3) var(--space-4);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);flex-direction:column;display:flex}.kpi-tile__label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.kpi-tile__value{color:var(--color-text);font-size:28px;font-weight:700;line-height:1.1}.kpi-tile__caption{font-size:12px}.agent-overview__more{align-items:center;gap:var(--space-1);margin-top:var(--space-2);padding:var(--space-1) var(--space-2);color:var(--color-accent);border-radius:var(--radius-sm);font-size:13px;font-weight:500;text-decoration:none;transition:background-color .1s,color .1s;display:inline-flex}.agent-overview__more:hover,.agent-overview__more:focus-visible{background:var(--color-accent-bg);color:var(--color-accent-hover);outline:none;text-decoration:none}.agent-overview__heading{margin:0 0 var(--space-2);color:var(--color-text);font-size:14px;font-weight:600}.agent-overview{gap:var(--space-5);flex-direction:column;display:flex}.agent-overview--grid{gap:var(--space-4);grid-template-rows:auto auto;grid-template-columns:1fr 1fr;display:grid}@media (width<=1024px){.agent-overview--grid{grid-template-columns:1fr}}.agent-overview__cell{padding:var(--space-3) var(--space-4);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);flex-direction:column;min-width:0;min-height:140px;display:flex}.agent-overview__cell--wide{grid-column:1/-1}.agent-overview__activity{align-items:center;gap:var(--space-2);min-width:0;margin:0;display:flex}.agent-overview__activity>.agent-overview__title{flex:1 1 0;min-width:0}.agent-overview__activity-dots{align-items:center;gap:2px;display:inline-flex}.agent-overview__activity-dot{background:var(--color-accent);border-radius:50%;width:4px;height:4px;animation:1.2s ease-in-out infinite agent-activity-pulse}.agent-overview__activity-dot:nth-child(2){animation-delay:.2s}.agent-overview__activity-dot:nth-child(3){animation-delay:.4s}@keyframes agent-activity-pulse{0%,80%,to{opacity:.3}40%{opacity:1}}.agent-overview__badge{border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.04em;background:var(--color-surface-hover);color:var(--color-text-muted);flex:none;align-items:center;padding:2px 6px;font-size:11px;font-weight:500;display:inline-flex}.agent-overview__badge--running{color:var(--color-accent);background:#2563eb1a}.agent-overview__badge--succeeded{color:var(--color-success);background:#15803d1a}.agent-overview__badge--failed{background:var(--color-danger-bg);color:var(--color-danger)}.agent-overview__badge--cancelled{background:var(--color-surface-hover);color:var(--color-text-muted)}.agent-avatar{letter-spacing:.04em;text-transform:uppercase;-webkit-user-select:none;user-select:none;border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.agent-avatar--sm{font-size:11px}.agent-avatar--md{font-size:14px}.agent-avatar--lg{font-size:18px}.agent-fqn{min-width:0;color:var(--color-text);align-items:baseline;gap:0;line-height:1.3;display:inline-flex}.agent-fqn__scope{color:var(--color-text);min-width:0;font-weight:400}.agent-fqn--truncate-scope .agent-fqn__scope{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.agent-fqn__sep{color:var(--color-text);padding:0 1px;font-weight:600}.agent-fqn__short{color:var(--color-text);white-space:nowrap;font-weight:600}.schedule-cron{font-family:var(--font-mono);background:var(--color-surface-hover);border-radius:var(--radius-sm);color:var(--color-text);letter-spacing:-.01em;padding:1px 6px;font-size:12px}.schedule-detail__head{gap:var(--space-2);flex-direction:column}.schedule-detail__head-row{justify-content:space-between;align-items:flex-start;gap:var(--space-4);flex-wrap:wrap;display:flex}.schedule-detail__head-left{gap:var(--space-2);flex-direction:column;flex:auto;min-width:0;display:flex}.schedule-detail__head-right{text-align:right;flex-direction:column;flex:none;align-items:flex-end;gap:2px;display:flex}.schedule-detail__temporal-line{color:var(--color-text-muted);white-space:nowrap;font-size:12px}.schedule-detail__temporal-line strong{color:var(--color-text);font-weight:500}.task-list__item--button{width:100%;font:inherit;color:inherit;text-align:left;background:0 0;border:0}.task-list__item--row{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);grid-template-columns:auto auto auto 1fr;display:grid}.task-list__row-clock{font-family:var(--font-mono);color:var(--color-text);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:12px}.task-list__row-duration{color:var(--color-text-muted);white-space:nowrap;font-variant-numeric:tabular-nums;min-width:56px;font-size:12px}.task-list__row-id{font-family:var(--font-mono);color:var(--color-text-subtle);text-align:right;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;overflow:hidden}.workflow-dag{padding:var(--space-3) var(--space-2);display:block;position:relative;overflow:auto}.workflow-dag--empty{padding:var(--space-4);display:block}.workflow-dag__edges{pointer-events:none;z-index:0;position:absolute;top:0;left:0;overflow:visible}.workflow-dag__edge{stroke:var(--color-border-strong);stroke-width:1.5px;fill:none}.workflow-dag__arrow-head{fill:var(--color-border-strong);stroke:none}.workflow-dag__phases{z-index:1;gap:var(--space-4);flex-direction:column;margin:0;padding:0;list-style:none;display:flex;position:relative}.workflow-dag__phase{gap:var(--space-2);flex-direction:column;margin:0;list-style:none;display:flex}.workflow-dag__phase-label{text-transform:uppercase;letter-spacing:.04em;font-size:11px}.workflow-dag__phase-row{gap:var(--space-3);flex-flow:wrap;justify-content:center;display:flex}.dag-node{align-items:center;column-gap:var(--space-2);min-width:200px;padding:var(--space-2) var(--space-3);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font:inherit;color:inherit;text-align:left;cursor:pointer;border-left-width:3px;grid-template-rows:auto auto;grid-template-columns:auto auto 1fr;row-gap:2px;display:grid}.dag-node[aria-disabled=true]{cursor:help}.dag-node:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.dag-node--selected,.dag-node[aria-current=true]{outline:2px solid var(--color-accent);outline-offset:1px}.dag-node__kind-icon{font-size:14px;line-height:1}.dag-node__id{font-family:var(--font-mono);color:var(--color-text-muted);font-size:11px}.dag-node__agent{color:var(--color-text-muted);white-space:nowrap;text-overflow:ellipsis;grid-column:1/-1;font-size:12px;overflow:hidden}.dag-node__brief{color:var(--color-text);-webkit-line-clamp:2;word-break:break-word;-webkit-box-orient:vertical;grid-column:1/-1;font-size:13px;font-weight:500;display:-webkit-box;overflow:hidden}.dag-node__timing{color:var(--color-text-meta);gap:0 var(--space-1);flex-wrap:wrap;grid-column:1/-1;font-size:11px;display:flex}.dag-node__status{text-transform:uppercase;letter-spacing:.04em;justify-self:end;font-size:10px}.dag-node--coordinator{border-left-color:var(--color-accent)}.dag-node--worker{border-left-color:var(--color-border-strong)}.dag-node--running{background:var(--color-accent-bg)}.dag-node--succeeded{background:var(--color-success-bg)}.dag-node--failed{background:var(--color-danger-bg);border-color:var(--color-danger)}.dag-node--cancelled{background:var(--color-warn-bg)}.dag-node__status--running{color:var(--color-accent)}.dag-node__status--succeeded{color:var(--color-success)}.dag-node__status--failed{color:var(--color-danger)}.dag-node__status--cancelled{color:var(--color-warn)}.dag-node__status--ready{color:var(--color-text-muted)}.workflow-detail__title{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;margin:0;font-size:16px;font-weight:600;overflow:hidden}.workflow-tabpanel{padding:var(--space-3) 0}.workflow-tabpanel:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.workflow-overview__metadata{gap:var(--space-1);flex-direction:column;margin:0;display:flex}.workflow-overview__meta-row{gap:var(--space-2);grid-template-columns:140px 1fr;font-size:13px;display:grid}.workflow-overview__meta-row dt{color:var(--color-text-muted);margin:0}.workflow-overview__meta-row dd{font-family:var(--font-mono);word-break:break-word;margin:0;font-size:12px}.workflow-graph{display:block}.workflow-node-nav{align-items:center;gap:var(--space-1);padding:2px var(--space-2);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:12px;display:inline-flex}.workflow-node-nav--fallback{padding:var(--space-2);background:0 0;border-top:0;border-left:0;border-right:0;border-radius:0;display:flex}.workflow-node-nav__back,.workflow-node-nav__step{appearance:none;font:inherit;color:var(--color-text);cursor:pointer;padding:2px var(--space-1);border-radius:var(--radius-sm);background:0 0;border:0}.workflow-node-nav__back:hover,.workflow-node-nav__step:hover{background:var(--color-surface-hover)}.workflow-node-nav__step[disabled]{color:var(--color-text-subtle);cursor:not-allowed}.workflow-node-nav__sep{background:var(--color-border);width:1px;height:14px}.workflow-node-nav__pos{font-variant-numeric:tabular-nums;color:var(--color-text-muted);text-align:center;min-width:32px;font-size:11px}.workflow-list-skeleton{width:100%;display:block}.workflow-list-skeleton__list{margin:0;padding:0;list-style:none}.workflow-list-skeleton__row,.workflow-list-skeleton__row:hover{background:0 0}.workflow-list-skeleton__cell{cursor:default}.workflow-list-skeleton__head{align-items:center;gap:var(--space-2);display:flex}.workflow-list-skeleton__badge{border-radius:999px;width:64px;height:14px}.workflow-list-skeleton__headline{width:80%;height:13px}.workflow-list-skeleton__meta{width:55%;height:11px}.workflow-list-skeleton__id{width:40%;height:10px}.workflow-detail-skeleton{flex-direction:column;min-height:0;display:flex}.workflow-detail-skeleton__inner{flex-direction:column;width:100%;display:flex}.workflow-detail-skeleton__head{gap:var(--space-2);flex-direction:column;display:flex}.workflow-detail-skeleton__title{width:60%;height:18px}.workflow-detail-skeleton__meta-row{gap:var(--space-2);display:flex}.workflow-detail-skeleton__chip{border-radius:999px;width:72px;height:18px}.workflow-detail-skeleton__chip--wide{width:140px}.workflow-detail-skeleton__statbar{gap:var(--space-3);flex-wrap:wrap;display:flex}.workflow-detail-skeleton__stat{width:96px;height:12px}.workflow-detail-skeleton__tabs{gap:var(--space-2);padding:var(--space-2) 0;display:flex}.workflow-detail-skeleton__tab{width:72px;height:16px}.workflow-detail-skeleton__body{gap:var(--space-2);padding:var(--space-3) 0;flex-direction:column;display:flex}.workflow-detail-skeleton__line{height:12px}.workflow-detail-skeleton__line--long{width:92%}.workflow-detail-skeleton__line--med{width:70%}.workflow-detail-skeleton__line--short{width:48%}
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Glyph Dashboard</title>
7
+ <script type="module" crossorigin src="/assets/index-C38eId2v.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-mJln7r2H.css">
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ </body>
13
+ </html>
@@ -0,0 +1,349 @@
1
+ /* eslint-disable */
2
+ /* tslint:disable */
3
+
4
+ /**
5
+ * Mock Service Worker.
6
+ * @see https://github.com/mswjs/msw
7
+ * - Please do NOT modify this file.
8
+ */
9
+
10
+ const PACKAGE_VERSION = '2.14.6'
11
+ const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82'
12
+ const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
13
+ const activeClientIds = new Set()
14
+
15
+ addEventListener('install', function () {
16
+ self.skipWaiting()
17
+ })
18
+
19
+ addEventListener('activate', function (event) {
20
+ event.waitUntil(self.clients.claim())
21
+ })
22
+
23
+ addEventListener('message', async function (event) {
24
+ const clientId = Reflect.get(event.source || {}, 'id')
25
+
26
+ if (!clientId || !self.clients) {
27
+ return
28
+ }
29
+
30
+ const client = await self.clients.get(clientId)
31
+
32
+ if (!client) {
33
+ return
34
+ }
35
+
36
+ const allClients = await self.clients.matchAll({
37
+ type: 'window',
38
+ })
39
+
40
+ switch (event.data) {
41
+ case 'KEEPALIVE_REQUEST': {
42
+ sendToClient(client, {
43
+ type: 'KEEPALIVE_RESPONSE',
44
+ })
45
+ break
46
+ }
47
+
48
+ case 'INTEGRITY_CHECK_REQUEST': {
49
+ sendToClient(client, {
50
+ type: 'INTEGRITY_CHECK_RESPONSE',
51
+ payload: {
52
+ packageVersion: PACKAGE_VERSION,
53
+ checksum: INTEGRITY_CHECKSUM,
54
+ },
55
+ })
56
+ break
57
+ }
58
+
59
+ case 'MOCK_ACTIVATE': {
60
+ activeClientIds.add(clientId)
61
+
62
+ sendToClient(client, {
63
+ type: 'MOCKING_ENABLED',
64
+ payload: {
65
+ client: {
66
+ id: client.id,
67
+ frameType: client.frameType,
68
+ },
69
+ },
70
+ })
71
+ break
72
+ }
73
+
74
+ case 'CLIENT_CLOSED': {
75
+ activeClientIds.delete(clientId)
76
+
77
+ const remainingClients = allClients.filter((client) => {
78
+ return client.id !== clientId
79
+ })
80
+
81
+ // Unregister itself when there are no more clients
82
+ if (remainingClients.length === 0) {
83
+ self.registration.unregister()
84
+ }
85
+
86
+ break
87
+ }
88
+ }
89
+ })
90
+
91
+ addEventListener('fetch', function (event) {
92
+ const requestInterceptedAt = Date.now()
93
+
94
+ // Bypass navigation requests.
95
+ if (event.request.mode === 'navigate') {
96
+ return
97
+ }
98
+
99
+ // Opening the DevTools triggers the "only-if-cached" request
100
+ // that cannot be handled by the worker. Bypass such requests.
101
+ if (
102
+ event.request.cache === 'only-if-cached' &&
103
+ event.request.mode !== 'same-origin'
104
+ ) {
105
+ return
106
+ }
107
+
108
+ // Bypass all requests when there are no active clients.
109
+ // Prevents the self-unregistered worked from handling requests
110
+ // after it's been terminated (still remains active until the next reload).
111
+ if (activeClientIds.size === 0) {
112
+ return
113
+ }
114
+
115
+ const requestId = crypto.randomUUID()
116
+ event.respondWith(handleRequest(event, requestId, requestInterceptedAt))
117
+ })
118
+
119
+ /**
120
+ * @param {FetchEvent} event
121
+ * @param {string} requestId
122
+ * @param {number} requestInterceptedAt
123
+ */
124
+ async function handleRequest(event, requestId, requestInterceptedAt) {
125
+ const client = await resolveMainClient(event)
126
+ const requestCloneForEvents = event.request.clone()
127
+ const response = await getResponse(
128
+ event,
129
+ client,
130
+ requestId,
131
+ requestInterceptedAt,
132
+ )
133
+
134
+ // Send back the response clone for the "response:*" life-cycle events.
135
+ // Ensure MSW is active and ready to handle the message, otherwise
136
+ // this message will pend indefinitely.
137
+ if (client && activeClientIds.has(client.id)) {
138
+ const serializedRequest = await serializeRequest(requestCloneForEvents)
139
+
140
+ // Clone the response so both the client and the library could consume it.
141
+ const responseClone = response.clone()
142
+
143
+ sendToClient(
144
+ client,
145
+ {
146
+ type: 'RESPONSE',
147
+ payload: {
148
+ isMockedResponse: IS_MOCKED_RESPONSE in response,
149
+ request: {
150
+ id: requestId,
151
+ ...serializedRequest,
152
+ },
153
+ response: {
154
+ type: responseClone.type,
155
+ status: responseClone.status,
156
+ statusText: responseClone.statusText,
157
+ headers: Object.fromEntries(responseClone.headers.entries()),
158
+ body: responseClone.body,
159
+ },
160
+ },
161
+ },
162
+ responseClone.body ? [serializedRequest.body, responseClone.body] : [],
163
+ )
164
+ }
165
+
166
+ return response
167
+ }
168
+
169
+ /**
170
+ * Resolve the main client for the given event.
171
+ * Client that issues a request doesn't necessarily equal the client
172
+ * that registered the worker. It's with the latter the worker should
173
+ * communicate with during the response resolving phase.
174
+ * @param {FetchEvent} event
175
+ * @returns {Promise<Client | undefined>}
176
+ */
177
+ async function resolveMainClient(event) {
178
+ const client = await self.clients.get(event.clientId)
179
+
180
+ if (activeClientIds.has(event.clientId)) {
181
+ return client
182
+ }
183
+
184
+ if (client?.frameType === 'top-level') {
185
+ return client
186
+ }
187
+
188
+ const allClients = await self.clients.matchAll({
189
+ type: 'window',
190
+ })
191
+
192
+ return allClients
193
+ .filter((client) => {
194
+ // Get only those clients that are currently visible.
195
+ return client.visibilityState === 'visible'
196
+ })
197
+ .find((client) => {
198
+ // Find the client ID that's recorded in the
199
+ // set of clients that have registered the worker.
200
+ return activeClientIds.has(client.id)
201
+ })
202
+ }
203
+
204
+ /**
205
+ * @param {FetchEvent} event
206
+ * @param {Client | undefined} client
207
+ * @param {string} requestId
208
+ * @param {number} requestInterceptedAt
209
+ * @returns {Promise<Response>}
210
+ */
211
+ async function getResponse(event, client, requestId, requestInterceptedAt) {
212
+ // Clone the request because it might've been already used
213
+ // (i.e. its body has been read and sent to the client).
214
+ const requestClone = event.request.clone()
215
+
216
+ function passthrough() {
217
+ // Cast the request headers to a new Headers instance
218
+ // so the headers can be manipulated with.
219
+ const headers = new Headers(requestClone.headers)
220
+
221
+ // Remove the "accept" header value that marked this request as passthrough.
222
+ // This prevents request alteration and also keeps it compliant with the
223
+ // user-defined CORS policies.
224
+ const acceptHeader = headers.get('accept')
225
+ if (acceptHeader) {
226
+ const values = acceptHeader.split(',').map((value) => value.trim())
227
+ const filteredValues = values.filter(
228
+ (value) => value !== 'msw/passthrough',
229
+ )
230
+
231
+ if (filteredValues.length > 0) {
232
+ headers.set('accept', filteredValues.join(', '))
233
+ } else {
234
+ headers.delete('accept')
235
+ }
236
+ }
237
+
238
+ return fetch(requestClone, { headers })
239
+ }
240
+
241
+ // Bypass mocking when the client is not active.
242
+ if (!client) {
243
+ return passthrough()
244
+ }
245
+
246
+ // Bypass initial page load requests (i.e. static assets).
247
+ // The absence of the immediate/parent client in the map of the active clients
248
+ // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
249
+ // and is not ready to handle requests.
250
+ if (!activeClientIds.has(client.id)) {
251
+ return passthrough()
252
+ }
253
+
254
+ // Notify the client that a request has been intercepted.
255
+ const serializedRequest = await serializeRequest(event.request)
256
+ const clientMessage = await sendToClient(
257
+ client,
258
+ {
259
+ type: 'REQUEST',
260
+ payload: {
261
+ id: requestId,
262
+ interceptedAt: requestInterceptedAt,
263
+ ...serializedRequest,
264
+ },
265
+ },
266
+ [serializedRequest.body],
267
+ )
268
+
269
+ switch (clientMessage.type) {
270
+ case 'MOCK_RESPONSE': {
271
+ return respondWithMock(clientMessage.data)
272
+ }
273
+
274
+ case 'PASSTHROUGH': {
275
+ return passthrough()
276
+ }
277
+ }
278
+
279
+ return passthrough()
280
+ }
281
+
282
+ /**
283
+ * @param {Client} client
284
+ * @param {any} message
285
+ * @param {Array<Transferable>} transferrables
286
+ * @returns {Promise<any>}
287
+ */
288
+ function sendToClient(client, message, transferrables = []) {
289
+ return new Promise((resolve, reject) => {
290
+ const channel = new MessageChannel()
291
+
292
+ channel.port1.onmessage = (event) => {
293
+ if (event.data && event.data.error) {
294
+ return reject(event.data.error)
295
+ }
296
+
297
+ resolve(event.data)
298
+ }
299
+
300
+ client.postMessage(message, [
301
+ channel.port2,
302
+ ...transferrables.filter(Boolean),
303
+ ])
304
+ })
305
+ }
306
+
307
+ /**
308
+ * @param {Response} response
309
+ * @returns {Response}
310
+ */
311
+ function respondWithMock(response) {
312
+ // Setting response status code to 0 is a no-op.
313
+ // However, when responding with a "Response.error()", the produced Response
314
+ // instance will have status code set to 0. Since it's not possible to create
315
+ // a Response instance with status code 0, handle that use-case separately.
316
+ if (response.status === 0) {
317
+ return Response.error()
318
+ }
319
+
320
+ const mockedResponse = new Response(response.body, response)
321
+
322
+ Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {
323
+ value: true,
324
+ enumerable: true,
325
+ })
326
+
327
+ return mockedResponse
328
+ }
329
+
330
+ /**
331
+ * @param {Request} request
332
+ */
333
+ async function serializeRequest(request) {
334
+ return {
335
+ url: request.url,
336
+ mode: request.mode,
337
+ method: request.method,
338
+ headers: Object.fromEntries(request.headers.entries()),
339
+ cache: request.cache,
340
+ credentials: request.credentials,
341
+ destination: request.destination,
342
+ integrity: request.integrity,
343
+ redirect: request.redirect,
344
+ referrer: request.referrer,
345
+ referrerPolicy: request.referrerPolicy,
346
+ body: await request.arrayBuffer(),
347
+ keepalive: request.keepalive,
348
+ }
349
+ }
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@glyphs-ai/glyph",
3
+ "version": "0.1.0",
4
+ "description": "glyph — orchestrate agentic systems built on the MetaAgents format spec",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/glyphs-ai/glyph.git"
9
+ },
10
+ "homepage": "https://github.com/glyphs-ai/glyph#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/glyphs-ai/glyph/issues"
13
+ },
14
+ "keywords": [
15
+ "agents",
16
+ "ai",
17
+ "copilot",
18
+ "metaagents",
19
+ "mcp",
20
+ "skills"
21
+ ],
22
+ "type": "module",
23
+ "engines": {
24
+ "node": ">=22"
25
+ },
26
+ "packageManager": "pnpm@10.33.4",
27
+ "bin": {
28
+ "glyph": "bundle/glyph.js"
29
+ },
30
+ "files": [
31
+ "bundle/",
32
+ "README.md",
33
+ "LICENSE"
34
+ ],
35
+ "scripts": {
36
+ "build": "pnpm -r --filter \"./packages/**\" run build",
37
+ "test": "pnpm -r --filter \"./packages/**\" run test",
38
+ "typecheck": "pnpm -r --filter \"./packages/**\" run typecheck",
39
+ "lint": "biome check .",
40
+ "format": "biome format --write .",
41
+ "dev": "pnpm -r --parallel --filter \"./packages/**\" run dev",
42
+ "bundle": "pnpm build && pnpm --filter @glyphs-ai/dashboard build && node scripts/inline-migrations.mjs && node esbuild.config.js && node scripts/copy-dashboard.mjs",
43
+ "prepublishOnly": "pnpm bundle",
44
+ "new-pkg": "node scripts/new-pkg.mjs",
45
+ "knip": "knip"
46
+ },
47
+ "dependencies": {
48
+ "@github/copilot-sdk": "1.0.0-beta.4",
49
+ "better-sqlite3": "^12.10.0",
50
+ "bindings": "^1.5.0",
51
+ "pino": "^9.5.0",
52
+ "pino-pretty": "^11.3.0",
53
+ "pino-roll": "^3.0.0"
54
+ },
55
+ "devDependencies": {
56
+ "@biomejs/biome": "^2.3.0",
57
+ "esbuild": "^0.25.0",
58
+ "knip": "^6.14.1",
59
+ "typescript": "^5.7.0"
60
+ },
61
+ "pnpm": {
62
+ "onlyBuiltDependencies": [
63
+ "better-sqlite3",
64
+ "esbuild",
65
+ "msw"
66
+ ],
67
+ "overrides": {
68
+ "better-sqlite3": "^12.10.0",
69
+ "mute-stream": "^3.0.0"
70
+ }
71
+ }
72
+ }