agent-office-studio 0.4.0 → 0.6.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
+ @font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CaVNZxsx.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-CFHvXkgd.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-C2S99t-D.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-CIEtRijs.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-CNojz0t3.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-BeU3T8wf.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-DHMOLxAi.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-B11XCQ5g.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--ink: #1d1b18;--ink-2: #5d574e;--ink-3: #958d81;--paper: #fbf9f5;--paper-2: #f4f0e9;--line: rgba(29, 27, 24, .09);--good: #2f7d4f;--bad: #b4412f;--work: #2f6fae;--wait: #b9861f;--accent: var(--work);--surface: #fff;--glass: color-mix(in srgb, var(--paper) 88%, transparent);--pane: color-mix(in srgb, var(--paper) 58%, transparent);--pane-edge: color-mix(in srgb, #fff 55%, var(--line));--t1: rgba(29, 27, 24, .05);--t2: rgba(29, 27, 24, .07);--t3: rgba(29, 27, 24, .1);--good-bg: #dcefe2;--good-fg: #25653f;--bad-bg: #f7e0db;--bad-fg: #9a3424;--work-bg: #dde9f6;--work-fg: #24598f;--wait-bg: #fbf0d4;--wait-fg: #8a6312;--view-1: #f6f2ea;--view-2: #ece5da;--view-3: #ddd4c6;--sans: "Inter Variable", Inter, system-ui, sans-serif;--mono: "JetBrains Mono", ui-monospace, monospace;--ease: cubic-bezier(.2, .8, .2, 1);color-scheme:light}html{--h: 80}html[data-theme=ocean]{--h: 235}html[data-theme=forest]{--h: 150}html[data-theme=sunset]{--h: 35}html[data-theme=lavender]{--h: 300}html:is([data-theme=ocean],[data-theme=forest],[data-theme=sunset],[data-theme=lavender]){--ink: oklch(23% .03 var(--h));--ink-2: oklch(44% .03 var(--h));--ink-3: oklch(62% .025 var(--h));--paper: oklch(98.4% .008 var(--h));--paper-2: oklch(95.6% .016 var(--h));--accent: oklch(52% .16 var(--h));--line: color-mix(in srgb, var(--ink) 10%, transparent);--t1: color-mix(in srgb, var(--ink) 5%, transparent);--t2: color-mix(in srgb, var(--ink) 7%, transparent);--t3: color-mix(in srgb, var(--ink) 10%, transparent);--view-1: oklch(96.5% .015 var(--h));--view-2: oklch(92% .02 var(--h));--view-3: oklch(86% .025 var(--h))}html[data-mode=dark]{--ink: oklch(94% .012 var(--h));--ink-2: oklch(78% .016 var(--h));--ink-3: oklch(62% .016 var(--h));--paper: oklch(20% .012 var(--h));--paper-2: oklch(25% .014 var(--h));--surface: oklch(24% .014 var(--h));--pane: color-mix(in srgb, var(--paper) 52%, transparent);--pane-edge: color-mix(in srgb, #fff 14%, transparent);--line: color-mix(in srgb, var(--ink) 12%, transparent);--t1: color-mix(in srgb, var(--ink) 6%, transparent);--t2: color-mix(in srgb, var(--ink) 9%, transparent);--t3: color-mix(in srgb, var(--ink) 13%, transparent);--good: #5fbf85;--bad: #e8806c;--work: #5b9ad8;--wait: #d9a43f;--good-bg: color-mix(in srgb, var(--good) 18%, var(--paper));--good-fg: var(--good);--bad-bg: color-mix(in srgb, var(--bad) 18%, var(--paper));--bad-fg: var(--bad);--work-bg: color-mix(in srgb, var(--work) 18%, var(--paper));--work-fg: #8dbbea;--wait-bg: color-mix(in srgb, var(--wait) 18%, var(--paper));--wait-fg: var(--wait);--view-1: oklch(27% .014 var(--h));--view-2: oklch(22% .013 var(--h));--view-3: oklch(17% .012 var(--h));color-scheme:dark}html[data-mode=dark]:is([data-theme=ocean],[data-theme=forest],[data-theme=sunset],[data-theme=lavender]){--accent: oklch(74% .13 var(--h))}*{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0;height:100%;overflow:hidden;background:var(--paper)}body{font-family:var(--sans);color:var(--ink);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;font-feature-settings:"cv11","ss01"}button,input,textarea,select{font:inherit;color:inherit}.app{display:grid;grid-template-columns:var(--side-w, 480px) minmax(0,1fr) auto;height:100vh;height:100dvh;background:radial-gradient(40% 36% at 8% 14%,color-mix(in srgb,var(--accent) 22%,transparent) 0%,transparent 100%),radial-gradient(38% 34% at 94% 86%,color-mix(in srgb,var(--accent) 16%,transparent) 0%,transparent 100%),radial-gradient(120% 90% at 50% 38%,var(--view-1) 0%,var(--view-2) 58%,var(--view-3) 100%)}.view{position:relative;overflow:hidden;min-width:0;container-type:inline-size}#stage{position:absolute;top:0;right:0;bottom:0;left:0}#stage canvas{display:block;width:100%;height:100%;touch-action:none}#labels{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.side-grip{position:absolute;z-index:30;top:0;bottom:0;right:-4px;width:9px;cursor:col-resize;touch-action:none}.side-grip:after{content:"";position:absolute;top:0;bottom:0;left:4px;width:2px;background:var(--accent);opacity:0;transition:opacity .15s}.side-grip:hover:after,.side-grip:focus-visible:after,.app.resizing .side-grip:after{opacity:.6}.side-grip:focus-visible{outline:none}.app.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.app.resizing #stage{pointer-events:none}.side{position:relative;zoom:var(--side-zoom, 1);display:flex;flex-direction:column;min-height:0;background:var(--pane);border-right:1px solid var(--pane-edge);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5)}.brand{padding:20px 20px 14px;position:relative}.title-end{display:flex;align-items:center;gap:6px}.theme-btn{all:unset;cursor:pointer;width:26px;height:26px;display:grid;place-items:center;border-radius:8px;color:var(--ink-3);transition:background .15s,color .15s}.theme-btn:hover,.theme-btn[aria-expanded=true]{background:var(--t2);color:var(--ink)}.theme-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.theme-btn svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.theme-pop{position:absolute;z-index:40;top:52px;right:14px;width:252px;padding:10px 12px 12px;background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 30px #00000029}.theme-pop[hidden]{display:none}.theme-k{margin:4px 2px 6px;font-size:11px;font-weight:620;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3)}.theme-k:not(:first-child){margin-top:12px}.theme-swatches{display:grid;grid-template-columns:repeat(5,1fr);gap:4px}.theme-swatches button{all:unset;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px 0 5px;border-radius:10px;font-size:10.5px;font-weight:580;color:var(--ink-2)}.theme-swatches button:hover{background:var(--t1)}.theme-swatches button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.theme-swatches button[aria-checked=true]{background:var(--t2);color:var(--ink)}.theme-swatches i{width:24px;height:24px;border-radius:50%;box-shadow:inset 0 0 0 1px #0000001f;background:linear-gradient(135deg,oklch(94% .03 var(--sh)) 50%,oklch(55% .15 var(--sh)) 50%)}.theme-swatches [data-t=paper]{--sh: 80}.theme-swatches [data-t=ocean]{--sh: 235}.theme-swatches [data-t=forest]{--sh: 150}.theme-swatches [data-t=sunset]{--sh: 35}.theme-swatches [data-t=lavender]{--sh: 300}.theme-modes{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;padding:2px;border-radius:10px;background:var(--t1)}.theme-modes button{all:unset;cursor:pointer;text-align:center;padding:5px 0;border-radius:8px;font-size:12.5px;font-weight:580;color:var(--ink-2)}.theme-modes button:hover{color:var(--ink)}.theme-modes button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.theme-modes button[aria-checked=true]{background:var(--paper);color:var(--ink);box-shadow:0 1px 2px #0000001f}.acct-pop{width:280px}.acct-modes{grid-template-columns:1fr 1fr}.acct-note{margin:10px 2px 0;font-size:12px;line-height:1.45;color:var(--ink-2)}.acct-err{color:var(--bad)}.acct-fine{font-size:11px;color:var(--ink-3)}.acct-form{display:flex;gap:6px;margin-top:10px}.acct-form input{flex:1;min-width:0;padding:6px 9px;border-radius:8px;border:1px solid var(--line);background:var(--paper-2);color:var(--ink);font:inherit;font-size:12.5px}.acct-form input:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.acct-forget{all:unset;cursor:pointer;margin:8px 2px 0;font-size:12px;color:var(--ink-3);text-decoration:underline}.acct-forget:hover{color:var(--ink)}.lb-pop{width:300px}.lb-me{margin:6px 2px 0;font-size:12.5px;line-height:1.4;color:var(--ink-2)}.lb-me strong{color:var(--ink);font-weight:650}.lb-tabs{margin-top:10px}.lb-period{grid-template-columns:1fr 1fr}.lb-metric{margin-top:6px}.lb-board{margin-top:8px}.lb-list{list-style:none;margin:0;padding:0;max-height:232px;overflow-y:auto}.lb-row{display:grid;grid-template-columns:24px 1fr auto;gap:6px;align-items:baseline;padding:5px 6px;border-radius:8px;font-size:12.5px;color:var(--ink-2)}.lb-row:nth-child(-n+3) .lb-rank{color:var(--accent);font-weight:700}.lb-rank{color:var(--ink-3);font-variant-numeric:tabular-nums}.lb-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink)}.lb-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink)}.lb-you{background:var(--t2)}.lb-share{display:flex;align-items:center;gap:8px;margin:10px 2px 0;font-size:12.5px;color:var(--ink);cursor:pointer}.lb-share input,.link-repos input,.link-warn input{accent-color:var(--accent);margin:0}.link-pop{width:320px;max-height:calc(100dvh - 80px);overflow-y:auto;overscroll-behavior:contain}.link-actions{display:grid;gap:8px;margin-top:10px}.link-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.link-actions .link-row .ghost{flex:1;background:var(--t1)}.link-actions .link-row .ghost:hover{background:var(--t2)}.link-redeem{margin-top:0}.link-redeem input{font-family:var(--mono);letter-spacing:.04em}.link-redeem input::placeholder{font-family:inherit;letter-spacing:0}.link-code,.link-guest{margin-top:12px;padding:8px 10px 10px;border-radius:12px;background:var(--t1)}.link-code .theme-k,.link-guest .theme-k{margin-top:2px}.link-code-row{display:flex;align-items:center;gap:8px}.link-code-v{flex:1;font-family:var(--mono);font-size:22px;font-weight:600;letter-spacing:.08em;color:var(--ink);font-variant-numeric:tabular-nums;-webkit-user-select:all;user-select:all}.link-repos{border:0;margin:10px 0 0;padding:0;max-height:168px;overflow-y:auto}.link-repos legend,.link-k{padding:0;margin:10px 2px 6px;font-size:12px;font-weight:600;color:var(--ink-2)}.link-repos legend{margin-top:0}.link-repos label{display:flex;align-items:center;gap:8px;padding:4px;border-radius:6px;font-size:12.5px;color:var(--ink);cursor:pointer}.link-repos label:hover{background:var(--t2)}.link-repos span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.link-cap button:disabled{opacity:.45;cursor:default}.link-warn{margin-top:8px;padding:8px 10px;border-radius:10px;font-size:12px;line-height:1.45;background:color-mix(in srgb,var(--bad) 10%,transparent);border:1px solid color-mix(in srgb,var(--bad) 30%,transparent)}.link-warn p{margin:0 0 6px;color:var(--ink)}.link-warn label{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--bad);cursor:pointer}.link-tokens{display:flex;align-items:center;gap:8px}.link-tokens span:first-child{flex:1}.link-tokens input{width:108px;padding:5px 8px;border-radius:8px;border:1px solid var(--line);background:var(--paper-2);color:var(--ink);font:inherit;font-size:12.5px;font-variant-numeric:tabular-nums}.link-tokens input:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.link-guest>.link-row{margin-top:12px}.link-switch{display:flex;align-items:flex-start;gap:8px;margin:12px 2px 0;font-size:12.5px;color:var(--ink);cursor:pointer}.link-switch input{accent-color:var(--accent);margin:2px 0 0}.link-switch>span{display:grid;gap:1px}.link-switch strong{font-weight:600}.link-ours{border:0;margin:0 0 0 22px;padding:0;min-width:0;transition:opacity .15s}.link-ours.off{opacity:.45}.link-theirs{grid-template-columns:repeat(3,1fr)}.link-who span.link-policy{white-space:normal}.link-ours.off .link-warn label{cursor:default}.link-list{max-height:260px}.link-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 6px;border-radius:8px;font-size:12.5px}.link-item+.link-item{border-top:1px solid var(--line)}.link-who{display:grid;min-width:0}.link-who strong{color:var(--ink);font-weight:650;overflow:hidden;text-overflow:ellipsis}.link-who span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.link-item .acct-forget{margin:0}.visit-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 14px 8px;padding:7px 10px;border-radius:10px;font-size:12.5px;color:var(--ink);background:color-mix(in srgb,var(--accent) 16%,transparent);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent)}.visit-bar a{color:var(--ink-2);white-space:nowrap}.visit-bar{flex-wrap:wrap}.visit-bar.visit-off{background:color-mix(in srgb,var(--bad) 10%,transparent);border-color:color-mix(in srgb,var(--bad) 30%,transparent)}.app.visit-ended #detail .d-foot{display:none}.job .m .from{font-weight:600;color:var(--accent)}.notice.visit-review{width:100%}.notice.visit-review .link-row{gap:8px}.notice.visit-review .done{color:var(--ink-2)}.notice.visit-review .bad{color:var(--bad)}.visit-note{flex-basis:100%;margin:0;font-size:12px;color:var(--bad)}.app.visiting :is(#attach,#mic,#channels,#detail .reply .attach),.app.visiting :is(#lbBtn,#linkBtn,#acctBtn,#lbPop,#linkPop,#acctPop,#clear,#standup,#away),.app.visiting :is(.tabs [data-tab=team],.mnav [data-m=team],#teamPane){display:none!important}.brand .title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.title-start{display:flex;align-items:center;gap:10px;min-width:0}.brand h1{margin:0;font-size:20px;font-weight:720;letter-spacing:-.03em;white-space:nowrap;background:linear-gradient(120deg,var(--ink) 40%,color-mix(in srgb,var(--accent) 75%,var(--ink)) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.lv svg,.meter .bar{display:block;overflow:visible;transform:rotate(-90deg)}.trk,.arc{fill:none;stroke-width:3}.trk{stroke:var(--t3)}.arc{stroke:var(--ring, var(--bar, var(--accent)));stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:calc(100 - max(var(--p, 0),.01));filter:drop-shadow(0 0 2px color-mix(in srgb,var(--ring, var(--bar, var(--accent))) 45%,transparent));transition:stroke-dashoffset .9s var(--ease),stroke .3s}.lv{--ring: var(--accent);position:relative;flex:none;width:34px;height:34px;display:grid;place-items:center;cursor:default}.lv svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.lv .trk,.lv .arc{stroke-width:2.6}.lv b{position:relative;display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 88%,#fff),color-mix(in srgb,var(--accent) 80%,#000));box-shadow:inset 0 1px #ffffff4d,0 2px 6px -2px color-mix(in srgb,var(--accent) 70%,transparent);color:#fff;font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.level,.gauges[hidden]{display:none}.brand h1{cursor:pointer}.fold{all:unset;cursor:pointer;flex:none;display:grid;place-items:center;width:24px;height:24px;border-radius:8px;color:var(--ink-3);transition:color .15s,background .15s}.fold:hover{color:var(--ink);background:var(--t2)}.fold:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.fold svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .2s var(--ease)}.fold[aria-expanded=true] svg{transform:rotate(180deg)}@media (prefers-reduced-motion: reduce){.fold svg{transition:none}}.gauges{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));padding:10px 0 2px;border-top:1px solid var(--line)}.usage,#load{display:contents}.usage[hidden],#load[hidden],.meter[hidden]{display:none}.meter{--bar: var(--work);display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"ring v" "ring k";column-gap:8px;align-items:center;padding:0 10px;min-width:0;cursor:default;position:relative}#useSession{padding-left:0}.meter:not(#useSession):before{content:"";position:absolute;left:0;top:3px;bottom:3px;width:1px;background:var(--line)}.meter .bar{grid-area:ring;width:30px;height:30px}.meter .ico{fill:none;stroke:var(--ink-3);stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round;transform:rotate(90deg);transform-origin:18px 18px}.meter.hot .ico{stroke:var(--bad)}.meter .k{grid-area:k;font-size:9.5px;font-weight:650;color:var(--ink-3);letter-spacing:.07em;text-transform:uppercase;line-height:1.2}.meter .v{grid-area:v;font-size:13.5px;font-weight:700;color:var(--ink);letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.2;white-space:nowrap}.meter .r{display:none}.meter.warm{--bar: var(--wait)}.meter.hot{--bar: var(--bad)}.meter.hot .v{color:var(--bad)}@media (prefers-reduced-motion: reduce){.arc{transition:none}}.u-err{grid-column:1 / -1;margin:0;font-size:12px;color:var(--ink-3)}.tabs{display:flex;gap:2px;padding:0 12px 8px;border-bottom:1px solid var(--line)}.tabs button{all:unset;cursor:pointer;padding:6px 10px;border-radius:8px;font-weight:600;font-size:13px;color:var(--ink-3);display:inline-flex;gap:6px;align-items:center;transition:color .15s,background .15s}.tabs button:hover{color:var(--ink)}.tabs button.on{color:var(--ink);background:var(--t2)}.tabs #jobCount:not(:empty){font-size:11px;background:var(--accent);color:var(--paper);border-radius:99px;padding:0 6px;line-height:17px}.pane{flex:1;min-height:0;display:flex;flex-direction:column}#jobsPane{padding:8px 12px 12px}.team{flex:1;overflow-y:auto;padding:8px 12px 12px;display:flex;flex-direction:column;gap:2px}.member{border-radius:10px;transition:background .15s}.member:hover,.member.open{background:var(--t1)}.member.later{opacity:.6}.member .head{all:unset;cursor:pointer;display:grid;grid-template-columns:10px 1fr;gap:1px 10px;width:100%;box-sizing:border-box;padding:9px 10px 4px}.member:not(.open) .head:only-child{padding-bottom:9px}.member .head:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:10px}.member .head i{grid-row:1 / 3;margin-top:6px;width:8px;height:8px;border-radius:50%}.member .n{font-weight:600}.member .n em{font-style:normal;font-weight:500;font-size:11.5px;color:var(--ink-3);margin-left:4px}.member .r{font-size:12px;color:var(--ink-2)}.member .p{margin:0;padding:2px 10px 9px 30px;font-size:12.5px;color:var(--ink-3);line-height:1.45;text-wrap:pretty;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.member form{display:flex;flex-direction:column;gap:10px;padding:6px 10px 10px 30px}.member label{display:flex;flex-direction:column;gap:4px;font-size:11.5px;font-weight:600;color:var(--ink-3)}.member input,.member textarea{font-size:13.5px;font-weight:400;color:var(--ink);line-height:1.45;resize:vertical;border:1px solid var(--line);border-radius:8px;padding:7px 9px;background:var(--surface);outline:none}.member input:focus,.member textarea:focus{border-color:var(--ink-3)}.member .hint-t{margin:0;font-size:12px;color:var(--ink-3);text-wrap:pretty}.member .row{display:flex;justify-content:flex-end;gap:6px}.viewbar{align-self:flex-end;display:flex;gap:2px;margin:8px 12px 0;padding:2px;border-radius:9px;background:var(--t1)}.viewbar button{all:unset;cursor:pointer;display:grid;place-items:center;width:28px;height:24px;border-radius:7px;color:var(--ink-3);transition:background .15s,color .15s}.viewbar button:hover{color:var(--ink)}.viewbar button[aria-pressed=true]{color:var(--ink);background:var(--surface);box-shadow:0 1px 2px #00000014}.viewbar button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.viewbar svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}#teamPane,#projectsPane{display:flex;flex-direction:column}#teamPane[hidden],#projectsPane[hidden]{display:none}.pico{--s: 1em;display:inline-grid;place-items:center;flex:none;width:var(--s);height:var(--s);border-radius:28%;font-weight:700;line-height:1;background:hsl(var(--h) 50% 55% / .2);color:hsl(var(--h) 45% 34%);position:relative;overflow:hidden}.pico img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain;border-radius:inherit;background:var(--surface)}.pico:not(.has) img{opacity:0}.pico.has{color:transparent;background:none}.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:6px}.tile{all:unset;cursor:pointer;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 6px 8px;border-radius:12px;text-align:center;min-width:0;transition:background .15s,transform .15s var(--ease)}.tile:hover,.tile.open{background:var(--t1)}.tile:active{transform:scale(.97)}.tile:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tile.later{opacity:.6}.tile .art{position:relative;margin-bottom:4px}.tile .pico{--s: 52px;font-size:22px}.tile .face{display:block;width:52px;height:52px;border-radius:50%}.tile .dot{position:absolute;right:-2px;bottom:-2px;width:11px;height:11px;border-radius:50%;background:var(--line);box-shadow:0 0 0 2px var(--paper)}.tile .n{max-width:100%;font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tile .c{max-width:100%;font-size:11.5px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tiles+.project,.tiles+.member{margin-top:8px}.project .note{margin:0;padding:12px 16px 2px;font-size:12.5px;font-weight:500;color:var(--ink-2);text-wrap:pretty}.team.icons .member.open form{padding-left:10px}@media (prefers-reduced-motion: reduce){.tile{transition:none}.tile:active{transform:none}}.msg .who .ptag{display:inline-flex;margin-left:2px}.msg .who .ptag .pico{--s: 15px;font-size:9px}.projects{flex:1;overflow-y:auto;padding:8px 12px 12px;display:flex;flex-direction:column;gap:2px}.project{border-radius:10px;transition:background .15s}.project:hover,.project.open{background:var(--t1)}.project .head{all:unset;cursor:pointer;display:grid;grid-template-columns:10px 1fr auto;gap:1px 10px;width:100%;box-sizing:border-box;padding:9px 10px}.project .head:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:10px}.project .dot{grid-row:1 / 3;margin-top:6px;width:8px;height:8px;border-radius:50%;background:var(--line)}.project .n{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project .m{grid-column:2 / 4;font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project .c{font-size:11.5px;color:var(--ink-3);align-self:center}.project .sub{display:flex;flex-direction:column;gap:2px;padding:6px 6px 8px}.project .sub .job{padding:8px 10px;align-items:start}.project .sub .job .dot{margin-top:5px}.project .sub .job .t{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.35;text-wrap:pretty;overflow-wrap:anywhere}.project .sub .job .m{margin-top:2px}.project .sub .job:hover{background:var(--t2)}.project .sub .none{margin:2px 8px 6px;font-size:12px;color:var(--ink-3)}.project .sub .ghost{align-self:stretch;display:flex;align-items:center;justify-content:center;gap:6px;font-size:12.5px;margin:6px 4px 0;padding:8px;border:1px dashed var(--line);border-radius:10px}.project .sub .ghost:hover{border-style:solid}.jobs{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.jgroup{display:flex;align-items:center;gap:6px;margin:14px 10px 4px;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.jgroup:first-child{margin-top:4px}.jgroup span{font-variant-numeric:tabular-nums;font-weight:500;letter-spacing:0;opacity:.8}.jobs>.job{grid-template-columns:10px 1fr auto;padding:10px 12px}.jobs>.job .t{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-weight:540;line-height:1.35;text-wrap:pretty;overflow-wrap:anywhere}.jobs>.job .dot{margin-top:6px}.jobs>.job .w{align-self:start;margin-top:2px;font-size:11.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}.jobs>.job .m{grid-column:2 / 4;display:flex;align-items:center;margin-top:3px;white-space:pre}.jobs>.job .m .pico{--s: 14px;font-size:8px;margin-right:6px}.jobs>.job .m .r{overflow:hidden;text-overflow:ellipsis}.job .m .s.working{color:var(--work-fg);font-weight:560}.job .m .s.queued{color:var(--wait-fg);font-weight:560}.job .m .s.failed{color:var(--bad);font-weight:560}.job{all:unset;cursor:pointer;display:grid;grid-template-columns:10px 1fr;gap:1px 10px;padding:9px 10px;border-radius:10px;transition:background .15s}.job:hover{background:var(--t1)}.job.open{background:var(--t2)}.job .dot{grid-row:1 / 3;margin-top:6px;width:8px;height:8px;border-radius:50%}.job .t{font-weight:560;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.job .m{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot.queued{background:var(--wait)}.dot.working{background:var(--work);box-shadow:0 0 0 3px #2f6fae2e;animation:ring 1.6s infinite}.dot.done{background:var(--good)}.dot.failed{background:var(--bad)}.dot.stopped{background:var(--ink-3)}@keyframes ring{50%{box-shadow:0 0 0 6px #2f6fae00}}@media (prefers-reduced-motion: reduce){.dot.working{animation:none}}.empty{margin:12px 4px;color:var(--ink-3);font-size:13px;text-wrap:pretty}#clear{font-size:12.5px;padding:7px;margin-top:6px}.channels{flex:none;display:flex;gap:4px;align-items:center;overflow-x:auto;scrollbar-width:none;padding:8px 12px 6px}.channels::-webkit-scrollbar{display:none}.channel{all:unset;cursor:pointer;flex:none;display:inline-flex;align-items:center;gap:2px;padding:4px 9px;border-radius:99px;font-size:12.5px;font-weight:580;color:var(--ink-3);transition:color .15s,background .15s}.channel:hover{color:var(--ink);background:var(--t1)}.channel.on{color:var(--paper);background:var(--ink)}.channel .hash{opacity:.55}.channel .badge{margin-left:4px;background:var(--accent);color:var(--paper);border-radius:99px;font-size:10.5px;font-weight:700;line-height:15px;padding:0 5px}.channel.add,.channel.close{color:var(--ink-3);font-size:14px;line-height:1;padding:4px 8px}.channel:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.new-channel{flex:none;display:inline-flex;align-items:center;gap:2px;padding:3px 8px;border:1px solid var(--line);border-radius:99px;background:var(--surface)}.new-channel .hash{color:var(--ink-3);font-size:12.5px}.new-channel input{all:unset;width:96px;font-size:12.5px;font-weight:580}.msgs{flex:1;overflow-y:auto;padding:10px 20px 8px;display:flex;flex-direction:column;gap:4px;-webkit-mask-image:linear-gradient(transparent,#000 14px);mask-image:linear-gradient(transparent,#000 14px)}.msg{position:relative;margin:0 -10px;padding:7px 10px;border-radius:12px;transition:background .15s}.msg .who{display:flex;align-items:center;gap:6px;font-size:12.5px;margin-bottom:3px}.msg .av{display:inline-flex;flex:none}.msg .av .face{display:block;width:20px;height:20px;border-radius:50%}.msg .who b{font-weight:640}.msg .who .arrow{color:var(--ink-3)}.msg .who time{color:var(--ink-3);font-size:11.5px;font-variant-numeric:tabular-nums;margin-left:2px}.msg .body{padding-left:26px;overflow-wrap:anywhere}.msg .body p{margin:0 0 6px}.msg .body>:last-child{margin-bottom:0}.msg.from-you .body p{white-space:pre-wrap}.msg.from-chief .body{color:var(--ink-2)}.msg.failed .body{color:var(--bad)}.msg.finished .body{border-left:3px solid var(--line);padding-left:10px;margin-left:4px;color:var(--ink)}.msg.flag .body{border-left:3px solid var(--bad);padding-left:10px;margin-left:4px;color:var(--ink)}.msg.dm .body,.msg.handoff .body,.msg.standup.from-agent .body,.msg.chill .body{border-left:2px solid var(--line);padding-left:10px;margin-left:4px;color:var(--ink-2)}.msg.chill .body{font-style:italic}.msg .kind{font-size:11px;font-weight:620;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);margin:0 0 3px 26px}.msg.clamp:not(.full) .body{max-height:190px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 70%,transparent);mask-image:linear-gradient(#000 70%,transparent)}.msg .acts{display:flex;gap:12px;align-items:center;padding-left:26px;margin-top:6px;flex-wrap:wrap}.msg .reacts{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding-left:26px;margin-top:5px}.msg .reacts:not(.some){position:absolute;top:5px;right:8px;margin:0}.msg .reacts button{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:4px;font-size:13px;line-height:1}.msg .reacts .pill{padding:3px 7px;border-radius:999px;border:1px solid var(--line);background:var(--paper)}.msg .reacts .pill span{font-size:11.5px;font-weight:620;color:var(--ink-2);font-variant-numeric:tabular-nums}.msg .reacts .pill.mine{border-color:var(--work);background:color-mix(in srgb,var(--work) 10%,transparent)}.msg .reacts .pill:hover{border-color:var(--ink-3)}.msg .reacts .add{padding:3px 7px;border-radius:999px;font-size:12px;color:var(--ink-3);opacity:0;transition:opacity .12s}.msg:hover .reacts .add,.msg .reacts .add:focus-visible{opacity:1}.msg .reacts .add:hover{color:var(--ink);background:var(--line)}.emoji-picker{position:fixed;z-index:50;width:296px;max-height:320px;overflow-y:auto;padding:6px 8px 8px;border-radius:12px;border:1px solid var(--line);background:var(--paper);box-shadow:0 10px 30px #00000029}.emoji-picker[hidden]{display:none}.emoji-picker p{margin:6px 2px 2px;font-size:11px;font-weight:620;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3)}.emoji-picker .grid{display:grid;grid-template-columns:repeat(8,1fr)}.emoji-picker button{all:unset;cursor:pointer;display:grid;place-items:center;height:32px;border-radius:8px;font-size:19px}.emoji-picker button:hover,.emoji-picker button:focus-visible{background:var(--paper-2)}.msg .acts .icon{all:unset;cursor:pointer;display:inline-flex;padding:3px;margin:-3px;border-radius:6px;color:var(--ink-3)}.msg .acts .icon:hover,.msg .acts .icon:focus-visible{color:var(--ink);background:var(--t2)}.msg .acts .icon svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.msg .acts .icon.quiet{opacity:0;transition:opacity .12s}.msg:hover .acts .icon.quiet,.msg .acts .icon.quiet:focus-visible{opacity:1}@media (hover: hover){.msg:hover{background:var(--t1)}.msg .acts:not(:has(>:not(.quiet))){position:absolute;top:9px;right:46px;margin:0;padding:0}}.msg .thread-sum{all:unset;cursor:pointer;display:flex;align-items:center;gap:6px;margin:6px 0 0 8px;padding:4px 8px;border-radius:8px;font-size:12.5px;max-width:calc(100% - 24px);box-sizing:border-box}.msg .thread-sum:hover,.msg .thread-sum:focus-visible{background:var(--t1)}.msg .thread-sum .faces{display:flex;flex:none}.msg .thread-sum .faces .av{margin-right:-5px;border-radius:50%;box-shadow:0 0 0 1.5px var(--paper)}.msg .thread-sum .faces .face{width:18px;height:18px}.msg .thread-sum b{flex:none;font-weight:620;color:var(--accent);margin-left:2px}.msg .thread-sum .last{color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.thread-head{flex:none;display:flex;align-items:center;gap:12px;padding:12px 20px 10px;border-bottom:1px solid var(--line);font-size:13px}.thread-count{margin:0;font-size:11.5px;color:var(--ink-3);display:flex;align-items:center;gap:8px}.thread-count:after{content:"";flex:1;height:1px;background:var(--line)}.msg .blocked{margin:6px 0 0 26px;font-size:12.5px;color:var(--bad)}.link{all:unset;cursor:pointer;font-size:12.5px;font-weight:600;color:var(--accent)}.link:hover{text-decoration:underline;text-underline-offset:2px}.msg .acts .link{font-weight:560}.tag{font-weight:600;color:var(--accent)}.typing{flex:none;padding:0 20px 8px 34px;font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:3px}.typing span{width:4px;height:4px;border-radius:50%;background:var(--ink-3);animation:dot 1.1s infinite}.typing span:nth-child(2){animation-delay:.15s}.typing span:nth-child(3){animation-delay:.3s;margin-right:5px}@keyframes dot{30%{transform:translateY(-3px);opacity:1}0%,60%,to{opacity:.4}}.composer{flex:none;position:relative;margin:0 12px 12px;border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:10px 10px 8px 12px;box-shadow:0 1px 2px #00000008;transition:border-color .15s,box-shadow .15s}.composer:focus-within{border-color:var(--ink-3);box-shadow:0 0 0 4px var(--t1)}.composer textarea{all:unset;display:block;width:100%;font-size:14px;line-height:1.45;min-height:20px;white-space:pre-wrap;overflow-y:auto}.composer textarea::placeholder{color:var(--ink-3)}.composer .controls{display:flex;align-items:center;gap:3px;margin-top:8px}.composer .controls>button{flex:none}.composer .controls select{border:0;background:var(--t1);font-size:12px;padding:4px 18px 4px 6px;border-radius:7px;color:var(--ink-2);flex:0 1 auto;min-width:72px;text-overflow:ellipsis;outline:none;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6' fill='none' stroke='%23958d81' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:9px 6px}.composer .controls select:hover{background-color:var(--t2)}.composer .controls #model{flex:0 1 160px}.composer .controls button[type=submit]{margin-left:auto}.ac{position:absolute;left:0;right:0;bottom:calc(100% + 6px);background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px #281e0f24;padding:4px;max-height:280px;overflow-y:auto;z-index:5}.ac .item{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:8px;cursor:pointer;font-size:13.5px}.ac .item.on{background:var(--t2)}.ac .item i{width:8px;height:8px;border-radius:50%;flex:none}.ac .item i.hash{width:auto;height:auto;font-style:normal;color:var(--ink-3);font-weight:600}.ac .item span{font-weight:560}.ac .item em{margin-left:auto;font-style:normal;font-size:12px;color:var(--ink-3)}.ac:not(.faces) .item span small{font-size:inherit;font-weight:500;color:var(--ink-3)}.ac.faces{display:flex;flex-wrap:wrap;gap:2px;padding:6px}.ac.faces .item{position:relative;flex-direction:column;gap:4px;width:64px;padding:6px 2px;text-align:center;font-size:12px}.ac.faces .item .av{display:inline-flex}.ac.faces .item .av .face{display:block;width:36px;height:36px;border-radius:50%}.ac.faces .item span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ac.faces .item em{position:absolute;top:6px;right:10px;margin:0;width:9px;height:9px;border-radius:50%;box-shadow:0 0 0 2px var(--surface)}.ac.faces .item em.free{background:#4caf7d}.ac.faces .item em.busy{background:#e0a43a}.ac.faces .item .av.away .face{box-shadow:0 0 0 2px var(--surface),0 0 0 3.5px var(--ink-3)}.ac.faces .item small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:1px 6px;border-radius:99px;background:var(--t2);color:var(--ink-3);font-size:10px;font-weight:600}.primary,.ghost{border:0;cursor:pointer;border-radius:10px;padding:10px 14px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .12s,background .15s,opacity .15s}.primary{background:var(--ink);color:var(--paper)}.primary:hover{background:color-mix(in srgb,var(--ink) 85%,var(--paper))}.primary:active,.ghost:active{transform:scale(.97)}.ghost{background:transparent;color:var(--ink-2)}.ghost:hover{background:var(--t2);color:var(--ink)}.ghost.danger{color:var(--bad)}.small{padding:7px 12px;font-size:13px}select{border:1px solid var(--line);border-radius:8px;padding:6px 8px;background:var(--surface)}.hud{position:absolute;top:14px;right:14px;display:flex;gap:8px;pointer-events:none}.chip{pointer-events:auto;display:flex;align-items:center;height:38px;padding:0 14px;gap:16px;background:var(--glass);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--line);border-radius:12px;font-size:13px;color:var(--ink-2);box-shadow:0 1px 2px #0000000a,0 6px 18px #3c2d190f}#stats span{white-space:nowrap}#stats b{color:var(--ink);font-weight:650;font-variant-numeric:tabular-nums;margin-right:3px}.chip.tools{padding:0 4px;gap:2px}.chip.tools button{all:unset;cursor:pointer;width:30px;height:30px;display:grid;place-items:center;border-radius:8px;color:var(--ink-2);transition:background .15s,color .15s,transform .12s}.chip.tools button:hover{background:var(--t2);color:var(--ink)}.chip.tools button:active{transform:scale(.92)}.chip.tools button:disabled{opacity:.4;pointer-events:none}.chip.tools svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.chip .sep{width:1px;height:18px;background:var(--line);margin:0 3px}.hint{position:absolute;bottom:14px;left:50%;transform:translate(-50%);margin:0;font-size:12px;color:var(--ink-3);white-space:nowrap;pointer-events:none;transition:opacity .6s}.hint.gone{opacity:0}.detail{width:440px;display:flex;flex-direction:column;min-height:0;padding-top:18px;background:var(--pane);border-left:1px solid var(--pane-edge);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);animation:open .3s var(--ease)}@keyframes open{0%{opacity:0;transform:translate(12px)}}.d-head{display:flex;justify-content:space-between;align-items:center;padding:0 20px}.x{all:unset;cursor:pointer;font-size:22px;line-height:1;color:var(--ink-3);padding:2px 6px;border-radius:6px}.x:hover{color:var(--ink);background:var(--t2)}.pill{font-size:11.5px;font-weight:620;letter-spacing:.02em;text-transform:uppercase;padding:3px 8px;border-radius:6px}.pill.queued{background:var(--wait-bg);color:var(--wait-fg)}.pill.working{background:var(--work-bg);color:var(--work-fg)}.pill.done{background:var(--good-bg);color:var(--good-fg)}.pill.failed{background:var(--bad-bg);color:var(--bad-fg)}.pill.stopped{background:var(--t2);color:var(--ink-2)}.detail h2{margin:12px 20px;font-size:18px;font-weight:650;letter-spacing:-.015em;line-height:1.3;text-wrap:balance}.meta{margin:0 20px 14px;display:grid;grid-template-columns:repeat(3,1fr);gap:10px 12px}.meta dt{font-size:11px;color:var(--ink-3);margin-bottom:1px}.meta dd{margin:0;font-size:13px;font-weight:550;font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log{flex:1;overflow-y:auto;padding:14px 20px 16px;border-top:1px solid var(--line)}.e{margin:0 0 6px}.e p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}.e .who{display:block;font-size:11px;font-weight:620;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);margin-bottom:3px}.e.user{margin:4px 0 14px;padding:10px 12px;background:var(--t1);border-radius:10px}.e.text{margin:10px 0 12px}.e.sys{font-size:12px;color:var(--ink-3)}.e.tool{font-family:var(--mono);font-size:12px;color:var(--ink-2);display:flex;align-items:center;gap:8px}.e.err{font-family:var(--mono);font-size:12px;color:var(--bad);white-space:pre-wrap;overflow-wrap:anywhere}.e.result{margin:14px 0 6px;padding:12px;border-radius:10px;background:var(--good-bg)}.e.result.bad{background:var(--bad-bg)}.st{flex:none;width:7px;height:7px;border-radius:2px;background:var(--ink-3)}.st.library{background:#3d7ea6}.st.servers{background:#2b2f38}.st.window{background:#4f8fc0;border-radius:50%}.st.whiteboard{background:#e07a5f}.st.desk{background:#c39a6b}code{font-family:var(--mono);font-size:.88em;background:var(--t2);padding:1px 4px;border-radius:4px}.d-foot{border-top:1px solid var(--line);padding:12px 20px 16px;display:flex;flex-direction:column;gap:10px}.notice{font-size:13px;color:var(--ink-2);display:flex;flex-direction:column;align-items:flex-start;gap:8px}.reply textarea{width:100%;resize:none;border:1px solid var(--line);border-radius:10px;padding:9px 11px;background:var(--surface);outline:none}.reply textarea:focus{border-color:var(--ink-3)}.reply .row{display:flex;justify-content:space-between;gap:8px;margin-top:8px}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md p{margin:0 0 8px;white-space:normal}.md h1,.md h2,.md h3,.md h4{font-size:14px;font-weight:650;margin:12px 0 6px;letter-spacing:-.01em}.md ul,.md ol{margin:0 0 8px;padding-left:20px}.md li{margin:2px 0}.md a{color:var(--accent)}.md pre{font-family:var(--mono);font-size:12px;background:var(--t1);padding:10px 12px;border-radius:8px;overflow-x:auto;margin:0 0 8px}.md pre code{background:none;padding:0}.md table{border-collapse:collapse;width:100%;font-size:12.5px;margin:4px 0 10px;display:block;overflow-x:auto}.md th,.md td{text-align:left;padding:5px 10px 5px 0;border-bottom:1px solid var(--line);vertical-align:top}.md th{font-weight:620;color:var(--ink-2)}.md td{font-variant-numeric:tabular-nums}.md blockquote{margin:0 0 8px;padding-left:10px;border-left:2px solid var(--line);color:var(--ink-2)}.agent-label{position:absolute;left:0;top:0;display:flex;flex-direction:column;align-items:center;gap:5px;will-change:transform}.agent-label .name{display:flex;align-items:center;gap:5px;font-size:11.5px;font-weight:620;background:var(--glass);padding:2px 8px 2px 6px;border-radius:99px;color:var(--ink);box-shadow:0 1px 3px #0000001a}.agent-label .name i{width:7px;height:7px;border-radius:50%}.agent-label.selected .name{background:var(--ink);color:var(--paper)}.agent-label.far .bubble,.agent-label.crowded .bubble{display:none!important}.agent-label.buried{visibility:hidden}.bubble{max-width:170px;font-size:12px;font-weight:500;line-height:1.3;padding:5px 9px;border-radius:11px;background:var(--surface);color:var(--ink);box-shadow:0 2px 10px #281e0f24;text-align:center;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;animation:bub .2s ease-out}@keyframes bub{0%{opacity:0;transform:translateY(4px) scale(.96)}}.bubble.thinking{color:var(--ink-3);font-style:italic}.bubble.idle{color:var(--ink-2)}.bubble.warn{background:var(--bad-bg);color:var(--bad-fg)}.bubble.good{background:var(--good-bg);color:var(--good-fg)}.bubble.talk{background:var(--work-bg);color:var(--work-fg)}.xpfloat{position:absolute;top:-10px;font-size:14px;font-weight:720;color:var(--good-fg);animation:float 1.8s ease-out forwards;text-shadow:0 1px 0 var(--paper)}@keyframes float{0%{opacity:0;transform:translateY(8px)}15%{opacity:1}to{opacity:0;transform:translateY(-36px)}}.toast{position:absolute;left:50%;bottom:44px;transform:translate(-50%,12px);opacity:0;background:var(--ink);color:var(--paper);padding:10px 16px;border-radius:12px;font-weight:500;transition:opacity .2s,transform .25s var(--ease);pointer-events:none;max-width:calc(100% - 32px)}.toast.show{opacity:1;transform:translate(-50%)}.toast.good{background:#22603b;color:#fff}.toast.bad{background:#8f3121;color:#fff}.toast.act{pointer-events:auto}.toast button{all:unset;cursor:pointer;margin-left:10px;font-weight:650;text-decoration:underline;text-underline-offset:3px}.chip.away{gap:4px;padding:0 6px 0 12px}.chip.away span{margin-right:4px;color:var(--ink-3);white-space:nowrap}.chip.away button{all:unset;cursor:pointer;display:flex;align-items:center;gap:6px;height:28px;padding:0 9px;border-radius:8px;color:var(--ink);font-weight:550;transition:background .15s}.chip.away button:hover{background:var(--t2)}.chip.away i{width:8px;height:8px;border-radius:50%}.banner{position:absolute;left:50%;top:32%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;opacity:0;display:flex;flex-direction:column;gap:4px}.banner b{font-size:56px;font-weight:760;letter-spacing:-.04em;line-height:1;text-shadow:0 2px 30px var(--paper)}.banner span{font-size:16px;color:var(--ink-2);font-weight:520}.banner.show{animation:banner 3.4s var(--ease) forwards}@keyframes banner{0%{opacity:0;transform:translate(-50%,-40%) scale(.94)}12%,78%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,-56%)}}@media (max-width: 1180px){.app{grid-template-columns:min(var(--side-w, 320px),320px) minmax(0,1fr) auto}.detail{width:380px}}@container (max-width: 820px){#stats span:nth-child(n+3){display:none}.hint{display:none}}@container (max-width: 520px){#stats{display:none}}.mnav{display:none}@media (max-width: 860px){.app{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto}.view,.side{grid-area:1 / 1;min-width:0}.side-grip{display:none}.app[data-m=office] .side,.app[data-m=side] .view{visibility:hidden;pointer-events:none}.side{border-right:0;padding-top:env(safe-area-inset-top)}.brand{display:block;padding:12px 16px 8px}.brand .title{margin-bottom:6px}.brand h1{font-size:18px}.meter{padding:6px 10px;row-gap:4px}.tabs{display:none}.msgs{padding:12px 14px 8px}.channels{padding:8px 10px 0}.channel{padding:7px 12px;font-size:13.5px}.composer{margin:0 10px 10px}.composer textarea,.new-channel input,input,select,textarea{font-size:16px}.composer .controls{gap:6px}.composer .controls>button{min-width:38px;min-height:38px;justify-content:center;align-items:center}.composer .controls select{font-size:13px;min-height:36px;padding-right:22px}.composer .controls button[type=submit]{min-height:38px;padding:0 18px}#jobsPane,.team,.projects{padding-bottom:12px}.hud{top:calc(10px + env(safe-area-inset-top));left:10px;right:10px;flex-direction:column;align-items:flex-end}.chip.tools button{width:36px;height:36px}.chip.away{max-width:100%;height:auto;min-height:38px;flex-wrap:wrap;padding:4px 6px 4px 12px}.hint,#stats{display:none}.toast{max-width:calc(100% - 24px);bottom:18px}.banner b{font-size:40px}.detail{position:fixed;top:0;right:0;bottom:0;left:0;width:auto;z-index:30;padding-top:calc(14px + env(safe-area-inset-top));padding-bottom:env(safe-area-inset-bottom);border-left:0}.meta{margin:0 16px 14px}.detail h2{margin:12px 16px}.d-head{padding:0 16px}.x{font-size:28px;padding:4px 12px}.mnav{display:grid;grid-template-columns:repeat(5,1fr);grid-row:2;z-index:25;background:color-mix(in srgb,var(--paper) 96%,transparent);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.mnav button{all:unset;cursor:pointer;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:54px;font-size:11px;font-weight:600;color:var(--ink-3);-webkit-tap-highlight-color:transparent;transition:color .15s}.mnav button.on{color:var(--ink)}.mnav button:active svg{transform:scale(.88)}.mnav button:focus-visible{outline:2px solid var(--accent);outline-offset:-4px;border-radius:10px}.mnav svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;transition:transform .12s}.mnav b:not(:empty){position:absolute;top:5px;left:calc(50% + 6px);font-size:10.5px;background:var(--accent);color:var(--paper);border-radius:99px;padding:0 5px;line-height:15px;font-weight:700}.mnav .dot{position:absolute;top:8px;left:calc(50% + 8px);width:8px;height:8px;border-radius:50%;background:var(--accent)}}@media (hover: none){.chip.tools button:hover,.channel:hover{background:none}}body{overscroll-behavior:none;-webkit-tap-highlight-color:transparent}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.attach{border:0;background:none;cursor:pointer;padding:4px;border-radius:7px;color:var(--ink-3);display:inline-flex}.attach:hover{background:var(--t1);color:var(--ink-2)}.attach svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.composer.dropping,.reply.dropping{border-color:var(--work);box-shadow:0 0 0 4px var(--t2)}.reply.dropping textarea{border-color:var(--work)}.tray{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.tray .file,.files .file{display:inline-flex;align-items:center;gap:6px;max-width:200px;padding:3px 4px 3px 3px;border-radius:8px;background:var(--t1);font-size:12px;color:var(--ink-2);text-decoration:none}.tray .file.loading{opacity:.55}.tray .file img{width:28px;height:28px;object-fit:cover;border-radius:6px;flex:none}.tray .file b,.files .file b{font-size:9px;font-weight:700;letter-spacing:.04em;color:var(--ink-3);background:var(--surface);border-radius:5px;padding:5px 4px;flex:none}.tray .file span,.files .file span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tray .file button{border:0;background:none;cursor:pointer;color:var(--ink-3);font-size:15px;line-height:1;padding:0 3px}.tray .file button:hover{color:var(--ink)}.msg .files{display:flex;flex-wrap:wrap;gap:6px;padding-left:14px;margin-top:4px}.msg .files .thumb img{display:block;max-width:160px;max-height:120px;border-radius:8px;border:1px solid var(--line)}.reply .row .attach{margin-left:auto}.mic{border:0;background:none;cursor:pointer;padding:4px;border-radius:7px;color:var(--ink-3);display:inline-flex}.mic:hover{background:var(--t1);color:var(--ink-2)}.mic:disabled{opacity:.45;pointer-events:none}.mic svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.mic.on{color:#fff;background:var(--bad)}.mic.on:hover{background:var(--bad);color:#fff}.rec{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:12.5px;color:var(--ink-2)}.rec i{width:8px;height:8px;border-radius:50%;background:var(--bad);flex:none;animation:pulse 1.1s ease-in-out infinite}.rec span{font-variant-numeric:tabular-nums}.rec .link{margin-left:auto;color:var(--ink-3)}.rec .link+.link{margin-left:0}.rec.working i{background:var(--work)}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}@media (prefers-reduced-motion: reduce){.rec i{animation:none}}audio.voice{width:100%;max-width:260px;height:32px}.msg .files audio.voice{margin-top:2px}.tray .file b{white-space:nowrap}.chip.tools button.on{color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.changes{margin:0 20px 14px;border:1px solid var(--line);border-radius:10px;background:var(--paper);overflow:hidden}.changes.none{padding:9px 12px;font-size:12.5px;color:var(--ink-3)}.c-head{all:unset;box-sizing:border-box;width:100%;display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer;font-size:13px}.c-head:hover{background:color-mix(in srgb,var(--ink) 4%,transparent)}.c-head:focus-visible,.c-file:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.c-title{font-weight:620}.c-sum{flex:1;color:var(--ink-2);font-variant-numeric:tabular-nums}.c-caret{color:var(--ink-3)}.changes .add{color:var(--good-fg);font-weight:600}.changes .del{color:var(--bad-fg);font-weight:600}.c-files{list-style:none;margin:0;padding:0;border-top:1px solid var(--line);max-height:240px;overflow-y:auto}.c-files li{border-bottom:1px solid var(--line)}.c-files li:last-child{border-bottom:0}.c-files .more{padding:7px 12px;font-size:12px;color:var(--ink-3)}.c-file{all:unset;box-sizing:border-box;width:100%;display:flex;align-items:center;gap:8px;padding:6px 12px;cursor:pointer;font-size:12.5px}.c-file:hover{background:color-mix(in srgb,var(--ink) 4%,transparent)}.c-file .st{font:700 10.5px/1 ui-monospace,monospace;width:16px;text-align:center;padding:3px 0;border-radius:4px;background:var(--t2);color:var(--ink-2)}.c-file .st.added{background:var(--good-bg);color:var(--good-fg)}.c-file .st.deleted{background:var(--bad-bg);color:var(--bad-fg)}.c-file .p{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left;font-family:ui-monospace,monospace}.c-file .n{color:var(--ink-3);font-variant-numeric:tabular-nums}.c-diff{margin:0;padding:8px 12px;max-height:320px;overflow:auto;font:11.5px/1.5 ui-monospace,monospace;background:color-mix(in srgb,var(--ink) 3%,transparent);white-space:pre}.c-diff .add{color:var(--good-fg);background:var(--good-bg);display:inline-block;min-width:100%;font-weight:400}.c-diff .del{color:var(--bad-fg);background:var(--bad-bg);display:inline-block;min-width:100%;font-weight:400}.c-diff .hunk{color:var(--ink-3)}.name-ask{border:1px solid var(--line);border-radius:16px;padding:22px;max-width:380px;width:calc(100vw - 48px);background:var(--paper);color:inherit;box-shadow:0 24px 60px #00000040}.name-ask::backdrop{background:#00000059}.name-ask h2{margin:0 0 8px;font-size:18px}.name-ask .acct-forget{display:block;margin:12px 0 0}.meet{max-width:420px}.meet-list{display:grid;gap:6px;margin-top:14px;max-height:min(420px,55dvh);overflow-y:auto;padding:2px}.meet-row{display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:10px}.meet-row i{width:10px;height:10px;border-radius:50%}.meet-row input{min-width:0;padding:6px 9px;border-radius:8px;border:1px solid var(--line);background:var(--paper-2);color:var(--ink);font:inherit;font-size:13px;font-weight:550}.meet-row input:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.meet-row input:invalid{border-color:var(--bad)}.meet-role{font-size:12px;color:var(--ink-3);text-align:right;white-space:nowrap}.meet-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px}.meet .meet-foot .acct-forget{margin:0}.settings{width:min(640px,calc(100vw - 24px));max-height:min(720px,calc(100dvh - 24px));padding:0;margin:auto;display:none;flex-direction:column;overflow:hidden;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:16px;box-shadow:0 24px 60px #00000047}.settings[open]{display:flex}.settings::backdrop{background:#00000052;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.set-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px 12px 22px;border-bottom:1px solid var(--line)}.set-head h2{margin:0;font-size:17px;font-weight:650;letter-spacing:-.01em}.set-x{width:30px;height:30px}.set-body{flex:1;min-height:0;overflow-y:auto;padding:4px 22px 8px;overscroll-behavior:contain}.set-group{padding:8px 0 4px}.set-group+.set-group{border-top:1px solid var(--line)}.set-group .theme-k{margin:10px 0 4px}.set-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(150px,220px);gap:8px 18px;align-items:center;padding:10px 0;position:relative}.set-row.set-changed:before{content:"";position:absolute;left:-12px;top:12px;bottom:12px;width:2px;border-radius:2px;background:var(--accent)}.set-label{font-size:13.5px;font-weight:580;color:var(--ink)}.set-fine{margin:2px 0 0}.set-reset{display:inline;margin:0;font-size:inherit}.set-input{width:100%;box-sizing:border-box;padding:7px 10px;border-radius:9px;border:1px solid var(--line);background:var(--paper-2);color:var(--ink);font:inherit;font-size:13px;font-variant-numeric:tabular-nums}.set-input:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.set-choice{width:100%;box-sizing:border-box}.set-choice button{text-transform:capitalize}.set-switch{all:unset;cursor:pointer;justify-self:end;position:relative;width:38px;height:22px;border-radius:11px;background:var(--t3);transition:background .18s}.set-switch:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0000004d;transition:transform .18s cubic-bezier(.2,.8,.2,1)}.set-switch[aria-checked=true]{background:var(--accent)}.set-switch[aria-checked=true]:after{transform:translate(16px)}.set-switch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.set-foot{display:flex;align-items:center;gap:12px;padding:12px 22px 14px;border-top:1px solid var(--line);background:var(--paper-2)}.set-msg{flex:1;font-size:12px;color:var(--ink-3)}.set-foot .acct-forget{margin:0}@media (max-width: 520px){.set-row{grid-template-columns:1fr}.set-switch{justify-self:start}}@media (prefers-reduced-motion: reduce){.set-switch,.set-switch:after{transition:none}}.agent-label.visitor .name{box-shadow:0 0 0 1.5px var(--tint),0 1px 3px #0000001a}.agent-label.visitor .name .handle{color:var(--ink-2);font-weight:520;white-space:pre}.door-sign{position:absolute;left:0;top:0;will-change:transform;display:flex;flex-direction:column;gap:2px;align-items:center;font-size:11.5px;font-weight:620;color:var(--ink);background:var(--glass);padding:4px 10px;border-radius:8px;box-shadow:0 1px 3px #0000001f}.visitor-card{position:absolute;left:0;top:0;z-index:20000;width:max-content;max-width:260px;display:flex;flex-direction:column;gap:3px;font-size:12px;line-height:1.35;color:var(--ink);background:var(--surface);padding:8px 11px;border-radius:10px;border-left:3px solid var(--tint);box-shadow:0 4px 16px #281e0f29}.visitor-card .vc-who{font-weight:650}.visitor-card .vc-role,.visitor-card .vc-state{color:var(--ink-2)}.visitor-card .vc-job{font-weight:520}.visitor-card .vc-state{font-size:11px}
package/dist/index.html CHANGED
@@ -25,8 +25,8 @@
25
25
  })();
