@ours.network/cowork 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +10 -2
- package/dist/daemon.js +15 -6
- package/dist/mufl_code/BBAE58CF78DEE59692F456EAFFA9A6109835B66846FC3989F6D201B8F4523A55.muflo +0 -0
- package/dist/web/assets/app.css +1 -1
- package/dist/web/assets/app.js +9 -9
- package/docs/05-room-workflow.md +1 -1
- package/docs/08-backup-restore.md +2 -0
- package/docs/10-limitations.md +1 -0
- package/docs/11-web-console.md +5 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ ours-cowork docs
|
|
|
9
9
|
|
|
10
10
|
`ours-cowork web` starts the daemon if it is absent, waits for the console, and opens `http://127.0.0.1:3052/`. Create a room with a friendly display name first, then add each invitation requirement from its Invite panel. Names are trimmed, normalized to Unicode NFC, and may contain 1–64 Unicode characters excluding control and format characters. Duplicate names are allowed. The Communication view contains the human-readable room chat; operational records remain in Events and the complete ordered stream remains in Archive.
|
|
11
11
|
|
|
12
|
-
The friendly `room_name` is presentation metadata. The opaque `room_id` remains the stable key for
|
|
12
|
+
The friendly `room_name` is presentation metadata. New rooms announce the technical identity `ours-cowork-room:<initial room_name>`; that authenticated announced name is frozen when the display name later changes. Duplicate display and announced names are allowed because identity CIDs, not names, are the authorization and routing keys. The opaque `room_id` remains the stable key for URLs, storage, and identity correlation. Existing `cowork-room-<room_id>` identities are never renamed or recreated, and rooms created before friendly names existed migrate only their display metadata to `Room <first 8 room_id characters>`.
|
|
13
13
|
|
|
14
14
|
The localhost HTTP console has no authentication. Keep it bound to `127.0.0.1`; do not proxy, forward, or expose the port to other hosts. Room state is refreshed by periodic polling, not pushed to the browser.
|
|
15
15
|
|
package/dist/cli.js
CHANGED
|
@@ -4327,6 +4327,13 @@ var RoomNameSchema = external_exports.string().refine(
|
|
|
4327
4327
|
});
|
|
4328
4328
|
}
|
|
4329
4329
|
});
|
|
4330
|
+
var ROOM_IDENTITY_PREFIX = "ours-cowork-room:";
|
|
4331
|
+
function roomIdentityName(roomName) {
|
|
4332
|
+
return `${ROOM_IDENTITY_PREFIX}${RoomNameSchema.parse(roomName)}`;
|
|
4333
|
+
}
|
|
4334
|
+
function legacyRoomIdentityName(roomId) {
|
|
4335
|
+
return `cowork-room-${LowerCrockfordUlidSchema.parse(roomId)}`;
|
|
4336
|
+
}
|
|
4330
4337
|
var RoleSchema = utf8Bounded("role", MAX_ROLE_BYTES);
|
|
4331
4338
|
var MissionTextSchema = utf8Bounded("mission text", MAX_TEXT_BYTES);
|
|
4332
4339
|
var MessageTextSchema = utf8Bounded("message text", MAX_TEXT_BYTES);
|
|
@@ -4471,8 +4478,9 @@ var RoleBriefingSchema = external_exports.object({
|
|
|
4471
4478
|
updated_at: Rfc3339Schema
|
|
4472
4479
|
}).strict();
|
|
4473
4480
|
function refineRoomLineage(room, context) {
|
|
4474
|
-
const pendingIdentityName =
|
|
4475
|
-
const
|
|
4481
|
+
const pendingIdentityName = legacyRoomIdentityName(room.room_id);
|
|
4482
|
+
const currentPendingIdentityName = room.room_name === void 0 ? void 0 : roomIdentityName(room.room_name);
|
|
4483
|
+
const exactPacketPending = room.state === "provisioning" && room.status === "packet_pending" && (room.identity_name === pendingIdentityName || room.identity_name === currentPendingIdentityName) && room.invites.length === 0 && room.seats.length === 0 && room.activated_at === void 0 && room.closed_at === void 0;
|
|
4476
4484
|
if (room.identity_cid === "" && !exactPacketPending) {
|
|
4477
4485
|
context.addIssue({
|
|
4478
4486
|
code: external_exports.ZodIssueCode.custom,
|
package/dist/daemon.js
CHANGED
|
@@ -4796,9 +4796,16 @@ function isStrictRfc3339(value) {
|
|
|
4796
4796
|
function normalizeRoomName(value) {
|
|
4797
4797
|
return value.trim().normalize("NFC");
|
|
4798
4798
|
}
|
|
4799
|
+
function roomIdentityName(roomName) {
|
|
4800
|
+
return `${ROOM_IDENTITY_PREFIX}${RoomNameSchema.parse(roomName)}`;
|
|
4801
|
+
}
|
|
4802
|
+
function legacyRoomIdentityName(roomId) {
|
|
4803
|
+
return `cowork-room-${LowerCrockfordUlidSchema.parse(roomId)}`;
|
|
4804
|
+
}
|
|
4799
4805
|
function refineRoomLineage(room, context) {
|
|
4800
|
-
const pendingIdentityName =
|
|
4801
|
-
const
|
|
4806
|
+
const pendingIdentityName = legacyRoomIdentityName(room.room_id);
|
|
4807
|
+
const currentPendingIdentityName = room.room_name === void 0 ? void 0 : roomIdentityName(room.room_name);
|
|
4808
|
+
const exactPacketPending = room.state === "provisioning" && room.status === "packet_pending" && (room.identity_name === pendingIdentityName || room.identity_name === currentPendingIdentityName) && room.invites.length === 0 && room.seats.length === 0 && room.activated_at === void 0 && room.closed_at === void 0;
|
|
4802
4809
|
if (room.identity_cid === "" && !exactPacketPending) {
|
|
4803
4810
|
context.addIssue({
|
|
4804
4811
|
code: external_exports.ZodIssueCode.custom,
|
|
@@ -4924,7 +4931,7 @@ function refineMessageCategory(message, context) {
|
|
|
4924
4931
|
}
|
|
4925
4932
|
}
|
|
4926
4933
|
}
|
|
4927
|
-
var MAX_TEXT_BYTES, MAX_FILE_BYTES, MAX_HISTORY_PAGE_BYTES, MAX_MANAGEMENT_RESPONSE_BYTES, MAX_FILE_NAME_BYTES, MAX_MIME_BYTES, MAX_ROLE_BYTES, MAX_ROOM_NAME_CHARACTERS, NonEmptyStringSchema, PositiveSafeIntegerSchema, LowerCrockfordUlidSchema, Rfc3339Schema, RoomNameSchema, RoleSchema, MissionTextSchema, MessageTextSchema, FileNameSchema, FileMimeSchema, RoomStateSchema, SeatStateSchema, InviteModeSchema, DEFAULT_ROLE, InviteStateSchema, RelayStatusSchema, SeatV1Schema, SeatSchema, RoomInviteSchema, MissionV1Schema, MissionSchema, RoleBriefingSchema, RoomCommonShape, RoomV1Schema, CurrentRoomSchema, RoomSchema, CreateRoomInputSchema, UpdateRoomInputSchema, RoleBriefingSetInputSchema, RoleBriefingDeleteInputSchema, PostMessageInputSchema, AuthorSnapshotSchema, RecordCommonShape, AppendCommonShape, MembershipNoticeSchema, AuthorAliasSchema, MessageShape, RelayIntentShape, RelayResultStatusSchema, RelayResultShape, FileShape, MembershipIntentShape, MembershipResultShape, CloseNoticeIntentShape, CloseNoticeResultShape, MessageRecordSchema, FileRecordSchema, RelayIntentRecordSchema, RelayResultRecordSchema, MembershipIntentRecordSchema, MembershipResultRecordSchema, CloseNoticeIntentRecordSchema, CloseNoticeResultRecordSchema, RawCommunicationRecordSchema, CommunicationRecordSchema, AppendRecordSchema;
|
|
4934
|
+
var MAX_TEXT_BYTES, MAX_FILE_BYTES, MAX_HISTORY_PAGE_BYTES, MAX_MANAGEMENT_RESPONSE_BYTES, MAX_FILE_NAME_BYTES, MAX_MIME_BYTES, MAX_ROLE_BYTES, MAX_ROOM_NAME_CHARACTERS, NonEmptyStringSchema, PositiveSafeIntegerSchema, LowerCrockfordUlidSchema, Rfc3339Schema, RoomNameSchema, ROOM_IDENTITY_PREFIX, RoleSchema, MissionTextSchema, MessageTextSchema, FileNameSchema, FileMimeSchema, RoomStateSchema, SeatStateSchema, InviteModeSchema, DEFAULT_ROLE, InviteStateSchema, RelayStatusSchema, SeatV1Schema, SeatSchema, RoomInviteSchema, MissionV1Schema, MissionSchema, RoleBriefingSchema, RoomCommonShape, RoomV1Schema, CurrentRoomSchema, RoomSchema, CreateRoomInputSchema, UpdateRoomInputSchema, RoleBriefingSetInputSchema, RoleBriefingDeleteInputSchema, PostMessageInputSchema, AuthorSnapshotSchema, RecordCommonShape, AppendCommonShape, MembershipNoticeSchema, AuthorAliasSchema, MessageShape, RelayIntentShape, RelayResultStatusSchema, RelayResultShape, FileShape, MembershipIntentShape, MembershipResultShape, CloseNoticeIntentShape, CloseNoticeResultShape, MessageRecordSchema, FileRecordSchema, RelayIntentRecordSchema, RelayResultRecordSchema, MembershipIntentRecordSchema, MembershipResultRecordSchema, CloseNoticeIntentRecordSchema, CloseNoticeResultRecordSchema, RawCommunicationRecordSchema, CommunicationRecordSchema, AppendRecordSchema;
|
|
4928
4935
|
var init_contracts = __esm({
|
|
4929
4936
|
"src/contracts.ts"() {
|
|
4930
4937
|
"use strict";
|
|
@@ -4956,6 +4963,7 @@ var init_contracts = __esm({
|
|
|
4956
4963
|
});
|
|
4957
4964
|
}
|
|
4958
4965
|
});
|
|
4966
|
+
ROOM_IDENTITY_PREFIX = "ours-cowork-room:";
|
|
4959
4967
|
RoleSchema = utf8Bounded("role", MAX_ROLE_BYTES);
|
|
4960
4968
|
MissionTextSchema = utf8Bounded("mission text", MAX_TEXT_BYTES);
|
|
4961
4969
|
MessageTextSchema = utf8Bounded("message text", MAX_TEXT_BYTES);
|
|
@@ -6730,12 +6738,13 @@ var init_service = __esm({
|
|
|
6730
6738
|
async createRoom(input) {
|
|
6731
6739
|
const settings = CreateRoomInputSchema.parse(input);
|
|
6732
6740
|
const roomId = LowerCrockfordUlidSchema.parse(this.nextRoomId());
|
|
6733
|
-
const
|
|
6741
|
+
const roomName = settings.name ?? defaultRoomName(roomId);
|
|
6742
|
+
const identityName = roomIdentityName(roomName);
|
|
6734
6743
|
return this.lock(roomId, async () => {
|
|
6735
6744
|
const provisional = RoomSchema.parse({
|
|
6736
6745
|
version: 2,
|
|
6737
6746
|
room_id: roomId,
|
|
6738
|
-
room_name:
|
|
6747
|
+
room_name: roomName,
|
|
6739
6748
|
identity_name: identityName,
|
|
6740
6749
|
// PacketRegistry needs the durable room directory to exist first. A
|
|
6741
6750
|
// valid, explicitly provisional value lets startup resume this exact
|
|
@@ -7691,7 +7700,7 @@ var init_service = __esm({
|
|
|
7691
7700
|
}
|
|
7692
7701
|
}
|
|
7693
7702
|
isPacketPending(room) {
|
|
7694
|
-
return room.identity_cid === "" && room.state === "provisioning" && room.status === "packet_pending" && room.identity_name ===
|
|
7703
|
+
return room.identity_cid === "" && room.state === "provisioning" && room.status === "packet_pending" && (room.identity_name === legacyRoomIdentityName(room.room_id) || room.identity_name === roomIdentityName(room.room_name));
|
|
7695
7704
|
}
|
|
7696
7705
|
now() {
|
|
7697
7706
|
return external_exports.string().datetime({ offset: true }).parse(this.nowValue());
|
package/dist/mufl_code/BBAE58CF78DEE59692F456EAFFA9A6109835B66846FC3989F6D201B8F4523A55.muflo
CHANGED
|
Binary file
|
package/dist/web/assets/app.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{color-scheme:dark;--bg: #080b0c;--panel: #111617;--panel-raised: #171d1f;--panel-soft: #0d1112;--line: #222a2c;--line-strong: #354043;--mint: #7ce7b0;--mint-dim: #429a70;--warning: #f0c66c;--danger: #ff827c;--text: #e9efed;--text-muted: #8d9a97;--text-faint: #64706e;--radius-sm: 5px;--radius: 8px;--shadow-mint: 0 0 20px rgb(124 231 176 / 10%);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;color:var(--text);background:var(--bg)}*{box-sizing:border-box}html,body,#root{min-width:320px;min-height:100%}body{margin:0;background:var(--bg)}button,input,textarea{font:inherit}button{color:inherit}button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--mint);outline-offset:2px}::selection{color:var(--bg);background:var(--mint)}.mono{font-family:SFMono-Regular,Consolas,Liberation Mono,monospace}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.cowork-app{min-height:100vh;display:grid;grid-template-columns:280px minmax(420px,1fr) 320px;overflow:hidden;background:radial-gradient(circle at 48% 0,rgb(124 231 176 / 3%),transparent 28%),var(--bg)}.room-rail,.room-context{height:100vh;overflow-y:auto;background:var(--panel);z-index:5}.room-rail[hidden],.room-context[hidden]{display:none;visibility:hidden;pointer-events:none}.room-rail{display:flex;flex-direction:column;border-right:1px solid var(--line);padding:18px 14px 14px}.rail-brand{display:flex;align-items:center;gap:10px;min-height:42px;padding:0 5px 16px}.brand-mark{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--mint-dim);border-radius:50%;color:var(--mint);font:700 15px/1 Georgia,serif;box-shadow:var(--shadow-mint)}.rail-brand strong,.rail-brand span{display:block}.rail-brand strong{font-size:14px;letter-spacing:.02em}.rail-brand span{margin-top:2px;color:var(--text-faint);font-size:10px;letter-spacing:.1em;text-transform:uppercase}.rail-close,.context-close,.mobile-rooms,.context-toggle{display:none!important}.primary-button,.secondary-button,.quiet-button,.icon-button{border-radius:var(--radius-sm);cursor:pointer;transition:border-color .14s ease,background .14s ease,color .14s ease,transform .14s ease}.primary-button{min-height:38px;border:1px solid var(--mint);background:var(--mint);color:#07100c;font-weight:700;box-shadow:var(--shadow-mint)}.primary-button:hover:not(:disabled){background:#95f1c2;transform:translateY(-1px)}.primary-button:disabled,.secondary-button:disabled,.quiet-button:disabled{cursor:not-allowed;opacity:.42}.secondary-button{min-height:36px;padding:0 14px;border:1px solid var(--line-strong);background:var(--panel-raised)}.quiet-button{padding:7px 10px;border:1px solid var(--line);background:transparent;color:var(--text-muted)}.quiet-button:hover:not(:disabled),.secondary-button:hover:not(:disabled){border-color:var(--mint-dim);color:var(--mint)}.icon-button{display:grid;place-items:center;width:34px;height:34px;padding:0;border:1px solid transparent;background:transparent;color:var(--text-muted);font-size:20px}.create-button{width:100%;margin-bottom:14px}.connection-state{display:flex;align-items:center;gap:7px;margin:0 5px 17px;color:var(--text-muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.state-dot,.lifecycle-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--text-faint)}.connection-state--online .state-dot,.lifecycle-dot--active{background:var(--mint);box-shadow:0 0 8px #7ce7b073}.connection-state--offline .state-dot,.lifecycle-dot--closed{background:var(--danger)}.lifecycle-dot--provisioning,.lifecycle-dot--closing{background:var(--warning)}.room-group{margin-bottom:12px}.room-group__heading{display:flex;align-items:center;justify-content:space-between;padding:0 5px}.room-group__heading h2{color:var(--text-faint);font-size:10px;text-transform:uppercase;letter-spacing:.12em}.room-group__heading span{color:var(--text-faint);font-size:11px}.room-list{display:grid;gap:4px;padding:0;margin:4px 0 0;list-style:none}.room-card{position:relative;width:100%;display:grid;grid-template-columns:1fr auto;gap:7px 8px;padding:11px 10px 10px 13px;text-align:left;border:1px solid transparent;border-radius:var(--radius);background:transparent;cursor:pointer}.room-card:hover{background:#ffffff05;border-color:var(--line)}.room-card[aria-current=page]{background:var(--panel-raised);border-color:var(--line-strong);box-shadow:inset 2px 0 var(--mint)}.room-card__title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:650}.room-card__state{display:flex;align-items:center;gap:5px;color:var(--text-muted);font-size:10px}.room-card__summary{grid-column:1 / -1;color:var(--text-faint);font-size:11px}.empty-group{margin:8px 5px 14px;color:var(--text-faint);font-size:12px}.local-boundary{margin:auto 5px 0;padding-top:16px;border-top:1px solid var(--line);color:var(--text-faint);font:10px/1.4 SFMono-Regular,Consolas,monospace}.workspace{height:100vh;min-width:0;display:flex;flex-direction:column;overflow:hidden}.workspace--empty{position:relative;display:grid;place-items:center}.empty-workspace{max-width:390px;padding:30px;text-align:center;color:var(--text-muted)}.empty-workspace__glyph{color:var(--mint);font-size:42px}.empty-workspace h1{margin:5px 0 8px;color:var(--text);font-size:26px}.empty-workspace p:last-child{font-size:14px;line-height:1.55}.workspace-header{min-height:88px;display:flex;align-items:center;gap:18px;padding:16px 24px;border-bottom:1px solid var(--line);background:#080b0cd1}.workspace-identity{min-width:0}.eyebrow{margin:0 0 5px;color:var(--text-faint);font-size:10px;font-weight:700;letter-spacing:.13em;text-transform:uppercase}.workspace-header h1{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap;font-size:19px}.identity-name{margin:4px 0 0;color:var(--text-faint);font-size:10px}.lifecycle-badge{margin-left:auto;padding:5px 8px;border:1px solid var(--line-strong);border-radius:999px;color:var(--text-muted);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.lifecycle-badge--active{color:var(--mint);border-color:var(--mint-dim)}.lifecycle-badge--provisioning,.lifecycle-badge--closing{color:var(--warning)}.lifecycle-badge--closed{color:var(--danger)}.mission-strip{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:11px 24px;border-bottom:1px solid var(--line);background:var(--panel-soft)}.mission-strip>span{color:var(--mint);font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.mission-strip p{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.workspace-tabs,.context-tabs{display:flex;gap:2px;padding:0 22px;border-bottom:1px solid var(--line)}.workspace-tabs button,.context-tabs button{position:relative;padding:13px 10px 11px;border:0;background:transparent;color:var(--text-muted);cursor:pointer;font-size:12px}.workspace-tabs button[aria-selected=true],.context-tabs button[aria-selected=true]{color:var(--text)}.workspace-tabs button[aria-selected=true]:after,.context-tabs button[aria-selected=true]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;background:var(--mint);content:""}.workspace-content{flex:1;overflow-y:auto;padding:28px clamp(20px,5vw,70px)}.communication-shell{max-width:760px;margin:0 auto}.briefing-card{padding:18px 20px;border:1px solid var(--line);border-left:2px solid var(--mint-dim);border-radius:var(--radius);background:var(--panel)}.briefing-card>p:last-child{margin:0;color:#cad3d0;font-size:14px;line-height:1.6;white-space:pre-wrap}.panel-placeholder{padding:60px 20px;text-align:center;color:var(--text-muted)}.panel-placeholder>span{color:var(--mint-dim);font:22px/1 monospace;letter-spacing:.15em}.panel-placeholder h2{margin:14px 0 7px;color:var(--text);font-size:15px}.panel-placeholder p{max-width:430px;margin:0 auto;font-size:12px;line-height:1.55}.room-context{border-left:1px solid var(--line)}.context-header{display:flex;justify-content:space-between;min-height:88px;padding:21px 20px 15px;border-bottom:1px solid var(--line)}.context-header h2{margin:0;font-size:15px}.context-tabs{padding:0 12px}.context-body{padding:18px}.state-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;margin-bottom:18px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--line)}.state-grid div{padding:12px;background:var(--panel-soft)}.state-grid dt{color:var(--text-faint);font-size:9px;letter-spacing:.08em;text-transform:uppercase}.state-grid dd{margin:6px 0 0;font-size:13px;font-weight:650}.state-grid--compact{margin-top:15px}.state-text{text-transform:capitalize}.state-text--active{color:var(--mint)}.state-text--provisioning,.state-text--closing{color:var(--warning)}.state-text--closed{color:var(--danger)}.detail-row{padding:11px 2px;border-bottom:1px solid var(--line)}.detail-row span,.detail-row strong{display:block}.detail-row span{margin-bottom:5px;color:var(--text-faint);font-size:10px;text-transform:uppercase;letter-spacing:.08em}.detail-row strong{overflow-wrap:anywhere;font-size:11px;font-weight:500}.setup-callout{display:flex;gap:12px;padding:15px;border:1px solid rgb(240 198 108 / 30%);border-radius:var(--radius);background:#f0c66c0d}.setup-callout>span{color:var(--warning)}.setup-callout h3{margin:0 0 6px;font-size:13px}.setup-callout p,.context-note{margin:0;color:var(--text-muted);font-size:11px;line-height:1.55}.context-note{padding:12px 2px}.disconnect-banner,.error-banner,.notice-banner{position:fixed;right:338px;left:298px;z-index:20;display:flex;align-items:center;gap:12px;min-height:38px;padding:8px 12px;border:1px solid;border-radius:var(--radius);background:var(--panel-raised);font-size:11px}.disconnect-banner{top:10px;border-color:#f0c66c73;color:var(--warning)}.disconnect-banner span{color:var(--text-muted)}.error-banner,.notice-banner{bottom:12px}.error-banner{border-color:#ff827c73}.notice-banner{border-color:var(--line-strong)}.error-banner button,.notice-banner button{margin-left:auto;border:0;background:transparent;cursor:pointer;color:var(--text-muted)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;padding:18px;background:#000000b8;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal{width:min(590px,100%);max-height:calc(100vh - 36px);overflow-y:auto;border:1px solid var(--line-strong);border-radius:10px;background:var(--panel);box-shadow:0 26px 80px #0000008c}.modal>header{display:flex;align-items:center;justify-content:space-between;padding:17px 19px;border-bottom:1px solid var(--line)}.modal h2{margin:0;font-size:16px}.dialog-form{display:grid;gap:16px;padding:19px}.dialog-intro{margin:0 0 2px;color:var(--text-muted);font-size:12px;line-height:1.5}.field{display:grid;gap:7px}.field>label{font-size:11px;font-weight:650}.field textarea,.field input{width:100%;resize:vertical;padding:10px 11px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);line-height:1.45}.field textarea:hover,.field input:hover{border-color:#465255}.field [aria-invalid=true]{border-color:var(--danger)}.field small{color:var(--text-faint);font-size:10px}.field .field-error,.form-error{color:var(--danger)}.form-error{margin:0;padding:10px;border:1px solid rgb(255 130 124 / 30%);border-radius:var(--radius-sm);background:#ff827c0d;font-size:11px;line-height:1.45}.dialog-actions{display:flex;justify-content:flex-end;gap:9px;padding-top:3px}.dialog-actions .primary-button{padding:0 15px}.responsive-scrim{display:none}@media (max-width: 999px){.cowork-app{grid-template-columns:260px minmax(0,1fr)}.room-context{position:fixed;top:0;right:0;width:min(360px,90vw);transform:translate(102%);box-shadow:-18px 0 50px #0006;transition:transform .18s ease;z-index:31}.room-context--open{transform:translate(0)}.context-close,.context-toggle{display:grid!important}.context-toggle{display:block!important}.responsive-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:block;border:0;background:#0000008c}.disconnect-banner,.error-banner,.notice-banner{right:18px;left:278px}}@media (max-width: 759px){.cowork-app{display:block}.room-rail{position:fixed;top:0;left:0;width:min(340px,92vw);transform:translate(-102%);box-shadow:18px 0 50px #00000073;transition:transform .18s ease;z-index:32}.room-rail--open{transform:translate(0)}.rail-close,.mobile-rooms{display:grid!important}.rail-close{margin-left:auto}.mobile-rooms{flex:0 0 auto}.workspace-header{min-height:76px;gap:10px;padding:12px}.workspace-header .identity-name{display:none}.workspace-header h1{font-size:16px}.lifecycle-badge{padding:4px 6px;font-size:8px}.mission-strip{padding:9px 12px}.mission-strip .quiet-button{font-size:10px}.workspace-tabs{padding:0 8px}.workspace-content{padding:18px 12px}.disconnect-banner,.error-banner,.notice-banner{right:10px;left:10px}.disconnect-banner{top:auto;bottom:10px}.error-banner,.notice-banner{bottom:58px}.room-context{z-index:32}}.invite-form{display:grid;gap:11px;padding:13px 0 17px;border-bottom:1px solid var(--line)}.field select{width:100%;padding:10px 11px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg);color:var(--text)}.invite-list,.participant-list{display:grid;gap:9px;margin-top:14px}.invite-card,.participant-card,.receipt{display:grid;gap:7px;padding:12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-soft)}.invite-card header{display:flex;justify-content:space-between;gap:8px}.invite-card p,.participant-card span,.participant-card small,.recovery-callout p,.receipt p{margin:0;color:var(--text-muted);font-size:10px;line-height:1.45}.invite-card code,.participant-card code,.receipt code{overflow-wrap:anywhere;font-size:10px}.recovery-callout{display:grid;gap:10px;margin-top:14px;padding:12px;border:1px solid rgb(240 198 108 / 30%);border-radius:var(--radius);background:#f0c66c0d}.receipt pre{overflow-wrap:anywhere;white-space:pre-wrap;-webkit-user-select:all;user-select:all;padding:10px;border:1px solid var(--line-strong);background:var(--bg);color:var(--mint);font-size:11px}.danger-button{min-height:36px;padding:0 14px;border:1px solid var(--danger);border-radius:var(--radius-sm);background:#ff827c14;color:var(--danger);cursor:pointer}.danger-button:disabled{cursor:not-allowed;opacity:.42}.lifecycle-separator{margin:14px 0;padding:8px 12px;border:1px solid var(--line);border-radius:999px;color:var(--text-muted);text-align:center;font-size:10px;letter-spacing:.03em}.lifecycle-separator--provisioning,.lifecycle-separator--closing{border-color:#f0c66c40;color:var(--warning)}.lifecycle-separator--closed{border-color:#ff827c38;color:var(--danger)}.chat-timeline{display:grid;gap:12px;margin-top:16px}.chat-list,.record-list{display:grid;gap:10px;margin:0;padding:0;list-style:none}.chat-row{width:min(82%,610px);padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.chat-row--room{justify-self:end;border-color:var(--mint-dim);background:#7ce7b00d}.chat-row--briefing{width:100%;border-left:2px solid var(--mint);background:var(--panel-soft)}.chat-row__meta{display:flex;align-items:baseline;gap:8px;color:var(--text-faint);font-size:9px}.chat-row__meta strong{color:var(--text);font-size:11px}.chat-row--room .chat-row__meta strong,.chat-row--briefing .chat-row__meta strong{color:var(--mint)}.chat-row__meta code{margin-left:auto}.chat-row__text{margin:8px 0 0;color:#d2d9d7;font-size:13px;line-height:1.55;overflow-wrap:anywhere;white-space:pre-wrap}.timeline-empty{margin:20px 0;color:var(--text-faint);text-align:center;font-size:11px}.show-earlier{justify-self:center}.room-composer{position:sticky;bottom:-28px;display:grid;gap:8px;margin:18px -4px -28px;padding:14px 4px 28px;border-top:1px solid var(--line);background:linear-gradient(to bottom,rgb(8 11 12 / 92%),var(--bg) 35%)}.room-composer textarea{width:100%;resize:vertical;padding:11px 12px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel);color:var(--text);line-height:1.45}.room-composer textarea:focus{border-color:var(--mint-dim)}.room-composer textarea:disabled{cursor:not-allowed;opacity:.55}.composer-footer{display:flex;align-items:center;justify-content:space-between;gap:12px}.composer-footer small{color:var(--text-faint);font-size:10px}.composer-footer .primary-button{min-width:112px;padding:0 13px}.record-list{max-width:900px;margin:0 auto}.record-row{overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.record-row header{display:flex;align-items:center;gap:9px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:10px}.record-row header code{color:var(--mint)}.record-row header strong{text-transform:capitalize}.record-row header time{margin-left:auto;color:var(--text-faint)}.record-status{padding:2px 5px;border:1px solid var(--line-strong);border-radius:999px;color:var(--text-muted)}.record-status--send_failed{border-color:#ff827c4d;color:var(--danger)}.record-row>p{margin:0;padding:11px 12px 0;font-size:12px;white-space:pre-wrap}.record-row pre{max-height:240px;overflow:auto;margin:0;padding:11px 12px;color:var(--text-muted);font-size:10px;line-height:1.5;white-space:pre-wrap}.management-actions{display:grid;gap:8px;margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}.destructive-target{margin:0;color:var(--text-muted);font-size:11px;line-height:1.55}.destructive-target code{overflow-wrap:anywhere;color:var(--danger)}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
|
|
1
|
+
:root{color-scheme:dark;--bg: #080b0c;--panel: #111617;--panel-raised: #171d1f;--panel-soft: #0d1112;--line: #222a2c;--line-strong: #354043;--mint: #7ce7b0;--mint-dim: #429a70;--warning: #f0c66c;--danger: #ff827c;--text: #e9efed;--text-muted: #8d9a97;--text-faint: #64706e;--radius-sm: 5px;--radius: 8px;--shadow-mint: 0 0 20px rgb(124 231 176 / 10%);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;color:var(--text);background:var(--bg)}*{box-sizing:border-box}html,body,#root{min-width:320px;min-height:100%}body{margin:0;background:var(--bg)}button,input,textarea{font:inherit}button{color:inherit}button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--mint);outline-offset:2px}::selection{color:var(--bg);background:var(--mint)}.mono{font-family:SFMono-Regular,Consolas,Liberation Mono,monospace}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.cowork-app{min-height:100vh;display:grid;grid-template-columns:280px minmax(420px,1fr) 320px;overflow:hidden;background:radial-gradient(circle at 48% 0,rgb(124 231 176 / 3%),transparent 28%),var(--bg)}.room-rail,.room-context{height:100vh;overflow-y:auto;background:var(--panel);z-index:5}.room-rail[hidden],.room-context[hidden]{display:none;visibility:hidden;pointer-events:none}.room-rail{display:flex;flex-direction:column;border-right:1px solid var(--line);padding:18px 14px 14px}.rail-brand{display:flex;align-items:center;gap:10px;min-height:42px;padding:0 5px 16px}.brand-mark{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--mint-dim);border-radius:50%;color:var(--mint);font:700 15px/1 Georgia,serif;box-shadow:var(--shadow-mint)}.rail-brand strong,.rail-brand span{display:block}.rail-brand strong{font-size:14px;letter-spacing:.02em}.rail-brand span{margin-top:2px;color:var(--text-faint);font-size:10px;letter-spacing:.1em;text-transform:uppercase}.rail-close,.context-close,.mobile-rooms,.context-toggle{display:none!important}.primary-button,.secondary-button,.quiet-button,.icon-button{border-radius:var(--radius-sm);cursor:pointer;transition:border-color .14s ease,background .14s ease,color .14s ease,transform .14s ease}.primary-button{min-height:38px;border:1px solid var(--mint);background:var(--mint);color:#07100c;font-weight:700;box-shadow:var(--shadow-mint)}.primary-button:hover:not(:disabled){background:#95f1c2;transform:translateY(-1px)}.primary-button:disabled,.secondary-button:disabled,.quiet-button:disabled{cursor:not-allowed;opacity:.42}.secondary-button{min-height:36px;padding:0 14px;border:1px solid var(--line-strong);background:var(--panel-raised)}.quiet-button{padding:7px 10px;border:1px solid var(--line);background:transparent;color:var(--text-muted)}.quiet-button:hover:not(:disabled),.secondary-button:hover:not(:disabled){border-color:var(--mint-dim);color:var(--mint)}.icon-button{display:grid;place-items:center;width:34px;height:34px;padding:0;border:1px solid transparent;background:transparent;color:var(--text-muted);font-size:20px}.create-button{width:100%;margin-bottom:14px}.connection-state{display:flex;align-items:center;gap:7px;margin:0 5px 17px;color:var(--text-muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.state-dot,.lifecycle-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--text-faint)}.connection-state--online .state-dot,.lifecycle-dot--active{background:var(--mint);box-shadow:0 0 8px #7ce7b073}.connection-state--offline .state-dot,.lifecycle-dot--closed{background:var(--danger)}.lifecycle-dot--provisioning,.lifecycle-dot--closing{background:var(--warning)}.room-group{margin-bottom:12px}.room-group__heading{display:flex;align-items:center;justify-content:space-between;padding:0 5px}.room-group__heading h2{color:var(--text-faint);font-size:10px;text-transform:uppercase;letter-spacing:.12em}.room-group__heading span{color:var(--text-faint);font-size:11px}.room-list{display:grid;gap:4px;padding:0;margin:4px 0 0;list-style:none}.room-card{position:relative;width:100%;display:grid;grid-template-columns:1fr auto;gap:7px 8px;padding:11px 10px 10px 13px;text-align:left;border:1px solid transparent;border-radius:var(--radius);background:transparent;cursor:pointer}.room-card:hover{background:#ffffff05;border-color:var(--line)}.room-card[aria-current=page]{background:var(--panel-raised);border-color:var(--line-strong);box-shadow:inset 2px 0 var(--mint)}.room-card__title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:650}.room-card__state{display:flex;align-items:center;gap:5px;color:var(--text-muted);font-size:10px}.room-card__summary{grid-column:1 / -1;color:var(--text-faint);font-size:11px}.empty-group{margin:8px 5px 14px;color:var(--text-faint);font-size:12px}.local-boundary{margin:auto 5px 0;padding-top:16px;border-top:1px solid var(--line);color:var(--text-faint);font:10px/1.4 SFMono-Regular,Consolas,monospace}.workspace{height:100vh;min-width:0;display:flex;flex-direction:column;overflow:hidden}.workspace--empty{position:relative;display:grid;place-items:center}.empty-workspace{max-width:390px;padding:30px;text-align:center;color:var(--text-muted)}.empty-workspace__glyph{color:var(--mint);font-size:42px}.empty-workspace h1{margin:5px 0 8px;color:var(--text);font-size:26px}.empty-workspace p:last-child{font-size:14px;line-height:1.55}.workspace-header{min-height:88px;display:flex;align-items:center;gap:18px;padding:16px 24px;border-bottom:1px solid var(--line);background:#080b0cd1}.workspace-identity{min-width:0}.eyebrow{margin:0 0 5px;color:var(--text-faint);font-size:10px;font-weight:700;letter-spacing:.13em;text-transform:uppercase}.workspace-header h1{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap;font-size:19px}.identity-name{margin:4px 0 0;color:var(--text-faint);font-size:10px}.lifecycle-badge{margin-left:auto;padding:5px 8px;border:1px solid var(--line-strong);border-radius:999px;color:var(--text-muted);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.lifecycle-badge--active{color:var(--mint);border-color:var(--mint-dim)}.lifecycle-badge--provisioning,.lifecycle-badge--closing{color:var(--warning)}.lifecycle-badge--closed{color:var(--danger)}.mission-strip{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:11px 24px;border-bottom:1px solid var(--line);background:var(--panel-soft)}.mission-strip>span{color:var(--mint);font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.mission-strip p{overflow:hidden;margin:0;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.workspace-tabs,.context-tabs{display:flex;gap:2px;padding:0 22px;border-bottom:1px solid var(--line)}.workspace-tabs button,.context-tabs button{position:relative;padding:13px 10px 11px;border:0;background:transparent;color:var(--text-muted);cursor:pointer;font-size:12px}.workspace-tabs button[aria-selected=true],.context-tabs button[aria-selected=true]{color:var(--text)}.workspace-tabs button[aria-selected=true]:after,.context-tabs button[aria-selected=true]:after{position:absolute;right:8px;bottom:-1px;left:8px;height:2px;background:var(--mint);content:""}.workspace-content{flex:1;overflow-y:auto;padding:28px clamp(20px,5vw,70px)}.communication-shell{max-width:760px;margin:0 auto}.briefing-card{padding:18px 20px;border:1px solid var(--line);border-left:2px solid var(--mint-dim);border-radius:var(--radius);background:var(--panel)}.briefing-card>p:last-child{margin:0;color:#cad3d0;font-size:14px;line-height:1.6;white-space:pre-wrap}.panel-placeholder{padding:60px 20px;text-align:center;color:var(--text-muted)}.panel-placeholder>span{color:var(--mint-dim);font:22px/1 monospace;letter-spacing:.15em}.panel-placeholder h2{margin:14px 0 7px;color:var(--text);font-size:15px}.panel-placeholder p{max-width:430px;margin:0 auto;font-size:12px;line-height:1.55}.room-context{border-left:1px solid var(--line)}.context-header{display:flex;justify-content:space-between;min-height:88px;padding:21px 20px 15px;border-bottom:1px solid var(--line)}.context-header h2{margin:0;font-size:15px}.context-tabs{padding:0 12px}.context-body{padding:18px}.state-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;margin-bottom:18px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--line)}.state-grid div{padding:12px;background:var(--panel-soft)}.state-grid dt{color:var(--text-faint);font-size:9px;letter-spacing:.08em;text-transform:uppercase}.state-grid dd{margin:6px 0 0;font-size:13px;font-weight:650}.state-grid--compact{margin-top:15px}.state-text{text-transform:capitalize}.state-text--active{color:var(--mint)}.state-text--provisioning,.state-text--closing{color:var(--warning)}.state-text--closed{color:var(--danger)}.detail-row{padding:11px 2px;border-bottom:1px solid var(--line)}.detail-row span,.detail-row strong{display:block}.detail-row span{margin-bottom:5px;color:var(--text-faint);font-size:10px;text-transform:uppercase;letter-spacing:.08em}.detail-row strong{overflow-wrap:anywhere;font-size:11px;font-weight:500}.setup-callout{display:flex;gap:12px;padding:15px;border:1px solid rgb(240 198 108 / 30%);border-radius:var(--radius);background:#f0c66c0d}.setup-callout>span{color:var(--warning)}.setup-callout h3{margin:0 0 6px;font-size:13px}.setup-callout p,.context-note{margin:0;color:var(--text-muted);font-size:11px;line-height:1.55}.context-note{padding:12px 2px}.disconnect-banner,.error-banner,.notice-banner{position:fixed;right:338px;left:298px;z-index:20;display:flex;align-items:center;gap:12px;min-height:38px;padding:8px 12px;border:1px solid;border-radius:var(--radius);background:var(--panel-raised);font-size:11px}.disconnect-banner{top:10px;border-color:#f0c66c73;color:var(--warning)}.disconnect-banner span{color:var(--text-muted)}.error-banner,.notice-banner{bottom:12px}.error-banner{border-color:#ff827c73}.notice-banner{border-color:var(--line-strong)}.error-banner button,.notice-banner button{margin-left:auto;border:0;background:transparent;cursor:pointer;color:var(--text-muted)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;padding:18px;background:#000000b8;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal{width:min(590px,100%);max-height:calc(100vh - 36px);overflow-y:auto;border:1px solid var(--line-strong);border-radius:10px;background:var(--panel);box-shadow:0 26px 80px #0000008c}.modal>header{display:flex;align-items:center;justify-content:space-between;padding:17px 19px;border-bottom:1px solid var(--line)}.modal h2{margin:0;font-size:16px}.dialog-form{display:grid;gap:16px;padding:19px}.dialog-intro{margin:0 0 2px;color:var(--text-muted);font-size:12px;line-height:1.5}.field{display:grid;gap:7px}.field>label{font-size:11px;font-weight:650}.field textarea,.field input{width:100%;resize:vertical;padding:10px 11px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);line-height:1.45}.field textarea:hover,.field input:hover{border-color:#465255}.field [aria-invalid=true]{border-color:var(--danger)}.field small{color:var(--text-faint);font-size:10px}.field .field-error,.form-error{color:var(--danger)}.form-error{margin:0;padding:10px;border:1px solid rgb(255 130 124 / 30%);border-radius:var(--radius-sm);background:#ff827c0d;font-size:11px;line-height:1.45}.dialog-actions{display:flex;justify-content:flex-end;gap:9px;padding-top:3px}.dialog-actions .primary-button{padding:0 15px}.responsive-scrim{display:none}@media (max-width: 999px){.cowork-app{grid-template-columns:260px minmax(0,1fr)}.room-context{position:fixed;top:0;right:0;width:min(360px,90vw);transform:translate(102%);box-shadow:-18px 0 50px #0006;transition:transform .18s ease;z-index:31}.room-context--open{transform:translate(0)}.context-close,.context-toggle{display:grid!important}.context-toggle{display:block!important}.responsive-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:block;border:0;background:#0000008c}.disconnect-banner,.error-banner,.notice-banner{right:18px;left:278px}}@media (max-width: 759px){.cowork-app{display:block}.room-rail{position:fixed;top:0;left:0;width:min(340px,92vw);transform:translate(-102%);box-shadow:18px 0 50px #00000073;transition:transform .18s ease;z-index:32}.room-rail--open{transform:translate(0)}.rail-close,.mobile-rooms{display:grid!important}.rail-close{margin-left:auto}.mobile-rooms{flex:0 0 auto}.workspace-header{min-height:76px;gap:10px;padding:12px}.workspace-header .identity-name{display:none}.workspace-header h1{font-size:16px}.lifecycle-badge{padding:4px 6px;font-size:8px}.mission-strip{padding:9px 12px}.mission-strip .quiet-button{font-size:10px}.workspace-tabs{padding:0 8px}.workspace-content{padding:18px 12px}.disconnect-banner,.error-banner,.notice-banner{right:10px;left:10px}.disconnect-banner{top:auto;bottom:10px}.error-banner,.notice-banner{bottom:58px}.room-context{z-index:32}}.invite-form{display:grid;gap:11px;padding:13px 0 17px;border-bottom:1px solid var(--line)}.field select{width:100%;padding:10px 11px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--bg);color:var(--text)}.invite-list,.participant-list{display:grid;gap:9px;margin-top:14px}.invite-card,.participant-card,.receipt{display:grid;gap:7px;padding:12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-soft)}.invite-card header{display:flex;justify-content:space-between;gap:8px}.invite-card p,.participant-card span,.participant-card small,.recovery-callout p,.receipt p{margin:0;color:var(--text-muted);font-size:10px;line-height:1.45}.invite-card code,.participant-card code,.receipt code{overflow-wrap:anywhere;font-size:10px}.recovery-callout{display:grid;gap:10px;margin-top:14px;padding:12px;border:1px solid rgb(240 198 108 / 30%);border-radius:var(--radius);background:#f0c66c0d}.receipt pre{overflow-wrap:anywhere;white-space:pre-wrap;-webkit-user-select:all;user-select:all;padding:10px;border:1px solid var(--line-strong);background:var(--bg);color:var(--mint);font-size:11px}.danger-button{min-height:36px;padding:0 14px;border:1px solid var(--danger);border-radius:var(--radius-sm);background:#ff827c14;color:var(--danger);cursor:pointer}.danger-button:disabled{cursor:not-allowed;opacity:.42}.lifecycle-separator{margin:14px 0;padding:8px 12px;border:1px solid var(--line);border-radius:999px;color:var(--text-muted);text-align:center;font-size:10px;letter-spacing:.03em}.lifecycle-separator--provisioning,.lifecycle-separator--closing{border-color:#f0c66c40;color:var(--warning)}.lifecycle-separator--closed{border-color:#ff827c38;color:var(--danger)}.chat-timeline{display:grid;gap:12px;margin-top:16px}.chat-list,.record-list{display:grid;gap:10px;margin:0;padding:0;list-style:none}.chat-row{width:min(82%,610px);padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.chat-row--room{justify-self:end;border-color:var(--mint-dim);background:#7ce7b00d}.chat-row--briefing{width:100%;border-left:2px solid var(--mint);background:var(--panel-soft)}.chat-row--file{width:min(92%,680px)}.chat-row__meta{display:flex;align-items:baseline;gap:8px;color:var(--text-faint);font-size:9px}.chat-row__meta strong{color:var(--text);font-size:11px}.chat-row--room .chat-row__meta strong,.chat-row--briefing .chat-row__meta strong{color:var(--mint)}.chat-row__meta code{margin-left:auto}.chat-row__text{margin:8px 0 0;color:#d2d9d7;font-size:13px;line-height:1.55;overflow-wrap:anywhere;white-space:pre-wrap}.file-attachment{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;margin-top:10px;padding:12px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel-soft)}.file-attachment__glyph{display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--mint-dim);border-radius:50%;color:var(--mint)}.file-attachment__body{min-width:0;display:grid;gap:5px}.file-attachment__body>span{color:var(--text-muted);font-size:10px}.file-name{overflow-wrap:anywhere;white-space:pre-wrap}.file-download{min-width:0;display:grid;justify-items:end;gap:6px}.file-download__button{min-width:92px}.file-download__status{max-width:260px;color:var(--danger);font-size:10px;line-height:1.4;text-align:right}.files-view{max-width:900px;display:grid;gap:14px;margin:0 auto}.file-group-list,.file-version-list{display:grid;gap:10px;margin:0;padding:0;list-style:none}.file-group{overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.file-group__toggle{width:100%;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:6px 12px;min-height:58px;padding:12px 14px;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.file-group__toggle:hover{background:#ffffff05}.file-group__chevron{grid-row:1 / 3;color:var(--mint);font-size:20px;transition:transform .14s ease}.file-group__toggle[aria-expanded=true] .file-group__chevron{transform:rotate(90deg)}.file-group__title{min-width:0;font-size:13px;font-weight:650}.file-group__count{color:var(--mint);font-size:10px}.file-group__latest{grid-column:2 / 4;color:var(--text-muted);font-size:10px}.file-version-panel{display:grid;gap:12px;padding:0 14px 14px 42px;border-top:1px solid var(--line)}.file-version-list{padding-top:12px}.file-version{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;padding:11px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-soft)}.file-version__details{min-width:0;display:grid;grid-template-columns:auto 1fr;gap:5px 12px;color:var(--text-muted);font-size:10px}.file-version__details strong{grid-row:1 / 4;color:var(--text);font-size:11px}.file-version__mime{overflow-wrap:anywhere;color:var(--text-faint)}.timeline-empty{margin:20px 0;color:var(--text-faint);text-align:center;font-size:11px}.show-earlier{justify-self:center}.room-composer{position:sticky;bottom:-28px;display:grid;gap:8px;margin:18px -4px -28px;padding:14px 4px 28px;border-top:1px solid var(--line);background:linear-gradient(to bottom,rgb(8 11 12 / 92%),var(--bg) 35%)}.room-composer textarea{width:100%;resize:vertical;padding:11px 12px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel);color:var(--text);line-height:1.45}.room-composer textarea:focus{border-color:var(--mint-dim)}.room-composer textarea:disabled{cursor:not-allowed;opacity:.55}.composer-footer{display:flex;align-items:center;justify-content:space-between;gap:12px}.composer-footer small{color:var(--text-faint);font-size:10px}.composer-footer .primary-button{min-width:112px;padding:0 13px}.record-list{max-width:900px;margin:0 auto}.record-row{overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.record-row header{display:flex;align-items:center;gap:9px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:10px}.record-row header code{color:var(--mint)}.record-row header strong{text-transform:capitalize}.record-row header time{margin-left:auto;color:var(--text-faint)}.record-status{padding:2px 5px;border:1px solid var(--line-strong);border-radius:999px;color:var(--text-muted)}.record-status--send_failed{border-color:#ff827c4d;color:var(--danger)}.record-row>p{margin:0;padding:11px 12px 0;font-size:12px;white-space:pre-wrap}.record-row pre{max-height:240px;overflow:auto;margin:0;padding:11px 12px;color:var(--text-muted);font-size:10px;line-height:1.5;white-space:pre-wrap}.management-actions{display:grid;gap:8px;margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}.destructive-target{margin:0;color:var(--text-muted);font-size:11px;line-height:1.55}.destructive-target code{overflow-wrap:anywhere;color:var(--danger)}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}@media (max-width: 759px){.workspace-tabs button{flex:1;min-width:0;min-height:44px;padding-inline:4px}.file-attachment{grid-template-columns:auto minmax(0,1fr)}.file-attachment .file-download{grid-column:1 / -1;width:100%;justify-items:stretch}.file-download__button{min-height:44px}.file-download__status{max-width:none;text-align:left}.file-version-panel{padding-left:12px}.file-version{grid-template-columns:1fr}.file-version .file-download{justify-items:stretch}.file-version__details{grid-template-columns:1fr}.file-version__details strong{grid-row:auto}.file-group__latest{overflow-wrap:anywhere}}
|