@telepath-computer/television 0.1.116 → 0.1.118

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.
@@ -129,9 +129,11 @@ When the CLI rejects a command, follow the directive it prints rather than guess
129
129
 
130
130
  ### Server operation notes
131
131
 
132
- `tv serve` starts the local server. ACP chat is optional: with no `TELEVISION_ACP_AGENT`, the server starts without ACP wiring, `/acp` is unavailable, and the web UI hides chat. Set `TELEVISION_ACP_AGENT=openclaw` or `TELEVISION_ACP_AGENT=hermes` to enable chat; in that case `tv serve` preflights the selected ACP command on `PATH` and fails before listening if the binary is missing.
132
+ `tv serve` starts the local server. Bare `tv serve` binds `127.0.0.1` and is tokenless. Use `--listen <ipv4>` (repeatable or comma-separated) to add IPv4 listeners; any `--listen` requires an explicit global auth choice with `--auth` or `--no-auth`. Workflow commands connect to `localhost:<port>` only; use `--port`, `TELEVISION_PORT`, or the default `32848` rather than `--server`. When targeting non-default storage, pass `--storage-path` or set `TELEVISION_STORAGE_PATH` so the CLI reads the matching token.
133
133
 
134
- `tv serve --persist` installs or refreshes the user system service. It always captures the exact `PATH`. When an ACP agent is configured, it also captures canonical `TELEVISION_ACP_AGENT` and matching `OPENCLAW_*` or `HERMES_*` variables, and validates the ACP command against that captured PATH before changing the installed service. When no agent is configured, ACP env capture and preflight are skipped and the service runs with chat disabled. Rerun it after changing PATH, ACP agent env vars, the ACP agent install, or the Node/TV install. The refresh is non-atomic: if uninstall succeeds but install fails, fix the env and rerun `tv serve --persist`.
134
+ ACP chat is optional: with no `TELEVISION_ACP_AGENT`, the server starts without ACP wiring, `/acp` is unavailable, and the web UI hides chat. Set `TELEVISION_ACP_AGENT=openclaw` or `TELEVISION_ACP_AGENT=hermes` to enable chat; in that case `tv serve` preflights the selected ACP command on `PATH` and fails before listening if the binary is missing.
135
+
136
+ `tv serve --persist` installs or refreshes the user system service. It captures the serve flags and relevant environment at install time (`--listen`, `--auth`/`--no-auth`, `--port`, `--storage-path`, `PATH`, `TELEVISION_PORT`, `TELEVISION_STORAGE_PATH`). When an ACP agent is configured, it also captures canonical `TELEVISION_ACP_AGENT` and matching `OPENCLAW_*` or `HERMES_*` variables, and validates the ACP command against that captured PATH before changing the installed service. When no agent is configured, ACP env capture and preflight are skipped and the service runs with chat disabled. Rerun it after changing listen/auth/port settings, PATH, ACP agent env vars, the ACP agent install, or the Node/TV install. The refresh is non-atomic: if uninstall succeeds but install fails, fix the env and rerun `tv serve --persist`.
135
137
 
136
138
  `tv serve --persist-uninstall` removes the service and is equivalent to `tv stop`. Both are idempotent and print `{ "status": "stopped" }` whether or not a service was installed.
137
139
 
@@ -471,70 +473,86 @@ tv abandon-artifact --id "<artifact-id>"
471
473
 
472
474
  For a pending create, the artifact never becomes live. For a pending edit, the previously committed version remains live.
473
475
 
474
- # Authoring artifacts
475
-
476
- You're writing a single self-contained HTML artifact that will be rendered
477
- inside a Television viewer (or downloaded for offline viewing later). This
478
- skill documents the conventions you must follow.
479
-
480
- ## House style
476
+ # HTML artifact style
481
477
 
482
- Artifacts inherit a versioned, canonical stylesheet served by the
483
- Television runtime. Include it in `<head>`:
478
+ Write a complete HTML document for the Television viewer. Always include the
479
+ canonical stylesheet:
484
480
 
485
481
  ```html
486
482
  <link rel="stylesheet" href="/canonical/v1/styles.css">
487
483
  ```
488
484
 
