@cjhyy/code-shell-web 0.9.35 → 0.9.37

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.
@@ -1,3 +1,4 @@
1
+ import { RoomHistoryAccumulator } from "../lib/roomHistory.js";
1
2
  import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from "react";
2
3
  import { reduceStream, initialChatState, appendUserMessage, } from "../lib/streamReducer.js";
3
4
  import { t } from "../i18n/translate.js";
@@ -195,6 +196,8 @@ export function useRemoteApp(options = {}) {
195
196
  /** Highest room message seq seen per active room. Used as room.history cursor. */
196
197
  const lastRoomSeqRef = useRef(new Map());
197
198
  /** Recent room seqs already folded into the reducer, for idempotent history/live merge. */
199
+ const roomCatchupRef = useRef(undefined);
200
+ const roomRequestCounterRef = useRef(0);
198
201
  const appliedRoomSeqsRef = useRef(new Map());
199
202
  /** The cc (external claude CLI) session id whose on-disk transcript is the
200
203
  * backlog for the current room view. Set on ccRoom.opened, cleared whenever we
@@ -239,6 +242,24 @@ export function useRemoteApp(options = {}) {
239
242
  markRoomSeqApplied(appliedRoomSeqsRef.current, roomId, seq);
240
243
  }
241
244
  }, []);
245
+ const requestRoomCatchup = useCallback((roomId, sinceSeq) => {
246
+ const requestId = `room-history:${++roomRequestCounterRef.current}`;
247
+ roomCatchupRef.current = {
248
+ roomId,
249
+ requestId,
250
+ pager: new RoomHistoryAccumulator(sinceSeq),
251
+ live: new Map(),
252
+ };
253
+ setLoadingKey("roomHistory", true);
254
+ sendRef.current?.({
255
+ type: "room.history",
256
+ roomId,
257
+ sinceSeq,
258
+ page: true,
259
+ requestId,
260
+ limit: 200,
261
+ });
262
+ }, [setLoadingKey]);
242
263
  const wrapSessionEvents = useCallback((sessionId, events) => events.map((event) => ({
243
264
  method: "agent/streamEvent",
244
265
  params: { sessionId, event },
@@ -618,6 +639,29 @@ export function useRemoteApp(options = {}) {
618
639
  // them after the backlog has landed.
619
640
  if (ccHistorySessionRef.current && !ccBacklogLoadedRef.current)
620
641
  break;
642
+ const seq = roomMessageSeq(event.msg);
643
+ if (seq === undefined) {
644
+ setNotice("Room message has an invalid sequence");
645
+ break;
646
+ }
647
+ const catchup = roomCatchupRef.current;
648
+ if (catchup?.roomId === event.roomId) {
649
+ if (catchup.failed)
650
+ break;
651
+ if (catchup.live.size >= 10_000 && !catchup.live.has(seq)) {
652
+ catchup.failed = true;
653
+ setLoadingKey("roomHistory", false);
654
+ setNotice("Room catchup live buffer exceeds its limit; reconnect to recover");
655
+ break;
656
+ }
657
+ catchup.live.set(seq, event.msg);
658
+ break;
659
+ }
660
+ if (seq > (lastRoomSeqRef.current.get(event.roomId) ?? 0) + 1) {
661
+ requestRoomCatchup(event.roomId, lastRoomSeqRef.current.get(event.roomId) ?? 0);
662
+ roomCatchupRef.current.live.set(seq, event.msg);
663
+ break;
664
+ }
621
665
  const freshMessages = filterNewRoomMessages(event.roomId, [event.msg], appliedRoomSeqsRef.current);
622
666
  if (freshMessages.length === 0)
623
667
  break;
@@ -625,15 +669,61 @@ export function useRemoteApp(options = {}) {
625
669
  dispatchChat({ kind: "raw", raw: roomMsgToEvent(freshMessages[0]) });
626
670
  }
627
671
  break;
628
- case "room.history.ok":
629
- if (event.roomId === activeRoomIdRef.current) {
630
- const messages = Array.isArray(event.messages) ? event.messages : [];
631
- const freshMessages = filterNewRoomMessages(event.roomId, messages, appliedRoomSeqsRef.current);
632
- rememberRoomMessages(event.roomId, freshMessages, event.latestSeq);
633
- dispatchChat({ kind: "append", events: roomHistoryToEvents(freshMessages) });
672
+ case "room.history.ok": {
673
+ if (event.roomId !== activeRoomIdRef.current)
674
+ break;
675
+ const catchup = roomCatchupRef.current;
676
+ if (!catchup ||
677
+ catchup.failed ||
678
+ catchup.roomId !== event.roomId ||
679
+ event.requestId !== catchup.requestId)
680
+ break;
681
+ try {
682
+ if (!event.page)
683
+ throw new Error("This Host does not support complete room history");
684
+ const cursor = catchup.pager.accept({ ...event.page, messages: event.messages });
685
+ if (cursor) {
686
+ sendRef.current?.({
687
+ type: "room.history",
688
+ roomId: event.roomId,
689
+ page: true,
690
+ cursor,
691
+ limit: 200,
692
+ requestId: catchup.requestId,
693
+ });
694
+ break;
695
+ }
696
+ const fresh = filterNewRoomMessages(event.roomId, catchup.pager.messages, appliedRoomSeqsRef.current);
697
+ rememberRoomMessages(event.roomId, fresh, event.page.throughSeq);
698
+ dispatchChat({ kind: "append", events: roomHistoryToEvents(fresh) });
699
+ roomCatchupRef.current = undefined;
700
+ const live = [...catchup.live.entries()].sort(([a], [b]) => a - b);
701
+ for (const [seq, msg] of live) {
702
+ const applied = lastRoomSeqRef.current.get(event.roomId) ?? 0;
703
+ if (seq <= applied)
704
+ continue;
705
+ if (seq !== applied + 1) {
706
+ requestRoomCatchup(event.roomId, applied);
707
+ for (const [pendingSeq, pendingMsg] of live)
708
+ if (pendingSeq > applied)
709
+ roomCatchupRef.current.live.set(pendingSeq, pendingMsg);
710
+ break;
711
+ }
712
+ rememberRoomMessages(event.roomId, [msg]);
713
+ dispatchChat({ kind: "raw", raw: roomMsgToEvent(msg) });
714
+ }
715
+ if (!roomCatchupRef.current)
716
+ setLoadingKey("roomHistory", false);
717
+ }
718
+ catch (error) {
719
+ // Keep the failed boundary and buffered live messages. Do not fold
720
+ // a partial range or advance the durable catchup position.
721
+ catchup.failed = true;
722
+ setNotice(String(error));
634
723
  setLoadingKey("roomHistory", false);
635
724
  }
636
725
  break;
726
+ }
637
727
  case "room.opened":
638
728
  // The room is internal CC-session transport; surface it as a 会话 to the
639
729
  // user (no room concept in the UI).
@@ -647,7 +737,23 @@ export function useRemoteApp(options = {}) {
647
737
  // Keep the internal room snapshot in sync (resolves activeRoom metadata).
648
738
  setRooms((prev) => prev.map((r) => (r.id === event.roomId ? { ...r, open: false } : r)));
649
739
  break;
740
+ case "room.recovery":
741
+ if (event.roomId === activeRoomIdRef.current) {
742
+ ccBacklogLoadedRef.current = false;
743
+ if (roomCatchupRef.current?.roomId === event.roomId)
744
+ roomCatchupRef.current.failed = true;
745
+ setLoadingKey("roomHistory", false);
746
+ setNotice(event.message);
747
+ }
748
+ break;
650
749
  case "room.error":
750
+ if (event.requestId && event.requestId !== roomCatchupRef.current?.requestId)
751
+ break;
752
+ if (event.roomId === activeRoomIdRef.current &&
753
+ roomCatchupRef.current?.roomId === event.roomId) {
754
+ roomCatchupRef.current.failed = true;
755
+ setLoadingKey("roomHistory", false);
756
+ }
651
757
  if (event.clientMessageId) {
652
758
  settleMessageAck(event.clientMessageId, new Error(event.message));
653
759
  }
@@ -761,7 +867,7 @@ export function useRemoteApp(options = {}) {
761
867
  }
762
868
  else {
763
869
  ccBacklogLoadedRef.current = true;
764
- sendRef.current?.({ type: "room.history", roomId: event.roomId, sinceSeq: 0 });
870
+ requestRoomCatchup(event.roomId, 0);
765
871
  }
766
872
  break;
767
873
  case "ccRoom.transcriptSubscribed":
@@ -771,17 +877,18 @@ export function useRemoteApp(options = {}) {
771
877
  // dedupe as reconnect recovery.
772
878
  if (event.roomId === activeRoomIdRef.current &&
773
879
  event.sessionId === ccHistorySessionRef.current) {
880
+ if (!event.active) {
881
+ setNotice("External transcript is not being followed");
882
+ setLoadingKey("roomHistory", false);
883
+ break;
884
+ }
774
885
  dispatchChat({ kind: "replay", events: ccHistoryToEvents(event.messages) });
775
886
  setLoadingKey("roomHistory", false);
776
887
  ccBacklogLoadedRef.current = true;
777
888
  lastRoomSeqRef.current.set(event.roomId, event.roomCursor);
778
889
  appliedRoomSeqsRef.current.delete(event.roomId);
779
890
  setLoadingKey("roomHistory", true);
780
- sendRef.current?.({
781
- type: "room.history",
782
- roomId: event.roomId,
783
- sinceSeq: event.roomCursor,
784
- });
891
+ requestRoomCatchup(event.roomId, event.roomCursor);
785
892
  }
786
893
  break;
787
894
  case "ccRoom.readHistory.ok":
@@ -795,11 +902,7 @@ export function useRemoteApp(options = {}) {
795
902
  const roomId = activeRoomIdRef.current;
796
903
  if (roomId) {
797
904
  setLoadingKey("roomHistory", true);
798
- sendRef.current?.({
799
- type: "room.history",
800
- roomId,
801
- sinceSeq: lastRoomSeqRef.current.get(roomId) ?? 0,
802
- });
905
+ requestRoomCatchup(roomId, lastRoomSeqRef.current.get(roomId) ?? 0);
803
906
  }
804
907
  }
805
908
  break;
@@ -845,6 +948,7 @@ export function useRemoteApp(options = {}) {
845
948
  clearApproval,
846
949
  clearSessionUnread,
847
950
  rememberRoomMessages,
951
+ requestRoomCatchup,
848
952
  sessionCwdById,
849
953
  setLoadingKey,
850
954
  settleMessageAck,
@@ -938,11 +1042,7 @@ export function useRemoteApp(options = {}) {
938
1042
  if (ccHistorySessionRef.current && !ccBacklogLoadedRef.current)
939
1043
  return;
940
1044
  setLoadingKey("roomHistory", true);
941
- sendRef.current?.({
942
- type: "room.history",
943
- roomId,
944
- sinceSeq: lastRoomSeqRef.current.get(roomId) ?? 0,
945
- });
1045
+ requestRoomCatchup(roomId, lastRoomSeqRef.current.get(roomId) ?? 0);
946
1046
  return;
947
1047
  }
948
1048
  const sessionId = boundSessionRef.current;
@@ -966,7 +1066,7 @@ export function useRemoteApp(options = {}) {
966
1066
  sinceSeq: cursor.awaitingSnapshot ? 0 : cursor.appliedSeq,
967
1067
  ...(cursor.epoch ? { epoch: cursor.epoch } : {}),
968
1068
  });
969
- }, [setLoadingKey, sessionCursor]);
1069
+ }, [setLoadingKey, sessionCursor, requestRoomCatchup]);
970
1070
  const socket = useRemoteSocket({
971
1071
  onServerEvent,
972
1072
  onRawLine,
@@ -35,3 +35,4 @@ export declare function extractAskUserOptions(args: Record<string, unknown> | un
35
35
  options: string[];
36
36
  optionsOnly: boolean;
37
37
  } | undefined;
38
+ export { collectRoomHistory, RoomHistoryAccumulator, type FrozenRoomPage } from "./roomHistory.js";
@@ -143,3 +143,5 @@ export function extractAskUserOptions(args) {
143
143
  }
144
144
  return undefined;
145
145
  }
146
+ // Room history validation and mapping share one browser-safe entry contract.
147
+ export { collectRoomHistory, RoomHistoryAccumulator } from "./roomHistory.js";
@@ -0,0 +1,22 @@
1
+ export interface FrozenRoomPage {
2
+ snapshotId: string;
3
+ throughSeq: number;
4
+ messages: unknown[];
5
+ nextCursor?: string;
6
+ complete: boolean;
7
+ }
8
+ /** Validate the whole frozen range before committing it to the conversation. */
9
+ export declare class RoomHistoryAccumulator {
10
+ private snapshotId?;
11
+ private throughSeq?;
12
+ private nextSeq;
13
+ private readonly cursors;
14
+ readonly messages: unknown[];
15
+ constructor(sinceSeq: number);
16
+ accept(page: FrozenRoomPage): string | undefined;
17
+ }
18
+ export declare function collectRoomHistory(fetchPage: (request: {
19
+ sinceSeq?: number;
20
+ cursor?: string;
21
+ limit?: number;
22
+ }) => Promise<FrozenRoomPage>, sinceSeq: number): Promise<unknown[]>;
@@ -0,0 +1,58 @@
1
+ /** Validate the whole frozen range before committing it to the conversation. */
2
+ export class RoomHistoryAccumulator {
3
+ snapshotId;
4
+ throughSeq;
5
+ nextSeq;
6
+ cursors = new Set();
7
+ messages = [];
8
+ constructor(sinceSeq) {
9
+ if (!Number.isSafeInteger(sinceSeq) || sinceSeq < 0)
10
+ throw new Error("invalid room sequence");
11
+ this.nextSeq = sinceSeq + 1;
12
+ }
13
+ accept(page) {
14
+ if (!page ||
15
+ typeof page.snapshotId !== "string" ||
16
+ !page.snapshotId ||
17
+ !Number.isSafeInteger(page.throughSeq) ||
18
+ page.throughSeq < this.nextSeq - 1 ||
19
+ typeof page.complete !== "boolean" ||
20
+ !Array.isArray(page.messages) ||
21
+ (this.snapshotId !== undefined &&
22
+ (this.snapshotId !== page.snapshotId || this.throughSeq !== page.throughSeq))) {
23
+ throw new Error("room history snapshot boundary changed");
24
+ }
25
+ this.snapshotId = page.snapshotId;
26
+ this.throughSeq = page.throughSeq;
27
+ for (const message of page.messages) {
28
+ const seq = message?.seq;
29
+ if (seq !== this.nextSeq || this.nextSeq > page.throughSeq)
30
+ throw new Error("room history has a sequence gap");
31
+ this.nextSeq++;
32
+ this.messages.push(message);
33
+ // The server can paginate larger archives. This view must fail visibly
34
+ // instead of silently rendering only a tail or allocating without bound.
35
+ if (this.messages.length > 50_000)
36
+ throw new Error("room history exceeds the conversation view limit");
37
+ }
38
+ if (page.complete) {
39
+ if (page.nextCursor !== undefined || this.nextSeq - 1 !== page.throughSeq)
40
+ throw new Error("room history is incomplete");
41
+ return undefined;
42
+ }
43
+ if (!page.messages.length || !page.nextCursor || this.cursors.has(page.nextCursor))
44
+ throw new Error("room history pagination did not advance");
45
+ this.cursors.add(page.nextCursor);
46
+ return page.nextCursor;
47
+ }
48
+ }
49
+ export async function collectRoomHistory(fetchPage, sinceSeq) {
50
+ const accumulator = new RoomHistoryAccumulator(sinceSeq);
51
+ let request = { sinceSeq, limit: 200 };
52
+ for (;;) {
53
+ const cursor = accumulator.accept(await fetchPage(request));
54
+ if (!cursor)
55
+ return accumulator.messages;
56
+ request = { cursor, limit: 200 };
57
+ }
58
+ }
@@ -1 +1 @@
1
- .environment-trigger{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.environment-dialog{width:min(560px,calc(100vw - 24px));max-height:calc(100dvh - 32px);box-sizing:border-box;overflow:auto;border:1px solid var(--border, #777);border-radius:16px;padding:20px;background:var(--bg, #151719);color:var(--text, #f5f5f5)}.environment-dialog::backdrop{background:#0008}.environment-dialog header{display:flex;align-items:center;justify-content:space-between;gap:12px}.environment-dialog h2{margin:0;font-size:20px}.environment-dialog p{line-height:1.6}.environment-location,.environment-list small{overflow-wrap:anywhere}.environment-list{padding:0;list-style:none;display:grid;gap:12px}.environment-list li{display:flex;align-items:center;gap:8px;padding-block:10px;border-bottom:1px solid var(--border, #777)}.environment-list li>div{flex:1;min-width:0}.environment-list small{display:block;margin-top:4px;opacity:.7}.environment-dialog form{display:grid;gap:12px;margin-top:20px}.environment-dialog label{display:grid;gap:6px}.environment-dialog input{box-sizing:border-box;width:100%;min-height:44px;padding:10px;border:1px solid var(--border, #777);border-radius:8px;background:transparent;color:inherit;font-size:16px}.environment-dialog button{min-height:44px}.environment-hint{font-size:12px;opacity:.7}@media(max-width:420px){.environment-list li{flex-wrap:wrap}.environment-list li>div{flex-basis:100%}}.hub-skills{max-width:1060px;width:100%;margin:0 auto;padding:36px 40px 64px;color:var(--text);box-sizing:border-box}.skills-heading,.skills-heading>div:last-child,.skills-actions,.skills-filter,.skills-card-heading,.skills-workspace-panel>header{display:flex;align-items:center;gap:10px}.skills-heading{justify-content:space-between;gap:20px;margin-bottom:28px}.skills-heading h1{font-size:26px;letter-spacing:-.7px;margin:6px 0 8px}.skills-heading p,.skills-eyebrow,.skills-count,.skills-source,.skills-progress{color:var(--muted);font-size:13px}.skills-heading p{margin:0;line-height:1.6}.skills-eyebrow{font-size:11px;letter-spacing:.06em}.skills-actions{flex-wrap:wrap}.skills-filter{margin:24px 0 12px}.skills-filter>label{flex:1}.hub-skills input:not([type=radio]),.hub-skills select,.hub-skills textarea{box-sizing:border-box;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font:inherit;min-width:0}.hub-skills input:not([type=radio]),.hub-skills textarea{width:100%}.hub-skills input:focus,.hub-skills textarea:focus,.hub-skills select:focus{outline:2px solid var(--accent);outline-offset:2px}.hub-skills input:read-only,.hub-skills textarea:read-only{background:var(--panel)}.hub-skills label>span:first-child{display:block;font-size:12px;font-weight:600;margin-bottom:8px}.skills-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.skills-card{border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:18px;min-width:0;display:flex;flex-direction:column}.skills-card-heading{justify-content:space-between;align-items:flex-start}.skills-card h2{font-size:15px;margin:0 0 10px;overflow-wrap:anywhere}.skills-card .config-badge{margin:0 5px 4px 0}.skills-card>p{font-size:13px;line-height:1.65;overflow-wrap:anywhere}.skills-card footer{margin-top:auto;padding-top:12px;gap:4px}.skills-remove{margin-left:auto}.skills-danger{background:var(--danger);border-color:var(--danger);color:#fff}.skills-source{font-family:ui-monospace,monospace;font-size:11px!important}.skills-empty{padding:48px 20px;text-align:center;border:1px dashed var(--border);border-radius:12px}.skills-empty h2{font-size:18px}.skills-empty p{font-size:14px;color:var(--muted)}.skills-workspace-panel{margin:20px 0 28px;padding:24px;border:1px solid var(--border);border-radius:14px;background:var(--panel)}.skills-workspace-panel>header{justify-content:space-between;margin-bottom:20px}.skills-workspace-panel h2{font-size:18px;margin:0;overflow-wrap:anywhere}.skills-workspace-panel h2:focus{outline:none}.skills-workspace-panel fieldset{padding:0;border:0;min-width:0;margin:0}.skills-workspace-panel label{display:block;margin:0 0 18px}.skills-workspace-panel textarea{font:12px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;min-height:160px;tab-size:2}.skills-workspace-panel small{display:block;color:var(--muted);font-size:11px;line-height:1.6;margin-top:6px}.skills-editor .skills-actions{justify-content:space-between}.skills-editor .config-help{max-width:70%}.skills-unsaved{display:inline!important;margin-left:10px;color:var(--accent)!important}.skills-field-error{color:var(--danger);font-size:12px}.skills-source-choices{max-height:350px;overflow:auto;margin:12px 0 20px}.skills-source-choices label{display:flex;align-items:flex-start;gap:12px;padding:14px;border:1px solid var(--border);border-radius:8px;cursor:pointer;margin-bottom:8px}.skills-source-choices input{margin-top:4px;accent-color:var(--accent)}.skills-source-choices strong{font-size:14px}.skills-source-choices small{overflow-wrap:anywhere}.skills-import-preview a{color:var(--accent);overflow-wrap:anywhere}.skills-update-preview>p,.skills-remove-confirm>p{font-size:13px;line-height:1.75}.skills-update-preview details{margin:16px 0}.skills-update-preview ul{list-style:none;padding:0;max-height:220px;overflow:auto}.skills-update-preview li{font-size:12px;display:flex;justify-content:space-between;gap:12px;padding:5px 0}.skills-update-preview li code{overflow-wrap:anywhere}.skills-update-preview li span{white-space:nowrap;color:var(--muted)}.skills-directories{margin-top:28px;font-size:12px;color:var(--muted);line-height:1.8}.skills-directories summary{cursor:pointer;color:var(--text)}.skills-directories code{overflow-wrap:anywhere}.skills-progress{padding:0 2px}.hub-skills button:disabled{opacity:.5;cursor:not-allowed}.hub-skills .config-switch{flex-shrink:0}.hub-skills .config-help{font-size:12px;color:var(--muted);line-height:1.6}@media(max-width:1000px){.skills-heading{align-items:flex-start;flex-direction:column}.skills-list{grid-template-columns:1fr}}@media(max-width:600px){.hub-skills{padding:24px 16px 44px}.skills-heading{gap:16px}.skills-heading h1{font-size:24px}.skills-heading .skills-actions{width:100%}.skills-heading .skills-actions button{flex:1}.skills-filter{flex-wrap:wrap}.skills-filter>label{flex-basis:100%}.skills-filter select{flex:1}.skills-workspace-panel{padding:16px}.skills-editor .config-help{max-width:100%}.skills-editor .skills-actions{align-items:flex-start;flex-direction:column}.skills-card{padding:16px}.skills-card footer{flex-wrap:wrap}.skills-update-preview li{flex-direction:column;gap:2px}}.hub-mcp{min-width:0}.hub-mcp-toolbar{margin-top:0;flex-wrap:wrap}.hub-mcp-toolbar-actions{display:flex;gap:6px}.hub-mcp-list{display:flex;flex-direction:column;gap:12px}.hub-mcp-card{padding:18px 20px}.hub-mcp-card-head{display:flex;align-items:center;gap:12px}.hub-mcp-endpoint{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:17px 0 10px 44px;font-size:11px}.hub-mcp-endpoint code{overflow-wrap:anywhere;color:var(--text)}.hub-mcp-endpoint>span{color:var(--muted);font-size:10px}.hub-mcp-metadata{display:flex;align-items:center;flex-wrap:wrap;gap:10px;color:var(--muted);font-size:10px;margin-left:44px}.hub-mcp-card-actions{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin:16px 0 0 44px}.hub-mcp .hub-mcp-remove{color:var(--danger, #c5443c)}.hub-mcp-delete{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:12px;margin-top:15px;background:var(--panel);border-radius:8px;font-size:11px}.hub-mcp-delete>div{display:flex;gap:6px}.hub-mcp-editor-card{padding:20px;margin-bottom:16px}.hub-mcp-editor-card>h2{margin:0 0 18px}.hub-mcp-editor{margin-top:20px}.hub-mcp-editor-card .hub-mcp-editor{margin-top:0}.hub-mcp textarea{display:block;width:100%;min-width:0;padding:9px 10px;border:1px solid var(--border);border-radius:7px;background:var(--surface, var(--bg));color:var(--text);font-family:inherit;font-size:12px;line-height:1.6;resize:vertical}.hub-mcp textarea:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.hub-mcp textarea::placeholder{color:var(--muted);opacity:.75}.hub-mcp textarea:disabled{opacity:.55}.hub-mcp .hub-mcp-check{display:flex;flex-direction:row;align-items:flex-start;gap:8px;font-size:11px;margin:15px 0}.hub-mcp .hub-mcp-check input{width:14px;min-width:14px;height:14px;min-height:14px;margin:2px 0 0;padding:0;accent-color:var(--accent)}.hub-mcp-check span{flex:1}.hub-mcp-reuse{padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.hub-mcp-keys{margin:20px 0}.hub-mcp-key-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.hub-mcp-key-heading h3{margin:0;font-size:12px}.hub-mcp-key-row{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr) auto;gap:7px;align-items:center;margin-top:7px}.hub-mcp-key-row label{display:block;min-width:0}.hub-mcp-key-removed label{opacity:.5}.hub-mcp-key-removed label:first-child input{text-decoration:line-through}.hub-mcp-advanced{border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:13px 0;margin:19px 0}.hub-mcp-advanced>summary{cursor:pointer;font-size:12px;color:var(--muted)}.hub-mcp-advanced[open]>summary{margin-bottom:16px}.hub-mcp-probing{margin:16px 0 0;font-size:11px;color:var(--muted)}.hub-mcp-probe-result{margin-top:17px;padding:13px 15px;border-radius:8px;border:1px solid var(--border);background:var(--panel);font-size:11px}.hub-mcp-probe-summary{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.hub-mcp-probe-summary strong{font-weight:500}.hub-mcp-probe-summary>span{color:var(--muted);font-size:10px}.hub-mcp-probe-result>p{margin:7px 0 0;color:var(--muted)}.hub-mcp-probe-ok .hub-mcp-probe-summary strong{color:var(--accent)}.hub-mcp-probe-error .hub-mcp-probe-summary strong{color:var(--danger, #c5443c)}.hub-mcp-probe-result details{margin-top:12px}.hub-mcp-probe-result summary{cursor:pointer}.hub-mcp-probe-result ul{list-style:none;padding:0;margin:10px 0 0;max-height:300px;overflow-y:auto}.hub-mcp-probe-result li{padding:10px 0;border-top:1px solid var(--border)}.hub-mcp-probe-result li>div{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.hub-mcp-probe-result li p{color:var(--muted);margin:5px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}.hub-mcp-explanation{margin-top:24px;line-height:1.8}.hub-mcp-removed{margin-top:20px;color:var(--muted);font-size:11px}.hub-mcp-removed summary{cursor:pointer}.hub-mcp-removed-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0}@media(max-width:700px){.hub-mcp-card,.hub-mcp-editor-card{padding:16px}.hub-mcp-endpoint,.hub-mcp-metadata,.hub-mcp-card-actions{margin-left:0}.hub-mcp-toolbar .config-search{width:100%}.hub-mcp-toolbar-actions{margin-left:auto}.hub-mcp-key-row{grid-template-columns:minmax(0,1fr) auto;padding-bottom:8px}.hub-mcp-key-row label:first-child{grid-column:1/-1}.hub-mcp-probe-summary{flex-wrap:wrap;gap:4px}.hub-mcp .config-form-actions{flex-wrap:wrap}}.hub-settings{flex:1;min-height:0;overflow-y:auto;width:min(920px,100%);margin:0 auto;padding:40px 42px 56px;color:var(--text);font-size:13px;line-height:1.55;overflow-wrap:anywhere}.hub-settings *{box-sizing:border-box}.hub-settings-heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:28px}.hub-settings-eyebrow{display:block;color:var(--muted);font-size:11px;margin-bottom:6px;letter-spacing:.04em}.hub-settings h1{margin:0;font-size:26px;font-weight:600;letter-spacing:-.035em}.hub-settings-heading p{margin:7px 0 0;color:var(--muted)}.hub-settings h2{font-size:14px;font-weight:600}.hub-settings h3{font-size:13px;font-weight:600;margin:0 0 16px}:is(.hub-settings,.hub-skills) .config-button{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;gap:5px;border:1px solid var(--border);border-radius:7px;padding:7px 11px;min-height:33px;background:var(--surface, var(--bg));color:var(--text);font:inherit;font-size:12px;line-height:1.3;cursor:pointer;white-space:nowrap}:is(.hub-settings,.hub-skills) .config-button:hover{background:var(--hover, var(--panel))}:is(.hub-settings,.hub-skills) .config-button-quiet{background:transparent;border-color:transparent;color:var(--muted)}:is(.hub-settings,.hub-skills) .config-button-primary{background:var(--accent);color:var(--accent-text, white);border-color:var(--accent)}:is(.hub-settings,.hub-skills) .config-button-primary:hover{filter:brightness(.94);background:var(--accent)}.hub-settings button:disabled{opacity:.45;cursor:default}:is(.hub-settings,.hub-skills) button:focus-visible,:is(.hub-settings,.hub-skills) summary:focus-visible,:is(.hub-settings,.hub-skills) input:focus-visible,:is(.hub-settings,.hub-skills) select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.config-card{border:1px solid var(--border);border-radius:12px;background:var(--surface, var(--bg))}.config-workspace-card{display:flex;align-items:flex-start;gap:14px;padding:20px;border-radius:12px;background:var(--panel)}.config-workspace-card>div{min-width:0;flex:1}.config-workspace-card strong{display:block;font-weight:500}.config-workspace-card code{display:block;margin:6px 0;font-size:11px;word-break:break-all}.config-workspace-card p{margin:0;color:var(--muted);font-size:12px}.config-workspace-icon,.config-row-icon,.config-model-icon,.config-skill-icon{display:grid;place-items:center;flex-shrink:0;width:32px;height:32px;border-radius:8px;background:var(--panel);color:var(--muted);font-size:20px}.config-workspace-icon{background:var(--surface, var(--bg))}:is(.hub-settings,.hub-skills) .config-badge{display:inline-flex;align-items:center;flex-shrink:0;padding:2px 7px;min-height:21px;border:1px solid var(--border);border-radius:5px;color:var(--muted);font-size:10px;font-weight:400;white-space:nowrap}:is(.hub-settings,.hub-skills) .config-badge-accent{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 25%,transparent);background:color-mix(in srgb,var(--accent) 6%,transparent)}.config-section-title{margin:28px 0 12px}.config-overview-list{overflow:hidden}.hub-settings .config-overview-row{display:flex;align-items:center;gap:13px;padding:17px 20px;width:100%;background:transparent;text-align:left;border:none;border-radius:0;color:inherit;font:inherit}.hub-settings button.config-overview-row{cursor:pointer}.hub-settings button.config-overview-row:hover{background:var(--hover, var(--panel))}.config-overview-row+.config-overview-row{border-top:1px solid var(--border)}.config-row-copy{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px}.config-row-copy strong{font-weight:500}.config-row-copy>span{color:var(--muted);font-size:11px}.config-chevron{font-size:21px;color:var(--muted)}.config-explanation{margin-top:28px}.config-explanation h2{margin:0 0 8px}.config-explanation p{color:var(--muted);font-size:12px;margin:8px 0;line-height:1.8}.config-scope-note{border-top:1px solid var(--border);padding-top:18px;margin:32px 0 0;color:var(--muted);font-size:11px}.config-message{padding:10px 13px;border:1px solid var(--border);border-radius:8px;margin:0 0 18px;font-size:12px}.config-error{color:var(--danger, #c5443c);background:color-mix(in srgb,var(--danger, #c5443c) 6%,transparent);border-color:color-mix(in srgb,var(--danger, #c5443c) 22%,transparent)}.config-success{color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,transparent)}.config-loading,.config-help{color:var(--muted);font-size:11px}.config-section-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:26px 0 12px}.config-section-heading h2{margin:0}.config-count{font-size:11px;font-weight:400;color:var(--muted);margin-left:5px}.config-defaults{padding:20px}.hub-settings fieldset{margin:0;padding:0;border:0;min-width:0}.hub-settings legend{padding:0;margin:0 0 15px;font-weight:500;font-size:13px}.config-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.config-form-grid label{display:flex;flex-direction:column;align-items:stretch;gap:7px;min-width:0;font-size:11px}.hub-settings input,.hub-settings select{display:block;width:100%;min-width:0;min-height:35px;padding:8px 10px;border:1px solid var(--border);border-radius:7px;background:var(--surface, var(--bg));color:var(--text);font:inherit;font-size:12px}.hub-settings input::placeholder{color:var(--muted);opacity:.75}.hub-settings input[readonly]{color:var(--muted);background:var(--panel)}.hub-settings input:disabled,.hub-settings select:disabled{opacity:.6}.config-form-grid small{color:var(--muted);font-size:10px}.config-full-width{grid-column:1 / -1}.config-form-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:14px}.config-form-footer p{margin:0}.config-form-actions{display:flex;justify-content:flex-end;gap:6px;margin-top:20px}.config-connection-list{display:flex;flex-direction:column;gap:12px}.config-connection-card,.config-editor-card{padding:18px 20px}.config-editor-card{margin-bottom:12px}.config-connection-head{display:flex;align-items:center;gap:11px}.config-connection-facts{margin:18px 0 0 43px;font-size:11px}.config-connection-facts>div{display:grid;grid-template-columns:75px minmax(0,1fr);gap:12px;margin-top:7px}.config-connection-facts dt{color:var(--muted)}.config-connection-facts dd{margin:0;overflow-wrap:anywhere}.config-connection-editor{margin-top:18px}.config-field-meta{color:var(--muted);margin-left:5px;font-size:10px}.config-empty{padding:34px 24px;border:1px dashed var(--border);border-radius:12px;text-align:center}.config-empty>span{color:var(--muted);font-size:27px}.config-empty h3{margin:9px 0 6px}.config-empty p{max-width:440px;margin:0 auto;color:var(--muted);font-size:12px}.config-skills-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}.config-search{position:relative;display:block;width:min(360px,100%)}.config-search>span{position:absolute;top:5px;left:10px;font-size:21px;color:var(--muted)}.hub-settings .config-search input{padding-left:33px}.config-skills-toolbar>.config-help{white-space:nowrap}.config-skill-list{overflow:hidden}.config-skill+.config-skill{border-top:1px solid var(--border)}.config-skill-row{display:flex;align-items:flex-start;gap:12px;padding:18px 20px}.config-skill-copy{flex:1;min-width:0}.config-skill-copy>strong{display:block;font-size:12px;font-weight:500}.config-skill-copy>p{margin:4px 0 9px;color:var(--muted);font-size:11px;line-height:1.6}.config-skill-meta{display:flex;align-items:center;gap:12px}.hub-settings .config-text-button{background:none;border:0;padding:0;color:var(--muted);font:inherit;font-size:10px;cursor:pointer}.hub-settings .config-text-button:hover{color:var(--text)}:is(.hub-settings,.hub-skills) .config-switch{flex-shrink:0;width:29px;height:17px;min-height:0;border:none;border-radius:999px;padding:2px;background:var(--border);margin-top:4px;cursor:pointer}:is(.hub-settings,.hub-skills) .config-switch>span{display:block;height:13px;width:13px;border-radius:50%;background:#fff;transform:translate(0);box-shadow:0 1px 2px #0002;transition:transform .12s ease}:is(.hub-settings,.hub-skills) .config-switch[aria-checked=true]{background:var(--accent)}:is(.hub-settings,.hub-skills) .config-switch[aria-checked=true]>span{transform:translate(12px)}.config-skill-detail{margin:0 20px 18px 64px;padding:14px 16px;background:var(--panel);border-radius:8px}.config-skill-detail pre{margin:0;max-height:430px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.8 ui-monospace,SFMono-Regular,Menlo,monospace}.config-skill-detail>p{color:var(--muted);font-size:11px;margin:0}.config-detail-error{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--danger, #c5443c);font-size:11px}.config-directories{margin-top:24px;font-size:11px;color:var(--muted)}.config-directories summary{cursor:pointer;width:fit-content}.config-directories p{margin:12px 0 8px}.config-directories ul{padding-left:16px;margin:0}.config-directories li{margin-top:6px}.config-directories code{font-size:10px;word-break:break-all}.config-mcp-row{display:flex;align-items:center;gap:12px;padding:17px 20px}.config-mcp-row+.config-mcp-row{border-top:1px solid var(--border)}.config-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:700px){.hub-settings{padding:24px 20px 40px}.hub-settings-heading{gap:12px;margin-bottom:24px}.hub-settings h1{font-size:23px}.config-workspace-card{flex-wrap:wrap;padding:17px}.config-workspace-card>.config-badge{margin-left:46px}.config-form-grid{grid-template-columns:minmax(0,1fr)}.config-form-footer{align-items:flex-start;flex-direction:column;gap:12px}.config-defaults,.config-connection-card,.config-editor-card{padding:17px}.config-connection-facts{margin-left:0}.config-connection-facts>div{grid-template-columns:65px minmax(0,1fr);gap:8px}.config-skill-row{padding:16px;gap:10px}.config-skill-icon{display:none}.config-skill-detail{margin:0 16px 16px;padding:12px}.config-skills-toolbar{flex-wrap:wrap;gap:9px}.config-search{width:100%}.config-section-heading{gap:8px}.config-mcp-row{padding:16px}}@media(prefers-reduced-motion:reduce){:is(.hub-settings,.hub-skills) .config-switch>span{transition:none}}.config-model-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:16px 18px 0}.config-remove-connection{margin-left:auto}.config-probe-result{display:flex;flex-direction:column;gap:4px;margin:12px 18px 0;padding:10px 12px;border:1px solid var(--border);border-radius:8px;color:var(--muted);background:var(--panel)}.config-probe-result.is-success{color:var(--success)}.config-probe-result small{font-size:11px;color:var(--muted)}.config-remove-confirm{margin:16px 18px 0;padding:16px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.config-remove-confirm h3{margin-bottom:8px}.config-remove-confirm p{font-size:12px;line-height:1.6}.config-remove-confirm label{display:block;margin:14px 0}.config-remove-confirm label>span{display:block;margin-bottom:7px;font-size:12px}.hub-settings .config-button-danger{background:var(--danger);border-color:var(--danger);color:#fff}.hub-settings .config-button-danger:hover{background:var(--danger);filter:brightness(.94)}.config-connection-editor .config-remove-confirm{margin:14px 0}@media(max-width:600px){.config-model-actions .config-help{flex-basis:100%;order:3}.config-model-actions,.config-probe-result,.config-remove-confirm{margin-left:14px;margin-right:14px}}.hub-library{height:100%;overflow:auto;padding:30px clamp(18px,4vw,52px) 44px}.library-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.library-heading h1{margin:0 0 8px;font-size:24px;font-weight:650;letter-spacing:-.5px}.library-heading p,.library-hint{margin:0;color:var(--muted);line-height:1.7;font-size:13px}.library-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:7px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font-size:13px;text-decoration:none;cursor:pointer;white-space:nowrap}.library-button:hover{background:var(--hover)}.library-button.primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.library-button.danger{color:var(--danger)}.library-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.library-error{background:color-mix(in srgb,var(--danger) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--danger) 28%,var(--border));padding:12px 14px;border-radius:9px;margin:12px 0;overflow-wrap:anywhere}.library-empty{padding:32px 18px;text-align:center;color:var(--muted);line-height:1.8}.library-search input,.hub-library select,.library-title-input{width:100%;min-height:38px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);padding:8px 11px}.file-breadcrumbs{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:16px 0;color:var(--muted);font-size:13px}.file-breadcrumbs button{border:none;background:none;color:inherit;padding:4px;max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.file-breadcrumbs button:hover{color:var(--text);text-decoration:underline}.file-columns{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start}.file-columns.has-preview{grid-template-columns:minmax(230px,1fr) minmax(0,1.7fr)}.file-directory{border:1px solid var(--border);background:var(--surface);border-radius:12px;overflow:hidden}.file-directory .library-search{display:block;padding:12px;border-bottom:1px solid var(--subtle)}.file-directory .library-hint{padding:14px}.file-entry{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;text-align:left;border:none;border-bottom:1px solid var(--subtle);background:transparent;color:var(--text);padding:10px 14px;cursor:pointer}.file-entry:last-child{border-bottom:none}.file-entry:hover,.file-entry.selected{background:var(--hover)}.file-glyph{font-size:24px;line-height:1;color:var(--muted)}.file-entry-name{min-width:0;flex:1;overflow-wrap:anywhere;font-size:13px}.file-entry-size{color:var(--muted);font-size:11px;white-space:nowrap}.file-preview{min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.file-preview header{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:14px;border-bottom:1px solid var(--subtle);flex-wrap:wrap}.file-preview header strong{display:block;font-size:13px;overflow-wrap:anywhere}.file-preview header span{display:block;font-size:11px;color:var(--muted);margin-top:4px}.file-preview pre{max-height:65vh;overflow:auto;margin:0;padding:18px;font:12px/1.8 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre;tab-size:2}.file-preview>img{display:block;max-width:100%;max-height:65vh;object-fit:contain;margin:auto;padding:16px}.file-preview .library-hint{padding:12px 18px;border-top:1px solid var(--subtle)}.session-toolbar{display:flex;gap:12px;margin:20px 0}.session-toolbar .library-search{flex:1}.session-toolbar select{width:auto;min-width:110px}.session-history-list{border:1px solid var(--border);background:var(--surface);border-radius:12px;overflow:visible}.session-history-row{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--subtle);padding:17px 18px}.session-history-row:last-child{border-bottom:none}.session-history-info{flex:1;min-width:0}.session-history-title{border:none;padding:0;background:none;color:var(--text);text-align:left;font-weight:550;cursor:pointer;overflow-wrap:anywhere}.session-history-info p{color:var(--muted);font-size:12px;margin:6px 0 0;line-height:1.6;overflow-wrap:anywhere}.session-history-meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;color:var(--muted);font-size:11px}.session-history-editor{width:100%;display:flex;flex-direction:column;gap:14px;padding:18px;margin-bottom:18px;border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow-wrap:anywhere}.session-history-editor h2{margin:0 0 6px;font-size:16px}.session-history-editor label>span{display:block;margin-bottom:7px;font-size:13px}.session-history-editor .library-error{margin:0}.session-title-review{margin:0;color:var(--muted);font-size:13px;line-height:1.7}.session-title-review strong{color:var(--text)}.session-history-editor .library-error:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.session-load-more{display:flex;justify-content:center;padding:20px}.session-export{position:relative}.session-export summary{list-style:none}.session-export summary::-webkit-details-marker{display:none}.session-export>div{position:absolute;right:0;z-index:2;min-width:160px;padding:5px;margin-top:5px;border:1px solid var(--border);border-radius:9px;background:var(--surface);box-shadow:var(--shadow)}.session-export a{display:block;color:var(--text);text-decoration:none;font-size:12px;white-space:nowrap;padding:10px;border-radius:5px}.session-export a:hover{background:var(--hover)}.navigation-prompt{max-width:min(440px,calc(100vw - 32px));border:1px solid var(--border);border-radius:14px;background:var(--surface);color:var(--text);padding:24px;box-shadow:var(--shadow)}.navigation-prompt::backdrop{background:#0006}.navigation-prompt h2{font-size:18px;margin:0 0 12px}.navigation-prompt p{color:var(--muted);font-size:13px;line-height:1.8;margin:0 0 20px}.attachment-open{color:inherit;cursor:pointer}.attachment-open:hover{background:var(--hover)}@media(max-width:1000px){.file-columns.has-preview{grid-template-columns:minmax(0,1fr)}.file-columns.has-preview .file-directory{max-height:250px;overflow:auto}}@media(max-width:600px){.hub-library{padding:22px 16px 32px}.library-heading{align-items:flex-start}.library-heading h1{font-size:22px}.session-history-row{align-items:flex-start;flex-direction:column;gap:12px}.session-history-row .library-actions{width:100%}.file-preview .library-actions{gap:6px}}.hub-links{max-width:1120px;margin:0 auto;padding:32px;overflow-wrap:anywhere}.hub-links h1{margin:0 0 8px;font-size:26px}.hub-links h2{font-size:18px;margin:24px 0 16px}.hub-links h3{font-size:15px}.hub-links p{line-height:1.6}.links-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.links-heading p,.links-muted,.links-host,.links-provider p,.links-connection p,.hub-links small{color:var(--muted)}.links-host{padding-bottom:16px;border-bottom:1px solid var(--border)}.links-heading input{max-width:240px;min-width:0}.hub-links input{display:block;box-sizing:border-box;width:100%;margin-top:8px;padding:10px 12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:inherit;font:inherit}.hub-links button{border:1px solid var(--border);border-radius:7px;padding:7px 12px;background:var(--panel);color:inherit;cursor:pointer}.hub-links button:disabled{opacity:.5;cursor:default}.hub-links a{color:var(--accent)}.links-providers{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}.links-provider,.links-connection,.links-editor{border:1px solid var(--border);border-radius:12px;padding:20px;background:var(--panel)}.links-provider{display:flex;flex-direction:column;align-items:flex-start}.links-provider p{margin-top:0;flex:1}.links-provider button{margin-top:16px}.links-brand{font-weight:700;font-size:19px;min-width:38px;min-height:38px;display:grid;place-items:center;border-radius:9px;background:var(--bg)}.links-connections{display:grid;gap:12px}.links-connection{display:flex;justify-content:space-between;gap:16px}.links-connection p{margin:6px 0}.links-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.links-state{font-size:12px;display:inline-block;padding:3px 8px;border-radius:5px;margin:4px 10px 4px 0;background:var(--bg)}.links-state.ready,.links-notice{color:var(--success)}.links-editor-backdrop{position:fixed;inset:0;z-index:999;background:#00000073}.links-editor{position:fixed;z-index:1000;left:50%;top:50%;transform:translate(-50%,-50%);width:min(540px,calc(100vw - 48px));max-height:calc(100dvh - 64px);box-sizing:border-box;overflow-y:auto;padding:28px;box-shadow:0 24px 80px #0000003d}.links-editor h2{margin-top:0}.links-editor label{display:block;margin:16px 0}.links-auth-option{padding:16px 0;border-top:1px solid var(--border);margin-top:20px}.links-auth-option details{margin-top:14px}.hub-links details li{padding:4px 0;line-height:1.6}.hub-links summary{cursor:pointer}.links-device-code{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:16px;margin-top:16px}.links-device-code>strong{font-size:26px;letter-spacing:4px;-webkit-user-select:all;user-select:all}.links-confirm,.links-conflict{border:1px solid var(--border);padding:16px;border-radius:9px;margin:16px 0;background:var(--bg)}.links-confirm button+button{margin-left:8px}.links-authorization{margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}.links-authorization>.links-actions{margin:20px 0 12px}.link-authorization-step{margin:20px 0}.link-authorization-actions,.links-methods{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.link-authorization-code{display:block;padding:18px;border:1px solid var(--border);border-radius:10px;background:var(--bg);text-align:center;font-size:28px;letter-spacing:4px;-webkit-user-select:all;user-select:all}.link-authorization-expires,.links-other-methods{color:var(--muted);font-size:12px}.link-authorization-error{color:var(--danger, #d04c4c)}.link-authorization-qr{text-align:center}.link-authorization-qr img{display:block;margin:16px auto;border-radius:12px;background:#fff}.link-authorization-fields>button,.link-authorization-consent>button{width:100%;padding:11px 16px;margin-top:12px;background:var(--accent);color:#fff}.link-authorization-consent label{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}.link-authorization-consent input[type=checkbox]{width:auto;margin:3px 0 0}.link-authorization-consent small{display:block;flex-basis:100%;margin-left:24px}.link-authorization-consent fieldset{margin:16px 0;border:1px solid var(--border);border-radius:8px}@media(max-width:640px){.hub-links{padding:20px 16px}.links-connection{flex-direction:column}.links-heading{align-items:flex-start}.links-heading input{max-width:160px}.links-editor{padding:16px}.links-providers{grid-template-columns:1fr}}.links-heading>button{flex-shrink:0;white-space:nowrap}.hub-panels{flex:1;min-height:0;width:100%;overflow-y:auto;max-width:1120px;margin:0 auto;padding:32px;overflow-wrap:anywhere}.hub-panels h1{margin:0 0 8px;font-size:26px}.hub-panels h2{margin:0;font-size:18px}.hub-panels h3{margin:0;font-size:15px}.hub-panels p{line-height:1.6}.panels-muted,.hub-panels small,.panels-card>p,.panels-heading p{color:var(--muted)}.panels-heading,.panels-card-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.panels-heading{margin-bottom:20px}.panels-heading p{margin:8px 0 0}.panels-section{margin-top:28px}.panels-card,.panels-import,.panels-review,.panels-empty{border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:20px}.panels-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.panels-card{display:flex;flex-direction:column;min-width:0}.panels-card>p{margin:10px 0}.panels-card .panels-actions{margin-top:auto;padding-top:18px}.panels-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.hub-panels button{border:1px solid var(--border);border-radius:7px;padding:8px 12px;color:inherit;background:var(--panel);font:inherit;cursor:pointer}.hub-panels button:disabled{opacity:.5;cursor:default}.hub-panels button.panels-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text, white)}.hub-panels button.panels-danger{color:var(--danger)}.hub-panels input:not([type=checkbox]){box-sizing:border-box;display:block;width:100%;min-width:0;margin-top:7px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;color:inherit;background:var(--bg);font:inherit}.panels-heading input{max-width:240px}.hub-panels label{display:block}.panels-import form>label{margin:20px 0 14px}.panels-import details{margin:16px 0}.hub-panels summary{cursor:pointer}.panels-source-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding-top:16px}.panels-candidates{margin-top:24px}.panels-candidates>h3{margin-bottom:14px}.panels-batch-start{margin:16px 0}.panels-badges{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:10px 0}.panels-badge{display:inline-block;border:1px solid var(--border);border-radius:5px;padding:3px 7px;font-size:12px;background:var(--bg)}.panels-badge-ready,.panels-notice{color:var(--success)}.panels-warning,.panels-confirm{padding:14px 16px;border:1px solid var(--border);border-radius:8px;background:var(--bg);line-height:1.6;margin:16px 0}.panels-warning p,.panels-confirm p{margin:0 0 8px}.panels-warning ul{margin:6px 0 0;padding-left:22px}.panels-review{margin:24px 0}.panels-review section{margin:22px 0}.panels-review dl,.panels-card dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px 14px;font-size:13px}.panels-review dt,.panels-card dt{color:var(--muted)}.panels-review dd,.panels-card dd{margin:0}.panels-review .panels-permission{display:flex;flex-direction:column;gap:4px;padding:9px 0;border-bottom:1px solid var(--border)}.panels-review footer{border-top:1px solid var(--border);padding-top:20px}.panels-check{margin-bottom:16px}.panels-check input{margin-right:8px}.panels-empty p{margin:8px 0 0}@media(max-width:640px){.hub-panels{padding:20px 16px}.panels-heading{flex-wrap:wrap}.panels-heading input{max-width:none}.panels-grid,.panels-source-fields{grid-template-columns:1fr}.panels-card,.panels-import,.panels-review,.panels-empty{padding:16px}}.panel-host{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto;padding:16px 20px 20px;gap:12px}.panel-host-heading{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-shrink:0}.panel-host-heading h1{margin:0;font-size:18px}.panel-host-heading p{margin:5px 0 0;color:var(--muted);font-size:12px}.panel-host button,.panel-host-actions a{border:1px solid var(--border);border-radius:7px;padding:8px 12px;color:inherit;background:var(--panel);cursor:pointer;text-decoration:none;font:inherit}.panel-host button.panel-host-primary,.panel-host-actions a{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.panel-host-limitations,.panel-host-notice,.panel-host-error{border:1px solid var(--border);border-radius:8px;padding:10px 14px;margin:0;background:var(--panel);font-size:13px;line-height:1.5;max-height:160px;overflow:auto;flex-shrink:0}.panel-host-limitations summary{cursor:pointer;font-weight:600}.panel-host-limitations p,.panel-host-limitations ul,.panel-host-error p{margin:6px 0}.panel-host-limitations ul{padding-left:20px}.panel-host-directory p{margin:0 0 8px;overflow-wrap:anywhere}.panel-host-directory a{display:inline-block;padding:7px 12px;border-radius:7px;background:var(--accent);color:var(--accent-text);font-weight:600;text-decoration:none}.panel-host-loading{color:var(--muted)}.panel-host-frame{display:block;border:1px solid var(--border);border-radius:10px;background:var(--surface);width:100%;min-height:280px;flex:1}.panel-host-frame[inert]{pointer-events:none;opacity:.5}.panel-host-confirm{border:2px solid var(--accent);border-radius:10px;background:var(--surface);box-shadow:var(--shadow);padding:18px;flex-shrink:0}.panel-host-confirm h2{margin:0 0 12px;font-size:16px}.panel-host-confirm pre,.panel-host-url{max-height:240px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.6;background:var(--bg);padding:12px;border-radius:7px}.panel-host-actions{display:flex;gap:8px}.panel-host-video .panel-host-actions{flex-wrap:wrap;align-items:center}.panel-host-video button,.panel-host-video .panel-host-actions a{min-height:44px}.panel-host-video .panel-host-actions a{flex-shrink:0;white-space:nowrap}@media(max-width:640px){.panel-host{padding:12px 10px}.panel-host-frame{min-height:380px}.panel-host-confirm pre{max-height:160px}}.panel-host-preview{border:1px solid var(--border);border-radius:8px;padding:12px;background:var(--panel);flex-shrink:0}.panel-host-preview header{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-host-preview h2{font-size:15px;overflow-wrap:anywhere;min-width:0}.panel-host-preview button{flex-shrink:0}.panel-host-preview video,.panel-host-preview audio,.panel-host-preview img{display:block;width:100%;max-height:50vh;object-fit:contain;margin-bottom:12px}.panel-host-preview a{display:inline-block;padding:10px 12px;background:var(--accent);color:var(--accent-text);border-radius:7px;text-decoration:none}.message-content{min-width:0;max-width:100%;white-space:normal;line-height:1.8;overflow-wrap:anywhere}.message-content>:first-child{margin-top:0}.message-content>:last-child{margin-bottom:0}.message-content p{margin:10px 0}.message-content h1,.message-content h2,.message-content h3,.message-content h4{margin:20px 0 8px;font-weight:600;line-height:1.5;letter-spacing:-.025em}.message-content h1{font-size:23px}.message-content h2{font-size:19px}.message-content h3{font-size:16px}.message-content h4{font-size:14px}.message-content ul,.message-content ol{margin:10px 0;padding-left:24px}.message-content li{margin:4px 0}.message-content li>p{margin:4px 0}.message-content .contains-task-list{list-style:none;padding-left:4px}.message-content .task-list-item>input{margin-right:8px;accent-color:var(--accent)}.message-content blockquote{margin:14px 0;padding:2px 16px;border-left:3px solid var(--border);color:var(--muted)}.message-content a{color:var(--accent);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 35%,transparent);text-underline-offset:3px}.message-content a:hover{text-decoration-color:currentColor}.message-content hr{margin:20px 0;border:0;border-top:1px solid var(--border)}.message-content code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em}.message-content :not(pre)>code{background:var(--panel);padding:2px 5px;border-radius:5px}.message-code-block{margin:14px 0;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--surface)}.message-code-heading{display:flex;justify-content:space-between;align-items:center;padding:7px 12px;border-bottom:1px solid var(--subtle);color:var(--muted);background:var(--panel);font-size:11px}.message-code-block pre{margin:0;padding:14px;overflow-x:auto;line-height:1.7;white-space:pre;tab-size:2}.message-code-block pre code{font-size:12px}.message-copy{color:var(--muted);background:transparent;border:0;border-radius:5px;padding:3px 6px;font-size:10px;cursor:pointer;white-space:nowrap}.message-copy:hover{background:var(--hover);color:var(--text)}.message-actions{display:flex;margin-top:8px}.message-actions .message-copy{padding-left:0}.message-reasoning{color:var(--muted);margin-bottom:14px;font-size:12px}.message-reasoning summary{cursor:pointer;padding:3px 0}.message-reasoning pre{margin:8px 0 0;white-space:pre-wrap;font:inherit;line-height:1.8;max-height:320px;overflow:auto;padding:10px 14px;border-left:2px solid var(--border)}.message-streaming{white-space:pre-wrap}.message-table-scroll{max-width:100%;overflow-x:auto;margin:14px 0;border:1px solid var(--border);border-radius:8px}.message-table-scroll table{border-collapse:collapse;width:max-content;min-width:100%;font-size:12px}.message-table-scroll th,.message-table-scroll td{padding:8px 12px;border-right:1px solid var(--subtle);border-bottom:1px solid var(--subtle);vertical-align:top}.message-table-scroll th{text-align:left;background:var(--panel);font-weight:550}.message-table-scroll tr:last-child td{border-bottom:0}.message-table-scroll th:last-child,.message-table-scroll td:last-child{border-right:0}.message-image-reference{display:inline-flex;align-items:center;gap:8px;max-width:100%;border:1px solid var(--border);border-radius:8px;padding:7px 10px;background:var(--panel);color:var(--accent);font-family:inherit;font-size:12px}button.message-image-reference{cursor:pointer}button.message-image-reference:hover{background:var(--hover)}.message-image-reference span{color:var(--muted);font-size:10px}.message-file-reference{background:var(--panel);border-radius:4px;padding:1px 4px}.message-file-reference .message-copy{display:inline;margin-left:4px}.message-tool-card{border:1px solid var(--subtle);border-radius:10px;background:var(--surface);white-space:normal;overflow:hidden}.message-tool-card>summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;min-width:0;padding:10px 12px;font-size:11px}.message-tool-card>summary::-webkit-details-marker{display:none}.message-tool-card>summary:after{content:"›";color:var(--muted);margin-left:3px;font-size:16px}.message-tool-card[open]>summary:after{transform:rotate(90deg)}.message-tool-indicator{display:grid;place-items:center;flex:0 0 17px;width:17px;height:17px;border:1px solid var(--border);border-radius:50%;font-size:10px;color:var(--muted)}.message-tool-name{color:var(--text);font-weight:550;flex-shrink:0}.message-tool-summary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.message-tool-status{margin-left:auto;color:var(--muted);white-space:nowrap;font-size:10px}.message-tool-error .message-tool-status,.message-tool-error .message-tool-indicator{color:var(--danger)}.message-tool-section{padding:0 12px 12px;color:var(--muted)}.message-tool-section strong{font-size:10px;font-weight:550}.message-tool-section pre{max-height:320px;overflow:auto;padding:10px;margin:6px 0 0;border-radius:6px;background:var(--panel);white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace}.message-tool-result-heading{display:flex;align-items:center;justify-content:space-between}@media(max-width:760px){.message-content h1{font-size:20px}.message-content h2{font-size:17px}.message-tool-summary{max-width:34vw}.message-code-block pre{padding:12px}}.message-file-open{border:0;padding:0;color:var(--accent);background:transparent;font:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:3px}:root{color-scheme:light;--bg: hsl(240 20% 99%);--surface: hsl(0 0% 100%);--panel: hsl(240 6% 95.5%);--text: hsl(240 10% 3.9%);--muted: hsl(240 4% 43%);--accent: hsl(19 63% 39%);--accent-text: hsl(0 0% 98%);--border: hsl(240 5% 78% / 65%);--hover: hsl(240 6% 92.5%);--subtle: hsl(240 5% 78% / 35%);--danger: hsl(0 72% 50%);--warning: hsl(38 92% 38%);--success: hsl(145 63% 32%);--shadow: 0 8px 28px hsl(240 10% 3.9% / 3.5%), 0 1px 3px hsl(240 10% 3.9% / 4%)}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--bg: hsl(240 9% 5.5%);--surface: hsl(240 7% 8.5%);--panel: hsl(240 4% 11%);--text: hsl(0 0% 98%);--muted: hsl(240 5% 67%);--accent: hsl(22 70% 55%);--accent-text: hsl(22 30% 8%);--border: hsl(240 4% 19%);--hover: hsl(240 4% 17%);--subtle: hsl(240 4% 19% / 65%);--danger: hsl(0 84% 65%);--warning: hsl(42 92% 62%);--success: hsl(142 64% 48%);--shadow: 0 8px 28px #0002, 0 1px 3px #0003}}*{box-sizing:border-box}[hidden]{display:none!important}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit}button{-webkit-tap-highlight-color:transparent}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button svg{flex-shrink:0}.shell{display:flex;height:100dvh;overflow:hidden}.rail{width:248px;flex:0 0 248px;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--subtle);background:var(--panel)}.rail-head{display:flex;align-items:center;gap:8px;height:64px;padding:14px 16px;flex-shrink:0}.rail-head strong{font-size:15px;letter-spacing:-.4px;font-weight:650}.brand-mark,.welcome-mark{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--surface);border-radius:8px;width:28px;height:28px;color:var(--accent);flex-shrink:0}.hub-badge{color:var(--muted);font-size:10px;line-height:18px;padding-inline:5px;border:1px solid var(--border);border-radius:5px}button.icon-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;flex-shrink:0;padding:0;border:0;border-radius:7px;color:var(--muted);background:transparent;cursor:pointer}button.icon-button:hover:not(:disabled){background:var(--hover);color:var(--text)}.rail-head .sidebar-close{margin-left:auto;width:26px}.workbench-nav{display:flex;flex-direction:column;gap:3px;padding:0 12px 18px}.nav-button{display:flex;align-items:center;gap:10px;min-height:36px;padding:8px 10px;text-align:left;color:var(--muted);background:transparent;border:0;border-radius:8px;cursor:pointer;font-size:13px}.nav-button:hover,.nav-button.active{background:var(--hover);color:var(--text)}.nav-button.active{font-weight:550}.nav-button.new-chat-button{margin-bottom:10px;color:var(--text);background:var(--surface);border:1px solid var(--border);box-shadow:0 1px 2px #00000004}.nav-button.new-chat-button:hover{border-color:var(--muted)}.rail-section-label{color:var(--muted);font-size:11px;font-weight:550;margin:0 22px 8px}.workspace-button{display:flex;align-items:center;gap:9px;margin:0 12px;padding:9px 10px;color:var(--text);border:0;background:transparent;border-radius:8px;min-width:0;text-align:left;font-size:12px}button.workspace-button{cursor:pointer}button.workspace-button:hover{background:var(--hover)}.workspace-button>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.workspace-button>svg{width:16px;color:var(--muted);flex-shrink:0}.workspace-button>svg:last-child{width:12px}.history-label{display:flex;justify-content:space-between;margin-top:24px}.sessions{flex:1;min-height:0;overflow-y:auto;list-style:none;margin:0;padding:0 12px 16px}.sessions .empty{padding:12px 10px;color:var(--muted);font-size:12px;line-height:1.7}.session{width:100%;display:flex;flex-direction:column;gap:5px;margin:2px 0;text-align:left;color:var(--text);background:transparent;border:0;border-radius:8px;padding:10px;cursor:pointer}.session:hover,.session.active{background:var(--hover)}.session-title{font-size:12px;line-height:1.5;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.session-meta{font-size:10px;color:var(--muted)}.rail-footer{padding:10px 12px 12px;border-top:1px solid var(--subtle)}.host-label{display:flex;gap:7px;align-items:center;color:var(--muted);font-size:10px;padding:2px 10px 8px}.dot{display:inline-block;flex:0 0 6px;width:6px;height:6px;border-radius:50%;background:var(--muted)}.dot.open{background:var(--success)}.dot.connecting{background:var(--warning)}.dot.closed{background:var(--danger)}.account-button{display:flex;width:100%;align-items:center;gap:10px;color:var(--text);background:transparent;border:0;border-radius:8px;text-align:left;padding:8px 10px;cursor:pointer}.account-button:hover{background:var(--hover)}.account-avatar{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:var(--surface);border:1px solid var(--border);font-size:11px;flex-shrink:0}.account-copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}.account-copy strong{font-size:12px;font-weight:550;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.account-copy>span{color:var(--muted);font-size:10px}.account-button>svg{width:12px;color:var(--muted)}.workbench-main{display:flex;flex:1;flex-direction:column;min-width:0;min-height:0}.workbench-topbar{flex-shrink:0;display:flex;height:54px;align-items:center;gap:10px;padding:0 20px;border-bottom:1px solid var(--subtle)}.topbar-context{display:flex;flex:1;min-width:0;flex-direction:column;gap:2px}.topbar-project{font-size:12px;font-weight:500;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.topbar-title{color:var(--muted);font-size:11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.connection-pill{display:inline-flex;align-items:center;gap:6px;font-size:10px;color:var(--muted);margin-left:auto;white-space:nowrap}.sidebar-backdrop{display:none}.chat{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.banner{padding:8px 20px;font-size:12px;color:var(--warning);background:color-mix(in srgb,var(--warning) 7%,transparent);border-bottom:1px solid var(--subtle);flex-shrink:0;line-height:1.6}.banner.goal{align-self:stretch;border:1px solid var(--border);border-radius:8px}.banner .ghost{margin-left:8px;padding:2px 8px}.messages{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:28px 24px 16px}.transcript{max-width:736px;width:100%;display:flex;flex-direction:column;gap:18px;margin:0 auto}.chat-empty .messages{display:flex;padding-top:32px}.chat-empty .transcript{justify-content:center}.empty-chat{text-align:center;padding:24px 0 32px}.welcome-mark{width:44px;height:44px;border-radius:13px;margin-bottom:22px;box-shadow:var(--shadow)}.welcome-mark svg{width:25px;height:25px}.empty-chat h1{font-size:clamp(24px,2.5vw,32px);margin:0 0 12px;letter-spacing:-.8px;font-weight:550}.empty-chat p{color:var(--muted);font-size:13px;line-height:1.7;margin:0 0 20px}.welcome-workspace{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:11px;max-width:100%;overflow-wrap:anywhere}.welcome-workspace svg{width:14px;flex-shrink:0}.msg{max-width:100%;font-size:14px;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}.msg.user{align-self:flex-end;max-width:88%;padding:10px 16px;background:var(--panel);border-radius:16px}.msg.assistant{align-self:stretch;padding:3px 0}.msg.tool{align-self:stretch;color:var(--muted);font-size:12px;padding:2px 0}.msg.tool .tool-result{max-height:280px;margin:8px 0 0;overflow:auto;padding:12px;font-family:ui-monospace,monospace;white-space:pre-wrap;background:var(--panel);border:1px solid var(--subtle);border-radius:8px}.msg.tool details>summary{cursor:pointer}.msg.tool-error{color:var(--danger)}.msg.info{align-self:stretch;color:var(--muted);font-size:12px}.msg.error{align-self:stretch;background:color-mix(in srgb,var(--danger) 8%,transparent);border-radius:8px;padding:10px 14px;color:var(--danger)}.cursor{animation:blink 1s step-start infinite;color:var(--accent)}@keyframes blink{50%{opacity:0}}.composer-wrap{flex-shrink:0;width:100%;max-width:784px;padding:12px 24px 20px;margin:0 auto}.chat-empty .composer-wrap{margin-bottom:clamp(36px,13vh,180px)}.composer{padding:12px;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:var(--shadow);transition:border-color .15s ease,box-shadow .15s ease}.composer:focus-within{border-color:color-mix(in srgb,var(--accent) 55%,var(--border));box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 7%,transparent),var(--shadow)}.composer textarea{display:block;width:100%;resize:none;min-height:64px;max-height:180px;overflow-y:auto;color:var(--text);background:transparent;border:0;border-radius:0;padding:6px 8px 10px;line-height:1.65;font-size:14px}.composer textarea:focus{outline:none}.composer textarea::placeholder{color:var(--muted)}.composer-toolbar{display:flex;align-items:center;gap:6px;padding:2px 1px 0;min-width:0}.model-button{display:flex;align-items:center;gap:5px;min-width:0;max-width:50%;padding:7px;border:0;border-radius:7px;background:transparent;color:var(--muted);font-size:11px;cursor:pointer}.model-button:hover{background:var(--panel);color:var(--text)}.model-button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-button svg{width:10px;transform:rotate(90deg)}.composer-run-status{font-size:11px;color:var(--muted);margin-left:auto;white-space:nowrap}button.send,button.stop{border:0;border-radius:8px;padding:9px 16px;font-size:13px;font-weight:550;cursor:pointer}button.send{background:var(--accent);color:var(--accent-text)}button.stop{color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,var(--surface))}button.composer-submit{display:grid;place-items:center;flex:0 0 32px;width:32px;height:32px;border-radius:50%;padding:0;margin-left:4px}.composer-submit.send{background:var(--text);color:var(--bg)}.composer-submit.stop{color:var(--text);background:var(--panel);border:1px solid var(--border)}.composer-caption{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:10px;padding:10px 6px 0}.attachments{display:flex;flex-wrap:wrap;gap:6px;color:var(--muted);font-size:12px;padding:0 6px 8px}.attachment{display:inline-flex;align-items:center;gap:5px;max-width:100%;overflow-wrap:anywhere;padding:4px 7px;background:var(--panel);border:1px solid var(--border);border-radius:6px;font-size:11px;margin-top:4px}.msg .attachment{display:flex}.attachment svg{width:13px;flex-shrink:0}.attachment button.ghost{padding:0 4px;border:0}.approval{align-self:stretch;border:1px solid color-mix(in srgb,var(--warning) 60%,var(--border));background:color-mix(in srgb,var(--warning) 5%,var(--surface));border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}.approval-title{font-size:13px;font-weight:600}.approval-title em{color:var(--muted);font-style:normal;font-weight:400}.approval-desc{font-size:13px;color:var(--muted)}.approval-summary{font-size:13px;overflow-wrap:anywhere}.approval-raw>summary{color:var(--muted);cursor:pointer;font-size:12px}.approval-args{margin:8px 0 0;font-size:12px;background:var(--panel);border-radius:8px;padding:10px;overflow-x:auto;max-height:180px}.approval-answer{background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:10px;min-height:64px}.approval-actions{display:flex;gap:8px}.approval-actions button{min-height:36px}button.ghost{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:8px;padding:6px 10px;cursor:pointer}button.ghost:hover:not(:disabled){background:var(--hover)}.auth-page{min-height:100%;display:grid;place-items:center;padding:24px}.auth-card{width:100%;max-width:420px;padding:28px;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:var(--shadow)}.auth-brand{font-size:21px;font-weight:650;margin-bottom:28px}.auth-brand span{font-size:12px;font-weight:500;color:var(--accent);border:1px solid var(--border);border-radius:5px;padding:2px 5px;vertical-align:middle}.auth-card h1{font-size:20px;margin:0}.auth-card p,.muted{color:var(--muted);font-size:13px;line-height:1.6}.auth-card form{display:flex;flex-direction:column;gap:14px}.auth-card label{display:flex;flex-direction:column;gap:7px;font-size:13px}.auth-card label span,.auth-card small{color:var(--muted);font-size:12px}.auth-card input{width:100%;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:11px}.auth-card .send{min-height:42px}.form-error{color:var(--danger)!important;overflow-wrap:anywhere}.devices-dialog{color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:22px;width:min(560px,calc(100% - 32px));max-height:calc(100% - 32px)}.devices-dialog::backdrop{background:#0006}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.dialog-head h2{font-size:18px;margin:0}.device-list{margin:20px 0;padding:0;list-style:none}.device-list li{display:flex;align-items:center;gap:12px;padding:14px 0;border-top:1px solid var(--border)}.device-list li div{flex:1;min-width:0;overflow-wrap:anywhere}.device-list strong{font-size:13px}.device-list span{display:block;margin-top:5px;font-size:11px;color:var(--muted)}.device-list button{flex-shrink:0;font-size:12px}.devices-dialog>.stop{padding:10px 14px}@media(max-width:760px){.rail{position:fixed;inset:0 auto 0 0;z-index:30;width:min(280px,calc(100vw - 48px));box-shadow:10px 0 40px #0002}.sidebar-backdrop{display:block;position:fixed;inset:0;background:#0005;z-index:29}.rail-head{padding-top:max(14px,env(safe-area-inset-top))}.rail-footer{padding-bottom:max(12px,env(safe-area-inset-bottom))}.workbench-topbar{padding:0 12px;gap:8px;height:50px}.messages{padding:24px 18px 12px}.transcript{gap:16px}.msg{font-size:14px}.msg.user{max-width:92%}.composer-wrap{padding:10px 12px max(12px,env(safe-area-inset-bottom))}.chat-empty .composer-wrap{margin-bottom:clamp(18px,10vh,80px)}.empty-chat{padding:20px 12px}.empty-chat p{font-size:12px}.composer{padding:10px;border-radius:16px}.composer textarea{font-size:16px}.composer-caption{justify-content:center;font-size:9px}.composer-caption>span:last-child{display:none}.composer-run-status{font-size:10px}.model-button{max-width:47%;font-size:10px}.banner{padding:8px 14px}}@media(max-height:640px){.chat-empty .composer-wrap{margin-bottom:0}.empty-chat{padding:12px 0}.welcome-mark{margin-bottom:12px}}@media(prefers-reduced-motion:reduce){.cursor{animation:none}.composer{transition:none}}#app{height:100%}.desktop-sidebar-controls{display:grid;gap:10px;padding:8px 12px 12px;border-bottom:1px solid var(--border)}.desktop-project-picker,.desktop-approval-scope label,.desktop-chat-controls label{display:grid;gap:5px;font-size:12px;color:var(--muted)}.desktop-project-picker select,.desktop-approval-scope select,.desktop-chat-controls select{min-width:0;min-height:34px;max-width:100%;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);padding:4px 8px}.desktop-sidebar-actions{display:flex;flex-wrap:wrap;gap:6px}.desktop-root-picker,.desktop-cli-sessions{min-width:0;max-height:38dvh;overflow:auto}.desktop-root-picker summary,.desktop-cli-sessions summary{cursor:pointer;padding:6px 0;font-size:12px;color:var(--muted)}.desktop-cli-sessions .session,.desktop-root-picker .session{width:100%;margin-top:5px}.desktop-chat-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0 16px;font-size:12px}.desktop-room-label{min-width:0;overflow-wrap:anywhere}.desktop-mode-options,.desktop-ask-options{display:grid;gap:8px;margin:12px 0}.desktop-mode-options .library-button{display:grid;gap:5px;text-align:left;white-space:normal}.desktop-mode-options span{font-size:12px;font-weight:400;color:var(--muted)}.desktop-approval-scope{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}.desktop-ask-options .library-button{white-space:normal;text-align:left}.session-unread{color:var(--accent)}.goal{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.goal>span{flex:1;min-width:0}.desktop-connection{min-height:100dvh;display:grid;place-items:center;padding:24px;background:var(--bg);color:var(--text)}.desktop-connection-card{width:min(400px,100%);padding:26px;border:1px solid var(--border);border-radius:18px;background:var(--surface)}.desktop-connection-card h1{margin:0 0 12px;font-size:22px}.desktop-connection-card p{line-height:1.7;color:var(--muted)}.desktop-cli-path{margin:4px 0 10px;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.projects-page{max-width:1120px;min-height:100dvh;margin:auto;padding:48px 28px;color:var(--text, #e5e7eb)}.projects-header{margin-bottom:32px}.projects-header h1{margin:24px 0 10px;font-size:28px;letter-spacing:-.04em}.projects-header p,.project-date,.project-empty{color:var(--muted, #9ca3af);line-height:1.6}.project-create{display:flex;align-items:end;gap:12px;max-width:600px;margin:24px 0 32px}.project-create label{display:grid;flex:1;gap:8px;font-size:13px}.project-create input{width:100%;padding:11px 12px;border:1px solid var(--border, #303541);border-radius:8px;background:var(--surface, #171b24);color:inherit}.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:16px}.project-card{padding:22px;border:1px solid var(--border, #303541);border-radius:14px;background:var(--surface, #171b24)}.project-card-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.project-card h2{font-size:17px;margin:0;overflow-wrap:anywhere}.project-status{flex-shrink:0;padding:4px 8px;border-radius:20px;color:var(--muted, #9ca3af);background:#ffffff08;font-size:12px}.project-status.running{color:var(--success, #70d4b3);background:#4fc69d12}.project-status.error{color:var(--danger, #fb9d9d)}.project-date{font-size:12px;margin:12px 0 22px}.project-stop-confirm{position:fixed;z-index:100;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;color:inherit;max-width:480px;width:calc(100% - 40px);padding:28px;background:var(--surface, #171b24);border:1px solid var(--border, #303541);border-radius:16px;box-shadow:var(--shadow)}.project-stop-confirm::backdrop{background:#0009}.project-stop-confirm h2{margin-top:0;font-size:19px}.project-stop-confirm p{line-height:1.7}.project-connection-note{position:fixed;z-index:90;top:0;left:50%;transform:translate(-50%);max-width:min(700px,90vw);padding:8px 14px;background:#453919;color:#ffe6a0;border-radius:0 0 8px 8px;font-size:12px}@media(max-width:600px){.projects-page{padding:28px 18px}.project-create{align-items:stretch;flex-direction:column}}
1
+ .environment-trigger{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.environment-dialog{width:min(560px,calc(100vw - 24px));max-height:calc(100dvh - 32px);box-sizing:border-box;overflow:auto;border:1px solid var(--border, #777);border-radius:16px;padding:20px;background:var(--bg, #151719);color:var(--text, #f5f5f5)}.environment-dialog::backdrop{background:#0008}.environment-dialog header{display:flex;align-items:center;justify-content:space-between;gap:12px}.environment-dialog h2{margin:0;font-size:20px}.environment-dialog p{line-height:1.6}.environment-location,.environment-list small{overflow-wrap:anywhere}.environment-list{padding:0;list-style:none;display:grid;gap:12px}.environment-list li{display:flex;align-items:center;gap:8px;padding-block:10px;border-bottom:1px solid var(--border, #777)}.environment-list li>div{flex:1;min-width:0}.environment-list small{display:block;margin-top:4px;opacity:.7}.environment-dialog form{display:grid;gap:12px;margin-top:20px}.environment-dialog label{display:grid;gap:6px}.environment-dialog input{box-sizing:border-box;width:100%;min-height:44px;padding:10px;border:1px solid var(--border, #777);border-radius:8px;background:transparent;color:inherit;font-size:16px}.environment-dialog button{min-height:44px}.environment-hint{font-size:12px;opacity:.7}@media(max-width:420px){.environment-list li{flex-wrap:wrap}.environment-list li>div{flex-basis:100%}}.hub-skills{max-width:1060px;width:100%;margin:0 auto;padding:36px 40px 64px;color:var(--text);box-sizing:border-box}.skills-heading,.skills-heading>div:last-child,.skills-actions,.skills-filter,.skills-card-heading,.skills-workspace-panel>header{display:flex;align-items:center;gap:10px}.skills-heading{justify-content:space-between;gap:20px;margin-bottom:28px}.skills-heading h1{font-size:26px;letter-spacing:-.7px;margin:6px 0 8px}.skills-heading p,.skills-eyebrow,.skills-count,.skills-source,.skills-progress{color:var(--muted);font-size:13px}.skills-heading p{margin:0;line-height:1.6}.skills-eyebrow{font-size:11px;letter-spacing:.06em}.skills-actions{flex-wrap:wrap}.skills-filter{margin:24px 0 12px}.skills-filter>label{flex:1}.hub-skills input:not([type=radio]),.hub-skills select,.hub-skills textarea{box-sizing:border-box;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font:inherit;min-width:0}.hub-skills input:not([type=radio]),.hub-skills textarea{width:100%}.hub-skills input:focus,.hub-skills textarea:focus,.hub-skills select:focus{outline:2px solid var(--accent);outline-offset:2px}.hub-skills input:read-only,.hub-skills textarea:read-only{background:var(--panel)}.hub-skills label>span:first-child{display:block;font-size:12px;font-weight:600;margin-bottom:8px}.skills-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.skills-card{border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:18px;min-width:0;display:flex;flex-direction:column}.skills-card-heading{justify-content:space-between;align-items:flex-start}.skills-card h2{font-size:15px;margin:0 0 10px;overflow-wrap:anywhere}.skills-card .config-badge{margin:0 5px 4px 0}.skills-card>p{font-size:13px;line-height:1.65;overflow-wrap:anywhere}.skills-card footer{margin-top:auto;padding-top:12px;gap:4px}.skills-remove{margin-left:auto}.skills-danger{background:var(--danger);border-color:var(--danger);color:#fff}.skills-source{font-family:ui-monospace,monospace;font-size:11px!important}.skills-empty{padding:48px 20px;text-align:center;border:1px dashed var(--border);border-radius:12px}.skills-empty h2{font-size:18px}.skills-empty p{font-size:14px;color:var(--muted)}.skills-workspace-panel{margin:20px 0 28px;padding:24px;border:1px solid var(--border);border-radius:14px;background:var(--panel)}.skills-workspace-panel>header{justify-content:space-between;margin-bottom:20px}.skills-workspace-panel h2{font-size:18px;margin:0;overflow-wrap:anywhere}.skills-workspace-panel h2:focus{outline:none}.skills-workspace-panel fieldset{padding:0;border:0;min-width:0;margin:0}.skills-workspace-panel label{display:block;margin:0 0 18px}.skills-workspace-panel textarea{font:12px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;min-height:160px;tab-size:2}.skills-workspace-panel small{display:block;color:var(--muted);font-size:11px;line-height:1.6;margin-top:6px}.skills-editor .skills-actions{justify-content:space-between}.skills-editor .config-help{max-width:70%}.skills-unsaved{display:inline!important;margin-left:10px;color:var(--accent)!important}.skills-field-error{color:var(--danger);font-size:12px}.skills-source-choices{max-height:350px;overflow:auto;margin:12px 0 20px}.skills-source-choices label{display:flex;align-items:flex-start;gap:12px;padding:14px;border:1px solid var(--border);border-radius:8px;cursor:pointer;margin-bottom:8px}.skills-source-choices input{margin-top:4px;accent-color:var(--accent)}.skills-source-choices strong{font-size:14px}.skills-source-choices small{overflow-wrap:anywhere}.skills-import-preview a{color:var(--accent);overflow-wrap:anywhere}.skills-update-preview>p,.skills-remove-confirm>p{font-size:13px;line-height:1.75}.skills-update-preview details{margin:16px 0}.skills-update-preview ul{list-style:none;padding:0;max-height:220px;overflow:auto}.skills-update-preview li{font-size:12px;display:flex;justify-content:space-between;gap:12px;padding:5px 0}.skills-update-preview li code{overflow-wrap:anywhere}.skills-update-preview li span{white-space:nowrap;color:var(--muted)}.skills-directories{margin-top:28px;font-size:12px;color:var(--muted);line-height:1.8}.skills-directories summary{cursor:pointer;color:var(--text)}.skills-directories code{overflow-wrap:anywhere}.skills-progress{padding:0 2px}.hub-skills button:disabled{opacity:.5;cursor:not-allowed}.hub-skills .config-switch{flex-shrink:0}.hub-skills .config-help{font-size:12px;color:var(--muted);line-height:1.6}@media(max-width:1000px){.skills-heading{align-items:flex-start;flex-direction:column}.skills-list{grid-template-columns:1fr}}@media(max-width:600px){.hub-skills{padding:24px 16px 44px}.skills-heading{gap:16px}.skills-heading h1{font-size:24px}.skills-heading .skills-actions{width:100%}.skills-heading .skills-actions button{flex:1}.skills-filter{flex-wrap:wrap}.skills-filter>label{flex-basis:100%}.skills-filter select{flex:1}.skills-workspace-panel{padding:16px}.skills-editor .config-help{max-width:100%}.skills-editor .skills-actions{align-items:flex-start;flex-direction:column}.skills-card{padding:16px}.skills-card footer{flex-wrap:wrap}.skills-update-preview li{flex-direction:column;gap:2px}}.hub-mcp{min-width:0}.hub-mcp-toolbar{margin-top:0;flex-wrap:wrap}.hub-mcp-toolbar-actions{display:flex;gap:6px}.hub-mcp-list{display:flex;flex-direction:column;gap:12px}.hub-mcp-card{padding:18px 20px}.hub-mcp-card-head{display:flex;align-items:center;gap:12px}.hub-mcp-endpoint{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:17px 0 10px 44px;font-size:11px}.hub-mcp-endpoint code{overflow-wrap:anywhere;color:var(--text)}.hub-mcp-endpoint>span{color:var(--muted);font-size:10px}.hub-mcp-metadata{display:flex;align-items:center;flex-wrap:wrap;gap:10px;color:var(--muted);font-size:10px;margin-left:44px}.hub-mcp-card-actions{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin:16px 0 0 44px}.hub-mcp .hub-mcp-remove{color:var(--danger, #c5443c)}.hub-mcp-delete{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:12px;margin-top:15px;background:var(--panel);border-radius:8px;font-size:11px}.hub-mcp-delete>div{display:flex;gap:6px}.hub-mcp-editor-card{padding:20px;margin-bottom:16px}.hub-mcp-editor-card>h2{margin:0 0 18px}.hub-mcp-editor{margin-top:20px}.hub-mcp-editor-card .hub-mcp-editor{margin-top:0}.hub-mcp textarea{display:block;width:100%;min-width:0;padding:9px 10px;border:1px solid var(--border);border-radius:7px;background:var(--surface, var(--bg));color:var(--text);font-family:inherit;font-size:12px;line-height:1.6;resize:vertical}.hub-mcp textarea:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.hub-mcp textarea::placeholder{color:var(--muted);opacity:.75}.hub-mcp textarea:disabled{opacity:.55}.hub-mcp .hub-mcp-check{display:flex;flex-direction:row;align-items:flex-start;gap:8px;font-size:11px;margin:15px 0}.hub-mcp .hub-mcp-check input{width:14px;min-width:14px;height:14px;min-height:14px;margin:2px 0 0;padding:0;accent-color:var(--accent)}.hub-mcp-check span{flex:1}.hub-mcp-reuse{padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.hub-mcp-keys{margin:20px 0}.hub-mcp-key-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.hub-mcp-key-heading h3{margin:0;font-size:12px}.hub-mcp-key-row{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr) auto;gap:7px;align-items:center;margin-top:7px}.hub-mcp-key-row label{display:block;min-width:0}.hub-mcp-key-removed label{opacity:.5}.hub-mcp-key-removed label:first-child input{text-decoration:line-through}.hub-mcp-advanced{border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:13px 0;margin:19px 0}.hub-mcp-advanced>summary{cursor:pointer;font-size:12px;color:var(--muted)}.hub-mcp-advanced[open]>summary{margin-bottom:16px}.hub-mcp-probing{margin:16px 0 0;font-size:11px;color:var(--muted)}.hub-mcp-probe-result{margin-top:17px;padding:13px 15px;border-radius:8px;border:1px solid var(--border);background:var(--panel);font-size:11px}.hub-mcp-probe-summary{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.hub-mcp-probe-summary strong{font-weight:500}.hub-mcp-probe-summary>span{color:var(--muted);font-size:10px}.hub-mcp-probe-result>p{margin:7px 0 0;color:var(--muted)}.hub-mcp-probe-ok .hub-mcp-probe-summary strong{color:var(--accent)}.hub-mcp-probe-error .hub-mcp-probe-summary strong{color:var(--danger, #c5443c)}.hub-mcp-probe-result details{margin-top:12px}.hub-mcp-probe-result summary{cursor:pointer}.hub-mcp-probe-result ul{list-style:none;padding:0;margin:10px 0 0;max-height:300px;overflow-y:auto}.hub-mcp-probe-result li{padding:10px 0;border-top:1px solid var(--border)}.hub-mcp-probe-result li>div{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.hub-mcp-probe-result li p{color:var(--muted);margin:5px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}.hub-mcp-explanation{margin-top:24px;line-height:1.8}.hub-mcp-removed{margin-top:20px;color:var(--muted);font-size:11px}.hub-mcp-removed summary{cursor:pointer}.hub-mcp-removed-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0}@media(max-width:700px){.hub-mcp-card,.hub-mcp-editor-card{padding:16px}.hub-mcp-endpoint,.hub-mcp-metadata,.hub-mcp-card-actions{margin-left:0}.hub-mcp-toolbar .config-search{width:100%}.hub-mcp-toolbar-actions{margin-left:auto}.hub-mcp-key-row{grid-template-columns:minmax(0,1fr) auto;padding-bottom:8px}.hub-mcp-key-row label:first-child{grid-column:1/-1}.hub-mcp-probe-summary{flex-wrap:wrap;gap:4px}.hub-mcp .config-form-actions{flex-wrap:wrap}}.hub-settings{flex:1;min-height:0;overflow-y:auto;width:min(920px,100%);margin:0 auto;padding:40px 42px 56px;color:var(--text);font-size:13px;line-height:1.55;overflow-wrap:anywhere}.hub-settings *{box-sizing:border-box}.hub-settings-heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:28px}.hub-settings-eyebrow{display:block;color:var(--muted);font-size:11px;margin-bottom:6px;letter-spacing:.04em}.hub-settings h1{margin:0;font-size:26px;font-weight:600;letter-spacing:-.035em}.hub-settings-heading p{margin:7px 0 0;color:var(--muted)}.hub-settings h2{font-size:14px;font-weight:600}.hub-settings h3{font-size:13px;font-weight:600;margin:0 0 16px}:is(.hub-settings,.hub-skills) .config-button{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;gap:5px;border:1px solid var(--border);border-radius:7px;padding:7px 11px;min-height:33px;background:var(--surface, var(--bg));color:var(--text);font:inherit;font-size:12px;line-height:1.3;cursor:pointer;white-space:nowrap}:is(.hub-settings,.hub-skills) .config-button:hover{background:var(--hover, var(--panel))}:is(.hub-settings,.hub-skills) .config-button-quiet{background:transparent;border-color:transparent;color:var(--muted)}:is(.hub-settings,.hub-skills) .config-button-primary{background:var(--accent);color:var(--accent-text, white);border-color:var(--accent)}:is(.hub-settings,.hub-skills) .config-button-primary:hover{filter:brightness(.94);background:var(--accent)}.hub-settings button:disabled{opacity:.45;cursor:default}:is(.hub-settings,.hub-skills) button:focus-visible,:is(.hub-settings,.hub-skills) summary:focus-visible,:is(.hub-settings,.hub-skills) input:focus-visible,:is(.hub-settings,.hub-skills) select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.config-card{border:1px solid var(--border);border-radius:12px;background:var(--surface, var(--bg))}.config-workspace-card{display:flex;align-items:flex-start;gap:14px;padding:20px;border-radius:12px;background:var(--panel)}.config-workspace-card>div{min-width:0;flex:1}.config-workspace-card strong{display:block;font-weight:500}.config-workspace-card code{display:block;margin:6px 0;font-size:11px;word-break:break-all}.config-workspace-card p{margin:0;color:var(--muted);font-size:12px}.config-workspace-icon,.config-row-icon,.config-model-icon,.config-skill-icon{display:grid;place-items:center;flex-shrink:0;width:32px;height:32px;border-radius:8px;background:var(--panel);color:var(--muted);font-size:20px}.config-workspace-icon{background:var(--surface, var(--bg))}:is(.hub-settings,.hub-skills) .config-badge{display:inline-flex;align-items:center;flex-shrink:0;padding:2px 7px;min-height:21px;border:1px solid var(--border);border-radius:5px;color:var(--muted);font-size:10px;font-weight:400;white-space:nowrap}:is(.hub-settings,.hub-skills) .config-badge-accent{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 25%,transparent);background:color-mix(in srgb,var(--accent) 6%,transparent)}.config-section-title{margin:28px 0 12px}.config-overview-list{overflow:hidden}.hub-settings .config-overview-row{display:flex;align-items:center;gap:13px;padding:17px 20px;width:100%;background:transparent;text-align:left;border:none;border-radius:0;color:inherit;font:inherit}.hub-settings button.config-overview-row{cursor:pointer}.hub-settings button.config-overview-row:hover{background:var(--hover, var(--panel))}.config-overview-row+.config-overview-row{border-top:1px solid var(--border)}.config-row-copy{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px}.config-row-copy strong{font-weight:500}.config-row-copy>span{color:var(--muted);font-size:11px}.config-chevron{font-size:21px;color:var(--muted)}.config-explanation{margin-top:28px}.config-explanation h2{margin:0 0 8px}.config-explanation p{color:var(--muted);font-size:12px;margin:8px 0;line-height:1.8}.config-scope-note{border-top:1px solid var(--border);padding-top:18px;margin:32px 0 0;color:var(--muted);font-size:11px}.config-message{padding:10px 13px;border:1px solid var(--border);border-radius:8px;margin:0 0 18px;font-size:12px}.config-error{color:var(--danger, #c5443c);background:color-mix(in srgb,var(--danger, #c5443c) 6%,transparent);border-color:color-mix(in srgb,var(--danger, #c5443c) 22%,transparent)}.config-success{color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,transparent)}.config-loading,.config-help{color:var(--muted);font-size:11px}.config-section-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:26px 0 12px}.config-section-heading h2{margin:0}.config-count{font-size:11px;font-weight:400;color:var(--muted);margin-left:5px}.config-defaults{padding:20px}.hub-settings fieldset{margin:0;padding:0;border:0;min-width:0}.hub-settings legend{padding:0;margin:0 0 15px;font-weight:500;font-size:13px}.config-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.config-form-grid label{display:flex;flex-direction:column;align-items:stretch;gap:7px;min-width:0;font-size:11px}.hub-settings input,.hub-settings select{display:block;width:100%;min-width:0;min-height:35px;padding:8px 10px;border:1px solid var(--border);border-radius:7px;background:var(--surface, var(--bg));color:var(--text);font:inherit;font-size:12px}.hub-settings input::placeholder{color:var(--muted);opacity:.75}.hub-settings input[readonly]{color:var(--muted);background:var(--panel)}.hub-settings input:disabled,.hub-settings select:disabled{opacity:.6}.config-form-grid small{color:var(--muted);font-size:10px}.config-full-width{grid-column:1 / -1}.config-form-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:14px}.config-form-footer p{margin:0}.config-form-actions{display:flex;justify-content:flex-end;gap:6px;margin-top:20px}.config-connection-list{display:flex;flex-direction:column;gap:12px}.config-connection-card,.config-editor-card{padding:18px 20px}.config-editor-card{margin-bottom:12px}.config-connection-head{display:flex;align-items:center;gap:11px}.config-connection-facts{margin:18px 0 0 43px;font-size:11px}.config-connection-facts>div{display:grid;grid-template-columns:75px minmax(0,1fr);gap:12px;margin-top:7px}.config-connection-facts dt{color:var(--muted)}.config-connection-facts dd{margin:0;overflow-wrap:anywhere}.config-connection-editor{margin-top:18px}.config-field-meta{color:var(--muted);margin-left:5px;font-size:10px}.config-empty{padding:34px 24px;border:1px dashed var(--border);border-radius:12px;text-align:center}.config-empty>span{color:var(--muted);font-size:27px}.config-empty h3{margin:9px 0 6px}.config-empty p{max-width:440px;margin:0 auto;color:var(--muted);font-size:12px}.config-skills-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}.config-search{position:relative;display:block;width:min(360px,100%)}.config-search>span{position:absolute;top:5px;left:10px;font-size:21px;color:var(--muted)}.hub-settings .config-search input{padding-left:33px}.config-skills-toolbar>.config-help{white-space:nowrap}.config-skill-list{overflow:hidden}.config-skill+.config-skill{border-top:1px solid var(--border)}.config-skill-row{display:flex;align-items:flex-start;gap:12px;padding:18px 20px}.config-skill-copy{flex:1;min-width:0}.config-skill-copy>strong{display:block;font-size:12px;font-weight:500}.config-skill-copy>p{margin:4px 0 9px;color:var(--muted);font-size:11px;line-height:1.6}.config-skill-meta{display:flex;align-items:center;gap:12px}.hub-settings .config-text-button{background:none;border:0;padding:0;color:var(--muted);font:inherit;font-size:10px;cursor:pointer}.hub-settings .config-text-button:hover{color:var(--text)}:is(.hub-settings,.hub-skills) .config-switch{flex-shrink:0;width:29px;height:17px;min-height:0;border:none;border-radius:999px;padding:2px;background:var(--border);margin-top:4px;cursor:pointer}:is(.hub-settings,.hub-skills) .config-switch>span{display:block;height:13px;width:13px;border-radius:50%;background:#fff;transform:translate(0);box-shadow:0 1px 2px #0002;transition:transform .12s ease}:is(.hub-settings,.hub-skills) .config-switch[aria-checked=true]{background:var(--accent)}:is(.hub-settings,.hub-skills) .config-switch[aria-checked=true]>span{transform:translate(12px)}.config-skill-detail{margin:0 20px 18px 64px;padding:14px 16px;background:var(--panel);border-radius:8px}.config-skill-detail pre{margin:0;max-height:430px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.8 ui-monospace,SFMono-Regular,Menlo,monospace}.config-skill-detail>p{color:var(--muted);font-size:11px;margin:0}.config-detail-error{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--danger, #c5443c);font-size:11px}.config-directories{margin-top:24px;font-size:11px;color:var(--muted)}.config-directories summary{cursor:pointer;width:fit-content}.config-directories p{margin:12px 0 8px}.config-directories ul{padding-left:16px;margin:0}.config-directories li{margin-top:6px}.config-directories code{font-size:10px;word-break:break-all}.config-mcp-row{display:flex;align-items:center;gap:12px;padding:17px 20px}.config-mcp-row+.config-mcp-row{border-top:1px solid var(--border)}.config-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:700px){.hub-settings{padding:24px 20px 40px}.hub-settings-heading{gap:12px;margin-bottom:24px}.hub-settings h1{font-size:23px}.config-workspace-card{flex-wrap:wrap;padding:17px}.config-workspace-card>.config-badge{margin-left:46px}.config-form-grid{grid-template-columns:minmax(0,1fr)}.config-form-footer{align-items:flex-start;flex-direction:column;gap:12px}.config-defaults,.config-connection-card,.config-editor-card{padding:17px}.config-connection-facts{margin-left:0}.config-connection-facts>div{grid-template-columns:65px minmax(0,1fr);gap:8px}.config-skill-row{padding:16px;gap:10px}.config-skill-icon{display:none}.config-skill-detail{margin:0 16px 16px;padding:12px}.config-skills-toolbar{flex-wrap:wrap;gap:9px}.config-search{width:100%}.config-section-heading{gap:8px}.config-mcp-row{padding:16px}}@media(prefers-reduced-motion:reduce){:is(.hub-settings,.hub-skills) .config-switch>span{transition:none}}.config-model-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:16px 18px 0}.config-remove-connection{margin-left:auto}.config-probe-result{display:flex;flex-direction:column;gap:4px;margin:12px 18px 0;padding:10px 12px;border:1px solid var(--border);border-radius:8px;color:var(--muted);background:var(--panel)}.config-probe-result.is-success{color:var(--success)}.config-probe-result small{font-size:11px;color:var(--muted)}.config-remove-confirm{margin:16px 18px 0;padding:16px;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.config-remove-confirm h3{margin-bottom:8px}.config-remove-confirm p{font-size:12px;line-height:1.6}.config-remove-confirm label{display:block;margin:14px 0}.config-remove-confirm label>span{display:block;margin-bottom:7px;font-size:12px}.hub-settings .config-button-danger{background:var(--danger);border-color:var(--danger);color:#fff}.hub-settings .config-button-danger:hover{background:var(--danger);filter:brightness(.94)}.config-connection-editor .config-remove-confirm{margin:14px 0}@media(max-width:600px){.config-model-actions .config-help{flex-basis:100%;order:3}.config-model-actions,.config-probe-result,.config-remove-confirm{margin-left:14px;margin-right:14px}}.hub-library{height:100%;overflow:auto;padding:30px clamp(18px,4vw,52px) 44px}.library-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.library-heading h1{margin:0 0 8px;font-size:24px;font-weight:650;letter-spacing:-.5px}.library-heading p,.library-hint{margin:0;color:var(--muted);line-height:1.7;font-size:13px}.library-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;padding:7px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font-size:13px;text-decoration:none;cursor:pointer;white-space:nowrap}.library-button:hover{background:var(--hover)}.library-button.primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.library-button.danger{color:var(--danger)}.library-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.library-error{background:color-mix(in srgb,var(--danger) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--danger) 28%,var(--border));padding:12px 14px;border-radius:9px;margin:12px 0;overflow-wrap:anywhere}.library-empty{padding:32px 18px;text-align:center;color:var(--muted);line-height:1.8}.library-search input,.hub-library select,.library-title-input{width:100%;min-height:38px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);padding:8px 11px}.file-breadcrumbs{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:16px 0;color:var(--muted);font-size:13px}.file-breadcrumbs button{border:none;background:none;color:inherit;padding:4px;max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.file-breadcrumbs button:hover{color:var(--text);text-decoration:underline}.file-columns{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start}.file-columns.has-preview{grid-template-columns:minmax(230px,1fr) minmax(0,1.7fr)}.file-directory{border:1px solid var(--border);background:var(--surface);border-radius:12px;overflow:hidden}.file-directory .library-search{display:block;padding:12px;border-bottom:1px solid var(--subtle)}.file-directory .library-hint{padding:14px}.file-entry{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;text-align:left;border:none;border-bottom:1px solid var(--subtle);background:transparent;color:var(--text);padding:10px 14px;cursor:pointer}.file-entry:last-child{border-bottom:none}.file-entry:hover,.file-entry.selected{background:var(--hover)}.file-glyph{font-size:24px;line-height:1;color:var(--muted)}.file-entry-name{min-width:0;flex:1;overflow-wrap:anywhere;font-size:13px}.file-entry-size{color:var(--muted);font-size:11px;white-space:nowrap}.file-preview{min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.file-preview header{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:14px;border-bottom:1px solid var(--subtle);flex-wrap:wrap}.file-preview header strong{display:block;font-size:13px;overflow-wrap:anywhere}.file-preview header span{display:block;font-size:11px;color:var(--muted);margin-top:4px}.file-preview pre{max-height:65vh;overflow:auto;margin:0;padding:18px;font:12px/1.8 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre;tab-size:2}.file-preview>img{display:block;max-width:100%;max-height:65vh;object-fit:contain;margin:auto;padding:16px}.file-preview .library-hint{padding:12px 18px;border-top:1px solid var(--subtle)}.session-toolbar{display:flex;gap:12px;margin:20px 0}.session-toolbar .library-search{flex:1}.session-toolbar select{width:auto;min-width:110px}.session-history-list{border:1px solid var(--border);background:var(--surface);border-radius:12px;overflow:visible}.session-history-row{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--subtle);padding:17px 18px}.session-history-row:last-child{border-bottom:none}.session-history-info{flex:1;min-width:0}.session-history-title{border:none;padding:0;background:none;color:var(--text);text-align:left;font-weight:550;cursor:pointer;overflow-wrap:anywhere}.session-history-info p{color:var(--muted);font-size:12px;margin:6px 0 0;line-height:1.6;overflow-wrap:anywhere}.session-history-meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;color:var(--muted);font-size:11px}.session-history-editor{width:100%;display:flex;flex-direction:column;gap:14px;padding:18px;margin-bottom:18px;border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow-wrap:anywhere}.session-history-editor h2{margin:0 0 6px;font-size:16px}.session-history-editor label>span{display:block;margin-bottom:7px;font-size:13px}.session-history-editor .library-error{margin:0}.session-title-review{margin:0;color:var(--muted);font-size:13px;line-height:1.7}.session-title-review strong{color:var(--text)}.session-history-editor .library-error:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.session-load-more{display:flex;justify-content:center;padding:20px}.session-export{position:relative}.session-export summary{list-style:none}.session-export summary::-webkit-details-marker{display:none}.session-export>div{position:absolute;right:0;z-index:2;min-width:160px;padding:5px;margin-top:5px;border:1px solid var(--border);border-radius:9px;background:var(--surface);box-shadow:var(--shadow)}.session-export a{display:block;color:var(--text);text-decoration:none;font-size:12px;white-space:nowrap;padding:10px;border-radius:5px}.session-export a:hover{background:var(--hover)}.navigation-prompt{max-width:min(440px,calc(100vw - 32px));border:1px solid var(--border);border-radius:14px;background:var(--surface);color:var(--text);padding:24px;box-shadow:var(--shadow)}.navigation-prompt::backdrop{background:#0006}.navigation-prompt h2{font-size:18px;margin:0 0 12px}.navigation-prompt p{color:var(--muted);font-size:13px;line-height:1.8;margin:0 0 20px}.attachment-open{color:inherit;cursor:pointer}.attachment-open:hover{background:var(--hover)}@media(max-width:1000px){.file-columns.has-preview{grid-template-columns:minmax(0,1fr)}.file-columns.has-preview .file-directory{max-height:250px;overflow:auto}}@media(max-width:600px){.hub-library{padding:22px 16px 32px}.library-heading{align-items:flex-start}.library-heading h1{font-size:22px}.session-history-row{align-items:flex-start;flex-direction:column;gap:12px}.session-history-row .library-actions{width:100%}.file-preview .library-actions{gap:6px}}.hub-links{max-width:1120px;margin:0 auto;padding:32px;overflow-wrap:anywhere}.hub-links h1{margin:0 0 8px;font-size:26px}.hub-links h2{font-size:18px;margin:24px 0 16px}.hub-links h3{font-size:15px}.hub-links p{line-height:1.6}.links-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.links-heading p,.links-muted,.links-host,.links-provider p,.links-connection p,.hub-links small{color:var(--muted)}.links-host{padding-bottom:16px;border-bottom:1px solid var(--border)}.links-heading input{max-width:240px;min-width:0}.hub-links input{display:block;box-sizing:border-box;width:100%;margin-top:8px;padding:10px 12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:inherit;font:inherit}.hub-links button{border:1px solid var(--border);border-radius:7px;padding:7px 12px;background:var(--panel);color:inherit;cursor:pointer}.hub-links button:disabled{opacity:.5;cursor:default}.hub-links a{color:var(--accent)}.links-providers{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}.links-provider,.links-connection,.links-editor{border:1px solid var(--border);border-radius:12px;padding:20px;background:var(--panel)}.links-provider{display:flex;flex-direction:column;align-items:flex-start}.links-provider p{margin-top:0;flex:1}.links-provider button{margin-top:16px}.links-brand{font-weight:700;font-size:19px;min-width:38px;min-height:38px;display:grid;place-items:center;border-radius:9px;background:var(--bg)}.links-connections{display:grid;gap:12px}.links-connection{display:flex;justify-content:space-between;gap:16px}.links-connection p{margin:6px 0}.links-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.links-state{font-size:12px;display:inline-block;padding:3px 8px;border-radius:5px;margin:4px 10px 4px 0;background:var(--bg)}.links-state.ready,.links-notice{color:var(--success)}.links-editor-backdrop{position:fixed;inset:0;z-index:999;background:#00000073}.links-editor{position:fixed;z-index:1000;left:50%;top:50%;transform:translate(-50%,-50%);width:min(540px,calc(100vw - 48px));max-height:calc(100dvh - 64px);box-sizing:border-box;overflow-y:auto;padding:28px;box-shadow:0 24px 80px #0000003d}.links-editor h2{margin-top:0}.links-editor label{display:block;margin:16px 0}.links-auth-option{padding:16px 0;border-top:1px solid var(--border);margin-top:20px}.links-auth-option details{margin-top:14px}.hub-links details li{padding:4px 0;line-height:1.6}.hub-links summary{cursor:pointer}.links-device-code{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:16px;margin-top:16px}.links-device-code>strong{font-size:26px;letter-spacing:4px;-webkit-user-select:all;user-select:all}.links-confirm,.links-conflict{border:1px solid var(--border);padding:16px;border-radius:9px;margin:16px 0;background:var(--bg)}.links-confirm button+button{margin-left:8px}.links-authorization{margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}.links-authorization>.links-actions{margin:20px 0 12px}.link-authorization-step{margin:20px 0}.link-authorization-actions,.links-methods{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.link-authorization-code{display:block;padding:18px;border:1px solid var(--border);border-radius:10px;background:var(--bg);text-align:center;font-size:28px;letter-spacing:4px;-webkit-user-select:all;user-select:all}.link-authorization-expires,.links-other-methods{color:var(--muted);font-size:12px}.link-authorization-error{color:var(--danger, #d04c4c)}.link-authorization-qr{text-align:center}.link-authorization-qr img{display:block;margin:16px auto;border-radius:12px;background:#fff}.link-authorization-fields>button,.link-authorization-consent>button{width:100%;padding:11px 16px;margin-top:12px;background:var(--accent);color:#fff}.link-authorization-consent label{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}.link-authorization-consent input[type=checkbox]{width:auto;margin:3px 0 0}.link-authorization-consent small{display:block;flex-basis:100%;margin-left:24px}.link-authorization-consent fieldset{margin:16px 0;border:1px solid var(--border);border-radius:8px}@media(max-width:640px){.hub-links{padding:20px 16px}.links-connection{flex-direction:column}.links-heading{align-items:flex-start}.links-heading input{max-width:160px}.links-editor{padding:16px}.links-providers{grid-template-columns:1fr}}.links-heading>button{flex-shrink:0;white-space:nowrap}.hub-panels{flex:1;min-height:0;width:100%;overflow-y:auto;max-width:1120px;margin:0 auto;padding:32px;overflow-wrap:anywhere}.hub-panels h1{margin:0 0 8px;font-size:26px}.hub-panels h2{margin:0;font-size:18px}.hub-panels h3{margin:0;font-size:15px}.hub-panels p{line-height:1.6}.panels-muted,.hub-panels small,.panels-card>p,.panels-heading p{color:var(--muted)}.panels-heading,.panels-card-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.panels-heading{margin-bottom:20px}.panels-heading p{margin:8px 0 0}.panels-section{margin-top:28px}.panels-card,.panels-import,.panels-review,.panels-empty{border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:20px}.panels-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.panels-card{display:flex;flex-direction:column;min-width:0}.panels-card>p{margin:10px 0}.panels-card .panels-actions{margin-top:auto;padding-top:18px}.panels-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.hub-panels button{border:1px solid var(--border);border-radius:7px;padding:8px 12px;color:inherit;background:var(--panel);font:inherit;cursor:pointer}.hub-panels button:disabled{opacity:.5;cursor:default}.hub-panels button.panels-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text, white)}.hub-panels button.panels-danger{color:var(--danger)}.hub-panels input:not([type=checkbox]){box-sizing:border-box;display:block;width:100%;min-width:0;margin-top:7px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;color:inherit;background:var(--bg);font:inherit}.panels-heading input{max-width:240px}.hub-panels label{display:block}.panels-import form>label{margin:20px 0 14px}.panels-import details{margin:16px 0}.hub-panels summary{cursor:pointer}.panels-source-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding-top:16px}.panels-candidates{margin-top:24px}.panels-candidates>h3{margin-bottom:14px}.panels-batch-start{margin:16px 0}.panels-badges{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:10px 0}.panels-badge{display:inline-block;border:1px solid var(--border);border-radius:5px;padding:3px 7px;font-size:12px;background:var(--bg)}.panels-badge-ready,.panels-notice{color:var(--success)}.panels-warning,.panels-confirm{padding:14px 16px;border:1px solid var(--border);border-radius:8px;background:var(--bg);line-height:1.6;margin:16px 0}.panels-warning p,.panels-confirm p{margin:0 0 8px}.panels-warning ul{margin:6px 0 0;padding-left:22px}.panels-review{margin:24px 0}.panels-review section{margin:22px 0}.panels-review dl,.panels-card dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px 14px;font-size:13px}.panels-review dt,.panels-card dt{color:var(--muted)}.panels-review dd,.panels-card dd{margin:0}.panels-review .panels-permission{display:flex;flex-direction:column;gap:4px;padding:9px 0;border-bottom:1px solid var(--border)}.panels-review footer{border-top:1px solid var(--border);padding-top:20px}.panels-check{margin-bottom:16px}.panels-check input{margin-right:8px}.panels-empty p{margin:8px 0 0}@media(max-width:640px){.hub-panels{padding:20px 16px}.panels-heading{flex-wrap:wrap}.panels-heading input{max-width:none}.panels-grid,.panels-source-fields{grid-template-columns:1fr}.panels-card,.panels-import,.panels-review,.panels-empty{padding:16px}}.panel-host{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto;padding:16px 20px 20px;gap:12px}.panel-host-heading{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-shrink:0}.panel-host-heading h1{margin:0;font-size:18px}.panel-host-heading p{margin:5px 0 0;color:var(--muted);font-size:12px}.panel-host button,.panel-host-actions a{border:1px solid var(--border);border-radius:7px;padding:8px 12px;color:inherit;background:var(--panel);cursor:pointer;text-decoration:none;font:inherit}.panel-host button.panel-host-primary,.panel-host-actions a{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.panel-host-limitations,.panel-host-notice,.panel-host-error{border:1px solid var(--border);border-radius:8px;padding:10px 14px;margin:0;background:var(--panel);font-size:13px;line-height:1.5;max-height:160px;overflow:auto;flex-shrink:0}.panel-host-limitations summary{cursor:pointer;font-weight:600}.panel-host-limitations p,.panel-host-limitations ul,.panel-host-error p{margin:6px 0}.panel-host-limitations ul{padding-left:20px}.panel-host-directory p{margin:0 0 8px;overflow-wrap:anywhere}.panel-host-directory a{display:inline-block;padding:7px 12px;border-radius:7px;background:var(--accent);color:var(--accent-text);font-weight:600;text-decoration:none}.panel-host-loading{color:var(--muted)}.panel-host-frame{display:block;border:1px solid var(--border);border-radius:10px;background:var(--surface);width:100%;min-height:280px;flex:1}.panel-host-frame[inert]{pointer-events:none;opacity:.5}.panel-host-confirm{border:2px solid var(--accent);border-radius:10px;background:var(--surface);box-shadow:var(--shadow);padding:18px;flex-shrink:0}.panel-host-confirm h2{margin:0 0 12px;font-size:16px}.panel-host-confirm pre,.panel-host-url{max-height:240px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.6;background:var(--bg);padding:12px;border-radius:7px}.panel-host-actions{display:flex;gap:8px}.panel-host-video .panel-host-actions{flex-wrap:wrap;align-items:center}.panel-host-video button,.panel-host-video .panel-host-actions a{min-height:44px}.panel-host-video .panel-host-actions a{flex-shrink:0;white-space:nowrap}@media(max-width:640px){.panel-host{padding:12px 10px}.panel-host-frame{min-height:380px}.panel-host-confirm pre{max-height:160px}}.panel-host-preview{border:1px solid var(--border);border-radius:8px;padding:12px;background:var(--panel);flex-shrink:0}.panel-host-preview header{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-host-preview h2{font-size:15px;overflow-wrap:anywhere;min-width:0}.panel-host-preview button{flex-shrink:0}.panel-host-preview video,.panel-host-preview audio,.panel-host-preview img{display:block;width:100%;max-height:50vh;object-fit:contain;margin-bottom:12px}.panel-host-preview a{display:inline-block;padding:10px 12px;background:var(--accent);color:var(--accent-text);border-radius:7px;text-decoration:none}.message-content{min-width:0;max-width:100%;white-space:normal;line-height:1.8;overflow-wrap:anywhere}.message-content>:first-child{margin-top:0}.message-content>:last-child{margin-bottom:0}.message-content p{margin:10px 0}.message-content h1,.message-content h2,.message-content h3,.message-content h4{margin:20px 0 8px;font-weight:600;line-height:1.5;letter-spacing:-.025em}.message-content h1{font-size:23px}.message-content h2{font-size:19px}.message-content h3{font-size:16px}.message-content h4{font-size:14px}.message-content ul,.message-content ol{margin:10px 0;padding-left:24px}.message-content li{margin:4px 0}.message-content li>p{margin:4px 0}.message-content .contains-task-list{list-style:none;padding-left:4px}.message-content .task-list-item>input{margin-right:8px;accent-color:var(--accent)}.message-content blockquote{margin:14px 0;padding:2px 16px;border-left:3px solid var(--border);color:var(--muted)}.message-content a{color:var(--accent);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 35%,transparent);text-underline-offset:3px}.message-content a:hover{text-decoration-color:currentColor}.message-content hr{margin:20px 0;border:0;border-top:1px solid var(--border)}.message-content code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em}.message-content :not(pre)>code{background:var(--panel);padding:2px 5px;border-radius:5px}.message-code-block{margin:14px 0;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--surface)}.message-code-heading{display:flex;justify-content:space-between;align-items:center;padding:7px 12px;border-bottom:1px solid var(--subtle);color:var(--muted);background:var(--panel);font-size:11px}.message-code-block pre{margin:0;padding:14px;overflow-x:auto;line-height:1.7;white-space:pre;tab-size:2}.message-code-block pre code{font-size:12px}.message-copy{color:var(--muted);background:transparent;border:0;border-radius:5px;padding:3px 6px;font-size:10px;cursor:pointer;white-space:nowrap}.message-copy:hover{background:var(--hover);color:var(--text)}.message-actions{display:flex;margin-top:8px}.message-actions .message-copy{padding-left:0}.message-reasoning{color:var(--muted);margin-bottom:14px;font-size:12px}.message-reasoning summary{cursor:pointer;padding:3px 0}.message-reasoning pre{margin:8px 0 0;white-space:pre-wrap;font:inherit;line-height:1.8;max-height:320px;overflow:auto;padding:10px 14px;border-left:2px solid var(--border)}.message-streaming{white-space:pre-wrap}.message-table-scroll{max-width:100%;overflow-x:auto;margin:14px 0;border:1px solid var(--border);border-radius:8px}.message-table-scroll table{border-collapse:collapse;width:max-content;min-width:100%;font-size:12px}.message-table-scroll th,.message-table-scroll td{padding:8px 12px;border-right:1px solid var(--subtle);border-bottom:1px solid var(--subtle);vertical-align:top}.message-table-scroll th{text-align:left;background:var(--panel);font-weight:550}.message-table-scroll tr:last-child td{border-bottom:0}.message-table-scroll th:last-child,.message-table-scroll td:last-child{border-right:0}.message-image-reference{display:inline-flex;align-items:center;gap:8px;max-width:100%;border:1px solid var(--border);border-radius:8px;padding:7px 10px;background:var(--panel);color:var(--accent);font-family:inherit;font-size:12px}button.message-image-reference{cursor:pointer}button.message-image-reference:hover{background:var(--hover)}.message-image-reference span{color:var(--muted);font-size:10px}.message-file-reference{background:var(--panel);border-radius:4px;padding:1px 4px}.message-file-reference .message-copy{display:inline;margin-left:4px}.message-tool-card{border:1px solid var(--subtle);border-radius:10px;background:var(--surface);white-space:normal;overflow:hidden}.message-tool-card>summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;min-width:0;padding:10px 12px;font-size:11px}.message-tool-card>summary::-webkit-details-marker{display:none}.message-tool-card>summary:after{content:"›";color:var(--muted);margin-left:3px;font-size:16px}.message-tool-card[open]>summary:after{transform:rotate(90deg)}.message-tool-indicator{display:grid;place-items:center;flex:0 0 17px;width:17px;height:17px;border:1px solid var(--border);border-radius:50%;font-size:10px;color:var(--muted)}.message-tool-name{color:var(--text);font-weight:550;flex-shrink:0}.message-tool-summary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.message-tool-status{margin-left:auto;color:var(--muted);white-space:nowrap;font-size:10px}.message-tool-error .message-tool-status,.message-tool-error .message-tool-indicator{color:var(--danger)}.message-tool-section{padding:0 12px 12px;color:var(--muted)}.message-tool-section strong{font-size:10px;font-weight:550}.message-tool-section pre{max-height:320px;overflow:auto;padding:10px;margin:6px 0 0;border-radius:6px;background:var(--panel);white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace}.message-tool-result-heading{display:flex;align-items:center;justify-content:space-between}@media(max-width:760px){.message-content h1{font-size:20px}.message-content h2{font-size:17px}.message-tool-summary{max-width:34vw}.message-code-block pre{padding:12px}}.message-file-open{border:0;padding:0;color:var(--accent);background:transparent;font:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:3px}:root{color-scheme:light;--bg: hsl(240 20% 99%);--surface: hsl(0 0% 100%);--panel: hsl(240 6% 95.5%);--text: hsl(240 10% 3.9%);--muted: hsl(240 4% 43%);--accent: hsl(19 63% 39%);--accent-text: hsl(0 0% 98%);--border: hsl(240 5% 78% / 65%);--hover: hsl(240 6% 92.5%);--subtle: hsl(240 5% 78% / 35%);--danger: hsl(0 72% 50%);--warning: hsl(38 92% 38%);--success: hsl(145 63% 32%);--shadow: 0 8px 28px hsl(240 10% 3.9% / 3.5%), 0 1px 3px hsl(240 10% 3.9% / 4%)}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--bg: hsl(240 9% 5.5%);--surface: hsl(240 7% 8.5%);--panel: hsl(240 4% 11%);--text: hsl(0 0% 98%);--muted: hsl(240 5% 67%);--accent: hsl(22 70% 55%);--accent-text: hsl(22 30% 8%);--border: hsl(240 4% 19%);--hover: hsl(240 4% 17%);--subtle: hsl(240 4% 19% / 65%);--danger: hsl(0 84% 65%);--warning: hsl(42 92% 62%);--success: hsl(142 64% 48%);--shadow: 0 8px 28px #0002, 0 1px 3px #0003}}*{box-sizing:border-box}[hidden]{display:none!important}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg);color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit}button{-webkit-tap-highlight-color:transparent}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button svg{flex-shrink:0}.shell{display:flex;height:100dvh;overflow:hidden}.rail{width:248px;flex:0 0 248px;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--subtle);background:var(--panel)}.rail-head{display:flex;align-items:center;gap:8px;height:64px;padding:14px 16px;flex-shrink:0}.rail-head strong{font-size:15px;letter-spacing:-.4px;font-weight:650}.brand-mark,.welcome-mark{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--surface);border-radius:8px;width:28px;height:28px;color:var(--accent);flex-shrink:0}.hub-badge{color:var(--muted);font-size:10px;line-height:18px;padding-inline:5px;border:1px solid var(--border);border-radius:5px}button.icon-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;flex-shrink:0;padding:0;border:0;border-radius:7px;color:var(--muted);background:transparent;cursor:pointer}button.icon-button:hover:not(:disabled){background:var(--hover);color:var(--text)}.rail-head .sidebar-close{margin-left:auto;width:26px}.workbench-nav{display:flex;flex-direction:column;gap:3px;padding:0 12px 18px}.nav-button{display:flex;align-items:center;gap:10px;min-height:36px;padding:8px 10px;text-align:left;color:var(--muted);background:transparent;border:0;border-radius:8px;cursor:pointer;font-size:13px}.nav-button:hover,.nav-button.active{background:var(--hover);color:var(--text)}.nav-button.active{font-weight:550}.nav-button.new-chat-button{margin-bottom:10px;color:var(--text);background:var(--surface);border:1px solid var(--border);box-shadow:0 1px 2px #00000004}.nav-button.new-chat-button:hover{border-color:var(--muted)}.rail-section-label{color:var(--muted);font-size:11px;font-weight:550;margin:0 22px 8px}.workspace-button{display:flex;align-items:center;gap:9px;margin:0 12px;padding:9px 10px;color:var(--text);border:0;background:transparent;border-radius:8px;min-width:0;text-align:left;font-size:12px}button.workspace-button{cursor:pointer}button.workspace-button:hover{background:var(--hover)}.workspace-button>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.workspace-button>svg{width:16px;color:var(--muted);flex-shrink:0}.workspace-button>svg:last-child{width:12px}.history-label{display:flex;justify-content:space-between;margin-top:24px}.sessions{flex:1;min-height:0;overflow-y:auto;list-style:none;margin:0;padding:0 12px 16px}.sessions .empty{padding:12px 10px;color:var(--muted);font-size:12px;line-height:1.7}.session{width:100%;display:flex;flex-direction:column;gap:5px;margin:2px 0;text-align:left;color:var(--text);background:transparent;border:0;border-radius:8px;padding:10px;cursor:pointer}.session:hover,.session.active{background:var(--hover)}.session-title{font-size:12px;line-height:1.5;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.session-meta{font-size:10px;color:var(--muted)}.rail-footer{padding:10px 12px 12px;border-top:1px solid var(--subtle)}.host-label{display:flex;gap:7px;align-items:center;color:var(--muted);font-size:10px;padding:2px 10px 8px}.dot{display:inline-block;flex:0 0 6px;width:6px;height:6px;border-radius:50%;background:var(--muted)}.dot.open{background:var(--success)}.dot.connecting{background:var(--warning)}.dot.closed{background:var(--danger)}.account-button{display:flex;width:100%;align-items:center;gap:10px;color:var(--text);background:transparent;border:0;border-radius:8px;text-align:left;padding:8px 10px;cursor:pointer}.account-button:hover{background:var(--hover)}.account-avatar{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:var(--surface);border:1px solid var(--border);font-size:11px;flex-shrink:0}.account-copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}.account-copy strong{font-size:12px;font-weight:550;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.account-copy>span{color:var(--muted);font-size:10px}.account-button>svg{width:12px;color:var(--muted)}.workbench-main{display:flex;flex:1;flex-direction:column;min-width:0;min-height:0}.workbench-topbar{flex-shrink:0;display:flex;height:54px;align-items:center;gap:10px;padding:0 20px;border-bottom:1px solid var(--subtle)}.topbar-context{display:flex;flex:1;min-width:0;flex-direction:column;gap:2px}.topbar-project{font-size:12px;font-weight:500;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.topbar-title{color:var(--muted);font-size:11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.connection-pill{display:inline-flex;align-items:center;gap:6px;font-size:10px;color:var(--muted);margin-left:auto;white-space:nowrap}.sidebar-backdrop{display:none}.chat{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.banner{padding:8px 20px;font-size:12px;color:var(--warning);background:color-mix(in srgb,var(--warning) 7%,transparent);border-bottom:1px solid var(--subtle);flex-shrink:0;line-height:1.6}.banner.goal{align-self:stretch;border:1px solid var(--border);border-radius:8px}.banner .ghost{margin-left:8px;padding:2px 8px}.messages{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:28px 24px 16px}.transcript{max-width:736px;width:100%;display:flex;flex-direction:column;gap:18px;margin:0 auto}.chat-empty .messages{display:flex;padding-top:32px}.chat-empty .transcript{justify-content:center}.empty-chat{text-align:center;padding:24px 0 32px}.welcome-mark{width:44px;height:44px;border-radius:13px;margin-bottom:22px;box-shadow:var(--shadow)}.welcome-mark svg{width:25px;height:25px}.empty-chat h1{font-size:clamp(24px,2.5vw,32px);margin:0 0 12px;letter-spacing:-.8px;font-weight:550}.empty-chat p{color:var(--muted);font-size:13px;line-height:1.7;margin:0 0 20px}.welcome-workspace{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:11px;max-width:100%;overflow-wrap:anywhere}.welcome-workspace svg{width:14px;flex-shrink:0}.msg{max-width:100%;font-size:14px;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}.msg.user{align-self:flex-end;max-width:88%;padding:10px 16px;background:var(--panel);border-radius:16px}.msg.assistant{align-self:stretch;padding:3px 0}.msg.tool{align-self:stretch;color:var(--muted);font-size:12px;padding:2px 0}.msg.tool .tool-result{max-height:280px;margin:8px 0 0;overflow:auto;padding:12px;font-family:ui-monospace,monospace;white-space:pre-wrap;background:var(--panel);border:1px solid var(--subtle);border-radius:8px}.msg.tool details>summary{cursor:pointer}.msg.tool-error{color:var(--danger)}.msg.info{align-self:stretch;color:var(--muted);font-size:12px}.msg.error{align-self:stretch;background:color-mix(in srgb,var(--danger) 8%,transparent);border-radius:8px;padding:10px 14px;color:var(--danger)}.cursor{animation:blink 1s step-start infinite;color:var(--accent)}@keyframes blink{50%{opacity:0}}.composer-wrap{flex-shrink:0;width:100%;max-width:784px;padding:12px 24px 20px;margin:0 auto}.chat-empty .composer-wrap{margin-bottom:clamp(36px,13vh,180px)}.composer{padding:12px;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:var(--shadow);transition:border-color .15s ease,box-shadow .15s ease}.composer:focus-within{border-color:color-mix(in srgb,var(--accent) 55%,var(--border));box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 7%,transparent),var(--shadow)}.composer textarea{display:block;width:100%;resize:none;min-height:64px;max-height:180px;overflow-y:auto;color:var(--text);background:transparent;border:0;border-radius:0;padding:6px 8px 10px;line-height:1.65;font-size:14px}.composer textarea:focus{outline:none}.composer textarea::placeholder{color:var(--muted)}.composer-toolbar{display:flex;align-items:center;gap:6px;padding:2px 1px 0;min-width:0}.model-button{display:flex;align-items:center;gap:5px;min-width:0;max-width:50%;padding:7px;border:0;border-radius:7px;background:transparent;color:var(--muted);font-size:11px;cursor:pointer}.model-button:hover{background:var(--panel);color:var(--text)}.model-button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-button svg{width:10px;transform:rotate(90deg)}.composer-run-status{font-size:11px;color:var(--muted);margin-left:auto;white-space:nowrap}button.send,button.stop{border:0;border-radius:8px;padding:9px 16px;font-size:13px;font-weight:550;cursor:pointer}button.send{background:var(--accent);color:var(--accent-text)}button.stop{color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,var(--surface))}button.composer-submit{display:grid;place-items:center;flex:0 0 32px;width:32px;height:32px;border-radius:50%;padding:0;margin-left:4px}.composer-submit.send{background:var(--text);color:var(--bg)}.composer-submit.stop{color:var(--text);background:var(--panel);border:1px solid var(--border)}.composer-caption{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:10px;padding:10px 6px 0}.attachments{display:flex;flex-wrap:wrap;gap:6px;color:var(--muted);font-size:12px;padding:0 6px 8px}.attachment{display:inline-flex;align-items:center;gap:5px;max-width:100%;overflow-wrap:anywhere;padding:4px 7px;background:var(--panel);border:1px solid var(--border);border-radius:6px;font-size:11px;margin-top:4px}.msg .attachment{display:flex}.attachment svg{width:13px;flex-shrink:0}.attachment button.ghost{padding:0 4px;border:0}.approval{align-self:stretch;border:1px solid color-mix(in srgb,var(--warning) 60%,var(--border));background:color-mix(in srgb,var(--warning) 5%,var(--surface));border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}.approval-title{font-size:13px;font-weight:600}.approval-title em{color:var(--muted);font-style:normal;font-weight:400}.approval-desc{font-size:13px;color:var(--muted)}.approval-summary{font-size:13px;overflow-wrap:anywhere}.approval-raw>summary{color:var(--muted);cursor:pointer;font-size:12px}.approval-args{margin:8px 0 0;font-size:12px;background:var(--panel);border-radius:8px;padding:10px;overflow-x:auto;max-height:180px}.approval-answer{background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:10px;min-height:64px}.approval-actions{display:flex;gap:8px}.approval-actions button{min-height:36px}button.ghost{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:8px;padding:6px 10px;cursor:pointer}button.ghost:hover:not(:disabled){background:var(--hover)}.auth-page{min-height:100%;display:grid;place-items:center;padding:24px}.auth-card{width:100%;max-width:420px;padding:28px;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:var(--shadow)}.auth-brand{font-size:21px;font-weight:650;margin-bottom:28px}.auth-brand span{font-size:12px;font-weight:500;color:var(--accent);border:1px solid var(--border);border-radius:5px;padding:2px 5px;vertical-align:middle}.auth-card h1{font-size:20px;margin:0}.auth-card p,.muted{color:var(--muted);font-size:13px;line-height:1.6}.auth-card form{display:flex;flex-direction:column;gap:14px}.auth-card label{display:flex;flex-direction:column;gap:7px;font-size:13px}.auth-card label span,.auth-card small{color:var(--muted);font-size:12px}.auth-card input{width:100%;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:11px}.auth-card .send{min-height:42px}.form-error{color:var(--danger)!important;overflow-wrap:anywhere}.devices-dialog{color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:22px;width:min(560px,calc(100% - 32px));max-height:calc(100% - 32px)}.devices-dialog::backdrop{background:#0006}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.dialog-head h2{font-size:18px;margin:0}.device-list{margin:20px 0;padding:0;list-style:none}.device-list li{display:flex;align-items:center;gap:12px;padding:14px 0;border-top:1px solid var(--border)}.device-list li div{flex:1;min-width:0;overflow-wrap:anywhere}.device-list strong{font-size:13px}.device-list span{display:block;margin-top:5px;font-size:11px;color:var(--muted)}.device-list button{flex-shrink:0;font-size:12px}.devices-dialog>.stop{padding:10px 14px}@media(max-width:760px){.rail{position:fixed;inset:0 auto 0 0;z-index:30;width:min(280px,calc(100vw - 48px));box-shadow:10px 0 40px #0002}.sidebar-backdrop{display:block;position:fixed;inset:0;background:#0005;z-index:29}.rail-head{padding-top:max(14px,env(safe-area-inset-top))}.rail-footer{padding-bottom:max(12px,env(safe-area-inset-bottom))}.workbench-topbar{padding:0 12px;gap:8px;height:50px}.messages{padding:24px 18px 12px}.transcript{gap:16px}.msg{font-size:14px}.msg.user{max-width:92%}.composer-wrap{padding:10px 12px max(12px,env(safe-area-inset-bottom))}.chat-empty .composer-wrap{margin-bottom:clamp(18px,10vh,80px)}.empty-chat{padding:20px 12px}.empty-chat p{font-size:12px}.composer{padding:10px;border-radius:16px}.composer textarea{font-size:16px}.composer-caption{justify-content:center;font-size:9px}.composer-caption>span:last-child{display:none}.composer-run-status{font-size:10px}.model-button{max-width:47%;font-size:10px}.banner{padding:8px 14px}}@media(max-height:640px){.chat-empty .composer-wrap{margin-bottom:0}.empty-chat{padding:12px 0}.welcome-mark{margin-bottom:12px}}@media(prefers-reduced-motion:reduce){.cursor{animation:none}.composer{transition:none}}.cloud-account-controls{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;max-width:100%}.rail-footer .cloud-account-controls{flex-direction:column;align-items:stretch}.cloud-account-controls .form-error{flex-basis:100%;overflow-wrap:anywhere}#app{height:100%}.desktop-sidebar-controls{display:grid;gap:10px;padding:8px 12px 12px;border-bottom:1px solid var(--border)}.desktop-project-picker,.desktop-approval-scope label,.desktop-chat-controls label{display:grid;gap:5px;font-size:12px;color:var(--muted)}.desktop-project-picker select,.desktop-approval-scope select,.desktop-chat-controls select{min-width:0;min-height:34px;max-width:100%;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);padding:4px 8px}.desktop-sidebar-actions{display:flex;flex-wrap:wrap;gap:6px}.desktop-root-picker,.desktop-cli-sessions{min-width:0;max-height:38dvh;overflow:auto}.desktop-root-picker summary,.desktop-cli-sessions summary{cursor:pointer;padding:6px 0;font-size:12px;color:var(--muted)}.desktop-cli-sessions .session,.desktop-root-picker .session{width:100%;margin-top:5px}.desktop-chat-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0 16px;font-size:12px}.desktop-room-label{min-width:0;overflow-wrap:anywhere}.desktop-mode-options,.desktop-ask-options{display:grid;gap:8px;margin:12px 0}.desktop-mode-options .library-button{display:grid;gap:5px;text-align:left;white-space:normal}.desktop-mode-options span{font-size:12px;font-weight:400;color:var(--muted)}.desktop-approval-scope{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}.desktop-ask-options .library-button{white-space:normal;text-align:left}.session-unread{color:var(--accent)}.goal{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.goal>span{flex:1;min-width:0}.desktop-connection{min-height:100dvh;display:grid;place-items:center;padding:24px;background:var(--bg);color:var(--text)}.desktop-connection-card{width:min(400px,100%);padding:26px;border:1px solid var(--border);border-radius:18px;background:var(--surface)}.desktop-connection-card h1{margin:0 0 12px;font-size:22px}.desktop-connection-card p{line-height:1.7;color:var(--muted)}.desktop-cli-path{margin:4px 0 10px;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.projects-page{max-width:1120px;min-height:100dvh;margin:auto;padding:48px 28px;color:var(--text, #e5e7eb)}.projects-header{margin-bottom:32px}.projects-header h1{margin:24px 0 10px;font-size:28px;letter-spacing:-.04em}.projects-header p,.project-date,.project-empty{color:var(--muted, #9ca3af);line-height:1.6}.project-create{display:flex;align-items:end;gap:12px;max-width:600px;margin:24px 0 32px}.project-create label{display:grid;flex:1;gap:8px;font-size:13px}.project-create input{width:100%;padding:11px 12px;border:1px solid var(--border, #303541);border-radius:8px;background:var(--surface, #171b24);color:inherit}.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:16px}.project-card{padding:22px;border:1px solid var(--border, #303541);border-radius:14px;background:var(--surface, #171b24)}.project-card-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.project-card h2{font-size:17px;margin:0;overflow-wrap:anywhere}.project-status{flex-shrink:0;padding:4px 8px;border-radius:20px;color:var(--muted, #9ca3af);background:#ffffff08;font-size:12px}.project-status.running{color:var(--success, #70d4b3);background:#4fc69d12}.project-status.error{color:var(--danger, #fb9d9d)}.project-date{font-size:12px;margin:12px 0 22px}.project-stop-confirm{position:fixed;z-index:100;top:50%;left:50%;transform:translate(-50%,-50%);margin:0;color:inherit;max-width:480px;width:calc(100% - 40px);padding:28px;background:var(--surface, #171b24);border:1px solid var(--border, #303541);border-radius:16px;box-shadow:var(--shadow)}.project-stop-confirm::backdrop{background:#0009}.project-stop-confirm h2{margin-top:0;font-size:19px}.project-stop-confirm p{line-height:1.7}.project-connection-note{position:fixed;z-index:90;top:0;left:50%;transform:translate(-50%);max-width:min(700px,90vw);padding:8px 14px;background:#453919;color:#ffe6a0;border-radius:0 0 8px 8px;font-size:12px}@media(max-width:600px){.projects-page{padding:28px 18px}.project-create{align-items:stretch;flex-direction:column}}