26
26
  </script>
27
27
  <title>Office</title>
28
- <script type="module" crossorigin src="/assets/index-S_6NhxZ0.js"></script>
29
- <link rel="stylesheet" crossorigin href="/assets/index-CiEWLydu.css">
28
+ <script type="module" crossorigin src="/assets/index-B9ZRfVrF.js"></script>
29
+ <link rel="stylesheet" crossorigin href="/assets/index-BiK6nglq.css">
30
30
  </head>
31
31
  <body>
32
32
  <div class="app" id="app" data-m="office">
@@ -166,9 +166,17 @@
166
166
  </form>
167
167
  </section>
168
168
  <section class="pane" id="teamPane" hidden>
169
+ <div class="viewbar" role="group" aria-label="View as">
170
+ <button type="button" data-view="list" aria-pressed="true" aria-label="List" title="List"><svg viewBox="0 0 24 24"><path d="M8 6h12M8 12h12M8 18h12M4 6h.01M4 12h.01M4 18h.01"/></svg></button>
171
+ <button type="button" data-view="icons" aria-pressed="false" aria-label="Icons" title="Icons"><svg viewBox="0 0 24 24"><rect x="4" y="4" width="6" height="6" rx="1.5"/><rect x="14" y="4" width="6" height="6" rx="1.5"/><rect x="4" y="14" width="6" height="6" rx="1.5"/><rect x="14" y="14" width="6" height="6" rx="1.5"/></svg></button>
172
+ </div>
169
173
  <div class="team" id="team"></div>