489
- That stylesheet provides:
485
+ The canonical stylesheet provides the shared artifact foundation: reset, Hind
486
+ font, design tokens, default semantic theme colors, and conservative document
487
+ typography for plain semantic HTML.
488
+
489
+ Lean on semantic HTML first. Headings, paragraphs, lists, links, code blocks,
490
+ blockquotes, rules, images, and tables have readable defaults. Add local CSS for
491
+ artifact-specific layout, density, hierarchy, or specialized presentations; do
492
+ not recreate baseline prose styling in every artifact.
493
+
494
+ For prose-like documents, consider giving the content enough room above the bottom title bar. A reasonable starting point is 32px padding on the top and sides, with 64px at the bottom; adjust based on the content and layout:
490
495
 
491
- - A CSS reset and font-face declarations (Hind variable font, loaded
492
- automatically — no extra link tags needed).
493
- - The full design-system token catalog as CSS custom properties:
494
- typography (`--text-*`, `--font-*`, `--leading-*`), spacing
495
- (`--space-*`), color (`--color-*`, `--neutral-*`), radii
496
- (`--radius-*`), and surfaces. The runtime source of truth is
497
- `packages/ui/styles/tokens.css`; the bundle inlines it.
498
- - Bare-tag styling. `body`, `a`, `h1`–`h6`, `code`, `pre`, and similar
499
- semantic elements have built-in styling — you do not need to add
500
- classes to make them look right.
496
+ ```css
497
+ body {
498
+ padding: 32px 32px 64px;
499
+ }
500
+ ```
501
501
 
502
- **Lean on semantic HTML and the bare-tag styling.** Reach for `<h1>`,
503
- `<p>`, `<ul>`, `<code>`, etc. before inventing custom classes. Use tokens
504
- (`var(--space-8)`, `var(--color-text-muted)`, etc.) for any custom CSS
505
- you do write — never hardcoded pixel values or hex colors.
502
+ ## Canonical components
506
503
 
507
- ## Document shape
504
+ For house-style components, import the canonical component bundle:
508
505
 
509
- Emit a complete HTML document, not a fragment:
506
+ ```html
507
+ <script type="module" src="/canonical/v1/components.js"></script>
508
+ ```
509
+
510
+ Use checkbox-list components for checklists rather than markdown task syntax:
510
511
 
511
512
  ```html
512
- <!doctype html>
513
- <html lang="en">
514
- <head>
515
- <meta charset="utf-8">
516
- <title>{{title}}</title>
517
- <link rel="stylesheet" href="/canonical/v1/styles.css">
518
- </head>
519
- <body>
520
- <!-- artifact content -->
521
- </body>
522
- </html>
513
+ <checkbox-list>
514
+ <checkbox-item checked>Completed item</checkbox-item>
515
+ <checkbox-item>Open item</checkbox-item>
516
+ </checkbox-list>
523
517
  ```
524
518
 
