@telepath-computer/television 0.1.46 → 0.1.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ artifact-view{display:flex;flex-direction:column;width:100%;height:100%;border-radius:var(--radius-16);overflow:hidden;transition:box-shadow .15s ease,transform .15s ease}artifact-view .artifact-title-bar{display:flex;align-items:center;justify-content:space-between;height:30px;padding:0 6px 0 10px;border:0;box-shadow:inset 0 .5px 0 var(--color-border-muted);font-size:12px;font-weight:500;touch-action:none;-webkit-user-select:none;user-select:none}artifact-view[dragging=true]{box-shadow:0 6px 16px #00000024,0 20px 56px #0000003d}artifact-view[dragging=true] .artifact-title-bar{background:linear-gradient(180deg,var(--color-highlight),transparent),var(--color-surface-muted);backdrop-filter:none;-webkit-backdrop-filter:none}artifact-view .artifact-title-group{display:flex;align-items:center;gap:6px;min-width:0}artifact-view .artifact-title-icon{display:inline-flex;flex:none;color:var(--color-text-muted)}artifact-view .artifact-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}artifact-view .artifact-close-btn{width:20px;height:20px;border-radius:var(--radius-4)}artifact-view .artifact-content{flex:1;min-height:0;overflow:auto;background:var(--color-surface)}artifact-view iframe.artifact-frame{border:0;width:100%;display:block}artifact-view .artifact-placeholder{display:flex;align-items:center;justify-content:center;color:var(--color-text-muted, #888);font-size:12px}layout-view{width:100%;flex:1;min-width:0;min-height:0;display:flex;align-items:flex-start;padding:40px 0 60px;overflow:hidden;outline:none;position:relative;--layout-unit-x: 120px;--layout-unit-y: 120px;--layout-gap: 16px;--layout-drag-transition-ms: 0ms;--color-drag-target: color-mix( in srgb, var(--color-border, var(--neutral-300, #cbd5e1)) 55%, transparent )}layout-view .track{display:flex;align-items:start;gap:var(--layout-gap);flex-shrink:0;width:max-content;will-change:transform;transition:transform .2s ease}layout-view .node{display:grid;grid-template-columns:repeat(4,var(--layout-unit-x));grid-template-rows:repeat(6,var(--layout-unit-y));gap:var(--layout-gap);align-self:start;width:calc(var(--layout-unit-x) * 4 + var(--layout-gap) * 3);will-change:transform}layout-view .card-slot{border-radius:var(--radius-12);box-sizing:border-box;cursor:default;min-width:0;min-height:0;position:relative;z-index:1}layout-view .card-slot artifact-view{width:100%;height:100%}layout-view .card-placeholder{border-radius:var(--radius-12);background:var(--color-drag-target);position:relative;z-index:0}layout-view .card-placeholder[data-layout-placeholder-ghost=true]{background:transparent;border:0;opacity:0;pointer-events:none}layout-view .drag-preview{position:fixed;z-index:10;pointer-events:none}layout-view .drag-preview>*{width:100%;height:100%}@keyframes card-focus-pulse{0%{box-shadow:0 0 0 0 var(--color-accent, #3b82f6)}20%{box-shadow:0 0 0 6px color-mix(in srgb,var(--color-accent, #3b82f6) 60%,transparent)}40%{box-shadow:0 0 0 0 transparent}60%{box-shadow:0 0 0 6px color-mix(in srgb,var(--color-accent, #3b82f6) 60%,transparent)}to{box-shadow:0 0 0 0 transparent}}layout-view .card-slot.card-focus-pulse{animation:card-focus-pulse .6s ease-out 1}screen-view{width:100%;flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}screen-view .empty{flex:1;display:flex;align-items:center;justify-content:center;margin:0;padding:16px;text-align:center;color:var(--color-text-muted)}home-screen{display:flex;flex-direction:column;flex:1;width:100%;min-height:100vh;padding:0 24px;box-sizing:border-box}home-screen:before,home-screen:after{content:"";flex:1 1 0}home-screen:before{min-height:20vh}home-screen .tiles,home-screen .empty{flex:0 0 auto;width:100%;max-width:560px;margin:0 auto}home-screen .tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;list-style:none;padding:0}home-screen .tile{display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:100%;min-height:84px;padding:14px 16px;border-radius:var(--radius-16);text-align:left}home-screen .empty{color:var(--color-text-muted);text-align:center}screen-breadcrumb{display:inline-flex;align-items:center;gap:0;font-size:13px;font-weight:600;color:#000000b3}screen-breadcrumb[tone=dark]{color:#ffffffd9}screen-breadcrumb .home{border-radius:var(--radius-8)}screen-breadcrumb .separator{display:inline-flex;align-items:center;color:#00000059}screen-breadcrumb[tone=dark] .separator{color:#ffffff80}screen-breadcrumb dropdown-menu [slot=trigger]{padding:2px 6px;border-radius:var(--radius-8)}screen-breadcrumb ui-popover::part(panel){min-width:240px;font-weight:var(--font-weight-body)}screen-breadcrumb .screen-form{display:grid;gap:var(--space-12);color:var(--color-text);font-size:var(--text-base);font-weight:var(--font-weight-body)}screen-breadcrumb .screen-form .confirm-text{margin:0}screen-breadcrumb .screen-form .error{margin:0;color:var(--color-danger);font-size:var(--text-sm)}screen-breadcrumb .screen-form .actions{display:flex;justify-content:flex-end;gap:var(--space-6)}screen-create-button{display:inline-flex;align-items:center;color:#000000b3}screen-create-button[tone=dark]{color:#ffffffd9}screen-create-button .new-screen{border-radius:var(--radius-4)}message-history{position:relative;display:flex;flex-direction:column;min-height:0;color:#ffffffe6;line-height:1.5}message-history:not(:has(.message)){display:none}message-history .history-scroll{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:12px;padding:24px 8px 12px;overflow-y:auto;mask-image:linear-gradient(to bottom,transparent 0,black 24px,black calc(100% - 24px),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 24px,black calc(100% - 24px),transparent 100%)}message-history[data-pinned] .history-scroll{mask-image:linear-gradient(to bottom,transparent 0,black 24px);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 24px)}message-history .message{padding:6px 10px;border-radius:var(--radius-8);word-wrap:break-word}message-history .message-user{align-self:flex-start;max-width:85%;background:#ffffff26;white-space:pre-wrap}message-history .message-assistant{align-self:stretch}message-history .message-tool_call{align-self:stretch;border:1px solid rgba(255,255,255,.12);background:#ffffff0d}message-history .tool-call-header{display:flex;align-items:baseline;justify-content:space-between;gap:8px}message-history .tool-call-title{font-weight:600}message-history .tool-call-meta{color:#fff9;font-size:.85em;white-space:nowrap}message-history .tool-call-text{margin:6px 0 0;padding:8px 10px;border-radius:var(--radius-8);background:#0003;color:#ffffffd9;overflow:auto;max-height:240px;white-space:pre-wrap;font-family:var(--font-mono);font-size:.9em}message-history .message-assistant>:first-child{margin-top:0}message-history .message-assistant>:last-child{margin-bottom:0}message-history .message-assistant p,message-history .message-assistant ul,message-history .message-assistant ol,message-history .message-assistant pre,message-history .message-assistant blockquote{margin:0 0 8px}message-history .message-assistant h1,message-history .message-assistant h2,message-history .message-assistant h3,message-history .message-assistant h4{margin:12px 0 4px;font-weight:600;line-height:1.3}message-history .message-assistant ul,message-history .message-assistant ol{padding-left:20px}message-history .message-assistant code{padding:1px 4px;border-radius:var(--radius-4);background:#ffffff1a;font-family:var(--font-mono);font-size:.9em}message-history .message-assistant pre{padding:8px 10px;border-radius:var(--radius-8);background:#ffffff14;overflow-x:auto}message-history .message-assistant pre code{padding:0;background:none}message-history .message-assistant blockquote{padding-left:10px;border-left:2px solid rgba(255,255,255,.2);color:#ffffffb3}message-history .message-assistant a{color:#fffffff2;text-decoration:underline;text-underline-offset:2px}message-history .history-jump{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--radius-full);background:#ffffff26;color:#ffffffe6;transition:opacity .15s ease}message-history .history-jump:hover{background:#ffffff40}message-history[data-pinned] .history-jump{opacity:0;pointer-events:none}command-panel{display:flex;width:320px;padding:12px 16px;border-radius:var(--radius-16);z-index:1000}command-panel .trigger{flex:1;min-width:0;display:flex;align-items:center;justify-content:flex-start;gap:8px;color:#ffffff8c;line-height:1.4;cursor:text;outline:none}command-panel .trigger .label{flex:1;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}command-panel .trigger .kbd{flex:0 0 auto;padding:1px 6px;border-radius:var(--radius-4);background:#ffffff1a;border:.5px solid rgba(255,255,255,.15);color:#ffffff8c;font-size:.85em;line-height:1.3;letter-spacing:.02em}command-panel[open]{width:380px;padding:8px;flex-direction:column}command-panel[open] message-history{max-height:min(60vh,480px);margin:-8px -8px 0}command-panel[open] .input,command-panel[open] .input:focus{flex:0 0 auto;min-width:0;max-height:192px;padding:8px 10px;border:none;border-radius:var(--radius-8);resize:none;outline:none;box-shadow:none;background:#ffffff26;color:#ffffffe6;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:1.4;field-sizing:content}television-app{width:100%;height:100%;display:block;background:url(./gradient-textured-e-Dp94sOPT.jpg) center / cover no-repeat}.electron-draggable{-webkit-app-region:drag}.electron-draggable>*{-webkit-app-region:no-drag}television-app>main{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;-webkit-user-select:none;user-select:none}television-app>main.auth-gate{align-items:center;justify-content:center}television-app>main>screen-view,television-app>main>home-screen{flex:1;min-height:0}television-app>main>.chrome{position:absolute;top:0;right:0;bottom:0;left:0;padding:8px;pointer-events:none;display:flex;flex-direction:column}television-app>main>.chrome>*{pointer-events:auto}television-app>main>.chrome>.top-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-8, 8px)}body.electron television-app>main>.chrome>.top-row{padding-left:78px}television-app>main>.chrome>command-panel{margin-top:auto;align-self:flex-end}.auth-modal{width:min(384px,100%);display:flex;flex-direction:column;padding:20px;border:1px solid var(--color-border);border-radius:var(--radius-12);background:var(--color-bg)}.auth-form{display:flex;flex-direction:column;gap:12px}.auth-modal-title,.auth-modal-copy{margin:0}.auth-token-input-invalid{border-color:#c74343}:root{--color-bg: var(--neutral-200);--color-border: var(--neutral-300)}
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Television</title>
7
- <script type="module" crossorigin src="./assets/index-Ibdvn9WQ.js"></script>
8
- <link rel="stylesheet" crossorigin href="./assets/index-BlDY6iCd.css">
7
+ <script type="module" crossorigin src="./assets/index-B9Lt1Vk_.js"></script>
8
+ <link rel="stylesheet" crossorigin href="./assets/index-CxPYSz1c.css">
9
9
  </head>
10
10
  <body></body>
11
11
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telepath-computer/television",
3
- "version": "0.1.46",
3
+ "version": "0.1.48",
4
4
  "type": "module",
5
5
  "main": "dist/cli.cjs",
6
6
  "bin": {
package/skill/SKILL.md CHANGED
@@ -15,8 +15,14 @@ in the current implementation.
15
15
 
16
16
  ## Mental model
17
17
 
18
- - A **screen** is the screen and layout container.
19
- - An **artifact** is one displayed result on that screen.
18
+ - A **screen** is a named viewer surface with a layout.
19
+ - An **artifact** is a file-backed result that can exist independently of any
20
+ screen. It can be unplaced, attached to one screen, or attached to multiple
21
+ screens.
22
+ - **Screen membership** is separate from artifact identity: attaching/detaching
23
+ controls which screens show an artifact; deleting removes the artifact
24
+ globally. The CLI create commands require `--screen` so in-progress artifacts
25
+ are visible immediately.
20
26
  - An **internal artifact** is a Television-managed bundle. You create a pending
21
27
  bundle, edit files in that bundle, then commit it.
22
28
  - An **external artifact** is a pointer to an existing absolute file on disk.
@@ -342,6 +348,8 @@ Or:
342
348
  tv create-internal-artifact --screen "<screen-id>" --type text/html --title "Artifact title"
343
349
  ```
344
350
 
351
+ `--screen` is required for internal artifact creation so the user can see the in-progress artifact immediately.
352
+
345
353
  3. Read the returned pending path and edit files there.
346
354
  4. Write `artifact.md`.
347
355
  5. In `artifact.md`, capture the user's language faithfully in `## User intent` before doing the rest of the authoring work. Use direct quotes when helpful, or a close paraphrase when that is clearer, but keep it representative of what the user actually said they wanted.
@@ -421,6 +429,8 @@ Or:
421
429
  tv create-external-artifact --screen "<screen-id>" --type text/html --title "Artifact title" --path /absolute/path/to/file.html
422
430
  ```
423
431
 
432
+ `--screen` is required for CLI creation so the file appears on a visible screen immediately.
433
+
424
434
  Rules:
425
435
 
426
436
  - `--path` must be absolute
@@ -430,38 +440,67 @@ Rules:
430
440
 
431
441
  ## CLI reference
432
442
 
433
- Workflow commands:
443
+ Artifact commands:
434
444
 
435
445
  ```bash
436
446
  tv create-internal-artifact --screen "<screen-id>" --type <text/markdown|text/html> --title "Artifact title"
447
+ tv create-external-artifact --screen "<screen-id>" --type <text/markdown|text/html> --title "Artifact title" --path /absolute/path
437
448
  tv edit-internal-artifact --id "<artifact-id>"
438
449
  tv commit-pending-artifact --id "<artifact-id>"
439
450
  tv abandon-pending-artifact --id "<artifact-id>"
440
- tv create-external-artifact --screen "<screen-id>" --type <text/markdown|text/html> --title "Artifact title" --path /absolute/path
441
451
  tv update-artifact --id "<artifact-id>" --title "New title"
442
- tv remove-artifact --id "<artifact-id>" --screen "<screen-id>"
443
- tv remove-screen --id "<screen-id>"
452
+ tv list-artifacts [--screen "<screen-id>"] [--unplaced]
453
+ tv get-artifact --id "<artifact-id>"
454
+ tv delete-artifact --id "<artifact-id>"
444
455
  ```
445
456
 
446
- Read and server commands:
457
+ Screen commands:
447
458
 
448
459
  ```bash
460
+ tv create-screen --name "Screen name"
449
461
  tv list-screens
450
462
  tv get-screen --id "<screen-id>"
451
- tv create-screen --name "Screen name"
452
- tv storage-path
463
+ tv remove-screen --id "<screen-id>"
464
+ ```
465
+
466
+ Screen membership commands:
467
+
468
+ ```bash
469
+ tv attach-artifact --id "<artifact-id>" --screen "<screen-id>"
470
+ tv detach-artifact --id "<artifact-id>" --screen "<screen-id>"
471
+ ```
472
+
473
+ Viewer commands:
474
+
475
+ ```bash
476
+ tv viewer-status
477
+ tv set-active-screen --id "<screen-id>"
478
+ tv focus-artifact --id "<artifact-id>" [--screen "<screen-id>"]
479
+ ```
480
+
481
+ Server commands:
482
+
483
+ ```bash
453
484
  tv status
485
+ tv storage-path
454
486
  tv serve
455
487
  tv stop
456
488
  ```
457
489
 
458
490
  CLI behavior notes:
459
491
 
492
+ - `--screen` is required on CLI create commands so new artifacts are visible immediately; use `tv attach-artifact` and `tv detach-artifact` for later screen membership changes
460
493
  - workflow and mutation commands print plain text
461
494
  - read commands print JSON
462
495
  - `tv get-screen` includes artifact `kind` and `status`
463
- - `tv remove-artifact` removes the artifact reference from the named screen; if another screen still references it, the artifact is unlinked and kept alive; otherwise it cascades to trash/discard
496
+ - `tv attach-artifact` appends a default-sized card to the right end of the strip; idempotent if the artifact is already on that screen
497
+ - `tv detach-artifact` removes the card from a screen's layout; the artifact metadata is never touched, even on the last reference
498
+ - `tv delete-artifact` is the way to globally remove an artifact (detaches from every screen, then trashes the bundle / forgets the external pointer / discards pending-create)
499
+ - `tv list-artifacts` accepts `--screen <id>` to filter by screen membership and `--unplaced` to surface artifacts attached to no screen
464
500
  - `tv update-artifact` changes title metadata only
501
+ - `tv set-active-screen` sets which screen the GUI is focused on; the change is persisted and broadcast to connected clients
502
+ - `tv focus-artifact` is a transient nudge: clients switch screens if needed, scroll the artifact's card into view, and play a brief highlight animation; pass `--screen <id>` to pin which screen, otherwise the server picks one (preferring the active screen when the artifact is there)
503
+ - `tv viewer-status` prints the active screen ID and the count of connected GUI clients
465
504
  - when the CLI reports an error, follow the directive to run `tv help`
466
505
 
467
506
  ## Deferred or out of scope
@@ -1 +0,0 @@
1
- artifact-view{display:flex;flex-direction:column;width:100%;height:100%;border-radius:var(--radius-16);overflow:hidden;transition:box-shadow .15s ease,transform .15s ease}artifact-view .artifact-title-bar{display:flex;align-items:center;justify-content:space-between;height:30px;padding:0 6px 0 10px;border:0;box-shadow:inset 0 .5px 0 var(--color-border-muted);font-size:12px;font-weight:500;touch-action:none;-webkit-user-select:none;user-select:none}artifact-view[dragging=true]{box-shadow:0 6px 16px #00000024,0 20px 56px #0000003d}artifact-view[dragging=true] .artifact-title-bar{background:linear-gradient(180deg,var(--color-highlight),transparent),var(--color-surface-muted);backdrop-filter:none;-webkit-backdrop-filter:none}artifact-view .artifact-title-group{display:flex;align-items:center;gap:6px;min-width:0}artifact-view .artifact-title-icon{display:inline-flex;flex:none;color:var(--color-text-muted)}artifact-view .artifact-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}artifact-view .artifact-close-btn{width:20px;height:20px;border-radius:var(--radius-4)}artifact-view .artifact-content{flex:1;min-height:0;overflow:auto;background:var(--color-surface)}artifact-view iframe.artifact-frame{border:0;width:100%;display:block}artifact-view .artifact-placeholder{display:flex;align-items:center;justify-content:center;color:var(--color-text-muted, #888);font-size:12px}layout-view{width:100%;flex:1;min-width:0;min-height:0;display:flex;align-items:flex-start;padding:40px 0 60px;overflow:hidden;outline:none;position:relative;--layout-unit-x: 120px;--layout-unit-y: 120px;--layout-gap: 16px;--layout-drag-transition-ms: 0ms;--color-drag-target: color-mix( in srgb, var(--color-border, var(--neutral-300, #cbd5e1)) 55%, transparent )}layout-view .track{display:flex;align-items:start;gap:var(--layout-gap);flex-shrink:0;width:max-content;will-change:transform;transition:transform .2s ease}layout-view .node{display:grid;grid-template-columns:repeat(4,var(--layout-unit-x));grid-template-rows:repeat(6,var(--layout-unit-y));gap:var(--layout-gap);align-self:start;width:calc(var(--layout-unit-x) * 4 + var(--layout-gap) * 3);will-change:transform}layout-view .card-slot{border-radius:var(--radius-12);box-sizing:border-box;cursor:default;min-width:0;min-height:0;position:relative;z-index:1}layout-view .card-slot artifact-view{width:100%;height:100%}layout-view .card-placeholder{border-radius:var(--radius-12);background:var(--color-drag-target);position:relative;z-index:0}layout-view .card-placeholder[data-layout-placeholder-ghost=true]{background:transparent;border:0;opacity:0;pointer-events:none}layout-view .drag-preview{position:fixed;z-index:10;pointer-events:none}layout-view .drag-preview>*{width:100%;height:100%}screen-view{width:100%;flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}screen-view .empty{flex:1;display:flex;align-items:center;justify-content:center;margin:0;padding:16px;text-align:center;color:var(--color-text-muted)}home-screen{display:flex;flex-direction:column;flex:1;width:100%;min-height:100vh;padding:0 24px;box-sizing:border-box}home-screen:before,home-screen:after{content:"";flex:1 1 0}home-screen:before{min-height:20vh}home-screen .tiles,home-screen .empty{flex:0 0 auto;width:100%;max-width:560px;margin:0 auto}home-screen .tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;list-style:none;padding:0}home-screen .tile{display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:100%;min-height:84px;padding:14px 16px;border-radius:var(--radius-16);text-align:left}home-screen .empty{color:var(--color-text-muted);text-align:center}screen-breadcrumb{display:inline-flex;align-items:center;gap:0;font-size:13px;font-weight:600;color:#000000b3}screen-breadcrumb[tone=dark]{color:#ffffffd9}screen-breadcrumb .home{border-radius:var(--radius-8)}screen-breadcrumb .separator{display:inline-flex;align-items:center;color:#00000059}screen-breadcrumb[tone=dark] .separator{color:#ffffff80}screen-breadcrumb dropdown-menu [slot=trigger]{padding:2px 6px;border-radius:var(--radius-8)}screen-breadcrumb ui-popover::part(panel){min-width:240px;font-weight:var(--font-weight-body)}screen-breadcrumb .screen-form{display:grid;gap:var(--space-12);color:var(--color-text);font-size:var(--text-base);font-weight:var(--font-weight-body)}screen-breadcrumb .screen-form .confirm-text{margin:0}screen-breadcrumb .screen-form .error{margin:0;color:var(--color-danger);font-size:var(--text-sm)}screen-breadcrumb .screen-form .actions{display:flex;justify-content:flex-end;gap:var(--space-6)}screen-create-button{display:inline-flex;align-items:center;color:#000000b3}screen-create-button[tone=dark]{color:#ffffffd9}screen-create-button .new-screen{border-radius:var(--radius-4)}message-history{position:relative;display:flex;flex-direction:column;min-height:0;color:#ffffffe6;line-height:1.5}message-history:not(:has(.message)){display:none}message-history .history-scroll{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:12px;padding:24px 8px 12px;overflow-y:auto;mask-image:linear-gradient(to bottom,transparent 0,black 24px,black calc(100% - 24px),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 24px,black calc(100% - 24px),transparent 100%)}message-history[data-pinned] .history-scroll{mask-image:linear-gradient(to bottom,transparent 0,black 24px);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 24px)}message-history .message{padding:6px 10px;border-radius:var(--radius-8);word-wrap:break-word}message-history .message-user{align-self:flex-start;max-width:85%;background:#ffffff26;white-space:pre-wrap}message-history .message-assistant{align-self:stretch}message-history .message-assistant>:first-child{margin-top:0}message-history .message-assistant>:last-child{margin-bottom:0}message-history .message-assistant p,message-history .message-assistant ul,message-history .message-assistant ol,message-history .message-assistant pre,message-history .message-assistant blockquote{margin:0 0 8px}message-history .message-assistant h1,message-history .message-assistant h2,message-history .message-assistant h3,message-history .message-assistant h4{margin:12px 0 4px;font-weight:600;line-height:1.3}message-history .message-assistant ul,message-history .message-assistant ol{padding-left:20px}message-history .message-assistant code{padding:1px 4px;border-radius:var(--radius-4);background:#ffffff1a;font-family:var(--font-mono);font-size:.9em}message-history .message-assistant pre{padding:8px 10px;border-radius:var(--radius-8);background:#ffffff14;overflow-x:auto}message-history .message-assistant pre code{padding:0;background:none}message-history .message-assistant blockquote{padding-left:10px;border-left:2px solid rgba(255,255,255,.2);color:#ffffffb3}message-history .message-assistant a{color:#fffffff2;text-decoration:underline;text-underline-offset:2px}message-history .history-jump{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--radius-full);background:#ffffff26;color:#ffffffe6;transition:opacity .15s ease}message-history .history-jump:hover{background:#ffffff40}message-history[data-pinned] .history-jump{opacity:0;pointer-events:none}command-panel{display:flex;width:320px;padding:12px 16px;border-radius:var(--radius-16);z-index:1000}command-panel .trigger{flex:1;min-width:0;display:flex;align-items:center;justify-content:flex-start;gap:8px;color:#ffffff8c;line-height:1.4;cursor:text;outline:none}command-panel .trigger .label{flex:1;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}command-panel .trigger .kbd{flex:0 0 auto;padding:1px 6px;border-radius:var(--radius-4);background:#ffffff1a;border:.5px solid rgba(255,255,255,.15);color:#ffffff8c;font-size:.85em;line-height:1.3;letter-spacing:.02em}command-panel[open]{width:380px;padding:8px;flex-direction:column}command-panel[open] message-history{max-height:min(60vh,480px);margin:-8px -8px 0}command-panel[open] .input,command-panel[open] .input:focus{flex:0 0 auto;min-width:0;max-height:192px;padding:8px 10px;border:none;border-radius:var(--radius-8);resize:none;outline:none;box-shadow:none;background:#ffffff26;color:#ffffffe6;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:1.4;field-sizing:content}television-app{width:100%;height:100%;display:block;background:url(./gradient-textured-e-Dp94sOPT.jpg) center / cover no-repeat}.electron-draggable{-webkit-app-region:drag}.electron-draggable>*{-webkit-app-region:no-drag}television-app>main{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;-webkit-user-select:none;user-select:none}television-app>main.auth-gate{align-items:center;justify-content:center}television-app>main>screen-view,television-app>main>home-screen{flex:1;min-height:0}television-app>main>.chrome{position:absolute;top:0;right:0;bottom:0;left:0;padding:8px;pointer-events:none;display:flex;flex-direction:column}television-app>main>.chrome>*{pointer-events:auto}television-app>main>.chrome>.top-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-8, 8px)}body.electron television-app>main>.chrome>.top-row{padding-left:78px}television-app>main>.chrome>command-panel{margin-top:auto;align-self:flex-end}.auth-modal{width:min(384px,100%);display:flex;flex-direction:column;padding:20px;border:1px solid var(--color-border);border-radius:var(--radius-12);background:var(--color-bg)}.auth-form{display:flex;flex-direction:column;gap:12px}.auth-modal-title,.auth-modal-copy{margin:0}.auth-token-input-invalid{border-color:#c74343}:root{--color-bg: var(--neutral-200);--color-border: var(--neutral-300)}