170
174
  </section>
171
175
  <section class="pane" id="projectsPane" hidden>
176
+ <div class="viewbar" role="group" aria-label="View as">
177
+ <button type="button" data-view="list" aria-pressed="true" aria-label="List" title="List"><svg viewBox="0 0 24 24"><path d="M8 6h12M8 12h12M8 18h12M4 6h.01M4 12h.01M4 18h.01"/></svg></button>
178
+ <button type="button" data-view="icons" aria-pressed="false" aria-label="Icons" title="Icons"><svg viewBox="0 0 24 24"><rect x="4" y="4" width="6" height="6" rx="1.5"/><rect x="14" y="4" width="6" height="6" rx="1.5"/><rect x="4" y="14" width="6" height="6" rx="1.5"/><rect x="14" y="14" width="6" height="6" rx="1.5"/></svg></button>
179
+ </div>
172
180
  <div class="projects" id="projects"></div>
173
181
  </section>
174
182
  <section class="pane" id="jobsPane" hidden>
@@ -197,9 +205,6 @@
197
205
  <button type="button" id="standup" title="Call a standup" aria-label="Call a standup">
198
206
  <svg viewBox="0 0 24 24"><circle cx="12" cy="5" r="2"/><circle cx="5" cy="15" r="2"/><circle cx="19" cy="15" r="2"/><path d="M8.5 20.5a7.5 7.5 0 0 0 7 0M3.5 10.5a8.5 8.5 0 0 1 4.5-5M20.5 10.5a8.5 8.5 0 0 0-4.5-5"/></svg>