525
- ## Conventions
526
-
527
- - **Self-contained.** By default, emit one HTML file. If the active
528
- kind skill ships local CSS or JS assets, copy or inline them from the
529
- skill folder so the final artifact remains self-contained without any
530
- `/skills/...` runtime dependency.
531
- - **No arbitrary `<script>` tags.** Static HTML is the default. Only
532
- include local, bundled scripts when the active kind skill explicitly
533
- requires them.
534
- - **No external network fetches.** No CDN links, no remote images, no
535
- font URLs other than what `/canonical/v1/styles.css` already includes.
536
- - **No inline `<style>` overrides for chrome-level concerns.** Small
537
- layout-specific styles for the artifact's content are fine; redefining
538
- brand colors or typography is not.
539
- - **Use tokens, not hardcoded values.** `padding: var(--space-12)`, not
540
- `padding: 12px`. `color: var(--color-text-muted)`, not `color: #999`.
519
+ Checked items render muted and struck through. The checkbox marker is static and
520
+ shows a not-allowed cursor when hovered.
521
+
522
+ Checkbox-list styling API:
523
+
524
+ - `checkbox-list::part(list)` — the internal item stack.
525
+ - `checkbox-item::part(label)` row containing marker and content.
526
+ - `checkbox-item::part(box)` visual checkbox marker.
527
+ - `checkbox-item::part(check)` — checkmark.
528
+ - `checkbox-item::part(content)` item text/content.
529
+ - Useful variables: `--checkbox-list-gap`, `--checkbox-size`,
530
+ `--checkbox-gap`, `--checkbox-color`, `--checkbox-border-color`,
531
+ `--checkbox-radius`, `--checkbox-checked-content-color`,
532
+ `--checkbox-checked-decoration`.
533
+
534
+ Example local variation:
535
+
536
+ ```css
537
+ checkbox-list {
538
+ --checkbox-list-gap: 8px;
539
+ }
540
+
541
+ checkbox-item {
542
+ --checkbox-color: var(--green-600);
543
+ }
544
+
545
+ checkbox-item::part(box) {
546
+ border-radius: 999px;
547
+ }
548
+ ```
549
+
550
+ ## Viewport
551
+
552
+ Artifacts render inside a resizable Television card, not a full browser page.
553
+ The default card is roughly 528px wide by 800px tall. Users may make cards
554
+ narrower, wider, shorter, or taller. Treat 528px × 800px as the first layout
555
+ target, then make sure the artifact still works when narrower.
556
+
557
+ If content overflows, artifacts can scroll vertically. Avoid horizontal scrolling
558
+ unless the content genuinely requires it, such as a wide data table or timeline.
@@ -0,0 +1 @@
1
+ artifact-view{display:flex;flex-direction:column;width:100%;height:100%;border-radius:var(--radius-16);background:var(--color-surface);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[data-dragging]{box-shadow:0 6px 16px #00000024,0 20px 56px #0000003d}artifact-view[data-dragging] .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,artifact-view webview.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;overscroll-behavior-x:none;outline:none;position:relative;touch-action:pan-y;--layout-unit-x: 120px;--layout-unit-y: 120px;--layout-gap: 16px;--layout-drag-transition-ms: 0ms;--bg-scale: .96;--bg-opacity: .65;--color-drag-target: color-mix( in srgb, var(--color-border, var(--neutral-300, #cbd5e1)) 55%, transparent )}@media (max-width: 560px){layout-view{padding-top:30px;padding-bottom:60px}}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{align-self:start;will-change:transform;z-index:1}layout-view[data-wheel-scrolling]:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1000;pointer-events:auto}layout-view[data-wheel-scrolling] iframe,layout-view[data-wheel-scrolling] webview{pointer-events:none}layout-view .node-inner{display:grid;grid-template-columns:repeat(4,var(--layout-unit-x));grid-template-rows:repeat(6,var(--layout-unit-y));gap:var(--layout-gap);width:100%}layout-view[data-depth=on] .node[data-foreground]~.node:not([data-foreground]),layout-view[data-depth=on] .node:not([data-foreground]):has(~.node[data-foreground]){z-index:0;opacity:var(--bg-opacity)}layout-view[data-depth=on] .node[data-foreground]~.node:not([data-foreground]) .card-slot>*,layout-view[data-depth=on] .node:not([data-foreground]):has(~.node[data-foreground]) .card-slot>*{pointer-events:none}layout-view[data-depth=on] .node[data-foreground]+.node:not([data-foreground]) .card-slot{--depth-n: .5;transform:scale(var(--bg-scale)) translate(calc(-1 * var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}layout-view[data-depth=on] .node[data-foreground]+.node:not([data-foreground])+.node:not([data-foreground]) .card-slot{--depth-n: 1.5;transform:scale(var(--bg-scale)) translate(calc(-1 * var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}layout-view[data-depth=on] .node[data-foreground]+.node:not([data-foreground])+.node:not([data-foreground])+.node:not([data-foreground]) .card-slot{--depth-n: 2.5;transform:scale(var(--bg-scale)) translate(calc(-1 * var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}layout-view[data-depth=on] .node[data-foreground]+.node:not([data-foreground])+.node:not([data-foreground])+.node:not([data-foreground])+.node:not([data-foreground]) .card-slot{--depth-n: 3.5;transform:scale(var(--bg-scale)) translate(calc(-1 * var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}layout-view[data-depth=on] .node:not([data-foreground]):has(+.node[data-foreground]) .card-slot{--depth-n: .5;transform:scale(var(--bg-scale)) translate(calc(var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}layout-view[data-depth=on] .node:not([data-foreground]):has(+.node:not([data-foreground])+.node[data-foreground]) .card-slot{--depth-n: 1.5;transform:scale(var(--bg-scale)) translate(calc(var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}layout-view[data-depth=on] .node:not([data-foreground]):has(+.node:not([data-foreground])+.node:not([data-foreground])+.node[data-foreground]) .card-slot{--depth-n: 2.5;transform:scale(var(--bg-scale)) translate(calc(var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}layout-view[data-depth=on] .node:not([data-foreground]):has(+.node:not([data-foreground])+.node:not([data-foreground])+.node:not([data-foreground])+.node[data-foreground]) .card-slot{--depth-n: 3.5;transform:scale(var(--bg-scale)) translate(calc(var(--depth-n) * (1 - var(--bg-scale)) * var(--card-width-px) * 1px));transform-origin:center center;transition:transform .2s ease}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[data-layout-drag-source=true]{transition:none}layout-view .card-content-mount{width:100%;height:100%}layout-view .card-content-mount>*{width:100%;height:100%}layout-view .drag-source-node{flex:0 0 auto;width:0;height:0;margin-right:calc(-1 * var(--layout-gap));overflow:visible;pointer-events:none}layout-view .drag-source-node .node-inner{display:contents}layout-view .resize-handle{position:absolute;top:0;bottom:0;right:-8px;width:16px;cursor:ew-resize;z-index:3;touch-action:none}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}@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-select{display:flex;align-items:center;gap:var(--space-6, 6px);flex:1 1 auto;min-width:0;font-size:13px;position:relative}screen-select>segmented-control{flex:none}screen-select>.pills{position:absolute;left:50%;top:0;transform:translate(-50%);display:flex;align-items:center;gap:var(--space-6, 6px);pointer-events:none}screen-select>.pills>*{pointer-events:auto}screen-select segmented-control[variant=glass],screen-select .tab-body[variant=glass]{border-color:var(--tint-300)}screen-select segmented-control[variant=glass][tone=light],screen-select .tab-body[variant=glass][tone=light]{border-color:var(--tint-200)}screen-select .screen-name{max-width:180px;flex:none}screen-select .screen-name .tab-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}screen-select ui-popover.picker-popover::part(panel){min-width:280px;padding:var(--space-4) var(--space-8)}screen-select .picker{display:grid;gap:var(--space-4);font-weight:var(--font-weight-body);color:var(--color-text)}screen-select .picker-filter{width:100%;height:auto;margin:var(--space-4) 0;padding:2px var(--space-12);border:none;border-radius:var(--radius-8);background:var(--tint-100);color:inherit;font:inherit;font-size:var(--text-sm);font-weight:var(--font-weight-body)}screen-select .picker-filter::placeholder{color:var(--color-text-muted)}screen-select .picker-filter:focus{background:var(--tint-100);border-color:transparent;outline:none;box-shadow:none}screen-select .picker-list{display:flex;flex-direction:column;margin:0;padding:0;list-style:none;max-height:min(500px,calc(100dvh - 100px));overflow-y:auto}screen-select .picker-section-label{margin:var(--space-4) 0 2px;padding:var(--space-4) var(--space-12);color:var(--color-text-muted);font-size:var(--text-sm);font-weight:var(--font-weight-body)}screen-select .picker-section-label:first-child{margin-top:0}screen-select .picker-row{display:flex;align-items:center;padding:3px var(--space-12);border-radius:var(--radius-8);cursor:default}screen-select .picker-row[data-active]{background:var(--color-overlay-active)}screen-select .picker-row:hover,screen-select .picker-row[data-highlighted]{background:var(--color-overlay-hover)}screen-select .picker-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-base)}screen-select .picker-empty{margin:0;padding:6px var(--space-12);color:var(--color-text-muted);font-size:var(--text-sm)}screen-select .tab{position:relative;display:inline-flex;flex:none}screen-select .tab>.tab-body{padding-left:8px;padding-right:11px;position:relative}screen-select .tab>.tab-body>.tab-leading{flex:none;width:var(--control-height-xs);height:var(--control-height-xs);display:inline-flex;align-items:center;justify-content:center;color:var(--tint-700)}screen-select .tab>.tab-body>.tab-leading svg{width:13px;height:13px}screen-select .tab>.tab-close{position:absolute;left:8px;top:50%;transform:translateY(-50%);display:none;z-index:1}screen-select .tab>.tab-close svg{width:12px;height:12px}screen-select .tab[data-active]>.tab-body>.tab-leading,screen-select .tab:hover>.tab-body>.tab-leading{visibility:hidden}screen-select .tab[data-active]>.tab-close,screen-select .tab:hover>.tab-close{display:inline-flex}screen-select .tab:hover>.tab-body[variant=glass]:not([aria-pressed=true]):not(:disabled){background:linear-gradient(var(--color-overlay-hover),var(--color-overlay-hover));backdrop-filter:blur(20px) brightness(.95) saturate(1.8);-webkit-backdrop-filter:blur(20px) brightness(.95) saturate(1.8)}menu-bar-clock{display:inline-flex;align-items:center;align-self:center;gap:var(--space-6, 6px);height:var(--control-height-md);padding:0 14px 2px;border-radius:var(--radius-12);font-size:13px;white-space:nowrap;flex:none}menu-bar-clock[material=glass]{border-color:var(--tint-300)}menu-bar-clock[material=glass][tone=light]{border-color:var(--tint-200)}agent-activity{--rail-x: 7.5px;--rail-top: 19px;--rail-bottom: -1px;display:flex;flex-direction:column;align-self:stretch;flex-shrink:0;margin-bottom:calc(-1 * var(--space-4));transition:padding-bottom .14s ease-out,margin-bottom .14s ease-out;color:#fffc}agent-activity .bar{display:flex;width:100%;height:auto;padding:var(--space-2) var(--space-6);align-items:center;justify-content:flex-start;border:0;gap:var(--space-8);letter-spacing:inherit}agent-activity .bar-static{cursor:default}agent-activity .bar[variant=ghost]:hover:not(:disabled),agent-activity .bar[variant=ghost]:active:not(:disabled),agent-activity .bar[variant=ghost][aria-expanded=true]:not(:disabled),agent-activity .bar[variant=ghost][aria-expanded=true]:hover:not(:disabled){background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;color:#fff}agent-activity .indicator{display:inline-flex;align-items:center;justify-content:center;line-height:0}agent-activity .indicator-active{animation:agent-activity-spin 1s steps(8,end) infinite}@keyframes agent-activity-spin{to{transform:rotate(360deg)}}agent-activity[expanded]{gap:var(--space-6);padding-bottom:var(--space-20);margin-bottom:0}agent-activity .panel{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .14s ease-out,opacity .14s ease-out}agent-activity[expanded] .panel{grid-template-rows:1fr;opacity:1}agent-activity .panel-inner{overflow:hidden;min-height:0}agent-activity .tool-list{list-style:none;margin:0;padding:var(--space-8) 0 0 var(--space-6);display:flex;flex-direction:column}agent-activity .tool-item{display:grid;grid-template-columns:16px 1fr;grid-template-rows:auto auto;padding-bottom:var(--space-20);position:relative}agent-activity .tool-item:last-child{padding-bottom:0}agent-activity .tool-item:before{content:"";position:absolute;left:var(--rail-x);top:var(--rail-top);bottom:var(--rail-bottom);width:1px;background:var(--tint-300)}agent-activity .tool-item:last-child:before{display:none}agent-activity .tool-dot{grid-column:1;grid-row:1;align-self:center;justify-self:center;width:6px;height:6px;border-radius:2px;background:currentColor;opacity:.7;position:relative;top:1px}agent-activity .tool-dot[data-status=completed]{background:var(--green-500);opacity:1}agent-activity .tool-dot[data-status=failed]{background:var(--color-danger);opacity:1}agent-activity .tool-dot[data-status=in_progress]{animation:agent-activity-blink 1s steps(1,end) infinite}@keyframes agent-activity-blink{0%{opacity:.7}50%{opacity:.15}}@media (prefers-reduced-motion: reduce){agent-activity .indicator-active,agent-activity .tool-dot[data-status=in_progress]{animation:none}agent-activity,agent-activity .panel{transition:none}}agent-activity .tool-title{grid-column:2;grid-row:1;padding-left:var(--space-8);font-family:var(--font-mono);font-size:var(--text-sm)}agent-activity .tool-output{grid-column:2;grid-row:2;margin:var(--space-12) 0 0 var(--space-8);border:.5px solid var(--tint-300);border-radius:var(--radius-4);overflow:hidden}agent-activity .tool-text{margin:0;padding:var(--space-8) var(--space-12);background:transparent;border:0;border-radius:0;font-family:var(--font-mono);font-size:var(--text-sm);white-space:pre-wrap;overflow-wrap:anywhere;max-height:calc(10lh + var(--space-4));overflow:hidden}agent-activity .tool-text[data-expanded]{max-height:none;overflow:visible}agent-activity .tool-text-toggle[variant=ghost]{display:flex;width:100%;height:auto;margin:0;padding:var(--space-6) var(--space-12);align-items:center;justify-content:space-between;background:var(--tint-150);border:0;border-top:.5px solid var(--tint-300);border-radius:0;box-shadow:none;color:inherit;font:inherit;font-size:var(--text-sm);letter-spacing:inherit}agent-activity .tool-text-toggle[variant=ghost]:hover:not(:disabled){background:var(--tint-200);box-shadow:none}agent-activity .tool-text-toggle[variant=ghost]:active:not(:disabled){background:var(--tint-300);box-shadow:none}message-history{position:relative;display:flex;flex-direction:column;min-height:0;color:#ffffffe6;line-height:1.5}message-history .history-scroll{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:12px;padding:var(--space-20) var(--space-16);overflow-y:auto;mask-image:linear-gradient(to bottom,transparent 0,black var(--space-20),black calc(100% - var(--space-20)),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black var(--space-20),black calc(100% - var(--space-20)),transparent 100%)}message-history[data-pinned] .history-scroll{mask-image:linear-gradient(to bottom,transparent 0,black var(--space-20));-webkit-mask-image:linear-gradient(to bottom,transparent 0,black var(--space-20))}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+.message-user{margin-top:var(--space-24)}message-history .message-assistant{align-self:stretch;padding:0 6px}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 .connecting{flex:1;min-width:0;display:flex;align-items:center;gap:10px;color:#ffffffa6;line-height:1.4;cursor:default}command-panel .connecting .label{flex:1;min-width:0;text-align:left}command-panel .connecting .dots:after{display:inline-block;content:"";animation:command-panel-dots 1.2s steps(4,end) infinite}@keyframes command-panel-dots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}to{content:""}}command-panel .open{flex:1;min-width:0;width:420px;max-width:100%;display:flex;flex-direction:column;gap:10px}command-panel:has(.open){width:auto;padding:0;border-radius:0}command-panel .open .chat{border-radius:var(--radius-16);overflow:hidden;display:flex;flex-direction:column;min-height:0;height:min(60vh,480px)}command-panel .open .chat message-history{flex:1 1 auto;min-height:0}command-panel .open .input{display:flex;align-items:center;gap:8px;border-radius:var(--radius-16);padding:6px 6px 6px 16px;min-height:calc(var(--control-height-md) + 12px);cursor:text}command-panel .open .input .textarea,command-panel .open .input .textarea:focus{flex:1;min-width:0;max-height:192px;padding:0;border:none;border-radius:0;resize:none;outline:none;box-shadow:none;background:transparent;color:#ffffffe6;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:1.4}</content> </invoke> .auth-form{display:flex;flex-direction:column;gap:var(--space-24)}.auth-modal-icon{display:inline-flex;opacity:.8}.auth-input-row{display:flex;flex-direction:column;gap:var(--space-6)}.auth-token-input{width:100%}.auth-token-input-invalid{border-color:#c74343}.auth-modal-error{margin:0;font-size:var(--text-sm);color:#c74343}.auth-submit{align-self:stretch;height:var(--control-height-lg)}connecting-overlay{display:contents}.connecting-overlay-panel{min-height:270px;justify-content:center}:root{--app-wallpaper: url(./wallpaper-s-ICws44wH.jpg);--app-bg: var(--color-bg)}television-app{width:100%;height:100%;display:block;background-color:var(--app-bg);background-image:var(--app-wallpaper);background-position:center;background-size:cover;background-repeat:no-repeat}[electron-draggable]{-webkit-app-region:drag}[electron-draggable] :where(button,input,textarea,select,a,[role=button],[role=combobox]){-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{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;gap:var(--space-8, 8px)}television-app>main>.chrome>.top-row>button[variant=glass]{border-color:var(--tint-300)}television-app>main>.chrome>.top-row>button[variant=glass][tone=light]{border-color:var(--tint-200)}body.electron television-app>main>.chrome>.top-row{padding-left:78px}television-app>main>.chrome>command-panel{margin-top:auto;align-self:flex-end}@media (max-width: 560px){television-app>main>.chrome>command-panel{align-self:center}}:root{--color-bg: var(--neutral-200);--color-border: var(--neutral-300)}html,body{overscroll-behavior-x:none}