tycono 0.1.69 → 0.1.71-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,9 @@ import type { RunnerResult } from '../engine/runners/types.js';
9
9
  import { estimateCost } from './pricing.js';
10
10
  import { readConfig, getConversationLimits } from './company-config.js';
11
11
  import { postKnowledgingCheck, type KnowledgeDebtItem } from '../engine/knowledge-gate.js';
12
- import { getSession, updateMessage as updateSessionMessage, appendMessageEvent } from './session-store.js';
12
+ import { earnCoinsInternal } from '../routes/coins.js';
13
+ import { getSession, createSession, addMessage, updateMessage as updateSessionMessage, appendMessageEvent, type Message } from './session-store.js';
14
+ import { portRegistry, type PortAllocation } from './port-registry.js';
13
15
 
14
16
  /* ─── Types ──────────────────────────────── */
15
17
 
@@ -37,6 +39,8 @@ export interface Job {
37
39
  knowledgeDebt?: KnowledgeDebtItem[];
38
40
  /** D-014: Session this job belongs to */
39
41
  sessionId?: string;
42
+ /** PSM-003: Allocated ports for this job's dev servers */
43
+ ports?: PortAllocation;
40
44
  }
41
45
 
42
46
  export interface JobInfo {
@@ -175,9 +179,32 @@ class JobManager {
175
179
 
176
180
  this.jobs.set(jobId, job);
177
181
 
182
+ // PSM-003: Allocate ports for this job (blocking)
183
+ // Run async initialization, then start runner
184
+ this.initializeAndRunJob(job, params, orgTree);
185
+
186
+ return job;
187
+ }
188
+
189
+ /** PSM-003: Initialize job with port allocation, then start runner */
190
+ private async initializeAndRunJob(
191
+ job: Job,
192
+ params: StartJobParams,
193
+ orgTree: ReturnType<typeof buildOrgTree>,
194
+ ): Promise<void> {
195
+ try {
196
+ // PSM-003: Allocate ports before starting runner
197
+ const ports = await portRegistry.allocate(job.id, params.roleId, params.task);
198
+ job.ports = ports;
199
+ console.log(`[JobManager] Allocated ports for ${job.id} (${params.roleId}): API :${ports.api}, Vite :${ports.vite}`);
200
+ } catch (err) {
201
+ console.warn(`[JobManager] Port allocation failed for ${job.id}:`, err);
202
+ // Non-critical — job can proceed without ports
203
+ }
204
+
178
205
  // Emit job:start
179
- stream.emit('job:start', params.roleId, {
180
- jobId,
206
+ job.stream.emit('job:start', params.roleId, {
207
+ jobId: job.id,
181
208
  type: params.type,
182
209
  task: params.task,
183
210
  sourceRole: params.sourceRole ?? 'ceo',
@@ -188,11 +215,12 @@ class JobManager {
188
215
  if (params.parentJobId) {
189
216
  const parentJob = this.jobs.get(params.parentJobId);
190
217
  if (parentJob) {
191
- parentJob.childJobIds.push(jobId);
218
+ parentJob.childJobIds.push(job.id);
192
219
  parentJob.stream.emit('dispatch:start', parentJob.roleId, {
193
220
  targetRoleId: params.roleId,
194
221
  task: params.task,
195
- childJobId: jobId,
222
+ childJobId: job.id,
223
+ childSessionId: params.sessionId,
196
224
  });
197
225
  }
198
226
  }
@@ -212,11 +240,19 @@ class JobManager {
212
240
  // Build team status snapshot: which roles are currently busy
213
241
  const teamStatus: Record<string, { status: string; task?: string }> = {};
214
242
  for (const [, j] of this.jobs) {
215
- if (j.status === 'running' && j.id !== jobId) {
243
+ if (j.status === 'running' && j.id !== job.id) {
216
244
  teamStatus[j.roleId] = { status: 'working', task: j.task };
217
245
  }
218
246
  }
219
247
 
248
+ // PSM-004: Inject port env vars into runner
249
+ const portEnv = job.ports ? {
250
+ API_PORT: String(job.ports.api),
251
+ PORT: String(job.ports.api),
252
+ VITE_PORT: String(job.ports.vite),
253
+ ...(job.ports.hmr && { VITE_HMR_PORT: String(job.ports.hmr) }),
254
+ } : {};
255
+
220
256
  const handle = this.runner.execute(
221
257
  {
222
258
  companyRoot: COMPANY_ROOT,
@@ -227,29 +263,33 @@ class JobManager {
227
263
  readOnly: params.readOnly,
228
264
  maxTurns: limits.hardLimit,
229
265
  model,
230
- jobId,
266
+ jobId: job.id,
231
267
  teamStatus,
232
268
  targetRoles: params.targetRoles,
233
269
  codeRoot: config.codeRoot,
270
+ env: {
271
+ ...process.env,
272
+ ...portEnv,
273
+ },
234
274
  },
235
275
  {
236
276
  onText: (text) => {
237
277
  updateActivity(params.roleId, text);
238
- stream.emit('text', params.roleId, { text });
278
+ job.stream.emit('text', params.roleId, { text });
239
279
  // D-014: Update linked session message content
240
280
  if (job.sessionId) {
241
281
  this.updateSessionRoleMessage(job, text);
242
282
  }
243
283
  },
244
284
  onThinking: (text) => {
245
- stream.emit('thinking', params.roleId, { text });
285
+ job.stream.emit('thinking', params.roleId, { text });
246
286
  // D-014 SCA-010: Embed thinking event in session message
247
287
  if (job.sessionId) {
248
288
  this.embedSessionEvent(job, 'thinking', { text: text.slice(0, 200) });
249
289
  }
250
290
  },
251
291
  onToolUse: (name, input) => {
252
- stream.emit('tool:start', params.roleId, {
292
+ job.stream.emit('tool:start', params.roleId, {
253
293
  name,
254
294
  input: input ? summarizeInput(input) : undefined,
255
295
  });
@@ -266,29 +306,59 @@ class JobManager {
266
306
  if (params.targetRoles && params.targetRoles.length > 0) {
267
307
  if (!params.targetRoles.includes(subRoleId)) {
268
308
  console.warn(`[JobManager] Dispatch blocked: ${params.roleId} → ${subRoleId} (not in targetRoles)`);
269
- stream.emit('stderr', params.roleId, {
309
+ job.stream.emit('stderr', params.roleId, {
270
310
  message: `Dispatch to ${subRoleId} blocked — not in active target scope for this wave.`,
271
311
  });
272
312
  return;
273
313
  }
274
314
  }
275
- // Create child job startJob() auto-emits dispatch:start
276
- // on parent stream when parentJobId is set.
277
- // Propagate targetRoles to child jobs for cascading enforcement
315
+ // Create session for child dispatch
316
+ const childSession = createSession(subRoleId, {
317
+ mode: 'do',
318
+ source: 'dispatch',
319
+ });
320
+ // Add directive as CEO message in child session
321
+ const dispatchMsg: Message = {
322
+ id: `msg-${Date.now()}-dispatch-${subRoleId}`,
323
+ from: 'ceo',
324
+ content: subTask,
325
+ type: 'directive',
326
+ status: 'done',
327
+ timestamp: new Date().toISOString(),
328
+ };
329
+ addMessage(childSession.id, dispatchMsg);
330
+
331
+ // Create child job linked to child session
278
332
  const childJob = this.startJob({
279
333
  type: 'assign',
280
334
  roleId: subRoleId,
281
335
  task: subTask,
282
336
  sourceRole: params.roleId,
283
- parentJobId: jobId,
337
+ parentJobId: job.id,
284
338
  targetRoles: params.targetRoles,
339
+ sessionId: childSession.id,
285
340
  });
286
- // D-014 SCA-010: Embed dispatch event in session message
341
+
342
+ // Add role message linked to child job
343
+ const childRoleMsg: Message = {
344
+ id: `msg-${Date.now() + 1}-role-${subRoleId}`,
345
+ from: 'role',
346
+ content: '',
347
+ type: 'conversation',
348
+ status: 'streaming',
349
+ timestamp: new Date().toISOString(),
350
+ jobId: childJob.id,
351
+ };
352
+ addMessage(childSession.id, childRoleMsg, true);
353
+
354
+ // Embed dispatch event with childSessionId in parent session
287
355
  if (job.sessionId) {
288
356
  this.embedSessionEvent(job, 'dispatch:start', {
289
357
  roleId: subRoleId,
290
358
  task: subTask,
291
359
  childJobId: childJob.id,
360
+ childSessionId: childSession.id,
361
+ targetRoleId: subRoleId,
292
362
  });
293
363
  }
294
364
  },
@@ -300,14 +370,14 @@ class JobManager {
300
370
  task: `[Consultation from ${params.roleId}] ${question}\n\nAnswer this question based on your role's expertise and knowledge. Be concise and specific.`,
301
371
  sourceRole: params.roleId,
302
372
  readOnly: true,
303
- parentJobId: jobId,
373
+ parentJobId: job.id,
304
374
  });
305
375
  },
306
376
  onTurnComplete: (turn) => {
307
377
  // ─── Harness-level turn policy ───
308
378
  // Runner reports its internal turn count; Harness tracks independently.
309
379
  harnessTurnCount++;
310
- stream.emit('turn:complete', params.roleId, {
380
+ job.stream.emit('turn:complete', params.roleId, {
311
381
  turn: harnessTurnCount,
312
382
  runnerTurn: turn,
313
383
  });
@@ -316,9 +386,9 @@ class JobManager {
316
386
  if (!softLimitWarned && harnessTurnCount >= limits.softLimit) {
317
387
  softLimitWarned = true;
318
388
  console.warn(
319
- `[Harness] Job ${jobId} (${params.roleId}): turn ${harnessTurnCount} reached softLimit (${limits.softLimit})`,
389
+ `[Harness] Job ${job.id} (${params.roleId}): turn ${harnessTurnCount} reached softLimit (${limits.softLimit})`,
320
390
  );
321
- stream.emit('turn:warning', params.roleId, {
391
+ job.stream.emit('turn:warning', params.roleId, {
322
392
  turn: harnessTurnCount,
323
393
  softLimit: limits.softLimit,
324
394
  hardLimit: limits.hardLimit,
@@ -329,9 +399,9 @@ class JobManager {
329
399
  if (harnessTurnCount >= limits.hardLimit) {
330
400
  hardLimitReached = true;
331
401
  console.warn(
332
- `[Harness] Job ${jobId} (${params.roleId}): turn ${harnessTurnCount} reached hardLimit (${limits.hardLimit}). Pausing for approval.`,
402
+ `[Harness] Job ${job.id} (${params.roleId}): turn ${harnessTurnCount} reached hardLimit (${limits.hardLimit}). Pausing for approval.`,
333
403
  );
334
- stream.emit('turn:limit', params.roleId, {
404
+ job.stream.emit('turn:limit', params.roleId, {
335
405
  turn: harnessTurnCount,
336
406
  hardLimit: limits.hardLimit,
337
407
  });
@@ -339,7 +409,7 @@ class JobManager {
339
409
  }
340
410
  },
341
411
  onError: (error) => {
342
- stream.emit('stderr', params.roleId, { message: error });
412
+ job.stream.emit('stderr', params.roleId, { message: error });
343
413
  },
344
414
  },
345
415
  );
@@ -381,7 +451,7 @@ class JobManager {
381
451
  job.status = 'awaiting_input';
382
452
  job.targetRole = targetRole;
383
453
  const question = `[Turn limit] ${harnessTurnCount}턴 도달 (hardLimit: ${limits.hardLimit}). 계속 진행할까요?`;
384
- stream.emit('job:awaiting_input', params.roleId, {
454
+ job.stream.emit('job:awaiting_input', params.roleId, {
385
455
  ...doneData,
386
456
  question,
387
457
  awaitingInput: true,
@@ -394,7 +464,7 @@ class JobManager {
394
464
  else if (!params.isContinuation && hasQuestion(result.output)) {
395
465
  job.status = 'awaiting_input';
396
466
  job.targetRole = targetRole;
397
- stream.emit('job:awaiting_input', params.roleId, {
467
+ job.stream.emit('job:awaiting_input', params.roleId, {
398
468
  ...doneData,
399
469
  question: result.output.trim().split('\n').slice(-5).join('\n'),
400
470
  awaitingInput: true,
@@ -414,7 +484,7 @@ class JobManager {
414
484
  if (!pkResult.pass) {
415
485
  job.knowledgeDebt = pkResult.debt;
416
486
  console.log(
417
- `[Post-K] Job ${jobId} (${params.roleId}): ${pkResult.debt.length} knowledge debt item(s)`,
487
+ `[Post-K] Job ${job.id} (${params.roleId}): ${pkResult.debt.length} knowledge debt item(s)`,
418
488
  );
419
489
  for (const d of pkResult.debt) {
420
490
  console.log(` [Post-K] ${d.type}: ${d.message}`);
@@ -433,11 +503,21 @@ class JobManager {
433
503
 
434
504
  job.status = 'done';
435
505
  completeActivity(params.roleId);
436
- stream.emit('job:done', params.roleId, doneData);
506
+ job.stream.emit('job:done', params.roleId, doneData);
437
507
  // D-014: Update linked session message with final results
438
508
  if (job.sessionId) {
439
509
  this.finalizeSessionMessage(job, 'done', result);
440
510
  }
511
+
512
+ // EC-011: Job completion bonus (only for top-level jobs, not child dispatches)
513
+ if (!params.parentJobId && result) {
514
+ const totalTokens = (result.totalTokens?.input ?? 0) + (result.totalTokens?.output ?? 0);
515
+ const bonus = Math.min(2000, Math.max(500, Math.round(totalTokens / 500)));
516
+ try {
517
+ earnCoinsInternal(bonus, `Job done: ${params.roleId}`, `job:${job.id}`);
518
+ } catch { /* non-critical */ }
519
+ }
520
+
441
521
  // Cleanup orphaned child jobs (awaiting_input with no parent to respond)
442
522
  this.cleanupOrphanedChildren(job.id);
443
523
  }
@@ -449,7 +529,7 @@ class JobManager {
449
529
  job.status = 'awaiting_input';
450
530
  job.targetRole = targetRole;
451
531
  const question = `[Turn limit] ${harnessTurnCount}턴 도달 (hardLimit: ${limits.hardLimit}). 계속 진행할까요?`;
452
- stream.emit('job:awaiting_input', params.roleId, {
532
+ job.stream.emit('job:awaiting_input', params.roleId, {
453
533
  question,
454
534
  awaitingInput: true,
455
535
  targetRole,
@@ -462,14 +542,21 @@ class JobManager {
462
542
  job.error = err.message;
463
543
  completeActivity(params.roleId);
464
544
 
465
- stream.emit('job:error', params.roleId, { message: err.message });
545
+ job.stream.emit('job:error', params.roleId, { message: err.message });
466
546
  // D-014: Mark linked session message as error
467
547
  if (job.sessionId) {
468
548
  this.finalizeSessionMessage(job, 'error');
469
549
  }
550
+ })
551
+ .finally(() => {
552
+ // PSM-005: Release ports when job ends (success or error)
553
+ if (job.ports) {
554
+ const released = portRegistry.release(job.id);
555
+ if (released) {
556
+ console.log(`[JobManager] Released ports for ${job.id}: API :${job.ports.api}, Vite :${job.ports.vite}`);
557
+ }
558
+ }
470
559
  });
471
-
472
- return job;
473
560
  }
474
561
 
475
562
  /* ─── D-014: Session ↔ Job bridge ───────── */
@@ -533,6 +620,10 @@ class JobManager {
533
620
  turns: result.turns,
534
621
  tokens: result.totalTokens,
535
622
  }),
623
+ // KP-006: Include knowledge debt in session message
624
+ ...(job.knowledgeDebt && job.knowledgeDebt.length > 0 && {
625
+ knowledgeDebt: job.knowledgeDebt.map(d => ({ type: d.type, file: d.file, message: d.message })),
626
+ }),
536
627
  });
537
628
  }
538
629
 
@@ -673,6 +764,7 @@ class JobManager {
673
764
  sourceRole: effectiveResponder,
674
765
  parentJobId: job.id,
675
766
  isContinuation: !isFollowUp,
767
+ sessionId: job.sessionId,
676
768
  });
677
769
 
678
770
  job.childJobIds.push(newJob.id);
@@ -688,6 +780,26 @@ class JobManager {
688
780
  }
689
781
  return undefined;
690
782
  }
783
+
784
+ /** SCA-011: Find the most recent job linked to a session */
785
+ getJobBySessionId(sessionId: string): Job | undefined {
786
+ let active: Job | undefined;
787
+ let latest: Job | undefined;
788
+ for (const job of this.jobs.values()) {
789
+ if (job.sessionId === sessionId) {
790
+ // Prefer running or awaiting_input jobs
791
+ if (job.status === 'running' || job.status === 'awaiting_input') {
792
+ if (!active || job.createdAt > active.createdAt) {
793
+ active = job;
794
+ }
795
+ }
796
+ if (!latest || job.createdAt > latest.createdAt) {
797
+ latest = job;
798
+ }
799
+ }
800
+ }
801
+ return active ?? latest;
802
+ }
691
803
  }
692
804
 
693
805
  /* ─── Export singleton ───────────────────── */
@@ -46,6 +46,12 @@ export interface AddedFurniture {
46
46
  accent?: string;
47
47
  }
48
48
 
49
+ export interface OfficeExpansion {
50
+ /** Each entry = one floor. floors[0] = 1F, floors[1] = 2F, etc. Max 3 floors. */
51
+ floors: Array<{ rooms: 4 | 6 }>;
52
+ purchaseHistory: Array<{ type: string; cost: number; ts: string }>;
53
+ }
54
+
49
55
  export interface Preferences {
50
56
  instanceId?: string; // anonymous persistent token — auto-generated on first read
51
57
  appearances: Record<string, CharacterAppearance>;
@@ -56,6 +62,7 @@ export interface Preferences {
56
62
  deskOverrides?: Record<string, DeskOverride>; // keyed by role id
57
63
  removedFurniture?: string[]; // FurnitureDef.id list
58
64
  addedFurniture?: AddedFurniture[];
65
+ officeExpansion?: OfficeExpansion;
59
66
  }
60
67
 
61
68
  const CONFIG_DIR = '.tycono';
@@ -85,6 +92,7 @@ export function readPreferences(companyRoot: string): Preferences {
85
92
  deskOverrides: (data.deskOverrides as Record<string, DeskOverride>) ?? undefined,
86
93
  removedFurniture: (data.removedFurniture as string[]) ?? undefined,
87
94
  addedFurniture: (data.addedFurniture as AddedFurniture[]) ?? undefined,
95
+ officeExpansion: (data.officeExpansion as OfficeExpansion) ?? undefined,
88
96
  };
89
97
 
90
98
  // Auto-generate instanceId on first access
@@ -128,6 +136,9 @@ export function mergePreferences(companyRoot: string, partial: Partial<Preferenc
128
136
  addedFurniture: partial.addedFurniture !== undefined
129
137
  ? partial.addedFurniture
130
138
  : current.addedFurniture,
139
+ officeExpansion: partial.officeExpansion !== undefined
140
+ ? partial.officeExpansion
141
+ : current.officeExpansion,
131
142
  };
132
143
  writePreferences(companyRoot, merged);
133
144
  return merged;
@@ -8,6 +8,7 @@ import path from 'node:path';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { execSync } from 'node:child_process';
10
10
  import { writeConfig } from './company-config.js';
11
+ import { mergePreferences } from './preferences.js';
11
12
  import type { CompanyConfig } from './company-config.js';
12
13
 
13
14
  const __filename = fileURLToPath(import.meta.url);
@@ -307,6 +308,9 @@ export function scaffold(config: ScaffoldConfig): string[] {
307
308
  created.push('.tycono/config.json');
308
309
  }
309
310
 
311
+ // Save language preference (default: English)
312
+ mergePreferences(root, { language: config.language || 'en' });
313
+
310
314
  // Create team roles + install skills
311
315
  if (config.team !== 'custom') {
312
316
  const roles = loadTeam(config.team);
@@ -39,6 +39,8 @@ export interface Message {
39
39
  /** Execution stats */
40
40
  turns?: number;
41
41
  tokens?: { input: number; output: number };
42
+ /** KP-006: Knowledge debt warnings from Post-K check */
43
+ knowledgeDebt?: Array<{ type: string; file?: string; message: string }>;
42
44
  }
43
45
 
44
46
  /** How this session was created */
@@ -193,7 +195,7 @@ export function addMessage(sessionId: string, msg: Message, streaming = false):
193
195
  }
194
196
 
195
197
  /** Fields that can be updated on a message */
196
- export type MessageUpdate = Partial<Pick<Message, 'content' | 'status' | 'turns' | 'tokens' | 'dispatches' | 'readOnly'>>;
198
+ export type MessageUpdate = Partial<Pick<Message, 'content' | 'status' | 'turns' | 'tokens' | 'dispatches' | 'readOnly' | 'knowledgeDebt'>>;
197
199
 
198
200
  export function updateMessage(sessionId: string, messageId: string, updates: MessageUpdate): Session | undefined {
199
201
  const session = cache.get(sessionId);
@@ -208,6 +210,7 @@ export function updateMessage(sessionId: string, messageId: string, updates: Mes
208
210
  if (updates.tokens !== undefined) msg.tokens = updates.tokens;
209
211
  if (updates.dispatches !== undefined) msg.dispatches = updates.dispatches;
210
212
  if (updates.readOnly !== undefined) msg.readOnly = updates.readOnly;
213
+ if (updates.knowledgeDebt !== undefined) msg.knowledgeDebt = updates.knowledgeDebt;
211
214
  session.updatedAt = new Date().toISOString();
212
215
 
213
216
  if (updates.status === 'done' || updates.status === 'error') {
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-cyan-300:oklch(86.5% .127 207.078);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-purple-400:oklch(71.4% .203 305.504);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-xl:36rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.start\!{inset-inline-start:var(--spacing)!important}.end{inset-inline-end:var(--spacing)}.-top-2{top:calc(var(--spacing) * -2)}.top-0{top:calc(var(--spacing) * 0)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-16{top:calc(var(--spacing) * 16)}.top-\[5\%\]{top:5%}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:calc(var(--spacing) * 0)}.right-0\.5{right:calc(var(--spacing) * .5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.-bottom-0\.5{bottom:calc(var(--spacing) * -.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-full{bottom:100%}.-left-2{left:calc(var(--spacing) * -2)}.-left-\[5px\]{left:-5px}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[44\]{z-index:44}.z-\[45\]{z-index:45}.z-\[60\]{z-index:60}.z-\[61\]{z-index:61}.z-\[62\]{z-index:62}.z-\[63\]{z-index:63}.z-\[70\]{z-index:70}.z-\[80\]{z-index:80}.z-\[100\]{z-index:100}.z-\[9999\]{z-index:9999}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-auto{margin-top:auto}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-6{margin-left:calc(var(--spacing) * 6)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-0{height:calc(var(--spacing) * 0)}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-28{height:calc(var(--spacing) * 28)}.h-32{height:calc(var(--spacing) * 32)}.h-40{height:calc(var(--spacing) * 40)}.h-\[85vh\]{height:85vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[60px\]{max-height:60px}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[120px\]{max-height:120px}.max-h-\[160px\]{max-height:160px}.max-h-\[300px\]{max-height:300px}.max-h-\[380px\]{max-height:380px}.max-h-\[400px\]{max-height:400px}.max-h-\[480px\]{max-height:480px}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[240px\]{min-height:240px}.min-h-\[280px\]{min-height:280px}.min-h-\[400px\]{min-height:400px}.w-0{width:calc(var(--spacing) * 0)}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-60{width:calc(var(--spacing) * 60)}.w-\[10px\]{width:10px}.w-\[50px\]{width:50px}.w-\[220px\]{width:220px}.w-\[480px\]{width:480px}.w-\[520px\]{width:520px}.w-\[560px\]{width:560px}.w-\[700px\]{width:700px}.w-\[720px\]{width:720px}.w-\[960px\]{width:960px}.w-full{width:100%}.w-px{width:1px}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[95vw\]{max-width:95vw}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[240px\]{max-width:240px}.max-w-\[400px\]{max-width:400px}.max-w-\[1100px\]{max-width:1100px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-px{gap:1px}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-tr-sm{border-top-right-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--meeting-blue\)\]{border-color:var(--meeting-blue)}.border-\[var\(--terminal-border\)\]{border-color:var(--terminal-border)}.border-\[var\(--terminal-code-border\)\]{border-color:var(--terminal-code-border)}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.border-amber-800\/30{border-color:#953d004d}@supports (color:color-mix(in lab,red,red)){.border-amber-800\/30{border-color:color-mix(in oklab,var(--color-amber-800) 30%,transparent)}}.border-blue-800\/30{border-color:#193cb84d}@supports (color:color-mix(in lab,red,red)){.border-blue-800\/30{border-color:color-mix(in oklab,var(--color-blue-800) 30%,transparent)}}.border-current{border-color:currentColor}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-600{border-color:var(--color-green-600)}.border-green-800\/20{border-color:#01663033}@supports (color:color-mix(in lab,red,red)){.border-green-800\/20{border-color:color-mix(in oklab,var(--color-green-800) 20%,transparent)}}.border-green-800\/30{border-color:#0166304d}@supports (color:color-mix(in lab,red,red)){.border-green-800\/30{border-color:color-mix(in oklab,var(--color-green-800) 30%,transparent)}}.border-purple-400\/20{border-color:#c07eff33}@supports (color:color-mix(in lab,red,red)){.border-purple-400\/20{border-color:color-mix(in oklab,var(--color-purple-400) 20%,transparent)}}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-400{border-color:var(--color-red-400)}.border-red-800\/30{border-color:#9f07124d}@supports (color:color-mix(in lab,red,red)){.border-red-800\/30{border-color:color-mix(in oklab,var(--color-red-800) 30%,transparent)}}.border-red-800\/40{border-color:#9f071266}@supports (color:color-mix(in lab,red,red)){.border-red-800\/40{border-color:color-mix(in oklab,var(--color-red-800) 40%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-white\/40{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.border-white\/40{border-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.border-t-white{border-top-color:var(--color-white)}.bg-\[\#111\]{background-color:#111}.bg-\[var\(--accent\)\]\/10{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent\)\]\/10{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.bg-\[var\(--desk-wood\)\]{background-color:var(--desk-wood)}.bg-\[var\(--floor-light\)\]{background-color:var(--floor-light)}.bg-\[var\(--hud-bg-alt\)\]{background-color:var(--hud-bg-alt)}.bg-\[var\(--meeting-blue\)\]{background-color:var(--meeting-blue)}.bg-\[var\(--terminal-bg\)\]{background-color:var(--terminal-bg)}.bg-\[var\(--terminal-bg-deeper\)\]{background-color:var(--terminal-bg-deeper)}.bg-\[var\(--terminal-border\)\]{background-color:var(--terminal-border)}.bg-\[var\(--terminal-border-hover\)\]{background-color:var(--terminal-border-hover)}.bg-\[var\(--terminal-inline-bg\)\]{background-color:var(--terminal-inline-bg)}.bg-\[var\(--terminal-surface\)\]{background-color:var(--terminal-surface)}.bg-\[var\(--terminal-surface-light\)\]{background-color:var(--terminal-surface-light)}.bg-\[var\(--terminal-text-secondary\)\]{background-color:var(--terminal-text-secondary)}.bg-\[var\(--wall\)\]{background-color:var(--wall)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-700{background-color:var(--color-amber-700)}.bg-amber-900\/20{background-color:#7b330633}@supports (color:color-mix(in lab,red,red)){.bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900) 20%,transparent)}}.bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900) 30%,transparent)}}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-blue-400\/10{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-400\/10{background-color:color-mix(in oklab,var(--color-blue-400) 10%,transparent)}}.bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900) 20%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\/10{background-color:#05df721a}@supports (color:color-mix(in lab,red,red)){.bg-green-400\/10{background-color:color-mix(in oklab,var(--color-green-400) 10%,transparent)}}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/20{background-color:color-mix(in oklab,var(--color-green-500) 20%,transparent)}}.bg-green-900\/10{background-color:#0d542b1a}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900) 10%,transparent)}}.bg-green-900\/20{background-color:#0d542b33}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900) 20%,transparent)}}.bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900) 30%,transparent)}}.bg-purple-400{background-color:var(--color-purple-400)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-900\/10{background-color:#82181a1a}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900) 10%,transparent)}}.bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900) 20%,transparent)}}.bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/30{background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.bg-white\/15{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/60{background-color:#fff9}@supports (color:color-mix(in lab,red,red)){.bg-white\/60{background-color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[var\(--terminal-bg-deeper\)\]{--tw-gradient-from:var(--terminal-bg-deeper);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-3\.5{padding-left:calc(var(--spacing) * 3.5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.9em\]{font-size:.9em}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#E57373\]{color:#e57373}.text-\[var\(--active-green\)\]{color:var(--active-green)}.text-\[var\(--desk-dark\)\]{color:var(--desk-dark)}.text-\[var\(--terminal-text\)\]{color:var(--terminal-text)}.text-\[var\(--terminal-text-muted\)\]{color:var(--terminal-text-muted)}.text-\[var\(--terminal-text-secondary\)\]{color:var(--terminal-text-secondary)}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/90{color:color-mix(in oklab,var(--color-amber-300) 90%,transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/70{color:#fcbb00b3}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/70{color:color-mix(in oklab,var(--color-amber-400) 70%,transparent)}}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/90{color:color-mix(in oklab,var(--color-amber-400) 90%,transparent)}}.text-blue-200\/80{color:#bedbffcc}@supports (color:color-mix(in lab,red,red)){.text-blue-200\/80{color:color-mix(in oklab,var(--color-blue-200) 80%,transparent)}}.text-blue-300{color:var(--color-blue-300)}.text-blue-400\/60{color:#54a2ff99}@supports (color:color-mix(in lab,red,red)){.text-blue-400\/60{color:color-mix(in oklab,var(--color-blue-400) 60%,transparent)}}.text-blue-400\/80{color:#54a2ffcc}@supports (color:color-mix(in lab,red,red)){.text-blue-400\/80{color:color-mix(in oklab,var(--color-blue-400) 80%,transparent)}}.text-cyan-300\/70{color:#53eafdb3}@supports (color:color-mix(in lab,red,red)){.text-cyan-300\/70{color:color-mix(in oklab,var(--color-cyan-300) 70%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-green-300{color:var(--color-green-300)}.text-green-300\/90{color:#7bf1a8e6}@supports (color:color-mix(in lab,red,red)){.text-green-300\/90{color:color-mix(in oklab,var(--color-green-300) 90%,transparent)}}.text-green-400{color:var(--color-green-400)}.text-green-400\/60{color:#05df7299}@supports (color:color-mix(in lab,red,red)){.text-green-400\/60{color:color-mix(in oklab,var(--color-green-400) 60%,transparent)}}.text-green-400\/70{color:#05df72b3}@supports (color:color-mix(in lab,red,red)){.text-green-400\/70{color:color-mix(in oklab,var(--color-green-400) 70%,transparent)}}.text-green-400\/80{color:#05df72cc}@supports (color:color-mix(in lab,red,red)){.text-green-400\/80{color:color-mix(in oklab,var(--color-green-400) 80%,transparent)}}.text-purple-400\/50{color:#c07eff80}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/50{color:color-mix(in oklab,var(--color-purple-400) 50%,transparent)}}.text-purple-400\/70{color:#c07effb3}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/70{color:color-mix(in oklab,var(--color-purple-400) 70%,transparent)}}.text-red-200\/70{color:#ffcacab3}@supports (color:color-mix(in lab,red,red)){.text-red-200\/70{color:color-mix(in oklab,var(--color-red-200) 70%,transparent)}}.text-red-200\/80{color:#ffcacacc}@supports (color:color-mix(in lab,red,red)){.text-red-200\/80{color:color-mix(in oklab,var(--color-red-200) 80%,transparent)}}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-400\/80{color:#ff6568cc}@supports (color:color-mix(in lab,red,red)){.text-red-400\/80{color:color-mix(in oklab,var(--color-red-400) 80%,transparent)}}.text-red-500{color:var(--color-red-500)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-white\/15{color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.text-white\/15{color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.text-white\/20{color:#fff3}@supports (color:color-mix(in lab,red,red)){.text-white\/20{color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.text-white\/25{color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.text-white\/25{color:color-mix(in oklab,var(--color-white) 25%,transparent)}}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.text-white\/50{color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.placeholder-white\/20::placeholder{color:#fff3}@supports (color:color-mix(in lab,red,red)){.placeholder-white\/20::placeholder{color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.placeholder-white\/25::placeholder{color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.placeholder-white\/25::placeholder{color:color-mix(in oklab,var(--color-white) 25%,transparent)}}.accent-green-600{accent-color:var(--color-green-600)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-\[0\.06\]{opacity:.06}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[-4px_0_20px_rgba\(0\,0\,0\,0\.4\)\]{--tw-shadow:-4px 0 20px var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/name\:opacity-60:is(:where(.group\/name):hover *),.group-hover\/persona\:opacity-60:is(:where(.group\/persona):hover *){opacity:.6}}.placeholder\:text-\[var\(--terminal-text-muted\)\]::placeholder{color:var(--terminal-text-muted)}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-\[var\(--accent\)\]\/50:hover{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:border-\[var\(--accent\)\]\/50:hover{border-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.hover\:border-\[var\(--terminal-border-hover\)\]:hover{border-color:var(--terminal-border-hover)}.hover\:border-white\/20:hover{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/20:hover{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:bg-\[var\(--desk-wood\)\]:hover{background-color:var(--desk-wood)}.hover\:bg-\[var\(--terminal-bg\)\]:hover{background-color:var(--terminal-bg)}.hover\:bg-\[var\(--terminal-inline-bg\)\]:hover{background-color:var(--terminal-inline-bg)}.hover\:bg-\[var\(--terminal-surface\)\]:hover{background-color:var(--terminal-surface)}.hover\:bg-\[var\(--terminal-surface-light\)\]:hover{background-color:var(--terminal-surface-light)}.hover\:bg-amber-900\/40:hover{background-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-900\/40:hover{background-color:color-mix(in oklab,var(--color-amber-900) 40%,transparent)}}.hover\:bg-black\/30:hover{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/30:hover{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.hover\:bg-black\/90:hover{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/90:hover{background-color:color-mix(in oklab,var(--color-black) 90%,transparent)}}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-900\/40:hover{background-color:#0d542b66}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-900\/40:hover{background-color:color-mix(in oklab,var(--color-green-900) 40%,transparent)}}.hover\:bg-red-900\/10:hover{background-color:#82181a1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-900\/10:hover{background-color:color-mix(in oklab,var(--color-red-900) 10%,transparent)}}.hover\:bg-red-900\/50:hover{background-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-900\/50:hover{background-color:color-mix(in oklab,var(--color-red-900) 50%,transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-white\/30:hover{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/30:hover{background-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.hover\:bg-white\/\[0\.02\]:hover{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.02\]:hover{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.hover\:text-\[var\(--terminal-text\)\]:hover{color:var(--terminal-text)}.hover\:text-\[var\(--terminal-text-secondary\)\]:hover{color:var(--terminal-text-secondary)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-green-300:hover{color:var(--color-green-300)}.hover\:text-green-400\/60:hover{color:#05df7299}@supports (color:color-mix(in lab,red,red)){.hover\:text-green-400\/60:hover{color:color-mix(in oklab,var(--color-green-400) 60%,transparent)}}.hover\:text-red-400\/60:hover{color:#ff656899}@supports (color:color-mix(in lab,red,red)){.hover\:text-red-400\/60:hover{color:color-mix(in oklab,var(--color-red-400) 60%,transparent)}}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-white\/50:hover{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.hover\:text-white\/50:hover{color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.hover\:text-white\/60:hover{color:#fff9}@supports (color:color-mix(in lab,red,red)){.hover\:text-white\/60:hover{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.hover\:text-white\/70:hover{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:brightness-125:hover{--tw-brightness:brightness(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-\[\#64B5F6\]:focus{border-color:#64b5f6}.focus\:border-\[\#F59E0B\]:focus{border-color:#f59e0b}.focus\:border-\[\#FFB300\]\/50:focus{border-color:#ffb30080}.focus\:border-\[var\(--terminal-border-hover\)\]:focus{border-color:var(--terminal-border-hover)}.focus\:border-amber-800\/40:focus{border-color:#953d0066}@supports (color:color-mix(in lab,red,red)){.focus\:border-amber-800\/40:focus{border-color:color-mix(in oklab,var(--color-amber-800) 40%,transparent)}}.focus\:border-white\/25:focus{border-color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.focus\:border-white\/25:focus{border-color:color-mix(in oklab,var(--color-white) 25%,transparent)}}.focus\:bg-white\/30:focus{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.focus\:bg-white\/30:focus{background-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:flex{display:flex}.sm\:inline{display:inline}}@media(min-width:48rem){.md\:flex{display:flex}}}:root{--floor-light:#dfe6ee;--floor-dark:#cdd6e0;--wall:var(--terminal-bg,#eef1f7);--wall-shadow:#b0b8c8;--desk-wood:#4a5568;--desk-dark:#374151;--office-border:var(--terminal-border,#cbd5e1);--office-surface:var(--hud-bg-alt,#e8ecf4);--office-code-bg:var(--hud-bg,#edf0f7);--monitor-glow:#60a5fa;--active-green:#34d399;--idle-amber:#fbbf24;--offline-grey:#9ca3af;--meeting-blue:#3b82f6;--accent:#6366f1;--color-cto:#1565c0;--color-cbo:#e65100;--color-pm:#2e7d32;--color-engineer:#4a148c;--color-designer:#ad1457;--color-qa:#00695c;--pixel-border:#4a5568;--pixel-font:"Courier New", monospace;--terminal-bg:#1e1e2e;--terminal-bg-deeper:#181825;--terminal-surface:var(--hud-bg-alt,#252536);--terminal-surface-light:#2d2d40;--terminal-border:#b4c8f014;--terminal-border-hover:#b4c8f02e;--terminal-text:#ebf0ffeb;--terminal-text-secondary:#c8d2f099;--terminal-text-muted:#b4c3e659;--terminal-scrollbar:#b4c8f01a;--terminal-scrollbar-hover:#b4c8f038;--hud-bg:#1a1a2a;--hud-bg-alt:#232335;--hud-border:#b4c8f01a;--terminal-code-bg:#181825;--terminal-code-text:#89b4fa;--terminal-code-border:#b4c8f00f;--terminal-inline-bg:#b4c8f014}body{background:var(--floor-dark);height:100dvh;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;overflow:hidden}#root{flex-direction:column;height:100dvh;display:flex}@keyframes status-pulse{0%,to{box-shadow:0 0 6px #4caf5099}50%{box-shadow:0 0 14px #4caf50e6}}.status-dot-active{animation:2s ease-in-out infinite status-pulse}@keyframes monitor-glow{0%,to{box-shadow:0 0 6px #4a9eff4d}50%{box-shadow:0 0 10px #4a9eff99}}.monitor-active{animation:3s ease-in-out infinite monitor-glow}.side-panel{transition:transform .3s,right .3s;transform:translate(100%)}.side-panel.open{transform:translate(0)}.side-panel:not(.resizing){transition:transform .3s,right .3s,width .2s}.pro-panel-inline{position:relative!important}.pro-panel-inline .side-panel,.pro-panel-inline .dimmer{position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important}.pro-panel-inline .side-panel{width:100%!important;height:100%!important;box-shadow:none!important;border-left:none!important}.pro-panel-inline .side-panel .cursor-col-resize,.pro-panel-inline .dimmer{display:none!important}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate-fadeIn{animation:.3s ease-in-out fadeIn}.dimmer{opacity:0;pointer-events:none;transition:opacity .3s,right .3s}.dimmer.open{opacity:1;pointer-events:auto}@keyframes pixel-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes pixel-float{0%,to{opacity:1;transform:translateY(0)}50%{opacity:.6;transform:translateY(-6px)}}.pixel-card{background:var(--hud-bg-alt);border:3px solid var(--pixel-border);font-family:var(--pixel-font);cursor:pointer;image-rendering:pixelated;flex-direction:column;transition:border-color .15s;display:flex}.pixel-card:hover{border-color:var(--accent);z-index:10}.pixel-card.working{border-color:#ffd600;box-shadow:0 0 12px #ffd60040}.pixel-card--featured{border-width:3px;box-shadow:0 2px 12px #00000026}.pixel-card--featured .pixel-card-hdr{padding:6px 12px;font-size:10px}.pixel-card--featured .pixel-card-task{font-size:9px}.pixel-card-hdr{color:#fff;text-shadow:1px 1px #0006;flex-shrink:0;justify-content:space-between;align-items:center;padding:5px 10px;font-size:9px;font-weight:900;display:flex}.pixel-card-hdr .lvl{background:#0000004d;padding:0 4px;font-size:8px}.pixel-card-body{background:var(--terminal-surface);border-top:2px solid var(--pixel-border);border-bottom:2px solid var(--pixel-border);justify-content:center;align-items:flex-end;height:86px;padding-bottom:2px;display:flex;position:relative;overflow:hidden}.pixel-card--featured .pixel-card-body{height:100px}.pixel-desk{z-index:3;background:#6b5b4b;border:2px solid #4b3b2b;border-top-color:#8b7b6b;width:50%;height:12px;position:absolute;bottom:6px}.pixel-desk:before{content:"";background:#111;border:2px solid #333;width:14px;height:9px;position:absolute;top:-9px;left:50%;transform:translate(-50%)}.pixel-sprite{z-index:2;font-size:28px;animation:1s steps(2,end) infinite pixel-bounce}.pixel-card-body canvas{z-index:1;margin-bottom:-4px;position:relative}.pixel-status-dot{border:2px solid #fff;width:7px;height:7px;position:absolute;bottom:6px;left:6px}.pixel-card-task{font-size:8px;font-family:var(--pixel-font);color:var(--terminal-text-secondary);border-top:1px solid var(--pixel-border);flex-shrink:0;align-items:flex-start;gap:4px;min-height:28px;padding:5px 10px;display:flex}.pixel-card-task-icon{flex-shrink:0;line-height:1.4}.pixel-card-task-text{-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.4;display:-webkit-box;overflow:hidden}.pixel-card--featured .pixel-card-task{min-height:32px;font-size:9px}.pixel-card--hire{border-style:dashed;border-color:var(--pixel-border);cursor:pointer;justify-content:center;align-items:center;transition:border-color .15s,opacity .15s;display:flex}.pixel-card--hire:hover{border-color:var(--accent);opacity:.9}.pixel-card--hire-inner{flex-direction:column;align-items:center;gap:4px;padding:12px;display:flex}.pixel-card--hire-icon{color:var(--terminal-text-muted);font-size:20px;line-height:1}.pixel-card--hire-label{font-size:8px;font-family:var(--pixel-font);color:var(--terminal-text-muted);letter-spacing:1px;font-weight:900}.facility-card-compact{background:var(--hud-bg-alt);border:2px solid var(--pixel-border);font-family:var(--pixel-font);cursor:pointer;flex-direction:column;transition:border-color .15s;display:flex}.facility-card-compact:hover{border-color:var(--accent)}.fcc-hdr{color:#fff;text-shadow:1px 1px #0006;letter-spacing:1px;padding:3px 8px;font-size:8px;font-weight:900}.fcc-canvas{background:var(--terminal-surface);border-top:2px solid var(--pixel-border);justify-content:center;align-items:center;padding:4px 0;display:flex;overflow:hidden}.fcc-canvas canvas{max-height:64px}.fcc-body{border-top:2px solid var(--pixel-border);flex-direction:column;gap:2px;padding:6px 8px;display:flex}.fcc-desc{color:var(--terminal-text-secondary);opacity:.7;margin-bottom:2px;font-size:7px}.fcc-title{color:var(--terminal-text);font-size:9px;font-weight:900}.fcc-meta{color:var(--terminal-text-secondary);font-size:8px}.fcc-item{color:var(--terminal-text-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:7px;overflow:hidden}.pixel-section-label{font-size:9px;font-weight:900;font-family:var(--pixel-font);text-transform:uppercase;letter-spacing:2px;color:var(--terminal-text-secondary);padding:0 2px}.office-board{transition:transform .2s}.office-board:hover{transform:translateY(-2px)}@keyframes cursor-blink{0%,to{opacity:1}50%{opacity:0}}.typing-cursor{animation:.8s step-end infinite cursor-blink}@keyframes subtle-float{0%,to{transform:translateY(0)}50%{transform:translateY(-2px)}}.meeting-room:hover{animation:2s ease-in-out infinite subtle-float}@keyframes wave-pulse{0%,to{box-shadow:0 0 #b71c1c66}50%{box-shadow:0 0 0 6px #b71c1c00}}.wave-btn{animation:3s ease-in-out infinite wave-pulse}@keyframes wave-edge-flow{0%{stroke-dashoffset:20px}to{stroke-dashoffset:0}}.wave-edge-flow{animation:1s linear infinite wave-edge-flow}.event-markdown h1,.event-markdown h2,.event-markdown h3,.event-markdown h4,.event-markdown h5,.event-markdown h6{margin:.5em 0 .25em;font-weight:700}.event-markdown h1{font-size:1.1em}.event-markdown h2{font-size:1em}.event-markdown h3{color:#86efacb3;font-size:.95em}.event-markdown p{margin:.25em 0}.event-markdown ul,.event-markdown ol{margin:.25em 0;padding-left:1.5em}.event-markdown li{margin:.1em 0}.event-markdown ul{list-style:outside}.event-markdown ol{list-style:decimal}.event-markdown code{background:#ffffff14;border-radius:3px;padding:.1em .35em;font-size:.9em}.event-markdown pre{background:#0000004d;border-radius:6px;margin:.4em 0;padding:.5em .75em;overflow-x:auto}.event-markdown pre code{background:0 0;padding:0}.event-markdown table{border-collapse:collapse;margin:.4em 0;font-size:.9em}.event-markdown th,.event-markdown td{border:1px solid #ffffff26;padding:.25em .5em}.event-markdown th{background:#ffffff0f;font-weight:600}.event-markdown strong{color:#86efac}.event-markdown blockquote{opacity:.8;border-left:3px solid #86efac4d;margin:.3em 0;padding-left:.75em}.event-markdown a{color:#60a5fa;text-decoration:underline}.event-markdown hr{border-color:#ffffff1a;margin:.5em 0}@keyframes toast-in{0%{opacity:0;transform:translate(120%)}to{opacity:1;transform:translate(0)}}@keyframes toast-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(120%)}}.toast-enter{animation:.3s ease-out forwards toast-in}.toast-exit{animation:.3s ease-in forwards toast-out}.floor-grid{background-image:repeating-conic-gradient(var(--floor-light) 0% 25%,var(--floor-dark) 0% 50%);background-size:28px 28px}.floor-grid:after{content:"";pointer-events:none;z-index:0;background:repeating-linear-gradient(0deg,#0000 0,#0000 3px,#00000008 3px,#00000008 4px);position:absolute;top:0;right:0;bottom:0;left:0}.office-markdown p{margin:.35em 0}.office-markdown ul,.office-markdown ol{margin:.35em 0;padding-left:1.25em}.office-markdown li{margin:.2em 0}.office-markdown h1,.office-markdown h2,.office-markdown h3,.office-markdown h4,.office-markdown h5,.office-markdown h6{color:var(--terminal-text);margin:.6em 0 .3em;font-weight:700}.office-markdown h1{font-size:1.15em}.office-markdown h2{border-bottom:1px solid var(--office-border);padding-bottom:.2em;font-size:1.05em}.office-markdown h3{font-size:.95em}.office-markdown strong{color:var(--terminal-text)}.office-markdown a{color:var(--accent);text-decoration:underline}.office-markdown blockquote{border-left:3px solid var(--office-border);color:var(--terminal-text-muted);margin:.5em 0;padding-left:.75em}.office-markdown hr{border:none;border-top:1px solid var(--office-border);margin:.6em 0}.office-table{border-collapse:collapse;width:100%;font-size:.85em}.office-table th,.office-table td{border:1px solid var(--office-border);text-align:left;padding:.35em .6em}.office-table th{background:var(--office-surface);color:var(--terminal-text);font-weight:600}.office-table td{color:var(--terminal-text-secondary)}.office-code-block{background:var(--office-code-bg);border:1px solid var(--office-border);border-radius:8px;overflow:hidden}.office-code-block pre{margin:0}.office-code-block code{color:var(--terminal-text-secondary);font-family:SF Mono,Fira Code,monospace}.terminal-resize-handle:hover{background:var(--terminal-border-hover)}.terminal-scrollbar::-webkit-scrollbar{width:6px}.terminal-scrollbar::-webkit-scrollbar-track{background:0 0}.terminal-scrollbar::-webkit-scrollbar-thumb{background:var(--terminal-scrollbar);border-radius:3px}.terminal-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--terminal-scrollbar-hover)}.terminal-tab-scroll::-webkit-scrollbar{height:2px}.terminal-tab-scroll::-webkit-scrollbar-track{background:0 0}.terminal-tab-scroll::-webkit-scrollbar-thumb{background:var(--terminal-scrollbar);border-radius:1px}.terminal-markdown p{margin:.25em 0}.terminal-markdown ul,.terminal-markdown ol{margin:.25em 0;padding-left:1.25em}.terminal-markdown li{margin:.15em 0}.terminal-markdown h1,.terminal-markdown h2,.terminal-markdown h3,.terminal-markdown h4,.terminal-markdown h5,.terminal-markdown h6{color:var(--terminal-text);margin:.5em 0 .25em;font-weight:700}.terminal-markdown h1{font-size:1.1em}.terminal-markdown h2{font-size:1em}.terminal-markdown h3{font-size:.95em}.terminal-markdown strong{color:#ebf0fff2}.terminal-markdown a{color:#89b4fa;text-decoration:underline}.terminal-markdown blockquote{border-left:3px solid var(--terminal-border-hover);color:var(--terminal-text-secondary);margin:.5em 0;padding-left:.75em}.terminal-markdown hr{border:none;border-top:1px solid var(--terminal-border);margin:.75em 0}.terminal-inline-code{background:var(--terminal-inline-bg);border-radius:3px;padding:.15em .35em;font-family:SF Mono,Fira Code,monospace;font-size:.9em}.terminal-code-block{background:var(--terminal-code-bg);border:1px solid var(--terminal-code-border);border-radius:8px;overflow:hidden}.terminal-code-block pre{margin:0}.terminal-code-block code{color:var(--terminal-code-text);font-family:SF Mono,Fira Code,monospace}.terminal-table{border-collapse:collapse;width:100%;font-size:.85em}.terminal-table th,.terminal-table td{border:1px solid var(--terminal-border);text-align:left;padding:.35em .5em}.terminal-table th{color:var(--terminal-text);background:#ffebcd0d;font-weight:600}.terminal-table td{color:var(--terminal-text-secondary)}.typing-dots{align-items:center;gap:4px;padding:4px 0;display:inline-flex}.typing-dot{background:var(--terminal-text-muted,#888);border-radius:50%;width:6px;height:6px;animation:1.4s ease-in-out infinite typingBounce}.typing-dot:nth-child(2){animation-delay:.2s}.typing-dot:nth-child(3){animation-delay:.4s}@keyframes typingBounce{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-6px)}}.stream-activity-log{border:1px solid var(--terminal-border);background:var(--terminal-bg-deeper);border-radius:8px;margin-bottom:8px;overflow:hidden}.stream-activity-header{cursor:pointer;-webkit-user-select:none;user-select:none;background:#b4c8f008;align-items:center;gap:6px;padding:6px 10px;display:flex}.stream-activity-pulse{background:#60a5fa;border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.5s ease-in-out infinite status-pulse-blue;display:inline-block}@keyframes status-pulse-blue{0%,to{box-shadow:0 0 4px #60a5fa80}50%{box-shadow:0 0 10px #60a5fae6}}.stream-activity-summary{font-size:11px;font-family:var(--pixel-font);color:var(--terminal-text-secondary);font-weight:700}.stream-activity-events{flex-direction:column;gap:1px;max-height:280px;padding:4px 10px 8px;display:flex;overflow-y:auto}.stream-event-thinking{border-left:3px solid #a855f780;padding:4px 0 4px 8px;animation:.15s ease-out stream-event-in}.stream-event-thinking-header{cursor:pointer;align-items:center;gap:5px;display:flex}.stream-event-thinking-icon{opacity:.7;background:#a855f7;border-radius:50%;flex-shrink:0;width:6px;height:6px;display:inline-block}.stream-event-thinking-label{color:#c084fc;font-size:11px;font-weight:700;font-family:var(--pixel-font)}.stream-event-thinking-toggle{color:var(--terminal-text-muted);font-size:9px}.stream-event-thinking-content{color:var(--terminal-text-secondary);white-space:pre-wrap;word-break:break-word;max-height:100px;margin-top:4px;padding-left:2px;font-size:11px;line-height:1.5;overflow-y:auto}.stream-event-tool{flex-wrap:wrap;align-items:baseline;gap:4px;padding:3px 0;animation:.15s ease-out stream-event-in;display:flex}.stream-event-tool-badge{font-size:10px;font-weight:700;font-family:var(--pixel-font);color:#89b4fa;background:#89b4fa1f;border:1px solid #89b4fa40;border-radius:3px;flex-shrink:0;padding:1px 6px;line-height:1.5;display:inline-block}.stream-event-tool-path{color:var(--terminal-text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:280px;font-family:SF Mono,Fira Code,monospace;font-size:10px;overflow:hidden}.stream-event-tool-toggle{color:var(--terminal-text-muted);cursor:pointer;flex-shrink:0;font-size:9px}.stream-event-tool-detail{width:100%;color:var(--terminal-text-muted);white-space:pre-wrap;word-break:break-all;max-height:60px;margin-top:2px;padding-left:8px;font-family:SF Mono,Fira Code,monospace;font-size:9px;overflow-y:auto}.stream-event-dispatch{align-items:baseline;gap:6px;padding:3px 0;animation:.15s ease-out stream-event-in;display:flex}.stream-event-dispatch-badge{font-size:10px;font-weight:700;font-family:var(--pixel-font);color:#fbbf24;background:#fbbf241f;border:1px solid #fbbf2440;border-radius:3px;flex-shrink:0;padding:1px 6px;line-height:1.5;display:inline-block}.stream-event-dispatch-task{color:var(--terminal-text-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.stream-event-dispatch-progress{border-left:2px solid #fbbf2444;align-items:baseline;gap:6px;padding:2px 0 2px 12px;animation:.15s ease-out stream-event-in;display:flex}.stream-event-dispatch-progress-role{font-size:9px;font-weight:700;font-family:var(--pixel-font);color:#fbbf24;opacity:.7;flex-shrink:0}.stream-event-dispatch-progress-status{color:var(--terminal-text-muted);font-size:10px;font-style:italic}.stream-event-dispatch-progress-done{color:#4ade80;font-size:9px;font-weight:600}.stream-event-dispatch-progress-error{color:#f87171;font-size:9px;font-weight:600}@keyframes stream-event-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.td-scene{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:relative;overflow:hidden}.td-wrap{display:inline-block;position:relative}.td-canvas{image-rendering:pixelated;cursor:pointer}.td-overlay{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.td-nametag{letter-spacing:.5px;color:#fff;text-shadow:0 1px 2px #000000e6;white-space:nowrap;opacity:.9;align-items:center;gap:2px;font-family:Courier New,monospace;font-size:9px;font-weight:700;display:flex;position:absolute;transform:translate(-50%)}.td-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px;display:inline-block}.td-lvl{color:gold;opacity:.85;margin-left:1px;font-size:7px}.td-bubble{color:#ccc;white-space:normal;word-break:break-word;-webkit-line-clamp:2;text-overflow:ellipsis;background:#0f0f19eb;border:1px solid #ffffff14;border-radius:8px;-webkit-box-orient:vertical;max-width:220px;padding:3px 8px;font-family:Courier New,monospace;font-size:9px;line-height:1.4;display:-webkit-box;position:absolute;overflow:hidden;transform:translate(-50%)}.td-bubble:after{content:"";border-top:4px solid #0f0f19eb;border-left:4px solid #0000;border-right:4px solid #0000;position:absolute;bottom:-4px;left:50%;transform:translate(-50%)}.td-facility-label{letter-spacing:.5px;color:#fffc;white-space:nowrap;cursor:pointer;pointer-events:auto;background:#0000008c;border:1px solid #ffffff1a;border-radius:3px;padding:1px 5px;font-family:Courier New,monospace;font-size:8px;font-weight:700;transition:all .15s;position:absolute;transform:translate(-50%)}.td-facility-label:hover,.td-facility-label--hover{color:#fff;text-shadow:0 0 6px #fff6;background:#000000bf;border-color:#ffffff4d}@keyframes td-pulse{0%,to{opacity:1}50%{opacity:.4}}.quest-spotlight{box-shadow:0 0 0 2px var(--accent),0 0 12px 2px var(--accent);z-index:60;border-radius:6px;animation:1.2s ease-in-out infinite quest-glow}.quest-spotlight:not(.td-facility-label):not(.td-edit-btn){position:relative}@keyframes quest-glow{0%,to{box-shadow:0 0 0 2px var(--accent),0 0 12px 2px #6366f180}50%{box-shadow:0 0 0 3px var(--accent),0 0 20px 4px #6366f1cc}}.td-edit-btn{color:#8b949e;font-family:var(--pixel-font);cursor:pointer;image-rendering:auto;background:#141923d9;border:2px solid #8b949e4d;align-items:center;gap:4px;padding:6px 12px;font-size:10px;font-weight:900;transition:border-color .2s,color .2s,background .2s;display:flex;position:absolute;bottom:12px;left:12px}.td-edit-btn:hover{color:#fbbf24;border-color:#fbbf2499}.td-edit-btn--active{color:#3b82f6;background:#3b82f626;border-color:#3b82f6b3}.td-edit-btn__icon{font-size:14px;line-height:1}.td-scene--editing:after{content:"";pointer-events:none;z-index:50;border:4px solid #fbbf2499;animation:1.8s ease-in-out infinite edit-border-pulse;position:absolute;top:0;right:0;bottom:0;left:0}@keyframes edit-border-pulse{0%,to{border-color:#fbbf2466}50%{border-color:#fbbf24d9}}.td-edit-banner{color:#fbbf24;letter-spacing:2px;z-index:51;pointer-events:none;text-shadow:0 1px 3px #00000080;background:#fbbf2433;border:2px solid #fbbf24b3;border-radius:4px;padding:6px 24px;font-size:12px;font-weight:700;animation:1.8s ease-in-out infinite edit-banner-pulse;position:absolute;top:10px;left:50%;transform:translate(-50%)}.td-edit-banner__icon{margin-right:4px;font-size:14px}@keyframes edit-banner-pulse{0%,to{opacity:.7}50%{opacity:1}}.td-palette{image-rendering:auto;background:#141923e6;border:2px solid #8b949e4d;gap:2px;padding:4px 6px;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.td-palette__item{cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;width:28px;height:28px;font-size:14px;transition:background .15s,border-color .15s;display:flex}.td-palette__item:hover{background:#ffffff1a;border-color:#fbbf2480}.td-palette__item--active{background:#3b82f640;border-color:#3b82f6b3}.td-edit-tabs{z-index:20;gap:0;display:flex;position:absolute;bottom:48px;left:50%;transform:translate(-50%)}.td-edit-tabs__btn{letter-spacing:.5px;color:#ffffff80;cursor:pointer;background:#141923b3;border:2px solid #8b949e4d;padding:3px 12px;font-family:inherit;font-size:9px;font-weight:700;transition:background .15s,color .15s}.td-edit-tabs__btn:first-child{border-right:none}.td-edit-tabs__btn--active{color:#ffd54f;background:#141923f2;border-bottom-color:#0000}.td-expand-panel{image-rendering:auto;z-index:15;background:#141923e6;border:2px solid #8b949e4d;gap:6px;padding:8px 12px;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.td-expand-item{color:#e0e0e0;align-items:center;gap:8px;font-family:inherit;font-size:10px;display:flex}.td-expand-item__price{color:#ffd54f;font-weight:700}.td-expand-item__status{color:#4caf50;font-size:9px;font-weight:700}.td-expand-item__btn{color:#90caf9;cursor:pointer;background:#3b82f64d;border:1px solid #3b82f699;padding:2px 10px;font-family:inherit;font-size:9px;font-weight:700;transition:background .15s}.td-expand-item__btn:hover:not(:disabled){background:#3b82f680}.td-expand-item__btn:disabled{opacity:.4;cursor:not-allowed}.td-expand-item--purchased{color:#4caf50}.td-expand-item--locked{opacity:.5}.theme-dropup{background:var(--hud-bg);border:2px solid var(--pixel-border);z-index:60;border-radius:6px;gap:4px;padding:6px 8px;display:flex;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);box-shadow:0 -4px 16px #00000080}.theme-dropup__item{cursor:pointer;background:0 0;border:2px solid #0000;border-radius:4px;flex-direction:column;align-items:center;gap:3px;padding:4px 6px;transition:border-color .15s,background .15s;display:flex}.theme-dropup__item:hover{background:#ffffff0d;border-color:#fff3}.theme-dropup__item--active{border-color:var(--accent);background:#ffffff14}.theme-dropup__swatch{border:1px solid #ffffff26;border-radius:3px;gap:2px;padding:3px 5px;display:flex}.theme-dropup__name{font-size:11px}.td-hire-btn{color:#8b949e;font-family:var(--pixel-font);cursor:pointer;image-rendering:auto;background:#141923d9;border:2px dashed #8b949e66;align-items:center;gap:4px;padding:6px 12px;font-size:10px;font-weight:900;transition:border-color .2s,color .2s,background .2s;display:flex;position:absolute;bottom:12px;right:12px}.td-hire-btn:hover{color:#58a6ff;background:#141923f2;border-color:#58a6ff99}.td-hire-btn__icon{font-size:14px;line-height:1}.view-toggle-btn{font-family:var(--pixel-font);cursor:pointer;border:2px solid var(--pixel-border);background:var(--hud-bg-alt);color:var(--terminal-text);padding:2px 8px;font-size:10px;font-weight:900;transition:background .15s,border-color .15s}.view-toggle-btn.active{background:var(--terminal-bg);border-color:var(--terminal-border-hover);color:var(--active-green)}.customize-overlay{z-index:200;background:#000000a6;justify-content:center;align-items:center;animation:.15s ease-out customizeFadeIn;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}@keyframes customizeFadeIn{0%{opacity:0}to{opacity:1}}.customize-modal{background:var(--hud-bg,#1a1a2a);border:3px solid var(--pixel-border,#4a5568);width:580px;max-width:95vw;max-height:90vh;font-family:var(--pixel-font);flex-direction:column;animation:.2s ease-out customizeSlideIn;display:flex}@keyframes customizeSlideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.customize-header{border-bottom:2px solid var(--pixel-border);background:var(--hud-bg-alt,#232335);justify-content:space-between;align-items:center;padding:0;display:flex}.customize-tabs{gap:0;display:flex}.customize-tab{font-family:var(--pixel-font);cursor:pointer;color:var(--terminal-text-secondary);background:0 0;border:none;border-bottom:2px solid #0000;padding:8px 16px;font-size:11px;font-weight:900;transition:all .15s}.customize-tab:hover{color:var(--terminal-text)}.customize-tab.active{color:var(--accent,#6366f1);border-bottom-color:var(--accent,#6366f1)}.customize-close{font-family:var(--pixel-font);cursor:pointer;width:32px;height:32px;color:var(--terminal-text-secondary);background:0 0;border:none;justify-content:center;align-items:center;margin-right:4px;font-size:12px;font-weight:900;display:flex}.customize-close:hover{color:#ef4444}.customize-body{flex:1;gap:20px;padding:16px;display:flex;overflow-y:auto}.customize-preview{flex-direction:column;align-items:center;gap:10px;min-width:140px;display:flex}.customize-preview-bg{background:var(--terminal-bg,#1e1e2e);border:2px solid var(--pixel-border);justify-content:center;align-items:center;padding:12px 16px 8px;display:flex}.customize-preview-name{color:var(--terminal-text);text-align:center;font-size:10px;font-weight:900}.customize-preview-actions{gap:6px;display:flex}.customize-colors{flex-direction:column;flex:1;gap:10px;min-width:0;display:flex}.customize-row{flex-direction:column;gap:4px;display:flex}.customize-row-header{align-items:center;gap:8px;display:flex}.customize-row-label{color:var(--terminal-text-secondary);min-width:44px;font-size:10px;font-weight:900}.customize-row-current{border:2px solid var(--pixel-border);width:14px;height:14px}.customize-swatches{flex-wrap:wrap;gap:4px;display:flex}.customize-swatch{border:2px solid var(--pixel-border);cursor:pointer;width:22px;height:22px;padding:0;transition:transform .1s,outline-color .1s}.customize-swatch:hover{z-index:1;transform:scale(1.15)}.customize-btn{font-family:var(--pixel-font);cursor:pointer;color:var(--terminal-text-secondary);border:2px solid var(--pixel-border);background:0 0;padding:4px 10px;font-size:10px;font-weight:900;transition:all .15s}.customize-btn--random{background:var(--accent);color:#fff;border-color:var(--accent)}.customize-btn--random:hover{opacity:.85}.customize-btn--reset{color:var(--terminal-text-secondary);background:0 0}.customize-btn--reset:hover{color:var(--terminal-text)}.customize-btn--cancel{color:var(--terminal-text-secondary);background:0 0}.customize-btn--save{background:var(--active-green,#34d399);color:#000;border-color:var(--active-green)}.customize-btn--save:hover{opacity:.85}.customize-footer{border-top:2px solid var(--pixel-border);justify-content:flex-end;gap:8px;padding:10px 16px;display:flex}.customize-themes{grid-template-columns:repeat(3,1fr);gap:12px;width:100%;display:grid}.customize-theme-card{border:2px solid var(--pixel-border);cursor:pointer;font-family:var(--pixel-font);background:0 0;flex-direction:column;gap:6px;padding:0;transition:all .15s;display:flex}.customize-theme-card:hover{border-color:var(--terminal-text-secondary)}.customize-theme-card.active{border-color:var(--accent);box-shadow:0 0 8px var(--accent,#6366f1) 44}.customize-theme-preview{border:1px solid var(--pixel-border);flex-direction:column;height:64px;display:flex;overflow:hidden}.customize-theme-name{color:var(--terminal-text);text-align:center;padding:4px;font-size:10px;font-weight:900}.theme-btn{font-family:var(--pixel-font);cursor:pointer;border:2px solid var(--pixel-border);background:var(--hud-bg-alt);color:var(--terminal-text-secondary);padding:2px 6px;font-size:10px;font-weight:900;transition:all .15s}.theme-btn:hover{color:var(--terminal-text);border-color:var(--terminal-text-secondary)}.side-panel-chat{--terminal-bg:#f8f9fa;--terminal-bg-deeper:#f0f1f3;--terminal-surface:#fff;--terminal-surface-light:#eef0f4;--terminal-border:#00000014;--terminal-border-hover:#00000029;--terminal-text:#1a1a2e;--terminal-text-secondary:#1e28508c;--terminal-text-muted:#1e28504d;--terminal-scrollbar:#0000000f;--terminal-scrollbar-hover:#00000024;--terminal-code-bg:#f0f1f3;--terminal-code-text:#1565c0;--terminal-code-border:#0000000f;--terminal-inline-bg:#f0f1f3}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}