199
207
  </button>
200
- <button type="button" id="termToggle" title="Terminal (⌃`)" aria-label="Terminal">
201
- <svg viewBox="0 0 24 24"><rect x="2.5" y="4" width="19" height="16" rx="2.5"/><path d="M7 9.5l2.6 2.5L7 14.5"/><path d="M12.6 15h4.6"/></svg>
202
- </button>
203
208
  <span class="sep"></span>
204
209
  <button type="button" class="sound" id="sound" aria-label="Sound on" title="Sound on"></button>
205
210
  <button type="button" class="sound" id="speak" aria-label="Read replies aloud" title="Read replies aloud"></button>
@@ -209,24 +214,6 @@
209
214
  <div class="banner" id="banner"></div>
210
215
  <div class="toast" id="toast"></div>
211
216
  <p class="hint">Drag to move · Right-drag or Q / E to turn · Scroll to zoom · Double-click to go there</p>
212
-
213
- <section class="term" id="term" hidden aria-label="Terminal">
214
- <div class="term-grip" id="termGrip" role="separator" aria-orientation="horizontal" aria-label="Resize the terminal" tabindex="0"></div>
215
- <header class="term-bar">
216
- <div class="term-tabs" id="termTabs" role="tablist" aria-label="Terminal sessions"></div>
217
- <select id="termFolder" aria-label="Folder for the next terminal"></select>
218
- <button type="button" class="term-icon" id="termNew" title="New terminal" aria-label="New terminal">
219
- <svg viewBox="0 0 24 24"><path d="M12 5v14M5 12h14"/></svg>
220
- </button>
221
- <span class="term-fill"></span>
222
- <span class="term-note" id="termNote"></span>
223
- <button type="button" class="term-icon" id="termHide" title="Hide the terminal (⌃`)" aria-label="Hide the terminal">
224
- <svg viewBox="0 0 24 24"><path d="M6 18L18 6M6 6l12 12"/></svg>
225
- </button>
226
- </header>
227
- <div class="term-body" id="termBody"></div>
228
- <div class="term-off" id="termOff" hidden></div>
229
- </section>
230
217
  </main>
231
218
 
232
219
  <aside class="detail" id="detail" hidden></aside>
package/docs/README.md CHANGED
@@ -17,7 +17,6 @@
17
17
  - [Claude access](claude-access.md) — Claude Code login or API key, and the plan meters
18
18
  - [Configuration](configuration.md) — every setting
19
19
  - [Talking out loud](voice.md) — speech in and voices out, all on this machine
20
- - [The terminal](terminal.md) — a real shell under the office
21
20
  - [On your phone](phone.md) — install it like an app, reach it over Tailscale
22
21
 
23
22
  **Under the hood**
@@ -13,8 +13,7 @@ The key button beside Appearance chooses how the office signs in to Claude:
13
13
  The choice applies to every `claude` the office starts: jobs, the chief,
14
14
  standup and break-room talk. With the login chosen, a stray
15
15
  `ANTHROPIC_API_KEY` in your shell is kept away from them, since `claude` would
16
- otherwise prefer it. Jobs already running finish the way they started. The
17
- in-app terminal is your own shell and never gets the office's key.
16
+ otherwise prefer it. Jobs already running finish the way they started.
18
17
 
19
18
  ## Plan usage
20
19
 
@@ -25,7 +25,7 @@ voice toggle, team profiles, theme — are made in the office and remembered.
25
25
  | `CLAUDE_CODE_OAUTH_TOKEN` | none | a Claude Code login token, for the login mode and the plan meters |
26
26
  | `CHIEF_MODEL` | `sonnet` | the chief of staff, and the standup write-up |
27
27
  | `AGENT_COMPACT_PCT` | `60` | how full an agent's context gets before Claude Code compacts it |
28
- | `AGENT_CLEAR_TOKENS` | `150000` | context size past which an agent's next message nudges it to `clear_context` and start fresh; `0` turns the nudge off; the limit set in the office (Claude access menu) overrides it |
28
+ | `AGENT_CLEAR_TOKENS` | `150000` | context size past which an agent's next message nudges it to `clear_context`; if it is still past it when its next turn ends (or it resumes idle), the office clears it automatically; `0` turns the nudge off; the limit set in the office (Claude access menu) overrides it |
29
29
 
30
30
  ## Standup and the break room
31
31
 
@@ -46,12 +46,8 @@ voice toggle, team profiles, theme — are made in the office and remembered.
46
46
  | `PIPER_BIN` | `data/piper/venv/bin/python` | the voices live in `data/piper/voices` |
47
47
  | `FFMPEG_BIN` | `ffmpeg` | |
48
48
 
49
- ## Terminal
49
+ ## Leaderboard
50
50
 
51
51
  | Env | Default | |
52
52
  |---|---|---|
53
53
  | `OFFICE_LEADERBOARD_URL` | the hosted board | address of a different leaderboard service; see [The leaderboard](leaderboard.md) |
54
- | `OFFICE_TERMINAL` | unset | `1` opens the in-app terminal |
55
- | `OFFICE_TERMINAL_SHELL` | your `$SHELL` | |
56
- | `OFFICE_TERMINAL_MAX` | `4` | sessions at once |
57
- | `OFFICE_TERMINAL_IDLE_MIN` | `30` | `0` never closes an idle shell |
@@ -44,7 +44,6 @@ the chat with `#`, e.g. `#storefront`.
44
44
  | Extra | What it adds | How |
45
45
  |---|---|---|
46
46
  | Voice | talk to the office, hear it answer | [Talking out loud](voice.md) |
47
- | Terminal | a real shell in a drawer under the office | [The terminal](terminal.md) |
48
47
  | Phone | the office on your phone, installed like an app | [On your phone](phone.md) |
49
48
 
50
49
  ## Next
@@ -86,16 +86,6 @@ browser's built-in voices.
86
86
  Browsers only allow it on `localhost` or HTTPS. Open the office at
87
87
  `http://localhost:4317`, not an IP address.
88
88
 
89
- ## The terminal won't open
90
-
91
- **There's no terminal button, or it says the terminal is off.**
92
- It's off by default. Start the office with `OFFICE_TERMINAL=1 npm start`.
93
-
94
- **"node-pty is not installed."**
95
- It's a native module and needs build tools. On macOS:
96
- `xcode-select --install`, then `npm install`. On Linux: install
97
- `build-essential` and `python3`, then `npm install`.
98
-
99
89
  ## On a phone
100
90
 
101
91
  **"Local only." (HTTP 403)**
@@ -38,5 +38,3 @@ Then restart it with `npm start`. To stay on a release, check out its tag
38
38
  - **Keep a way back:** copy the data folder before updating. Going back is
39
39
  then: stop the office, install the previous version, restore the folder,
40
40
  start.
41
- - **The terminal stops working after an update:** node-pty needs rebuilding;
42
- see [Troubleshooting](troubleshooting.md#the-terminal-wont-open).
@@ -52,7 +52,6 @@ If the server restarts mid-job, jobs with a session resume where they left off.
52
52
  | `data/auth.json` | how Claude is signed in to, and the API key if you gave one (mode `0600`) |
53
53
  | `data/uploads/` | attachments and voice notes |
54
54
  | `data/whisper/`, `data/piper/` | speech models, if you installed them |
55
- | `data/terminal.log` | when terminal sessions opened and closed |
56
55
 
57
56
  `data/` is git-ignored. State is written shortly after every change, and the server stops its jobs cleanly on Ctrl-C so they can resume.
58
57
 
@@ -70,7 +69,6 @@ If the server restarts mid-job, jobs with a session resume where they left off.
70
69
  | `leaderboard/` | the leaderboard service (a Cloudflare Worker) |
71
70
  | `server/changes.js` | the "what changed" snapshots and diffs |
72
71
  | `server/voice.js` | whisper.cpp transcription and Piper voices |
73
- | `server/terminal.js` | the in-app terminal |
74
72
  | `server/procstat.js` | agents' CPU and memory |
75
73
  | `web/src/main.js` | browser entry: socket, state, wiring |
76
74
  | `web/src/office.js`, `figure.js`, `agent.js` | the 3D office and the people in it |
@@ -47,7 +47,7 @@ account. Pick **Invite a guest** and choose:
47
47
 
48
48
  A guest can start up to three jobs at a time, reply to them, stop them, and see
49
49
  their logs and changes. They can't see your other jobs, chat or channels, and
50
- they can't use the terminal, restart the office, or change staff or settings.
50
+ they can't restart the office, or change staff or settings.
51
51
  Their jobs show `from @handle` in your job list, and you can stop any of them.
52
52
  Agents working for a guest can't message or hand work to your other agents.
53
53
  They also don't get your MCP servers or claude.ai connectors (mail, Slack,
@@ -59,13 +59,66 @@ Even at *Edit files*, a guest can change files that run later, such as
59
59
  `package.json` scripts, build files or git hooks. Only invite someone you would
60
60
  trust with those projects. *Plan only* is the safe choice.
61
61
 
62
- ## Visiting as a guest
63
-
64
- When an office has made you its guest, its row in the Links panel has **Visit
65
- @host**. It opens the host's office, showing their agents and your jobs there.
66
- A bar at the top shows whose office you're in and your limits, and **Back to my
67
- office** takes you home. Only the projects and clearances you're allowed are
68
- offered.
62
+ ## Working with a host's agents
63
+
64
+ When an office has made you its guest, its agents join your own chat. Tag them
65
+ with `@` like your own: `@Ada fix the login bug` starts a job with Ada in the
66
+ host's office, and the job shows in your Jobs list, marked with the host's
67
+ handle. If one of your agents has the same name, yours wins a bare `@Ada`;
68
+ write `@Ada@host` for theirs (the `@` menu does this for you).
69
+
70
+ The project is picked for you: the only one the host shares, else one named in
71
+ the message (`#web` or just "web"), else the one you used there last. The first
72
+ time, with several shared and none named, the chief asks which. Clearance is
73
+ held to the host's limit. Reply in the job's thread to follow up; when it
74
+ finishes, the chief says so there. Files can't be sent to a host.
75
+
76
+ The old visit page still opens at `?visit=<link id>`, but you don't need it.
77
+
78
+ ## Letting a guest's own agents work in your projects
79
+
80
+ A guest invite has two switches. **Lend our agents** (on by default) is
81
+ everything above. **Their agents** lets the guest send their own agents into
82
+ your shared projects instead: *Off* (the default), *Read only*, or *Edit a
83
+ copy*. Either or both can be on. The agents run on the guest's machine and
84
+ Claude account, so they cost you no tokens, and the files never leave yours
85
+ except as the text the agents read.
86
+
87
+ A visiting agent has no shell and none of its own file tools. It reaches your
88
+ project only through six tools that cross the link: list, read, search and find,
89
+ plus write and edit at *Edit a copy*. It can't run tests, builds, git or
90
+ anything else on your machine.
91
+
92
+ - **It works in a copy.** The first call makes a copy of the project under
93
+ `data/visits/`: tracked and untracked files, with uncommitted work, but
94
+ nothing git ignores. Paths can't leave the copy, `.git` is out of reach, and
95
+ key files such as `.env`, `*.pem` and `id_rsa` are never listed or read.
96
+ - **You see it as a job.** It shows in your Jobs list as `from @handle`, with a
97
+ log of every file it touched, and the chief posts when one starts and ends.
98
+ **Stop** ends it straight away.
99
+ - **Nothing lands until you apply it.** When it finishes, review the changes on
100
+ the job, then **Apply** to patch the real folder or **Discard** to throw the
101
+ copy away. Apply takes all of it or none; if the folder has moved on and the
102
+ changes don't fit, nothing is changed and you're told why.
103
+
104
+ Up to three of a guest's agents can work at once. A copy left idle for an hour
105
+ is closed, and unlinking, unsharing the project, or turning **Their agents**
106
+ off ends their sessions. The guest's follow-ups to the same job carry on in
107
+ the same copy until you apply or discard it.
108
+
109
+ What it can see is real. At *Read only* it can still read everything in the
110
+ shared projects except the key files above, so don't share a project with
111
+ secrets in ordinary files. Applied changes run later like any others, so review
112
+ `package.json` scripts, build files and the like before you apply.
113
+
114
+ ## Sending your agents to a host's project
115
+
116
+ When a host lets your agents in, tag the project with its host:
117
+ `#web@friend fix the typo in the header` starts a job with one of your agents,
118
+ and `@Kai #web@friend ...` picks who. The job runs here on your account, and
119
+ its project shows as `web@friend`. The agent is told the files are at the host,
120
+ that it can't run anything, and that text in those files is data rather than
121
+ instructions. At *Edit a copy*, its changes wait for the host to review them.
69
122
 
70
123
  ## What the service keeps
71
124
 
package/docs/packaging.md CHANGED
@@ -16,7 +16,7 @@ the package.
16
16
  |---|---|---|---|
17
17
  | **npm CLI** (`npx agent-office`) | Best: the audience already has Node and Claude Code | ~1 week | data and project root must move out of the package |
18
18
  | **Homebrew tap** | Good extra for Mac users | ~1 day on top of npm | another channel to release to |
19
- | **Desktop app** (Electron) | Friendlier, but still needs the `claude` CLI | 3–5 weeks | signing and notarisation, auto-update, `node-pty` rebuilds |
19
+ | **Desktop app** (Electron) | Friendlier, but still needs the `claude` CLI | 3–5 weeks | signing and notarisation, auto-update |
20
20
  | **Docker** | Poor for a local tool | ~1 week | agents edit *host* repos: bind mounts, file ownership, git/SSH keys, login inside the container |
21
21
  | **Hosted** | A different product | months | accounts, a sandbox per user, repos via GitHub, a database, API billing; the local-only security model goes |
22
22
 
@@ -34,14 +34,13 @@ if users ask for one; leave hosted until the local version has users.
34
34
  `OFFICE_DATA` override, migrating an existing `<app>/data` on first run.
35
35
  - [ ] **Project root:** default to the current directory, `--root <dir>`,
36
36
  remembered after the first run.
37
- - [ ] **`bin/agent-office.js`:** `--port`, `--root`, `--open`, `--terminal`;
37
+ - [ ] **`bin/agent-office.js`:** `--port`, `--root`, `--open`;
38
38
  pick another port if 4317 is taken; open the browser.
39
39
  - [ ] **Preflight:** `claude` on `PATH`, recent enough, and signed in or given a
40
40
  key — one clear fix for each problem.
41
41
  - [ ] **Package:** publish a prebuilt `dist/`; move the web-only dependencies
42
- (`three`, `marked`, `xterm`, fonts) to devDependencies so the runtime
42
+ (`three`, `marked`, fonts) to devDependencies so the runtime
43
43
  needs only `ws`.
44
- - [ ] **Terminal:** a `node-pty` build with prebuilt binaries, still optional.
45
44
  - [ ] **Voice:** `agent-office voice setup` in place of the two npm scripts.
46
45
  - [ ] **Plan meters:** hide quietly if the usage endpoint goes away.
47
46
  - [ ] **Platforms:** CI on clean macOS and Ubuntu; Windows via WSL.
package/docs/phone.md CHANGED
@@ -27,6 +27,5 @@ On the phone, open the tailnet address once with the office key on the end,
27
27
  printed, or `agentoffice --link`). The phone keeps it after that.
28
28
 
29
29
  **Read this first.** Whoever can open that address can run Claude in your
30
- projects with full autonomy, and — if started with `--terminal` — get a shell on
31
- this machine. Only expose it on a tailnet that is just you. Never put it on
30
+ projects with full autonomy. Only expose it on a tailnet that is just you. Never put it on
32
31
  the open internet. See [Security](security.md).
package/docs/security.md CHANGED
@@ -64,7 +64,7 @@ enforced on your side and the guest's office is never trusted:
64
64
  - only the projects you picked;
65
65
  - at or below the clearance cap you set;
66
66
  - within the tokens per day you set;
67
- - no terminal, settings, chat, or other people's jobs;
67
+ - no settings, chat, or other people's jobs;
68
68
  - their agents can't reach your other agents;
69
69
  - their jobs don't get your MCP servers or claude.ai connectors, your
70
70
  user-level Claude Code settings and hooks, or your Claude Code memory.
@@ -72,9 +72,3 @@ enforced on your side and the guest's office is never trusted:
72
72
  Even *Edit files* can change scripts or hooks that run later, so invite only
73
73
  people you would trust with those projects. Details in
74
74
  [Linked offices](linked-offices.md).
75
-
76
- ## The terminal
77
-
78
- Off unless started with `--terminal` (`OFFICE_TERMINAL=1`). A session needs a single-use ticket from the
79
- origin-checked API, no agent can open one, and keystrokes are never logged. It
80
- is not a sandbox. Details in [The terminal](terminal.md).
@@ -57,7 +57,7 @@ Drag to move, right-drag (or `Q` / `E`) to turn around what's in the middle
57
57
  of the view, scroll to zoom toward the cursor, double-click to glide somewhere.
58
58
  `W A S D` pan, `R` recenters. The walls nearest you drop down so you can always
59
59
  see in. Chat and job details sit in their own columns and never cover the
60
- office, and `⌃`` opens the terminal drawer beneath it.
60
+ office.
61
61
 
62
62
  ## Daily standup
63
63
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-office-studio",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "A 3D office where the staff are Claude Code agents.",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -45,7 +45,7 @@
45
45
  "start": "vite build && node server/supervise.js",
46
46
  "voice:model": "mkdir -p data/whisper && curl -L --progress-bar -o data/whisper/ggml-base.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin",
47
47
  "voice:piper": "python3 -m venv data/piper/venv && data/piper/venv/bin/pip install -q piper-tts && data/piper/venv/bin/python -m piper.download_voices --data-dir data/piper/voices en_GB-cori-high en_US-amy-medium en_GB-alan-medium en_US-kristin-medium en_US-ryan-high en_GB-alba-medium en_GB-aru-medium en_US-john-medium en_US-hfc_female-medium",
48
- "test": "node scripts/smoke.mjs && node scripts/guests.mjs",
48
+ "test": "node scripts/smoke.mjs && node scripts/guests.mjs && node scripts/remote.mjs && node scripts/visits.mjs",
49
49
  "prepack": "vite build"
50
50
  },
51
51
  "dependencies": {
@@ -54,14 +54,9 @@
54
54
  "devDependencies": {
55
55
  "@fontsource-variable/inter": "5.3.0",
56
56
  "@fontsource/jetbrains-mono": "5.3.0",
57
- "@xterm/addon-fit": "0.11.0",
58
- "@xterm/xterm": "6.0.0",
59
57
  "concurrently": "10.0.6",
60
58
  "marked": "^18.1.0",
61
59
  "three": "0.186.1",
62
60
  "vite": "6.4.3"
63
- },
64
- "optionalDependencies": {
65
- "node-pty": "1.0.0"
66
61
  }
67
62
  }