@ash-qw/dsh-theme-prts 0.1.94 → 0.1.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -3,8 +3,8 @@ window.__ModuleLoader__.load({
3
3
  factory: (require) => {
4
4
  var module = { exports: {} };
5
5
  var exports = module.exports;
6
- const PRTS_VERSION = "0.1.94";
7
- const PRTS_CSS = "html[data-dsh-prts]{--prts-canvas: #080a0c; --prts-canvas-elevated: #0d1114; --prts-rail: #060809; --prts-panel: #11161a; --prts-panel-raised: #171d21; --prts-panel-muted: #20272c; --prts-ink: #edf1f2; --prts-muted: #98a3a9; --prts-dim: #68747a; --prts-line: #38434a; --prts-line-strong: #5e6a70; --prts-yellow: #f0c800; --prts-yellow-ink: #161300; --prts-cyan: #5ccddb; --prts-red: #ee625a; --prts-green: #8fcf79; --prts-host-top-inset: 0px; --prts-rail-width: 52px; --prts-nav-width: 52px; --prts-sessions-width: 286px; --prts-sessions-compact: 54px; --prts-workspace-height: 38px; --prts-session-height: 36px; --prts-facility-gap: 7px; --prts-facility-height: var(--prts-workspace-height); --prts-spine-width: 8px; --prts-spine-rest: .25; --prts-spine-travel: 6px; --prts-chamfer: 3px; --prts-radius-control: 3px; --prts-radius-card: 3px; --prts-radius-overlay: 4px; --prts-body: 'Noto Sans SC','Microsoft YaHei UI','Segoe UI',sans-serif; --prts-display: 'Arial Narrow','Noto Sans SC',sans-serif; --prts-mono: 'Roboto Mono','Noto Sans Mono CJK SC',Consolas,monospace; --prts-ease-spring: cubic-bezier(.2,.86,.28,1.16); --prts-ease-snap: cubic-bezier(.22,1,.36,1); --prts-shadow-glass-overlay: 0 18px 48px rgba(0,0,0,.32),inset 0 1px rgba(255,255,255,.06); --prts-glass-border: rgba(119,140,150,.52); --prts-glass-soft-surface: rgba(15,21,25,.82); --prts-glass-standard-surface: rgba(15,21,25,.9); --prts-glass-clear-surface: rgba(15,21,25,.72); --prts-glass-dense: rgba(7,10,12,.94); --prts-active-glass: var(--prts-glass-standard-surface); --prts-active-glass-filter: blur(18px) saturate(145%); color-scheme: dark; accent-color: var(--prts-yellow)}html[data-dsh-prts][data-prts-scheme=\"dark\"]{color-scheme: dark}html[data-dsh-prts][data-prts-scheme=\"light\"]{--prts-canvas: #eef1f3; --prts-canvas-elevated: #e5eaed; --prts-rail: #111518; --prts-panel: #f7f9fa; --prts-panel-raised: #e5eaed; --prts-panel-muted: #d5dde1; --prts-ink: #15191c; --prts-muted: #4f5c63; --prts-dim: #738087; --prts-line: #9eabb1; --prts-line-strong: #65727a; --prts-glass-border: rgba(62,82,92,.48); --prts-glass-soft-surface: rgba(247,250,251,.9); --prts-glass-standard-surface: rgba(244,249,251,.94); --prts-glass-clear-surface: rgba(244,249,251,.78); --prts-glass-dense: rgba(249,251,252,.97); --prts-shadow-glass-overlay: 0 18px 44px rgba(48,63,70,.18),inset 0 1px rgba(255,255,255,.86); color-scheme: light}html[data-dsh-prts][data-prts-glass=\"soft\"]{--prts-active-glass: var(--prts-glass-soft-surface); --prts-active-glass-filter: blur(18px) saturate(145%)}html[data-dsh-prts][data-prts-glass=\"standard\"]{--prts-active-glass: var(--prts-glass-standard-surface); --prts-active-glass-filter: blur(22px) saturate(155%)}html[data-dsh-prts][data-prts-glass=\"clear\"]{--prts-active-glass: var(--prts-glass-clear-surface); --prts-active-glass-filter: blur(28px) saturate(180%)}html[data-dsh-prts][data-prts-glass=\"off\"]{--prts-active-glass: var(--prts-panel); --prts-active-glass-filter: none}html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-conversation-scale],[data-prts-conversation-scale] *,[data-prts-conversation-preview],[data-prts-conversation-preview] *,[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] ),html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-conversation-scale],[data-prts-conversation-scale] *,[data-prts-conversation-preview],[data-prts-conversation-preview] *,[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::before,html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-conversation-scale],[data-prts-conversation-scale] *,[data-prts-conversation-preview],[data-prts-conversation-preview] *,[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::after{box-sizing: border-box}html[data-dsh-prts] body{--dsw-alias-bg-base: var(--prts-canvas); --dsw-alias-bg-layer-1: var(--prts-panel); --dsw-alias-bg-layer-2: var(--prts-panel-raised); --dsw-alias-bg-layer-3: var(--prts-panel-muted); --dsw-alias-label-primary: var(--prts-ink); --dsw-alias-label-secondary: var(--prts-muted); --dsw-alias-border-l2: var(--prts-line); min-height: 100dvh; margin: 0; overflow: hidden; background: var(--prts-canvas); color: var(--prts-ink); font-family: var(--prts-body)}html[data-dsh-prts] ::selection{background: var(--prts-yellow); color: var(--prts-yellow-ink)}html[data-dsh-prts] a{color: var(--prts-cyan); text-underline-offset: 3px}html[data-dsh-prts] [data-prts-shell] :is(button,input,textarea,select),html[data-dsh-prts] [data-prts-theme-settings] :is(button,input,textarea,select){font: inherit}html[data-dsh-prts] [data-prts-shell] button,html[data-dsh-prts] [data-prts-theme-settings] button{color: inherit}html[data-dsh-prts] :focus-visible{outline: 2px solid var(--prts-yellow) !important; outline-offset: 2px !important}html[data-dsh-prts] [hidden]{display: none !important}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"]{--prts-nav-width: 0px}html[data-dsh-prts] [data-prts-shell]{position: fixed; z-index: 124; inset: var(--prts-host-top-inset) auto 0 0; width: var(--prts-nav-width); pointer-events: none; font-family: var(--prts-mono)}html[data-dsh-prts] [data-prts-shell] button,html[data-dsh-prts] [data-prts-nav-rail]{pointer-events: auto}html[data-dsh-prts] [data-prts-topbar]{display: none}html[data-dsh-prts] [data-prts-nav-rail]{position: fixed; z-index: 120; inset: var(--prts-host-top-inset) auto 0 0; width: var(--prts-rail-width); display: flex; flex-direction: column; align-items: stretch; border-right: 1px solid #30383d; background: var(--prts-rail); color: #e8edef; box-shadow: 4px 0 18px rgba(0,0,0,.18)}html[data-dsh-prts] [data-prts-rail-launcher]{display: none}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-nav-rail]{opacity: 0; visibility: hidden; transform: translate3d(-100%,0,0); transition: transform 180ms var(--prts-ease-snap),opacity 120ms ease,visibility 0s linear 180ms; pointer-events: none}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"][data-prts-rail-open] [data-prts-nav-rail]{opacity: 1; visibility: visible; transform: translate3d(0,0,0); transition-delay: 0s; pointer-events: auto}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"][data-prts-rail-open] [data-prts-rail-launcher]{opacity: 0; visibility: hidden; pointer-events: none}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]{position: fixed; z-index: 121; top: 50%; left: 0; width: 12px; height: 96px; display: grid; place-items: center; padding: 0; overflow: hidden; border: 1px solid color-mix(in srgb,var(--prts-yellow) 40%,transparent); border-left: 0; border-radius: 0 3px 3px 0; opacity: .34; background: color-mix(in srgb,var(--prts-rail) 86%,transparent); color: var(--prts-yellow); font: 700 8px/1 var(--prts-mono); letter-spacing: .08em; transform: translateY(-50%); transition: width 140ms var(--prts-ease-snap),opacity 120ms ease,background-color 120ms ease; cursor: pointer}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher] > span{opacity: 0; writing-mode: vertical-rl; transition: opacity 100ms ease}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]:is(:hover,:focus-visible){width: 40px; opacity: 1; background: var(--prts-rail)}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]:is(:hover,:focus-visible) > span{opacity: 1}@media (hover: none),(pointer: coarse){html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]{top: 50%; width: 24px; height: 88px; opacity: .58; transform: translateY(-50%); touch-action: none}html[data-dsh-prts] [data-prts-rail-launcher] > span{opacity: 0}html[data-dsh-prts] [data-prts-rail-launcher][data-prts-rail-gesture-active]{width: 40px; opacity: 1}html[data-dsh-prts] [data-prts-rail-gesture-cue]{position: absolute; inset: calc(27px + var(--prts-rail-gesture-progress,0px)) 10px auto auto; display: block; opacity: 0; font: 700 14px/8px sans-serif}html[data-dsh-prts] [data-prts-rail-gesture-active] [data-prts-rail-gesture-cue]{opacity: 1; animation: prts-rail-swipe-cue 720ms ease-in-out infinite}html[data-dsh-prts] [data-prts-rail-gesture-ready] [data-prts-rail-gesture-cue]{filter: drop-shadow(0 0 3px currentColor)}}@keyframes prts-rail-swipe-cue{50%{opacity: .45}}html[data-dsh-prts] [data-prts-rail-brand]{height: 64px; display: grid; place-items: center; padding: 8px 5px; border-bottom: 1px solid #30383d; overflow: hidden}html[data-dsh-prts] [data-prts-rail-brand] svg{width: 38px; height: 38px; color: #edf1f2}html[data-dsh-prts] [data-prts-rail-brand] > span{position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0)}html[data-dsh-prts] [data-prts-nav-rail] > button{position: relative; width: 100%; min-height: 52px; display: grid; place-items: center; gap: 2px; padding: 7px 2px 6px; border: 0; border-bottom: 1px solid #242b2f; background: transparent; color: #9fa9ae; cursor: pointer; clip-path: polygon(0 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,0 100%)}html[data-dsh-prts] [data-prts-nav-rail] > button::after{content: \"\"; position: absolute; inset: 8px auto 8px 0; width: 2px; background: transparent}html[data-dsh-prts] [data-prts-nav-rail] > button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-nav-rail] > button[aria-expanded=\"true\"]{background: #151a1d; color: #f0f3f4}html[data-dsh-prts] [data-prts-nav-rail] > button[aria-expanded=\"true\"]::after{background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-nav-rail] > button:active{transform: translateY(1px) scale(.98)}html[data-dsh-prts] [data-prts-nav-rail] b{font-size: 15px; line-height: 1}html[data-dsh-prts] [data-prts-nav-rail] small{font-size: 8px; letter-spacing: .04em}html[data-dsh-prts] [data-prts-nav-bottom]{display: grid; margin-top: auto; border-top: 1px solid #30383d}html[data-dsh-prts] [data-prts-connection-indicator]{min-height: 40px; display: grid; place-items: center; gap: 3px; padding: 6px 2px; color: #8c969b; font-size: 7px; text-align: center}html[data-dsh-prts] [data-prts-connection-indicator] i{width: 6px; height: 6px; border: 1px solid currentColor; background: currentColor; transform: rotate(45deg)}html[data-dsh-prts] [data-prts-connection-indicator][data-state=\"connected\"]{color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-connection-indicator][data-state=\"disconnected\"]{color: var(--prts-red)}html[data-dsh-prts] [data-prts-scheme-toggle] svg{width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.7}html[data-dsh-prts] [data-prts-scheme-toggle]{touch-action: none; user-select: none}html[data-dsh-prts][data-prts-scheme-transition-interactive] [data-prts-scheme-toggle]{cursor: ew-resize}html[data-dsh-prts] [data-prts-scheme-toggle][data-prts-scheme-press]{animation: prts-scheme-toggle-press 100ms var(--prts-ease-snap) both}@keyframes prts-scheme-toggle-press{0%,100%{transform: translateY(0) scale(1)}50%{transform: translateY(0) scale(.96)}}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(root){animation: prts-scheme-view-hold var(--prts-scheme-duration,520ms) linear both}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(root),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(root){animation: none; mix-blend-mode: normal}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(root){z-index: 1}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(root){z-index: 2; clip-path: inset(0 max(0px,calc(100vw - var(--prts-scheme-reveal-x))) 0 0)}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-mark){animation: none}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-grid){z-index: 3}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-edge){z-index: 4}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-mark){z-index: 5}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-mark){opacity: 0; animation: none}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-mark){opacity: 1; animation: none; mix-blend-mode: normal}@keyframes prts-scheme-view-hold{from,to{opacity: 1}}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]{--prts-scheme-grid-cell: 20px; --prts-scheme-grid-diagonal-cell: 40px; --prts-scheme-grid-axis: rgba(132,158,166,.14); --prts-scheme-grid-node: rgba(150,180,188,.22); --prts-scheme-grid-diagonal-opacity: .16}html[data-dsh-prts][data-prts-scheme-transition=\"light\"]{--prts-scheme-grid-axis: rgba(28,36,41,.12); --prts-scheme-grid-node: rgba(24,31,35,.2); --prts-scheme-grid-diagonal-opacity: .14}html[data-dsh-prts] [data-prts-scheme-reveal]{box-sizing: border-box; position: fixed; z-index: 2147483647; inset: 0; width: 100vw; max-width: none; height: 100dvh; max-height: none; margin: 0; padding: 0; overflow: hidden; border: 0; background: transparent; color: #ffd400; --prts-scheme-grid-cell: 20px; --prts-scheme-grid-diagonal-cell: 40px; --prts-scheme-grid-axis: rgba(132,158,166,.08); --prts-scheme-grid-node: rgba(150,180,188,.13); --prts-scheme-grid-diagonal-opacity: .075; pointer-events: none}html[data-dsh-prts] [data-prts-scheme-reveal=\"light\"]{--prts-scheme-grid-axis: rgba(28,36,41,.065); --prts-scheme-grid-node: rgba(24,31,35,.105); --prts-scheme-grid-diagonal-opacity: .06}html[data-dsh-prts] [data-prts-scheme-reveal-edge]{isolation: isolate; position: absolute; top: 0; left: 0; width: 29px; height: 100vh; background: linear-gradient(90deg,transparent 13px,rgba(244,247,247,.96) 13px 14px,rgba(255,212,0,.22) 14px 15px,transparent 15px); transform: translate3d(-14px,0,0); transform-origin: 50% 50%; view-transition-name: prts-scheme-edge; will-change: transform}html[data-dsh-prts] [data-prts-scheme-reveal-grid]{position: absolute; z-index: -2; inset: 0 auto 0 -206px; display: block; width: 220px; height: 100vh; view-transition-name: prts-scheme-grid; pointer-events: none}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-grid){background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cg fill='none' stroke='%2396b4bc' stroke-width='.55'%3E%3Cpath d='M0 0H40M0 20H40M0 40H40M0 0V40M20 0V40M40 0V40' stroke-opacity='.22'/%3E%3Cpath d='M0 0L20 20L0 40M20 0L40 20L20 40' stroke-opacity='.46'/%3E%3Cpath d='M20 0L0 20L20 40M40 0L20 20L40 40' stroke-opacity='.22'/%3E%3C/g%3E%3Cg fill='%2396b4bc' fill-opacity='.36'%3E%3Ccircle cx='0' cy='0' r='1'/%3E%3Ccircle cx='20' cy='0' r='1'/%3E%3Ccircle cx='40' cy='0' r='1'/%3E%3Ccircle cx='0' cy='20' r='1'/%3E%3Ccircle cx='20' cy='20' r='1'/%3E%3Ccircle cx='40' cy='20' r='1'/%3E%3Ccircle cx='0' cy='40' r='1'/%3E%3Ccircle cx='20' cy='40' r='1'/%3E%3Ccircle cx='40' cy='40' r='1'/%3E%3C/g%3E%3C/svg%3E\"); background-repeat: repeat; background-position: calc(220px - var(--prts-scheme-reveal-x)) 0; background-size: var(--prts-scheme-grid-diagonal-cell) var(--prts-scheme-grid-diagonal-cell); -webkit-mask-image: linear-gradient(90deg,transparent 0,rgba(0,0,0,.12) 16%,rgba(0,0,0,.48) 56%,#000 100%); mask-image: linear-gradient(90deg,transparent 0,rgba(0,0,0,.12) 16%,rgba(0,0,0,.48) 56%,#000 100%)}html[data-dsh-prts][data-prts-scheme-transition=\"light\"]::view-transition-new(prts-scheme-grid){background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cg fill='none' stroke='%231c2429' stroke-width='.55'%3E%3Cpath d='M0 0H40M0 20H40M0 40H40M0 0V40M20 0V40M40 0V40' stroke-opacity='.2'/%3E%3Cpath d='M0 0L20 20L0 40M20 0L40 20L20 40' stroke-opacity='.42'/%3E%3Cpath d='M20 0L0 20L20 40M40 0L20 20L40 40' stroke-opacity='.2'/%3E%3C/g%3E%3Cg fill='%231c2429' fill-opacity='.32'%3E%3Ccircle cx='0' cy='0' r='1'/%3E%3Ccircle cx='20' cy='0' r='1'/%3E%3Ccircle cx='40' cy='0' r='1'/%3E%3Ccircle cx='0' cy='20' r='1'/%3E%3Ccircle cx='20' cy='20' r='1'/%3E%3Ccircle cx='40' cy='20' r='1'/%3E%3Ccircle cx='0' cy='40' r='1'/%3E%3Ccircle cx='20' cy='40' r='1'/%3E%3Ccircle cx='40' cy='40' r='1'/%3E%3C/g%3E%3C/svg%3E\")}html[data-dsh-prts] [data-prts-scheme-reveal-blend]{position: absolute; z-index: -1; inset: 0; width: 29px; background: linear-gradient(90deg,transparent,rgba(255,212,0,.025) 43%,rgba(235,244,245,.11) 50%,rgba(255,212,0,.018) 58%,transparent); -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); opacity: .54}html[data-dsh-prts] [data-prts-scheme-reveal=\"light\"] [data-prts-scheme-reveal-blend]{background: linear-gradient(90deg,transparent,rgba(28,36,41,.04) 42%,rgba(255,255,255,.2) 50%,rgba(255,212,0,.018) 58%,transparent)}html[data-dsh-prts] [data-prts-scheme-reveal=\"dark\"] [data-prts-scheme-reveal-blend]{background: linear-gradient(90deg,transparent,rgba(132,158,166,.035) 42%,rgba(235,244,245,.12) 50%,rgba(255,212,0,.018) 58%,transparent)}html[data-dsh-prts] [data-prts-scheme-reveal-edge]::before{content: \"\"; position: absolute; top: 18%; left: 7px; width: 15px; height: 28px; border-top: 1px solid rgba(235,244,245,.58); border-bottom: 1px solid rgba(235,244,245,.58); background: linear-gradient(rgba(255,212,0,.72),rgba(255,212,0,.72)) 50% 50% / 100% 1px no-repeat}html[data-dsh-prts] [data-prts-scheme-reveal-edge]::after{content: \"\"; position: absolute; top: calc(18% + 12px); left: 12px; width: 5px; height: 5px; border: 1px solid rgba(255,212,0,.78); background: rgba(8,12,14,.68); transform: rotate(45deg)}html[data-dsh-prts] [data-prts-scheme-reveal-node]{position: absolute; z-index: 2; bottom: clamp(88px,18vh,176px); left: 14px; display: block; box-sizing: border-box; width: 46px; height: 62px; color: #ffd400; font-style: normal; transform: translateX(10px); view-transition-name: prts-scheme-node; transition: transform 120ms var(--prts-ease-snap)}html[data-dsh-prts] [data-prts-scheme-reveal-edge][data-prts-scheme-reveal-side=\"left\"] [data-prts-scheme-reveal-node]{transform: translateX(calc(-100% - 10px))}html[data-dsh-prts] [data-prts-scheme-reveal-node]::before{content: \"\"; position: absolute; top: 30px; left: -10px; width: 10px; border-top: 1px solid rgba(255,212,0,.76)}html[data-dsh-prts] [data-prts-scheme-reveal-edge][data-prts-scheme-reveal-side=\"left\"] [data-prts-scheme-reveal-node]::before{right: -10px; left: auto}html[data-dsh-prts] [data-prts-scheme-reveal-mark]{position: absolute; top: 20px; left: 20px; display: block; width: 6px; height: 6px; border-top: 1px solid currentColor; border-right: 1px solid currentColor; view-transition-name: prts-scheme-mark}html[data-dsh-prts] [data-prts-scheme-reveal-meter]{position: absolute; top: 6px; left: 0; display: block; box-sizing: border-box; width: 6px; height: 50px; border: 1px solid rgba(255,212,0,.34); background: rgba(8,12,14,.32)}html[data-dsh-prts] [data-prts-scheme-reveal-meter]::after{content: \"\"; position: absolute; top: -1px; left: 6px; width: 3px; border-top: 1px solid rgba(255,212,0,.64); box-shadow: 0 24px rgba(255,212,0,.42),0 49px rgba(255,212,0,.64)}html[data-dsh-prts] [data-prts-scheme-reveal-meter-fill]{position: absolute; inset: 1px; display: block; background: currentColor; box-shadow: 0 0 5px rgba(255,212,0,.28); opacity: 0; transform-origin: 50% 100%}html[data-dsh-prts] [data-prts-scheme-reveal-label],html[data-dsh-prts] [data-prts-scheme-reveal-value]{position: absolute; left: 12px; display: block; color: currentColor; font-family: var(--prts-mono); font-style: normal; line-height: 1; white-space: nowrap}html[data-dsh-prts] [data-prts-scheme-reveal-label]{top: 7px; font-size: 7px; font-weight: 600; letter-spacing: .16em; opacity: .72}html[data-dsh-prts] [data-prts-scheme-reveal-value]{bottom: 7px; width: 24px; height: 11px; font-size: 11px; font-weight: 700; letter-spacing: .08em}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-node){background-image: linear-gradient(#ffd400,#ffd400); background-position: left 1px bottom 7px; background-repeat: no-repeat; background-size: 2px var(--prts-scheme-control-meter-height,0); object-fit: none}html[data-dsh-prts][data-prts-scheme-transition-interactive]::view-transition-new(prts-scheme-node){background-image: var(--prts-scheme-control-value-image),linear-gradient(#ffd400,#ffd400); background-position: left 12px bottom 7px,left 1px bottom 7px; background-size: 24px 11px,2px var(--prts-scheme-control-meter-height,0)}html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-mark){animation: prts-scheme-hud-release 100ms ease-out both}@keyframes prts-scheme-hud-release{0%,35%{opacity: 1}100%{opacity: 0}}@media (max-width: 640px){html[data-dsh-prts] [data-prts-scheme-reveal]{--prts-scheme-grid-cell: 16px; --prts-scheme-grid-diagonal-cell: 32px}}html[data-dsh-prts] [data-prts-scheme-current=\"dark\"] [data-prts-scheme-icon=\"light\"],html[data-dsh-prts] [data-prts-scheme-current=\"light\"] [data-prts-scheme-icon=\"dark\"]{display: none}html[data-dsh-prts] [data-prts-region=\"frame\"]{width: calc(100vw - var(--prts-nav-width)); height: calc(100dvh - var(--prts-host-top-inset)); min-height: 0; margin-left: var(--prts-nav-width); display: grid !important; background: var(--prts-canvas)}html[data-dsh-prts] [data-prts-region=\"sessions\"],html[data-dsh-prts] [data-prts-region=\"operation\"]{min-width: 0; min-height: 0}html[data-dsh-prts] [data-prts-region=\"sessions\"]{box-sizing: border-box; position: relative; z-index: 4; overflow: hidden; border-right: 1px solid var(--prts-line); background: var(--prts-panel); transition: opacity 180ms ease}html[data-dsh-prts] [data-prts-region=\"operation\"]{position: relative; z-index: 1; overflow: hidden; background: var(--prts-canvas); color: var(--prts-ink)}html[data-dsh-prts] [data-prts-region=\"frame\"][data-sidebar-collapsed] [data-prts-region=\"sessions\"] :is( [data-slot=\"sidebar.workspaces\"],[data-slot=\"sidebar.settings\"] ){opacity: 0; pointer-events: none}html[data-dsh-prts] [data-sidebar-collapsed] :is([data-prts-owned-facility],[data-prts-owned-facility-spine],[data-prts-owned-facility-vector]){visibility: hidden; content-visibility: hidden}html[data-dsh-prts] [data-prts-region=\"sessions\"] > *,html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar\"]{height: 100%}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-rc7-sidebar-root]{box-sizing: border-box; width: 100% !important; min-width: var(--prts-sessions-width); padding: 14px 10px; overflow: hidden auto; background: transparent !important; color: var(--prts-ink)}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar.workspaces\"] [role=\"tree\"]{overflow-x: hidden}html[data-dsh-prts] [data-prts-region=\"sessions\"] > * > [data-slot=\"sidebar\"] > :first-child > button[aria-label*=\"new session\" i]{display: none !important}html[data-dsh-prts] [data-prts-workspace-row],html[data-dsh-prts] [data-prts-session-row]{--prts-row-shift: 0px; --prts-row-end-reserve: 29px; --prts-facility-height: var(--prts-workspace-height); position: relative; width: calc(100% - 20px); height: var(--prts-facility-height) !important; min-height: var(--prts-facility-height); display: flex; align-items: center; gap: 0 !important; margin: 0 0 var(--prts-facility-gap) 0; padding: 0 !important; overflow: visible; border: 0 !important; background: transparent !important; color: var(--prts-ink); isolation: isolate}html[data-dsh-prts] [data-prts-session-row]{--prts-facility-height: var(--prts-session-height); margin-left: 8px}@media (max-height: 820px) and (hover: hover) and (pointer: fine){html[data-dsh-prts]{--prts-workspace-height: 34px; --prts-session-height: 32px; --prts-facility-gap: 5px}}html[data-dsh-prts] [data-prts-workspace-row]::before{background: var(--prts-cyan) !important}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"],html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]),html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open]){--prts-row-shift: var(--prts-spine-travel)}html[data-dsh-prts] [data-prts-workspace-row]::before,html[data-dsh-prts] [data-prts-session-row]::before{content: \"\"; position: absolute; z-index: 2; inset: 0 auto 0 0; width: var(--prts-spine-width); background: var(--prts-line-strong); clip-path: polygon( 3px 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px ); transform: scaleX(var(--prts-spine-rest)); transform-origin: left center; transition: transform 220ms var(--prts-ease-spring),background-color 160ms ease}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"]::before,html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open])::before,html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open])::before{transform: scaleX(1)}html[data-dsh-prts] [data-prts-session-row][aria-selected=\"true\"]::before{background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-facility-face]{position: absolute; z-index: -1; inset: 0 0 0 5px; border: 1px solid var(--prts-line); background: var(--prts-panel-raised); clip-path: polygon( 3px 0,calc(50% - 25px) 0,calc(50% - 20px) 3.333px,calc(50% + 20px) 3.333px,calc(50% + 25px) 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px ); transform: translate3d(var(--prts-row-shift),0,0); transition: transform 220ms var(--prts-ease-spring),border-color 160ms ease,background-color 160ms ease; pointer-events: none}html[data-dsh-prts] :is([data-prts-workspace-row],[data-prts-session-row]) [data-prts-facility-face]{right: var(--prts-row-end-reserve)}html[data-dsh-prts] [data-prts-row-title],html[data-dsh-prts] [data-prts-session-row] > span:not([data-prts-facility-face]):not([data-prts-row-projection]):not([data-prts-session-actions]),html[data-dsh-prts] [data-prts-workspace-row] > span:not([data-prts-facility-face]):not([data-prts-row-projection]):not([data-prts-workspace-actions]){position: relative; z-index: 3; min-width: 0; transform: translate3d(var(--prts-row-shift),0,0); transition: transform 220ms var(--prts-ease-spring),color 160ms ease}html[data-dsh-prts] [data-prts-row-title]{flex: 1; overflow: hidden; padding: 0 10px 0 13px; font-size: 12px; font-weight: 650; line-height: var(--prts-facility-height); text-overflow: ellipsis; white-space: nowrap}html[data-dsh-prts] [data-prts-session-row] [data-prts-row-title]::before{content: attr(data-prts-session-index); margin-right: 8px; color: var(--prts-dim); font-family: var(--prts-mono); font-size: 9px; letter-spacing: .08em}html[data-dsh-prts] [data-prts-workspace-actions],html[data-dsh-prts] [data-prts-session-actions]{position: absolute; z-index: 5; inset: 0 0 auto auto; height: var(--prts-facility-height) !important; align-items: stretch !important; gap: 1px !important; margin: 0 !important; transform: translate3d(var(--prts-row-shift),0,0)}html[data-dsh-prts] [data-prts-workspace-actions]{width: 57px}html[data-dsh-prts] [data-prts-session-actions]{width: 28px}html[data-dsh-prts] [data-prts-workspace-actions] > *,html[data-dsh-prts] [data-prts-session-actions] > *{height: 100% !important}html[data-dsh-prts] [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-actions] button{width: 28px !important; min-width: 28px !important; height: var(--prts-facility-height) !important; min-height: var(--prts-facility-height) !important; display: grid !important; place-items: center; padding: 0 !important; border: 1px solid var(--prts-line) !important; border-radius: 0 !important; background: var(--prts-panel-raised) !important; color: var(--prts-muted) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px); cursor: pointer}html[data-dsh-prts] [data-prts-workspace-actions] button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-session-actions] button:is(:hover,:focus-visible){border-color: var(--prts-yellow) !important; color: var(--prts-yellow) !important}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-session-actions] button{animation: prts-facility-button-dock 520ms both}html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-workspace-actions] > :nth-child(1) button{animation-delay: 55ms}html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-workspace-actions] > :nth-child(2){animation-delay: 125ms}}@keyframes prts-facility-button-dock{0%{opacity: 0; transform: translate3d(34px,0,0) scaleX(.94)}52%{opacity: 1; transform: translate3d(-4px,0,0) scaleX(.96)}72%{transform: translate3d(3px,0,0) scaleX(1.035)}88%{transform: translate3d(-1px,0,0) scaleX(.99)}100%{opacity: 1; transform: translate3d(0,0,0) scaleX(1)}}html[data-dsh-prts] [data-slot=\"conversation\"]{min-width: 0; height: 100%; background: transparent}html[data-dsh-prts] [data-slot=\"conversation.session.header\"]{border-bottom: 1px solid var(--prts-line); background: color-mix(in srgb,var(--prts-canvas-elevated) 92%,transparent); font-family: var(--prts-mono)}html[data-dsh-prts] [data-session-code]{color: var(--prts-yellow); font-size: 11px; letter-spacing: .12em}html[data-dsh-prts] [data-prts-conversation-control=\"header\"]{margin-left: auto}html[data-dsh-prts] [data-conversation-scroll]{position: relative; z-index: 2}html[data-dsh-prts] [data-conversation-scroll]::before{content: \"\"; position: absolute; z-index: -1; top: 28px; bottom: 140px; left: clamp(30px,3.6vw,52px); width: 1px; background: linear-gradient(var(--prts-line-strong),var(--prts-line),transparent)}html[data-dsh-prts] [data-message-role=\"user\"],html[data-dsh-prts] [data-chat-flow-kind=\"user\"]{position: relative; color: var(--prts-ink)}html[data-dsh-prts] [data-message-role=\"user\"]::before,html[data-dsh-prts] [data-chat-flow-kind=\"user\"]::before{content: \"\"; position: absolute; top: 8px; left: calc(clamp(-66px,-4vw,-42px)); width: 11px; height: 11px; border: 2px solid var(--prts-canvas); background: var(--prts-yellow); box-shadow: 0 0 0 1px var(--prts-yellow); transform: rotate(45deg)}html[data-dsh-prts] [data-message-role=\"user\"],html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"]{border: 1px solid var(--prts-line-strong) !important; border-left: 4px solid var(--prts-yellow) !important; border-radius: var(--prts-radius-card) !important; background: var(--prts-panel-raised) !important; color: var(--prts-ink) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,0 100%,0 3px); box-shadow: none !important}html[data-dsh-prts] [data-message-role=\"user\"] :is([data-markdown],[class*=\"markdown\" i]),html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] :is([data-markdown],[class*=\"markdown\" i]){background: transparent !important}html[data-dsh-prts] [data-message-role=\"user\"] :is(pre,table,blockquote),html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] :is(pre,table,blockquote){border: 1px solid var(--prts-line); background: var(--prts-glass-dense)}html[data-dsh-prts] [data-message-role=\"user\"] :is(pre,code),html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] :is(pre,code){font-family: var(--prts-mono) !important}html[data-dsh-prts] [data-message-role=\"user\"] pre,html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] pre{max-width: 100%; overflow: auto; padding: 14px; border-left: 3px solid var(--prts-cyan) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [aria-invalid=\"true\"],html[data-dsh-prts] [data-status=\"error\"],html[data-dsh-prts] [data-status=\"denied\"]{border-color: var(--prts-red) !important; color: var(--prts-red) !important}html[data-dsh-prts] [data-prts-ambient-layer]{position: absolute; z-index: 0; inset: 0; overflow: hidden; opacity: .86; background: radial-gradient(circle at 48% 35%,color-mix(in srgb,var(--prts-cyan) 7%,transparent),transparent 32%),linear-gradient(115deg,transparent 0 42%,color-mix(in srgb,var(--prts-line) 18%,transparent) 42.2% 42.5%,transparent 42.7%),repeating-linear-gradient(0deg,transparent 0 27px,color-mix(in srgb,var(--prts-line) 12%,transparent) 27px 28px); pointer-events: none}html[data-dsh-prts][data-prts-texture=\"restrained\"] [data-prts-ambient-layer]{opacity: .56}html[data-dsh-prts][data-prts-texture=\"off\"] [data-prts-ambient-layer]{display: none}html[data-dsh-prts] [data-prts-particle-layer]{position: absolute; z-index: 1; inset: 0; width: 100%; height: 100%; pointer-events: none}html[data-dsh-prts] [data-prts-particle-layer]{opacity: 1; transition: opacity 120ms ease-out}html[data-dsh-prts] [data-prts-resize-shield]{content-visibility: hidden !important; contain-intrinsic-size: auto 800px}html[data-dsh-prts] [data-prts-particle-layer][data-prts-resizing]{opacity: .78; transition: none}html[data-dsh-prts] [data-prts-particle-layer][data-prts-resize-restoring]{opacity: 1; transition: opacity 120ms ease-out}html[data-dsh-prts] [data-prts-ambient-layer][data-prts-resizing]{opacity: .42; background: color-mix(in srgb,var(--prts-panel) 92%,var(--prts-canvas)); transition: none}html[data-dsh-prts] [data-prts-ambient-layer][data-prts-resizing] :is( [data-prts-ambient-glow],[data-prts-session-pickup] ){animation-play-state: paused !important}html[data-dsh-prts] :is( [data-prts-conversation-preview][data-prts-resizing],[data-prts-conversation-history-hint][data-prts-resizing],[data-prts-conversation-history-status][data-prts-resizing],[data-prts-theme-settings][data-prts-resizing],[data-prts-settings-backdrop][data-prts-resizing] ),html[data-dsh-prts] [data-prts-resizing] > [data-composer-card]{backdrop-filter: none !important; -webkit-backdrop-filter: none !important; transition: none !important}html[data-dsh-prts] [data-prts-hero-active]::before{content: \"\"; position: absolute; inset: 0; pointer-events: none}html[data-dsh-prts]{--prts-hero-mark-base: clamp(380px,46%,720px); --prts-hero-mark-size: min(var(--prts-hero-mark-base),42dvh)}html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat],html[data-dsh-prts] [data-prts-hero-active] [data-slot=\"conversation.composer\"]{position: relative; z-index: 5}html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-composer-fallback]{position: relative; border: 1px solid var(--prts-line-strong) !important; border-bottom: 3px solid var(--prts-yellow) !important; border-radius: var(--prts-radius-card) !important; background: var(--prts-active-glass) !important; clip-path: polygon(3px 0,calc(50% - 42px) 0,calc(50% - 37px) 5px,calc(50% + 37px) 5px,calc(50% + 42px) 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px); box-shadow: 0 14px 34px rgba(0,0,0,.18); backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter)}html[data-dsh-prts] [data-composer-card] textarea,html[data-dsh-prts] [data-prts-composer-fallback] textarea{border: 0 !important; background: transparent !important; color: var(--prts-ink) !important; caret-color: var(--prts-yellow)}html[data-dsh-prts] [data-composer-card] button,html[data-dsh-prts] [data-prts-conversation-control]{border: 1px solid var(--prts-line) !important; border-radius: var(--prts-radius-control) !important; background: var(--prts-panel-raised) !important; color: var(--prts-ink) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px)}html[data-dsh-prts] [data-composer-card] button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-conversation-control]:is(:hover,:focus-visible){border-color: var(--prts-yellow) !important}html[data-dsh-prts] [data-composer-card] button[aria-label*=\"send\" i],html[data-dsh-prts] [data-composer-card] button[type=\"submit\"]{background: var(--prts-yellow) !important; color: var(--prts-yellow-ink) !important}html[data-dsh-prts] [data-composer-card] button:active,html[data-dsh-prts] [data-prts-conversation-control]:active{transform: translateY(1px) scale(.98)}html[data-dsh-prts] [data-produced-files-row] > button[type=\"button\"],html[data-dsh-prts] [data-prts-to-bottom]{min-height: 36px; border: 1px solid var(--prts-line) !important; background: var(--prts-active-glass) !important; color: var(--prts-ink) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px)}html[data-dsh-prts] [data-prts-glass-control=\"model\"],html[data-dsh-prts] [data-prts-glass-control=\"permission\"],html[data-dsh-prts] [data-prts-glass-control=\"preset\"]{border: 1px solid var(--prts-line) !important; border-radius: var(--prts-radius-control) !important; background: var(--prts-active-glass) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-glass-menu],html[data-dsh-prts] [data-prts-floating-glass=\"menu\"],html[data-dsh-prts] [data-prts-floating-glass=\"listbox\"],html[data-dsh-prts] [data-prts-floating-glass=\"popover\"]{border: 1px solid var(--prts-glass-border) !important; border-radius: var(--prts-radius-overlay) !important; background: var(--prts-active-glass) !important; color: var(--prts-ink) !important; box-shadow: var(--prts-shadow-glass-overlay) !important; backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter)}html[data-dsh-prts] [data-prts-floating-glass=\"dialog\"]{border: 1px solid var(--prts-glass-border) !important; border-radius: var(--prts-radius-overlay) !important; background: var(--prts-panel) !important; color: var(--prts-ink) !important; box-shadow: var(--prts-shadow-glass-overlay) !important; backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-prts-floating-item]{min-height: 38px; border-radius: var(--prts-radius-control) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-floating-item]:is(:hover,[data-highlighted]){background: var(--prts-panel-muted) !important}html[data-dsh-prts] [data-prts-floating-input]{min-height: 44px; border: 1px solid var(--prts-line) !important; background: var(--prts-panel) !important; color: var(--prts-ink) !important}html[data-dsh-prts] :is( [data-prts-floating-glass=\"menu\"],[data-prts-floating-glass=\"listbox\"],[data-prts-floating-glass=\"popover\"] ) [data-prts-floating-danger]{color: var(--prts-red) !important}html[data-dsh-prts] [data-prts-floating-scrim]{background: rgba(3,5,6,.62) !important}html[data-dsh-prts-settings] .prts-plugin-settings{width: 100%; display: grid; gap: 16px; container: prts-plugin-settings / inline-size; color: inherit; font: inherit}html[data-dsh-prts-settings] .prts-plugin-settings__header{display: grid; gap: 5px; padding-bottom: 14px; border-bottom: 1px solid color-mix(in srgb,currentColor 18%,transparent)}html[data-dsh-prts-settings] .prts-plugin-settings__header h3,html[data-dsh-prts-settings] .prts-plugin-settings__header p{margin: 0}html[data-dsh-prts-settings] .prts-plugin-settings__header h3{font-size: 18px; font-weight: 650}html[data-dsh-prts-settings] .prts-plugin-settings__header p,html[data-dsh-prts-settings] .prts-plugin-settings__copy small{color: color-mix(in srgb,currentColor 62%,transparent); font-size: 12px; line-height: 1.5}html[data-dsh-prts-settings] .prts-plugin-settings__safe{margin: 0; padding: 10px 12px; border: 1px solid color-mix(in srgb,#df5750 42%,transparent); border-radius: 8px; background: color-mix(in srgb,#df5750 8%,transparent); color: inherit; font-size: 12px}html[data-dsh-prts-settings] .prts-plugin-settings__list{overflow: hidden; border: 1px solid color-mix(in srgb,currentColor 16%,transparent); border-radius: 10px}html[data-dsh-prts-settings] .prts-plugin-settings__row{min-height: 64px; display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 12px 14px}html[data-dsh-prts-settings] .prts-plugin-settings__row + .prts-plugin-settings__row{border-top: 1px solid color-mix(in srgb,currentColor 12%,transparent)}html[data-dsh-prts-settings] .prts-plugin-settings__copy{min-width: 0; display: grid; gap: 3px}html[data-dsh-prts-settings] .prts-plugin-settings__copy strong{font-size: 13px; font-weight: 600}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']{position: relative; width: 42px; height: 24px; flex: 0 0 auto; padding: 0; border: 0; border-radius: 999px; background: color-mix(in srgb,currentColor 18%,transparent); color: inherit; cursor: pointer}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'] > span{position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: currentColor; transition: transform 120ms ease}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'].is-active{background: var(--color-primary,#d9b800); color: #111}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'].is-active > span{transform: translateX(18px)}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']:disabled{cursor: not-allowed; opacity: .45}@media (prefers-reduced-motion: reduce){html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'] > span{transition: none}}@container prts-plugin-settings (max-width: 22rem){html[data-dsh-prts-settings] .prts-plugin-settings__row{flex-direction: column; align-items: stretch; gap: 10px}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']{align-self: flex-end}}@media (max-width: 640px){html[data-dsh-prts]{--prts-nav-width: 52px}html[data-dsh-prts] [data-conversation-scroll]::before{left: 18px}html[data-dsh-prts] [data-message-role]::before,html[data-dsh-prts] [data-chat-flow-kind]::before{left: -25px}html[data-dsh-prts] [data-slot=\"conversation.session.header\"]{padding-inline: 12px}html[data-dsh-prts-settings] .prts-settings{padding: 12px}}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){html[data-dsh-prts] [data-prts-floating-glass],html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-glass-menu]{background: var(--prts-panel) !important}}@media (hover: hover) and (pointer: fine){html[data-dsh-prts] [data-prts-nav-rail] > button:hover b{transform: translateY(-1px)}}@media (prefers-reduced-transparency: reduce){html[data-dsh-prts]{--prts-active-glass: var(--prts-panel); --prts-active-glass-filter: none}}@media (prefers-contrast: more){html[data-dsh-prts]{--prts-line: currentColor; --prts-line-strong: currentColor}}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-conversation-scale],[data-prts-conversation-scale] *,[data-prts-conversation-preview],[data-prts-conversation-preview] *,[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] ),html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-conversation-scale],[data-prts-conversation-scale] *,[data-prts-conversation-preview],[data-prts-conversation-preview] *,[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::before,html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-conversation-scale],[data-prts-conversation-scale] *,[data-prts-conversation-preview],[data-prts-conversation-preview] *,[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::after{scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important}}html[data-dsh-prts]{--prts-hero-mark-base: clamp(300px,38%,520px); --prts-hero-mark-size: min(var(--prts-hero-mark-base),32dvh)}html[data-dsh-prts] [data-prts-region=\"sessions\"] > * > [data-slot=\"sidebar\"] > :first-child > button[aria-label*=\"new session\" i]{min-height: 40px; display: grid !important; place-items: center; margin: 0 0 14px; border: 1px solid var(--prts-line) !important; border-radius: var(--prts-radius-card) !important; background: var(--prts-panel-raised) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-rail-brand],html[data-dsh-prts] [data-prts-nav-rail] > button,html[data-dsh-prts] [data-prts-nav-bottom] > button{position: relative; width: 100%; min-width: 0; min-height: 48px; display: grid; place-items: center; padding: 0; border: 0; border-bottom: 1px solid #242b2f; border-radius: 0; background: transparent; color: #aeb8bd !important; cursor: pointer; clip-path: none}html[data-dsh-prts] [data-prts-rail-brand]{height: 64px; border-bottom-color: #30383d}html[data-dsh-prts] [data-prts-rail-brand]:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-rail-brand][aria-expanded=\"true\"],html[data-dsh-prts] [data-prts-nav-rail] > button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-nav-bottom] > button:is(:hover,:focus-visible){background: #151a1d; color: #f3f6f7 !important}html[data-dsh-prts] [data-prts-rail-brand][aria-expanded=\"true\"]::after{content: \"\"; position: absolute; inset: 7px auto 7px 0; width: 2px; background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-nav-rail] small,html[data-dsh-prts] [data-prts-connection-label]{position: absolute; z-index: 180; top: 50%; left: calc(100% + 9px); width: max-content; max-width: 180px; padding: 6px 8px; border: 1px solid #3d474d; border-radius: 3px; opacity: 0; background: #0e1215; color: #eef2f3; font: 700 9px/1.2 var(--prts-mono); letter-spacing: .04em; text-align: left; transform: translate3d(-5px,-50%,0); transition: opacity 130ms ease,transform 160ms var(--prts-ease-snap); pointer-events: none; white-space: nowrap}html[data-dsh-prts] [data-prts-nav-rail] button:is(:hover,:focus-visible) small,html[data-dsh-prts] [data-prts-connection-indicator]:is(:hover,:focus-visible) [data-prts-connection-label]{opacity: 1; transform: translate3d(0,-50%,0)}html[data-dsh-prts] [data-prts-connection-indicator]{position: relative; min-height: 38px; padding: 0; color: #9da8ad}html[data-dsh-prts] [data-prts-nav-bottom] svg,html[data-dsh-prts] [data-prts-nav-bottom] b{display: block; color: currentColor}html[data-dsh-prts] [data-message-role=\"user\"],html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"],html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-composer-fallback],html[data-dsh-prts] [data-composer-card] button,html[data-dsh-prts] [data-prts-conversation-control],html[data-dsh-prts] [data-produced-files-row] > button[type=\"button\"],html[data-dsh-prts] [data-prts-to-bottom]{border-radius: 3px !important; clip-path: none !important}html[data-dsh-prts] [data-prts-facility-face]{right: 0 !important; border: 0 !important; background: var(--prts-line-strong)}html[data-dsh-prts] [data-prts-facility-face]::after{content: \"\"; position: absolute; inset: 1px; background: var(--prts-panel-raised); clip-path: polygon( 3px 0,calc(50% - 25px) 0,calc(50% - 20px) 3.333px,calc(50% + 20px) 3.333px,calc(50% + 25px) 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px )}html[data-dsh-prts] [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-actions] button{border: 1px solid var(--prts-line-strong) !important; border-radius: 3px !important; clip-path: none !important}html[data-dsh-prts] [data-prts-hero-active]{display: grid; grid-template-rows: minmax(220px,1fr) auto; align-content: center; gap: clamp(28px,5dvh,54px); padding-top: 24px; padding-bottom: 34px}html[data-dsh-prts] [data-prts-hero-active] [data-phase=\"hero\"]{min-height: min(36dvh,390px); align-self: end}html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat]{align-self: start; justify-self: center}html[data-dsh-prts]{--prts-hero-mark-base: clamp(320px,42%,580px); --prts-hero-mark-size: min(var(--prts-hero-mark-base),42dvh)}html[data-dsh-prts] [data-prts-region=\"frame\"]{position: relative}html[data-dsh-prts] [data-prts-region=\"frame\"] > [data-shell-overlay]{position: absolute !important; z-index: 120; inset: 0; min-width: 0; min-height: 0; pointer-events: none}html[data-dsh-prts] [data-prts-region=\"frame\"] > [data-shell-overlay] > *{pointer-events: auto}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar.settings\"]{opacity: 1; visibility: visible; pointer-events: auto}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar.settings\"] > button{color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-workspace-icon]{display: none !important}html[data-dsh-prts] [data-prts-workspace-disclosure]{position: relative; z-index: 4; width: 14px; flex: 0 0 14px; display: grid; place-items: center; margin-left: calc(var(--prts-spine-width) + 4px); color: var(--prts-muted); transform: translate3d(var(--prts-row-shift),0,0); transition: transform 220ms var(--prts-ease-spring),color 160ms ease}html[data-dsh-prts] [data-prts-workspace-row]::before,html[data-dsh-prts] [data-prts-session-row]::before{clip-path: polygon( 1px 0,calc(100% - 1px) 0,100% 1px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 1px),calc(100% - 1px) 100%,1px 100%,0 calc(100% - 1px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 1px ) !important}html[data-dsh-prts] :is([data-prts-workspace-row],[data-prts-session-row]) [data-prts-facility-face]{right: var(--prts-row-end-reserve) !important}html[data-dsh-prts] [data-prts-facility-face]{border: 0 !important; background: var(--prts-line-strong) !important; clip-path: polygon( 1px 0,calc(50% - 25px) 0,calc(50% - 20px) 3.333px,calc(50% + 20px) 3.333px,calc(50% + 25px) 0,calc(100% - 1px) 0,100% 1px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 1px),calc(100% - 1px) 100%,1px 100%,0 calc(100% - 1px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 1px ) !important}html[data-dsh-prts] [data-prts-facility-face]::after{content: \"\"; position: absolute; inset: 1px; background: var(--prts-panel-raised); clip-path: polygon( 0 0,calc(50% - 24px) 0,calc(50% - 19px) 3.333px,calc(50% + 19px) 3.333px,calc(50% + 24px) 0,100% 0,100% calc(50% - 4px),calc(100% - 2px) calc(50% - 2px),calc(100% - 2px) calc(50% + 2px),100% calc(50% + 4px),100% 100%,0 100%,0 calc(50% + 4px),2px calc(50% + 2px),2px calc(50% - 2px),0 calc(50% - 4px) )}html[data-dsh-prts] [data-prts-workspace-actions]{width: 57px !important}html[data-dsh-prts] [data-prts-session-actions]{width: 28px !important}html[data-dsh-prts] [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-actions] button{width: 28px !important; min-width: 28px !important; position: relative; isolation: isolate; overflow: hidden; border: 0 !important; border-radius: 0 !important; background: var(--prts-line) !important; clip-path: polygon( 1px 0,calc(100% - 1px) 0,100% 1px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 1px),calc(100% - 1px) 100%,1px 100%,0 calc(100% - 1px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 1px ) !important}html[data-dsh-prts] [data-prts-workspace-actions] button::before,html[data-dsh-prts] [data-prts-session-actions] button::before{content: \"\"; position: absolute; z-index: -1; inset: 1px; background: var(--prts-panel-raised); clip-path: polygon( 0 0,100% 0,100% calc(50% - 4px),calc(100% - 2px) calc(50% - 2px),calc(100% - 2px) calc(50% + 2px),100% calc(50% + 4px),100% 100%,0 100%,0 calc(50% + 4px),2px calc(50% + 2px),2px calc(50% - 2px),0 calc(50% - 4px) ); pointer-events: none}html[data-dsh-prts] [data-prts-workspace-actions] button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-session-actions] button:is(:hover,:focus-visible){background: var(--prts-yellow) !important}html[data-dsh-prts] [data-prts-session-time]{position: relative; z-index: 3; flex: 0 0 auto; margin-right: 39px; padding-left: 8px; transform: translate3d(var(--prts-row-shift),0,0); transition: opacity 120ms ease,transform 220ms var(--prts-ease-spring)}html[data-dsh-prts] [data-prts-session-row]:hover [data-prts-session-time]{opacity: 0}html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-composer-fallback]{position: relative; isolation: isolate; overflow: visible; border: 0 !important; border-radius: 0 !important; background: transparent !important; box-shadow: none !important; clip-path: none !important; backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-composer-card]::before,html[data-dsh-prts] [data-prts-composer-fallback]::before{content: \"\"; position: absolute; z-index: 0; inset: 0; background: var(--prts-line-strong); clip-path: polygon( 3px 0,calc(50% - 42px) 0,calc(50% - 37px) 5px,calc(50% + 37px) 5px,calc(50% + 42px) 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px ); box-shadow: 0 14px 34px rgba(0,0,0,.18); pointer-events: none}html[data-dsh-prts] [data-composer-card]::after,html[data-dsh-prts] [data-prts-composer-fallback]::after{content: \"\"; position: absolute; z-index: 1; inset: 1px 1px 3px; background: var(--prts-composer-surface,var(--prts-active-glass)); clip-path: polygon( 2px 0,calc(50% - 41px) 0,calc(50% - 36px) 5px,calc(50% + 36px) 5px,calc(50% + 41px) 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px ); backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter); pointer-events: none}html[data-dsh-prts] [data-composer-card] > :not([data-prts-composer-signal]),html[data-dsh-prts] [data-prts-composer-fallback] > :not([data-prts-composer-signal]){position: relative; z-index: 2}html[data-dsh-prts] [data-prts-composer-signal]{position: absolute; z-index: 3; inset: 0; overflow: visible; pointer-events: none}html[data-dsh-prts] [data-prts-composer-signal]::before{content: \"\"; position: absolute; left: 50%; background: var(--prts-yellow); opacity: .82; pointer-events: none; transition: transform 160ms var(--prts-ease-snap),opacity 160ms ease}html[data-dsh-prts] [data-prts-composer-signal]::before{bottom: 0; width: calc(100% - 6px); height: 3px; transform: translateX(-50%) scaleX(.16)}html[data-dsh-prts] [data-composer-card]:focus-within,html[data-dsh-prts] [data-prts-composer-fallback]:focus-within{--prts-composer-surface: color-mix(in srgb,var(--prts-active-glass) 94%,var(--prts-ink) 6%)}html[data-dsh-prts] :is([data-composer-card],[data-prts-composer-fallback]):focus-within [data-prts-composer-signal]::before{opacity: 1; transform: translateX(-50%) scaleX(1)}html[data-dsh-prts] [data-composer-card] textarea:focus-visible,html[data-dsh-prts] [data-prts-composer-fallback] textarea:focus-visible{outline: none !important}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] [data-prts-composer-signal]::before{transition: none}}html[data-dsh-prts] [data-prts-theme-settings] :is(input,textarea,select):focus-visible,html[data-dsh-prts] [data-prts-floating-input]:focus-visible{outline: none !important; border-color: var(--prts-yellow) !important; box-shadow: 0 0 0 1px var(--prts-yellow) !important}html[data-dsh-prts] [data-prts-conversation-control=\"header\"]{height: 36px; min-height: 36px; display: inline-flex; align-items: center; gap: 6px; padding: 0 10px}html[data-dsh-prts] [data-prts-conversation-control=\"header\"] svg{width: 16px; height: 16px; flex: 0 0 16px}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button[aria-label*=\"send\" i],html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button[type=\"submit\"]{min-width: 40px !important; padding: 0 !important; font-size: 11px}html[data-dsh-prts] [data-prts-hero-active] [data-prts-glass-control=\"action\"]{width: 36px !important; min-width: 36px !important; padding: 0 !important; flex: 0 0 36px}html[data-dsh-prts] :is( [data-composer-card] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-composer-fallback] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-glass-control],[data-prts-conversation-control]:not([data-prts-conversation-control=\"micro\"]),[data-produced-files-row] > button[type=\"button\"] ){--prts-control-outline: var(--prts-line); --prts-control-surface: var(--prts-panel-raised); position: relative; isolation: isolate; overflow: hidden; border: 0 !important; border-radius: 0 !important; background: var(--prts-control-outline) !important; color: var(--prts-ink) !important; clip-path: polygon( 3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px ) !important}html[data-dsh-prts] :is( [data-composer-card] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-composer-fallback] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-glass-control],[data-prts-conversation-control]:not([data-prts-conversation-control=\"micro\"]),[data-produced-files-row] > button[type=\"button\"] )::before{content: \"\"; position: absolute; z-index: -1; inset: 1px; background: var(--prts-control-surface); clip-path: polygon( 2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px ); pointer-events: none}html[data-dsh-prts] :is( [data-composer-card] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-composer-fallback] button:not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-glass-control],[data-prts-conversation-control]:not([data-prts-conversation-control=\"micro\"]),[data-produced-files-row] > button[type=\"button\"] ):is(:hover,:focus-visible){--prts-control-outline: var(--prts-yellow)}html[data-dsh-prts] :is( [data-prts-glass-control=\"model\"],[data-prts-glass-control=\"permission\"],[data-prts-glass-control=\"preset\"],[data-prts-conversation-control=\"utility\"],[data-produced-files-row] > button[type=\"button\"] ){--prts-control-surface: var(--prts-active-glass) !important}html[data-dsh-prts] [data-composer-card] button[aria-label*=\"send\" i],html[data-dsh-prts] [data-composer-card] button[type=\"submit\"],html[data-dsh-prts] [data-prts-conversation-control=\"cta\"]{font-size: 11px; --prts-control-outline: var(--prts-yellow) !important; --prts-control-surface: var(--prts-yellow) !important; color: var(--prts-yellow-ink) !important}html[data-dsh-prts] [data-prts-conversation-control=\"danger\"]{--prts-control-outline: var(--prts-red) !important; --prts-control-surface: color-mix(in srgb,var(--prts-red) 14%,var(--prts-panel-raised)) !important; color: var(--prts-red) !important}html[data-dsh-prts] [data-prts-hero-active]{--prts-hero-narrow-spacer: clamp(24px,8dvh,72px); --prts-hero-wide-spacer: clamp(96px,22dvh,340px); min-height: 100%; height: calc(100% - 48px) !important; overflow-y: auto; display: grid; grid-template-columns: minmax(0,1fr); grid-template-rows: minmax(0,1fr) auto min( var(--prts-hero-wide-spacer),max(var(--prts-hero-narrow-spacer),calc(var(--prts-hero-narrow-spacer) + 63vw - 403.2px)) ); align-content: stretch; gap: clamp(24px,calc(5vw - 8px),40px); padding: clamp(18px,calc(1.875vw + 6px),24px) clamp(12px,3vw,42px) 0 clamp(18px,3vw,42px)}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card],html[data-dsh-prts] [data-prts-hero-active] [data-prts-composer-fallback]{width: 100%; margin-inline: auto; padding: 10px 12px}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] textarea,html[data-dsh-prts] [data-prts-hero-active] [data-prts-composer-fallback] textarea{min-height: 64px; line-height: 1.55; resize: vertical}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button,html[data-dsh-prts] [data-prts-hero-active] [data-prts-glass-control]{min-height: 36px}html[data-dsh-prts] [data-prts-hero-active]::before{margin-top: calc(var(--prts-hero-mark-size) + 44px)}html[data-dsh-prts] [data-prts-hero-active] [data-phase=\"hero\"]{grid-row: 1; min-height: 0; align-self: stretch}html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat]{grid-row: 2; width: min(calc(780px + 32px),100%); min-width: 0 !important; align-self: end; justify-self: center}html[data-dsh-prts] [data-prts-theme-settings]{--prts-settings-text: .875rem; --prts-settings-small: .75rem; --prts-settings-heading: .875rem; position: fixed; z-index: 10000; inset: 50% auto auto 50%; width: min(clamp(50rem,55vw,65rem),calc(100vw - 2rem)); height: auto; max-width: none; max-height: min(60rem,calc(100dvh - 2rem)); container: prts-settings / inline-size; margin: 0; padding: 0; overflow: visible; border: 0; border-radius: 0; background: transparent; color: var(--prts-ink); box-shadow: 0 28px 90px rgba(0,0,0,.46); clip-path: none; opacity: 0; transform: translate(-50%,calc(-50% + 8px)) scale(.992); pointer-events: none; transition: opacity 150ms ease,transform 220ms var(--prts-ease-spring)}html[data-dsh-prts] [data-prts-theme-settings][open]{display: block}html[data-dsh-prts] [data-prts-theme-settings][data-prts-settings-visible]{opacity: 1; transform: translate(-50%,-50%) scale(1); pointer-events: auto}html[data-dsh-prts] [data-prts-theme-settings][data-prts-resizing]{transition: none}html[data-dsh-prts] [data-prts-theme-settings][data-prts-resizing]::backdrop,html[data-dsh-prts] [data-prts-settings-backdrop][data-prts-resizing]{backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-prts-theme-settings][data-prts-resizing] [data-prts-option-sample=\"glass\"]::after{backdrop-filter: none; -webkit-backdrop-filter: none; transition: none}html[data-dsh-prts] [data-prts-theme-settings]::before{content: none}html[data-dsh-prts] [data-prts-theme-settings]::backdrop{background: color-mix(in srgb,var(--prts-canvas) 72%,transparent); backdrop-filter: blur(5px) saturate(.82); -webkit-backdrop-filter: blur(5px) saturate(.82)}html[data-dsh-prts] [data-prts-settings-backdrop]{z-index: 9999; inset: 0; background: color-mix(in srgb,var(--prts-canvas) 72%,transparent); backdrop-filter: blur(5px) saturate(.82); -webkit-backdrop-filter: blur(5px) saturate(.82)}html[data-dsh-prts] [data-prts-settings-frame]{position: relative; height: auto; max-height: inherit; display: grid; grid-template-rows: auto minmax(0,1fr); overflow: hidden; isolation: isolate; border: 1px solid var(--prts-line-strong); background: linear-gradient(125deg,color-mix(in srgb,var(--prts-cyan) 4%,transparent),transparent 34%),var(--prts-panel); clip-path: polygon(4px 0,calc(100% - 38px) 0,100% 38px,100% calc(100% - 4px),calc(100% - 4px) 100%,4px 100%,0 calc(100% - 4px),0 4px)}html[data-dsh-prts] [data-prts-settings-frame]::before{content: \"\"; position: absolute; z-index: 3; top: 0; right: 37px; width: 118px; height: 2px; background: var(--prts-cyan); pointer-events: none}html[data-dsh-prts] [data-prts-theme-settings-header]{display: grid; align-items: center; min-height: 68px; grid-template-columns: minmax(180px,auto) minmax(0,1fr); gap: 14px; padding: 13px 48px 12px 16px; border-bottom: 1px solid var(--prts-line-strong); background: color-mix(in srgb,var(--prts-canvas-elevated) 92%,transparent)}html[data-dsh-prts] [data-prts-theme-settings-header] > span{display: grid; gap: 4px}html[data-dsh-prts] [data-prts-theme-settings-header] small,html[data-dsh-prts] [data-prts-theme-settings] section > header small,html[data-dsh-prts] [data-prts-theme-settings] summary small,html[data-dsh-prts] [data-prts-settings-actions] small{color: var(--prts-muted); font: 700 8px/1.3 var(--prts-mono); letter-spacing: .08em}html[data-dsh-prts] [data-prts-theme-settings-header] strong{font: 800 19px/1 var(--prts-display); letter-spacing: .07em}html[data-dsh-prts] [data-prts-settings-summary]{display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px}html[data-dsh-prts] [data-prts-settings-summary] span{min-height: 22px; padding: 4px 7px; box-shadow: inset 0 0 0 1px var(--prts-line); background: color-mix(in srgb,var(--prts-panel-raised) 86%,transparent); color: var(--prts-cyan); font: 700 8px/1 var(--prts-mono); clip-path: polygon(2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px)}html[data-dsh-prts] [data-prts-theme-settings-close]{position: absolute; z-index: 5; top: 13px; right: 13px; width: 36px; height: 36px; color: var(--prts-ink)}html[data-dsh-prts] [data-prts-theme-settings-scroll]{min-height: 0; overflow-y: auto; padding: 12px; scrollbar-gutter: stable}html[data-dsh-prts] [data-prts-settings-presets],html[data-dsh-prts] [data-prts-settings-common],html[data-dsh-prts] [data-prts-settings-advanced],html[data-dsh-prts] [data-prts-settings-actions]{position: relative; margin: 0; overflow: hidden; border: 0; border-bottom: 1px solid var(--prts-line-strong); background: color-mix(in srgb,var(--prts-canvas-elevated) 82%,transparent); clip-path: none}html[data-dsh-prts] [data-prts-settings-presets] > header,html[data-dsh-prts] [data-prts-settings-common] > header{min-height: 42px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 11px; border-bottom: 1px solid color-mix(in srgb,var(--prts-line) 72%,transparent)}html[data-dsh-prts] [data-prts-settings-presets] > header span,html[data-dsh-prts] [data-prts-settings-common] > header span,html[data-dsh-prts] [data-prts-settings-advanced] summary > span{display: flex; align-items: baseline; gap: 9px}html[data-dsh-prts] [data-prts-settings-presets] > header strong,html[data-dsh-prts] [data-prts-settings-common] > header strong,html[data-dsh-prts] [data-prts-settings-advanced] summary strong{font: 800 13px/1 var(--prts-display); letter-spacing: .05em}html[data-dsh-prts] [data-prts-advanced-summary]{pointer-events: none; color: var(--prts-cyan); font: 800 8px/1 var(--prts-mono); letter-spacing: .06em}html[data-dsh-prts] [data-prts-settings-presets],html[data-dsh-prts] [data-prts-settings-common],html[data-dsh-prts] [data-prts-settings-advanced],html[data-dsh-prts] [data-prts-settings-actions]{border-inline: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-settings-presets]{border-top: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-settings-presets] > div{display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 0; padding: 0}html[data-dsh-prts] [data-prts-preset-card]{display: grid; text-align: left; min-height: 66px; align-content: center; gap: 6px; padding: 11px 12px !important; border-right: 1px solid var(--prts-line) !important; position: relative; overflow: hidden; box-shadow: none; background: transparent !important; clip-path: none}html[data-dsh-prts] [data-prts-preset-card]:last-child{border-right: 0 !important}html[data-dsh-prts] [data-prts-preset-card] strong{font-size: 12px}html[data-dsh-prts] [data-prts-preset-card] span{overflow: hidden; font-size: 8px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap}html[data-dsh-prts] [data-prts-preset-card].is-selected{box-shadow: inset 0 -2px 0 var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 9%,transparent) !important}html[data-dsh-prts] [data-prts-settings-common-grid]{display: grid; grid-template-columns: repeat(2,minmax(0,1fr))}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{min-height: 50px; grid-template-columns: 94px minmax(0,1fr); align-items: center; gap: 8px; padding: 7px 10px; border-right: 1px solid var(--prts-line); border-bottom: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:nth-child(2n){border-right: 0}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:nth-last-child(-n + 2){border-bottom: 0}html[data-dsh-prts] [data-prts-setting-row] > div{min-width: 0; display: flex; gap: 4px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row] > span{min-width: 0; display: grid; gap: 3px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row] > span > strong{font: 700 9px/1.1 var(--prts-display)}html[data-dsh-prts] [data-prts-setting-note]{color: var(--prts-yellow); font: 700 7px/1.25 var(--prts-mono); letter-spacing: 0}html[data-dsh-prts] [data-prts-settings-common] button[data-prts-setting-key]{min-width: 0; flex: 1 1 0; display: inline-flex; align-items: center; justify-content: center; gap: 5px}html[data-dsh-prts] [data-prts-option-sample]{position: relative; width: 22px; height: 14px; flex: 0 0 22px; overflow: hidden; border: 1px solid color-mix(in srgb,currentColor 45%,var(--prts-line)); background: var(--prts-canvas)}html[data-dsh-prts] [data-prts-option-sample=\"texture\"][data-prts-option-sample-value=\"off\"]{background: linear-gradient(var(--prts-line),var(--prts-line)) 50% 50% / 12px 1px no-repeat,var(--prts-canvas)}html[data-dsh-prts] [data-prts-option-sample=\"texture\"][data-prts-option-sample-value=\"restrained\"]{background: repeating-linear-gradient(115deg,var(--prts-canvas) 0 6px,color-mix(in srgb,var(--prts-cyan) 38%,var(--prts-canvas)) 6px 7px)}html[data-dsh-prts] [data-prts-option-sample=\"texture\"][data-prts-option-sample-value=\"full\"]{background: repeating-linear-gradient(115deg,transparent 0 4px,color-mix(in srgb,var(--prts-cyan) 62%,transparent) 4px 5px),repeating-linear-gradient(25deg,var(--prts-canvas) 0 7px,color-mix(in srgb,var(--prts-line-strong) 72%,var(--prts-canvas)) 7px 8px)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"]{background: linear-gradient(135deg,color-mix(in srgb,var(--prts-cyan) 54%,transparent) 25%,transparent 25%) 0 0 / 8px 8px,linear-gradient(315deg,color-mix(in srgb,var(--prts-yellow) 38%,transparent) 25%,transparent 25%) 4px 4px / 8px 8px,var(--prts-canvas)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"]::after{content: \"\"; position: absolute; inset: 0; background: color-mix(in srgb,var(--prts-panel-raised) 64%,transparent); backdrop-filter: blur(2px) saturate(1.15); -webkit-backdrop-filter: blur(2px) saturate(1.15)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"off\"]::after{background: var(--prts-panel-raised); backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"soft\"]::after{background: color-mix(in srgb,var(--prts-panel-raised) 82%,transparent); backdrop-filter: blur(1px); -webkit-backdrop-filter: blur(1px)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"standard\"]::after{background: color-mix(in srgb,var(--prts-panel-raised) 62%,transparent)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"clear\"]::after{background: color-mix(in srgb,var(--prts-panel-raised) 34%,transparent); backdrop-filter: blur(4px) saturate(1.35); -webkit-backdrop-filter: blur(4px) saturate(1.35)}html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key],html[data-dsh-prts] [data-prts-retry-save],html[data-dsh-prts] [data-prts-reset-visual],html[data-dsh-prts] [data-prts-reset-confirm-action],html[data-dsh-prts] [data-prts-reset-cancel]{position: relative; overflow: hidden; min-height: 30px; padding: 6px 8px; border: 0 !important; box-shadow: inset 0 0 0 1px var(--prts-line); background: var(--prts-panel-raised); color: var(--prts-muted); font: 700 8px/1 var(--prts-mono); white-space: nowrap; clip-path: polygon(2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px)}html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key].is-selected{box-shadow: inset 0 0 0 1px var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 12%,var(--prts-panel-raised)); color: var(--prts-ink); html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key]::after{content: \"\"; position: absolute; z-index: 3; inset: 0; opacity: 0; box-shadow: inset 0 0 0 1px var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 18%,transparent); pointer-events: none}html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key][data-prts-setting-feedback]::after{opacity: 1}}html[data-dsh-prts] [data-prts-theme-settings] button:focus-visible,html[data-dsh-prts] [data-prts-theme-settings] summary:focus-visible,html[data-dsh-prts] [data-prts-theme-settings] input:focus-visible{outline: 2px solid var(--prts-cyan); outline-offset: 2px}html[data-dsh-prts] [data-prts-settings-advanced] summary{min-height: 52px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px; cursor: pointer; list-style: none}html[data-dsh-prts] [data-prts-settings-advanced] summary::-webkit-details-marker{display: none}html[data-dsh-prts] [data-prts-settings-advanced] summary::after{content: \"+\"; width: 24px; height: 24px; display: grid; place-items: center; margin-left: 2px; border: 1px solid var(--prts-line); color: var(--prts-cyan); font: 800 13px/1 var(--prts-mono)}html[data-dsh-prts] [data-prts-settings-advanced][open] summary::after{content: \"−\"}html[data-dsh-prts] [data-prts-settings-advanced-content]{display: grid; grid-template-columns: minmax(0,.8fr) minmax(0,1.2fr); border-top: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-settings-advanced-content] > section{padding: 11px}html[data-dsh-prts] [data-prts-settings-advanced-content] > section + section{border-left: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-advanced-content] section > header{min-height: 30px; display: grid; gap: 4px}html[data-dsh-prts] [data-prts-settings-advanced-content] section > header strong{font-size: 10px}html[data-dsh-prts] [data-prts-settings-advanced-content] section > header span{color: var(--prts-muted); font-size: 8px}html[data-dsh-prts] [data-prts-particle-detail] > div{display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 5px; margin-top: 8px}html[data-dsh-prts] [data-prts-particle-detail] button[role=\"radio\"]{min-width: 0; display: grid; gap: 5px}html[data-dsh-prts] [data-prts-particle-detail-preview]{height: 32px; display: grid; grid-template-columns: repeat(6,1fr); place-items: center; overflow: hidden; border: 1px solid color-mix(in srgb,currentColor 44%,transparent)}html[data-dsh-prts] [data-prts-particle-detail-preview] b{width: 2px; height: 2px; background: currentColor}html[data-dsh-prts] [data-prts-particle-traversal]{margin-top: 9px; padding-top: 9px; border-top: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-particle-traversal] > span{display: grid; gap: 3px}html[data-dsh-prts] [data-prts-particle-traversal] > span strong{font-size: 9px}html[data-dsh-prts] [data-prts-particle-traversal] > span small{color: var(--prts-muted); font: 600 8px/1.35 var(--prts-mono)}html[data-dsh-prts] [data-prts-particle-traversal-output]{min-width: 132px; color: var(--prts-cyan); font: 800 8px/1.2 var(--prts-mono); text-align: right}html[data-dsh-prts] [data-prts-particle-error]{margin: 8px 0 0; color: var(--prts-yellow); font: 700 8px/1.4 var(--prts-mono)}html[data-dsh-prts] [data-prts-scale-calibration]{--prts-calibration-distance: 96px; margin: 8px 0 0; padding: 8px; overflow: hidden; border: 1px solid var(--prts-line); background: color-mix(in srgb,var(--prts-panel-raised) 84%,transparent)}html[data-dsh-prts] [data-prts-scale-calibration-viewport]{position: relative; width: 100%; height: 94px; overflow: hidden}html[data-dsh-prts] [data-prts-scale-calibration-canvas]{position: absolute; top: 0; left: 0; width: 360px; height: 94px; transform-origin: top left}html[data-dsh-prts] [data-prts-scale-calibration-sidebar]{position: absolute; inset: 8px auto 8px 0; width: 4px; background: var(--prts-line-strong); box-shadow: 8px 0 0 color-mix(in srgb,var(--prts-line) 45%,transparent)}html[data-dsh-prts] [data-prts-scale-calibration-measure]{position: absolute; top: 6px; left: 0; width: var(--prts-calibration-distance); height: 18px; border-top: 1px solid var(--prts-cyan); color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-scale-calibration-measure]::before,html[data-dsh-prts] [data-prts-scale-calibration-measure]::after{content: \"\"; position: absolute; top: -4px; width: 1px; height: 7px; background: currentColor}html[data-dsh-prts] [data-prts-scale-calibration-measure]::before{left: 0}html[data-dsh-prts] [data-prts-scale-calibration-measure]::after{right: 0}html[data-dsh-prts] [data-prts-scale-calibration-value]{position: absolute; top: 4px; right: 3px; padding-left: 4px; background: var(--prts-panel-raised); color: currentColor; font: 800 8px/1 var(--prts-mono)}html[data-dsh-prts] [data-prts-scale-calibration-rail]{position: absolute; top: 29px; left: var(--prts-calibration-distance); width: 32px; height: 58px; border: 1px solid var(--prts-line-strong); background: color-mix(in srgb,var(--prts-canvas) 62%,transparent)}html[data-dsh-prts] [data-prts-scale-calibration-rail] i{position: absolute; top: calc(5px + var(--prts-calibration-tick) * 6px); left: 2px; width: 9px; height: 1px; background: var(--prts-muted)}html[data-dsh-prts] [data-prts-scale-calibration-rail] i:nth-child(4n + 1){width: 24px}html[data-dsh-prts] [data-prts-scale-calibration-rail] i:nth-child(4n + 2){width: 18px}html[data-dsh-prts] [data-prts-scale-calibration-rail] i:last-child{width: 24px; background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-scale-calibration-gap]{position: absolute; top: 29px; left: calc(var(--prts-calibration-distance) + 32px); width: 12px; height: 58px; background: repeating-linear-gradient(135deg,transparent 0 3px,color-mix(in srgb,var(--prts-line) 42%,transparent) 3px 4px)}html[data-dsh-prts] [data-prts-scale-calibration-content]{position: absolute; inset: 29px 0 7px calc(var(--prts-calibration-distance) + 44px); min-width: 16px; overflow: hidden; border-left: 1px solid var(--prts-cyan); background: color-mix(in srgb,var(--prts-panel) 84%,transparent)}html[data-dsh-prts] [data-prts-scale-calibration-content] i{display: block; width: min(78%,138px); height: 1px; margin: 18px 10px 9px; background: var(--prts-line-strong); box-shadow: 0 8px 0 var(--prts-line)}html[data-dsh-prts] [data-prts-scale-calibration-content] small{margin-left: 10px; color: var(--prts-dim); font: 700 7px/1 var(--prts-mono); white-space: nowrap}html[data-dsh-prts] [data-prts-scale-calibration-meta]{min-height: 20px; display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 4px; padding-top: 7px; border-top: 1px solid var(--prts-line); font: 700 8px/1.3 var(--prts-mono)}html[data-dsh-prts] [data-prts-scale-calibration-status]{margin-left: auto; color: var(--prts-muted); text-align: right}html[data-dsh-prts] [data-prts-scale-calibration][data-prts-calibration-mode=\"configured\"] [data-prts-scale-calibration-status],html[data-dsh-prts] [data-prts-scale-calibration][data-prts-calibration-mode=\"simulated\"] [data-prts-scale-calibration-status]{color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-scale-calibration][data-prts-calibration-mode=\"centered\"] [data-prts-scale-calibration-status],html[data-dsh-prts] [data-prts-scale-calibration-scale]{color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-setting-range-row]{display: grid; gap: 7px; padding: 8px 0 0; border: 0}html[data-dsh-prts] [data-prts-setting-range-row] > div{display: flex; align-items: center; gap: 8px}html[data-dsh-prts] [data-prts-setting-range-row] input[type=\"range\"]{min-width: 0; flex: 1}html[data-dsh-prts] [data-prts-setting-range]{accent-color: var(--prts-cyan)}html[data-dsh-prts] :is([data-prts-scale-distance-output],[data-prts-scale-focus-output]){min-width: 42px; color: var(--prts-cyan); font: 800 8px/1 var(--prts-mono); text-align: right}html[data-dsh-prts] [data-prts-scale-focus-preview]{width: 34px; min-width: 34px; height: 30px; display: grid; align-content: center; gap: 4px}html[data-dsh-prts] [data-prts-scale-focus-preview] i{display: block; height: 1px; max-width: 30px; background: var(--prts-yellow); transition: width 100ms ease}html[data-dsh-prts] [data-prts-settings-actions]{min-height: 58px; display: block; padding: 0; border-bottom: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-persistence-error],html[data-dsh-prts] [data-prts-reset-zone]{min-height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 11px}html[data-dsh-prts] [data-prts-persistence-error]{border-bottom: 1px solid var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 7%,transparent)}html[data-dsh-prts] [data-prts-persistence-error] > span,html[data-dsh-prts] [data-prts-reset-zone] > span{display: grid; gap: 4px}html[data-dsh-prts] [data-prts-persistence-error] strong{color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-reset-visual],html[data-dsh-prts] [data-prts-reset-confirm-action]{color: var(--prts-yellow); box-shadow: inset 0 0 0 1px var(--prts-yellow)}html[data-dsh-prts] [data-prts-reset-confirm]{display: flex; align-items: center; justify-content: flex-end; gap: 5px; color: var(--prts-yellow); font: 700 8px/1.3 var(--prts-mono)}html[data-dsh-prts] [hidden]{display: none !important}html[data-dsh-prts] :is( [data-prts-theme-settings-header] small,[data-prts-theme-settings] section > header small,[data-prts-theme-settings] summary small,[data-prts-settings-actions] small,[data-prts-settings-summary] span,[data-prts-advanced-summary],[data-prts-preset-card] span,[data-prts-setting-note],[data-prts-settings-advanced-content] section > header span,[data-prts-particle-error],[data-prts-scale-calibration-value],[data-prts-scale-calibration-content] small,[data-prts-scale-calibration-meta],[data-prts-scale-distance-output],[data-prts-reset-confirm] ){font-size: var(--prts-settings-small); line-height: 1.4}html[data-dsh-prts] :is( [data-prts-settings-presets] > header strong,[data-prts-settings-common] > header strong,[data-prts-settings-advanced] summary strong,[data-prts-preset-card] strong,[data-prts-settings-common] [data-prts-setting-row] > span > strong,[data-prts-settings-advanced-content] section > header strong,[data-prts-theme-settings] button[data-prts-setting-key],[data-prts-retry-save],[data-prts-reset-visual],[data-prts-reset-confirm-action],[data-prts-reset-cancel] ){font-size: var(--prts-settings-text); line-height: 1.25}html[data-dsh-prts] [data-prts-theme-settings-header] strong{font-size: 1.375rem; line-height: 1.1}html[data-dsh-prts] [data-prts-settings-summary] span{min-height: 28px; padding: 6px 9px}html[data-dsh-prts] [data-prts-preset-card]{min-height: 84px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{min-height: 72px; grid-template-columns: minmax(7.5rem,auto) minmax(0,1fr)}html[data-dsh-prts] :is( [data-prts-theme-settings] button[data-prts-setting-key],[data-prts-retry-save],[data-prts-reset-visual],[data-prts-reset-confirm-action],[data-prts-reset-cancel] ){min-height: 40px; padding: 8px 10px}@container prts-settings (max-width: 52rem){html[data-dsh-prts] [data-prts-settings-common-grid],html[data-dsh-prts] [data-prts-settings-advanced-content]{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{border-right: 0}html[data-dsh-prts] [data-prts-settings-advanced-content] > section + section{border-left: 0; border-top: 1px solid var(--prts-line)}}@media (max-height: 820px) and (min-width: 721px){html[data-dsh-prts] [data-prts-theme-settings-header]{min-height: 60px; padding-block: 10px}html[data-dsh-prts] [data-prts-theme-settings-close]{top: 10px}}@media (max-width: 720px){html[data-dsh-prts] [data-prts-theme-settings]{inset: 0; width: 100vw; height: 100dvh; max-height: none; margin: 0; transform: translateY(10px)}html[data-dsh-prts] [data-prts-theme-settings][data-prts-settings-visible]{transform: translateY(0)}html[data-dsh-prts] [data-prts-settings-frame]{height: 100%; max-height: none; clip-path: none; border: 0}html[data-dsh-prts] [data-prts-settings-frame]::before{right: 0}html[data-dsh-prts] [data-prts-theme-settings-header]{grid-template-columns: minmax(0,1fr); padding: 12px 48px 11px 13px}html[data-dsh-prts] [data-prts-settings-summary]{display: none}html[data-dsh-prts] [data-prts-theme-settings-scroll]{padding: 8px; scrollbar-gutter: auto}html[data-dsh-prts] [data-prts-settings-presets] > div{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-preset-card]{min-height: 54px; border-right: 0 !important; border-bottom: 1px solid var(--prts-line) !important}html[data-dsh-prts] [data-prts-preset-card]:last-child{border-bottom: 0 !important}html[data-dsh-prts] [data-prts-settings-common-grid]{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{min-height: 62px}html[data-dsh-prts] [data-prts-settings-common] button[data-prts-setting-key]{min-height: 40px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{border-right: 0; border-bottom: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:nth-last-child(2){border-bottom: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:last-child{border-bottom: 0}html[data-dsh-prts] [data-prts-settings-advanced-content]{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-settings-advanced-content] > section + section{border-left: 0; border-top: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-reset-zone]{align-items: flex-start; flex-direction: column}html[data-dsh-prts] [data-prts-reset-confirm]{width: 100%; flex-wrap: wrap; justify-content: flex-start}}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key][data-prts-setting-feedback]::after{animation: prts-setting-feedback 300ms ease-out both}}@keyframes prts-setting-feedback{0%{opacity: .82}100%{opacity: 0}}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] [data-prts-theme-settings]{transition-duration: 1ms}}@media (prefers-reduced-transparency: reduce){html[data-dsh-prts] [data-prts-theme-settings]::backdrop,html[data-dsh-prts] [data-prts-settings-backdrop]{background: color-mix(in srgb,var(--prts-canvas) 94%,transparent); backdrop-filter: none; -webkit-backdrop-filter: none}}html[data-dsh-prts] [data-prts-facility-defs]{position: absolute; width: 0; height: 0; overflow: hidden; pointer-events: none}html[data-dsh-prts] [data-prts-facility-svg]{position: absolute; z-index: -1; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none}html[data-dsh-prts] [data-prts-facility-layer=\"surface\"]{fill: var(--prts-facility-surface,var(--prts-panel-raised))}html[data-dsh-prts] [data-prts-facility-layer=\"texture\"]{fill: none; opacity: 0; pointer-events: none; transition: opacity 160ms ease}html[data-dsh-prts] [data-prts-facility-layer=\"outline\"]{fill: none; stroke: var(--prts-facility-outline,var(--prts-line-strong)); stroke-width: 1; stroke-linejoin: miter; stroke-miterlimit: 2; vector-effect: non-scaling-stroke; shape-rendering: geometricPrecision; pointer-events: none}html[data-dsh-prts] [data-prts-facility-vector][data-prts-facility-texture=\"grid\"] [data-prts-facility-layer=\"texture\"]{fill: var(--prts-facility-texture-color,var(--prts-cyan)); opacity: var(--prts-facility-texture-opacity,.12); mask: url(\"#prts-facility-grid-mask\")}html[data-dsh-prts] [data-prts-facility-vector][data-prts-facility-texture=\"scanline\"] [data-prts-facility-layer=\"texture\"]{fill: var(--prts-facility-texture-color,var(--prts-cyan)); opacity: var(--prts-facility-texture-opacity,.1); mask: url(\"#prts-facility-scanline-mask\")}html[data-dsh-prts] [data-prts-workspace-row]{--prts-facility-texture-color: var(--prts-cyan); --prts-silhouette-fill: #f3f6f7; --prts-silhouette-far-opacity: .06; --prts-silhouette-near-opacity: .12}html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-workspace-row]{--prts-silhouette-fill: #3f4d56; --prts-silhouette-far-opacity: .13; --prts-silhouette-near-opacity: .26}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"],html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]){--prts-silhouette-far-opacity: .24; --prts-silhouette-near-opacity: .52}html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-workspace-row][aria-expanded=\"true\"],html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]){--prts-silhouette-far-opacity: .25; --prts-silhouette-near-opacity: .5}html[data-dsh-prts] [data-prts-facility-texture=\"silhouette\"] [data-prts-facility-layer=\"texture\"]{opacity: 0}html[data-dsh-prts] [data-prts-facility-silhouette]{fill: var(--prts-silhouette-fill); opacity: 0; pointer-events: none}html[data-dsh-prts] [data-prts-facility-texture=\"silhouette\"] [data-prts-facility-silhouette]{opacity: 1}html[data-dsh-prts] [data-prts-silhouette-layer]{transform-box: fill-box; transform-origin: left center; animation-timing-function: linear; animation-iteration-count: infinite; animation-play-state: paused; will-change: transform; transition: opacity 180ms ease}html[data-dsh-prts] [data-prts-silhouette-layer=\"far\"]{opacity: var(--prts-silhouette-far-opacity); animation-name: prts-silhouette-far-drift; animation-duration: 22.4s}html[data-dsh-prts] [data-prts-silhouette-layer=\"near\"]{opacity: var(--prts-silhouette-near-opacity); animation-name: prts-silhouette-near-drift; animation-duration: 6.4s}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts]:not([data-prts-motion=\"reduced\"]) [data-prts-workspace-row]:hover [data-prts-silhouette-layer]{animation-play-state: running}}@keyframes prts-silhouette-far-drift{to{transform: translate3d(-512px,0,0)}}@keyframes prts-silhouette-near-drift{to{transform: translate3d(-512px,0,0)}}html[data-dsh-prts] [data-prts-facility-texture=\"pickup\"] [data-prts-facility-layer=\"texture\"]{opacity: 0}html[data-dsh-prts] [data-prts-session-pickup]{color: var(--prts-session-pickup-fill); fill: currentColor; opacity: 0; transform: translate3d(5px,0,0); transform-box: view-box; transform-origin: center; transition: opacity 150ms ease,transform 240ms cubic-bezier(.22,1,.36,1); pointer-events: none}html[data-dsh-prts] [data-prts-session-row]:hover [data-prts-facility-texture=\"pickup\"] [data-prts-session-pickup]{opacity: .58; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-session-pickup-baseline]{fill: none; stroke: currentColor; stroke-width: 1; opacity: .2; vector-effect: non-scaling-stroke}html[data-dsh-prts] [data-prts-session-pickup-indicator]{fill: var(--prts-yellow)}html[data-dsh-prts] [data-prts-session-pickup-bar]{transform-box: fill-box; transform-origin: center}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(1){--prts-pickup-duration: 520ms; --prts-pickup-delay: -.12s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(2){--prts-pickup-duration: 1180ms; --prts-pickup-delay: -.28s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(3){--prts-pickup-duration: 760ms; --prts-pickup-delay: -.44s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(4){--prts-pickup-duration: 1420ms; --prts-pickup-delay: -.18s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(5){--prts-pickup-duration: 640ms; --prts-pickup-delay: -.36s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(6){--prts-pickup-duration: 980ms; --prts-pickup-delay: -.52s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(7){--prts-pickup-duration: 480ms; --prts-pickup-delay: -.22s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(8){--prts-pickup-duration: 1260ms; --prts-pickup-delay: -.46s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(9){--prts-pickup-duration: 720ms; --prts-pickup-delay: -.14s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(10){--prts-pickup-duration: 1520ms; --prts-pickup-delay: -.4s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(11){--prts-pickup-duration: 560ms; --prts-pickup-delay: -.3s}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts]:not([data-prts-motion=\"reduced\"]) [data-prts-session-row]:hover [data-prts-session-pickup-indicator]{animation: prts-session-record-indicator 1.1s ease-in-out infinite}html[data-dsh-prts]:not([data-prts-motion=\"reduced\"]) [data-prts-session-row]:hover [data-prts-session-pickup-bar]{animation: prts-session-pickup-sample var(--prts-pickup-duration) ease-in-out var(--prts-pickup-delay) infinite}}@keyframes prts-session-record-indicator{0%,100%{opacity: .45}50%{opacity: 1}}@keyframes prts-session-pickup-sample{0%,100%{transform: scaleY(.28)}34%{transform: scaleY(1.08)}57%{transform: scaleY(.46)}78%{transform: scaleY(.86)}}html[data-dsh-prts] [data-prts-session-row]{--prts-facility-texture-color: var(--prts-muted); --prts-session-pickup-fill: #f3f6f7}html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-session-row]{--prts-session-pickup-fill: #3f4d56}html[data-dsh-prts] [data-prts-session-row][aria-selected=\"true\"]{--prts-facility-texture-color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-workspace-row] > [data-prts-facility-spine],html[data-dsh-prts] [data-prts-session-row] > [data-prts-facility-spine]{--prts-facility-surface: var(--prts-line-strong); position: absolute !important; z-index: 2 !important; inset: 0 auto 0 0; height: 100% !important; isolation: isolate; width: var(--prts-spine-width); min-width: 0; transform: scaleX(var(--prts-spine-rest)) !important; transform-origin: left center; transition: transform 220ms var(--prts-ease-spring); pointer-events: none}html[data-dsh-prts] [data-prts-workspace-row] > [data-prts-facility-spine]{--prts-facility-surface: var(--prts-cyan)}html[data-dsh-prts] [data-prts-session-row][aria-selected=\"true\"] > [data-prts-facility-spine]{--prts-facility-surface: var(--prts-yellow)}html[data-dsh-prts] [data-prts-facility-spine] [data-prts-facility-layer=\"outline\"]{display: none}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"] > [data-prts-facility-spine],html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) > [data-prts-facility-spine],html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) > [data-prts-facility-spine]{transform: scaleX(1) !important}html[data-dsh-prts] [data-prts-workspace-row][data-prts-spine-vector]::before,html[data-dsh-prts] [data-prts-session-row][data-prts-spine-vector]::before{content: none !important; display: none !important}html[data-dsh-prts] [data-prts-facility-face][data-prts-facility-vector]{border: 0 !important; background: transparent !important; clip-path: none !important}html[data-dsh-prts] [data-prts-facility-face][data-prts-facility-vector]::after{content: none !important; display: none !important}html[data-dsh-prts] :is( [data-prts-workspace-actions],[data-prts-session-actions] ) button[data-prts-facility-vector]{--prts-facility-outline: var(--prts-line); --prts-facility-surface: var(--prts-panel-raised); overflow: visible; border: 0 !important; background: transparent !important; clip-path: none !important}html[data-dsh-prts] :is( [data-prts-workspace-actions],[data-prts-session-actions] ) button[data-prts-facility-vector]::before{content: none !important; display: none !important}html[data-dsh-prts] :is( [data-prts-workspace-actions],[data-prts-session-actions] ) button[data-prts-facility-vector]:is(:hover,:focus-visible){--prts-facility-outline: var(--prts-yellow); background: transparent !important}html[data-dsh-prts] [data-message-role]::before,html[data-dsh-prts] [data-chat-flow-kind]::before{content: none !important; display: none !important}html[data-dsh-prts] [data-conversation-scroll]:not([data-prts-hero-active])[data-prts-conversation-scale-ready]::before,html[data-dsh-prts] [data-conversation-scroll]:not([data-prts-hero-active])[data-prts-conversation-scale-empty]::before{content: none !important; display: none !important}html[data-dsh-prts] [data-prts-conversation-scale]{position: absolute; z-index: 8; width: 32px; min-height: 84px; margin: 0; padding: 0; overflow: hidden; opacity: .54; visibility: visible; transition: opacity 100ms ease,filter 150ms ease,visibility 0s linear; pointer-events: auto; touch-action: none; cursor: pointer; isolation: isolate}html[data-dsh-prts] [data-prts-conversation-scale][data-prts-resizing]{opacity: .38; filter: none; transition: none}html[data-dsh-prts] [data-prts-conversation-scale][data-prts-resizing] :is( [data-prts-conversation-scale-accent],[data-prts-conversation-scale-history] ){filter: none; transition: none}html[data-dsh-prts] [data-prts-conversation-scale]:is( [data-prts-conversation-scale-obstructed],[data-prts-conversation-scale-space-obstructed] ){opacity: 0; visibility: hidden; transition-delay: 0s,0s,100ms; pointer-events: none}html[data-dsh-prts] [data-prts-conversation-scale][data-prts-conversation-scale-blocked]{opacity: 0; visibility: hidden; transition: none; pointer-events: none}html[data-dsh-prts] [data-prts-conversation-scale]:focus{outline: none}html[data-dsh-prts] [data-prts-conversation-scale]:focus-visible{filter: drop-shadow(0 0 7px color-mix(in srgb,var(--prts-cyan) 34%,transparent))}html[data-dsh-prts] [data-prts-conversation-scale-svg]{position: absolute; inset: 0; display: block; width: 100%; height: 100%; overflow: hidden; shape-rendering: geometricPrecision}html[data-dsh-prts] [data-prts-conversation-scale-marks]{pointer-events: none}html[data-dsh-prts] :is( [data-prts-conversation-scale-gray],[data-prts-conversation-scale-accent],[data-prts-conversation-scale-history] ){fill: none; stroke-width: 1; stroke-linecap: square; vector-effect: non-scaling-stroke; pointer-events: none}html[data-dsh-prts] [data-prts-conversation-scale-gray]{stroke: color-mix(in srgb,var(--prts-muted) 76%,var(--prts-line-strong))}html[data-dsh-prts] [data-prts-conversation-scale-accent]{stroke: var(--prts-yellow); filter: drop-shadow(0 0 4px color-mix(in srgb,var(--prts-yellow) 42%,transparent))}html[data-dsh-prts] [data-prts-conversation-scale-history]{stroke: var(--prts-cyan); stroke-width: 1.5; filter: drop-shadow(0 0 4px color-mix(in srgb,var(--prts-cyan) 38%,transparent))}html[data-dsh-prts] [data-prts-conversation-scale-history]{transition: stroke-width 100ms ease,filter 120ms ease}html[data-dsh-prts] [data-prts-conversation-scale][data-prts-conversation-history-selected] [data-prts-conversation-scale-history]{stroke-width: 2.5; filter: drop-shadow(0 0 3px color-mix(in srgb,var(--prts-cyan) 78%,transparent)) drop-shadow(0 0 8px color-mix(in srgb,var(--prts-cyan) 48%,transparent))}html[data-dsh-prts] [data-prts-conversation-history-hint],html[data-dsh-prts] [data-prts-conversation-history-hint] *{box-sizing: border-box}html[data-dsh-prts] [data-prts-conversation-history-hint]{position: absolute; z-index: 13; height: 8px; transform: translateY(-50%); pointer-events: auto}html[data-dsh-prts] [data-prts-conversation-history-hint][hidden],html[data-dsh-prts] [data-prts-conversation-history-tooltip][hidden]{display: none}html[data-dsh-prts] [data-prts-conversation-history-trigger]{width: 30px; min-width: 30px; height: 8px; min-height: 8px; max-height: 8px; padding: 0; display: block; border: 0; border-radius: 0; opacity: 0; background: transparent; cursor: pointer}html[data-dsh-prts] [data-prts-conversation-history-tooltip]{position: absolute; top: var(--prts-history-tooltip-top,50%); left: calc(100% + 10px); width: 360px; height: 128px; margin: 0; padding: 1px; overflow: visible; border: 0; background: var(--prts-line-strong); color: var(--prts-ink); clip-path: polygon( 3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px ); opacity: .98; transform: translate3d(0,0,0); pointer-events: none; isolation: isolate; animation: prts-conversation-history-tooltip-in 120ms var(--prts-ease-snap)}html[data-dsh-prts] [data-prts-conversation-history-tooltip]::before{content: \"\"; position: absolute; z-index: 0; inset: 1px; background: var(--prts-active-glass); clip-path: polygon( 2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px ); backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter)}html[data-dsh-prts] [data-prts-conversation-history-tooltip] [data-prts-conversation-preview-row=\"question\"] b{color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-conversation-history-tooltip-label]{overflow: hidden; color: var(--prts-ink); text-overflow: ellipsis; white-space: nowrap}html[data-dsh-prts] [data-prts-conversation-history-tooltip-content]{min-width: 0; display: grid; gap: 3px}html[data-dsh-prts] [data-prts-conversation-history-tooltip-content] strong{color: var(--prts-ink); font-size: 15px; font-weight: 750}html[data-dsh-prts] [data-prts-conversation-history-tooltip-content] span{overflow: hidden; color: var(--prts-muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap}html[data-dsh-prts] [data-prts-conversation-history-tooltip-connector]{position: absolute; z-index: 2; top: var(--prts-history-tooltip-anchor-y,50%); right: 100%; width: 14px; height: 1px; background: linear-gradient(90deg,var(--prts-cyan),var(--prts-line-strong)); transform: translateY(-.5px); pointer-events: none}html[data-dsh-prts] [data-prts-conversation-history-tooltip-connector]::before{content: \"\"; position: absolute; top: -1px; left: 0; width: 3px; height: 3px; background: var(--prts-cyan)}@keyframes prts-conversation-history-tooltip-in{from{opacity: 0; transform: translate3d(-4px,0,0)}to{opacity: .98; transform: translate3d(0,0,0)}}html[data-dsh-prts] [data-prts-conversation-scale-hit]{pointer-events: all}html[data-dsh-prts] [data-prts-conversation-history-status],html[data-dsh-prts] [data-prts-conversation-history-status] *{box-sizing: border-box}html[data-dsh-prts] [data-prts-conversation-history-status]{position: absolute; z-index: 13; min-height: 34px; max-width: min(320px,calc(100% - 72px)); display: flex; align-items: center; gap: 10px; padding: 5px 6px 5px 10px; border: 1px solid var(--prts-line-strong); background: var(--prts-active-glass); color: var(--prts-ink); box-shadow: 0 8px 22px color-mix(in srgb,var(--prts-canvas) 22%,transparent); clip-path: polygon(3px 0,100% 0,100% calc(100% - 3px),calc(100% - 3px) 100%,0 100%,0 3px); font: 700 12px/1.35 var(--prts-mono); backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter)}html[data-dsh-prts] [data-prts-conversation-history-status][hidden]{display: none}html[data-dsh-prts] [data-prts-conversation-history-text]{min-width: 0}html[data-dsh-prts] [data-prts-conversation-history-action]{min-width: 44px; min-height: 24px; padding: 3px 8px; border: 1px solid var(--prts-cyan); border-radius: 0; background: transparent; color: var(--prts-cyan); font: inherit; cursor: pointer}html[data-dsh-prts] [data-prts-conversation-history-status][data-prts-history-phase=\"error\"]{border-color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-conversation-history-status][data-prts-history-phase=\"loading\"]{color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-conversation-preview]{--prts-preview-anchor-y: 46px; position: absolute; z-index: 12; width: 360px; max-width: calc(100% - 64px); height: 128px; margin: 0; padding: 1px; overflow: visible; border: 0; background: var(--prts-line-strong); color: var(--prts-ink); clip-path: polygon( 3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px ); opacity: 0; visibility: hidden; transform: translate3d(-4px,0,0); transition: opacity 100ms ease,transform 120ms var(--prts-ease-snap),visibility 0s linear 120ms; pointer-events: none; isolation: isolate}html[data-dsh-prts] [data-prts-conversation-preview]::before{content: \"\"; position: absolute; z-index: 0; inset: 1px; background: var(--prts-active-glass); clip-path: polygon( 2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px ); backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter)}html[data-dsh-prts] [data-prts-conversation-preview][data-prts-conversation-preview-visible]{opacity: .98; visibility: visible; transform: translate3d(0,0,0); transition-delay: 0s}html[data-dsh-prts] [data-prts-conversation-preview-connector]{position: absolute; z-index: 2; top: var(--prts-preview-anchor-y); right: 100%; width: 14px; height: 1px; background: linear-gradient(90deg,var(--prts-yellow),var(--prts-line-strong)); transform: translateY(-.5px); pointer-events: none}html[data-dsh-prts] [data-prts-conversation-preview-connector]::before{content: \"\"; position: absolute; top: -1px; left: 0; width: 3px; height: 3px; background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-conversation-preview-body]{position: relative; z-index: 1; height: 100%; display: grid; grid-template-rows: 32px minmax(0,1fr); padding: 10px 14px 12px; font-family: var(--prts-mono)}html[data-dsh-prts] [data-prts-conversation-preview-row]{min-width: 0; display: grid; grid-template-columns: 24px minmax(0,1fr); column-gap: 8px; align-items: start; font-size: 15px; line-height: 1.45}html[data-dsh-prts] [data-prts-conversation-preview-row] b{font-size: 14px; font-weight: 750; line-height: 1.55; letter-spacing: .08em}html[data-dsh-prts] [data-prts-conversation-preview-row=\"question\"]{border-bottom: 1px solid color-mix(in srgb,var(--prts-line) 72%,transparent); color: var(--prts-ink)}html[data-dsh-prts] [data-prts-conversation-preview-row=\"question\"] b{color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-conversation-preview-row=\"answer\"]{padding-top: 6px; color: var(--prts-muted)}html[data-dsh-prts] [data-prts-conversation-preview-row=\"answer\"] b{color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-conversation-preview-question]{display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap}html[data-dsh-prts] [data-prts-conversation-preview-answer]{display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3}html[data-dsh-prts] [data-prts-conversation-preview][data-prts-preview-state=\"streaming\"] [data-prts-conversation-preview-answer]{color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-conversation-scale][data-prts-conversation-scale-empty]{display: none}@media (max-width: 640px){html[data-dsh-prts] :is( [data-prts-conversation-scale],[data-prts-conversation-preview],[data-prts-conversation-history-hint],[data-prts-conversation-history-status] ){display: none !important}}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] [data-prts-conversation-scale],html[data-dsh-prts] [data-prts-conversation-preview],html[data-dsh-prts] [data-prts-conversation-history-hint],html[data-dsh-prts] [data-prts-conversation-history-tooltip],html[data-dsh-prts] :is( [data-prts-conversation-scale-gray],[data-prts-conversation-scale-accent],[data-prts-conversation-scale-history] ){animation: none !important; transition: none !important}}html[data-dsh-prts] [data-prts-startup]{--prts-startup-bg: #07090b; --prts-startup-ink: #e8edef; --prts-startup-muted: #7d898f; --prts-startup-line: #394349; --prts-startup-accent: #f0c800; --prts-startup-progress: 0; position: fixed; z-index: 2147480000; inset: 0; width: 100vw; max-width: none; height: 100dvh; max-height: none; min-height: 100dvh; margin: 0; padding: 0; border: 0; overflow: hidden; isolation: isolate; box-sizing: border-box; background: transparent; color: var(--prts-startup-ink); font-family: var(--prts-body,sans-serif); opacity: 0; outline: 0; pointer-events: auto; transition: opacity 120ms ease}html[data-dsh-prts] [data-prts-startup]::before,html[data-dsh-prts] [data-prts-startup]::after{content: \"\"; position: absolute; z-index: -3; top: 0; bottom: 0; width: calc(50% + 2px); background: var(--prts-startup-bg); transition: transform 350ms cubic-bezier(.76,0,.24,1)}html[data-dsh-prts] [data-prts-startup]::before{left: 0}html[data-dsh-prts] [data-prts-startup]::after{right: 0}html[data-dsh-prts] [data-prts-startup][data-visible]{opacity: 1}html[data-dsh-prts] [data-prts-startup][data-exiting]::before{transform: translate3d(-101%,0,0)}html[data-dsh-prts] [data-prts-startup][data-exiting]::after{transform: translate3d(101%,0,0)}html[data-dsh-prts] [data-prts-startup-grid]{position: absolute; z-index: -2; inset: 0; opacity: 0; background: linear-gradient(90deg,transparent calc(50% - .5px),rgba(232,237,239,.17) 50%,transparent calc(50% + .5px)),linear-gradient(0deg,transparent calc(50% - .5px),rgba(232,237,239,.09) 50%,transparent calc(50% + .5px)),repeating-linear-gradient(90deg,rgba(232,237,239,.045) 0 1px,transparent 1px 80px),repeating-linear-gradient(0deg,rgba(232,237,239,.035) 0 1px,transparent 1px 80px); transform: scale3d(1.04,1.04,1); transition: opacity 220ms linear,transform 520ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-grid]{opacity: 1; transform: scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup-scan]{position: absolute; z-index: 4; top: -18%; right: 0; left: 0; height: 18%; opacity: 0; background: linear-gradient(180deg,transparent,rgba(240,200,0,.035) 68%,rgba(240,200,0,.24)); border-bottom: 1px solid rgba(240,200,0,.62); pointer-events: none}html[data-dsh-prts] [data-prts-startup][data-visible]:not([data-reduced-motion]) [data-prts-startup-scan]{opacity: 1; animation: prts-startup-scan 1100ms linear 120ms 2 both}html[data-dsh-prts] [data-prts-startup-cut]{position: absolute; z-index: 6; top: -15%; width: 8px; height: 130%; opacity: 0; background: var(--prts-startup-accent); transform: skewX(-13deg) translate3d(0,0,0); pointer-events: none}html[data-dsh-prts] [data-prts-startup-cut=\"left\"]{left: calc(50% - 4px)}html[data-dsh-prts] [data-prts-startup-cut=\"right\"]{right: calc(50% - 4px)}html[data-dsh-prts] [data-prts-startup][data-exiting] [data-prts-startup-cut=\"left\"]{animation: prts-startup-cut-left 350ms cubic-bezier(.76,0,.24,1) both}html[data-dsh-prts] [data-prts-startup][data-exiting] [data-prts-startup-cut=\"right\"]{animation: prts-startup-cut-right 350ms cubic-bezier(.76,0,.24,1) both}html[data-dsh-prts] [data-prts-startup-header]{position: absolute; z-index: 2; top: clamp(22px,4.5dvh,52px); right: clamp(22px,4vw,68px); left: clamp(22px,4vw,68px); display: flex; align-items: baseline; justify-content: space-between; gap: 24px; padding-bottom: 10px; border-bottom: 1px solid var(--prts-startup-line); opacity: 0; transform: translate3d(0,-9px,0); transition: opacity 180ms linear 60ms,transform 320ms cubic-bezier(.16,1,.3,1) 60ms}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-header]{opacity: 1; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-startup-header] span{font: 800 clamp(10px,1vw,13px)/1 var(--prts-display,sans-serif); letter-spacing: .18em}html[data-dsh-prts] [data-prts-startup-header] small,html[data-dsh-prts] [data-prts-startup-telemetry],html[data-dsh-prts] [data-prts-startup-coordinate]{color: var(--prts-startup-muted); font: 700 8px/1.35 var(--prts-mono,monospace); letter-spacing: .12em}html[data-dsh-prts] [data-prts-startup-telemetry]{position: absolute; z-index: 2; top: 50%; left: clamp(22px,4vw,68px); display: grid; gap: 12px; padding-left: 12px; border-left: 2px solid var(--prts-startup-accent); opacity: 0; transform: translate3d(-9px,-50%,0); transition: opacity 200ms linear 100ms,transform 360ms cubic-bezier(.16,1,.3,1) 100ms}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-telemetry]{opacity: 1; transform: translate3d(0,-50%,0)}html[data-dsh-prts] [data-prts-startup-core]{position: absolute; z-index: 3; top: 49%; left: 50%; width: min(76vw,560px); display: grid; justify-items: center; gap: clamp(15px,2.4dvh,26px); transform: translate3d(-50%,-50%,0)}html[data-dsh-prts] [data-prts-startup-frame]{position: relative; width: clamp(220px,27vw,320px); aspect-ratio: 1; display: grid; place-items: center}html[data-dsh-prts] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup-frame-inner]{position: absolute; inset: 15%; border: 1px solid var(--prts-startup-line); opacity: 0; transform: rotate(45deg) scale3d(.72,.72,1); transition: opacity 160ms linear,transform 420ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup-frame-inner]{inset: 23%; border-color: rgba(240,200,0,.76); transform: rotate(-45deg) scale3d(.68,.68,1); transition-delay: 80ms}html[data-dsh-prts] [data-prts-startup-reticle]{position: absolute; inset: 7%; opacity: 0; background: linear-gradient(var(--prts-startup-accent),var(--prts-startup-accent)) 50% 0 / 1px 15% no-repeat,linear-gradient(var(--prts-startup-accent),var(--prts-startup-accent)) 50% 100% / 1px 15% no-repeat,linear-gradient(90deg,var(--prts-startup-accent),var(--prts-startup-accent)) 0 50% / 15% 1px no-repeat,linear-gradient(90deg,var(--prts-startup-accent),var(--prts-startup-accent)) 100% 50% / 15% 1px no-repeat; transform: scale3d(.8,.8,1); transition: opacity 160ms linear,transform 400ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup-emblem]{position: relative; z-index: 2; width: 180px; max-width: 62%; height: auto; display: block; opacity: 0; clip-path: inset(48% 0 48% 0); transform: scale3d(.96,.96,1); transition: opacity 160ms linear,clip-path 380ms cubic-bezier(.16,1,.3,1),transform 420ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"linking\"] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-stage=\"authenticating\"] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-frame-outer]{opacity: .92; transform: rotate(45deg) scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"authenticating\"] :is([data-prts-startup-frame-inner],[data-prts-startup-reticle]),html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] :is([data-prts-startup-frame-inner],[data-prts-startup-reticle]),html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] :is([data-prts-startup-frame-inner],[data-prts-startup-reticle]){opacity: 1; transform: rotate(-45deg) scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"authenticating\"] [data-prts-startup-reticle],html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] [data-prts-startup-reticle],html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-reticle]{transform: scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] [data-prts-startup-emblem],html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-emblem]{opacity: 1; clip-path: inset(0 0 0 0); transform: scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup-signature]{min-height: 44px; display: flex; align-items: center; gap: 10px; opacity: 0; transform: translate3d(0,8px,0); transition: opacity 180ms linear,transform 230ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup-signature] > span,html[data-dsh-prts] [data-prts-startup-signature] svg{width: 42px; height: 42px; display: block}html[data-dsh-prts] [data-prts-startup-signature] small{color: var(--prts-startup-muted); font: 800 8px/1.3 var(--prts-mono,monospace); letter-spacing: .1em}html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-signature]{opacity: 1; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-startup-state]{display: grid; justify-items: center; gap: 6px; text-align: center; opacity: 1; transform: translate3d(0,0,0); transition: opacity 90ms linear,transform 90ms cubic-bezier(.4,0,1,1)}html[data-dsh-prts] [data-prts-startup][data-copy-transition] [data-prts-startup-state]{opacity: 0; transform: translate3d(0,-4px,0)}html[data-dsh-prts] [data-prts-startup-state] strong{font: 900 clamp(18px,2.4vw,30px)/1 var(--prts-display,sans-serif); letter-spacing: .16em}html[data-dsh-prts] [data-prts-startup-state] span{color: var(--prts-startup-muted); font: 700 10px/1.2 var(--prts-mono,monospace); letter-spacing: .12em}html[data-dsh-prts] [data-prts-startup-progress]{position: absolute; z-index: 3; right: clamp(22px,7vw,120px); bottom: clamp(28px,6dvh,70px); left: clamp(22px,7vw,120px); display: grid; gap: 10px; opacity: 0; transform: translate3d(0,10px,0); transition: opacity 220ms linear 100ms,transform 480ms cubic-bezier(.16,1,.3,1) 100ms}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-progress]{opacity: 1; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-startup-progress] output{justify-self: start; color: var(--prts-startup-muted); font: 800 9px/1 var(--prts-mono,monospace); letter-spacing: .12em}html[data-dsh-prts] [data-prts-startup-percent]{color: var(--prts-startup-ink)}html[data-dsh-prts] [data-prts-startup-track]{position: relative; height: 18px; border-top: 1px solid var(--prts-startup-line)}html[data-dsh-prts] [data-prts-startup-fill]{position: absolute; top: -2px; right: 0; left: 0; height: 3px; background: var(--prts-startup-accent); transform: scaleX(var(--prts-startup-progress)); transform-origin: left center; will-change: transform}html[data-dsh-prts] [data-prts-startup-ticks]{position: absolute; inset: 4px 0 0; display: grid; grid-template-columns: repeat(21,minmax(0,1fr))}html[data-dsh-prts] [data-prts-startup-ticks] i{width: 1px; height: 4px; background: var(--prts-startup-line)}html[data-dsh-prts] [data-prts-startup-ticks] i[data-major]{height: 9px; background: var(--prts-startup-muted)}html[data-dsh-prts] [data-prts-startup-coordinate]{position: absolute; right: clamp(22px,4vw,68px); top: 50%; writing-mode: vertical-rl; transform: translateY(-50%)}html[data-dsh-prts] [data-prts-startup][data-exit-content] > :not([data-prts-startup-cut]){opacity: 0; transition: opacity 120ms linear}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-grid],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-header],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-telemetry],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-coordinate],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-state],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-inner],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-reticle],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-emblem],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-signature],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-progress]{opacity: 1; clip-path: none; transform: none; animation: none; transition: none}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-outer]{transform: rotate(45deg)}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-inner]{transform: rotate(-45deg)}html[data-dsh-prts] [data-prts-startup][data-reduced-motion]{transition: opacity 160ms ease}html[data-dsh-prts] [data-prts-startup][data-reduced-motion][data-exiting]{opacity: 0}html[data-dsh-prts] [data-prts-startup][data-reduced-motion][data-exiting] > :not([data-prts-startup-cut]){opacity: 1}html[data-dsh-prts] [data-prts-startup][data-reduced-motion]::before,html[data-dsh-prts] [data-prts-startup][data-reduced-motion]::after{transform: none; transition: none}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-cut]{display: none}@keyframes prts-startup-scan{from{transform: translate3d(0,0,0)}to{transform: translate3d(0,660%,0)}}@keyframes prts-startup-cut-left{0%{opacity: 0; transform: skewX(-13deg) translate3d(0,0,0)}18%{opacity: 1}100%{opacity: 0; transform: skewX(-13deg) translate3d(-50vw,0,0)}}@keyframes prts-startup-cut-right{0%{opacity: 0; transform: skewX(-13deg) translate3d(0,0,0)}18%{opacity: .72}100%{opacity: 0; transform: skewX(-13deg) translate3d(50vw,0,0)}}@media (max-width: 640px){html[data-dsh-prts] [data-prts-startup-header]{right: 18px; left: 18px}html[data-dsh-prts] [data-prts-startup-header] small,html[data-dsh-prts] [data-prts-startup-telemetry],html[data-dsh-prts] [data-prts-startup-coordinate]{display: none}html[data-dsh-prts] [data-prts-startup-core]{top: 47%; width: calc(100vw - 32px)}html[data-dsh-prts] [data-prts-startup-frame]{width: min(66vw,240px)}html[data-dsh-prts] [data-prts-startup-signature] > span,html[data-dsh-prts] [data-prts-startup-signature] svg{width: 34px; height: 34px}html[data-dsh-prts] [data-prts-startup-state] strong{max-width: 94vw; font-size: clamp(15px,5vw,22px); letter-spacing: .1em}html[data-dsh-prts] [data-prts-startup-progress]{right: 20px; bottom: max(28px,env(safe-area-inset-bottom)); left: 20px}}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] [data-prts-startup] *,html[data-dsh-prts] [data-prts-startup]::before,html[data-dsh-prts] [data-prts-startup]::after{animation: none !important}}";
6
+ const PRTS_VERSION = "0.1.96";
7
+ const PRTS_CSS = "html[data-dsh-prts]{--prts-canvas: #080a0c; --prts-canvas-elevated: #0d1114; --prts-rail: #060809; --prts-panel: #11161a; --prts-panel-raised: #171d21; --prts-panel-muted: #20272c; --prts-ink: #edf1f2; --prts-muted: #98a3a9; --prts-dim: #68747a; --prts-line: #38434a; --prts-line-strong: #5e6a70; --prts-yellow: #f0c800; --prts-yellow-ink: #161300; --prts-cyan: #5ccddb; --prts-red: #ee625a; --prts-green: #8fcf79; --dsw-alias-label-primary-inverted: #15191c; --prts-host-top-inset: 0px; --prts-rail-width: 52px; --prts-nav-width: 52px; --prts-sessions-width: 286px; --prts-sessions-compact: 54px; --prts-workspace-height: 38px; --prts-session-height: 36px; --prts-facility-gap: 7px; --prts-facility-height: var(--prts-workspace-height); --prts-spine-width: 8px; --prts-spine-rest: .25; --prts-spine-travel: 6px; --prts-chamfer: 3px; --prts-radius-control: 3px; --prts-radius-card: 3px; --prts-radius-overlay: 4px; --prts-body: 'Noto Sans SC','Microsoft YaHei UI','Segoe UI',sans-serif; --prts-display: 'Arial Narrow','Noto Sans SC',sans-serif; --prts-mono: 'Roboto Mono','Noto Sans Mono CJK SC',Consolas,monospace; --prts-ease-spring: cubic-bezier(.2,.86,.28,1.16); --prts-ease-snap: cubic-bezier(.22,1,.36,1); --prts-shadow-glass-overlay: 0 18px 48px rgba(0,0,0,.32),inset 0 1px rgba(255,255,255,.06); --prts-glass-border: rgba(119,140,150,.52); --prts-glass-soft-surface: rgba(15,21,25,.82); --prts-glass-standard-surface: rgba(15,21,25,.9); --prts-glass-clear-surface: rgba(15,21,25,.72); --prts-glass-dense: rgba(7,10,12,.94); --prts-active-glass: var(--prts-glass-standard-surface); --prts-active-glass-filter: blur(18px) saturate(145%); color-scheme: dark; accent-color: var(--prts-yellow)}html[data-dsh-prts][data-prts-scheme=\"dark\"]{color-scheme: dark}html[data-dsh-prts][data-prts-scheme=\"light\"]{--prts-canvas: #eef1f3; --prts-canvas-elevated: #e5eaed; --prts-rail: #111518; --prts-panel: #f7f9fa; --prts-panel-raised: #e5eaed; --prts-panel-muted: #d5dde1; --prts-ink: #15191c; --prts-muted: #4f5c63; --prts-dim: #738087; --prts-line: #9eabb1; --prts-line-strong: #65727a; --dsw-alias-label-primary-inverted: #edf1f2; --prts-glass-border: rgba(62,82,92,.48); --prts-glass-soft-surface: rgba(247,250,251,.9); --prts-glass-standard-surface: rgba(244,249,251,.94); --prts-glass-clear-surface: rgba(244,249,251,.78); --prts-glass-dense: rgba(249,251,252,.97); --prts-shadow-glass-overlay: 0 18px 44px rgba(48,63,70,.18),inset 0 1px rgba(255,255,255,.86); color-scheme: light}html[data-dsh-prts][data-prts-glass=\"soft\"]{--prts-active-glass: var(--prts-glass-soft-surface); --prts-active-glass-filter: blur(18px) saturate(145%)}html[data-dsh-prts][data-prts-glass=\"standard\"]{--prts-active-glass: var(--prts-glass-standard-surface); --prts-active-glass-filter: blur(22px) saturate(155%)}html[data-dsh-prts][data-prts-glass=\"clear\"]{--prts-active-glass: var(--prts-glass-clear-surface); --prts-active-glass-filter: blur(28px) saturate(180%)}html[data-dsh-prts][data-prts-glass=\"off\"]{--prts-active-glass: var(--prts-panel); --prts-active-glass-filter: none}html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] ),html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::before,html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::after{box-sizing: border-box}html[data-dsh-prts] body{--dsw-alias-bg-base: var(--prts-canvas); --dsw-alias-bg-layer-1: var(--prts-panel); --dsw-alias-bg-layer-2: var(--prts-panel-raised); --dsw-alias-bg-layer-3: var(--prts-panel-muted); --dsw-alias-label-primary: var(--prts-ink); --dsw-alias-label-secondary: var(--prts-muted); --dsw-alias-border-l2: var(--prts-line); min-height: 100dvh; margin: 0; overflow: hidden; background: var(--prts-canvas); color: var(--prts-ink); font-family: var(--prts-body)}html[data-dsh-prts] ::selection{background: var(--prts-yellow); color: var(--prts-yellow-ink)}html[data-dsh-prts] a{color: var(--prts-cyan); text-underline-offset: 3px}html[data-dsh-prts] [data-prts-shell] :is(button,input,textarea,select),html[data-dsh-prts] [data-prts-theme-settings] :is(button,input,textarea,select){font: inherit}html[data-dsh-prts] [data-prts-shell] button,html[data-dsh-prts] [data-prts-theme-settings] button{color: inherit}html[data-dsh-prts] :focus-visible{outline: 2px solid var(--prts-yellow) !important; outline-offset: 2px !important}html[data-dsh-prts] [hidden]{display: none !important}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"]{--prts-nav-width: 0px}html[data-dsh-prts] [data-prts-shell]{position: fixed; z-index: 124; inset: var(--prts-host-top-inset) auto 0 0; width: var(--prts-nav-width); pointer-events: none; font-family: var(--prts-mono)}html[data-dsh-prts] [data-prts-shell] button,html[data-dsh-prts] [data-prts-nav-rail]{pointer-events: auto}html[data-dsh-prts] [data-prts-topbar]{display: none}html[data-dsh-prts] [data-prts-nav-rail]{position: fixed; z-index: 120; inset: var(--prts-host-top-inset) auto 0 0; width: var(--prts-rail-width); display: flex; flex-direction: column; align-items: stretch; border-right: 1px solid #30383d; background: var(--prts-rail); color: #e8edef; box-shadow: 4px 0 18px rgba(0,0,0,.18)}html[data-dsh-prts] [data-prts-rail-launcher]{display: none}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-nav-rail]{opacity: 0; visibility: hidden; transform: translate3d(-100%,0,0); transition: transform 180ms var(--prts-ease-snap),opacity 120ms ease,visibility 0s linear 180ms; pointer-events: none}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"][data-prts-rail-open] [data-prts-nav-rail]{opacity: 1; visibility: visible; transform: translate3d(0,0,0); transition-delay: 0s; pointer-events: auto}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"][data-prts-rail-open] [data-prts-rail-launcher]{opacity: 0; visibility: hidden; pointer-events: none}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]{position: fixed; z-index: 121; top: 50%; left: 0; width: 12px; height: 96px; display: grid; place-items: center; padding: 0; overflow: hidden; border: 1px solid color-mix(in srgb,var(--prts-yellow) 40%,transparent); border-left: 0; border-radius: 0 3px 3px 0; opacity: .34; background: color-mix(in srgb,var(--prts-rail) 86%,transparent); color: var(--prts-yellow); font: 700 8px/1 var(--prts-mono); letter-spacing: .08em; transform: translateY(-50%); transition: width 140ms var(--prts-ease-snap),opacity 120ms ease,background-color 120ms ease; cursor: pointer}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher] > span{opacity: 0; writing-mode: vertical-rl; transition: opacity 100ms ease}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]:is(:hover,:focus-visible){width: 40px; opacity: 1; background: var(--prts-rail)}html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]:is(:hover,:focus-visible) > span{opacity: 1}@media (hover: none),(pointer: coarse){html[data-dsh-prts][data-prts-rail-mode=\"overlay\"] [data-prts-rail-launcher]{top: 50%; width: 24px; height: 88px; opacity: .58; transform: translateY(-50%); touch-action: none}html[data-dsh-prts] [data-prts-rail-launcher] > span{opacity: 0}html[data-dsh-prts] [data-prts-rail-launcher][data-prts-rail-gesture-active]{width: 40px; opacity: 1}html[data-dsh-prts] [data-prts-rail-gesture-cue]{position: absolute; inset: calc(27px + var(--prts-rail-gesture-progress,0px)) 10px auto auto; display: block; opacity: 0; font: 700 14px/8px sans-serif}html[data-dsh-prts] [data-prts-rail-gesture-active] [data-prts-rail-gesture-cue]{opacity: 1; animation: prts-rail-swipe-cue 720ms ease-in-out infinite}html[data-dsh-prts] [data-prts-rail-gesture-ready] [data-prts-rail-gesture-cue]{filter: drop-shadow(0 0 3px currentColor)}}@keyframes prts-rail-swipe-cue{50%{opacity: .45}}html[data-dsh-prts] [data-prts-rail-brand]{height: 64px; display: grid; place-items: center; padding: 8px 5px; border-bottom: 1px solid #30383d; overflow: hidden}html[data-dsh-prts] [data-prts-rail-brand] svg{width: 38px; height: 38px; color: #edf1f2}html[data-dsh-prts] [data-prts-rail-brand] > span{position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0)}html[data-dsh-prts] [data-prts-nav-rail] > button{position: relative; width: 100%; min-height: 52px; display: grid; place-items: center; gap: 2px; padding: 7px 2px 6px; border: 0; border-bottom: 1px solid #242b2f; background: transparent; color: #9fa9ae; cursor: pointer; clip-path: polygon(0 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,0 100%)}html[data-dsh-prts] [data-prts-nav-rail] > button::after{content: \"\"; position: absolute; inset: 8px auto 8px 0; width: 2px; background: transparent}html[data-dsh-prts] [data-prts-nav-rail] > button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-nav-rail] > button[aria-expanded=\"true\"]{background: #151a1d; color: #f0f3f4}html[data-dsh-prts] [data-prts-nav-rail] > button[aria-expanded=\"true\"]::after{background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-nav-rail] > button:active{transform: translateY(1px) scale(.98)}html[data-dsh-prts] [data-prts-nav-rail] b{font-size: 15px; line-height: 1}html[data-dsh-prts] [data-prts-nav-rail] small{font-size: 8px; letter-spacing: .04em}html[data-dsh-prts] [data-prts-nav-bottom]{display: grid; margin-top: auto; border-top: 1px solid #30383d}html[data-dsh-prts] [data-prts-connection-indicator]{min-height: 40px; display: grid; place-items: center; gap: 3px; padding: 6px 2px; color: #8c969b; font-size: 7px; text-align: center}html[data-dsh-prts] [data-prts-connection-indicator] i{width: 6px; height: 6px; border: 1px solid currentColor; background: currentColor; transform: rotate(45deg)}html[data-dsh-prts] [data-prts-connection-indicator][data-state=\"connected\"]{color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-connection-indicator][data-state=\"disconnected\"]{color: var(--prts-red)}html[data-dsh-prts] [data-prts-scheme-toggle] svg{width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.7}html[data-dsh-prts] [data-prts-scheme-toggle]{touch-action: none; user-select: none}html[data-dsh-prts][data-prts-scheme-transition-interactive] [data-prts-scheme-toggle]{cursor: ew-resize}html[data-dsh-prts] [data-prts-scheme-toggle][data-prts-scheme-press]{animation: prts-scheme-toggle-press 100ms var(--prts-ease-snap) both}@keyframes prts-scheme-toggle-press{0%,100%{transform: translateY(0) scale(1)}50%{transform: translateY(0) scale(.96)}}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(root){animation: prts-scheme-view-hold var(--prts-scheme-duration,520ms) linear both}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(root),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(root){animation: none; mix-blend-mode: normal}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(root){z-index: 1}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(root){z-index: 2; clip-path: inset(0 max(0px,calc(100vw - var(--prts-scheme-reveal-x))) 0 0)}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-mark){animation: none}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-grid){z-index: 3}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-edge){z-index: 4}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-group(prts-scheme-mark){z-index: 5}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-old(prts-scheme-mark){opacity: 0; animation: none}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-mark){opacity: 1; animation: none; mix-blend-mode: normal}@keyframes prts-scheme-view-hold{from,to{opacity: 1}}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]{--prts-scheme-grid-cell: 20px; --prts-scheme-grid-diagonal-cell: 40px; --prts-scheme-grid-axis: rgba(132,158,166,.14); --prts-scheme-grid-node: rgba(150,180,188,.22); --prts-scheme-grid-diagonal-opacity: .16}html[data-dsh-prts][data-prts-scheme-transition=\"light\"]{--prts-scheme-grid-axis: rgba(28,36,41,.12); --prts-scheme-grid-node: rgba(24,31,35,.2); --prts-scheme-grid-diagonal-opacity: .14}html[data-dsh-prts] [data-prts-scheme-reveal]{box-sizing: border-box; position: fixed; z-index: 2147483647; inset: 0; width: 100vw; max-width: none; height: 100dvh; max-height: none; margin: 0; padding: 0; overflow: hidden; border: 0; background: transparent; color: #ffd400; --prts-scheme-grid-cell: 20px; --prts-scheme-grid-diagonal-cell: 40px; --prts-scheme-grid-axis: rgba(132,158,166,.08); --prts-scheme-grid-node: rgba(150,180,188,.13); --prts-scheme-grid-diagonal-opacity: .075; pointer-events: none}html[data-dsh-prts] [data-prts-scheme-reveal=\"light\"]{--prts-scheme-grid-axis: rgba(28,36,41,.065); --prts-scheme-grid-node: rgba(24,31,35,.105); --prts-scheme-grid-diagonal-opacity: .06}html[data-dsh-prts] [data-prts-scheme-reveal-edge]{isolation: isolate; position: absolute; top: 0; left: 0; width: 29px; height: 100vh; background: linear-gradient(90deg,transparent 13px,rgba(244,247,247,.96) 13px 14px,rgba(255,212,0,.22) 14px 15px,transparent 15px); transform: translate3d(-14px,0,0); transform-origin: 50% 50%; view-transition-name: prts-scheme-edge; will-change: transform}html[data-dsh-prts] [data-prts-scheme-reveal-grid]{position: absolute; z-index: -2; inset: 0 auto 0 -206px; display: block; width: 220px; height: 100vh; view-transition-name: prts-scheme-grid; pointer-events: none}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-grid){background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cg fill='none' stroke='%2396b4bc' stroke-width='.55'%3E%3Cpath d='M0 0H40M0 20H40M0 40H40M0 0V40M20 0V40M40 0V40' stroke-opacity='.22'/%3E%3Cpath d='M0 0L20 20L0 40M20 0L40 20L20 40' stroke-opacity='.46'/%3E%3Cpath d='M20 0L0 20L20 40M40 0L20 20L40 40' stroke-opacity='.22'/%3E%3C/g%3E%3Cg fill='%2396b4bc' fill-opacity='.36'%3E%3Ccircle cx='0' cy='0' r='1'/%3E%3Ccircle cx='20' cy='0' r='1'/%3E%3Ccircle cx='40' cy='0' r='1'/%3E%3Ccircle cx='0' cy='20' r='1'/%3E%3Ccircle cx='20' cy='20' r='1'/%3E%3Ccircle cx='40' cy='20' r='1'/%3E%3Ccircle cx='0' cy='40' r='1'/%3E%3Ccircle cx='20' cy='40' r='1'/%3E%3Ccircle cx='40' cy='40' r='1'/%3E%3C/g%3E%3C/svg%3E\"); background-repeat: repeat; background-position: calc(220px - var(--prts-scheme-reveal-x)) 0; background-size: var(--prts-scheme-grid-diagonal-cell) var(--prts-scheme-grid-diagonal-cell); -webkit-mask-image: linear-gradient(90deg,transparent 0,rgba(0,0,0,.12) 16%,rgba(0,0,0,.48) 56%,#000 100%); mask-image: linear-gradient(90deg,transparent 0,rgba(0,0,0,.12) 16%,rgba(0,0,0,.48) 56%,#000 100%)}html[data-dsh-prts][data-prts-scheme-transition=\"light\"]::view-transition-new(prts-scheme-grid){background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cg fill='none' stroke='%231c2429' stroke-width='.55'%3E%3Cpath d='M0 0H40M0 20H40M0 40H40M0 0V40M20 0V40M40 0V40' stroke-opacity='.2'/%3E%3Cpath d='M0 0L20 20L0 40M20 0L40 20L20 40' stroke-opacity='.42'/%3E%3Cpath d='M20 0L0 20L20 40M40 0L20 20L40 40' stroke-opacity='.2'/%3E%3C/g%3E%3Cg fill='%231c2429' fill-opacity='.32'%3E%3Ccircle cx='0' cy='0' r='1'/%3E%3Ccircle cx='20' cy='0' r='1'/%3E%3Ccircle cx='40' cy='0' r='1'/%3E%3Ccircle cx='0' cy='20' r='1'/%3E%3Ccircle cx='20' cy='20' r='1'/%3E%3Ccircle cx='40' cy='20' r='1'/%3E%3Ccircle cx='0' cy='40' r='1'/%3E%3Ccircle cx='20' cy='40' r='1'/%3E%3Ccircle cx='40' cy='40' r='1'/%3E%3C/g%3E%3C/svg%3E\")}html[data-dsh-prts] [data-prts-scheme-reveal-blend]{position: absolute; z-index: -1; inset: 0; width: 29px; background: linear-gradient(90deg,transparent,rgba(255,212,0,.025) 43%,rgba(235,244,245,.11) 50%,rgba(255,212,0,.018) 58%,transparent); -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); opacity: .54}html[data-dsh-prts] [data-prts-scheme-reveal=\"light\"] [data-prts-scheme-reveal-blend]{background: linear-gradient(90deg,transparent,rgba(28,36,41,.04) 42%,rgba(255,255,255,.2) 50%,rgba(255,212,0,.018) 58%,transparent)}html[data-dsh-prts] [data-prts-scheme-reveal=\"dark\"] [data-prts-scheme-reveal-blend]{background: linear-gradient(90deg,transparent,rgba(132,158,166,.035) 42%,rgba(235,244,245,.12) 50%,rgba(255,212,0,.018) 58%,transparent)}html[data-dsh-prts] [data-prts-scheme-reveal-edge]::before{content: \"\"; position: absolute; top: 18%; left: 7px; width: 15px; height: 28px; border-top: 1px solid rgba(235,244,245,.58); border-bottom: 1px solid rgba(235,244,245,.58); background: linear-gradient(rgba(255,212,0,.72),rgba(255,212,0,.72)) 50% 50% / 100% 1px no-repeat}html[data-dsh-prts] [data-prts-scheme-reveal-edge]::after{content: \"\"; position: absolute; top: calc(18% + 12px); left: 12px; width: 5px; height: 5px; border: 1px solid rgba(255,212,0,.78); background: rgba(8,12,14,.68); transform: rotate(45deg)}html[data-dsh-prts] [data-prts-scheme-reveal-node]{position: absolute; z-index: 2; bottom: clamp(88px,18vh,176px); left: 14px; display: block; box-sizing: border-box; width: 46px; height: 62px; color: #ffd400; font-style: normal; transform: translateX(10px); view-transition-name: prts-scheme-node; transition: transform 120ms var(--prts-ease-snap)}html[data-dsh-prts] [data-prts-scheme-reveal-edge][data-prts-scheme-reveal-side=\"left\"] [data-prts-scheme-reveal-node]{transform: translateX(calc(-100% - 10px))}html[data-dsh-prts] [data-prts-scheme-reveal-node]::before{content: \"\"; position: absolute; top: 30px; left: -10px; width: 10px; border-top: 1px solid rgba(255,212,0,.76)}html[data-dsh-prts] [data-prts-scheme-reveal-edge][data-prts-scheme-reveal-side=\"left\"] [data-prts-scheme-reveal-node]::before{right: -10px; left: auto}html[data-dsh-prts] [data-prts-scheme-reveal-mark]{position: absolute; top: 20px; left: 20px; display: block; width: 6px; height: 6px; border-top: 1px solid currentColor; border-right: 1px solid currentColor; view-transition-name: prts-scheme-mark}html[data-dsh-prts] [data-prts-scheme-reveal-meter]{position: absolute; top: 6px; left: 0; display: block; box-sizing: border-box; width: 6px; height: 50px; border: 1px solid rgba(255,212,0,.34); background: rgba(8,12,14,.32)}html[data-dsh-prts] [data-prts-scheme-reveal-meter]::after{content: \"\"; position: absolute; top: -1px; left: 6px; width: 3px; border-top: 1px solid rgba(255,212,0,.64); box-shadow: 0 24px rgba(255,212,0,.42),0 49px rgba(255,212,0,.64)}html[data-dsh-prts] [data-prts-scheme-reveal-meter-fill]{position: absolute; inset: 1px; display: block; background: currentColor; box-shadow: 0 0 5px rgba(255,212,0,.28); opacity: 0; transform-origin: 50% 100%}html[data-dsh-prts] [data-prts-scheme-reveal-label],html[data-dsh-prts] [data-prts-scheme-reveal-value]{position: absolute; left: 12px; display: block; color: currentColor; font-family: var(--prts-mono); font-style: normal; line-height: 1; white-space: nowrap}html[data-dsh-prts] [data-prts-scheme-reveal-label]{top: 7px; font-size: 7px; font-weight: 600; letter-spacing: .16em; opacity: .72}html[data-dsh-prts] [data-prts-scheme-reveal-value]{bottom: 7px; width: 24px; height: 11px; font-size: 11px; font-weight: 700; letter-spacing: .08em}html[data-dsh-prts][data-prts-scheme-transition-mode=\"view\"]::view-transition-new(prts-scheme-node){background-image: linear-gradient(#ffd400,#ffd400); background-position: left 1px bottom 7px; background-repeat: no-repeat; background-size: 2px var(--prts-scheme-control-meter-height,0); object-fit: none}html[data-dsh-prts][data-prts-scheme-transition-interactive]::view-transition-new(prts-scheme-node){background-image: var(--prts-scheme-control-value-image),linear-gradient(#ffd400,#ffd400); background-position: left 12px bottom 7px,left 1px bottom 7px; background-size: 24px 11px,2px var(--prts-scheme-control-meter-height,0)}html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-grid),html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-edge),html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-node),html[data-dsh-prts][data-prts-scheme-transition-complete]::view-transition-group(prts-scheme-mark){animation: prts-scheme-hud-release 100ms ease-out both}@keyframes prts-scheme-hud-release{0%,35%{opacity: 1}100%{opacity: 0}}@media (max-width: 640px){html[data-dsh-prts] [data-prts-scheme-reveal]{--prts-scheme-grid-cell: 16px; --prts-scheme-grid-diagonal-cell: 32px}}html[data-dsh-prts] [data-prts-scheme-current=\"dark\"] [data-prts-scheme-icon=\"light\"],html[data-dsh-prts] [data-prts-scheme-current=\"light\"] [data-prts-scheme-icon=\"dark\"]{display: none}html[data-dsh-prts] [data-prts-region=\"frame\"]{width: calc(100vw - var(--prts-nav-width)); height: calc(100dvh - var(--prts-host-top-inset)); min-height: 0; margin-left: var(--prts-nav-width); display: grid !important; background: var(--prts-canvas)}html[data-dsh-prts] [data-prts-region=\"sessions\"],html[data-dsh-prts] [data-prts-region=\"operation\"]{min-width: 0; min-height: 0}html[data-dsh-prts] [data-prts-region=\"sessions\"]{box-sizing: border-box; position: relative; z-index: 4; overflow: hidden; border-right: 1px solid var(--prts-line); background: var(--prts-panel); transition: opacity 180ms ease}html[data-dsh-prts] [data-prts-region=\"operation\"]{position: relative; z-index: 1; overflow: hidden; background: var(--prts-canvas); color: var(--prts-ink)}html[data-dsh-prts] [data-prts-region=\"frame\"][data-sidebar-collapsed] [data-prts-region=\"sessions\"] :is( [data-slot=\"sidebar.workspaces\"],[data-slot=\"sidebar.settings\"] ){opacity: 0; pointer-events: none}html[data-dsh-prts] [data-sidebar-collapsed] :is([data-prts-owned-facility],[data-prts-owned-facility-spine],[data-prts-owned-facility-vector]){visibility: hidden; content-visibility: hidden}html[data-dsh-prts] [data-prts-region=\"sessions\"] > *,html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar\"]{height: 100%}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-rc7-sidebar-root]{box-sizing: border-box; width: 100% !important; min-width: var(--prts-sessions-width); padding: 14px 10px; overflow: hidden auto; background: transparent !important; color: var(--prts-ink)}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar.workspaces\"] [role=\"tree\"]{overflow-x: hidden}html[data-dsh-prts] [data-prts-region=\"sessions\"] > * > [data-slot=\"sidebar\"] > :first-child > button[aria-label*=\"new session\" i]{display: none !important}html[data-dsh-prts] [data-prts-workspace-row],html[data-dsh-prts] [data-prts-session-row]{--prts-row-shift: 0px; --prts-row-end-reserve: 29px; --prts-facility-height: var(--prts-workspace-height); position: relative; width: calc(100% - 20px); height: var(--prts-facility-height) !important; min-height: var(--prts-facility-height); display: flex; align-items: center; gap: 0 !important; margin: 0 0 var(--prts-facility-gap) 0; padding: 0 !important; overflow: visible; border: 0 !important; background: transparent !important; color: var(--prts-ink); isolation: isolate}html[data-dsh-prts] [data-prts-session-row]{--prts-facility-height: var(--prts-session-height); margin-left: 8px}@media (max-height: 820px) and (hover: hover) and (pointer: fine){html[data-dsh-prts]{--prts-workspace-height: 34px; --prts-session-height: 32px; --prts-facility-gap: 5px}}html[data-dsh-prts] [data-prts-workspace-row]::before{background: var(--prts-cyan) !important}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"],html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]),html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open]){--prts-row-shift: var(--prts-spine-travel)}html[data-dsh-prts] [data-prts-workspace-row]::before,html[data-dsh-prts] [data-prts-session-row]::before{content: \"\"; position: absolute; z-index: 2; inset: 0 auto 0 0; width: var(--prts-spine-width); background: var(--prts-line-strong); clip-path: polygon( 3px 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px ); transform: scaleX(var(--prts-spine-rest)); transform-origin: left center; transition: transform 220ms var(--prts-ease-spring),background-color 160ms ease}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"]::before,html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open])::before,html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open])::before{transform: scaleX(1)}html[data-dsh-prts] [data-prts-session-row][aria-selected=\"true\"]::before{background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-facility-face]{position: absolute; z-index: -1; inset: 0 0 0 5px; border: 1px solid var(--prts-line); background: var(--prts-panel-raised); clip-path: polygon( 3px 0,calc(50% - 25px) 0,calc(50% - 20px) 3.333px,calc(50% + 20px) 3.333px,calc(50% + 25px) 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px ); transform: translate3d(var(--prts-row-shift),0,0); transition: transform 220ms var(--prts-ease-spring),border-color 160ms ease,background-color 160ms ease; pointer-events: none}html[data-dsh-prts] :is([data-prts-workspace-row],[data-prts-session-row]) [data-prts-facility-face]{right: var(--prts-row-end-reserve)}html[data-dsh-prts] [data-prts-row-title],html[data-dsh-prts] [data-prts-session-row] > span:not([data-prts-facility-face]):not([data-prts-row-projection]):not([data-prts-session-actions]),html[data-dsh-prts] [data-prts-workspace-row] > span:not([data-prts-facility-face]):not([data-prts-row-projection]):not([data-prts-workspace-actions]){position: relative; z-index: 3; min-width: 0; transform: translate3d(var(--prts-row-shift),0,0); transition: transform 220ms var(--prts-ease-spring),color 160ms ease}html[data-dsh-prts] [data-prts-row-title]{flex: 1; overflow: hidden; padding: 0 10px 0 13px; font-size: 12px; font-weight: 650; line-height: var(--prts-facility-height); text-overflow: ellipsis; white-space: nowrap}html[data-dsh-prts] [data-prts-session-row] [data-prts-row-title]::before{content: attr(data-prts-session-index); margin-right: 8px; color: var(--prts-dim); font-family: var(--prts-mono); font-size: 9px; letter-spacing: .08em}html[data-dsh-prts] [data-prts-workspace-actions],html[data-dsh-prts] [data-prts-session-actions]{position: absolute; z-index: 5; inset: 0 0 auto auto; height: var(--prts-facility-height) !important; align-items: stretch !important; gap: 1px !important; margin: 0 !important; transform: translate3d(var(--prts-row-shift),0,0)}html[data-dsh-prts] [data-prts-workspace-actions]{width: 57px}html[data-dsh-prts] [data-prts-session-actions]{width: 28px}html[data-dsh-prts] [data-prts-workspace-actions] > *,html[data-dsh-prts] [data-prts-session-actions] > *{height: 100% !important}html[data-dsh-prts] [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-actions] button{width: 28px !important; min-width: 28px !important; height: var(--prts-facility-height) !important; min-height: var(--prts-facility-height) !important; display: grid !important; place-items: center; padding: 0 !important; border: 1px solid var(--prts-line) !important; border-radius: 0 !important; background: var(--prts-panel-raised) !important; color: var(--prts-muted) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px); cursor: pointer}html[data-dsh-prts] [data-prts-workspace-actions] button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-session-actions] button:is(:hover,:focus-visible){border-color: var(--prts-yellow) !important; color: var(--prts-yellow) !important}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-session-actions] button{animation: prts-facility-button-dock 520ms both}html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-workspace-actions] > :nth-child(1) button{animation-delay: 55ms}html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) [data-prts-workspace-actions] > :nth-child(2){animation-delay: 125ms}}@keyframes prts-facility-button-dock{0%{opacity: 0; transform: translate3d(34px,0,0) scaleX(.94)}52%{opacity: 1; transform: translate3d(-4px,0,0) scaleX(.96)}72%{transform: translate3d(3px,0,0) scaleX(1.035)}88%{transform: translate3d(-1px,0,0) scaleX(.99)}100%{opacity: 1; transform: translate3d(0,0,0) scaleX(1)}}html[data-dsh-prts] [data-slot=\"conversation\"]{min-width: 0; height: 100%; background: transparent}html[data-dsh-prts] [data-slot=\"conversation.session.header\"]{border-bottom: 1px solid var(--prts-line); background: color-mix(in srgb,var(--prts-canvas-elevated) 92%,transparent); font-family: var(--prts-mono)}html[data-dsh-prts] [data-session-code]{color: var(--prts-yellow); font-size: 11px; letter-spacing: .12em}html[data-dsh-prts] [data-prts-conversation-control=\"header\"]{margin-left: auto}html[data-dsh-prts] [data-conversation-scroll]{position: relative; z-index: 2}html[data-dsh-prts] [data-message-role=\"user\"],html[data-dsh-prts] [data-chat-flow-kind=\"user\"]{position: relative; color: var(--prts-ink)}html[data-dsh-prts] [data-message-role=\"user\"],html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"]{border: 1px solid var(--prts-line-strong) !important; border-left: 4px solid var(--prts-yellow) !important; border-radius: var(--prts-radius-card) !important; background: var(--prts-panel-raised) !important; color: var(--prts-ink) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,0 100%,0 3px); box-shadow: none !important}html[data-dsh-prts] [data-message-role=\"user\"] :is([data-markdown],[class*=\"markdown\" i]),html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] :is([data-markdown],[class*=\"markdown\" i]){background: transparent !important}html[data-dsh-prts] [data-message-role=\"user\"] :is(pre,table,blockquote),html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] :is(pre,table,blockquote){border: 1px solid var(--prts-line); background: var(--prts-glass-dense)}html[data-dsh-prts] [data-message-role=\"user\"] :is(pre,code),html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] :is(pre,code){font-family: var(--prts-mono) !important}html[data-dsh-prts] [data-message-role=\"user\"] pre,html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"] pre{max-width: 100%; overflow: auto; padding: 14px; border-left: 3px solid var(--prts-cyan) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [aria-invalid=\"true\"],html[data-dsh-prts] [data-status=\"error\"],html[data-dsh-prts] [data-status=\"denied\"]{border-color: var(--prts-red) !important; color: var(--prts-red) !important}html[data-dsh-prts] [data-prts-ambient-layer]{position: absolute; z-index: 0; inset: 0; overflow: hidden; opacity: .86; background: radial-gradient(circle at 48% 35%,color-mix(in srgb,var(--prts-cyan) 7%,transparent),transparent 32%),linear-gradient(115deg,transparent 0 42%,color-mix(in srgb,var(--prts-line) 18%,transparent) 42.2% 42.5%,transparent 42.7%),repeating-linear-gradient(0deg,transparent 0 27px,color-mix(in srgb,var(--prts-line) 12%,transparent) 27px 28px); pointer-events: none}html[data-dsh-prts][data-prts-texture=\"restrained\"] [data-prts-ambient-layer]{opacity: .56}html[data-dsh-prts][data-prts-texture=\"off\"] [data-prts-ambient-layer]{display: none}html[data-dsh-prts] [data-prts-particle-layer]{position: absolute; z-index: 1; inset: 0; width: 100%; height: 100%; pointer-events: none}html[data-dsh-prts] [data-prts-particle-layer]{opacity: 1; transition: opacity 120ms ease-out}html[data-dsh-prts] [data-prts-resize-shield]{content-visibility: hidden !important; contain-intrinsic-size: auto 800px}html[data-dsh-prts] [data-prts-particle-layer][data-prts-resizing]{opacity: .78; transition: none}html[data-dsh-prts] [data-prts-particle-layer][data-prts-resize-restoring]{opacity: 1; transition: opacity 120ms ease-out}html[data-dsh-prts] [data-prts-ambient-layer][data-prts-resizing]{opacity: .42; background: color-mix(in srgb,var(--prts-panel) 92%,var(--prts-canvas)); transition: none}html[data-dsh-prts] [data-prts-ambient-layer][data-prts-resizing] :is( [data-prts-ambient-glow],[data-prts-session-pickup] ){animation-play-state: paused !important}html[data-dsh-prts] :is( [data-prts-theme-settings][data-prts-resizing],[data-prts-settings-backdrop][data-prts-resizing] ),html[data-dsh-prts] [data-prts-resizing] > [data-composer-card]{backdrop-filter: none !important; -webkit-backdrop-filter: none !important; transition: none !important}html[data-dsh-prts] [data-prts-hero-active]::before{content: \"\"; position: absolute; inset: 0; pointer-events: none}html[data-dsh-prts]{--prts-hero-mark-base: clamp(380px,46%,720px); --prts-hero-mark-size: min(var(--prts-hero-mark-base),42dvh)}html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat],html[data-dsh-prts] [data-prts-hero-active] [data-slot=\"conversation.composer\"]{position: relative; z-index: 5}html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-composer-fallback]{position: relative; border: 1px solid var(--prts-line-strong) !important; border-bottom: 3px solid var(--prts-yellow) !important; border-radius: var(--prts-radius-card) !important; background: var(--prts-active-glass) !important; clip-path: polygon(3px 0,calc(50% - 42px) 0,calc(50% - 37px) 5px,calc(50% + 37px) 5px,calc(50% + 42px) 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px); box-shadow: 0 14px 34px rgba(0,0,0,.18); backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter)}html[data-dsh-prts] [data-composer-card] textarea,html[data-dsh-prts] [data-prts-composer-fallback] textarea{border: 0 !important; background: transparent !important; color: var(--prts-ink) !important; caret-color: var(--prts-yellow)}html[data-dsh-prts] [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *),html[data-dsh-prts] [data-prts-conversation-control]{border: 1px solid var(--prts-line) !important; border-radius: var(--prts-radius-control) !important; background: var(--prts-panel-raised) !important; color: var(--prts-ink) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px)}html[data-dsh-prts] [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *):is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-conversation-control]:is(:hover,:focus-visible){border-color: var(--prts-yellow) !important}html[data-dsh-prts] [data-composer-card] button[aria-label*=\"send\" i],html[data-dsh-prts] [data-composer-card] button[type=\"submit\"]{background: var(--prts-yellow) !important; color: var(--prts-yellow-ink) !important}html[data-dsh-prts] [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *):active,html[data-dsh-prts] [data-prts-conversation-control]:active{transform: translateY(1px) scale(.98)}html[data-dsh-prts] [data-produced-files-row] > button[type=\"button\"],html[data-dsh-prts] [data-prts-to-bottom]{min-height: 36px; border: 1px solid var(--prts-line) !important; background: var(--prts-active-glass) !important; color: var(--prts-ink) !important; clip-path: polygon(3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px)}html[data-dsh-prts] [data-prts-glass-control=\"model\"],html[data-dsh-prts] [data-prts-glass-control=\"permission\"],html[data-dsh-prts] [data-prts-glass-control=\"preset\"]{border: 1px solid var(--prts-line) !important; border-radius: var(--prts-radius-control) !important; background: var(--prts-active-glass) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-glass-menu],html[data-dsh-prts] [data-prts-floating-glass=\"menu\"],html[data-dsh-prts] [data-prts-floating-glass=\"listbox\"],html[data-dsh-prts] [data-prts-floating-glass=\"popover\"]{border: 1px solid var(--prts-glass-border) !important; border-radius: var(--prts-radius-overlay) !important; background: var(--prts-active-glass) !important; color: var(--prts-ink) !important; box-shadow: var(--prts-shadow-glass-overlay) !important; backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter)}html[data-dsh-prts] [data-prts-floating-glass=\"dialog\"]{border: 1px solid var(--prts-glass-border) !important; border-radius: var(--prts-radius-overlay) !important; background: var(--prts-panel) !important; color: var(--prts-ink) !important; box-shadow: var(--prts-shadow-glass-overlay) !important; backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-prts-floating-item]{min-height: 38px; border-radius: var(--prts-radius-control) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-floating-item]:is(:hover,[data-highlighted]){background: var(--prts-panel-muted) !important}html[data-dsh-prts] [data-prts-floating-input]{min-height: 44px; border: 1px solid var(--prts-line) !important; background: var(--prts-panel) !important; color: var(--prts-ink) !important}html[data-dsh-prts] :is( [data-prts-floating-glass=\"menu\"],[data-prts-floating-glass=\"listbox\"],[data-prts-floating-glass=\"popover\"] ) [data-prts-floating-danger]{color: var(--prts-red) !important}html[data-dsh-prts] [data-prts-floating-scrim]{background: rgba(3,5,6,.62) !important}html[data-dsh-prts-settings] .prts-plugin-settings{width: 100%; display: grid; gap: 16px; container: prts-plugin-settings / inline-size; color: inherit; font: inherit}html[data-dsh-prts-settings] .prts-plugin-settings__header{display: grid; gap: 5px; padding-bottom: 14px; border-bottom: 1px solid color-mix(in srgb,currentColor 18%,transparent)}html[data-dsh-prts-settings] .prts-plugin-settings__header h3,html[data-dsh-prts-settings] .prts-plugin-settings__header p{margin: 0}html[data-dsh-prts-settings] .prts-plugin-settings__header h3{font-size: 18px; font-weight: 650}html[data-dsh-prts-settings] .prts-plugin-settings__header p,html[data-dsh-prts-settings] .prts-plugin-settings__copy small{color: color-mix(in srgb,currentColor 62%,transparent); font-size: 12px; line-height: 1.5}html[data-dsh-prts-settings] .prts-plugin-settings__safe{margin: 0; padding: 10px 12px; border: 1px solid color-mix(in srgb,#df5750 42%,transparent); border-radius: 8px; background: color-mix(in srgb,#df5750 8%,transparent); color: inherit; font-size: 12px}html[data-dsh-prts-settings] .prts-plugin-settings__list{overflow: hidden; border: 1px solid color-mix(in srgb,currentColor 16%,transparent); border-radius: 10px}html[data-dsh-prts-settings] .prts-plugin-settings__row{min-height: 64px; display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 12px 14px}html[data-dsh-prts-settings] .prts-plugin-settings__row + .prts-plugin-settings__row{border-top: 1px solid color-mix(in srgb,currentColor 12%,transparent)}html[data-dsh-prts-settings] .prts-plugin-settings__copy{min-width: 0; display: grid; gap: 3px}html[data-dsh-prts-settings] .prts-plugin-settings__copy strong{font-size: 13px; font-weight: 600}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']{position: relative; width: 42px; height: 24px; flex: 0 0 auto; padding: 0; border: 0; border-radius: 999px; background: color-mix(in srgb,currentColor 18%,transparent); color: inherit; cursor: pointer}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'] > span{position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: currentColor; transition: transform 120ms ease}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'].is-active{background: var(--color-primary,#d9b800); color: #111}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'].is-active > span{transform: translateX(18px)}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']:disabled{cursor: not-allowed; opacity: .45}@media (prefers-reduced-motion: reduce){html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch'] > span{transition: none}}@container prts-plugin-settings (max-width: 22rem){html[data-dsh-prts-settings] .prts-plugin-settings__row{flex-direction: column; align-items: stretch; gap: 10px}html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']{align-self: flex-end}}@media (max-width: 640px){html[data-dsh-prts]{--prts-nav-width: 52px}html[data-dsh-prts] [data-slot=\"conversation.session.header\"]{padding-inline: 12px}html[data-dsh-prts-settings] .prts-settings{padding: 12px}}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){html[data-dsh-prts] [data-prts-floating-glass],html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-glass-menu]{background: var(--prts-panel) !important}}@media (hover: hover) and (pointer: fine){html[data-dsh-prts] [data-prts-nav-rail] > button:hover b{transform: translateY(-1px)}}@media (prefers-reduced-transparency: reduce){html[data-dsh-prts]{--prts-active-glass: var(--prts-panel); --prts-active-glass-filter: none}}@media (prefers-contrast: more){html[data-dsh-prts]{--prts-line: currentColor; --prts-line-strong: currentColor}}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] ),html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::before,html[data-dsh-prts] :is( [data-prts-shell],[data-prts-shell] *,[data-prts-particle-layer],[data-prts-ambient-layer],[data-prts-facility-face],[data-composer-card],[data-prts-composer-fallback],[data-prts-conversation-control],[data-prts-to-bottom] )::after{scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important}}html[data-dsh-prts]{--prts-hero-mark-base: clamp(300px,38%,520px); --prts-hero-mark-size: min(var(--prts-hero-mark-base),32dvh)}html[data-dsh-prts] [data-prts-region=\"sessions\"] > * > [data-slot=\"sidebar\"] > :first-child > button[aria-label*=\"new session\" i]{min-height: 40px; display: grid !important; place-items: center; margin: 0 0 14px; border: 1px solid var(--prts-line) !important; border-radius: var(--prts-radius-card) !important; background: var(--prts-panel-raised) !important; color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-rail-brand],html[data-dsh-prts] [data-prts-nav-rail] > button,html[data-dsh-prts] [data-prts-nav-bottom] > button{position: relative; width: 100%; min-width: 0; min-height: 48px; display: grid; place-items: center; padding: 0; border: 0; border-bottom: 1px solid #242b2f; border-radius: 0; background: transparent; color: #aeb8bd !important; cursor: pointer; clip-path: none}html[data-dsh-prts] [data-prts-rail-brand]{height: 64px; border-bottom-color: #30383d}html[data-dsh-prts] [data-prts-rail-brand]:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-rail-brand][aria-expanded=\"true\"],html[data-dsh-prts] [data-prts-nav-rail] > button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-nav-bottom] > button:is(:hover,:focus-visible){background: #151a1d; color: #f3f6f7 !important}html[data-dsh-prts] [data-prts-rail-brand][aria-expanded=\"true\"]::after{content: \"\"; position: absolute; inset: 7px auto 7px 0; width: 2px; background: var(--prts-yellow)}html[data-dsh-prts] [data-prts-nav-rail] small,html[data-dsh-prts] [data-prts-connection-label]{position: absolute; z-index: 180; top: 50%; left: calc(100% + 9px); width: max-content; max-width: 180px; padding: 6px 8px; border: 1px solid #3d474d; border-radius: 3px; opacity: 0; background: #0e1215; color: #eef2f3; font: 700 9px/1.2 var(--prts-mono); letter-spacing: .04em; text-align: left; transform: translate3d(-5px,-50%,0); transition: opacity 130ms ease,transform 160ms var(--prts-ease-snap); pointer-events: none; white-space: nowrap}html[data-dsh-prts] [data-prts-nav-rail] button:is(:hover,:focus-visible) small,html[data-dsh-prts] [data-prts-connection-indicator]:is(:hover,:focus-visible) [data-prts-connection-label]{opacity: 1; transform: translate3d(0,-50%,0)}html[data-dsh-prts] [data-prts-connection-indicator]{position: relative; min-height: 38px; padding: 0; color: #9da8ad}html[data-dsh-prts] [data-prts-nav-bottom] svg,html[data-dsh-prts] [data-prts-nav-bottom] b{display: block; color: currentColor}html[data-dsh-prts] [data-message-role=\"user\"],html[data-dsh-prts] [data-chat-flow-kind=\"user\"] [class$=\"_bubble\"],html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-composer-fallback],html[data-dsh-prts] [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *),html[data-dsh-prts] [data-prts-conversation-control],html[data-dsh-prts] [data-produced-files-row] > button[type=\"button\"],html[data-dsh-prts] [data-prts-to-bottom]{border-radius: 3px !important; clip-path: none !important}html[data-dsh-prts] [data-prts-facility-face]{right: 0 !important; border: 0 !important; background: var(--prts-line-strong)}html[data-dsh-prts] [data-prts-facility-face]::after{content: \"\"; position: absolute; inset: 1px; background: var(--prts-panel-raised); clip-path: polygon( 3px 0,calc(50% - 25px) 0,calc(50% - 20px) 3.333px,calc(50% + 20px) 3.333px,calc(50% + 25px) 0,calc(100% - 3px) 0,100% 3px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 3px )}html[data-dsh-prts] [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-actions] button{border: 1px solid var(--prts-line-strong) !important; border-radius: 3px !important; clip-path: none !important}html[data-dsh-prts] [data-prts-hero-active]{display: grid; grid-template-rows: minmax(220px,1fr) auto; align-content: center; gap: clamp(28px,5dvh,54px); padding-top: 24px; padding-bottom: 34px}html[data-dsh-prts] [data-prts-hero-active] [data-phase=\"hero\"]{min-height: min(36dvh,390px); align-self: end}html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat]{align-self: start; justify-self: center}html[data-dsh-prts]{--prts-hero-mark-base: clamp(320px,42%,580px); --prts-hero-mark-size: min(var(--prts-hero-mark-base),42dvh)}html[data-dsh-prts] [data-prts-region=\"frame\"]{position: relative}html[data-dsh-prts] [data-prts-region=\"frame\"] > [data-shell-overlay]{position: absolute !important; z-index: 120; inset: 0; min-width: 0; min-height: 0; pointer-events: none}html[data-dsh-prts] [data-prts-region=\"frame\"] > [data-shell-overlay] > *{pointer-events: auto}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar.settings\"]{opacity: 1; visibility: visible; pointer-events: auto}html[data-dsh-prts] [data-prts-region=\"sessions\"] [data-slot=\"sidebar.settings\"] > button{color: var(--prts-ink) !important}html[data-dsh-prts] [data-prts-workspace-icon]{display: none !important}html[data-dsh-prts] [data-prts-workspace-disclosure]{position: relative; z-index: 4; width: 14px; flex: 0 0 14px; display: grid; place-items: center; margin-left: calc(var(--prts-spine-width) + 4px); color: var(--prts-muted); transform: translate3d(var(--prts-row-shift),0,0); transition: transform 220ms var(--prts-ease-spring),color 160ms ease}html[data-dsh-prts] [data-prts-workspace-row]::before,html[data-dsh-prts] [data-prts-session-row]::before{clip-path: polygon( 1px 0,calc(100% - 1px) 0,100% 1px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 1px),calc(100% - 1px) 100%,1px 100%,0 calc(100% - 1px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 1px ) !important}html[data-dsh-prts] :is([data-prts-workspace-row],[data-prts-session-row]) [data-prts-facility-face]{right: var(--prts-row-end-reserve) !important}html[data-dsh-prts] [data-prts-facility-face]{border: 0 !important; background: var(--prts-line-strong) !important; clip-path: polygon( 1px 0,calc(50% - 25px) 0,calc(50% - 20px) 3.333px,calc(50% + 20px) 3.333px,calc(50% + 25px) 0,calc(100% - 1px) 0,100% 1px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 1px),calc(100% - 1px) 100%,1px 100%,0 calc(100% - 1px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 1px ) !important}html[data-dsh-prts] [data-prts-facility-face]::after{content: \"\"; position: absolute; inset: 1px; background: var(--prts-panel-raised); clip-path: polygon( 0 0,calc(50% - 24px) 0,calc(50% - 19px) 3.333px,calc(50% + 19px) 3.333px,calc(50% + 24px) 0,100% 0,100% calc(50% - 4px),calc(100% - 2px) calc(50% - 2px),calc(100% - 2px) calc(50% + 2px),100% calc(50% + 4px),100% 100%,0 100%,0 calc(50% + 4px),2px calc(50% + 2px),2px calc(50% - 2px),0 calc(50% - 4px) )}html[data-dsh-prts] [data-prts-workspace-actions]{width: 57px !important}html[data-dsh-prts] [data-prts-session-actions]{width: 28px !important}html[data-dsh-prts] [data-prts-workspace-actions] button,html[data-dsh-prts] [data-prts-session-actions] button{width: 28px !important; min-width: 28px !important; position: relative; isolation: isolate; overflow: hidden; border: 0 !important; border-radius: 0 !important; background: var(--prts-line) !important; clip-path: polygon( 1px 0,calc(100% - 1px) 0,100% 1px,100% calc(50% - 5px),calc(100% - 2px) calc(50% - 3px),calc(100% - 2px) calc(50% + 3px),100% calc(50% + 5px),100% calc(100% - 1px),calc(100% - 1px) 100%,1px 100%,0 calc(100% - 1px),0 calc(50% + 5px),2px calc(50% + 3px),2px calc(50% - 3px),0 calc(50% - 5px),0 1px ) !important}html[data-dsh-prts] [data-prts-workspace-actions] button::before,html[data-dsh-prts] [data-prts-session-actions] button::before{content: \"\"; position: absolute; z-index: -1; inset: 1px; background: var(--prts-panel-raised); clip-path: polygon( 0 0,100% 0,100% calc(50% - 4px),calc(100% - 2px) calc(50% - 2px),calc(100% - 2px) calc(50% + 2px),100% calc(50% + 4px),100% 100%,0 100%,0 calc(50% + 4px),2px calc(50% + 2px),2px calc(50% - 2px),0 calc(50% - 4px) ); pointer-events: none}html[data-dsh-prts] [data-prts-workspace-actions] button:is(:hover,:focus-visible),html[data-dsh-prts] [data-prts-session-actions] button:is(:hover,:focus-visible){background: var(--prts-yellow) !important}html[data-dsh-prts] [data-prts-session-time]{position: relative; z-index: 3; flex: 0 0 auto; margin-right: 39px; padding-left: 8px; transform: translate3d(var(--prts-row-shift),0,0); transition: opacity 120ms ease,transform 220ms var(--prts-ease-spring)}html[data-dsh-prts] [data-prts-session-row]:hover [data-prts-session-time]{opacity: 0}html[data-dsh-prts] [data-composer-card],html[data-dsh-prts] [data-prts-composer-fallback]{position: relative; isolation: isolate; overflow: visible; border: 0 !important; border-radius: 0 !important; background: transparent !important; box-shadow: none !important; clip-path: none !important; backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-composer-card]::before,html[data-dsh-prts] [data-prts-composer-fallback]::before{content: \"\"; position: absolute; z-index: 0; inset: 0; background: var(--prts-line-strong); clip-path: polygon( 3px 0,calc(50% - 42px) 0,calc(50% - 37px) 5px,calc(50% + 37px) 5px,calc(50% + 42px) 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px ); box-shadow: 0 14px 34px rgba(0,0,0,.18); pointer-events: none}html[data-dsh-prts] [data-composer-card]::after,html[data-dsh-prts] [data-prts-composer-fallback]::after{content: \"\"; position: absolute; z-index: 1; inset: 1px 1px 3px; background: var(--prts-composer-surface,var(--prts-active-glass)); clip-path: polygon( 2px 0,calc(50% - 41px) 0,calc(50% - 36px) 5px,calc(50% + 36px) 5px,calc(50% + 41px) 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px ); backdrop-filter: var(--prts-active-glass-filter); -webkit-backdrop-filter: var(--prts-active-glass-filter); pointer-events: none}html[data-dsh-prts] [data-composer-card] > :not([data-prts-composer-signal]):not([data-slot=\"conversation.input.attachments\"]),html[data-dsh-prts] [data-prts-composer-fallback] > :not([data-prts-composer-signal]):not([data-slot=\"conversation.input.attachments\"]){position: relative; z-index: 2}html[data-dsh-prts] [data-composer-card] > [data-slot=\"conversation.input.attachments\"] > *,html[data-dsh-prts] [data-prts-composer-fallback] > [data-slot=\"conversation.input.attachments\"] > *{position: relative; z-index: 2}html[data-dsh-prts] [data-prts-composer-signal]{position: absolute; z-index: 3; inset: 0; overflow: visible; pointer-events: none}html[data-dsh-prts] [data-prts-composer-signal]::before{content: \"\"; position: absolute; left: 50%; background: var(--prts-yellow); opacity: .82; pointer-events: none; transition: transform 160ms var(--prts-ease-snap),opacity 160ms ease}html[data-dsh-prts] [data-prts-composer-signal]::before{bottom: 0; width: calc(100% - 6px); height: 3px; transform: translateX(-50%) scaleX(.16)}html[data-dsh-prts] [data-composer-card]:focus-within,html[data-dsh-prts] [data-prts-composer-fallback]:focus-within{--prts-composer-surface: color-mix(in srgb,var(--prts-active-glass) 94%,var(--prts-ink) 6%)}html[data-dsh-prts] :is([data-composer-card],[data-prts-composer-fallback]):focus-within [data-prts-composer-signal]::before{opacity: 1; transform: translateX(-50%) scaleX(1)}html[data-dsh-prts] [data-composer-card] textarea:focus-visible,html[data-dsh-prts] [data-prts-composer-fallback] textarea:focus-visible{outline: none !important}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] [data-prts-composer-signal]::before{transition: none}}html[data-dsh-prts] [data-prts-theme-settings] :is(input,textarea,select):focus-visible,html[data-dsh-prts] [data-prts-floating-input]:focus-visible{outline: none !important; border-color: var(--prts-yellow) !important; box-shadow: 0 0 0 1px var(--prts-yellow) !important}html[data-dsh-prts] [data-prts-conversation-control=\"header\"]{height: 36px; min-height: 36px; display: inline-flex; align-items: center; gap: 6px; padding: 0 10px}html[data-dsh-prts] [data-prts-conversation-control=\"header\"] svg{width: 16px; height: 16px; flex: 0 0 16px}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button[aria-label*=\"send\" i],html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button[type=\"submit\"]{min-width: 40px !important; padding: 0 !important; font-size: 11px}html[data-dsh-prts] [data-prts-hero-active] [data-prts-glass-control=\"action\"]{width: 36px !important; min-width: 36px !important; padding: 0 !important; flex: 0 0 36px}html[data-dsh-prts] :is( [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *):not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-composer-fallback] button:not([data-slot=\"conversation.input.attachments\"] *):not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-glass-control],[data-prts-conversation-control]:not([data-prts-conversation-control=\"micro\"]),[data-produced-files-row] > button[type=\"button\"] ){--prts-control-outline: var(--prts-line); --prts-control-surface: var(--prts-panel-raised); position: relative; isolation: isolate; overflow: hidden; border: 0 !important; border-radius: 0 !important; background: var(--prts-control-outline) !important; color: var(--prts-ink) !important; clip-path: polygon( 3px 0,calc(100% - 3px) 0,100% 3px,100% calc(100% - 3px),calc(100% - 3px) 100%,3px 100%,0 calc(100% - 3px),0 3px ) !important}html[data-dsh-prts] :is( [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *):not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-composer-fallback] button:not([data-slot=\"conversation.input.attachments\"] *):not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-glass-control],[data-prts-conversation-control]:not([data-prts-conversation-control=\"micro\"]),[data-produced-files-row] > button[type=\"button\"] )::before{content: \"\"; position: absolute; z-index: -1; inset: 1px; background: var(--prts-control-surface); clip-path: polygon( 2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px ); pointer-events: none}html[data-dsh-prts] :is( [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *):not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-composer-fallback] button:not([data-slot=\"conversation.input.attachments\"] *):not([data-prts-glass-menu] *):not([data-prts-floating-glass] *):not([role=\"menu\"] *):not([role=\"listbox\"] *),[data-prts-glass-control],[data-prts-conversation-control]:not([data-prts-conversation-control=\"micro\"]),[data-produced-files-row] > button[type=\"button\"] ):is(:hover,:focus-visible){--prts-control-outline: var(--prts-yellow)}html[data-dsh-prts] :is( [data-prts-glass-control=\"model\"],[data-prts-glass-control=\"permission\"],[data-prts-glass-control=\"preset\"],[data-prts-conversation-control=\"utility\"],[data-produced-files-row] > button[type=\"button\"] ){--prts-control-surface: var(--prts-active-glass) !important}html[data-dsh-prts] [data-composer-card] button[aria-label*=\"send\" i],html[data-dsh-prts] [data-composer-card] button[type=\"submit\"],html[data-dsh-prts] [data-prts-conversation-control=\"cta\"]{font-size: 11px; --prts-control-outline: var(--prts-yellow) !important; --prts-control-surface: var(--prts-yellow) !important; color: var(--prts-yellow-ink) !important}html[data-dsh-prts] [data-prts-conversation-control=\"danger\"]{--prts-control-outline: var(--prts-red) !important; --prts-control-surface: color-mix(in srgb,var(--prts-red) 14%,var(--prts-panel-raised)) !important; color: var(--prts-red) !important}html[data-dsh-prts] [data-prts-hero-active]{--prts-hero-narrow-spacer: clamp(24px,8dvh,72px); --prts-hero-wide-spacer: clamp(96px,22dvh,340px); min-height: 100%; height: calc(100% - 48px) !important; overflow-y: auto; display: grid; grid-template-columns: minmax(0,1fr); grid-template-rows: minmax(0,1fr) auto min( var(--prts-hero-wide-spacer),max(var(--prts-hero-narrow-spacer),calc(var(--prts-hero-narrow-spacer) + 63vw - 403.2px)) ); align-content: stretch; gap: clamp(24px,calc(5vw - 8px),40px); padding: clamp(18px,calc(1.875vw + 6px),24px) clamp(12px,3vw,42px) 0 clamp(18px,3vw,42px)}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card],html[data-dsh-prts] [data-prts-hero-active] [data-prts-composer-fallback]{width: 100%; margin-inline: auto; padding: 10px 12px}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] textarea,html[data-dsh-prts] [data-prts-hero-active] [data-prts-composer-fallback] textarea{min-height: 64px; line-height: 1.55; resize: vertical}html[data-dsh-prts] [data-prts-hero-active] [data-composer-card] button:not([data-slot=\"conversation.input.attachments\"] *),html[data-dsh-prts] [data-prts-hero-active] [data-prts-glass-control]{min-height: 36px}html[data-dsh-prts] [data-prts-hero-active]::before{margin-top: calc(var(--prts-hero-mark-size) + 44px)}html[data-dsh-prts] [data-prts-hero-active] [data-phase=\"hero\"]{grid-row: 1; min-height: 0; align-self: stretch}html[data-dsh-prts] [data-prts-hero-active] [data-composer-seat]{grid-row: 2; width: min(calc(780px + 32px),100%); min-width: 0 !important; align-self: end; justify-self: center}html[data-dsh-prts] [data-prts-theme-settings]{--prts-settings-text: .875rem; --prts-settings-small: .75rem; --prts-settings-heading: .875rem; position: fixed; z-index: 10000; inset: 50% auto auto 50%; width: min(clamp(50rem,55vw,65rem),calc(100vw - 2rem)); height: auto; max-width: none; max-height: min(60rem,calc(100dvh - 2rem)); container: prts-settings / inline-size; margin: 0; padding: 0; overflow: visible; border: 0; border-radius: 0; background: transparent; color: var(--prts-ink); box-shadow: 0 28px 90px rgba(0,0,0,.46); clip-path: none; opacity: 0; transform: translate(-50%,calc(-50% + 8px)) scale(.992); pointer-events: none; transition: opacity 150ms ease,transform 220ms var(--prts-ease-spring)}html[data-dsh-prts] [data-prts-theme-settings][open]{display: block}html[data-dsh-prts] [data-prts-theme-settings][data-prts-settings-visible]{opacity: 1; transform: translate(-50%,-50%) scale(1); pointer-events: auto}html[data-dsh-prts] [data-prts-theme-settings][data-prts-resizing]{transition: none}html[data-dsh-prts] [data-prts-theme-settings][data-prts-resizing]::backdrop,html[data-dsh-prts] [data-prts-settings-backdrop][data-prts-resizing]{backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-prts-theme-settings][data-prts-resizing] [data-prts-option-sample=\"glass\"]::after{backdrop-filter: none; -webkit-backdrop-filter: none; transition: none}html[data-dsh-prts] [data-prts-theme-settings]::before{content: none}html[data-dsh-prts] [data-prts-theme-settings]::backdrop{background: color-mix(in srgb,var(--prts-canvas) 72%,transparent); backdrop-filter: blur(5px) saturate(.82); -webkit-backdrop-filter: blur(5px) saturate(.82)}html[data-dsh-prts] [data-prts-settings-backdrop]{z-index: 9999; inset: 0; background: color-mix(in srgb,var(--prts-canvas) 72%,transparent); backdrop-filter: blur(5px) saturate(.82); -webkit-backdrop-filter: blur(5px) saturate(.82)}html[data-dsh-prts] [data-prts-settings-frame]{position: relative; height: auto; max-height: inherit; display: grid; grid-template-rows: auto minmax(0,1fr); overflow: hidden; isolation: isolate; border: 1px solid var(--prts-line-strong); background: linear-gradient(125deg,color-mix(in srgb,var(--prts-cyan) 4%,transparent),transparent 34%),var(--prts-panel); clip-path: polygon(4px 0,calc(100% - 38px) 0,100% 38px,100% calc(100% - 4px),calc(100% - 4px) 100%,4px 100%,0 calc(100% - 4px),0 4px)}html[data-dsh-prts] [data-prts-settings-frame]::before{content: \"\"; position: absolute; z-index: 3; top: 0; right: 37px; width: 118px; height: 2px; background: var(--prts-cyan); pointer-events: none}html[data-dsh-prts] [data-prts-theme-settings-header]{display: grid; align-items: center; min-height: 68px; grid-template-columns: minmax(180px,auto) minmax(0,1fr); gap: 14px; padding: 13px 48px 12px 16px; border-bottom: 1px solid var(--prts-line-strong); background: color-mix(in srgb,var(--prts-canvas-elevated) 92%,transparent)}html[data-dsh-prts] [data-prts-theme-settings-header] > span{display: grid; gap: 4px}html[data-dsh-prts] [data-prts-theme-settings-header] small,html[data-dsh-prts] [data-prts-theme-settings] section > header small,html[data-dsh-prts] [data-prts-theme-settings] summary small,html[data-dsh-prts] [data-prts-settings-actions] small{color: var(--prts-muted); font: 700 8px/1.3 var(--prts-mono); letter-spacing: .08em}html[data-dsh-prts] [data-prts-theme-settings-header] strong{font: 800 19px/1 var(--prts-display); letter-spacing: .07em}html[data-dsh-prts] [data-prts-settings-summary]{display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px}html[data-dsh-prts] [data-prts-settings-summary] span{min-height: 22px; padding: 4px 7px; box-shadow: inset 0 0 0 1px var(--prts-line); background: color-mix(in srgb,var(--prts-panel-raised) 86%,transparent); color: var(--prts-cyan); font: 700 8px/1 var(--prts-mono); clip-path: polygon(2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px)}html[data-dsh-prts] [data-prts-theme-settings-close]{position: absolute; z-index: 5; top: 13px; right: 13px; width: 36px; height: 36px; color: var(--prts-ink)}html[data-dsh-prts] [data-prts-theme-settings-scroll]{min-height: 0; overflow-y: auto; padding: 12px; scrollbar-gutter: stable}html[data-dsh-prts] [data-prts-settings-presets],html[data-dsh-prts] [data-prts-settings-common],html[data-dsh-prts] [data-prts-settings-advanced],html[data-dsh-prts] [data-prts-settings-actions]{position: relative; margin: 0; overflow: hidden; border: 0; border-bottom: 1px solid var(--prts-line-strong); background: color-mix(in srgb,var(--prts-canvas-elevated) 82%,transparent); clip-path: none}html[data-dsh-prts] [data-prts-settings-presets] > header,html[data-dsh-prts] [data-prts-settings-common] > header{min-height: 42px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 11px; border-bottom: 1px solid color-mix(in srgb,var(--prts-line) 72%,transparent)}html[data-dsh-prts] [data-prts-settings-presets] > header span,html[data-dsh-prts] [data-prts-settings-common] > header span,html[data-dsh-prts] [data-prts-settings-advanced] summary > span{display: flex; align-items: baseline; gap: 9px}html[data-dsh-prts] [data-prts-settings-presets] > header strong,html[data-dsh-prts] [data-prts-settings-common] > header strong,html[data-dsh-prts] [data-prts-settings-advanced] summary strong{font: 800 13px/1 var(--prts-display); letter-spacing: .05em}html[data-dsh-prts] [data-prts-advanced-summary]{pointer-events: none; color: var(--prts-cyan); font: 800 8px/1 var(--prts-mono); letter-spacing: .06em}html[data-dsh-prts] [data-prts-settings-presets],html[data-dsh-prts] [data-prts-settings-common],html[data-dsh-prts] [data-prts-settings-advanced],html[data-dsh-prts] [data-prts-settings-actions]{border-inline: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-settings-presets]{border-top: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-settings-presets] > div{display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 0; padding: 0}html[data-dsh-prts] [data-prts-preset-card]{display: grid; text-align: left; min-height: 66px; align-content: center; gap: 6px; padding: 11px 12px !important; border-right: 1px solid var(--prts-line) !important; position: relative; overflow: hidden; box-shadow: none; background: transparent !important; clip-path: none}html[data-dsh-prts] [data-prts-preset-card]:last-child{border-right: 0 !important}html[data-dsh-prts] [data-prts-preset-card] strong{font-size: 12px}html[data-dsh-prts] [data-prts-preset-card] span{overflow: hidden; font-size: 8px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap}html[data-dsh-prts] [data-prts-preset-card].is-selected{box-shadow: inset 0 -2px 0 var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 9%,transparent) !important}html[data-dsh-prts] [data-prts-settings-common-grid]{display: grid; grid-template-columns: repeat(2,minmax(0,1fr))}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{min-height: 50px; grid-template-columns: 94px minmax(0,1fr); align-items: center; gap: 8px; padding: 7px 10px; border-right: 1px solid var(--prts-line); border-bottom: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:nth-child(2n){border-right: 0}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:nth-last-child(-n + 2){border-bottom: 0}html[data-dsh-prts] [data-prts-setting-row] > div{min-width: 0; display: flex; gap: 4px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row] > span{min-width: 0; display: grid; gap: 3px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row] > span > strong{font: 700 9px/1.1 var(--prts-display)}html[data-dsh-prts] [data-prts-setting-note]{color: var(--prts-yellow); font: 700 7px/1.25 var(--prts-mono); letter-spacing: 0}html[data-dsh-prts] [data-prts-settings-common] button[data-prts-setting-key]{min-width: 0; flex: 1 1 0; display: inline-flex; align-items: center; justify-content: center; gap: 5px}html[data-dsh-prts] [data-prts-option-sample]{position: relative; width: 22px; height: 14px; flex: 0 0 22px; overflow: hidden; border: 1px solid color-mix(in srgb,currentColor 45%,var(--prts-line)); background: var(--prts-canvas)}html[data-dsh-prts] [data-prts-option-sample=\"texture\"][data-prts-option-sample-value=\"off\"]{background: linear-gradient(var(--prts-line),var(--prts-line)) 50% 50% / 12px 1px no-repeat,var(--prts-canvas)}html[data-dsh-prts] [data-prts-option-sample=\"texture\"][data-prts-option-sample-value=\"restrained\"]{background: repeating-linear-gradient(115deg,var(--prts-canvas) 0 6px,color-mix(in srgb,var(--prts-cyan) 38%,var(--prts-canvas)) 6px 7px)}html[data-dsh-prts] [data-prts-option-sample=\"texture\"][data-prts-option-sample-value=\"full\"]{background: repeating-linear-gradient(115deg,transparent 0 4px,color-mix(in srgb,var(--prts-cyan) 62%,transparent) 4px 5px),repeating-linear-gradient(25deg,var(--prts-canvas) 0 7px,color-mix(in srgb,var(--prts-line-strong) 72%,var(--prts-canvas)) 7px 8px)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"]{background: linear-gradient(135deg,color-mix(in srgb,var(--prts-cyan) 54%,transparent) 25%,transparent 25%) 0 0 / 8px 8px,linear-gradient(315deg,color-mix(in srgb,var(--prts-yellow) 38%,transparent) 25%,transparent 25%) 4px 4px / 8px 8px,var(--prts-canvas)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"]::after{content: \"\"; position: absolute; inset: 0; background: color-mix(in srgb,var(--prts-panel-raised) 64%,transparent); backdrop-filter: blur(2px) saturate(1.15); -webkit-backdrop-filter: blur(2px) saturate(1.15)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"off\"]::after{background: var(--prts-panel-raised); backdrop-filter: none; -webkit-backdrop-filter: none}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"soft\"]::after{background: color-mix(in srgb,var(--prts-panel-raised) 82%,transparent); backdrop-filter: blur(1px); -webkit-backdrop-filter: blur(1px)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"standard\"]::after{background: color-mix(in srgb,var(--prts-panel-raised) 62%,transparent)}html[data-dsh-prts] [data-prts-option-sample=\"glass\"][data-prts-option-sample-value=\"clear\"]::after{background: color-mix(in srgb,var(--prts-panel-raised) 34%,transparent); backdrop-filter: blur(4px) saturate(1.35); -webkit-backdrop-filter: blur(4px) saturate(1.35)}html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key],html[data-dsh-prts] [data-prts-retry-save],html[data-dsh-prts] [data-prts-reset-visual],html[data-dsh-prts] [data-prts-reset-confirm-action],html[data-dsh-prts] [data-prts-reset-cancel]{position: relative; overflow: hidden; min-height: 30px; padding: 6px 8px; border: 0 !important; box-shadow: inset 0 0 0 1px var(--prts-line); background: var(--prts-panel-raised); color: var(--prts-muted); font: 700 8px/1 var(--prts-mono); white-space: nowrap; clip-path: polygon(2px 0,calc(100% - 2px) 0,100% 2px,100% calc(100% - 2px),calc(100% - 2px) 100%,2px 100%,0 calc(100% - 2px),0 2px)}html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key].is-selected{box-shadow: inset 0 0 0 1px var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 12%,var(--prts-panel-raised)); color: var(--prts-ink); html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key]::after{content: \"\"; position: absolute; z-index: 3; inset: 0; opacity: 0; box-shadow: inset 0 0 0 1px var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 18%,transparent); pointer-events: none}html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key][data-prts-setting-feedback]::after{opacity: 1}}html[data-dsh-prts] [data-prts-theme-settings] button:focus-visible,html[data-dsh-prts] [data-prts-theme-settings] summary:focus-visible,html[data-dsh-prts] [data-prts-theme-settings] input:focus-visible{outline: 2px solid var(--prts-cyan); outline-offset: 2px}html[data-dsh-prts] [data-prts-settings-advanced] summary{min-height: 52px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px; cursor: pointer; list-style: none}html[data-dsh-prts] [data-prts-settings-advanced] summary::-webkit-details-marker{display: none}html[data-dsh-prts] [data-prts-settings-advanced] summary::after{content: \"+\"; width: 24px; height: 24px; display: grid; place-items: center; margin-left: 2px; border: 1px solid var(--prts-line); color: var(--prts-cyan); font: 800 13px/1 var(--prts-mono)}html[data-dsh-prts] [data-prts-settings-advanced][open] summary::after{content: \"−\"}html[data-dsh-prts] [data-prts-settings-advanced-content]{display: grid; grid-template-columns: minmax(0,1fr); border-top: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-settings-advanced-content] > section{padding: 11px}html[data-dsh-prts] [data-prts-settings-advanced-content] > section + section{border-left: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-advanced-content] section > header{min-height: 30px; display: grid; gap: 4px}html[data-dsh-prts] [data-prts-settings-advanced-content] section > header strong{font-size: 10px}html[data-dsh-prts] [data-prts-settings-advanced-content] section > header span{color: var(--prts-muted); font-size: 8px}html[data-dsh-prts] [data-prts-particle-detail] > div{display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 5px; margin-top: 8px}html[data-dsh-prts] [data-prts-particle-detail] button[role=\"radio\"]{min-width: 0; display: grid; gap: 5px}html[data-dsh-prts] [data-prts-particle-detail-preview]{height: 32px; display: grid; grid-template-columns: repeat(6,1fr); place-items: center; overflow: hidden; border: 1px solid color-mix(in srgb,currentColor 44%,transparent)}html[data-dsh-prts] [data-prts-particle-detail-preview] b{width: 2px; height: 2px; background: currentColor}html[data-dsh-prts] [data-prts-particle-traversal]{margin-top: 9px; padding-top: 9px; border-top: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-particle-traversal] > span{display: grid; gap: 3px}html[data-dsh-prts] [data-prts-particle-traversal] > span strong{font-size: 9px}html[data-dsh-prts] [data-prts-particle-traversal] > span small{color: var(--prts-muted); font: 600 8px/1.35 var(--prts-mono)}html[data-dsh-prts] [data-prts-particle-traversal-output]{min-width: 132px; color: var(--prts-cyan); font: 800 8px/1.2 var(--prts-mono); text-align: right}html[data-dsh-prts] [data-prts-particle-error]{margin: 8px 0 0; color: var(--prts-yellow); font: 700 8px/1.4 var(--prts-mono)}html[data-dsh-prts] [data-prts-setting-range-row]{display: grid; gap: 7px; padding: 8px 0 0; border: 0}html[data-dsh-prts] [data-prts-setting-range-row] > div{display: flex; align-items: center; gap: 8px}html[data-dsh-prts] [data-prts-setting-range-row] input[type=\"range\"]{min-width: 0; flex: 1}html[data-dsh-prts] [data-prts-setting-range]{accent-color: var(--prts-cyan)}html[data-dsh-prts] [data-prts-settings-actions]{min-height: 58px; display: block; padding: 0; border-bottom: 1px solid var(--prts-line-strong)}html[data-dsh-prts] [data-prts-persistence-error],html[data-dsh-prts] [data-prts-reset-zone]{min-height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 11px}html[data-dsh-prts] [data-prts-persistence-error]{border-bottom: 1px solid var(--prts-yellow); background: color-mix(in srgb,var(--prts-yellow) 7%,transparent)}html[data-dsh-prts] [data-prts-persistence-error] > span,html[data-dsh-prts] [data-prts-reset-zone] > span{display: grid; gap: 4px}html[data-dsh-prts] [data-prts-persistence-error] strong{color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-reset-visual],html[data-dsh-prts] [data-prts-reset-confirm-action]{color: var(--prts-yellow); box-shadow: inset 0 0 0 1px var(--prts-yellow)}html[data-dsh-prts] [data-prts-reset-confirm]{display: flex; align-items: center; justify-content: flex-end; gap: 5px; color: var(--prts-yellow); font: 700 8px/1.3 var(--prts-mono)}html[data-dsh-prts] [hidden]{display: none !important}html[data-dsh-prts] :is( [data-prts-theme-settings-header] small,[data-prts-theme-settings] section > header small,[data-prts-theme-settings] summary small,[data-prts-settings-actions] small,[data-prts-settings-summary] span,[data-prts-advanced-summary],[data-prts-preset-card] span,[data-prts-setting-note],[data-prts-settings-advanced-content] section > header span,[data-prts-particle-error],[data-prts-reset-confirm] ){font-size: var(--prts-settings-small); line-height: 1.4}html[data-dsh-prts] :is( [data-prts-settings-presets] > header strong,[data-prts-settings-common] > header strong,[data-prts-settings-advanced] summary strong,[data-prts-preset-card] strong,[data-prts-settings-common] [data-prts-setting-row] > span > strong,[data-prts-settings-advanced-content] section > header strong,[data-prts-theme-settings] button[data-prts-setting-key],[data-prts-retry-save],[data-prts-reset-visual],[data-prts-reset-confirm-action],[data-prts-reset-cancel] ){font-size: var(--prts-settings-text); line-height: 1.25}html[data-dsh-prts] [data-prts-theme-settings-header] strong{font-size: 1.375rem; line-height: 1.1}html[data-dsh-prts] [data-prts-settings-summary] span{min-height: 28px; padding: 6px 9px}html[data-dsh-prts] [data-prts-preset-card]{min-height: 84px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{min-height: 72px; grid-template-columns: minmax(7.5rem,auto) minmax(0,1fr)}html[data-dsh-prts] :is( [data-prts-theme-settings] button[data-prts-setting-key],[data-prts-retry-save],[data-prts-reset-visual],[data-prts-reset-confirm-action],[data-prts-reset-cancel] ){min-height: 40px; padding: 8px 10px}@container prts-settings (max-width: 52rem){html[data-dsh-prts] [data-prts-settings-common-grid],html[data-dsh-prts] [data-prts-settings-advanced-content]{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{border-right: 0}html[data-dsh-prts] [data-prts-settings-advanced-content] > section + section{border-left: 0; border-top: 1px solid var(--prts-line)}}@media (max-height: 820px) and (min-width: 721px){html[data-dsh-prts] [data-prts-theme-settings-header]{min-height: 60px; padding-block: 10px}html[data-dsh-prts] [data-prts-theme-settings-close]{top: 10px}}@media (max-width: 720px){html[data-dsh-prts] [data-prts-theme-settings]{inset: 0; width: 100vw; height: 100dvh; max-height: none; margin: 0; transform: translateY(10px)}html[data-dsh-prts] [data-prts-theme-settings][data-prts-settings-visible]{transform: translateY(0)}html[data-dsh-prts] [data-prts-settings-frame]{height: 100%; max-height: none; clip-path: none; border: 0}html[data-dsh-prts] [data-prts-settings-frame]::before{right: 0}html[data-dsh-prts] [data-prts-theme-settings-header]{grid-template-columns: minmax(0,1fr); padding: 12px 48px 11px 13px}html[data-dsh-prts] [data-prts-settings-summary]{display: none}html[data-dsh-prts] [data-prts-theme-settings-scroll]{padding: 8px; scrollbar-gutter: auto}html[data-dsh-prts] [data-prts-settings-presets] > div{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-preset-card]{min-height: 54px; border-right: 0 !important; border-bottom: 1px solid var(--prts-line) !important}html[data-dsh-prts] [data-prts-preset-card]:last-child{border-bottom: 0 !important}html[data-dsh-prts] [data-prts-settings-common-grid]{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{min-height: 62px}html[data-dsh-prts] [data-prts-settings-common] button[data-prts-setting-key]{min-height: 40px}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]{border-right: 0; border-bottom: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:nth-last-child(2){border-bottom: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-settings-common] [data-prts-setting-row]:last-child{border-bottom: 0}html[data-dsh-prts] [data-prts-settings-advanced-content]{grid-template-columns: minmax(0,1fr)}html[data-dsh-prts] [data-prts-settings-advanced-content] > section + section{border-left: 0; border-top: 1px solid var(--prts-line)}html[data-dsh-prts] [data-prts-reset-zone]{align-items: flex-start; flex-direction: column}html[data-dsh-prts] [data-prts-reset-confirm]{width: 100%; flex-wrap: wrap; justify-content: flex-start}}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts] [data-prts-theme-settings] button[data-prts-setting-key][data-prts-setting-feedback]::after{animation: prts-setting-feedback 300ms ease-out both}}@keyframes prts-setting-feedback{0%{opacity: .82}100%{opacity: 0}}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] [data-prts-theme-settings]{transition-duration: 1ms}}@media (prefers-reduced-transparency: reduce){html[data-dsh-prts] [data-prts-theme-settings]::backdrop,html[data-dsh-prts] [data-prts-settings-backdrop]{background: color-mix(in srgb,var(--prts-canvas) 94%,transparent); backdrop-filter: none; -webkit-backdrop-filter: none}}html[data-dsh-prts] [data-prts-facility-defs]{position: absolute; width: 0; height: 0; overflow: hidden; pointer-events: none}html[data-dsh-prts] [data-prts-facility-svg]{position: absolute; z-index: -1; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none}html[data-dsh-prts] [data-prts-facility-layer=\"surface\"]{fill: var(--prts-facility-surface,var(--prts-panel-raised))}html[data-dsh-prts] [data-prts-facility-layer=\"texture\"]{fill: none; opacity: 0; pointer-events: none; transition: opacity 160ms ease}html[data-dsh-prts] [data-prts-facility-layer=\"outline\"]{fill: none; stroke: var(--prts-facility-outline,var(--prts-line-strong)); stroke-width: 1; stroke-linejoin: miter; stroke-miterlimit: 2; vector-effect: non-scaling-stroke; shape-rendering: geometricPrecision; pointer-events: none}html[data-dsh-prts] [data-prts-facility-vector][data-prts-facility-texture=\"grid\"] [data-prts-facility-layer=\"texture\"]{fill: var(--prts-facility-texture-color,var(--prts-cyan)); opacity: var(--prts-facility-texture-opacity,.12); mask: url(\"#prts-facility-grid-mask\")}html[data-dsh-prts] [data-prts-facility-vector][data-prts-facility-texture=\"scanline\"] [data-prts-facility-layer=\"texture\"]{fill: var(--prts-facility-texture-color,var(--prts-cyan)); opacity: var(--prts-facility-texture-opacity,.1); mask: url(\"#prts-facility-scanline-mask\")}html[data-dsh-prts] [data-prts-workspace-row]{--prts-facility-texture-color: var(--prts-cyan); --prts-silhouette-fill: #f3f6f7; --prts-silhouette-far-opacity: .06; --prts-silhouette-near-opacity: .12}html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-workspace-row]{--prts-silhouette-fill: #3f4d56; --prts-silhouette-far-opacity: .13; --prts-silhouette-near-opacity: .26}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"],html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]){--prts-silhouette-far-opacity: .24; --prts-silhouette-near-opacity: .52}html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-workspace-row][aria-expanded=\"true\"],html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]){--prts-silhouette-far-opacity: .25; --prts-silhouette-near-opacity: .5}html[data-dsh-prts] [data-prts-facility-texture=\"silhouette\"] [data-prts-facility-layer=\"texture\"]{opacity: 0}html[data-dsh-prts] [data-prts-facility-silhouette]{fill: var(--prts-silhouette-fill); opacity: 0; pointer-events: none}html[data-dsh-prts] [data-prts-facility-texture=\"silhouette\"] [data-prts-facility-silhouette]{opacity: 1}html[data-dsh-prts] [data-prts-silhouette-layer]{transform-box: fill-box; transform-origin: left center; animation-timing-function: linear; animation-iteration-count: infinite; animation-play-state: paused; will-change: transform; transition: opacity 180ms ease}html[data-dsh-prts] [data-prts-silhouette-layer=\"far\"]{opacity: var(--prts-silhouette-far-opacity); animation-name: prts-silhouette-far-drift; animation-duration: 22.4s}html[data-dsh-prts] [data-prts-silhouette-layer=\"near\"]{opacity: var(--prts-silhouette-near-opacity); animation-name: prts-silhouette-near-drift; animation-duration: 6.4s}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts]:not([data-prts-motion=\"reduced\"]) [data-prts-workspace-row]:hover [data-prts-silhouette-layer]{animation-play-state: running}}@keyframes prts-silhouette-far-drift{to{transform: translate3d(-512px,0,0)}}@keyframes prts-silhouette-near-drift{to{transform: translate3d(-512px,0,0)}}html[data-dsh-prts] [data-prts-facility-texture=\"pickup\"] [data-prts-facility-layer=\"texture\"]{opacity: 0}html[data-dsh-prts] [data-prts-session-pickup]{color: var(--prts-session-pickup-fill); fill: currentColor; opacity: 0; transform: translate3d(5px,0,0); transform-box: view-box; transform-origin: center; transition: opacity 150ms ease,transform 240ms cubic-bezier(.22,1,.36,1); pointer-events: none}html[data-dsh-prts] [data-prts-session-row]:hover [data-prts-facility-texture=\"pickup\"] [data-prts-session-pickup]{opacity: .58; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-session-pickup-baseline]{fill: none; stroke: currentColor; stroke-width: 1; opacity: .2; vector-effect: non-scaling-stroke}html[data-dsh-prts] [data-prts-session-pickup-indicator]{fill: var(--prts-yellow)}html[data-dsh-prts] [data-prts-session-pickup-bar]{transform-box: fill-box; transform-origin: center}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(1){--prts-pickup-duration: 520ms; --prts-pickup-delay: -.12s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(2){--prts-pickup-duration: 1180ms; --prts-pickup-delay: -.28s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(3){--prts-pickup-duration: 760ms; --prts-pickup-delay: -.44s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(4){--prts-pickup-duration: 1420ms; --prts-pickup-delay: -.18s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(5){--prts-pickup-duration: 640ms; --prts-pickup-delay: -.36s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(6){--prts-pickup-duration: 980ms; --prts-pickup-delay: -.52s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(7){--prts-pickup-duration: 480ms; --prts-pickup-delay: -.22s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(8){--prts-pickup-duration: 1260ms; --prts-pickup-delay: -.46s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(9){--prts-pickup-duration: 720ms; --prts-pickup-delay: -.14s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(10){--prts-pickup-duration: 1520ms; --prts-pickup-delay: -.4s}html[data-dsh-prts] [data-prts-session-pickup-bar]:nth-of-type(11){--prts-pickup-duration: 560ms; --prts-pickup-delay: -.3s}@media (prefers-reduced-motion: no-preference){html[data-dsh-prts]:not([data-prts-motion=\"reduced\"]) [data-prts-session-row]:hover [data-prts-session-pickup-indicator]{animation: prts-session-record-indicator 1.1s ease-in-out infinite}html[data-dsh-prts]:not([data-prts-motion=\"reduced\"]) [data-prts-session-row]:hover [data-prts-session-pickup-bar]{animation: prts-session-pickup-sample var(--prts-pickup-duration) ease-in-out var(--prts-pickup-delay) infinite}}@keyframes prts-session-record-indicator{0%,100%{opacity: .45}50%{opacity: 1}}@keyframes prts-session-pickup-sample{0%,100%{transform: scaleY(.28)}34%{transform: scaleY(1.08)}57%{transform: scaleY(.46)}78%{transform: scaleY(.86)}}html[data-dsh-prts] [data-prts-session-row]{--prts-facility-texture-color: var(--prts-muted); --prts-session-pickup-fill: #f3f6f7}html[data-dsh-prts][data-prts-scheme=\"light\"] [data-prts-session-row]{--prts-session-pickup-fill: #3f4d56}html[data-dsh-prts] [data-prts-session-row][aria-selected=\"true\"]{--prts-facility-texture-color: var(--prts-yellow)}html[data-dsh-prts] [data-prts-workspace-row] > [data-prts-facility-spine],html[data-dsh-prts] [data-prts-session-row] > [data-prts-facility-spine]{--prts-facility-surface: var(--prts-line-strong); position: absolute !important; z-index: 2 !important; inset: 0 auto 0 0; height: 100% !important; isolation: isolate; width: var(--prts-spine-width); min-width: 0; transform: scaleX(var(--prts-spine-rest)) !important; transform-origin: left center; transition: transform 220ms var(--prts-ease-spring); pointer-events: none}html[data-dsh-prts] [data-prts-workspace-row] > [data-prts-facility-spine]{--prts-facility-surface: var(--prts-cyan)}html[data-dsh-prts] [data-prts-session-row][aria-selected=\"true\"] > [data-prts-facility-spine]{--prts-facility-surface: var(--prts-yellow)}html[data-dsh-prts] [data-prts-facility-spine] [data-prts-facility-layer=\"outline\"]{display: none}html[data-dsh-prts] [data-prts-workspace-row][aria-expanded=\"true\"] > [data-prts-facility-spine],html[data-dsh-prts] [data-prts-workspace-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) > [data-prts-facility-spine],html[data-dsh-prts] [data-prts-session-row]:is(:hover,:focus-within,[data-prts-row-menu-open]) > [data-prts-facility-spine]{transform: scaleX(1) !important}html[data-dsh-prts] [data-prts-workspace-row][data-prts-spine-vector]::before,html[data-dsh-prts] [data-prts-session-row][data-prts-spine-vector]::before{content: none !important; display: none !important}html[data-dsh-prts] [data-prts-facility-face][data-prts-facility-vector]{border: 0 !important; background: transparent !important; clip-path: none !important}html[data-dsh-prts] [data-prts-facility-face][data-prts-facility-vector]::after{content: none !important; display: none !important}html[data-dsh-prts] :is( [data-prts-workspace-actions],[data-prts-session-actions] ) button[data-prts-facility-vector]{--prts-facility-outline: var(--prts-line); --prts-facility-surface: var(--prts-panel-raised); overflow: visible; border: 0 !important; background: transparent !important; clip-path: none !important}html[data-dsh-prts] :is( [data-prts-workspace-actions],[data-prts-session-actions] ) button[data-prts-facility-vector]::before{content: none !important; display: none !important}html[data-dsh-prts] :is( [data-prts-workspace-actions],[data-prts-session-actions] ) button[data-prts-facility-vector]:is(:hover,:focus-visible){--prts-facility-outline: var(--prts-yellow); background: transparent !important}html[data-dsh-prts] [data-prts-startup]{--prts-startup-bg: #07090b; --prts-startup-ink: #e8edef; --prts-startup-muted: #7d898f; --prts-startup-line: #394349; --prts-startup-accent: #f0c800; --prts-startup-progress: 0; position: fixed; z-index: 2147480000; inset: 0; width: 100vw; max-width: none; height: 100dvh; max-height: none; min-height: 100dvh; margin: 0; padding: 0; border: 0; overflow: hidden; isolation: isolate; box-sizing: border-box; background: transparent; color: var(--prts-startup-ink); font-family: var(--prts-body,sans-serif); opacity: 0; outline: 0; pointer-events: auto; transition: opacity 120ms ease}html[data-dsh-prts] [data-prts-startup]::before,html[data-dsh-prts] [data-prts-startup]::after{content: \"\"; position: absolute; z-index: -3; top: 0; bottom: 0; width: calc(50% + 2px); background: var(--prts-startup-bg); transition: transform 350ms cubic-bezier(.76,0,.24,1)}html[data-dsh-prts] [data-prts-startup]::before{left: 0}html[data-dsh-prts] [data-prts-startup]::after{right: 0}html[data-dsh-prts] [data-prts-startup][data-visible]{opacity: 1}html[data-dsh-prts] [data-prts-startup][data-exiting]::before{transform: translate3d(-101%,0,0)}html[data-dsh-prts] [data-prts-startup][data-exiting]::after{transform: translate3d(101%,0,0)}html[data-dsh-prts] [data-prts-startup-grid]{position: absolute; z-index: -2; inset: 0; opacity: 0; background: linear-gradient(90deg,transparent calc(50% - .5px),rgba(232,237,239,.17) 50%,transparent calc(50% + .5px)),linear-gradient(0deg,transparent calc(50% - .5px),rgba(232,237,239,.09) 50%,transparent calc(50% + .5px)),repeating-linear-gradient(90deg,rgba(232,237,239,.045) 0 1px,transparent 1px 80px),repeating-linear-gradient(0deg,rgba(232,237,239,.035) 0 1px,transparent 1px 80px); transform: scale3d(1.04,1.04,1); transition: opacity 220ms linear,transform 520ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-grid]{opacity: 1; transform: scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup-scan]{position: absolute; z-index: 4; top: -18%; right: 0; left: 0; height: 18%; opacity: 0; background: linear-gradient(180deg,transparent,rgba(240,200,0,.035) 68%,rgba(240,200,0,.24)); border-bottom: 1px solid rgba(240,200,0,.62); pointer-events: none}html[data-dsh-prts] [data-prts-startup][data-visible]:not([data-reduced-motion]) [data-prts-startup-scan]{opacity: 1; animation: prts-startup-scan 1100ms linear 120ms 2 both}html[data-dsh-prts] [data-prts-startup-cut]{position: absolute; z-index: 6; top: -15%; width: 8px; height: 130%; opacity: 0; background: var(--prts-startup-accent); transform: skewX(-13deg) translate3d(0,0,0); pointer-events: none}html[data-dsh-prts] [data-prts-startup-cut=\"left\"]{left: calc(50% - 4px)}html[data-dsh-prts] [data-prts-startup-cut=\"right\"]{right: calc(50% - 4px)}html[data-dsh-prts] [data-prts-startup][data-exiting] [data-prts-startup-cut=\"left\"]{animation: prts-startup-cut-left 350ms cubic-bezier(.76,0,.24,1) both}html[data-dsh-prts] [data-prts-startup][data-exiting] [data-prts-startup-cut=\"right\"]{animation: prts-startup-cut-right 350ms cubic-bezier(.76,0,.24,1) both}html[data-dsh-prts] [data-prts-startup-header]{position: absolute; z-index: 2; top: clamp(22px,4.5dvh,52px); right: clamp(22px,4vw,68px); left: clamp(22px,4vw,68px); display: flex; align-items: baseline; justify-content: space-between; gap: 24px; padding-bottom: 10px; border-bottom: 1px solid var(--prts-startup-line); opacity: 0; transform: translate3d(0,-9px,0); transition: opacity 180ms linear 60ms,transform 320ms cubic-bezier(.16,1,.3,1) 60ms}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-header]{opacity: 1; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-startup-header] span{font: 800 clamp(10px,1vw,13px)/1 var(--prts-display,sans-serif); letter-spacing: .18em}html[data-dsh-prts] [data-prts-startup-header] small,html[data-dsh-prts] [data-prts-startup-telemetry],html[data-dsh-prts] [data-prts-startup-coordinate]{color: var(--prts-startup-muted); font: 700 8px/1.35 var(--prts-mono,monospace); letter-spacing: .12em}html[data-dsh-prts] [data-prts-startup-telemetry]{position: absolute; z-index: 2; top: 50%; left: clamp(22px,4vw,68px); display: grid; gap: 12px; padding-left: 12px; border-left: 2px solid var(--prts-startup-accent); opacity: 0; transform: translate3d(-9px,-50%,0); transition: opacity 200ms linear 100ms,transform 360ms cubic-bezier(.16,1,.3,1) 100ms}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-telemetry]{opacity: 1; transform: translate3d(0,-50%,0)}html[data-dsh-prts] [data-prts-startup-core]{position: absolute; z-index: 3; top: 49%; left: 50%; width: min(76vw,560px); display: grid; justify-items: center; gap: clamp(15px,2.4dvh,26px); transform: translate3d(-50%,-50%,0)}html[data-dsh-prts] [data-prts-startup-frame]{position: relative; width: clamp(220px,27vw,320px); aspect-ratio: 1; display: grid; place-items: center}html[data-dsh-prts] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup-frame-inner]{position: absolute; inset: 15%; border: 1px solid var(--prts-startup-line); opacity: 0; transform: rotate(45deg) scale3d(.72,.72,1); transition: opacity 160ms linear,transform 420ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup-frame-inner]{inset: 23%; border-color: rgba(240,200,0,.76); transform: rotate(-45deg) scale3d(.68,.68,1); transition-delay: 80ms}html[data-dsh-prts] [data-prts-startup-reticle]{position: absolute; inset: 7%; opacity: 0; background: linear-gradient(var(--prts-startup-accent),var(--prts-startup-accent)) 50% 0 / 1px 15% no-repeat,linear-gradient(var(--prts-startup-accent),var(--prts-startup-accent)) 50% 100% / 1px 15% no-repeat,linear-gradient(90deg,var(--prts-startup-accent),var(--prts-startup-accent)) 0 50% / 15% 1px no-repeat,linear-gradient(90deg,var(--prts-startup-accent),var(--prts-startup-accent)) 100% 50% / 15% 1px no-repeat; transform: scale3d(.8,.8,1); transition: opacity 160ms linear,transform 400ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup-emblem]{position: relative; z-index: 2; width: 180px; max-width: 62%; height: auto; display: block; opacity: 0; clip-path: inset(48% 0 48% 0); transform: scale3d(.96,.96,1); transition: opacity 160ms linear,clip-path 380ms cubic-bezier(.16,1,.3,1),transform 420ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"linking\"] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-stage=\"authenticating\"] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-frame-outer]{opacity: .92; transform: rotate(45deg) scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"authenticating\"] :is([data-prts-startup-frame-inner],[data-prts-startup-reticle]),html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] :is([data-prts-startup-frame-inner],[data-prts-startup-reticle]),html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] :is([data-prts-startup-frame-inner],[data-prts-startup-reticle]){opacity: 1; transform: rotate(-45deg) scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"authenticating\"] [data-prts-startup-reticle],html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] [data-prts-startup-reticle],html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-reticle]{transform: scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup][data-stage=\"visualOnline\"] [data-prts-startup-emblem],html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-emblem]{opacity: 1; clip-path: inset(0 0 0 0); transform: scale3d(1,1,1)}html[data-dsh-prts] [data-prts-startup-signature]{min-height: 44px; display: flex; align-items: center; gap: 10px; opacity: 0; transform: translate3d(0,8px,0); transition: opacity 180ms linear,transform 230ms cubic-bezier(.16,1,.3,1)}html[data-dsh-prts] [data-prts-startup-signature] > span,html[data-dsh-prts] [data-prts-startup-signature] svg{width: 42px; height: 42px; display: block}html[data-dsh-prts] [data-prts-startup-signature] small{color: var(--prts-startup-muted); font: 800 8px/1.3 var(--prts-mono,monospace); letter-spacing: .1em}html[data-dsh-prts] [data-prts-startup][data-stage=\"ready\"] [data-prts-startup-signature]{opacity: 1; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-startup-state]{display: grid; justify-items: center; gap: 6px; text-align: center; opacity: 1; transform: translate3d(0,0,0); transition: opacity 90ms linear,transform 90ms cubic-bezier(.4,0,1,1)}html[data-dsh-prts] [data-prts-startup][data-copy-transition] [data-prts-startup-state]{opacity: 0; transform: translate3d(0,-4px,0)}html[data-dsh-prts] [data-prts-startup-state] strong{font: 900 clamp(18px,2.4vw,30px)/1 var(--prts-display,sans-serif); letter-spacing: .16em}html[data-dsh-prts] [data-prts-startup-state] span{color: var(--prts-startup-muted); font: 700 10px/1.2 var(--prts-mono,monospace); letter-spacing: .12em}html[data-dsh-prts] [data-prts-startup-progress]{position: absolute; z-index: 3; right: clamp(22px,7vw,120px); bottom: clamp(28px,6dvh,70px); left: clamp(22px,7vw,120px); display: grid; gap: 10px; opacity: 0; transform: translate3d(0,10px,0); transition: opacity 220ms linear 100ms,transform 480ms cubic-bezier(.16,1,.3,1) 100ms}html[data-dsh-prts] [data-prts-startup][data-visible] [data-prts-startup-progress]{opacity: 1; transform: translate3d(0,0,0)}html[data-dsh-prts] [data-prts-startup-progress] output{justify-self: start; color: var(--prts-startup-muted); font: 800 9px/1 var(--prts-mono,monospace); letter-spacing: .12em}html[data-dsh-prts] [data-prts-startup-percent]{color: var(--prts-startup-ink)}html[data-dsh-prts] [data-prts-startup-track]{position: relative; height: 18px; border-top: 1px solid var(--prts-startup-line)}html[data-dsh-prts] [data-prts-startup-fill]{position: absolute; top: -2px; right: 0; left: 0; height: 3px; background: var(--prts-startup-accent); transform: scaleX(var(--prts-startup-progress)); transform-origin: left center; will-change: transform}html[data-dsh-prts] [data-prts-startup-ticks]{position: absolute; inset: 4px 0 0; display: grid; grid-template-columns: repeat(21,minmax(0,1fr))}html[data-dsh-prts] [data-prts-startup-ticks] i{width: 1px; height: 4px; background: var(--prts-startup-line)}html[data-dsh-prts] [data-prts-startup-ticks] i[data-major]{height: 9px; background: var(--prts-startup-muted)}html[data-dsh-prts] [data-prts-startup-coordinate]{position: absolute; right: clamp(22px,4vw,68px); top: 50%; writing-mode: vertical-rl; transform: translateY(-50%)}html[data-dsh-prts] [data-prts-startup][data-exit-content] > :not([data-prts-startup-cut]){opacity: 0; transition: opacity 120ms linear}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-grid],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-header],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-telemetry],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-coordinate],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-state],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-outer],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-inner],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-reticle],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-emblem],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-signature],html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-progress]{opacity: 1; clip-path: none; transform: none; animation: none; transition: none}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-outer]{transform: rotate(45deg)}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-frame-inner]{transform: rotate(-45deg)}html[data-dsh-prts] [data-prts-startup][data-reduced-motion]{transition: opacity 160ms ease}html[data-dsh-prts] [data-prts-startup][data-reduced-motion][data-exiting]{opacity: 0}html[data-dsh-prts] [data-prts-startup][data-reduced-motion][data-exiting] > :not([data-prts-startup-cut]){opacity: 1}html[data-dsh-prts] [data-prts-startup][data-reduced-motion]::before,html[data-dsh-prts] [data-prts-startup][data-reduced-motion]::after{transform: none; transition: none}html[data-dsh-prts] [data-prts-startup][data-reduced-motion] [data-prts-startup-cut]{display: none}@keyframes prts-startup-scan{from{transform: translate3d(0,0,0)}to{transform: translate3d(0,660%,0)}}@keyframes prts-startup-cut-left{0%{opacity: 0; transform: skewX(-13deg) translate3d(0,0,0)}18%{opacity: 1}100%{opacity: 0; transform: skewX(-13deg) translate3d(-50vw,0,0)}}@keyframes prts-startup-cut-right{0%{opacity: 0; transform: skewX(-13deg) translate3d(0,0,0)}18%{opacity: .72}100%{opacity: 0; transform: skewX(-13deg) translate3d(50vw,0,0)}}@media (max-width: 640px){html[data-dsh-prts] [data-prts-startup-header]{right: 18px; left: 18px}html[data-dsh-prts] [data-prts-startup-header] small,html[data-dsh-prts] [data-prts-startup-telemetry],html[data-dsh-prts] [data-prts-startup-coordinate]{display: none}html[data-dsh-prts] [data-prts-startup-core]{top: 47%; width: calc(100vw - 32px)}html[data-dsh-prts] [data-prts-startup-frame]{width: min(66vw,240px)}html[data-dsh-prts] [data-prts-startup-signature] > span,html[data-dsh-prts] [data-prts-startup-signature] svg{width: 34px; height: 34px}html[data-dsh-prts] [data-prts-startup-state] strong{max-width: 94vw; font-size: clamp(15px,5vw,22px); letter-spacing: .1em}html[data-dsh-prts] [data-prts-startup-progress]{right: 20px; bottom: max(28px,env(safe-area-inset-bottom)); left: 20px}}@media (prefers-reduced-motion: reduce){html[data-dsh-prts] [data-prts-startup] *,html[data-dsh-prts] [data-prts-startup]::before,html[data-dsh-prts] [data-prts-startup]::after{animation: none !important}}";
8
8
  const PRTS_ASSETS = Object.freeze({
9
9
  emblem: "<svg id=\"prts-rhodes-emblem\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 510 510\" aria-hidden=\"true\">\n <title>Rhodes Island</title>\n <!-- Fan-made vector redraw traced and size-corrected from the classic Rhodes Island emblem. -->\n <path data-emblem-ink d=\"M 265 71 C 265.589 72.100, 266.295 73, 266.570 73 C 266.845 73, 266.589 72.100, 266 71 C 265.411 69.900, 264.705 69, 264.430 69 C 264.155 69, 264.411 69.900, 265 71 M 243 76 C 242.411 77.100, 242.155 78, 242.430 78 C 242.705 78, 243.411 77.100, 244 76 C 244.589 74.900, 244.845 74, 244.570 74 C 244.295 74, 243.589 74.900, 243 76 M 268 76 C 268.589 77.100, 269.295 78, 269.570 78 C 269.845 78, 269.589 77.100, 269 76 C 268.411 74.900, 267.705 74, 267.430 74 C 267.155 74, 267.411 74.900, 268 76 M 252.585 90.626 C 251.163 93.170, 250 95.645, 250 96.126 C 250 96.607, 252.700 97, 256 97 C 259.602 97, 262 96.572, 262 95.928 C 262 94.348, 256.947 86, 255.990 86 C 255.540 86, 254.008 88.082, 252.585 90.626 M 227 103 C 226.411 104.100, 226.155 105, 226.430 105 C 226.705 105, 227.411 104.100, 228 103 C 228.589 101.900, 228.845 101, 228.570 101 C 228.295 101, 227.589 101.900, 227 103 M 284 103 C 284.589 104.100, 285.295 105, 285.570 105 C 285.845 105, 285.589 104.100, 285 103 C 284.411 101.900, 283.705 101, 283.430 101 C 283.155 101, 283.411 101.900, 284 103 M 220 115 C 219.411 116.100, 219.155 117, 219.430 117 C 219.705 117, 220.411 116.100, 221 115 C 221.589 113.900, 221.845 113, 221.570 113 C 221.295 113, 220.589 113.900, 220 115 M 245.813 113.683 C 246.534 113.972, 247.397 113.936, 247.729 113.604 C 248.061 113.272, 247.471 113.036, 246.417 113.079 C 245.252 113.127, 245.015 113.364, 245.813 113.683 M 291 115 C 291.589 116.100, 292.295 117, 292.570 117 C 292.845 117, 292.589 116.100, 292 115 C 291.411 113.900, 290.705 113, 290.430 113 C 290.155 113, 290.411 113.900, 291 115 M 285.813 143.683 C 286.534 143.972, 287.397 143.936, 287.729 143.604 C 288.061 143.272, 287.471 143.036, 286.417 143.079 C 285.252 143.127, 285.015 143.364, 285.813 143.683 M 224.813 145.683 C 225.534 145.972, 226.397 145.936, 226.729 145.604 C 227.061 145.272, 226.471 145.036, 225.417 145.079 C 224.252 145.127, 224.015 145.364, 224.813 145.683 M 218.813 150.683 C 219.534 150.972, 220.397 150.936, 220.729 150.604 C 221.061 150.272, 220.471 150.036, 219.417 150.079 C 218.252 150.127, 218.015 150.364, 218.813 150.683 M 288.813 152.683 C 289.534 152.972, 290.397 152.936, 290.729 152.604 C 291.061 152.272, 290.471 152.036, 289.417 152.079 C 288.252 152.127, 288.015 152.364, 288.813 152.683 M 218.813 153.683 C 219.534 153.972, 220.397 153.936, 220.729 153.604 C 221.061 153.272, 220.471 153.036, 219.417 153.079 C 218.252 153.127, 218.015 153.364, 218.813 153.683 M 293.813 154.683 C 294.534 154.972, 295.397 154.936, 295.729 154.604 C 296.061 154.272, 295.471 154.036, 294.417 154.079 C 293.252 154.127, 293.015 154.364, 293.813 154.683 M 191 164 C 190.411 165.100, 190.155 166, 190.430 166 C 190.705 166, 191.411 165.100, 192 164 C 192.589 162.900, 192.845 162, 192.570 162 C 192.295 162, 191.589 162.900, 191 164 M 244.979 167.215 C 244.640 171.758, 242.104 192.216, 241.853 192.434 C 241.659 192.602, 238.304 193.044, 234.397 193.416 L 227.295 194.092 226.750 181.482 C 226.451 174.547, 225.952 168.618, 225.641 168.308 C 224.968 167.635, 209.797 169.889, 208.150 170.907 C 206.946 171.652, 206.004 176.004, 203.477 192.500 C 202.635 198, 201.012 208.575, 199.872 216 C 198.731 223.425, 197.568 232.537, 197.286 236.250 L 196.774 243 200.387 243 C 203.522 243, 204 243.314, 204 245.371 C 204 247.479, 204.583 247.817, 209.250 248.419 C 212.137 248.791, 216.188 249.357, 218.250 249.676 C 221.285 250.145, 222 249.945, 222 248.628 C 222 247.548, 222.862 247, 224.559 247 C 226.017 247, 226.851 246.568, 226.498 245.996 C 226.157 245.444, 224.829 245.256, 223.548 245.577 C 222.267 245.899, 220.918 245.676, 220.550 245.081 C 219.856 243.958, 221.562 243.657, 228.235 243.724 C 230.290 243.744, 231.772 243.440, 231.529 243.047 C 231.005 242.199, 230.032 242.282, 247.500 241.672 C 255.200 241.403, 260.600 241.525, 259.501 241.942 C 258.401 242.359, 254.590 242.795, 251.031 242.910 C 247.473 243.026, 241.523 243.759, 237.810 244.540 C 234.097 245.321, 230.297 245.668, 229.366 245.310 C 228.272 244.890, 227.912 245.049, 228.350 245.758 C 228.739 246.386, 228.061 247.148, 226.765 247.540 C 224.150 248.329, 220 252.687, 220 254.643 C 220 256.030, 197.333 347.969, 196.377 350.460 C 195.900 351.703, 191.807 352.905, 179.274 355.485 C 176.645 356.026, 174.648 358.032, 168.486 366.324 C 155.420 383.909, 156.745 382.630, 150.825 383.376 C 140.257 384.708, 119.119 388.548, 118.401 389.266 C 117.997 389.670, 179.054 389.959, 254.083 389.910 C 332.364 389.858, 389.222 389.452, 387.500 388.957 C 384.541 388.106, 364.079 384.326, 356.712 383.270 C 353.216 382.768, 352.155 381.704, 342.914 369.434 L 332.903 356.142 322.983 353.848 L 313.062 351.555 310.975 342.527 C 309.827 337.562, 307.366 327.200, 305.507 319.500 C 303.647 311.800, 300.474 298.300, 298.456 289.500 C 296.437 280.700, 293.709 269.143, 292.393 263.819 C 291.077 258.494, 290 253.242, 290 252.148 C 290 249.990, 291.302 249.559, 301.250 248.425 C 306.408 247.837, 307 247.531, 307 245.451 C 307 243.665, 307.632 243.060, 309.750 242.816 C 312.382 242.514, 312.499 242.264, 312.475 237 C 312.462 233.975, 311.636 225.875, 310.641 219 C 309.646 212.125, 307.710 198.628, 306.338 189.006 C 304.967 179.384, 303.721 171.388, 303.569 171.236 C 302.800 170.467, 285.388 168.391, 284.709 168.988 C 284.273 169.370, 283.641 175.188, 283.302 181.917 C 282.709 193.711, 282.612 194.131, 280.594 193.589 C 279.442 193.280, 275.978 193.021, 272.895 193.014 L 267.290 193 266.395 180.250 L 265.500 167.500 255.250 167.215 C 249.613 167.058, 244.990 167.058, 244.979 167.215 M 336 191 C 336.589 192.100, 337.295 193, 337.570 193 C 337.845 193, 337.589 192.100, 337 191 C 336.411 189.900, 335.705 189, 335.430 189 C 335.155 189, 335.411 189.900, 336 191 M 168 203 C 167.411 204.100, 167.155 205, 167.430 205 C 167.705 205, 168.411 204.100, 169 203 C 169.589 201.900, 169.845 201, 169.570 201 C 169.295 201, 168.589 201.900, 168 203 M 241 201.965 C 238.525 202.259, 237.175 202.742, 238 203.039 C 239.869 203.710, 247.871 202.699, 246.500 201.965 C 245.950 201.670, 243.475 201.670, 241 201.965 M 274 201.378 C 274 201.585, 274.788 202.373, 275.750 203.128 C 277.336 204.371, 277.371 204.336, 276.128 202.750 C 274.821 201.084, 274 200.555, 274 201.378 M 278 201.378 C 278 201.585, 278.788 202.373, 279.750 203.128 C 281.336 204.371, 281.371 204.336, 280.128 202.750 C 278.821 201.084, 278 200.555, 278 201.378 M 343 203 C 343.589 204.100, 344.295 205, 344.570 205 C 344.845 205, 344.589 204.100, 344 203 C 343.411 201.900, 342.705 201, 342.430 201 C 342.155 201, 342.411 201.900, 343 203 M 233.733 203.124 C 234.412 203.808, 235.219 204.115, 235.526 203.807 C 235.834 203.499, 235.279 202.940, 234.293 202.564 C 232.868 202.022, 232.753 202.136, 233.733 203.124 M 270 202.393 C 270 202.609, 270.698 203.054, 271.552 203.382 C 272.442 203.723, 272.843 203.555, 272.493 202.989 C 271.906 202.038, 270 201.583, 270 202.393 M 227.250 203.689 C 228.213 203.941, 229.787 203.941, 230.750 203.689 C 231.713 203.438, 230.925 203.232, 229 203.232 C 227.075 203.232, 226.287 203.438, 227.250 203.689 M 258.250 235.732 C 253.176 236.189, 252.530 238, 257.441 238 C 259.334 238, 261.190 238.498, 261.566 239.107 C 262.048 239.886, 262.486 239.831, 263.049 238.921 C 263.695 237.875, 264.196 237.897, 265.674 239.034 C 266.678 239.807, 266.409 239.216, 265.076 237.720 C 263.742 236.224, 262.617 235.079, 262.576 235.175 C 262.534 235.271, 260.587 235.522, 258.250 235.732 M 340.504 236.373 C 338.696 237.696, 338.710 237.773, 340.888 238.465 C 342.133 238.860, 343.417 238.917, 343.742 238.591 C 344.067 238.266, 343.528 238, 342.544 238 C 341.067 238, 340.972 237.738, 342 236.500 C 343.552 234.629, 342.958 234.579, 340.504 236.373 M 238.335 236.668 C 239.263 237.596, 252.001 237.673, 252 236.750 C 252 236.338, 248.775 236, 244.833 236 C 240.892 236, 237.967 236.301, 238.335 236.668 M 220.815 240.864 C 222.032 241.636, 227 241.250, 227 240.383 C 227 240.173, 225.313 240.007, 223.250 240.015 C 220.860 240.025, 219.977 240.333, 220.815 240.864 M 343.507 241.989 C 343.157 242.555, 343.558 242.723, 344.448 242.382 C 346.180 241.717, 346.497 241, 345.059 241 C 344.541 241, 343.843 241.445, 343.507 241.989 M 168.813 242.683 C 169.534 242.972, 170.397 242.936, 170.729 242.604 C 171.061 242.272, 170.471 242.036, 169.417 242.079 C 168.252 242.127, 168.015 242.364, 168.813 242.683 M 164.083 243.365 C 164.313 243.565, 165.625 244.265, 167 244.920 C 169.357 246.042, 169.389 246.022, 167.559 244.555 C 165.966 243.279, 162.711 242.164, 164.083 243.365 M 163.269 247.693 C 164.242 247.947, 165.592 247.930, 166.269 247.656 C 166.946 247.382, 166.150 247.175, 164.500 247.195 C 162.850 247.215, 162.296 247.439, 163.269 247.693 M 234.269 247.693 C 235.242 247.947, 236.592 247.930, 237.269 247.656 C 237.946 247.382, 237.150 247.175, 235.500 247.195 C 233.850 247.215, 233.296 247.439, 234.269 247.693 M 230 248.703 C 230 249.857, 232.838 252.523, 233.395 251.893 C 233.586 251.677, 232.900 250.634, 231.871 249.575 C 230.842 248.516, 230 248.124, 230 248.703 M 348.441 250.555 C 346.611 252.022, 346.643 252.042, 349 250.920 C 352.061 249.462, 352.628 249, 351.358 249 C 350.821 249, 349.509 249.700, 348.441 250.555 M 372 252 C 372.589 253.100, 373.295 254, 373.570 254 C 373.845 254, 373.589 253.100, 373 252 C 372.411 250.900, 371.705 250, 371.430 250 C 371.155 250, 371.411 250.900, 372 252 M 351.507 254.989 C 351.157 255.555, 351.558 255.723, 352.448 255.382 C 354.180 254.717, 354.497 254, 353.059 254 C 352.541 254, 351.843 254.445, 351.507 254.989 M 156.083 255.356 C 156.313 255.552, 158.075 256.002, 160 256.355 C 162.462 256.807, 163.055 256.706, 162 256.014 C 160.644 255.125, 155.092 254.508, 156.083 255.356 M 352.500 259 C 351.718 260.266, 353.042 260.266, 355 259 C 356.293 258.165, 356.266 258.029, 354.809 258.015 C 353.879 258.007, 352.840 258.450, 352.500 259 M 154.250 262.689 C 155.213 262.941, 156.787 262.941, 157.750 262.689 C 158.713 262.438, 157.925 262.232, 156 262.232 C 154.075 262.232, 153.287 262.438, 154.250 262.689 M 357.441 266.555 C 355.611 268.022, 355.643 268.042, 358 266.920 C 361.061 265.462, 361.628 265, 360.358 265 C 359.821 265, 358.509 265.700, 357.441 266.555 M 149 269.393 C 149 269.609, 149.698 270.054, 150.552 270.382 C 151.442 270.723, 151.843 270.555, 151.493 269.989 C 150.906 269.038, 149 268.583, 149 269.393 M 360.507 269.989 C 360.157 270.555, 360.558 270.723, 361.448 270.382 C 363.180 269.717, 363.497 269, 362.059 269 C 361.541 269, 360.843 269.445, 360.507 269.989 M 362 275 C 361.099 275.582, 360.975 275.975, 361.691 275.985 C 362.346 275.993, 363.160 275.550, 363.500 275 C 364.267 273.758, 363.921 273.758, 362 275 M 143 277.449 C 143 277.724, 144.350 278.647, 146 279.500 C 147.650 280.353, 149 280.826, 149 280.551 C 149 280.276, 147.650 279.353, 146 278.500 C 144.350 277.647, 143 277.174, 143 277.449 M 364.500 279 C 362.870 279.701, 362.812 279.872, 364.191 279.930 C 365.121 279.968, 366.160 279.550, 366.500 279 C 367.211 277.850, 367.176 277.850, 364.500 279 M 141 281.350 C 141 281.581, 142.180 282.543, 143.623 283.489 C 145.066 284.434, 145.941 284.713, 145.567 284.109 C 144.854 282.955, 141 280.626, 141 281.350 M 367 284 C 366.099 284.582, 365.975 284.975, 366.691 284.985 C 367.346 284.993, 368.160 284.550, 368.500 284 C 369.267 282.758, 368.921 282.758, 367 284 M 116 291 C 115.411 292.100, 115.155 293, 115.430 293 C 115.705 293, 116.411 292.100, 117 291 C 117.589 289.900, 117.845 289, 117.570 289 C 117.295 289, 116.589 289.900, 116 291 M 370 290 C 369.099 290.582, 368.975 290.975, 369.691 290.985 C 370.346 290.993, 371.160 290.550, 371.500 290 C 372.267 288.758, 371.921 288.758, 370 290 M 395 291 C 395.589 292.100, 396.295 293, 396.570 293 C 396.845 293, 396.589 292.100, 396 291 C 395.411 289.900, 394.705 289, 394.430 289 C 394.155 289, 394.411 289.900, 395 291 M 139.813 290.683 C 140.534 290.972, 141.397 290.936, 141.729 290.604 C 142.061 290.272, 141.471 290.036, 140.417 290.079 C 139.252 290.127, 139.015 290.364, 139.813 290.683 M 136.500 293 C 137.600 293.473, 139.175 293.859, 140 293.859 C 140.945 293.859, 140.761 293.542, 139.500 293 C 138.400 292.527, 136.825 292.141, 136 292.141 C 135.055 292.141, 135.239 292.458, 136.500 293 M 113 296 C 112.411 297.100, 112.155 298, 112.430 298 C 112.705 298, 113.411 297.100, 114 296 C 114.589 294.900, 114.845 294, 114.570 294 C 114.295 294, 113.589 294.900, 113 296 M 398 296 C 398.589 297.100, 399.295 298, 399.570 298 C 399.845 298, 399.589 297.100, 399 296 C 398.411 294.900, 397.705 294, 397.430 294 C 397.155 294, 397.411 294.900, 398 296 M 135.813 298.683 C 136.534 298.972, 137.397 298.936, 137.729 298.604 C 138.061 298.272, 137.471 298.036, 136.417 298.079 C 135.252 298.127, 135.015 298.364, 135.813 298.683 M 132.083 299.283 C 132.313 299.439, 133.400 300.226, 134.500 301.033 C 136.350 302.390, 136.397 302.369, 135.128 300.750 C 134.373 299.788, 133.285 299, 132.711 299 C 132.137 299, 131.854 299.127, 132.083 299.283 M 377 301 C 376.099 301.582, 375.975 301.975, 376.691 301.985 C 377.346 301.993, 378.160 301.550, 378.500 301 C 379.267 299.758, 378.921 299.758, 377 301 M 128 303.393 C 128 303.609, 128.698 304.054, 129.552 304.382 C 130.442 304.723, 130.843 304.555, 130.493 303.989 C 129.906 303.038, 128 302.583, 128 303.393 M 381.507 303.989 C 381.157 304.555, 381.558 304.723, 382.448 304.382 C 384.180 303.717, 384.497 303, 383.059 303 C 382.541 303, 381.843 303.445, 381.507 303.989 M 103 313 C 102.411 314.100, 102.155 315, 102.430 315 C 102.705 315, 103.411 314.100, 104 313 C 104.589 311.900, 104.845 311, 104.570 311 C 104.295 311, 103.589 311.900, 103 313 M 408 313 C 408.589 314.100, 409.295 315, 409.570 315 C 409.845 315, 409.589 314.100, 409 313 C 408.411 311.900, 407.705 311, 407.430 311 C 407.155 311, 407.411 311.900, 408 313 M 241.702 312.631 C 241.355 312.979, 238.805 313.212, 236.035 313.149 C 231.923 313.057, 230.979 313.354, 230.885 314.768 C 230.821 315.721, 230.686 316.950, 230.585 317.500 C 229.465 323.573, 228.408 326.065, 225.979 328.358 C 224.404 329.844, 222.855 331.882, 222.536 332.887 C 222.217 333.892, 220.953 335.194, 219.728 335.781 C 217.803 336.703, 218.006 336.792, 221.220 336.434 C 223.266 336.206, 225.291 335.962, 225.720 335.892 C 227.910 335.531, 230 336.124, 230 337.107 C 230 337.718, 229.272 337.935, 228.373 337.590 C 227.479 337.246, 226.202 337.417, 225.537 337.969 C 224.872 338.522, 221.775 339.155, 218.655 339.377 C 215.536 339.599, 211.923 340.476, 210.626 341.325 C 208.793 342.526, 207.968 342.606, 206.911 341.685 C 206.164 341.033, 206.329 341.435, 207.277 342.579 C 209.301 345.020, 209.754 348.154, 207.800 346.200 C 205.694 344.094, 204.842 344.915, 206.872 347.093 C 209.099 349.484, 215 350.365, 215 348.307 C 215 347.302, 217.844 347, 227.327 347 L 239.654 347 240.860 340.457 C 241.523 336.859, 241.799 333.484, 241.474 332.957 C 241.148 332.431, 239.334 332, 237.441 332 C 235.178 332, 234 331.526, 234 330.617 C 234 329.856, 233.100 328.998, 232 328.710 C 230.900 328.423, 230 327.643, 230 326.977 C 230 326.259, 230.814 325.979, 232 326.290 C 233.100 326.577, 234 326.389, 234 325.871 C 234 325.325, 234.841 325.380, 236 326 C 237.434 326.767, 238 326.760, 238 325.976 C 238 325.374, 238.450 325.160, 239 325.500 C 239.550 325.840, 240 325.668, 240 325.118 C 240 323.588, 238.223 322.831, 237.776 324.171 C 237.559 324.822, 236.846 325.023, 236.191 324.618 C 234.473 323.556, 234.723 321.956, 236.500 322.638 C 237.325 322.955, 238 322.700, 238 322.072 C 238 321.276, 238.554 321.226, 239.824 321.906 C 241.394 322.746, 241.881 322.231, 243.329 318.191 C 244.253 315.611, 245.008 313.163, 245.005 312.750 C 244.999 311.839, 242.581 311.753, 241.702 312.631 M 388 315.059 C 388 315.641, 388.450 315.840, 389 315.500 C 389.550 315.160, 390 314.684, 390 314.441 C 390 314.198, 389.550 314, 389 314 C 388.450 314, 388 314.477, 388 315.059 M 389.441 318.555 C 387.577 320.049, 387.589 320.067, 389.750 319.020 C 390.988 318.420, 392 317.720, 392 317.465 C 392 316.700, 391.481 316.921, 389.441 318.555 M 119.589 318.856 C 119.298 319.326, 120.172 319.499, 121.530 319.239 C 122.889 318.979, 124 318.594, 124 318.383 C 124 317.610, 120.101 318.027, 119.589 318.856 M 96.500 324 C 95.647 325.650, 95.174 327, 95.449 327 C 95.724 327, 96.647 325.650, 97.500 324 C 98.353 322.350, 98.826 321, 98.551 321 C 98.276 321, 97.353 322.350, 96.500 324 M 414.500 324 C 415.353 325.650, 416.276 327, 416.551 327 C 416.826 327, 416.353 325.650, 415.500 324 C 414.647 322.350, 413.724 321, 413.449 321 C 413.174 321, 413.647 322.350, 414.500 324 M 117.750 323.662 C 118.438 323.940, 119.563 323.940, 120.250 323.662 C 120.938 323.385, 120.375 323.158, 119 323.158 C 117.625 323.158, 117.063 323.385, 117.750 323.662 M 249 326.893 C 249 327.384, 249.739 328.069, 250.641 328.416 C 252.014 328.943, 252.076 328.796, 251.019 327.523 C 249.579 325.788, 249 325.607, 249 326.893 M 289 328.929 C 289 329.518, 288.298 330, 287.441 330 C 286.584 330, 286.174 330.472, 286.530 331.049 C 286.974 331.766, 287.568 331.774, 288.413 331.072 C 289.266 330.365, 290.012 330.412, 290.824 331.224 C 291.471 331.871, 292 332.053, 292 331.629 C 292 331.204, 291.325 330.182, 290.500 329.357 C 289.675 328.532, 289 328.339, 289 328.929 M 90 335 C 89.411 336.100, 89.155 337, 89.430 337 C 89.705 337, 90.411 336.100, 91 335 C 91.589 333.900, 91.845 333, 91.570 333 C 91.295 333, 90.589 333.900, 90 335 M 421 335 C 421.589 336.100, 422.295 337, 422.570 337 C 422.845 337, 422.589 336.100, 422 335 C 421.411 333.900, 420.705 333, 420.430 333 C 420.155 333, 420.411 333.900, 421 335 M 110 334.430 C 110 334.705, 110.900 335.411, 112 336 C 113.100 336.589, 114 336.845, 114 336.570 C 114 336.295, 113.100 335.589, 112 335 C 110.900 334.411, 110 334.155, 110 334.430 M 87 340 C 86.411 341.100, 86.155 342, 86.430 342 C 86.705 342, 87.411 341.100, 88 340 C 88.589 338.900, 88.845 338, 88.570 338 C 88.295 338, 87.589 338.900, 87 340 M 424 340 C 424.589 341.100, 425.295 342, 425.570 342 C 425.845 342, 425.589 341.100, 425 340 C 424.411 338.900, 423.705 338, 423.430 338 C 423.155 338, 423.411 338.900, 424 340 M 430.500 351 C 431.353 352.650, 432.276 354, 432.551 354 C 432.826 354, 432.353 352.650, 431.500 351 C 430.647 349.350, 429.724 348, 429.449 348 C 429.174 348, 429.647 349.350, 430.500 351 M 239.856 349.990 C 238.402 350.419, 232.777 350.807, 227.356 350.851 C 213.724 350.963, 208.330 351.673, 202.378 354.140 C 198.407 355.785, 197.362 356.668, 197.728 358.067 C 198.151 359.686, 193.687 366.973, 191.744 367.835 C 191.328 368.020, 191.245 368.587, 191.559 369.095 C 191.873 369.603, 191.201 371.201, 190.065 372.645 C 188.929 374.088, 188 376.334, 188 377.635 C 188 379.972, 186.479 380.933, 185.833 379.003 C 185.650 378.454, 184.175 379.144, 182.556 380.536 C 180.937 381.927, 179.025 382.840, 178.308 382.565 C 177.590 382.289, 175.989 382.479, 174.751 382.988 C 173.253 383.603, 178.251 383.899, 189.694 383.873 C 201.878 383.846, 207.003 383.494, 207.282 382.667 C 207.567 381.820, 208.131 381.877, 209.337 382.872 C 210.768 384.054, 211 384.019, 211 382.622 C 211 381.730, 211.563 380.993, 212.250 380.985 C 213.118 380.974, 213.061 380.692, 212.064 380.061 C 211.025 379.403, 210.920 378.786, 211.683 377.826 C 212.262 377.097, 213.301 373.439, 213.991 369.698 C 215.274 362.742, 216.852 360.088, 219.821 359.886 C 225.387 359.508, 227.287 358.868, 228.966 356.807 L 230.843 354.500 233.922 357.437 C 235.615 359.052, 237 359.826, 237 359.156 C 237 358.486, 236.325 357.678, 235.500 357.362 C 233.568 356.620, 233.555 355, 235.481 355 C 236.295 355, 237.228 356.062, 237.554 357.360 C 237.977 359.046, 238.768 359.654, 240.323 359.488 C 241.520 359.360, 243.118 359.198, 243.872 359.128 C 244.921 359.030, 244.976 358.676, 244.105 357.627 C 243.478 356.871, 243.234 355.554, 243.562 354.700 C 244.008 353.536, 243.664 353.275, 242.192 353.660 C 241.110 353.943, 239.887 353.627, 239.474 352.957 C 238.990 352.175, 239.217 351.908, 240.111 352.209 C 240.875 352.467, 242.905 352.093, 244.623 351.378 C 247.581 350.148, 249 350.382, 249 352.099 C 249 352.521, 248.100 353.151, 247 353.500 C 244.293 354.359, 244.476 355.470, 247.352 355.635 C 249.290 355.746, 249.717 355.264, 249.784 352.885 C 249.829 351.298, 249.559 349.970, 249.183 349.933 C 248.807 349.895, 247.150 349.718, 245.500 349.537 C 243.850 349.357, 241.310 349.561, 239.856 349.990 M 80 352 C 79.411 353.100, 79.155 354, 79.430 354 C 79.705 354, 80.411 353.100, 81 352 C 81.589 350.900, 81.845 350, 81.570 350 C 81.295 350, 80.589 350.900, 80 352 M 70.500 368 C 69.647 369.650, 69.174 371, 69.449 371 C 69.724 371, 70.647 369.650, 71.500 368 C 72.353 366.350, 72.826 365, 72.551 365 C 72.276 365, 71.353 366.350, 70.500 368 M 440.500 368 C 441.353 369.650, 442.276 371, 442.551 371 C 442.826 371, 442.353 369.650, 441.500 368 C 440.647 366.350, 439.724 365, 439.449 365 C 439.174 365, 439.647 366.350, 440.500 368 M 62.771 381.250 C 60.583 384.623, 58.621 388.640, 59.718 387.500 C 61.120 386.043, 65.245 379, 64.697 379 C 64.440 379, 63.573 380.012, 62.771 381.250 M 450.500 385 C 451.353 386.650, 452.276 388, 452.551 388 C 452.826 388, 452.353 386.650, 451.500 385 C 450.647 383.350, 449.724 382, 449.449 382 C 449.174 382, 449.647 383.350, 450.500 385 M 54 396 C 53.411 397.100, 53.155 398, 53.430 398 C 53.705 398, 54.411 397.100, 55 396 C 55.589 394.900, 55.845 394, 55.570 394 C 55.295 394, 54.589 394.900, 54 396 M 457 396 C 457.589 397.100, 458.295 398, 458.570 398 C 458.845 398, 458.589 397.100, 458 396 C 457.411 394.900, 456.705 394, 456.430 394 C 456.155 394, 456.411 394.900, 457 396 M 289.157 396.997 C 284.674 398.054, 283.600 399.331, 283.600 403.603 C 283.600 406.653, 284.399 407.957, 288.800 412.089 C 294.065 417.033, 295.289 420.311, 292.800 422.800 C 290.577 425.023, 286.069 424.246, 284.781 421.418 C 283.606 418.840, 283.603 418.840, 282.787 421.047 C 281.591 424.280, 283.566 426, 288.476 426 C 293.949 426, 298 422.553, 298 417.897 C 298 415.333, 296.910 413.643, 292.500 409.372 C 286.734 403.787, 285.693 400.770, 288.934 399.035 C 291.715 397.547, 292.670 397.730, 294.961 400.189 L 297 402.377 297 399.689 C 297 398.210, 296.587 397, 296.082 397 C 295.577 397, 294.564 396.822, 293.832 396.604 C 293.099 396.387, 290.996 396.563, 289.157 396.997 M 338.728 396.605 C 338.328 397.006, 337.986 403.221, 337.968 410.417 C 337.930 425.990, 337.502 425.873, 330.911 408.493 C 328.514 402.172, 326.049 397, 325.433 397 C 324.817 397, 322.105 402.962, 319.407 410.250 C 314.653 423.087, 314.404 423.509, 311.415 423.801 C 306.394 424.291, 305.789 422.590, 306.165 409.044 L 306.500 396.997 303.815 396.999 L 301.130 397 301.677 405.750 C 301.977 410.563, 301.794 416.808, 301.270 419.629 L 300.317 424.757 307.832 425.240 C 317.344 425.850, 319 425.419, 319 422.334 C 319 420.996, 319.700 418.546, 320.556 416.891 C 321.862 414.367, 322.623 413.931, 325.277 414.191 C 328.079 414.465, 328.674 415.102, 330.464 419.750 L 332.486 425 338.493 424.921 C 341.797 424.878, 343.938 424.615, 343.250 424.338 C 342.375 423.985, 342 421.030, 342 414.494 L 342 405.156 352.423 415.821 C 358.156 421.687, 363.070 426.263, 363.343 425.990 C 363.617 425.717, 363.989 419.082, 364.170 411.245 L 364.500 396.997 361.820 396.999 C 359.273 397, 359.186 397.161, 360.070 400.243 C 360.581 402.027, 360.979 406.865, 360.952 410.993 L 360.905 418.500 350.181 407.188 C 344.283 400.967, 339.129 396.204, 338.728 396.605 M 120.500 410.900 L 120.500 424.998 123.500 425.001 L 126.500 425.004 126.161 419.002 C 125.704 410.896, 127.123 411.112, 134.368 420.250 C 138.068 424.917, 138.233 425, 143.817 425.002 L 149.500 425.003 149.500 417.752 L 149.500 410.500 156.500 410.500 L 163.500 410.500 163.808 414.210 C 163.977 416.251, 163.676 419.513, 163.139 421.460 L 162.161 425 166.203 425 C 169.623 425, 170.059 424.777, 169.040 423.548 C 168.199 422.535, 167.935 418.305, 168.167 409.547 L 168.500 396.997 165.741 396.999 C 163.019 397, 162.985 397.077, 163.241 402.750 L 163.500 408.500 156.250 408.794 L 149 409.088 149 403.044 C 149 397.118, 148.947 397, 146.250 396.999 L 143.500 396.997 143.829 409.999 C 144.037 418.172, 143.790 423, 143.164 423 C 141.920 423, 134 414.088, 134 412.688 C 134 412.121, 134.670 410.918, 135.488 410.013 C 138.072 407.158, 138.390 402.703, 136.203 400.002 C 134.546 397.955, 133.173 397.519, 127.370 397.190 L 120.500 396.801 120.500 410.900 M 177.841 398.524 C 173.799 400.720, 171 405.994, 171 411.418 C 171 417.617, 173.179 421.540, 177.981 423.990 C 188.943 429.582, 201.010 422.767, 200.982 411 C 200.968 405.329, 199.381 402.173, 195.088 399.280 C 191.091 396.586, 182.132 396.194, 177.841 398.524 M 203.500 410.958 L 203.500 424.916 208.657 425.562 C 216.392 426.530, 221.727 425.277, 225.811 421.534 C 228.969 418.640, 229.399 417.633, 229.791 412.211 C 230.573 401.402, 225.217 397.001, 211.282 396.999 L 203.500 396.999 203.500 410.958 M 232.500 410.884 L 232.500 424.770 237.848 425.323 C 240.790 425.627, 244.165 425.514, 245.348 425.073 C 246.532 424.631, 248.400 424.627, 249.500 425.064 C 253.138 426.511, 257.686 426.035, 260.365 423.927 C 262.417 422.313, 263 420.981, 263 417.905 C 263 414.428, 262.339 413.315, 257.483 408.612 C 252.678 403.958, 252.078 402.960, 252.841 400.884 C 254.017 397.680, 258.429 397.112, 260.193 399.938 C 261.922 402.706, 263 402.538, 263 399.500 C 263 397.182, 262.652 397, 258.223 397 C 251.989 397, 249 399.075, 249 403.403 C 249 406.046, 250.081 407.790, 254.500 412.281 C 260.269 418.143, 260.827 419.486, 258.701 422.395 C 256.870 424.899, 251.803 424.190, 250.513 421.250 C 249.463 418.856, 248 418.225, 248 420.167 C 248 420.808, 247.703 421.036, 247.340 420.673 C 246.977 420.310, 246.033 420.936, 245.243 422.063 C 244.277 423.442, 242.937 424.014, 241.153 423.807 C 238.635 423.516, 238.485 423.181, 238.202 417.250 C 237.910 411.122, 237.955 411, 240.484 411 C 241.902 411, 243.322 411.675, 243.638 412.500 C 244.605 415.018, 246 414.173, 246 411.070 C 246 408.352, 245.801 408.196, 243.250 408.916 C 238.884 410.148, 238 409.306, 238 403.917 C 238 399.161, 238.095 399, 240.893 399 C 242.709 399, 244.052 399.651, 244.500 400.750 C 245.156 402.356, 245.282 402.336, 246.037 400.500 C 247.428 397.118, 247.215 397, 239.750 396.999 L 232.500 396.999 232.500 410.884 M 273.808 410.154 C 274.042 420.168, 273.803 423.509, 272.808 424.140 C 271.991 424.658, 273.046 424.975, 275.613 424.985 L 279.727 425 278.752 419.750 C 278.216 416.863, 278.023 410.563, 278.323 405.750 L 278.870 397 276.185 396.998 L 273.500 396.996 273.808 410.154 M 369.832 408.912 C 370.033 416.150, 369.742 421.614, 369.089 422.834 C 368.077 424.724, 368.401 424.884, 374.610 425.549 C 388.082 426.991, 396 421.606, 396 411 C 396 401.518, 389.941 397.061, 377 397.021 L 369.500 396.997 369.832 408.912 M 127.243 398.850 C 126.651 399.215, 126.041 402.211, 125.886 405.507 C 125.625 411.061, 125.769 411.524, 127.857 411.827 C 131.104 412.298, 133 410.265, 133 406.312 C 133 400.871, 130.085 397.093, 127.243 398.850 M 180.277 399.973 C 177.304 401.785, 176.817 402.736, 175.540 409.225 C 174.858 412.688, 177.272 419.051, 180.203 421.517 C 184.378 425.030, 189.291 424.862, 193.077 421.077 C 195.615 418.539, 196 417.413, 196 412.527 C 196 400.657, 188.706 394.833, 180.277 399.973 M 74 400.059 C 74 400.641, 74.450 400.840, 75 400.500 C 75.550 400.160, 76 399.684, 76 399.441 C 76 399.198, 75.550 399, 75 399 C 74.450 399, 74 399.477, 74 400.059 M 208.750 399.570 C 207.651 400.688, 207.834 418.433, 208.975 421.435 C 209.820 423.658, 210.544 424, 214.399 424 C 225.450 424, 230.011 409.996, 221.549 402.046 C 219.024 399.674, 210.305 397.987, 208.750 399.570 M 374.667 399.667 C 373.442 400.892, 373.917 421.517, 375.200 422.800 C 377.125 424.725, 384.401 424.259, 387.236 422.029 C 392.912 417.564, 392.511 406.017, 386.521 401.448 C 383.423 399.086, 376.316 398.018, 374.667 399.667 M 438.079 401.583 C 438.127 402.748, 438.364 402.985, 438.683 402.188 C 438.972 401.466, 438.936 400.603, 438.604 400.271 C 438.272 399.939, 438.036 400.529, 438.079 401.583 M 84.567 406.433 C 83.705 407.845, 82.315 410.125, 81.477 411.500 L 79.954 414 86.541 414 L 93.128 414 90.848 409.943 C 87.506 403.997, 86.423 403.392, 84.567 406.433 M 421.542 408.338 C 420.144 410.724, 419 412.974, 419 413.338 C 419 413.702, 421.726 414, 425.058 414 L 431.115 414 428.308 409.001 C 426.763 406.252, 425.181 404.002, 424.792 404.001 C 424.403 404, 422.940 405.952, 421.542 408.338 M 323.613 407.407 C 323.280 408.731, 322.733 410.531, 322.397 411.407 C 321.937 412.607, 322.414 413, 324.334 413 C 327.700 413, 328.092 412.123, 326.459 408.240 C 324.830 404.365, 324.407 404.242, 323.613 407.407 M 47 408 C 46.411 409.100, 46.155 410, 46.430 410 C 46.705 410, 47.411 409.100, 48 408 C 48.589 406.900, 48.845 406, 48.570 406 C 48.295 406, 47.589 406.900, 47 408 M 464 408 C 464.589 409.100, 465.295 410, 465.570 410 C 465.845 410, 465.589 409.100, 465 408 C 464.411 406.900, 463.705 406, 463.430 406 C 463.155 406, 463.411 406.900, 464 408 M 445.813 412.683 C 446.534 412.972, 447.397 412.936, 447.729 412.604 C 448.061 412.272, 447.471 412.036, 446.417 412.079 C 445.252 412.127, 445.015 412.364, 445.813 412.683 M 471 420 C 471.589 421.100, 472.295 422, 472.570 422 C 472.845 422, 472.589 421.100, 472 420 C 471.411 418.900, 470.705 418, 470.430 418 C 470.155 418, 470.411 418.900, 471 420 M 57.216 422.184 C 56.547 422.853, 56 423.992, 56 424.716 C 56 425.778, 61.342 425.980, 83.750 425.766 C 110.745 425.507, 111.500 425.446, 111.500 423.500 C 111.500 421.557, 110.745 421.492, 84.966 421.234 C 65.167 421.036, 58.123 421.277, 57.216 422.184 M 399.380 422.452 C 399.074 423.251, 399.114 424.376, 399.470 424.952 C 400.148 426.049, 456 426.525, 456 425.434 C 456 425.123, 455.534 423.998, 454.965 422.934 C 453.981 421.095, 452.600 421, 426.933 421 C 404.255 421, 399.848 421.232, 399.380 422.452 M 34 430 C 33.411 431.100, 33.155 432, 33.430 432 C 33.705 432, 34.411 431.100, 35 430 C 35.589 428.900, 35.845 428, 35.570 428 C 35.295 428, 34.589 428.900, 34 430 M 477 430 C 477.589 431.100, 478.295 432, 478.570 432 C 478.845 432, 478.589 431.100, 478 430 C 477.411 428.900, 476.705 428, 476.430 428 C 476.155 428, 476.411 428.900, 477 430 M 144.750 442.750 C 205.937 442.892, 306.062 442.892, 367.250 442.750 C 428.437 442.608, 378.375 442.491, 256 442.491 C 133.625 442.491, 83.562 442.608, 144.750 442.750\" fill=\"#07090a\" fill-rule=\"evenodd\"/>\n <path data-emblem-knockout d=\"M 237.383 86.769 C 227.418 103.671, 213.303 127.625, 206.016 140 C 198.728 152.375, 191.761 164.075, 190.532 166 C 189.303 167.925, 184.103 176.700, 178.976 185.500 C 173.848 194.300, 164.855 209.600, 158.991 219.500 C 145.174 242.827, 125.966 275.399, 123.018 280.500 C 121.747 282.700, 114.851 294.400, 107.693 306.500 C 100.536 318.600, 86.593 342.225, 76.709 359 C 66.825 375.775, 52.881 399.400, 45.722 411.500 C 27.127 442.931, 27.633 441.999, 29.165 442.005 C 67.412 442.163, 483.394 441.939, 483.570 441.761 C 483.711 441.617, 482.235 438.800, 480.288 435.500 C 478.341 432.200, 471.467 420.500, 465.012 409.500 C 450.955 385.544, 422.370 337.052, 404 306 C 396.679 293.625, 389.231 280.952, 387.449 277.838 C 385.666 274.724, 379.717 264.599, 374.228 255.338 C 362.449 235.466, 339.219 196.180, 323.472 169.500 C 317.304 159.050, 305.325 138.800, 296.851 124.500 C 288.377 110.200, 275.832 88.950, 268.972 77.279 C 262.112 65.607, 256.275 56.053, 256 56.047 C 255.725 56.042, 247.347 69.866, 237.383 86.769 M 252.585 90.626 C 251.163 93.170, 250 95.645, 250 96.126 C 250 96.607, 252.700 97, 256 97 C 259.602 97, 262 96.572, 262 95.928 C 262 94.348, 256.947 86, 255.990 86 C 255.540 86, 254.008 88.082, 252.585 90.626 M 245.813 113.683 C 246.534 113.972, 247.397 113.936, 247.729 113.604 C 248.061 113.272, 247.471 113.036, 246.417 113.079 C 245.252 113.127, 245.015 113.364, 245.813 113.683 M 285.813 143.683 C 286.534 143.972, 287.397 143.936, 287.729 143.604 C 288.061 143.272, 287.471 143.036, 286.417 143.079 C 285.252 143.127, 285.015 143.364, 285.813 143.683 M 224.813 145.683 C 225.534 145.972, 226.397 145.936, 226.729 145.604 C 227.061 145.272, 226.471 145.036, 225.417 145.079 C 224.252 145.127, 224.015 145.364, 224.813 145.683 M 218.813 150.683 C 219.534 150.972, 220.397 150.936, 220.729 150.604 C 221.061 150.272, 220.471 150.036, 219.417 150.079 C 218.252 150.127, 218.015 150.364, 218.813 150.683 M 288.813 152.683 C 289.534 152.972, 290.397 152.936, 290.729 152.604 C 291.061 152.272, 290.471 152.036, 289.417 152.079 C 288.252 152.127, 288.015 152.364, 288.813 152.683 M 218.813 153.683 C 219.534 153.972, 220.397 153.936, 220.729 153.604 C 221.061 153.272, 220.471 153.036, 219.417 153.079 C 218.252 153.127, 218.015 153.364, 218.813 153.683 M 293.813 154.683 C 294.534 154.972, 295.397 154.936, 295.729 154.604 C 296.061 154.272, 295.471 154.036, 294.417 154.079 C 293.252 154.127, 293.015 154.364, 293.813 154.683 M 244.979 167.215 C 244.640 171.758, 242.104 192.216, 241.853 192.434 C 241.659 192.602, 238.304 193.044, 234.397 193.416 L 227.295 194.092 226.750 181.482 C 226.451 174.547, 225.952 168.618, 225.641 168.308 C 224.968 167.635, 209.797 169.889, 208.150 170.907 C 206.946 171.652, 206.004 176.004, 203.477 192.500 C 202.635 198, 201.012 208.575, 199.872 216 C 198.731 223.425, 197.568 232.537, 197.286 236.250 L 196.774 243 200.387 243 C 203.522 243, 204 243.314, 204 245.371 C 204 247.479, 204.583 247.817, 209.250 248.419 C 212.137 248.791, 216.188 249.357, 218.250 249.676 C 221.285 250.145, 222 249.945, 222 248.628 C 222 247.548, 222.862 247, 224.559 247 C 226.017 247, 226.851 246.568, 226.498 245.996 C 226.157 245.444, 224.829 245.256, 223.548 245.577 C 222.267 245.899, 220.918 245.676, 220.550 245.081 C 219.856 243.958, 221.562 243.657, 228.235 243.724 C 230.290 243.744, 231.772 243.440, 231.529 243.047 C 231.005 242.199, 230.032 242.282, 247.500 241.672 C 255.200 241.403, 260.600 241.525, 259.501 241.942 C 258.401 242.359, 254.590 242.795, 251.031 242.910 C 247.473 243.026, 241.523 243.759, 237.810 244.540 C 234.097 245.321, 230.297 245.668, 229.366 245.310 C 228.272 244.890, 227.912 245.049, 228.350 245.758 C 228.739 246.386, 228.061 247.148, 226.765 247.540 C 224.150 248.329, 220 252.687, 220 254.643 C 220 256.030, 197.333 347.969, 196.377 350.460 C 195.900 351.703, 191.807 352.905, 179.274 355.485 C 176.645 356.026, 174.648 358.032, 168.486 366.324 C 155.420 383.909, 156.745 382.630, 150.825 383.376 C 140.257 384.708, 119.119 388.548, 118.401 389.266 C 117.997 389.670, 179.054 389.959, 254.083 389.910 C 332.364 389.858, 389.222 389.452, 387.500 388.957 C 384.541 388.106, 364.079 384.326, 356.712 383.270 C 353.216 382.768, 352.155 381.704, 342.914 369.434 L 332.903 356.142 322.983 353.848 L 313.062 351.555 310.975 342.527 C 309.827 337.562, 307.366 327.200, 305.507 319.500 C 303.647 311.800, 300.474 298.300, 298.456 289.500 C 296.437 280.700, 293.709 269.143, 292.393 263.819 C 291.077 258.494, 290 253.242, 290 252.148 C 290 249.990, 291.302 249.559, 301.250 248.425 C 306.408 247.837, 307 247.531, 307 245.451 C 307 243.665, 307.632 243.060, 309.750 242.816 C 312.382 242.514, 312.499 242.264, 312.475 237 C 312.462 233.975, 311.636 225.875, 310.641 219 C 309.646 212.125, 307.710 198.628, 306.338 189.006 C 304.967 179.384, 303.721 171.388, 303.569 171.236 C 302.800 170.467, 285.388 168.391, 284.709 168.988 C 284.273 169.370, 283.641 175.188, 283.302 181.917 C 282.709 193.711, 282.612 194.131, 280.594 193.589 C 279.442 193.280, 275.978 193.021, 272.895 193.014 L 267.290 193 266.395 180.250 L 265.500 167.500 255.250 167.215 C 249.613 167.058, 244.990 167.058, 244.979 167.215 M 241 201.965 C 238.525 202.259, 237.175 202.742, 238 203.039 C 239.869 203.710, 247.871 202.699, 246.500 201.965 C 245.950 201.670, 243.475 201.670, 241 201.965 M 274 201.378 C 274 201.585, 274.788 202.373, 275.750 203.128 C 277.336 204.371, 277.371 204.336, 276.128 202.750 C 274.821 201.084, 274 200.555, 274 201.378 M 278 201.378 C 278 201.585, 278.788 202.373, 279.750 203.128 C 281.336 204.371, 281.371 204.336, 280.128 202.750 C 278.821 201.084, 278 200.555, 278 201.378 M 233.733 203.124 C 234.412 203.808, 235.219 204.115, 235.526 203.807 C 235.834 203.499, 235.279 202.940, 234.293 202.564 C 232.868 202.022, 232.753 202.136, 233.733 203.124 M 270 202.393 C 270 202.609, 270.698 203.054, 271.552 203.382 C 272.442 203.723, 272.843 203.555, 272.493 202.989 C 271.906 202.038, 270 201.583, 270 202.393 M 227.250 203.689 C 228.213 203.941, 229.787 203.941, 230.750 203.689 C 231.713 203.438, 230.925 203.232, 229 203.232 C 227.075 203.232, 226.287 203.438, 227.250 203.689 M 258.250 235.732 C 253.176 236.189, 252.530 238, 257.441 238 C 259.334 238, 261.190 238.498, 261.566 239.107 C 262.048 239.886, 262.486 239.831, 263.049 238.921 C 263.695 237.875, 264.196 237.897, 265.674 239.034 C 266.678 239.807, 266.409 239.216, 265.076 237.720 C 263.742 236.224, 262.617 235.079, 262.576 235.175 C 262.534 235.271, 260.587 235.522, 258.250 235.732 M 340.504 236.373 C 338.696 237.696, 338.710 237.773, 340.888 238.465 C 342.133 238.860, 343.417 238.917, 343.742 238.591 C 344.067 238.266, 343.528 238, 342.544 238 C 341.067 238, 340.972 237.738, 342 236.500 C 343.552 234.629, 342.958 234.579, 340.504 236.373 M 238.335 236.668 C 239.263 237.596, 252.001 237.673, 252 236.750 C 252 236.338, 248.775 236, 244.833 236 C 240.892 236, 237.967 236.301, 238.335 236.668 M 220.815 240.864 C 222.032 241.636, 227 241.250, 227 240.383 C 227 240.173, 225.313 240.007, 223.250 240.015 C 220.860 240.025, 219.977 240.333, 220.815 240.864 M 343.507 241.989 C 343.157 242.555, 343.558 242.723, 344.448 242.382 C 346.180 241.717, 346.497 241, 345.059 241 C 344.541 241, 343.843 241.445, 343.507 241.989 M 168.813 242.683 C 169.534 242.972, 170.397 242.936, 170.729 242.604 C 171.061 242.272, 170.471 242.036, 169.417 242.079 C 168.252 242.127, 168.015 242.364, 168.813 242.683 M 164.083 243.365 C 164.313 243.565, 165.625 244.265, 167 244.920 C 169.357 246.042, 169.389 246.022, 167.559 244.555 C 165.966 243.279, 162.711 242.164, 164.083 243.365 M 163.269 247.693 C 164.242 247.947, 165.592 247.930, 166.269 247.656 C 166.946 247.382, 166.150 247.175, 164.500 247.195 C 162.850 247.215, 162.296 247.439, 163.269 247.693 M 234.269 247.693 C 235.242 247.947, 236.592 247.930, 237.269 247.656 C 237.946 247.382, 237.150 247.175, 235.500 247.195 C 233.850 247.215, 233.296 247.439, 234.269 247.693 M 230 248.703 C 230 249.857, 232.838 252.523, 233.395 251.893 C 233.586 251.677, 232.900 250.634, 231.871 249.575 C 230.842 248.516, 230 248.124, 230 248.703 M 348.441 250.555 C 346.611 252.022, 346.643 252.042, 349 250.920 C 352.061 249.462, 352.628 249, 351.358 249 C 350.821 249, 349.509 249.700, 348.441 250.555 M 351.507 254.989 C 351.157 255.555, 351.558 255.723, 352.448 255.382 C 354.180 254.717, 354.497 254, 353.059 254 C 352.541 254, 351.843 254.445, 351.507 254.989 M 156.083 255.356 C 156.313 255.552, 158.075 256.002, 160 256.355 C 162.462 256.807, 163.055 256.706, 162 256.014 C 160.644 255.125, 155.092 254.508, 156.083 255.356 M 352.500 259 C 351.718 260.266, 353.042 260.266, 355 259 C 356.293 258.165, 356.266 258.029, 354.809 258.015 C 353.879 258.007, 352.840 258.450, 352.500 259 M 154.250 262.689 C 155.213 262.941, 156.787 262.941, 157.750 262.689 C 158.713 262.438, 157.925 262.232, 156 262.232 C 154.075 262.232, 153.287 262.438, 154.250 262.689 M 357.441 266.555 C 355.611 268.022, 355.643 268.042, 358 266.920 C 361.061 265.462, 361.628 265, 360.358 265 C 359.821 265, 358.509 265.700, 357.441 266.555 M 149 269.393 C 149 269.609, 149.698 270.054, 150.552 270.382 C 151.442 270.723, 151.843 270.555, 151.493 269.989 C 150.906 269.038, 149 268.583, 149 269.393 M 360.507 269.989 C 360.157 270.555, 360.558 270.723, 361.448 270.382 C 363.180 269.717, 363.497 269, 362.059 269 C 361.541 269, 360.843 269.445, 360.507 269.989 M 362 275 C 361.099 275.582, 360.975 275.975, 361.691 275.985 C 362.346 275.993, 363.160 275.550, 363.500 275 C 364.267 273.758, 363.921 273.758, 362 275 M 143 277.449 C 143 277.724, 144.350 278.647, 146 279.500 C 147.650 280.353, 149 280.826, 149 280.551 C 149 280.276, 147.650 279.353, 146 278.500 C 144.350 277.647, 143 277.174, 143 277.449 M 364.500 279 C 362.870 279.701, 362.812 279.872, 364.191 279.930 C 365.121 279.968, 366.160 279.550, 366.500 279 C 367.211 277.850, 367.176 277.850, 364.500 279 M 141 281.350 C 141 281.581, 142.180 282.543, 143.623 283.489 C 145.066 284.434, 145.941 284.713, 145.567 284.109 C 144.854 282.955, 141 280.626, 141 281.350 M 367 284 C 366.099 284.582, 365.975 284.975, 366.691 284.985 C 367.346 284.993, 368.160 284.550, 368.500 284 C 369.267 282.758, 368.921 282.758, 367 284 M 370 290 C 369.099 290.582, 368.975 290.975, 369.691 290.985 C 370.346 290.993, 371.160 290.550, 371.500 290 C 372.267 288.758, 371.921 288.758, 370 290 M 139.813 290.683 C 140.534 290.972, 141.397 290.936, 141.729 290.604 C 142.061 290.272, 141.471 290.036, 140.417 290.079 C 139.252 290.127, 139.015 290.364, 139.813 290.683 M 136.500 293 C 137.600 293.473, 139.175 293.859, 140 293.859 C 140.945 293.859, 140.761 293.542, 139.500 293 C 138.400 292.527, 136.825 292.141, 136 292.141 C 135.055 292.141, 135.239 292.458, 136.500 293 M 135.813 298.683 C 136.534 298.972, 137.397 298.936, 137.729 298.604 C 138.061 298.272, 137.471 298.036, 136.417 298.079 C 135.252 298.127, 135.015 298.364, 135.813 298.683 M 132.083 299.283 C 132.313 299.439, 133.400 300.226, 134.500 301.033 C 136.350 302.390, 136.397 302.369, 135.128 300.750 C 134.373 299.788, 133.285 299, 132.711 299 C 132.137 299, 131.854 299.127, 132.083 299.283 M 377 301 C 376.099 301.582, 375.975 301.975, 376.691 301.985 C 377.346 301.993, 378.160 301.550, 378.500 301 C 379.267 299.758, 378.921 299.758, 377 301 M 128 303.393 C 128 303.609, 128.698 304.054, 129.552 304.382 C 130.442 304.723, 130.843 304.555, 130.493 303.989 C 129.906 303.038, 128 302.583, 128 303.393 M 381.507 303.989 C 381.157 304.555, 381.558 304.723, 382.448 304.382 C 384.180 303.717, 384.497 303, 383.059 303 C 382.541 303, 381.843 303.445, 381.507 303.989 M 241.702 312.631 C 241.355 312.979, 238.805 313.212, 236.035 313.149 C 231.923 313.057, 230.979 313.354, 230.885 314.768 C 230.821 315.721, 230.686 316.950, 230.585 317.500 C 229.465 323.573, 228.408 326.065, 225.979 328.358 C 224.404 329.844, 222.855 331.882, 222.536 332.887 C 222.217 333.892, 220.953 335.194, 219.728 335.781 C 217.803 336.703, 218.006 336.792, 221.220 336.434 C 223.266 336.206, 225.291 335.962, 225.720 335.892 C 227.910 335.531, 230 336.124, 230 337.107 C 230 337.718, 229.272 337.935, 228.373 337.590 C 227.479 337.246, 226.202 337.417, 225.537 337.969 C 224.872 338.522, 221.775 339.155, 218.655 339.377 C 215.536 339.599, 211.923 340.476, 210.626 341.325 C 208.793 342.526, 207.968 342.606, 206.911 341.685 C 206.164 341.033, 206.329 341.435, 207.277 342.579 C 209.301 345.020, 209.754 348.154, 207.800 346.200 C 205.694 344.094, 204.842 344.915, 206.872 347.093 C 209.099 349.484, 215 350.365, 215 348.307 C 215 347.302, 217.844 347, 227.327 347 L 239.654 347 240.860 340.457 C 241.523 336.859, 241.799 333.484, 241.474 332.957 C 241.148 332.431, 239.334 332, 237.441 332 C 235.178 332, 234 331.526, 234 330.617 C 234 329.856, 233.100 328.998, 232 328.710 C 230.900 328.423, 230 327.643, 230 326.977 C 230 326.259, 230.814 325.979, 232 326.290 C 233.100 326.577, 234 326.389, 234 325.871 C 234 325.325, 234.841 325.380, 236 326 C 237.434 326.767, 238 326.760, 238 325.976 C 238 325.374, 238.450 325.160, 239 325.500 C 239.550 325.840, 240 325.668, 240 325.118 C 240 323.588, 238.223 322.831, 237.776 324.171 C 237.559 324.822, 236.846 325.023, 236.191 324.618 C 234.473 323.556, 234.723 321.956, 236.500 322.638 C 237.325 322.955, 238 322.700, 238 322.072 C 238 321.276, 238.554 321.226, 239.824 321.906 C 241.394 322.746, 241.881 322.231, 243.329 318.191 C 244.253 315.611, 245.008 313.163, 245.005 312.750 C 244.999 311.839, 242.581 311.753, 241.702 312.631 M 388 315.059 C 388 315.641, 388.450 315.840, 389 315.500 C 389.550 315.160, 390 314.684, 390 314.441 C 390 314.198, 389.550 314, 389 314 C 388.450 314, 388 314.477, 388 315.059 M 389.441 318.555 C 387.577 320.049, 387.589 320.067, 389.750 319.020 C 390.988 318.420, 392 317.720, 392 317.465 C 392 316.700, 391.481 316.921, 389.441 318.555 M 119.589 318.856 C 119.298 319.326, 120.172 319.499, 121.530 319.239 C 122.889 318.979, 124 318.594, 124 318.383 C 124 317.610, 120.101 318.027, 119.589 318.856 M 117.750 323.662 C 118.438 323.940, 119.563 323.940, 120.250 323.662 C 120.938 323.385, 120.375 323.158, 119 323.158 C 117.625 323.158, 117.063 323.385, 117.750 323.662 M 249 326.893 C 249 327.384, 249.739 328.069, 250.641 328.416 C 252.014 328.943, 252.076 328.796, 251.019 327.523 C 249.579 325.788, 249 325.607, 249 326.893 M 289 328.929 C 289 329.518, 288.298 330, 287.441 330 C 286.584 330, 286.174 330.472, 286.530 331.049 C 286.974 331.766, 287.568 331.774, 288.413 331.072 C 289.266 330.365, 290.012 330.412, 290.824 331.224 C 291.471 331.871, 292 332.053, 292 331.629 C 292 331.204, 291.325 330.182, 290.500 329.357 C 289.675 328.532, 289 328.339, 289 328.929 M 110 334.430 C 110 334.705, 110.900 335.411, 112 336 C 113.100 336.589, 114 336.845, 114 336.570 C 114 336.295, 113.100 335.589, 112 335 C 110.900 334.411, 110 334.155, 110 334.430 M 239.856 349.990 C 238.402 350.419, 232.777 350.807, 227.356 350.851 C 213.724 350.963, 208.330 351.673, 202.378 354.140 C 198.407 355.785, 197.362 356.668, 197.728 358.067 C 198.151 359.686, 193.687 366.973, 191.744 367.835 C 191.328 368.020, 191.245 368.587, 191.559 369.095 C 191.873 369.603, 191.201 371.201, 190.065 372.645 C 188.929 374.088, 188 376.334, 188 377.635 C 188 379.972, 186.479 380.933, 185.833 379.003 C 185.650 378.454, 184.175 379.144, 182.556 380.536 C 180.937 381.927, 179.025 382.840, 178.308 382.565 C 177.590 382.289, 175.989 382.479, 174.751 382.988 C 173.253 383.603, 178.251 383.899, 189.694 383.873 C 201.878 383.846, 207.003 383.494, 207.282 382.667 C 207.567 381.820, 208.131 381.877, 209.337 382.872 C 210.768 384.054, 211 384.019, 211 382.622 C 211 381.730, 211.563 380.993, 212.250 380.985 C 213.118 380.974, 213.061 380.692, 212.064 380.061 C 211.025 379.403, 210.920 378.786, 211.683 377.826 C 212.262 377.097, 213.301 373.439, 213.991 369.698 C 215.274 362.742, 216.852 360.088, 219.821 359.886 C 225.387 359.508, 227.287 358.868, 228.966 356.807 L 230.843 354.500 233.922 357.437 C 235.615 359.052, 237 359.826, 237 359.156 C 237 358.486, 236.325 357.678, 235.500 357.362 C 233.568 356.620, 233.555 355, 235.481 355 C 236.295 355, 237.228 356.062, 237.554 357.360 C 237.977 359.046, 238.768 359.654, 240.323 359.488 C 241.520 359.360, 243.118 359.198, 243.872 359.128 C 244.921 359.030, 244.976 358.676, 244.105 357.627 C 243.478 356.871, 243.234 355.554, 243.562 354.700 C 244.008 353.536, 243.664 353.275, 242.192 353.660 C 241.110 353.943, 239.887 353.627, 239.474 352.957 C 238.990 352.175, 239.217 351.908, 240.111 352.209 C 240.875 352.467, 242.905 352.093, 244.623 351.378 C 247.581 350.148, 249 350.382, 249 352.099 C 249 352.521, 248.100 353.151, 247 353.500 C 244.293 354.359, 244.476 355.470, 247.352 355.635 C 249.290 355.746, 249.717 355.264, 249.784 352.885 C 249.829 351.298, 249.559 349.970, 249.183 349.933 C 248.807 349.895, 247.150 349.718, 245.500 349.537 C 243.850 349.357, 241.310 349.561, 239.856 349.990 M 289.157 396.997 C 284.674 398.054, 283.600 399.331, 283.600 403.603 C 283.600 406.653, 284.399 407.957, 288.800 412.089 C 294.065 417.033, 295.289 420.311, 292.800 422.800 C 290.577 425.023, 286.069 424.246, 284.781 421.418 C 283.606 418.840, 283.603 418.840, 282.787 421.047 C 281.591 424.280, 283.566 426, 288.476 426 C 293.949 426, 298 422.553, 298 417.897 C 298 415.333, 296.910 413.643, 292.500 409.372 C 286.734 403.787, 285.693 400.770, 288.934 399.035 C 291.715 397.547, 292.670 397.730, 294.961 400.189 L 297 402.377 297 399.689 C 297 398.210, 296.587 397, 296.082 397 C 295.577 397, 294.564 396.822, 293.832 396.604 C 293.099 396.387, 290.996 396.563, 289.157 396.997 M 338.728 396.605 C 338.328 397.006, 337.986 403.221, 337.968 410.417 C 337.930 425.990, 337.502 425.873, 330.911 408.493 C 328.514 402.172, 326.049 397, 325.433 397 C 324.817 397, 322.105 402.962, 319.407 410.250 C 314.653 423.087, 314.404 423.509, 311.415 423.801 C 306.394 424.291, 305.789 422.590, 306.165 409.044 L 306.500 396.997 303.815 396.999 L 301.130 397 301.677 405.750 C 301.977 410.563, 301.794 416.808, 301.270 419.629 L 300.317 424.757 307.832 425.240 C 317.344 425.850, 319 425.419, 319 422.334 C 319 420.996, 319.700 418.546, 320.556 416.891 C 321.862 414.367, 322.623 413.931, 325.277 414.191 C 328.079 414.465, 328.674 415.102, 330.464 419.750 L 332.486 425 338.493 424.921 C 341.797 424.878, 343.938 424.615, 343.250 424.338 C 342.375 423.985, 342 421.030, 342 414.494 L 342 405.156 352.423 415.821 C 358.156 421.687, 363.070 426.263, 363.343 425.990 C 363.617 425.717, 363.989 419.082, 364.170 411.245 L 364.500 396.997 361.820 396.999 C 359.273 397, 359.186 397.161, 360.070 400.243 C 360.581 402.027, 360.979 406.865, 360.952 410.993 L 360.905 418.500 350.181 407.188 C 344.283 400.967, 339.129 396.204, 338.728 396.605 M 120.500 410.900 L 120.500 424.998 123.500 425.001 L 126.500 425.004 126.161 419.002 C 125.704 410.896, 127.123 411.112, 134.368 420.250 C 138.068 424.917, 138.233 425, 143.817 425.002 L 149.500 425.003 149.500 417.752 L 149.500 410.500 156.500 410.500 L 163.500 410.500 163.808 414.210 C 163.977 416.251, 163.676 419.513, 163.139 421.460 L 162.161 425 166.203 425 C 169.623 425, 170.059 424.777, 169.040 423.548 C 168.199 422.535, 167.935 418.305, 168.167 409.547 L 168.500 396.997 165.741 396.999 C 163.019 397, 162.985 397.077, 163.241 402.750 L 163.500 408.500 156.250 408.794 L 149 409.088 149 403.044 C 149 397.118, 148.947 397, 146.250 396.999 L 143.500 396.997 143.829 409.999 C 144.037 418.172, 143.790 423, 143.164 423 C 141.920 423, 134 414.088, 134 412.688 C 134 412.121, 134.670 410.918, 135.488 410.013 C 138.072 407.158, 138.390 402.703, 136.203 400.002 C 134.546 397.955, 133.173 397.519, 127.370 397.190 L 120.500 396.801 120.500 410.900 M 177.841 398.524 C 173.799 400.720, 171 405.994, 171 411.418 C 171 417.617, 173.179 421.540, 177.981 423.990 C 188.943 429.582, 201.010 422.767, 200.982 411 C 200.968 405.329, 199.381 402.173, 195.088 399.280 C 191.091 396.586, 182.132 396.194, 177.841 398.524 M 203.500 410.958 L 203.500 424.916 208.657 425.562 C 216.392 426.530, 221.727 425.277, 225.811 421.534 C 228.969 418.640, 229.399 417.633, 229.791 412.211 C 230.573 401.402, 225.217 397.001, 211.282 396.999 L 203.500 396.999 203.500 410.958 M 232.500 410.884 L 232.500 424.770 237.848 425.323 C 240.790 425.627, 244.165 425.514, 245.348 425.073 C 246.532 424.631, 248.400 424.627, 249.500 425.064 C 253.138 426.511, 257.686 426.035, 260.365 423.927 C 262.417 422.313, 263 420.981, 263 417.905 C 263 414.428, 262.339 413.315, 257.483 408.612 C 252.678 403.958, 252.078 402.960, 252.841 400.884 C 254.017 397.680, 258.429 397.112, 260.193 399.938 C 261.922 402.706, 263 402.538, 263 399.500 C 263 397.182, 262.652 397, 258.223 397 C 251.989 397, 249 399.075, 249 403.403 C 249 406.046, 250.081 407.790, 254.500 412.281 C 260.269 418.143, 260.827 419.486, 258.701 422.395 C 256.870 424.899, 251.803 424.190, 250.513 421.250 C 249.463 418.856, 248 418.225, 248 420.167 C 248 420.808, 247.703 421.036, 247.340 420.673 C 246.977 420.310, 246.033 420.936, 245.243 422.063 C 244.277 423.442, 242.937 424.014, 241.153 423.807 C 238.635 423.516, 238.485 423.181, 238.202 417.250 C 237.910 411.122, 237.955 411, 240.484 411 C 241.902 411, 243.322 411.675, 243.638 412.500 C 244.605 415.018, 246 414.173, 246 411.070 C 246 408.352, 245.801 408.196, 243.250 408.916 C 238.884 410.148, 238 409.306, 238 403.917 C 238 399.161, 238.095 399, 240.893 399 C 242.709 399, 244.052 399.651, 244.500 400.750 C 245.156 402.356, 245.282 402.336, 246.037 400.500 C 247.428 397.118, 247.215 397, 239.750 396.999 L 232.500 396.999 232.500 410.884 M 273.808 410.154 C 274.042 420.168, 273.803 423.509, 272.808 424.140 C 271.991 424.658, 273.046 424.975, 275.613 424.985 L 279.727 425 278.752 419.750 C 278.216 416.863, 278.023 410.563, 278.323 405.750 L 278.870 397 276.185 396.998 L 273.500 396.996 273.808 410.154 M 369.832 408.912 C 370.033 416.150, 369.742 421.614, 369.089 422.834 C 368.077 424.724, 368.401 424.884, 374.610 425.549 C 388.082 426.991, 396 421.606, 396 411 C 396 401.518, 389.941 397.061, 377 397.021 L 369.500 396.997 369.832 408.912 M 127.243 398.850 C 126.651 399.215, 126.041 402.211, 125.886 405.507 C 125.625 411.061, 125.769 411.524, 127.857 411.827 C 131.104 412.298, 133 410.265, 133 406.312 C 133 400.871, 130.085 397.093, 127.243 398.850 M 180.277 399.973 C 177.304 401.785, 176.817 402.736, 175.540 409.225 C 174.858 412.688, 177.272 419.051, 180.203 421.517 C 184.378 425.030, 189.291 424.862, 193.077 421.077 C 195.615 418.539, 196 417.413, 196 412.527 C 196 400.657, 188.706 394.833, 180.277 399.973 M 74 400.059 C 74 400.641, 74.450 400.840, 75 400.500 C 75.550 400.160, 76 399.684, 76 399.441 C 76 399.198, 75.550 399, 75 399 C 74.450 399, 74 399.477, 74 400.059 M 208.750 399.570 C 207.651 400.688, 207.834 418.433, 208.975 421.435 C 209.820 423.658, 210.544 424, 214.399 424 C 225.450 424, 230.011 409.996, 221.549 402.046 C 219.024 399.674, 210.305 397.987, 208.750 399.570 M 374.667 399.667 C 373.442 400.892, 373.917 421.517, 375.200 422.800 C 377.125 424.725, 384.401 424.259, 387.236 422.029 C 392.912 417.564, 392.511 406.017, 386.521 401.448 C 383.423 399.086, 376.316 398.018, 374.667 399.667 M 438.079 401.583 C 438.127 402.748, 438.364 402.985, 438.683 402.188 C 438.972 401.466, 438.936 400.603, 438.604 400.271 C 438.272 399.939, 438.036 400.529, 438.079 401.583 M 84.567 406.433 C 83.705 407.845, 82.315 410.125, 81.477 411.500 L 79.954 414 86.541 414 L 93.128 414 90.848 409.943 C 87.506 403.997, 86.423 403.392, 84.567 406.433 M 421.542 408.338 C 420.144 410.724, 419 412.974, 419 413.338 C 419 413.702, 421.726 414, 425.058 414 L 431.115 414 428.308 409.001 C 426.763 406.252, 425.181 404.002, 424.792 404.001 C 424.403 404, 422.940 405.952, 421.542 408.338 M 323.613 407.407 C 323.280 408.731, 322.733 410.531, 322.397 411.407 C 321.937 412.607, 322.414 413, 324.334 413 C 327.700 413, 328.092 412.123, 326.459 408.240 C 324.830 404.365, 324.407 404.242, 323.613 407.407 M 445.813 412.683 C 446.534 412.972, 447.397 412.936, 447.729 412.604 C 448.061 412.272, 447.471 412.036, 446.417 412.079 C 445.252 412.127, 445.015 412.364, 445.813 412.683 M 57.216 422.184 C 56.547 422.853, 56 423.992, 56 424.716 C 56 425.778, 61.342 425.980, 83.750 425.766 C 110.745 425.507, 111.500 425.446, 111.500 423.500 C 111.500 421.557, 110.745 421.492, 84.966 421.234 C 65.167 421.036, 58.123 421.277, 57.216 422.184 M 399.380 422.452 C 399.074 423.251, 399.114 424.376, 399.470 424.952 C 400.148 426.049, 456 426.525, 456 425.434 C 456 425.123, 455.534 423.998, 454.965 422.934 C 453.981 421.095, 452.600 421, 426.933 421 C 404.255 421, 399.848 421.232, 399.380 422.452\" fill=\"currentColor\" fill-rule=\"evenodd\"/>\n</svg>\n",
10
10
  prtsEmblem: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAFr3SURBVHja7JhNTiJhFEVvFVVQ0C0i/VP1daexwPiDduzYJhJJTMTEFbgX98ACHDp04FqcugoHDtyAepUyLy9RxDJQmneSE5gwKU5ebgqGYRiGYRiGYRgFxHvSMD44HqQKi9woIjrYkpAEwpLSswtuFAlPWVIG44K2qI2i4eORsrJGlVVlmGlTxCgCPtUhUyc8Ggz6/FwA5qkMWmpBG7PAkzFTEXK9eW8daNLev9X9we7/4WLcuPi79Hv4FfghFZe7PDIAAJsfxrTwqAg5GlmbBxpZyDUgoYw5TRq3lFH3VlZOZdD8DRVRB9Q2tTGLyxxl04EzYg74FgEt2l1e7h30+ydpHF+1k+Q2M3XucqPTOa4Cv+gX4KeImpZBjU+FJ7/PWn2ZhZGMuQY4xtxxrrWzuXmSMmKtcw9Rb3W7Zwy6AqQybCfmh541eZ+HvVGZEjkftD+hId5OwNCEnBkLNAL+UMZ8uLd3zpifC5qmcXzNqCuotKWcKwDqYsr4uZwQC/79Q9aXMFCGymhCwzEGL5mF7EabOYt5Dlhd+t7a3lpfP19MkpvXBE3X2mtDGTR3N6NuAnUKIMppOMaS1K56/pj1pSWh0Fd/UHXKlqWMOJMzIQQ27r1j3+xC2rzCOP6YGLVJk/nRiIsfs0QM07GxVatuc2xujHVzF7vYhUx7US+8GKxobwRHx0DGbDVRZmUUYR941VtXLwaDQlcjm1IY0cVhRBFRi5+xQWPUs/O85JHj8V32Zia5WDzw03wQc877/vL4f885Kc8AeL328uW7XOJNFFcjKP0Mr9R3zampVQhVeqr8Qr4mzsUIY5h0ETXhz/alnELoCBVYFvoZIus/AgIRTzwhiEz5F2W2FxaWo8wlBQUkqmaKSeqysjsoNFZ6RBA7U+T0Y41eaOIskmiLGqkickYFqcnzuHkSED1yM4rIFZmm4ywAJYjJYCh/paysKyxm9EIL4IWkEYwviQBAvoQ1GvIkCrjMCC34yEJL8+Jq6Iiziq1daCNxeHg4xhLQ8H2QzeXlexvLy22/3L9fh1xvaSlGkYWqXIKYwPCi3Vr06ru1tSRzLIRm/d39zDfpO2Jzc/MYLBQSiX6cwaAPYcHgvcPd3TbP+PgnkxMTb/zgcj3/dmVljjQvTqgKfVaxpUYrbBIZCF0UBYPB3xi2xEjNDg4OFHZ3d5/y957d3t4enZmZcQ4MDFSbzeZqAKhCis3mqncuXcKpOX8kYe22bJF/Ffz9ujrW3dnJuGQKs7OzCrwfCrxPR8Si4Vj39/ef8PGOBwKBHxcXF5u7urpsAKDAf+QAKFgQ6VyBGEeSfYVTJwmtunSMQidKZlFoFIaf4COR5ufn2dzc3IPrjY1HMl/MzCQRYyY0N4GkPib0ysoK9gP7JEtN/Y/VcVgP0/zptWu2SpstB6XOJqFPVmw9kexC68OkyVNhlFcRrByJkpmE3tnZQXFIaJQJhVZwu0f8V69+OFlamut3OHI1RwpbdvaslkhSlGtReO/Najbg/EoUWmFjY+OY1KFQiMYQj+Pi4bQ2NTVRhVabSjSIJFsESYkktCgzLQ2j0ImQmUCZSWiUh0QioV2umwxFRrQKnWux/JqZkTGIUmsVmqTu7e1VhPb5fCQ0SU1CI+IYYn18gsjIyEg1Ci3PkctCJ9u8tTC4k5k5vKnnWSQd4CLC5XrM4tAoP1Kjiocyb21tKaytrTGPx6Pw+8OH7JvbtxmfM8aFkYgCi1wwmx+b9PpvCavZ/Ce+XuNFJFVqytT0AZMzNUWleH7wl7xeb2NNTU0uAAioR5Bk2QZLg9NLQlvUhDZDmiNeQosC7O3tUWY+JvPS0hIJrchcbrejzFqEpsr8ACWW+A6l1io0VWrK1FSp5UzNjxOOR4wg8RL7pii1OCOSjJlaVWhB5rzwBp/n+BMOExjK+Qn7I56zGSgzgmJQzEAWFhbY9PS0IvPg4CDKrEloev7C+fOjRr3eaUxJcZ5LSbmF4G3+WA9iy8qaiiZT04Xi2NgY4zMRBMUPNaHjlav9/Li0AEARQhFEytU64v8ePU4ITXmMhEaZLZBuR5n5/ZdR6FjL/E9CyzJPTEwoMldUVEQlNMnMQZk7EQOA8puEzkxPV6TmrznQIjTNfvT19YlSU58p+yciU/tJahJaTepkFdpIMtOFIG7QSeNRA2Xm96v8fr+HaWiB1VWFw729kERQhJ+MEEKvW19fP4bX7T7ie5eLvVBSEjEakOBEfk7+IwDo4XzN+dyo07VLfIFwubt4xb5TYLVOFVqtmjO1w+FgLt4vt9utwBeBgiL8IjokQoLHoVJPOZ3OD2j/Ny2xk9DJ8g2ciELj3giU2RCuzhkAr0Uh9JOP6+u7UwFuSLSKAH8Mqa+v70Cam5t7kaGhoZ8R7+joX5ynKHO1w4GSaRb6oytXWHtre4BL3YMyc9rO6XSfiZh0uhsISZ0G0I9SRyN0aWlpgPOI3+7hf+NLERybRLvVam1vaGhQ6OjouIUMDw//xP8Tedkp2urqaj8JjfvBw0Jbkk1ovZrQWJ1JaCMYlepsAv1bf7d3LnA21/n/HzUzZsaMmWEMUy4zSMWWXIpcCqkI5VoiilzShFKkNbnEThFWxSbRhZVc+21J240t1ba1uqy0XaSUkBSrELs6/9fr2/fl/95P55z5HoON5jwez8eMMXPO9/I8n/P+fD7vz/uDjs/7sQiNN8JthuEuSbjJPqNIcqnksYbCUytUmNqhWbPXTs3ODoEiha6dl+fRo1On0L0TJ4ZmzZoV6tu376uUmUDc/qCPT3+JzdaaIQiFJniNQOPUOq5aFSp8Uz8vbzWu2V0WPO9tPsOJjkPEx8ffJKpUqXITJceQ3HOH4DNnGHcM6NXLE5p9H0qtEPLXsqQssNBsnQ9R6DFEUscgdGFSqaRpTWvXfg1S74lBaMksocnuevXqsYUeQJHRIvcU+HdfIqkldJ2aNZdhyVZgoSV1jZNPftkReoykjia0YAsO2HJPQ4u9Af2KWIJuhjwLJTThvfy1Cc1Hgh1//qkzmFSttN8ZTI6LPxtXoBk6TxehwxPoY3Hr1q1b2rRpcx9avfG4kbeDUT7DI3AbuB3DaIUkFR24+pA5r2LFPUFm/mzLfM9dd3ksmz8/tGjRogNk2LBhM1JSUnoln3hiV9BRJJ1wwhV43Wsh9HX4eguuwVgwuUHt2nP5hmjTogU6gdlFdT7Fj1wkgDh/JWQuJBTaSo3XucmikEegARnuM6Jnl56TERtvCsX4mDJlSl28dnWipWTlnNDjeB3Gc4Q2oxuO0Lg4rSB0+8MlNG9mNKEpc65kDii0K7MVeuHCha/6QnfEeVwi8O8OvtS9KTWuwQhKLaH/MHUqpQ4ktI6HUp+el7fSFZrCxiI0adSoUUGsUr/66qsjJbTWR4YTmvyqhMYFPT0lLqFealx8U0jmCY2Rh49iEZqSEsmsG4ebOZhIbAldKb104RmnVFlZ8+Rye2pWLh9IIKIw47777gvNh8jk2Wef5Yyi2FAnL68LJca5tBYUmkjoE044YUSpUqXGNmnSZC4eFJqwgxlYaIKOpSc1zBnjcxvQeYdFwvvXYwRhZ3b69OnLMVmzN6DPHPJ8rlZ29pm+1LkU2oYeJUJDaIYbxRD6NrXKunlWaCKhz613+kqKTIIKfcVll1FmDyuzhBYU2he5BW50C3wlLX2pO1NqCH09pXaFnjhuHKUOLDSH/ij1WbVqPRtG6EGEoQ6/Cns9rNBspXHdv4xF6J4dOjSGyGdqFbuEzvm1Ca3l/wg32CGs7Q/XNYfMbVJx0zEFHUjor7/+enu7du2msmU2MueDQZYy8fGDCcQaV//00xdDiu+DCKMQoEOHDqEJmLF74IEHCEOMEEYJQs8//zzHhTkZw0kZTpuz9R5MoSkz3rBNCaX2W+qOaCF74Hz7QYAheDNO/stf/hJ6/PHHvcmc+++/P3Q3ptvVUgcMQfg7G2rXqLEsNT5+BElLSOhLcE1EP8FPCJBP9EkWhzcCwZt0eQxj0p9j6LMD/u7URMC0hbCxtNKGj6PHERfaykzYKlkkNGWuVrHivoAtoGYAP7n++uu/fvTRR9UyezJTRMr87rvvUmbONHpCv/HGG/NdodHZbUKp/Xi6K861txX6ySef9KTGa1BqtdSxCE02YI3iMis0ZL2K8FPBQLH7+9dqsC/0cAp98cUXF8Qg9B4JzfwbCh0plj6uhS53eIX+FhMlhYqXjcR9LBUzSg9uUu/0+TVOLr8PBBaaMuO5nxo0aNAGCf3EE094Mv/973+nzEwcosycivaE/tvf/rYknND4t4Tu6At9nYReuXKlJ/XSpUsptUIQjX4EFZrHvIV1PyQ0OqLdfa4QuB69ND6uEARDeUPBcFCABKjAncPRI0b3wT1tyk59GKGB6RweR48jLrRiRgltxn/7pJcu3f/MWlXmM1aW0AHzmT+izAQt9BsUjTIzzKDMhDITyiyhN2/e/LdoQhMKzbDDCE0oNJHQkjoWoSX1LAnNuB10sej6KL4urtC8f2ylo3UOjyepixQa7+yGuMnnBRCayUWC07CbIfRoP8zor49YfL71IvweFY3maw1g0Ji5Ynr6OtycxQJhzepXXnnlYMz8/vvvEwrsgeNl+ikThSj0WnZuOWLDcXUCqZsT/ozniOvQBfTq3r17AZZ4saXnMFjopZdeCj399NM/i6khfqhq1apFii1Q9GYrpU6FvMQMIbbn9QVdGcuDq7wJn7jk68AQHOOo9e+t/zCgzwyvJv4kdEIDrMY/nUlmvK9atFEidBFCS2RXaE01W6GrVqjQix+/bLFiiZmRtyyZXaEVM3syf/7555SZIktmK3R7ypsUUOiPP/7Ye94333zTk9qNqbFYl1LHtKqcUmOcfbYjdBvQ3kz4dPekjkvpdyhC33DDDf2t0LhWNXhf2UqXCB1ZaHVCYhK6Sb16MygzCCQAqZCaugbSzcGxPEgSAbh/+PDhb0FoxcyUma+tlpmZbYK51E9QGttKu0JrouW6a64pQAkFvjE8qf/5z39SajemptCUh2XEvggotNjQrGHD2VZoolgedOb1ikP4A64Do3CdAwuNdYcUGmFV/LmQui6FZitdInRkoSVzYKGx/KkvZcYY7QHe1KBCI0/Zk9kX+h5S2gdDdRRaMTNfl6hlPixCEwpN3JhaQuP6LfGlPhBEaEmNT6rJrtCEQrOVxvP2ptTNGjQYFcMox96ihM4pEdoIHWUN4J49ezzefvvtry688MJxeOL+JA6cfcYZc4LGzKJiRsabuBkTBZ5rvAWt5g6srWPLzPxprRgh3vHYxPrly5fP0dS3OoeCQlP0xMTEDqALJL2Zbwgt/WLy/qeffqpOJ2N24rXSkydP3oTnmE+0mlwEyP14v2WTJtPTEhPbESN0R9AVHcheBKm0DyGfOqjQG65q124Ajqd1kt8x5CQZJ8tUfNIM38UfT2sND1lodw2gFZoVhazQOenpnsyxTB2rZbYyu0Lffsstj1iZiZXZFfqWW27pb4UGRQqt9YxcM0ip+XoUmjE7hUYesyc0rtEDRKvJY/kEotRn/+Y306MJjbDnfQgdqO7Htm3bNrQ866weQYUmJUI7S6a0qJUy8yNfQlcsW3bw6bm582OciFDMzPzk/8pWY/IQadW48Yi/v/LKBnT0+Hp8XaIOoI7Pe4OJ3Nzc/hxFsEKLSEJLapVQwJuHUjNmp9QUmq00W+jfE6WfauVLDJ3ezxqecca9CM0uJ0k+lPn+KVPupMzEXdIV7vHOO+8wl6NjidDFEFprACkXJZPQzRs2nF8pPT3ozJpmAF+nzMTkgQyFKEMl9PhRo5atQeyM15LMlNbK7Aq9xhWaBBGaaDybnwKUmvG6pHaFtlIzrAgoNPkM4cc0V+jdX3+9LpzQwnmw0zoN961E6CKEvoQySGiJLGHUMq/Hqmzy8vPPf9uzS5eVuFnfxRQzp6evLpuQMBmvWQCGIeWzP2HHyKfX7373uxn/+Mc/tvM1FTO7LbPQAx25xfxbfwKjQ8qJcW0JRSYSGiJ2AJ7Q/Du3cpNaasbTZN26daFly5ZtxLGOIbiQhQRps4VYozgtp1y5twLH1H5HsfnZZ88on5yc37ZVq3yMgb+OSSq+rodbdswVmh3ZgVdf3Z+dX1IidAChKbKQzGqZJfTd48eHsHojppgZN/9VtCqT2RJTZnw/wBWaMmM6+4BaZYkmmV30wPDenYcoNKFAElpSu0LfRnAhx0Lmsf7XQsyG/k5SBxSabGjXsuW8JxctWsuRFQrtlh0Tbku9c8uW1fhEKxE6mtBIqvkvoW1sqc4YP4YJZf7j7NmUmcQcM5dBaEFwUwYQCd22bdt+kGcpZXaFtpWKdHOFOkkofdCruEITnbdGPyjayy+/LKGHJwLF+2AM3pS/I7HG1O1QIuGpRYs0XKgSCZFq6alz/nWXdu28USUcR3tSMspRhNBoha3QklmdJU9mTBjEJLRkdoU+pWrVATfddNMcpISugcw7QMgRWjc2mtCcop5Gma3Q1SqV/RMJKjQeEtpKbYUeThjvJxqxJTSYEktMXT4lxZP6T3/6E4Xmp0FYqSm0WL169XLKbIXm4mYKzdVHJUL7yUlMgld6JS7q+nAx8x6IvXT+fNWaiyqwpXbt2pu7du26AiwhQ4YMeQICPvHYY4+tgyj7nNyMSDGzFdi2WChSvm4lbur1uHM9iYTOq5i+l9jVK945QmjQBUlPFFrPKygRcQvh/IC8688JJnk2QsKN6Jh9PmfOnM9nT5++adIdd2xCCLbl1qFDtyCh6d/M0hPR5CYXXHABi9mwsfBwa+npgZ9t7NOnD5PAmJra3e/4tnAnViT0r3mmsJGEZtIMhQ4XM1Pm6iedJFGD180YOTLElSECIrOlEW5uRqSYOZzMbEG34zXuPJxC4xFJag+JB7E9/rRwocecGTOIsvQCC52D60SpH3nkET4vY3YrtUKqEGS+Dxl5gzgjy9EoCe3mcpRk2zlCo5TsJ5BaM2eKmSlzEKF1I3lTeXO10kT5zMqai5ib4cbMItwDa/HmJ2NJFVFa5qEK7X+v+hfCjakVemlGUbkfytKLKZ9aQpPGjRtTagptpabMnNiZT5klNKfNeT5MjbXZdr92oWtaobVECTNWntD4ygurmDkWoSUziSRzpNwMtY6BZMY5DQ4jdIfDLLSVmn0KSS2hrdSx5lNboQmvE6+7rs93vsyDJbTyrI3QdX+tQqfY4ubpqGnH1Q6qx4GL1I1JRmvXrv1UJW3R4sQcM2sNIHMgiLsGMELMTILWXeabZJ5Z8qXlTj34plRyEmTeQySzFgG7Eyvu60lsIbF1jGqpNU7t5n4czKdGaTPE1Sb8KEuKFLxR3bqhVc88Qz47p27dezHV7q2q98/1asrM82BRIDZGqXGpp7NDyHvqZNolkONJ5qhCc5UDV3xHEFpVQGONmSWzcNcARoqZ3ZY54n4klBnnku8KzQ6tK3RupfSd4YROSEi4IlahFVPb0Q8K7eZ+HMynxicTpFZLHYvQ4gWc572UOYzQbTRcR6E5uvGrFprLdRyh21NmXjTWt1CxcVDcmFlrACPFzEXNAOpBYVYiTCjEeQwhfiWkfpSZH8NKSqK4sQhNWSM8FIJIaFJU7ofCD3aiKbUJPxpL6KBLur7Gp+NyiHs7gbD5+OoKrfFnN22UJJDjcZFsQjihGW5QaI7PSuiySUm3QuZtFFkUM2amzMSNmYPITIH2Y2Rha0FBwSwcfyGQ0J7MoLdiSis0z6mYQrsPCV1U7odiagpNTExdSKkDCy2pG9c9dYErNM/PGX8Olwed4HGcPfTuTPz/Rc5TKrFDiLNm69wcZ96NcEErLuAcSHxAAkcrXnhabiUSMWZWy0xsCqhyQ4QeZjjuX2Tj22//9f7Cwnmn5Z42Bq3QbWA4GKo1jCrKqJgStOGNxrm1JJSZKH1UncJDFNo+7PHznNyOIuH58zrwzc03OTuxobvuuksxtQgiuLeaXCuCcA5tCcq3NeZmpNyUlOGGyuse75WTJHRKOKGTjNCUWS1DUKEvbH62ZBbRZI4qNOTagbTIN2+++eZ5qK98G3ruRCKTocTKTKzMR0Jo1cH4+osvPicbnQfO7zOBxQif4dw34Rp44Ht+UnlSP/TQQ5RaMXUsQpMtXHD8axa6lLNzbIpKgFHmBFwIts64MBeXS03thnzmKRI5qNCUufcVl+4cOnTol2TIkCGfEty0933eIs8888zbFuQXv0YQZy4jaIUf6Na69XjIeytR+miqj+o7m5i5B0n200RxTpfgpvqlC+KaqHzB4RQaO9tuS0BSFYE8hWCswGuOtuC57xZYhfIpwi5KzU8uSn3IdT9QpOczFOthJ7HXr03oUkGEZuvMSQjKXCUra3csQnfCzSi4+Yadp1Wr+Aae+3mfBT7TfSb7jHK4nUhciRxF6OuIYmaKrHiZSGSBFdSNiITmz3yhSWsN2x0NoZs1a/b4c889twdSU2hSrLoflPqi884bH4vQx4PM9pFoa0Lz5HFT6pPM1NSmp+XmTsCF2hmk4LdogZuAvT7IHoQGryWVKvUkWIJUykXgIXw/HUxlmV2iYo4qN+vWjebPDG71Ti93gajzp2E5lSrwcxka+NTFzW1MkPn2AeFoAKHU4FCF/hLPOYkwZRTcYaquFgj+HBQSvNZULHyYfuedd65DKBVxnJrXM5shHK41yYsOl3NtQj51gTq7nFQhZsgu6XipbVfKGaZLtJ1BK3RWSkp9yqx0x6BCd5LMjtC4gY87Mk+izOydW5lVTtZhsCuxU4npKslM/mtFN5DImjGT0OWSkwm/b3SUhLZSU+hJeN3prVu3XozVPfsijFPzOlLqmIQmiKkLrNBspSn08VLbrpQhgSjUsK1zBj6iUhIS6qPXPMpJSA88zvzwww8TxoPfYxOdF32Z50poX+YJbpldoiKFDvlm5IL0JRLZHcVg6V/CIu3esGNcmTqEW2sQTekL7e7F0OMwCO3JzNU2Oj8XSU2hwVTcg1lopV+JNE6tBuLCs88OJjTwWY/wY7SE5lCsW9vuWJ36LmVxx50pMymLG10hKbOJZI5BaMkcSei5xJf5LspM1CpLZMMg2wpr1EIjF1ZkV2buMiCROY5O0uLSKHGeoSaJIHSLaEJHyL6T0IVWaJ2fi1pqvNYESk2hCWLpreHGqSV0wQ03UOrAQkvqC+o1GSah2UrzXrt1osWxkBcdNmYm7CQQVnkXp+Xl5WNPkx1FCWxx6zOj5x76v//7v9CLL774Tf369RdD5AcIZSZOvWi39e1jW2DCXruqc7KTmiqJJTJyFhgyKFamoD+JnOjVRlYesNBWG2yt2XL74UgDFW1UctKAAQNGYgs7LTUTSqYX9JnJQp9rTaHOT/F+uG3kVNydYRfuxTSCKqrPcQPP1157zePPf/5zaMmSJWqpFVOrpRZF1v2oUTlrV8+ulwzUdm84t8rEi6eB3ZTzlx5+hI2Z1Qn0e71VKHJ26dKezBjN2BM0xFDLTJmJZgApM1obKzRlnuLLXODKbFtfwtbXQol9OhB3XJkys4VVrCyZtdk+JVam2VEQ2oZQivevs1BoKzVlFgg5Nnz00UcUmqtgKDWFtlKrpQ4cU1No0vycugOt0Aw/JDT5pQsdMWZWJzAJMpN0CF0fMteCzCTWmFkTJprOpsy8IS+88MIOCP2oL/N4ygxBh7kzeXbc2KejxbTGFxG1yBJZU7zq9Cm7jOIS3UChn4cTmp0oCo3nvkJCuxM9DEMs/B0rtN6sJmTqZ1E4JbHxN7fijTQeTLm8desHUKB9N6V+6623PKndfOqphYUeLZBKml02htyPnJy1SA7LRx/pLP9anGQrkf6SY+qoMbNGNChzOQggmUWMMbOEVm4GZXaFHs+bRpm5TtDKTCSxxo5dNGpBsLaxmSuyoMyEMhclNP8/qNBauyhU0VRIaC2SldCU2ae3RT9XQXNeGys1kvhfldDAzaeW0JI6sNCSumXTppdTasXUAcrrxhpTH/2YWWFGkJg51wFJ5vtvvPFGrp4gipnVMrPADGFN5e1NmzadCmnzHXpYIGw7C6UCIM4Dx2qBcPGNCDt+BCI2tFBUC8490+L+Pi7O+USvh++vIkOvvno09xfftH69h9i4cSPRihEEHLtw7o9vwN+MIDjGwYCi9iL4/loDZI7rS/C9h3bJEg2rV5+6aunS7RybBqpPHTGmxpizuT+B6lPvwpCejalPipPUxA7nkdhnEo9+zAyCxMxWaM1EfQ6Zv6XIwsosoZEBJ6G34zn2WNBK7Leg5XifoDLpdCt0bk7GkrxKGZswFu6BY11CKsSnNqXIAv83u3JW1nuE30vk8mnlT61cofLva2RlfWnR76GQy0GhK2VkDOJrkVOysraQxrVqbebe4q2bNfMouOUWV2jvU6lu3aqEu8h61MzKEgcId8IieM35JDcncxvBuXjgePZaGlSvvp2g6pSEJhFj6lsQU0vqoEITdRQjt9RWaKHHLyhmzk5Hy1y1Yn6NnMw9IBahP8VH/gJs2fuVFrQy0YhV7VkInLWTudyeMhO10FhRUeBRuvT1HsnJ15eNj/e+okrSBNWJJihyOF8tdV5OBkTP1DT7W9llylwA0S/AxT9boLhh2xonlQuJahXSZvEmlU9NHYg3yy7CNy1YCqny+RWTDrsFCsBModA4r/OzUuMLKLTEpNDcMP+Ga68NNaxT5yAzZ86k0AwzvEW8rtAnlyv3JqlcvvyrJCcz80XC1+Jr8pwIjmVe+TJl8nEOw8omJhYQlP26iymwELoQMm8CKrgeMaZ+GOV8h99ww/5aVarsOrVq1cDDejVPzlrb/Jwz8iGKF1OLOF9q01GMd1z75cTMjDElc0ChJZonM5k2bdpXkhlYmcMKrTV9qtXGuhcWSszXEBmowEl04yU0ZXaFzs7IGOoKLZkFRbZDk5Ctm5Ua5XqnKORwhWbI8R7ObTY285TQaWlplNoT2m2hT6lQ4SO8aQcTvIl7kfTk5G6EryWh8emzFseS7zNAsFoUhSaYQSyU0CBiTE2hyS35+bsg9ebAQlfO8qRGubbLrdR0xpkijyfWt6MdMycTHFQmcWNmXNSvY4mZ8XG8Aa3IDJyZB/aR3oJsOHcfQEKRWdqAMC10M+Lt0VoaRLiMC3SwoOWaxNeRwNlpacOIXt8TNTttEc6hJeG0tcBH9CM67mrorCI3ohAfp2tNiDRPw3mCbwr8/j16E/D3mOtN9HrkvEaN3v7rqlUH01xHDx4cyk5I8Kb4OyAE4bn/Hi346bne3+iN/wrHmpUoRVJxzkTHhHBjf26lzJfLnBDXg/B3zB6FQ5h4JVDS4RWFOFqUrJZaMbXyqTl0igLzb1bJzt6pLL0g8Hq1OvfcfBtT+0I7MfX/LmZOZlYVZbYxM1qqmGNm1jmWzAIjGhRaawCtzB4qbxtJaO4r4gi93BcaZGzJLF26DX72hyBCM7nICP0thbbHj5YynxMuFrX0aM2/kYgICeZgCGxOOKGZs0xWQJxLmzen0IQye5g3BveAmaVUVldoiPOUhCblyyYcFNpKbYXG3oSzsM/LbgrN9Ylqqa3UyqfGfaHUOyD0XEod454va9FRjBpTE9e/oxIzU2Z2ABUzp6NlrlqxIlvmPSSWPUBwI6Yx9wJPTgoJOoJfmFIDKlGlXj9lJgw/dkDopbzJFkg3TVSrUOE5vR5lzk5LYIJ6G7Ssf3GFhnQjCT4xxghsPrTXDCduwb/nW6H5XMp31sTJQaGzy642Qr9ArNDnN2r0IoVWaOUKffXVVxP9vopNPl2pbNmHCDPpSFZq6m85JJkKIM7ruAd7BX5/IYq6L7NUz8hYmB0fvxDh4RiC8GYZhVYdFIKFytxz0UP51BSa5Pfr93dKjePZGlRootEPfIp54YcII3W8dfCIx8yqq0GZy2PqVzLHKPR6ykxUSVMgdqPQlNlDMmsNnRUae1TvMIL5gp4UosiSmiEHWsdJlBktVjShZ3jghhO0yAtdofF8PxPaqQHdOpLQzCXG94rFv49VaAqK83gax7BIUrtCE/zOGId7CGXG638JofeSPOxe4EmdmjoCQm/AdXalltBEQiuPei7zQyR1UKFJy/pNL7dSuy21rVYqDlfMfAJxx5kVC5Eq5csPxDjzt7HEzLgJ75WGuEJlYgXKW33Gjz61zJRXq7SJWmoVPMeNWmef3xMgp9w3GKZTzkYPwkKQBB2pqzjyIVGYwoqreHCcWqEKZaBE5oY8iZ+Nqp5Tbj/B3yL+TxqlJUlC+wNyu2IgoR/Fc3lvPsafVRC+oEzA4icWLAgJdrwwiqCZUokjodnX+CcnR3Csmtq+huh4zTG0IfjZpT7dCHNW8Gl6p71WOJ/l3BaZy84g9T7CkA5hCBOiWPLBHafWni8fYAHBJIJ+xlZcw8DDerHmfhRH6lLElVnjzAozrMw4kV0x1mdej6GjsY7QN1sktFrmooRmj9+MZEgAvjalXlyU0KzYGU5oPKeE1rHPwN/2Rsv7soRGWYAPGb+6QldIS5tNmQlFhjhFCc2hMQmtmVJ+f1iFJjwOc06e0FxDCZnfltBGanecWltkhAYPHrycQpcrU2YWpTZCx5z74QpNDrfQieHGmSU0DnygPkJiyZ/FsBy3YbuVKHnIBa3BBtVFdoXWzxmKSOhUTPESfPTeh9fYKAHMWriXrdCQa7QRn0IvZ1lY5XQoWYnxJ4XW8+D5R7FzxY4WO10aNcHzc9fWTsk+aAUL8Xffmj3D5xE9DyQlH1mhf3f77Z7MEvqGfv3CCf2chCb4/hpihijbEldoLULmrCLkC9tCk8svv3wchVboofDDGaem0IQzuHuaN28+lTnXKM07Fee8XUIH9aH7pZd2srkfTl2PYi8QkNCJJFJuhmQWQXdhoszEZsE59Ce4eDELLVAHelDVCmXft0LjGPcT/N/IcEJj8mGCKzRTSXHMa4zQByizhM5KTbg3t1LGhxRaN0edUsnMrwg1VnI6PpLQFLnPlVeG8L2ElszeV7eFptSI758mlRATE0wePcpJJEjVCytkhlYoW/YGgmO5heDntxLKjDfvOjPk+AE+3SZJaIx/j0MHcfGmTZv+Y6R2x6m1kRFHPthKv0aZKTWey5M61nxqm/thKy8RCV0cqU9whWYHkKhlRsz8TcQDligGTD6shwi34MbeSNwVIUJ7T6Oz9xG3SBBbt261+DkP4OOPN2PKeLRdxEpSMUvImJUyOTzK/2NsjHBiheCmOUwWYkonwb974yL0ZgcRwjyJr0+R1ISE/gQX3iMTVf8h2BzM1j1v4R4u6Cc8BrkmY0iSW1/8NjM5+SH87usEv/MKwbV8haXL+vbo4TFkwIDQhIKCEGo+ewzAv9vi/6+47DLyAxsF4p4XnvOxMgkJ3fH9Hfy+crlycy08BwPPZxV+78G0+PibSJn4+GG4LgUEq7rvem3lyk//hUZDqHOuQjZKQUA6AlvpvajoPwOyjGKeNvZ8mcFtmWPc82X9heed1wkDDGlEUrudxEOSmUhmkGGFpsxqkYMIrRiTMhNf5gHuihAhqZG78SLi6I8MH1oWz5v3EVkyb94KCo2/GWKhtNFASNDXQqEdelskskh30IydoMQWTDn/llBsfsUs5SyCazVr4tixW8cXFGyyjBkzZrMFM3SbkU/xD3y6TCE4pjvt+VBmS3piYleLez4SWUhmMfLGGxdQ6tdWrfqEQNwPfNYQDOG9S+bNm+cxevjwJyU0wTWYZaUOOup18XnnXU6h3dCjOEKf6JNkV2qDHHQAY46ZNc4soX2ZeyQ7K0J82ktsDJe9ATYIfDR+YsHH/Eekek7GZsI3jQVDcOstDEEsGNJ7z8KfRSU7+0OHDyzVKpR9z1LU8WBq/EuCa+WBjvVWS41y5SwUYzNRC+0+n17XsNbinE+Yv0/7xIJz+pToep+CySUCD/oTDK32E7DsOnwdAKGHMX3XX/o1DmHIYoQ3+0hQX/BaGxl+uKGH7SAestB2pfbp1atfgCnte2IVmjJboSkzcVeECP6MQmNceydOLhSJ6idlWvhJECMnWWL9fZeYXx/5EB42prbUKF/e4sacfI4jinu9lXtihO7tMIBQaEKhJXWsQqMM3MyKpUvnmlb6kIXW6EY8SMkBB8veYvKkVb2mHc6oWfNNxF+6EUUeIIeH8JH+KDe01JARh5X8SkMtsDJEBVqacspZlYXYkcFw210CnblpDvc4/N6CC3kfQb6GmE7QUfo90USDQAdrkgUTFh5Cr4u4+B6C55hiQTw60aLfx7HPIOh0ziF4LQ8OJRLE4MsI/u8ZCzqQz1rwXMsJBSH42UMESU+/BzyfuwmO3QPneqeFyVEWptFa8NxzoqHrqvQC5XMLO63OkA/3cRzPDw7sA0UKDen3ExQcegoTWU25TpMDECpcY1e6xCIziSdulVAKzWX7ePe0oNQBhbZSj7dCM4meIgvVreBMG4XWcJM6j6nIpLPgwg206EILPP8ggl73oHBCM/+CHUMj9FQPzLoRbLU8VVBoyFPAnVdxjD2wYWcPR+hbcfydLPjdK4lGRXAnOMJwN373T0RC4xjvIvj/+yyUGGKvFpQZ12aSWj48528pNN4Mv8cbaCE7uwTH7qF/o8N7J9NpcUzdLOynWBgKFoGurYTubtF5SmjJHIvQqNHy8slZWf3pAdZrukKnHBGh2ar+5pRTJtaqVu09CR1wlOMrtLrjKDNha2yXOVmhQWvthqUQRUN6hn4OvSxaycGJEFzQA2YS4TUKDbkX89+iSlbaO1UqpD4mIMl8ixWaLbSz+f1zzhrFrkmQGVihRzDpX3+jG40O4mwK7eexTMUIAZmunXGdbek+CCc0juc1Z8p/g/K8BT8ldG20wt3+W6NLhv6GPu7f8hyF7pPAcd2LuH2Puf+uH265t72UGW/cHnTgqAtNalWtOqJO9ervxSK0pHaFtjhCdzQXq6czXt3bogtNHKFftUJT5vSkpGG5GHbUz9CSLYZM3S2JaGUtlFlC4yN7mSP0NMksXKERJozQ1LAVms/lCz2BUhMKHUkAhhsSmjC3mS20FRr/no3NPttlpSVMNwsYeA1elZQaZxd22NSnp8WWeCDuG9jKzBVCvOdBhKbMGHd/F0OYPXDuR05odQolNGMaLhLV9sWUBZ3E8Yh51uJGxRJTe/kV6Lo2J6k+OhFV7aTURKMevFjR0AUXOP6+BK/5rn19CDQEzDzYAUNLAqY6N6uDcjE0w5Z6omDJ37IvWqE5jKcZQn0C6bkkEEYOXlSSEoFkYgPkm6a1fpwFREv1iH5P2LK3TMwvg6E2gf9fBWwCECdKepDy5cvfjCltbsJ5gGSjpUajQqE7W1IdKKlFPzcjU+2I/m1lJpE8UCeazpDT8/I+4Eynv5D5MjSa52EtZ8PUuERvAyJ386FD7hRKaHUKJXS8EZrgo2IepWYLEERoSV25TJnBsQitliAKXSwS2h8W043+Dj8zQpOyISu0OAxCd5DQHJc26Z/keyM0QomE/xY6JeU5J/flHeR97JDQeagph3N5ECW4PPD9V/b3L7/ssuVIwr+XnHnmmTdnZWW9IKHRX3iVQlNCQ5swXOLQxuIKLZljERruvId+xSQJjft9oYTWfoeHVWhQ1oQd3m5VZpP5tn7slY8TmIePjfdjiKmZGrm+cmpqJ8jswYKHACR5nIhOo0/ncCQnJ3sIHOvlDq7Q5BMKTSDIGiP0Nkh0L2M4tWyu0PjZVaISkprMuW3Az7qATj5tiVp5XiN2kJx85rfBcjtWz/26CYVGB+mfdsgM4/CLcbxLJTS5slOn3fdMnOhROy8P0+XZAhl7Uw+gRNp+lM3dv3Dhwh9R007bJHOlzo7s1NR+eJ2LLEp/Fe4qeP6/xQqNN8gELPf6zr5JownNdFzKzDCMMhO2zhSaMsOH08JsD5dYbKGJFZpxTTihCeLp6ZQ6BqFDWKQZQqHx9Z+9/fZ6bC3s84nHlk8/3eTzSTjcB3ILNlr+/sor28aPGrXNfkJcceml38198MHN5A9TpmxDngT3GyHc73q/pX7t2t7f1K1Va3fXSy7ZjdmwLaKSOa9rMV2N2coNyGtY7/MVNhUaZ4XGG32ds+Lkfi7o5fcCcf19kYTGca7D8e7g8ep1KfG9Eyd6WKE7tWlBoUOU2YcV+/V3Xo2NKYWFS28aOHBs47PO6iGhJTIXKJAkB9W2JlZoyozn3U6JgwhNmWvk5LxLmdlRltCUGa97rit0cauYlhJm6tubXGHYwVialUN5gv4mmR38Tti1HKpBSz39lCpV1gIefFQ0IdKzXbvQaiS5aKtf5QsoKUnpoiq4ogR/bZvspjlyKzgmz3BB7X1YdKrXQSwZwkryg1liS5cutXBVOWESO7+yFoW3Kb7+/sorO4UWLHhY2W8HJxqwa4C3KnsVkvTF8OHDJ6jDxBtuxYXcm3mtcHGHMt9DP6+SmroCIdhoUis7e7Nety5KHCx4GK+LPGnSpk2bUFUkL52CxafnnnUaS3Z5pbq0IWmPTp1Cy5AwRJHJ8zjX8ThvPV/3jh1D77z+OksX7EUuxrtIRJpYpkyZFrjP54MGwow8nUvi4+KbEdNKt8Anz0QuEMY5xVJZaT3Ck9EaDkz2024xH8ECmOeg8fwNPdNe4VES/mMXmrixtMrhcpTCSq0cCsg8j1IzXgsitGbCtMe0u0LFFVr7CVJoSW2F5nNI6GtRGsAKLZldsEWFJ7KVcjX+TakPilX31HBCM8k9qtAcJrRCQ/CZEhrj2ZP1c0pcGTcaFaZW4JNLr8vQQkILCU08ma3Qtw4Z8jOhkTjkCq2lbVwYy2v3Joo4dsvNzT0otakW1SCc0JRZkgYUWglqo4lSICgzV8P/JHOCJzOxsXNxl2S5+dBuLF2zrNm9ivujsPPDg/OlzqfUp1artsGccFFCa49pdw1hJKFZ/y2s1BSarbQr9Pnnn09xhVpjwSX73AReRBRa6ZwSWpvg27+V0FwW5XSGN/EaSWgmLWHiw1s9XicnZ1/fTp3WYdX3vjoQ0xXacvvw4RGFvgc7XFmh2TqfjOur53vsoYcoNK+xhLZMvOKKK1qwxbZCE8rMvg1l5ph8lBBDAlu+Z446c9WV4qsdd+MhcwKeXyXWNFTnhBqu0HHFEpoo605Fy3XCktoXmuQTnNQ0LT8KKDShXJRaQjP3OaLQxApNsOk9pfaErlOnTkSh1ZoKyYhSsxI6bMjBVSQSukXdulGFxnm/7oxWLLdCA+Ytz+P/UeI2jRqFxqCFtUJTXolsufryS8MKTZkl9LBhwyizhEYlpNmUOaLQaq2t0G4LTZlx/zbFIPT3mIT7SCILXh++OSg0X8PKHEHouOIKfYIhyU305+oCvHAtbhiTFhfvFSDUxvP8OMERDME49UyMM25GJ2dzEQPtuOgpBB+PrfAxuYhSekhUxc5uVc7vvvuOMDzhG0Chh5enWxfCiR7ovHGlhWBpK8tNgwZZuBr7IIP69An9GSueyVmIaUmNGjU8+vfv7zEMfyPanHfeck63M9FGMFMOQs8kXCyL67ectKpXb3mr+vUZKxO2yN7X2uiUkq5du3rVoxYvXmyh1N7vCS0M6IQYmzRqVPcgffpcGbr//vu5GEJ7nLsNhm00+LO30N9oFqeRJ4CU0qY/dQAzvQ5gwHFmxcx2QcfVDDN8mRtTZk7a0Slik5HIYd9FS1K7S7EoNMH3NSm1hnYkNYUmkJlSBxVaUrtCU9ioQmuLYIUeFNoikcWLCDks3Kjd8gzktUhosWzZMg/xF/yNgNSTmENiQe7zEAvuWEHLevUKFs6atWnRrFkU1EKJLSwhYHF/X5WNBH5ngYUyS2i+4cP1UQT/zWu/3gpNmdniqkUOOM5sY+ariTqBlBkh7JlKQlInkDI76aKaGSz+yu9onUS+kyi0F1MDvtP48cGD5UErpiY1q1SZjo9D5jXrhCOFIEIxNeNhKzQveCChVQFIsKNoYfkrwZvswpDFwhXPFoUXb7zxxs+eb9y4cYXuRE8ZdpxN/gSuQf6kO+5Yy9CGPO/w7LPPWryFqRa90VY88cRO8oQDwyCDhKbMvD6u0Lx+gj9nUR9K/VY9pA3jHk+mzAGEVi7J95wB5KSJFvFqJlDDc5SZhYkoMwk33kwChhrFj6nTnZiaQlupTUzNVMKxiDtnYEaRUh8IKDRhNSFKzY9I3QBJ7QpN1KLz963UfA6LI3DMQlNkyRxI6FQjNWfq0OGcR5EjCM2dCQSFtJ8uLCOwafLvfve3QddcswSVl+aSRg4IsZbcfffdf8PfbgkntDssKpEVulFoMmbo0Lcw8hIKKjRlPg0xs2YAJbSVOQlQZgnN6ltHe9esUkIxdaQijdhs8pz00umtNPrBjxnGTixVUPPkk6ejo7WpZuXKPPmonJ4HfJYvmfsfCLrHghvwb8vOrVt3k60A2KG8sCik2YabBliwZo8FkzMeAlL82wKZ91vwJtktHnzwwSnuLgG4Xl1Ft/btR2JUZbs6oASvYdEbRrCwO9k88OqrH2Fxd7aaFvzMwp9NED06d54JOTeAkNBaTYnsLohVTT0OIZ4aw06zGppTvKyWGePMrLn9s5iZ/khmctTK61qhSaTyBgkYS6TUHP2wQjOeptQ1KldeTqlxEf4TUGgWKtzVvXv3VWCuGDhw4BzLdddccz+5BlBqtdQS28Cfcd9vFkfc0qdjx/kEfzfX0rt3bwtbvDkWDAnea8FuVlNEgwYNulmZXaGfWrhwrhMCqe6FsJ8mFH4bRixW4G9HU2Zf6EKLNtoUklmwhh06essktoS2rTLRpxplxu5ilDmo0OoAujHzZXj9C7XjrBszx4WR2Q0xjtre3cQtQINtGHIpNYd8/Fa6G09MQuNrATqKzGP4IoaBeU4Bb8PH9mSRHFdqrEU3shSA0N/qoxQ9dqIbJ7iBPYX+AD2OSYTpm5ZkTEFbuLeJ4TYwTOBcB7gJ78pME8g36SQwXMZPh2ioJeX3uzt16jSFMktoFxwvv7rcYdHfN6zecPSqpavWS2jJbF6bfRfKHFRojq/v4zizHZbTaIbCDMpsQwyNZvxPt6iwQkfaioJCE41Rq5OIi66RjwKCd/MSTL5I6iCrgiW1hC60uEKrt25iREvMQhuRyXArczihbSabFRrT8bMgNMfLLfzEsLgyG6HNVs8GvKaFPyuw6O8lNVr9NRBahWSszOy7BBJaMiP7b50mTYRGM9yYmTITR2YJ/T97lIq0IECxEY6wFr7WV7qpcj7ALQQ/4zrA+Zp8iaHY31a862dBurtxY4FPHAA4oKlbP/10uzqLAoILdSr50f6h2ZmV3CFcYbQvoNlObYjdzN7dYYs304Lr054gPl8HYRUOiXCfIP9CEZe/6k0UZsfYkQ7DXZzfH0V0PpB2PPoC/9QEC4uucyeBprVrxxQzs2VGmYT7NM6smFnjzAn+aIY7zhxjzHz0hbYxtSZeKLWy85TzQQl8qcdQalyQ5yh1UTF1riM1F95S6oBCU2AXV+g7tDsrsTI4e4PnEyszcWS+RCIj52EoocxnnXVW740bN+6CrKoEJcJ9gvyrb9++84zQ7l7lQxzyHYYKI/gos2/h+HPPPfcRCU2ZG8cWM/PrB5S5LMbZ1QnUaIbGmdP9ljniODOxTv2PH/YAEok78cJUQD9huyWl1kJKk9A+DWvtnsOSri0BY2qxHcJMFa7QaoUFp8v37dsnrNCFRB/jksaivcDDrbGLtPMsVqG0Jah/9xWh0OiUDYOoFFp5KIIS8xiFJ3ROTg5l9nCORQL1N/R1ULV+QuFvotRWaILU0mWAMgcRWo3LvykzwoxJCjE0aaKYmaMZ6gASN9nIyvxL3irZnXjxhCY4UWXndabUEDlfQhNcoCcgsqQO2kJsDyg0JY4m9FjJ7IqjjS3dnWjdJVtW5liEVk6K+4ZzhebxEHs8zpq/7ha3Yj/Ip9Su0ElJScsQ2wcSWjIjbt7IFegkUsycJpkjjDMfC7vJxrn18JRyiu9zE7w86qQm7vg0w4+En5bxz8Dox0LMMG3HlhbbnanyqDE1y06xUCCJA+jcbJcsQqJgk3iizeDXpeBNBX4msrsXuKqWahjOFTjMio6LSF7FDBRtzNiP4+p2Kx44rt1ALbFEdrdCZpy/F2miY+Lj44cQtciM1YU5HnKZQxdnZXd/kohzJaqbgdU6+1AWeF8M48zvsU4HO5o4phv55uLr+MvyzsP95nrA07TlRFG5Gb/UllkPK3WGlbo0Uk4ptbLzNJxHoQlXavhSL4fUgYWW1K7QeLAFDCr0cNv6Ebf2Hm+YRZWe8JqE37dwaBVEaB2XRNaDQqNQo4S+TqEORbaxuuBHvUX1oiW2K7TqZlBmEnScGc89B4yl0GAAn5uvE+/LjOc+jUjmSLkZx4rMPyuQrplECk3c4Ty2ghSaqZSUGkzg5Aumx7dEy/1whWexbRbd5hYJEHorRw4ktSs0Hlbo25Lx2mqRrchOC9yScCFvPHA3CVJdEVWAOhSh9ZDQ2E5toYRWiGFl1sqReL/ylIOXgqDrbIUul5IyD9dwNyTV9StqnPkHylwWxSUpM2HrLKF5XXgMfn5GTY1mkGMtZo5B6pRKEpr4RbnbqjoShSYUmnAfE2RrbQkqNLO7KLUVWlJLoAgt9HAKLZlNi9zGtsLxZt9vbWJvaMCf2YI54YRu0aJFfixCkwyUXUCF/H6KlSWzu/5Px6XjYE6NpLZCU2Z8Cv6LMgcRmjLj62bKzGsroU3RzQ58A1uZrdDKZf4lx8wRH9E2GVInUXnU7ooXjX4oBAGcfFnub1lcZCdRieyo6Lnruaee2qVEIYkNOWznUEK/g+NhKmc/fZSr5UPuQUsW1tF+3wmAm9CTtLi0U7lgWHA1vMQmbLFdoVl7GvRCIfG1nMzQ8dg3mvvQmw6TK4NPQBxMUJC8LYmDtISvG4YGTPmMB2aLjG6IfaegopEXzsW4s+/jGAW6i+B5Wfbs4Hiz1gIqQZ8yh8vNOJZi5kDbwLlSJ0BoR+rOjtQFxI+pNwURWnANnSO0svQkkBX6OhxHb32UU2aucKbMFFlob298yuQBEHcQDk/xhlImCU2hwgmNbYbnSWhQpNCSGmsXx58IMSMJzcIsRMfhCk2ZGWYECTGI+iaUGW+Gu32ZCygzzrmPxpu1FpAyE+Vn/FLHmQ/75vaKqYkW3PrL5C/kRTJDUezVe2PVaKE5o/hpkDWKQpuyK59aKzMoEOFkC4Vm60yh9VGuvQYpMVteDj/54uaq527RzyU8W3JCodhKu0IjhMiPUWg9OIM4CytYOqWinokrNI9VpPivz1CJMrP8GmUOIrSG5hi+4dpz9OhuwsbFr/3cR+PNHJ7TwlYtnzIyn0iOxZg5sNDhpMaCW0l9LsGFktj5ROPVuNALMPlCqf8TRGi8FqVWPjWFJprAsEL3tkIrJrUyE8rLERui0RtiRnHyfKHrFCU0W2nE0T/GILQezBZcj9nGWagt0qdiWportCczifc/ISgzawoGFVrjzOxgW6Eps8oOEN0vCU2Zyc+G546DRymHE4iNqcOMU6t2XgOknjaGHP+1PtGngCVluUBTQkfDhh9cyq+WWnByA53HNZSMe6qoo6U9u3E8p7Mclc3bJTxui96caq3VSnPTe3YOFYuqECLOrW+PLj0m7Nq16xugYcVAQv/444+hAwcO8Hd/xGMveBebdo5sec45dTFB0pTg2npgA5663CCJVaEkcMBxZuXK3EXUMtvxZg7RcR0pM+hspX23MPmx2hEsSuo4K3SkcWr/I4synEmp7fpECa2OIqUGB2KIqdVSRxWaLTOFTvVlZvUem4SuqVth88FV1FKttCs0+wgSGr8zBENyiwMKLZklNAkXZz+FKeyJo265pX/junWbUuYgoxjCykyszHa8WZMnlJlL73jvJHTccSx0tLgpUWiXAL+1y/TzqatTam/5vF2jGHdCDzAEveqxuZk505X7EWNMLZiiyaVVB4X2s8ModF0KHaa2Gklyjx94ojuhhyq1NkXH6h2iDZEkdLVq1W5G3bkXEHL8KKGjyewKrSl9pckiwYhS7139wgtfjho27N2gw3KCkyxIMlrMGUSiPSQVM2t4TpMnZf0hOsnsjjcfy53AWIV2xVYIkkkoNKHQVmoJLalxA+Yr9yOWmNoV2rbQkYSWzK7Qbu4Kb66ExvdeK62JGQpNKDSh0AQ1QTypIXRUmYUrsxYxUGjyCpZqnVuvnt7oQSdOtiF7cRzOhTJ7WJmJJpZS/ZlAO978axI6cN0PiWHXKHIYClKcw966xquVHmnDD904Q5Ex9ZurV5N1uml8fgxRNZfQYXZhSiBFLUVzY2mWBobALf3cjvbKr8DfXAeGYOHwkOVLlrywf//+3TaXw3nYxCVl4ylsIloDqMT8SPIKJSGxYM52lCBjysAoopZZIrMx8SdpmiQ4kyfOmz2eHKvjzUd8ZpFCE/aiKXWSWaMooW1HMajQklpC87kcoRsEEFoPCR0llk5uRKk54qEdan2h+0lqgjWD91upzYPhiJVZQvNTxgpNkQMLLZlxclOJhLYts+rO8ZOSI1GuzJpAKRE6jNBupp7WKFIOWPSzNYom/fQejlMr9yNo3Y9re/YM3Tdp0jrdQJYZKIbQJMmNpdVKU2pNtGihg0ntHEK4LfHFF198G0qL/RWhxb+MzMQNMygz0bIpliWjoCLizJ9gVaaRI0eGkF6yrkuXLtxHxhNaMh8sOO8n6vN6qAPohhmkROgi4moKTTRx4SY1UWgrNW7IE5Q6qNDYzSuEmta7+BErofmG4Swfww7dwCKEjosWSxMKTeL9iQ4KTSg0sUITiY3aH6+gJf63hHZiZsmsNYCUOLDQ9X2ZbWWmeQ8++OGVnTuPUqiBY7UyV3eFlsxuMcUSoXHiDvHEjam1RlF7vNjhPA4xcZFAzfLlV4A9RDcvQK7CeuRTj4bQnQgz6Th8iNa1FlrWyryBHGK0izmj7bzrhh6gBvsCqgGo49esqNJV1TdQXnYcS4W1bHnXmp8ee901iBzywygJW2YJHBW+gUnbli1DYyHz7OmzCffpDmEbapZKYEGb3Q888MCsdu3acUcFb69AYcfi48KEGsd6zsYRE9vdQSDcGkUO7GuM2mzFO43UzMpadd4ZZwQVWlVB10topV9KaNsiBRWamPH1avgjT2jCYyeaETWLh/v7Ug/2hR4GCsCYVq1aoSjpkLmoqPR3TJvvhNCUmXWiKXNMQlPmOTNmeDI//sjjlJm1/yg0kdjr7xt/dx8rtBs3u0L/Gkc3YtoSw42plaXHYSNuLMP4Tq00pcYvsqWehq9zsZH6nuZnn01ZA+/5wpaaQvvJ6khMSqlPqW2iuoQO0gdQ6MGhP7bSKmrJN6SEJqZgfE9f6kGUWm9UMIZw5ytx8803r6xSpcr+aELnOlDmiePGUWbiyfzkoic9mVHJnyUdvBBGsfm3mzbtmv/ggwNzMjOrEkfosiVCH9rDldouuvVmEv3SvT8TmiVyIXUsQpP1GI/tk2SETnc6h2qRXaHDHS+h0IRCEx6/LzVrVXhCEwqtEIRSU2jiCo0t2laCbylzUKHPOfNMymyF9mReuWIlZSZWZo6geEKTb774wpO6JOQ4vBWaUrj5YhbEYFwKKWpTClvvg0Vf/JzdydPvvnvbPffcE0KJsNAFF1wQygle94OTDO+nYTMcLaVC/FvbCA2c6pgS3BmXdmv/gRyGH4ynbUxtFg93IdrRVeUH/CVTFHoWk+xxrDuC5LLUxu+IubgWc+bM8Xj00Ue5DQcLQnKoTzsmKHlLabZ2cTHDm068BhadY0mn8BCEJhSaox7a58Wt90GhQYEV2kgdWGhJjS3e/ktoEmlJkSu0yDHj02qpw8TUTSm0Jo44PS6hiYSmzMy1oMwxCL1z5MCBO43QlJlYmUk4mTkrSaHJ+umTJzezQpcM2xU/9Eim1JqJ4/RrPKSmDBRasTSFXjh37jYNR02bNi1UUFAQUkwt8qJzAPK8SaHxOrWJhqwiLPp0hRYp7nCejl8xtT8cyXWIF1NqJTFpOI/l05DKORNZc1udiaOoYLPNHxCavESwg8FLSFn9FEJLZjdmVoEbpbNSZmKn4Bd269atKs7Ho2Ri5TAKTRL9WFQFbFyhV6xYEbJSK6aW0AGzz97MSU7vyFbaHZd2837dWFpYoa3Uiqm1BlArd5TEJKEps93SI2CC/i6KjNf+o2EBJlAWYNx6A2Lm752Y2cocSehdTz755MAgQpdIHeUhYdTiKSZl0r3dqtnfAXYAGMI6yui9c0iK46xELXXMMTUz5TJLl25jFsBWiVJs0JLgkxShnnY1jn4oKT/eXxBgauEVIMwoiCWfWZvBIx3g6aRSpZYSvMHngTl4vofAdKy5nH7bjTcuQoLWJqBaejbMIBRY2IW7z5cuXboGUdhBqavx/Nz9BEsekR+RhNZWzb7QHa3Q7LkbqdVSxxxTS+pyyckHhSZOzYmYhVY8zUkcLZmyQlNm5agEFVoyI2R5GhIvkMyEMvvcRVq3bl1IqSW0ZHaFdh9Y29iTQisEi7CfIDnhWF96ddSFtls1J0NofO3BVdzr16zZzG0kXnrpJe0Qq/BDHUU3pg5SJmEVpY5UsNvdfiyc0CSC0Gqh7RrATbHkMyMs2YmO7LM4gNkEEnuglf4DuDelVKlp+PckUEg4BAipWXrYk1pT7HpIZvexbdu2uym0QrASoYsptEYNJLQmKjgubYVG2dqQlRoxtYQmiqn3xyA0WZUVl9JAM2fEvaEiSAttQw53DaBCiKAxMxa1ejILSkzMNhWFYKyg0ARbLRdK6AAPCr3aCq1roL5FidAxCm06VpUhdC0mEjGhCBe4DX6hMwy6ZvvHH2/94osvWDScQ1PeJj9uTD0Dkwu9evXaiTRKjyI6XWaTyYzXy5c5sQVepy6hmEQttcEd7UjX0KP/+7V9ml599dVNh1/ft1fHi8+fgQ3oN4GgIRFb5h2Q+VHIO91nqt8SjyeRCqCnYihQbHz77TVBhUaK64Yrr7yyCxuTdCRfKfTQDKLO+XhZIHtUhcYPrNCtXKEJ9wyh1DamltC//e1vNyC5/dlYhJbUGZCZSGhn3aFCDJFhZSY9e/asjeO5GbxGHv7D1AMQ+gBlDix0xYqezDjvR43IE4hftfRmoZlHYYWeWVi4EDnYB4IKjV0IuvCThUJHiqWPp1Xf/xuhS5dulZiY2B5ls65B+a+tHIaS0MSNqSU0pJxNqbHdxdexxNSsaV0hJYWtdB0K6uYKH5wmBo1r1y43ZsyYFtg/sAVi1ongzS8+/vhHsgk7ci3BGwzhzwG8Lgg0rEiZ96KzulB1tn2JRxKGXW79aFsrmrACkhg7dOgDGKrbH0Ro/N4OhGz9GCaxlY4SSyfElTwOTWjQIJzQhDNgFNqNqTGmelBokl227HJf6v8EjakpNYp+n0+pbb4wsUKvWrGiGSVmrCokNGVu3awZJQ4udMWK31BmLEigzB6UmOA4+hLlhgi3XrQV+vLWraccitBspd1YukToQ+wUqlMFebwlWlrihNoUl6OIy0ZOElBomxDPDTUVU2OfwNDMmTPfZ0ITSQJYJPCc9nwpanN2iYc3gTejWCbhp12ehEqeMQV1zPAx9bUGUJMZWNdINNoSeJyZtbOxDnEqW2TuraIWV8UT3frVQon72m6NJdDAEBaDxDZ1MyV0lFDDQ0KrcKXKo5npcIVcCaSkU3iYhNb6O2fJkmJqK/QkQqEJWlxP6qBCS+rsMmVaW6n56QFAogc+IV4wy6YoM9c26jkC71iATqBXB1syqwywRDZF11sJf4FuWyKpWQKNUlNoTIvPxDBdYKHRKezHjEQrNFvpEqGPsNBES5cQhkhoj3/84x+hxYsXU+ixRGV88TwTIPWjkGzLoeR+CB4X4Z6N8Sho+PDDD3cxW6dRZi7YDSw0h/Lwew/iItxEGCPbzeC5UyuXTBnOFpRP+ddaKYOf9abUFBo7376AyRQOPAep3vT+Oeec005CJzDssKMdJUIfcaEJhSaKqaMKTU7KzHyCUiNW/XcsuR/Ip/aE5jERyowb3gr7b3dBK71BawAhc1Ch+f+ezBCRMntYmYnW/xnqEEpHqZl/baW2QmMVzGbKGlRo3Id2LDfMsKMooUtyOgIKrTRSFXRRQZpMCL0PQruFWdyYmptNPvvss+/gSW8l/maadvuzEdi2YZli6oBbZBww+dSthb81ct8b+vdfrJg5hvzsHQhpHuVSLOIvDrZlBpry/FPjUmsTU/a3Br6eTuGwWMGT2m9V2xIWYCfIvpsfiuGBwjiz47xKUxKaYVbpn5UEOxY2Bwr/OAaEJm5MLaEpCEkW2i0KQlupIfGBooQWlBoLb70OmtY+UmiUWfgmcIgBKP8t+fk7mjdsaIXmWj/JfD7PndeAMlMs1ACp4lONUrM4O6VmS+0KjZnTKaEYHw0bNuwSTmiOdpQIfXSFtjE1y+kyJ9gTOgGS4A70J1qsCgkHC+54y+LfQWJqgWVLH0LqUaJqdvZGtLT6+7Ahi6XlueeGRt54Y2jGlCkhJNd/c22PHgvDCU1ReQ14LVSn2aca4TR9mTBCU2Zcn90xuMyZ15WU2RW6bFzZEqGPtNC4/hGFJhKaMhP8fU+gMds+klkgx2KWkTro3uSe1PwKQkGFrnf66Z7IliXz5u1dPHfumubnnJNPoVXRyAidG0Tojm3btl2/bt2fKHOsQmOfReZ/lLTQ/yOh3TK0QkJz6dGbLNYIrrAbaaqyEdEMG6QeAqlnQrjNRKFHwE13DqFuxnSiuhlaA0j24vun582e3bdvz559T87IqEtwbWr4nOzTUOQPyG+IdYG9UE54Bt7Um0KH8Ni3Y8e68ikpvfzYu22kTqFbmKdE6MMstNtSC1do7Qhr6EwkNoWW1DEILWKum0GZH8eIiOpmuGsAv8W2Ft98+eU3WJn9HEE4MM7nNoKRixsw9T8b5/4e+eGHHw7g64FDkRl/u/emgQPvxPUvEfqXILSktuAhoa/wy+m2BxcZ2oD2EpsdO0mNjuL0mGLqADGzWzeDMj+5aFGkuhkqlC4iVS2153/IQi9bsGCZdqTV6IrGoUuEPvpC6xFN6A6UmGPZzEtWHToisSm0ldrE1P8pjtCKmd26GZR55YoVkepmuEJL5sMqtGRGcfkRrtARZwqN0CX5HIckNJdhxQcSmg8rNPYMfD2ZIwb+R2iS2SHWbqLJ/7PTxtrQCDOK8zCZsjbAOHXEdFRsbL9z4tjbds5HiEFUZkAxs1rmDRs2MLne4/vvv1fnVi2z82Yt/uNHPP76zDMv+OV+r9NEjnYKU1FLd+sOX2YST0omVWITOjcGofWIKrQ2z9SurJLabmDpSn0oQktm8Hd8P3dwz54fGqEVM6tltjITrQGkzPacDpfMe32Zb6bMoJ8rtN2LhrO2YbLt4ktWrBwlofWwQlNayqsK/ipYrpk2FlwnLDXA0rtuTI0huX2xxNQV09N/qJ2X9xLu+h995g6+6qpVkHkPocxAYUa4IjDESlhsiQVyxRdWSkryFgZwepzT5Ao1itqLpkToYgqtNXmHKjRlJooJrdAqWk7UYrMoOqV2Y2pMpCym1AHzmXdIZis0adKkyVzkan8ImfcgxlfMLJnDC138B+PwvVgFvgaJR96MJGWOIHSLpBKhD7/QWjVN2diCxjHWLVOmZXJyckfkbHwQoEXaj0T7l09Ehw+00lbImkLmc1v45lEiFPe3ptR2iwxIPYxDehB2D5HYCkFqVs4i3sIAbMr/AsoUPIrnfRB5zQ9iRfb9OLnpTAslTBHt1bXrQuxZvkatJocZyZF4/HXFiuU9O/e865TKpxTgeg4jSkvlmDzh+RJMqZ+bAJlVfIf3gUvL3NGNkkWyxRe6kRUaeRtfRcMVmmGLETpXLY/gzbNSm0pHiqmHEYQfS6MI/Rllxonci+e/H9yT4IPnnuQzgSh346quXcdQ7K/w+K74RrNVZ2v8Hc5/E0W+vnt31qD2RBY4/wGUmSXJtD8hz9U7Z6x6Z9ITO+QlQhdTaOIKrVg3HkKzLBh+qWPn9u07tm/fPl906NDh1ksvvXSopesFF/Qg+JuLWOSFQjN8YesM7HIqDyN2DX7UultkcPLFlzqfUjPtVEJ7nJy1r0bl8ovx9+N8poDxCT74+9stXORqwZZ0kwsLCyffeeedj7399tur0UHcQIJI/PXXX2/AZMtqgmVnj2EKe3KT004bg3MYLrTyBXBEo58vc3fKTNSHYOtMobX0ijJzATBlLhH6EIUmEppxLoVO8IseUmii9EjQx6eXhTU8CMeaKTRbZwmNZVMHZXbrPEtqxdQUmpgZxXyCmHoOpabM1SqkfXPe2Wd6Mgut58PfeGgrCqF0VoFjHmqJj48fQfD9iO4Xdx+BZVHTLFOmTJmD9ZX9sc5yBHH/3pMYXwVFlsygty9zZ8rMvA2+eXm+lJlQ5jBCJx5LQpeKxtEOOVQSgB99jOc4jMSxUXZa/D1MOoKu6rwJ/ozwd9hj/2kKN74Rwxa29uEKqFgoeXl/K2eWxcXfejG1u5Uzs/iw/m8eWIswY56VlRX6/UWt1wmzOjvfZ7DDTUVwYxHc5DDYMIghhsIMiszrQ3g9OapBmf3SBV7oZa9PTtjilbH7dFTktT8rDsV4g5xI3GqeRujcsmhVtfqbF59yWakdOhIJzc4ghS4TV6aOFVq9du9mEUdqu48ipWblJis1hSbo4OWjRFe+NgcSHDmwmNXZfYgq+QuJXlyhzfMMEnwtE2J0JlbmJECZmbnnvuF5fQJUYy2eP8V5BHkylXqyBGllLe7fBBWakrlCg5qMayU0B/45ja1p6zC0oXz8PcrMcIMy25wEV2iRE2YfRUoNzsRzNebaPqLYOgodI9CVUDCiljNiCx6cfOE/V1+3VSa6Ppox5TUFdf0aHGELy7hCiyD7U4rgPhRfaL1YvJDQsRBOaEuk13XL6bpCazzaF7ouWxNf6laS2oU/p8z8Pcoci9CS2t1HkUJLahLvj4tHwi7R0ieKoNiqE018sfsIbS4UC3pD6Dn4nGqVJbK5Nq0ks9kqOi9WoS2x+nIkhNaBSGA9kkjYVjs6ycTO9Tuc6KCfJxD9nV5MRQ8ltBLZGQsTtTCsTEowIdLM53yiG2Z77UQ3TMLGCef8M51adRwZATX9dX21tfk+j4vwjWaJh/QEHVAPHW86CuYQ/E0HohZd48FKElLrHQO9BJ/HtsgEr9WW6Hh4DdnZVsvshhq4IGkkjBci6v0N4M+JrpfFkDms0EkEPff7CMZa7y2Xmlo7qNCVK1dOrl6pUme2btXT01tVLVeudqxCY03esFOysibWqFixjt3g0pc6j+JoupqyElYnzUxMvARDaH8kWE41iEKr9aHMxN0pVTKnpaWVx7mOyquYMSuvYnpfc8OSbQFGjowQic1jyUlJaYAY+vf8XquxBVd6WKzQ2DdxEWvWlU9O7mDqaXSwCxBAdyG5MbHzgAS2LTAxCxhIB7XIhC0yjvNPmSkpntD+MalPEbZlltBYWnZnlezsC1n0HDktY2MRuiYcyKuUeS+pUCGlUoTfP+FICZ1CkF22k1JWrVixHQQbZVqwhGhUhgD42+n827zMzGHVK2Ve4rT08RZXaMpMqpQpU4fbmLlCqyK+VjsrBJHQmKH7I4fnMOrwDMt38f8Jf58LSnXDJDTIjAP8CqG/1EFaoYltqYnZHKgKhcbr/ZVC89gslF5wTR7+9hRyEq5NdlraMMpMGLokAZOn3V6kooU1dERD8zq/Evt/+n3DRfbTAhWjrscb6Ctco3H+kqrqui6aYLIV+63Q8OAdUiW77IVVK5Z9x9bHLoL0mhUqXJSXU+7a3JxyF+VWSr/PfvofVaFx4a6DXE9R6liExjv4k7yMjEVEQosAQi/C67XiQVJoFEqsJKGJxqW12lnCgtOs0GiJpkho/L1304htncMJjTyNWVVzcupboUXlMGLz76zQEl3YFp1I6Ir49ML1PdhCM2xJAAqZnIpIbYQrdLh+g+DzWKHxmnPZQpOMhAxPaF4ThB0Hj1fXxQodJ6HRSlfNTr/zUIXOzIxLDyI0Kc52anrh0kQ3jzcXYvZgxXjsVZJibmzpCCQR/i7+bhFvel65ctfiRl8epZ6yJYngwuUTXLzqkHuPWmihlloxtcAJ/AbDZq3wenezZYQof8BHaxt+b6e3bescrYWOFDPavQkJx6pPLlPmTLz5NvLm6/lddMw6Dkh8KcEbcCTJiEvw6lBzJlNwqFF9A0Fp8ab7iwRGfH4egZge/Bui5+CnF6mQkFI3L6PSgpyMjB45mZnzIHcLHZe9JmqRJTJIJTy/WriX2JL6ExLAB5FSvXz5VvzUZUOVVyljor24doKGFEfoE6IJjTh0Nm8y4qbrSCxCQ4xhFDq3XLmLqmZl1Y9BaFIdJ76UUGq1FFboSFJjK4lzIPJqgjfiDXiyqpJZWJldoXnOiKHX5FZMnxBJaI3CCMaUVZKTT8INn0kJ9Lwu7tR6lfLlKfMKleul0IQdXqJRGYZSFkqMBbl/oNT8CokpNP4v2UN/pxlRK3RuRqXb2dmj1BJa6DiNzI7QOL/y5dNOqVChM4SefghCLyIV00vn/U+E1k3WjQsqtPn9dJ+kWIS2H+9EQktqwRtDJLaRuwahzEQtkNDf6zn1ei6Bb5iOWwLo/IVz/ApVdDw8ZsPBeJsjKBxJcTuVvvCGMmcS/b+prKRswqoWXbco16OMRUJLdPaNiDuMJ8IJ7ZBs+dUITSS0lcIV2/1Yd4V2WyD7PHFHQOhwG3La41f8bY/ZoFjbUtPiCq2fO+SKooT+r+txjAsd50ykuDfCpXQQAgiRYAlwAaK2eG6rbbH/J6F1MwxJlkibAolwndmouNczQgjlhiTC/QSKhH7HRc8bpUVOB8ki3PWISuw+uNc3nvyahU4CptWOLLjT+qQ4JJKjIbTFbbHdWFshiXCFjCasi33ewJ9Q0fsMLonHitAgotAJlgCCxiZE8BAlhUQTRJvKG1FJokNph0RLpImD4ERvsa1gCkks7hvVFV4/F9EEDjfFH/QNGU7mcATwIfFICh1nhY7GL01oEeAj0nmeX4TQQsdnSXYoKyIJHyeinL9whQwutEvxhT6UDTz/H1LiV8bvgfEFAAAAAElFTkSuQmCC",
@@ -13,14 +13,6 @@ window.__ModuleLoader__.load({
13
13
  heroEmblemMask: {"key":"rhodes-island-hero","width":320,"height":320,"alpha":"ANpODLQCAwEEAQO3Aga4Agq1Agy0AgyyAhCvAhKuAhKuAggCCK4CCAIIrgIGBgatAgYIBqoCCAgIqAIICAioAggICKgCCAgIqAIGDAaoAgUOBaUCCAUEBQiiAggFBAUIogIIBAYECKICCAIKAgiiAgcCDAIHogIFBAwEBaACBwQMBAedAggEDAQInAIIBAwECJoCCgQMBAqXAgoGCgYKlQIJGgmUAgkaCZQCCBwIlAIGIAaUAgYgBpICCAQFFwiPAgkEBRcJjgIJBAUXCY4CCAUFCwQJCI4CBwcDDAUJB44CBRgFCwWMAgcJAwwHCQeJAggIBQwHCAiIAggIBQ4FCAiGAgoGBw4HBgqDAgsFBxAHBQuCAggIBRQFCAiCAggGBxQFCAiCAggFBxYECAiCAgUIBScFgQIGCAUcAgkG/gEICAQcBAgI/AEIJwUICPwBCCcGBwj8AQgFBB8HBQj8AQYGBh8HBgb7AQYHBiAGBwb4AQgFCCEECAj2AQgECSICCQj1AQkECS0J8gELBAglBAUL8AEKBgclBQUK7wEJNAUHCe4BCTQHBQnuAQg1CAUI7gEGNwgHBu0BBwgDLAgHB+sBCAcFKwcICOkBCQcFOgnoAQkHBToJ6AEICQQ7COgBBkwG6AEGTAbmAQgLBwwQCQcOCOMBCQoICxIHCQ0J4gEICwkKEgcJDgjiAQgFEQgSBxIFCOIBBwYRCBIHEgYH4gEFCBIHEgcSCAXgAQcIEgcSBxIIB90BCAgSBxIHEggI3AEICBIHEgcSCAjaAQoIEgcSBxIICtcBCgkSBxIHEgkK1gEICxIHEgcSCwjWAQgJFAUUBxILCNYBBwkVBBUHEgwH1gEFCxUEFQcSDgXUAQcLFQQVBxIOB9EBCAsVBBUHEg4I0AEICxUEFQcSDgjQAQgLFQMWBxIOCNABCAtHDgjQAQYNRxAGzwEGDkgQBswBCA5KDgjKAQgOSg4IyQEJDkoOCcYBCw5KDgvDAQsPSg8LwgEJEUoRCcIBCBJKEgjCAQgSShIIwgEGFEoUBsABCBRKFAi9AQkUShQJvAEJFEoUCbwBCBNMFQi8AQgSTRUIvAEGE04XBrwBBRROGAW5AQgUThgItgEIFE4YCLYBCBROGAi2AQgUThgItgEHFU4ZB7YBBRdPGgW0AQcXUQ8EBQexAQgXUQ8EBQiwAQgXUg0GBAiuAQoXUg0GBAqrAQoYUg0GBQqqAQgaUg0GBwiqAQgGAhNQDwQICKoBBwYEElAPBAkHqgEFBwUUSSMFqAEHBwYURyQHpQEIBwYURyQIowEJBwYWRSQJogEJBwUYRCQJogEICQQYRCUIogEHCwIbQCgHogEGMDIwBqABCDAyMAidAQkwMjAJnAEJMDIwCZoBCi80MQqXAQsuNTELlgEJMDUzCZYBCDE3MgiWAQgxODEIlgEFNDg0BZQBBzQ4LAIGB5EBCDQ4KwQFCJABCDQ4KgUFCJABCDQ4KQYFCJABCDQ4JwgFCJABBjY4JwgHBo8BBjc4JwkHBowBCDQ7JwsFCIoBCDQ7KQoECIkBCTQ7LQYECYYBCzQ9KQcFC4QBCjU+JwcHCoQBCDc+JwULCIQBCAUELj4nBQsIhAEHBQUuPigDDQeEAQUHBi0+OgWBAQgFCC0+LwMICH4IBAktPi4FBwh9CQQJLT4uBQcJfAkECCxALgUHCXwIBgcrQS4ECQh8BjpBPQZ7BzpBPQd5CDpBPQh3CTpBPQl2CTpCPAl2CAkELkQ7CHYHCQUuRDwHdgYKBS5EPQZ0CAgHLkQ9CHEJBwcvRD0JcAgIBTEVBCs+CG4KCAUuRz4KawoKAy9HPwpqCD4VATFBCGoIPkdBCGoHP0dCB2oFQUdEBWgHQUlCB2UIQUpBCGQIQUpBCGQIQUpBCGQIQUpBCGQGQxUDMkMGYwZDFgQxRAZgCEEXBTFECF4IQBcGMUQIXQlAFQgxRAlaC0AVCDE7BAULWApBFAkxOwUFClcJQwwRMjkGBwlWCUNRNwYHCVYIRFE3BggIVgZGUjYGCgZUCD5iLwUKCFEJPWQuBAsJUAk9Eg1FPQlQCDkXCUs8CFAIOBcJTTsIUAY6FQpOPQZPBzgXCVE7B0wJNxcIVDoJSgk2FgpUOglKCDcWClU6CEoINxYKVzgISgc4FgpYOAdKBToVC1g6BUgHCAQsFwlaOgdFCAgFKhcJWzoIRAgIBSoVC1s6CEIKCAUoFwtdOAo/CgoDKBgLXjgKPgg3GAteOgg+CDKLATUIPgcyjQE1Bz4FNI0BNwU8ByKxASUHOQghswEkCDgIIbMBJAg4CCGzASQIOAciswElBzgF/gEFNwYmBx8KBgoJExMDMwopBjQIJAsFBAkEBQ4CDgUXBgQFBwMECAQGBAwEAg4nCDEJJAsFBQcFBQ4CDgUYBAUFCAEFCAUEBQsFAQ8nCTAJJAwEBQcGAyADGQQFBAkBBQgFBAYKBQEPJwkuCgYEGw4CBQdFBAUCCwEFCAcCCAgFARIlCisKBgUbDgIFB0UEBQILAQUICAEICAUBEiYKKgkHBRsPAQUHDwQPBA8BDwQFAQYBBQEFCAgBCQcFAQYECCcJKggIBQIHEg8BBQcPBA8EDwEPBAUBDAEFCAgBCwUFAQYECw8EEggqCAkDAwgRDwEFBw4GDgUOAg0FBQELAgUICAEMBAUBBgUKDgUSCCoGEAkRCAEGAQUHDAoMBwwECQcFAQkEBQgIAQwEBQEGBwgOBRQGKAgQCw8PARgKDAcbBQUCCgIFBhkCBQEGBwgMCgYGBQglCRAMDg8BGAoMBxwEBQILAQUFGwEFAQYHCAsLBQgECSQJEAwODwEYCgwHEgEJBAUECQEFBRsBBQEGBwgLDAQIBAkkCBILDg8BGAoMBxICCAQFBQgBBQQiAQYHCAsLBQgFCCQIEgoPDwEYCgwHEgIIBAUFCAEFBCIBBgcIDAoGBwUIJAYtDwEFBwwKDAcMCgYEBQcGAQUEBgEbAQYHCCoGIwYGIgYVBw0IDQYNAwUDBQQKAwUBBQQGAQ8BCwEGBy0GBiAIBSQFFQcPBQ4FDgEIAgUECwIFAQUEBgEPAQsBBgcuBQgeCAUkBRUHDwQPBA8BCAIFBAwBBQEFBAYEDAMJAQYHLgUIGAIDCQUlBAgBDAdFBBIBDwQMBAgBEgEoBQkXAgELBScCCAINBUQFEgEPBAwECAESASgFCxUCAQkHKAEIAw0EQwYSAQ8EDAYGARADKAcJFQIBCAgoAQgEDAQJAQ4CEQIVBxIBDwQMBwUBDwQoCAgVAgEICCcCCAULBQcCDgIRAhQIEgEOBQsIBQIOBScICBUCAQcKJQQGBwkHBQQMBA8EEgoQAwwHCQoDBAwHJQoHFQIBBZ4CBRYHngIIEgieAggSCJ4CCBKuAhKuAhKuAhKuAhKuAslN","encoding":"binary-rle-v1","opticalScale":0.94,"latticeHints":{"sparse":{"pitch":5.4,"offsetX":2.2950000000000004,"offsetY":2.835},"light":{"pitch":4.8,"offsetX":3.7199999999999998,"offsetY":0.36},"standard":{"pitch":4.2,"offsetX":0.10500000000000001,"offsetY":2.205},"dense":{"pitch":3.7,"offsetX":0.6475000000000001,"offsetY":3.4225000000000003},"ultra":{"pitch":3.25,"offsetX":1.54375,"offsetY":2.35625}}}
14
14
  });
15
15
  const PRTS_STORAGE_KEY = 'dsh.ui.prts.v1'
16
- const CONVERSATION_SCALE_DISTANCE_MIN = 16
17
- const CONVERSATION_SCALE_DISTANCE_MAX = 240
18
- const CONVERSATION_SCALE_DISTANCE_STEP = 8
19
- const CONVERSATION_SCALE_DISTANCE_DEFAULT = 96
20
- const CONVERSATION_SCALE_FOCUS_CONTRAST_MIN = 0
21
- const CONVERSATION_SCALE_FOCUS_CONTRAST_MAX = 100
22
- const CONVERSATION_SCALE_FOCUS_CONTRAST_STEP = 10
23
- const CONVERSATION_SCALE_FOCUS_CONTRAST_DEFAULT = 70
24
16
  const PARTICLE_TRAVERSAL_SPEED_MIN = 0
25
17
  const PARTICLE_TRAVERSAL_SPEED_MAX = 2
26
18
  const PARTICLE_TRAVERSAL_SPEED_STEP = 0.25
@@ -38,8 +30,6 @@ heroParticleDensity: 'light',
38
30
  particleTraversalSpeed: PARTICLE_TRAVERSAL_SPEED_DEFAULT,
39
31
  particlePattern: 'orthogonal',
40
32
  railDefaultHidden: false,
41
- conversationScaleMaxDistance: CONVERSATION_SCALE_DISTANCE_DEFAULT,
42
- conversationScaleFocusContrast: CONVERSATION_SCALE_FOCUS_CONTRAST_DEFAULT,
43
33
  })
44
34
  const VISUAL_PRESETS = Object.freeze({
45
35
  'standard-tactical': Object.freeze({
@@ -77,7 +67,7 @@ background: Object.freeze(['texture']),
77
67
  particles: Object.freeze(['conversationParticleDensity', 'heroParticleDensity', 'particleTraversalSpeed']),
78
68
  material: Object.freeze(['glass']),
79
69
  accessibility: Object.freeze(['motion', 'bootAnimation']),
80
- navigation: Object.freeze(['railDefaultHidden', 'conversationScaleMaxDistance', 'conversationScaleFocusContrast']),
70
+ navigation: Object.freeze(['railDefaultHidden']),
81
71
  })
82
72
  const TEXTURES = new Set(['off', 'restrained', 'full'])
83
73
  const GLASS_STRENGTHS = new Set(['off', 'soft', 'standard', 'clear'])
@@ -108,18 +98,6 @@ return typeof value === 'boolean' ? value : fallback
108
98
  function enumOr(value, allowed, fallback) {
109
99
  return allowed.has(value) ? value : fallback
110
100
  }
111
- function scaleDistanceOr(value, fallback) {
112
- const numeric = Number(value)
113
- if (!Number.isFinite(numeric)) return fallback
114
- const clamped = Math.min(CONVERSATION_SCALE_DISTANCE_MAX, Math.max(CONVERSATION_SCALE_DISTANCE_MIN, numeric))
115
- return Math.round(clamped / CONVERSATION_SCALE_DISTANCE_STEP) * CONVERSATION_SCALE_DISTANCE_STEP
116
- }
117
- function scaleFocusContrastOr(value, fallback) {
118
- const numeric = Number(value)
119
- if (!Number.isFinite(numeric)) return fallback
120
- const clamped = Math.min(CONVERSATION_SCALE_FOCUS_CONTRAST_MAX, Math.max(CONVERSATION_SCALE_FOCUS_CONTRAST_MIN, numeric))
121
- return Math.round(clamped / CONVERSATION_SCALE_FOCUS_CONTRAST_STEP) * CONVERSATION_SCALE_FOCUS_CONTRAST_STEP
122
- }
123
101
  function particleTraversalSpeedOr(value, fallback) {
124
102
  const numeric = Number(value)
125
103
  if (!Number.isFinite(numeric)) return fallback
@@ -166,14 +144,6 @@ DEFAULT_PREFERENCES.particleTraversalSpeed,
166
144
  ),
167
145
  particlePattern: 'orthogonal',
168
146
  railDefaultHidden: booleanOr(input.railDefaultHidden, DEFAULT_PREFERENCES.railDefaultHidden),
169
- conversationScaleMaxDistance: scaleDistanceOr(
170
- input.conversationScaleMaxDistance,
171
- DEFAULT_PREFERENCES.conversationScaleMaxDistance,
172
- ),
173
- conversationScaleFocusContrast: scaleFocusContrastOr(
174
- input.conversationScaleFocusContrast,
175
- DEFAULT_PREFERENCES.conversationScaleFocusContrast,
176
- ),
177
147
  }
178
148
  normalized.preset = matchedVisualPreset(normalized)
179
149
  return normalized
@@ -368,6 +338,7 @@ const COMPOSER_RELEVANCE_SELECTOR = [
368
338
  'button[aria-haspopup="listbox"]',
369
339
  '[role="menu"]',
370
340
  '[role="listbox"]',
341
+ '[data-trigger-menu]',
371
342
  '[data-slot="conversation.input.overlay"]',
372
343
  ].join(', ')
373
344
  const PRESET_TRIGGER_SELECTOR = [
@@ -383,7 +354,7 @@ if (!id) return null
383
354
  return document.getElementById(id)
384
355
  }
385
356
  function localPopup(trigger) {
386
- const selector = '[role="menu"], [role="listbox"], [class*="mufS8W_card"]'
357
+ const selector = '[role="menu"], [role="listbox"], [data-trigger-menu], [class*="mufS8W_card"]'
387
358
  const sibling = trigger.nextElementSibling
388
359
  if (sibling?.matches(selector)) return sibling
389
360
  return trigger.parentElement?.querySelector(`:scope > ${selector}`) ?? null
@@ -391,7 +362,7 @@ return trigger.parentElement?.querySelector(`:scope > ${selector}`) ?? null
391
362
  function overlayPopup(document) {
392
363
  const overlay = document.querySelector('[data-slot="conversation.input.overlay"]')
393
364
  if (!overlay) return null
394
- return overlay.querySelector('[role="listbox"], [role="menu"], [class*="mufS8W_card"]')
365
+ return overlay.querySelector('[data-trigger-menu], [role="listbox"], [role="menu"], [class*="mufS8W_card"]')
395
366
  }
396
367
  function linkedMenu(document, trigger) {
397
368
  return controlledPopup(document, trigger)
@@ -401,9 +372,9 @@ return controlledPopup(document, trigger)
401
372
  function markPopup(popup, kind) {
402
373
  if (!popup) return
403
374
  mark(popup, MENU_ATTRIBUTE, kind)
404
- const card = popup.closest?.('[class*="mufS8W_card"]')
375
+ const card = popup.closest?.('[data-trigger-menu], [class*="mufS8W_card"]')
405
376
  mark(card, MENU_ATTRIBUTE, kind)
406
- for (const nested of popup.querySelectorAll?.('[role="menu"], [role="listbox"], [class*="mufS8W_card"]') ?? []) {
377
+ for (const nested of popup.querySelectorAll?.('[role="menu"], [role="listbox"], [data-trigger-menu], [class*="mufS8W_card"]') ?? []) {
407
378
  mark(nested, MENU_ATTRIBUTE, kind)
408
379
  }
409
380
  }
@@ -505,7 +476,7 @@ markPopup(popup, 'preset')
505
476
  }
506
477
  const overlay = document?.querySelector?.('[data-slot="conversation.input.overlay"]')
507
478
  if (overlay) {
508
- for (const popup of overlay.querySelectorAll('[role="menu"], [role="listbox"], [class*="mufS8W_card"]')) {
479
+ for (const popup of overlay.querySelectorAll('[data-trigger-menu], [role="menu"], [role="listbox"], [class*="mufS8W_card"]')) {
509
480
  markPopup(popup, popup.hasAttribute('aria-busy') ? 'model' : 'action')
510
481
  }
511
482
  }
@@ -2931,2219 +2902,6 @@ operation = undefined
2931
2902
  }
2932
2903
  }
2933
2904
 
2934
- const CONVERSATION_USER_TURN_SELECTOR = [
2935
- '[data-chat-flow-kind="user"]',
2936
- '[data-chat-flow-kind="user-step"]',
2937
- '[data-message-role="user"]',
2938
- ].join(',')
2939
- const CONVERSATION_SCALE_SPACING = 8
2940
- const CONVERSATION_SCALE_BASE_LENGTHS = Object.freeze([24, 18, 14, 10, 6])
2941
- const CONVERSATION_SCALE_CONTRAST_DELTAS = Object.freeze([5, -3, -4, -4, -3])
2942
- function resolveConversationScaleLengths(value = CONVERSATION_SCALE_FOCUS_CONTRAST_DEFAULT) {
2943
- const numeric = Number(value)
2944
- const contrast = Number.isFinite(numeric)
2945
- ? Math.min(CONVERSATION_SCALE_FOCUS_CONTRAST_MAX, Math.max(CONVERSATION_SCALE_FOCUS_CONTRAST_MIN, numeric))
2946
- : CONVERSATION_SCALE_FOCUS_CONTRAST_DEFAULT
2947
- const ratio = contrast / CONVERSATION_SCALE_FOCUS_CONTRAST_MAX
2948
- return CONVERSATION_SCALE_BASE_LENGTHS.map((length, index) =>
2949
- Math.round(length + CONVERSATION_SCALE_CONTRAST_DELTAS[index] * ratio))
2950
- }
2951
- const CONVERSATION_SCALE_LENGTHS = Object.freeze(resolveConversationScaleLengths())
2952
- const CONVERSATION_SCALE_WAVE_DURATION = 140
2953
- const CONVERSATION_JUMP_BOTTOM_THRESHOLD = 25
2954
- const CONVERSATION_JUMP_SMOOTH_VIEWPORT_LIMIT = 1.5
2955
- const CONVERSATION_JUMP_SETTLE_MAX_DISTANCE = 88
2956
- const CONVERSATION_JUMP_SETTLE_VIEWPORT_RATIO = .12
2957
- const CONVERSATION_JUMP_SETTLE_DURATION = 180
2958
- const CONVERSATION_JUMP_VERIFY_DURATION = 900
2959
- const CONVERSATION_HISTORY_PAGE_LIMIT = 10
2960
- const CONVERSATION_HISTORY_TIME_LIMIT = 8000
2961
- const ASSISTANT_SELECTOR = '[data-chat-flow-kind="assistant-step"], [data-message-role="assistant"]'
2962
- const FORMAL_ANSWER_SELECTOR = '[data-prts-ai-surface], [data-markdown], [data-slot*="markdown" i], .markdown-body'
2963
- const AUXILIARY_SELECTOR = '[data-chat-flow-kind*="reason" i], [data-chat-flow-kind*="tool" i], [data-slot*="reason" i], [data-slot*="tool" i], [data-role*="reason" i], [data-role*="tool" i]'
2964
- const STREAMING_SELECTOR = '[aria-busy="true"], [data-streaming], [data-status*="stream" i], [data-state*="stream" i]'
2965
- const CONVERSATION_THIRD_PARTY_OVERLAY_SELECTOR = [
2966
- '[data-shell-overlay] [data-plugin]:not([data-plugin="dsh-theme-prts"])',
2967
- '[data-slot="shell.overlay"] [data-plugin]:not([data-plugin="dsh-theme-prts"])',
2968
- ].join(', ')
2969
- const CONVERSATION_BLOCKING_OVERLAY_SELECTOR = [
2970
- '[role="dialog"]',
2971
- '[aria-modal="true"]',
2972
- 'dialog[open]',
2973
- '[data-prts-floating-glass="dialog"]',
2974
- '[data-prts-floating-scrim]',
2975
- '[data-slot*="dialog" i]',
2976
- '[data-slot*="modal" i]',
2977
- '[class*="_dialog"]',
2978
- '[class*="_modal"]',
2979
- '[class*="_scrim"]',
2980
- '[class*="_backdrop"]',
2981
- ].join(', ')
2982
- const CONVERSATION_OVERLAY_SELECTOR = [
2983
- CONVERSATION_THIRD_PARTY_OVERLAY_SELECTOR,
2984
- '[role="dialog"]',
2985
- '[role="menu"]',
2986
- '[role="listbox"]',
2987
- '[popover]',
2988
- '[data-prts-floating-glass]',
2989
- '[aria-modal="true"]',
2990
- 'dialog[open]',
2991
- '[data-slot*="dialog" i]',
2992
- '[data-slot*="modal" i]',
2993
- '[data-prts-floating-scrim]',
2994
- '[class*="_dialog"]',
2995
- '[class*="_modal"]',
2996
- '[class*="_scrim"]',
2997
- '[class*="_backdrop"]',
2998
- ].join(', ')
2999
- const CONVERSATION_PORTAL_ROOT_SELECTOR = [
3000
- '[role="presentation"]',
3001
- '[class*="_portal_"]',
3002
- '[data-floating-ui-portal]',
3003
- '[data-radix-portal]',
3004
- ].join(', ')
3005
- const PREVIEW_REMOVE_SELECTOR = [
3006
- '[hidden]',
3007
- '[aria-hidden="true"]',
3008
- 'button',
3009
- '[role="toolbar"]',
3010
- '[data-slot*="toolbar" i]',
3011
- '[data-slot*="action" i]',
3012
- '[data-slot*="sentinel" i]',
3013
- 'script',
3014
- 'style',
3015
- ].join(',')
3016
- const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'
3017
- const MINIMUM_TURNS = 2
3018
- const CONVERSATION_SCALE_WIDTH = 32
3019
- const CONVERSATION_SCALE_CONTENT_GAP = 12
3020
- const CONVERSATION_SCALE_PREVIEW_WIDTH = 360
3021
- const CONVERSATION_SCALE_PREVIEW_GAP = 8
3022
- const CONVERSATION_SCALE_RIGHT_GAP = 12
3023
- const CONVERSATION_SCALE_HYSTERESIS = 16
3024
- const CONVERSATION_SCALE_DEFAULT_MAX_DISTANCE = 96
3025
- const SCALE_WIDTH = CONVERSATION_SCALE_WIDTH
3026
- const PREVIEW_WIDTH = CONVERSATION_SCALE_PREVIEW_WIDTH
3027
- const PREVIEW_GAP = CONVERSATION_SCALE_PREVIEW_GAP
3028
- const PREVIEW_FALLBACK_HEIGHT = 128
3029
- const PREVIEW_DELAY = 100
3030
- const HISTORY_TRIGGER_HEIGHT = CONVERSATION_SCALE_SPACING
3031
- const PREVIEW_REFRESH_INTERVAL = 100
3032
- const PREVIEW_TOUCH_DURATION = 1200
3033
- const SNAP_DELAY = 110
3034
- const TOUCH_WAVE_DURATION = 620
3035
- const HISTORY_PAGE_SETTLE_LIMIT = 4000
3036
- const GEOMETRY_SETTLE_FRAME_LIMIT = 8
3037
- const GEOMETRY_SETTLE_STABLE_FRAMES = 2
3038
- let scaleInstanceSeed = 0
3039
- function clamp(value, minimum, maximum) {
3040
- return Math.min(maximum, Math.max(minimum, value))
3041
- }
3042
- function resolveConversationScaleGeometry({
3043
- operationWidth,
3044
- contentLeft,
3045
- maximumDistance = CONVERSATION_SCALE_DEFAULT_MAX_DISTANCE,
3046
- previouslyHidden = false,
3047
- } = {}) {
3048
- const width = Number(operationWidth)
3049
- const content = Number(contentLeft)
3050
- const maximum = Number(maximumDistance)
3051
- if (!Number.isFinite(width) || width <= 0 || !Number.isFinite(content) || content <= 0) {
3052
- return { visible: false, reason: 'unmeasured' }
3053
- }
3054
- const recovery = previouslyHidden ? CONVERSATION_SCALE_HYSTERESIS : 0
3055
- const minimumCorridor = CONVERSATION_SCALE_WIDTH + CONVERSATION_SCALE_CONTENT_GAP * 2 + recovery
3056
- if (content < minimumCorridor) return { visible: false, reason: 'corridor' }
3057
- const configuredLeft = clamp(
3058
- Number.isFinite(maximum) ? maximum : CONVERSATION_SCALE_DEFAULT_MAX_DISTANCE,
3059
- CONVERSATION_SCALE_CONTENT_GAP,
3060
- Math.max(CONVERSATION_SCALE_CONTENT_GAP, width - CONVERSATION_SCALE_WIDTH - CONVERSATION_SCALE_RIGHT_GAP),
3061
- )
3062
- const centered = configuredLeft + CONVERSATION_SCALE_WIDTH + CONVERSATION_SCALE_CONTENT_GAP > content
3063
- const left = centered ? (content - CONVERSATION_SCALE_WIDTH) / 2 : configuredLeft
3064
- const previewRight = left
3065
- + CONVERSATION_SCALE_WIDTH
3066
- + CONVERSATION_SCALE_PREVIEW_GAP
3067
- + CONVERSATION_SCALE_PREVIEW_WIDTH
3068
- + CONVERSATION_SCALE_RIGHT_GAP
3069
- + recovery
3070
- if (previewRight > width) return { visible: false, reason: 'preview', left, centered }
3071
- return { visible: true, reason: 'ready', left, centered }
3072
- }
3073
- function resolveConversationScaleCalibrationState({
3074
- operationWidth,
3075
- contentLeft,
3076
- maximumDistance = CONVERSATION_SCALE_DEFAULT_MAX_DISTANCE,
3077
- turnCount = 0,
3078
- drawerMode,
3079
- viewportWidth,
3080
- previouslyHidden = false,
3081
- } = {}) {
3082
- const numeric = Number(maximumDistance)
3083
- const normalizedMaximum = Number.isFinite(numeric)
3084
- ? clamp(Math.round(numeric / 8) * 8, 16, 240)
3085
- : CONVERSATION_SCALE_DEFAULT_MAX_DISTANCE
3086
- const resolution = drawerMode === 'overlay'
3087
- ? { visible: false, reason: 'drawer' }
3088
- : Number(viewportWidth) <= 640
3089
- ? { visible: false, reason: 'phone' }
3090
- : resolveConversationScaleGeometry({
3091
- operationWidth,
3092
- contentLeft,
3093
- maximumDistance: normalizedMaximum,
3094
- previouslyHidden,
3095
- })
3096
- if (!resolution.visible) return {
3097
- ...resolution,
3098
- mode: 'hidden',
3099
- maximumDistance: normalizedMaximum,
3100
- }
3101
- if (Number(turnCount) < MINIMUM_TURNS) return {
3102
- visible: false,
3103
- reason: 'turns',
3104
- mode: 'hidden',
3105
- maximumDistance: normalizedMaximum,
3106
- left: resolution.left,
3107
- centered: resolution.centered,
3108
- }
3109
- return {
3110
- ...resolution,
3111
- mode: resolution.centered ? 'centered' : 'configured',
3112
- maximumDistance: normalizedMaximum,
3113
- }
3114
- }
3115
- function visible(node) {
3116
- return node && !node.hidden && node.getAttribute('aria-hidden') !== 'true'
3117
- }
3118
- function follows(first, second) {
3119
- return Boolean(first?.compareDocumentPosition?.(second) & 4)
3120
- }
3121
- function truncateText(value, limit) {
3122
- const characters = Array.from(value)
3123
- return characters.length > limit ? `${characters.slice(0, limit).join('')}…` : value
3124
- }
3125
- function attachmentSummary(node) {
3126
- const named = node?.querySelector?.('[data-file-name], [download], img[alt]')
3127
- const name = named?.getAttribute('data-file-name')
3128
- || named?.getAttribute('download')
3129
- || named?.getAttribute('alt')
3130
- if (name?.trim()) return `${named?.matches('img') ? '图片' : '附件'} · ${name.trim()}`
3131
- if (node?.querySelector?.('img, [data-file], [data-attachment], input[type="file"]')) return '附件消息'
3132
- return ''
3133
- }
3134
- function sanitizeConversationPreviewNode(node, limit = 360) {
3135
- if (!node) return ''
3136
- const clone = node.cloneNode(true)
3137
- for (const removable of clone.querySelectorAll?.(PREVIEW_REMOVE_SELECTOR) || []) removable.remove()
3138
- for (const block of clone.querySelectorAll?.('pre') || []) {
3139
- const firstLine = block.textContent?.split(/\r?\n/).map(line => line.trim()).find(Boolean) || ''
3140
- block.textContent = firstLine ? `代码:${firstLine}` : '代码'
3141
- }
3142
- const text = clone.textContent?.replace(/\s+/g, ' ').trim() || attachmentSummary(node)
3143
- return truncateText(text, limit)
3144
- }
3145
- function collectConversationTurns(scroller) {
3146
- if (!scroller) return []
3147
- return Array.from(scroller.querySelectorAll(CONVERSATION_USER_TURN_SELECTOR)).filter(node => {
3148
- if (!visible(node) || node.closest('[data-prts-conversation-scale], [data-prts-conversation-preview]')) return false
3149
- const parent = node.parentElement?.closest?.(CONVERSATION_USER_TURN_SELECTOR)
3150
- return !parent || !scroller.contains(parent)
3151
- })
3152
- }
3153
- function hasClassSuffix(node, suffix) {
3154
- return [...(node?.classList ?? [])].some(token => token.endsWith(suffix))
3155
- }
3156
- function findConversationOlderButton(root) {
3157
- for (const button of root?.querySelectorAll?.('button') ?? []) {
3158
- for (let current = button.parentElement; current && root.contains(current); current = current.parentElement) {
3159
- if (hasClassSuffix(current, '_older')) return button
3160
- }
3161
- }
3162
- return null
3163
- }
3164
- function resolveConversationHistorySnapshot(sessions) {
3165
- try {
3166
- const listSnapshot = sessions?.list?.getSnapshot?.()
3167
- const current = listSnapshot?.current
3168
- ?? listSnapshot?.currentId
3169
- ?? listSnapshot?.currentSessionId
3170
- if (current === undefined || current === null) return {}
3171
- const binding = sessions?.binding?.(current)
3172
- const session = binding?.session
3173
- const snapshot = session?.getSnapshot?.() ?? binding?.getSnapshot?.()
3174
- return { key: current, hasMore: snapshot?.hasMore === true, loading: snapshot?.loadingOlder === true }
3175
- } catch {
3176
- return {}
3177
- }
3178
- }
3179
- function collectAssistantCandidates(scroller, turn, nextTurn) {
3180
- return Array.from(scroller?.querySelectorAll?.(ASSISTANT_SELECTOR) || []).filter(node => {
3181
- if (!visible(node)) return false
3182
- const parent = node.parentElement?.closest?.(ASSISTANT_SELECTOR)
3183
- if (parent && scroller.contains(parent)) return false
3184
- if (!follows(turn, node)) return false
3185
- return !nextTurn || follows(node, nextTurn)
3186
- })
3187
- }
3188
- function formalBodies(candidate) {
3189
- const bodies = []
3190
- if (candidate.matches?.(FORMAL_ANSWER_SELECTOR)) bodies.push(candidate)
3191
- bodies.push(...candidate.querySelectorAll?.(FORMAL_ANSWER_SELECTOR) || [])
3192
- return bodies.filter(body => !body.closest?.(AUXILIARY_SELECTOR))
3193
- }
3194
- function getConversationTurnPreview(scroller, turns, index) {
3195
- const turn = turns?.[index]
3196
- if (!turn) return { question: '', answer: '尚无有效回复', state: 'empty', answerSource: undefined }
3197
- const nextTurn = turns[index + 1]
3198
- const questionSource = turn.querySelector?.('[class$="_bubble"], [data-message-role="user"]') || turn
3199
- const question = sanitizeConversationPreviewNode(questionSource, 180) || attachmentSummary(turn) || '附件消息'
3200
- const candidates = collectAssistantCandidates(scroller, turn, nextTurn)
3201
- for (const candidate of candidates) {
3202
- for (const body of formalBodies(candidate)) {
3203
- const answer = sanitizeConversationPreviewNode(body, 420)
3204
- if (answer) return { question, answer, state: 'answer', answerSource: body }
3205
- }
3206
- }
3207
- for (const candidate of candidates) {
3208
- const answer = sanitizeConversationPreviewNode(candidate, 420)
3209
- if (answer) return { question, answer, state: 'fallback', answerSource: candidate }
3210
- }
3211
- const streaming = candidates.some(candidate => candidate.matches?.(STREAMING_SELECTOR) || candidate.querySelector?.(STREAMING_SELECTOR))
3212
- return {
3213
- question,
3214
- answer: streaming ? '正在生成…' : '尚无有效回复',
3215
- state: streaming ? 'streaming' : 'empty',
3216
- answerSource: candidates[0],
3217
- }
3218
- }
3219
- function getConversationScaleLayout(count, height, requestedOffset = 0) {
3220
- const safeCount = Math.max(0, Math.floor(Number(count) || 0))
3221
- const safeHeight = Math.max(1, Number(height) || 1)
3222
- const span = Math.max(0, safeCount - 1) * CONVERSATION_SCALE_SPACING
3223
- const usableHeight = Math.max(0, safeHeight - 1)
3224
- const maxOffset = Math.max(0, span - usableHeight)
3225
- const offset = clamp(Number(requestedOffset) || 0, 0, maxOffset)
3226
- const start = .5 + (maxOffset === 0 ? (usableHeight - span) / 2 : 0)
3227
- const positions = Array.from({ length: safeCount }, (_, index) =>
3228
- start + index * CONVERSATION_SCALE_SPACING - offset)
3229
- return { count: safeCount, height: safeHeight, span, maxOffset, offset, start, positions }
3230
- }
3231
- function conversationScaleWaveLength(distance, lengths = CONVERSATION_SCALE_LENGTHS) {
3232
- const safeDistance = Math.abs(Number(distance) || 0)
3233
- const lower = Math.floor(safeDistance)
3234
- if (lower >= lengths.length - 1) return lengths.at(-1)
3235
- const progress = safeDistance - lower
3236
- const from = lengths[lower]
3237
- const to = lengths[lower + 1]
3238
- return from + (to - from) * progress
3239
- }
3240
- function visibleConversationTickRange(layout, buffer = 2) {
3241
- if (!layout?.count) return { minimum: 0, maximum: -1 }
3242
- const padding = Math.max(0, Math.floor(Number(buffer) || 0))
3243
- const minimum = Math.max(
3244
- 0,
3245
- Math.ceil((layout.offset - layout.start) / CONVERSATION_SCALE_SPACING) - padding,
3246
- )
3247
- const maximum = Math.min(
3248
- layout.count - 1,
3249
- Math.floor((layout.height - .5 + layout.offset - layout.start) / CONVERSATION_SCALE_SPACING) + padding,
3250
- )
3251
- return { minimum, maximum }
3252
- }
3253
- function nearestVisibleConversationTick(layout, localY) {
3254
- if (!layout?.count) return -1
3255
- const minimum = Math.max(0, Math.ceil((layout.offset - layout.start) / CONVERSATION_SCALE_SPACING))
3256
- const maximum = Math.min(
3257
- layout.count - 1,
3258
- Math.floor((layout.height - .5 + layout.offset - layout.start) / CONVERSATION_SCALE_SPACING),
3259
- )
3260
- if (maximum < minimum) return -1
3261
- const raw = Math.round((Number(localY) + layout.offset - layout.start) / CONVERSATION_SCALE_SPACING)
3262
- return clamp(raw, minimum, maximum)
3263
- }
3264
- function snapConversationScaleOffset(offset, maximum) {
3265
- return clamp(
3266
- Math.round((Number(offset) || 0) / CONVERSATION_SCALE_SPACING) * CONVERSATION_SCALE_SPACING,
3267
- 0,
3268
- Math.max(0, Number(maximum) || 0),
3269
- )
3270
- }
3271
- function shouldFollowConversationScaleBottom(offset, maximum) {
3272
- return Math.max(0, Number(maximum) || 0) - (Number(offset) || 0) <= 1
3273
- }
3274
- function calculateConversationJumpTop({
3275
- scrollTop,
3276
- scrollHeight,
3277
- clientHeight,
3278
- turnTop,
3279
- visibleTop,
3280
- visibleHeight,
3281
- }) {
3282
- const target = (Number(scrollTop) || 0)
3283
- + (Number(turnTop) || 0)
3284
- - (Number(visibleTop) || 0)
3285
- - Math.max(0, Number(visibleHeight) || 0) * .28
3286
- return clamp(target, 0, Math.max(0, (Number(scrollHeight) || 0) - (Number(clientHeight) || 0)))
3287
- }
3288
- function resolveConversationJumpBehavior(distance, viewportHeight, prefersReducedMotion = false) {
3289
- if (prefersReducedMotion) return 'auto'
3290
- const height = Math.max(0, Number(viewportHeight) || 0)
3291
- const delta = Math.abs(Number(distance) || 0)
3292
- return height > 0 && delta <= height * CONVERSATION_JUMP_SMOOTH_VIEWPORT_LIMIT ? 'smooth' : 'auto'
3293
- }
3294
- function resolveConversationJumpSettle(distance, viewportHeight, prefersReducedMotion = false) {
3295
- if (prefersReducedMotion || resolveConversationJumpBehavior(distance, viewportHeight) === 'smooth') {
3296
- return { offset: 0, duration: 0 }
3297
- }
3298
- const height = Math.max(0, Number(viewportHeight) || 0)
3299
- const delta = Number(distance) || 0
3300
- if (height <= 0 || Math.abs(delta) <= 2) return { offset: 0, duration: 0 }
3301
- const offset = Math.sign(delta) * Math.min(
3302
- Math.abs(delta),
3303
- CONVERSATION_JUMP_SETTLE_MAX_DISTANCE,
3304
- height * CONVERSATION_JUMP_SETTLE_VIEWPORT_RATIO,
3305
- )
3306
- return { offset, duration: CONVERSATION_JUMP_SETTLE_DURATION }
3307
- }
3308
- function scrollConversationTo(scroller, top, behavior) {
3309
- if (typeof scroller?.scrollTo === 'function') scroller.scrollTo({ top, behavior })
3310
- else if (scroller) scroller.scrollTop = top
3311
- }
3312
- async function performConversationJump({
3313
- scroller,
3314
- getTargetTop,
3315
- prefersReducedMotion = false,
3316
- requestFrame = callback => globalThis.requestAnimationFrame?.(callback) ?? globalThis.setTimeout?.(callback, 16),
3317
- now = () => globalThis.performance?.now?.() ?? Date.now(),
3318
- cancelled = () => false,
3319
- onFrame = () => {},
3320
- } = {}) {
3321
- if (!scroller || typeof getTargetTop !== 'function') return false
3322
- const nextFrame = () => new Promise(resolve => requestFrame(timestamp => {
3323
- resolve(Number.isFinite(timestamp) ? timestamp : now())
3324
- }))
3325
- const targetTop = () => {
3326
- const raw = getTargetTop()
3327
- if (raw === null || raw === undefined) return null
3328
- const value = Number(raw)
3329
- return Number.isFinite(value) ? value : null
3330
- }
3331
- let top = targetTop()
3332
- if (top === null) return false
3333
- const floor = Math.max(0, Number(scroller.scrollHeight) - Number(scroller.clientHeight))
3334
- const bottomDistance = floor - Number(scroller.scrollTop)
3335
- if (bottomDistance <= CONVERSATION_JUMP_BOTTOM_THRESHOLD && top < Number(scroller.scrollTop)) {
3336
- scroller.scrollTop = Math.max(0, Number(scroller.scrollTop) - 1)
3337
- await nextFrame()
3338
- if (cancelled()) return null
3339
- top = targetTop()
3340
- if (top === null) return false
3341
- }
3342
- const distance = top - Number(scroller.scrollTop)
3343
- const behavior = resolveConversationJumpBehavior(distance, scroller.clientHeight, prefersReducedMotion)
3344
- const settle = resolveConversationJumpSettle(distance, scroller.clientHeight, prefersReducedMotion)
3345
- if (settle.duration > 0) {
3346
- const limit = () => Math.max(0, Number(scroller.scrollHeight) - Number(scroller.clientHeight))
3347
- const beforeTarget = clamp(top - settle.offset, 0, limit())
3348
- scrollConversationTo(scroller, beforeTarget, 'auto')
3349
- await nextFrame()
3350
- if (cancelled()) return null
3351
- const from = Number(scroller.scrollTop)
3352
- const startedAt = now()
3353
- let progress = 0
3354
- while (progress < 1) {
3355
- const timestamp = await nextFrame()
3356
- if (cancelled()) return null
3357
- progress = Math.min(1, (timestamp - startedAt) / settle.duration)
3358
- const eased = 1 - (1 - progress) ** 3
3359
- const liveTarget = targetTop()
3360
- if (liveTarget === null) return false
3361
- scroller.scrollTop = from + (liveTarget - from) * eased
3362
- onFrame()
3363
- }
3364
- } else {
3365
- scrollConversationTo(scroller, top, behavior)
3366
- onFrame()
3367
- }
3368
- let stableFrames = 0
3369
- let verificationFrames = 0
3370
- const verificationStartedAt = now()
3371
- while (now() - verificationStartedAt < CONVERSATION_JUMP_VERIFY_DURATION && verificationFrames < 72) {
3372
- await nextFrame()
3373
- verificationFrames += 1
3374
- if (cancelled()) return null
3375
- const liveTarget = targetTop()
3376
- if (liveTarget === null) return false
3377
- stableFrames = Math.abs(Number(scroller.scrollTop) - liveTarget) <= 2 ? stableFrames + 1 : 0
3378
- if (stableFrames >= 2) return true
3379
- }
3380
- top = targetTop()
3381
- if (top === null) return false
3382
- scrollConversationTo(scroller, top, 'auto')
3383
- await nextFrame()
3384
- await nextFrame()
3385
- if (cancelled()) return null
3386
- const correctedTarget = targetTop()
3387
- return correctedTarget !== null && Math.abs(Number(scroller.scrollTop) - correctedTarget) <= 2
3388
- }
3389
- function buildConversationScalePaths(layout, interactionIndex = -1, animation, lengths = CONVERSATION_SCALE_LENGTHS) {
3390
- const gray = []
3391
- const yellow = []
3392
- const history = []
3393
- const hovering = interactionIndex >= 0 && interactionIndex < layout.count
3394
- const animatedCenter = Number.isFinite(animation?.center) ? animation.center : interactionIndex
3395
- const animatedIntensity = animation
3396
- ? clamp(Number(animation.intensity) || 0, 0, 1)
3397
- : hovering ? 1 : 0
3398
- const restingLength = lengths.at(-1)
3399
- const { minimum, maximum } = visibleConversationTickRange(layout)
3400
- for (let index = minimum; index <= maximum; index += 1) {
3401
- const rawY = layout.start + index * CONVERSATION_SCALE_SPACING - layout.offset
3402
- if (rawY < .5 || rawY > layout.height - .5) continue
3403
- const y = Number(rawY.toFixed(2))
3404
- const waveLength = conversationScaleWaveLength(Math.abs(index - animatedCenter), lengths)
3405
- if (animation?.historyAvailable && index === 0) {
3406
- const selected = interactionIndex === 0
3407
- const intensity = selected ? animatedIntensity : 0
3408
- const restingFirstEnd = 2 + restingLength
3409
- const restingSecondStart = restingFirstEnd + 4
3410
- const restingSecondEnd = restingSecondStart + restingLength
3411
- const firstEnd = Number((
3412
- restingFirstEnd + (14 - restingFirstEnd) * intensity
3413
- ).toFixed(2))
3414
- const secondStart = Number((
3415
- restingSecondStart + (16 - restingSecondStart) * intensity
3416
- ).toFixed(2))
3417
- const secondEnd = Number((
3418
- restingSecondEnd + (30 - restingSecondEnd) * intensity
3419
- ).toFixed(2))
3420
- history.push(`M2 ${y}H${firstEnd}M${secondStart} ${y}H${secondEnd}`)
3421
- continue
3422
- }
3423
- const length = restingLength + (waveLength - restingLength) * animatedIntensity
3424
- const command = `M2 ${y}H${Number((2 + length).toFixed(2))}`
3425
- const accented = hovering ? index === interactionIndex : index === layout.count - 1
3426
- ;(accented ? yellow : gray).push(command)
3427
- }
3428
- return { gray: gray.join(''), yellow: yellow.join(''), history: history.join('') }
3429
- }
3430
- function createPreview(document, id) {
3431
- const preview = document.createElement('aside')
3432
- preview.id = id
3433
- preview.setAttribute('data-prts-conversation-preview', '')
3434
- preview.setAttribute('data-prts-owned-conversation-preview', '')
3435
- preview.setAttribute('role', 'tooltip')
3436
- preview.setAttribute('aria-hidden', 'true')
3437
- const connector = document.createElement('span')
3438
- connector.setAttribute('data-prts-conversation-preview-connector', '')
3439
- connector.setAttribute('aria-hidden', 'true')
3440
- const body = document.createElement('div')
3441
- body.setAttribute('data-prts-conversation-preview-body', '')
3442
- const question = document.createElement('div')
3443
- question.setAttribute('data-prts-conversation-preview-row', 'question')
3444
- const questionLabel = document.createElement('b')
3445
- questionLabel.textContent = 'Q'
3446
- const questionText = document.createElement('span')
3447
- questionText.setAttribute('data-prts-conversation-preview-question', '')
3448
- question.append(questionLabel, questionText)
3449
- const answer = document.createElement('div')
3450
- answer.setAttribute('data-prts-conversation-preview-row', 'answer')
3451
- const answerLabel = document.createElement('b')
3452
- answerLabel.textContent = 'A'
3453
- const answerText = document.createElement('span')
3454
- answerText.setAttribute('data-prts-conversation-preview-answer', '')
3455
- answer.append(answerLabel, answerText)
3456
- body.append(question, answer)
3457
- preview.append(connector, body)
3458
- preview._prtsBody = body
3459
- preview._prtsQuestion = questionText
3460
- preview._prtsAnswer = answerText
3461
- return preview
3462
- }
3463
- function createScale(document) {
3464
- const instance = ++scaleInstanceSeed
3465
- const maskId = `prts-conversation-scale-fade-${instance}`
3466
- const previewId = `prts-conversation-preview-${instance}`
3467
- const historyTooltipId = `prts-conversation-history-tooltip-${instance}`
3468
- const scale = document.createElement('div')
3469
- scale.setAttribute('data-prts-conversation-scale', '')
3470
- scale.setAttribute('data-prts-owned-conversation-scale', '')
3471
- scale.setAttribute('role', 'slider')
3472
- scale.setAttribute('aria-label', '会话刻度导航')
3473
- scale.setAttribute('aria-orientation', 'vertical')
3474
- scale.tabIndex = 0
3475
- const svg = document.createElementNS(SVG_NAMESPACE, 'svg')
3476
- svg.setAttribute('data-prts-conversation-scale-svg', '')
3477
- svg.setAttribute('aria-hidden', 'true')
3478
- svg.setAttribute('preserveAspectRatio', 'none')
3479
- const defs = document.createElementNS(SVG_NAMESPACE, 'defs')
3480
- const gradient = document.createElementNS(SVG_NAMESPACE, 'linearGradient')
3481
- gradient.id = `${maskId}-gradient`
3482
- gradient.setAttribute('gradientUnits', 'userSpaceOnUse')
3483
- gradient.setAttribute('x1', '0')
3484
- gradient.setAttribute('y1', '0')
3485
- gradient.setAttribute('x2', '0')
3486
- gradient.setAttribute('y2', '24')
3487
- const transparent = document.createElementNS(SVG_NAMESPACE, 'stop')
3488
- transparent.setAttribute('offset', '0')
3489
- transparent.setAttribute('stop-color', 'white')
3490
- transparent.setAttribute('stop-opacity', '0')
3491
- const opaque = document.createElementNS(SVG_NAMESPACE, 'stop')
3492
- opaque.setAttribute('offset', '1')
3493
- opaque.setAttribute('stop-color', 'white')
3494
- gradient.append(transparent, opaque)
3495
- const mask = document.createElementNS(SVG_NAMESPACE, 'mask')
3496
- mask.id = maskId
3497
- mask.setAttribute('maskUnits', 'userSpaceOnUse')
3498
- mask.setAttribute('x', '0')
3499
- mask.setAttribute('y', '0')
3500
- mask.setAttribute('width', String(SCALE_WIDTH))
3501
- const maskRect = document.createElementNS(SVG_NAMESPACE, 'rect')
3502
- maskRect.setAttribute('x', '0')
3503
- maskRect.setAttribute('y', '0')
3504
- maskRect.setAttribute('width', String(SCALE_WIDTH))
3505
- maskRect.setAttribute('fill', `url(#${gradient.id})`)
3506
- mask.append(maskRect)
3507
- defs.append(gradient, mask)
3508
- const marks = document.createElementNS(SVG_NAMESPACE, 'g')
3509
- marks.setAttribute('data-prts-conversation-scale-marks', '')
3510
- const gray = document.createElementNS(SVG_NAMESPACE, 'path')
3511
- gray.setAttribute('data-prts-conversation-scale-gray', '')
3512
- const yellow = document.createElementNS(SVG_NAMESPACE, 'path')
3513
- yellow.setAttribute('data-prts-conversation-scale-accent', '')
3514
- const history = document.createElementNS(SVG_NAMESPACE, 'path')
3515
- history.setAttribute('data-prts-conversation-scale-history', '')
3516
- marks.append(gray, yellow, history)
3517
- const hit = document.createElementNS(SVG_NAMESPACE, 'rect')
3518
- hit.setAttribute('data-prts-conversation-scale-hit', '')
3519
- hit.setAttribute('x', '0')
3520
- hit.setAttribute('y', '0')
3521
- hit.setAttribute('width', String(SCALE_WIDTH))
3522
- hit.setAttribute('fill', 'transparent')
3523
- svg.append(defs, marks, hit)
3524
- scale.append(svg)
3525
- scale._prtsSvg = svg
3526
- scale._prtsMarks = marks
3527
- scale._prtsMask = mask
3528
- scale._prtsMaskRect = maskRect
3529
- scale._prtsMaskId = maskId
3530
- scale._prtsGray = gray
3531
- scale._prtsAccent = yellow
3532
- scale._prtsHistory = history
3533
- scale._prtsHit = hit
3534
- scale._prtsPreview = createPreview(document, previewId)
3535
- const historyStatus = document.createElement('div')
3536
- historyStatus.setAttribute('data-prts-conversation-history-status', '')
3537
- historyStatus.setAttribute('role', 'status')
3538
- historyStatus.setAttribute('aria-live', 'polite')
3539
- historyStatus.hidden = true
3540
- const historyText = document.createElement('span')
3541
- historyText.setAttribute('data-prts-conversation-history-text', '')
3542
- const historyAction = document.createElement('button')
3543
- historyAction.type = 'button'
3544
- historyAction.setAttribute('data-prts-conversation-history-action', '')
3545
- historyStatus.append(historyText, historyAction)
3546
- const historyHint = document.createElement('div')
3547
- historyHint.setAttribute('data-prts-conversation-history-hint', '')
3548
- historyHint.setAttribute('data-prts-owned-conversation-scale', '')
3549
- historyHint.hidden = true
3550
- const historyTrigger = document.createElement('button')
3551
- historyTrigger.type = 'button'
3552
- historyTrigger.tabIndex = -1
3553
- historyTrigger.setAttribute('data-prts-conversation-history-trigger', '')
3554
- historyTrigger.setAttribute('aria-label', '载入更早内容并前往会话开头')
3555
- const historyTooltip = document.createElement('div')
3556
- historyTooltip.id = historyTooltipId
3557
- historyTooltip.setAttribute('data-prts-conversation-history-tooltip', '')
3558
- historyTooltip.setAttribute('role', 'tooltip')
3559
- historyTooltip.setAttribute('aria-hidden', 'true')
3560
- historyTooltip.hidden = true
3561
- const historyTooltipConnector = document.createElement('span')
3562
- historyTooltipConnector.setAttribute('data-prts-conversation-history-tooltip-connector', '')
3563
- historyTooltipConnector.setAttribute('aria-hidden', 'true')
3564
- const historyTooltipBody = document.createElement('div')
3565
- historyTooltipBody.setAttribute('data-prts-conversation-preview-body', '')
3566
- historyTooltipBody.setAttribute('data-prts-conversation-history-tooltip-body', '')
3567
- const historyTooltipHeader = document.createElement('div')
3568
- historyTooltipHeader.setAttribute('data-prts-conversation-preview-row', 'question')
3569
- const historyTooltipHeaderLabel = document.createElement('b')
3570
- historyTooltipHeaderLabel.textContent = 'H'
3571
- const historyTooltipHeaderText = document.createElement('span')
3572
- historyTooltipHeaderText.setAttribute('data-prts-conversation-history-tooltip-label', '')
3573
- historyTooltipHeaderText.textContent = '历史断点'
3574
- historyTooltipHeader.append(historyTooltipHeaderLabel, historyTooltipHeaderText)
3575
- const historyTooltipDetail = document.createElement('div')
3576
- historyTooltipDetail.setAttribute('data-prts-conversation-preview-row', 'answer')
3577
- const historyTooltipDetailLabel = document.createElement('b')
3578
- historyTooltipDetailLabel.textContent = '↥'
3579
- const historyTooltipContent = document.createElement('div')
3580
- historyTooltipContent.setAttribute('data-prts-conversation-history-tooltip-content', '')
3581
- const historyTooltipTitle = document.createElement('strong')
3582
- historyTooltipTitle.textContent = '更早内容尚未加载'
3583
- const historyTooltipDescription = document.createElement('span')
3584
- historyTooltipDescription.textContent = '点击断点,载入历史并前往会话开头'
3585
- historyTooltipContent.append(historyTooltipTitle, historyTooltipDescription)
3586
- historyTooltipDetail.append(historyTooltipDetailLabel, historyTooltipContent)
3587
- historyTooltipBody.append(historyTooltipHeader, historyTooltipDetail)
3588
- historyTooltip.append(historyTooltipConnector, historyTooltipBody)
3589
- historyHint.append(historyTrigger, historyTooltip)
3590
- scale._prtsHistoryStatus = historyStatus
3591
- scale._prtsHistoryText = historyText
3592
- scale._prtsHistoryAction = historyAction
3593
- scale._prtsHistoryHint = historyHint
3594
- scale._prtsHistoryTrigger = historyTrigger
3595
- scale._prtsHistoryTooltip = historyTooltip
3596
- return scale
3597
- }
3598
- function createConversationScaleAdapter({ document, window, sessions }) {
3599
- let operation
3600
- let scroller
3601
- let composer
3602
- let scale
3603
- let preview
3604
- let historyStatus
3605
- let historyHint
3606
- let mutationObserver
3607
- let resizeObserver
3608
- let previewObserver
3609
- let previewSource
3610
- let frame
3611
- let waveFrame
3612
- let snapTimer
3613
- let touchTimer
3614
- let previewDelayTimer
3615
- let previewHideTimer
3616
- let previewRefreshTimer
3617
- let turns = []
3618
- let resizeSettleTimer
3619
- let resizeActive = false
3620
- let layout
3621
- let geometry
3622
- let scaleOffset = 0
3623
- let previousMaximum = 0
3624
- let followBottom = true
3625
- let cursorIndex = 0
3626
- let hoverIndex = -1
3627
- let previewIndex = -1
3628
- let pendingPreviewIndex = -1
3629
- let keyboardActive = false
3630
- let pointerInside = false
3631
- let pointerStart
3632
- let lastDirectJump = 0
3633
- let jumpRequest = 0
3634
- let historyRequest = 0
3635
- let historyMutationRevision = 0
3636
- let historyAvailable = false
3637
- let historyPhase = 'idle'
3638
- let historyPages = 0
3639
- let historyMessage = ''
3640
- let historySessionKey
3641
- let historyHintHovered = false
3642
- let scanPending = false
3643
- let fullScanPending = false
3644
- let pendingMutations = []
3645
- let obstructionDirty = true
3646
- const overlayCandidates = new Set()
3647
- let overlayScanPending = false
3648
- let scaleObstructed = false
3649
- let scaleBlockingObstructed = false
3650
- let scaleSpaceObstructed = true
3651
- let maximumDistance = CONVERSATION_SCALE_DEFAULT_MAX_DISTANCE
3652
- let focusContrast = CONVERSATION_SCALE_FOCUS_CONTRAST_DEFAULT
3653
- let scaleLengths = resolveConversationScaleLengths(focusContrast)
3654
- let contentLeft
3655
- let geometryDirty = true
3656
- let geometrySettleFrame
3657
- let geometrySettleFramesRemaining = 0
3658
- let geometrySettleStableFrames = 0
3659
- let geometrySettleSignature
3660
- let observedOperationWidth
3661
- let observedOperationHeight
3662
- let started = false
3663
- let failed = false
3664
- let waveCenter = 0
3665
- let waveIntensity = 0
3666
- let waveStartCenter = 0
3667
- let waveStartIntensity = 0
3668
- let waveTargetCenter = 0
3669
- let waveTargetIntensity = 0
3670
- let waveStartedAt = 0
3671
- const requestFrame = callback => window?.requestAnimationFrame?.(callback) ?? window?.setTimeout?.(callback, 0)
3672
- const cancelFrame = id => {
3673
- if (id === undefined) return
3674
- if (window?.cancelAnimationFrame) window.cancelAnimationFrame(id)
3675
- else window?.clearTimeout?.(id)
3676
- }
3677
- const currentTime = timestamp => Number.isFinite(timestamp)
3678
- ? timestamp
3679
- : window?.performance?.now?.() ?? Date.now()
3680
- const phoneScaleHidden = () => Number(window?.innerWidth) <= 640
3681
- function currentGeometrySignature() {
3682
- if (!operation || !scroller) return undefined
3683
- const operationBox = operation.getBoundingClientRect?.()
3684
- const scrollerBox = scroller.getBoundingClientRect?.()
3685
- const composerBox = composer?.getBoundingClientRect?.()
3686
- if (!operationBox || !scrollerBox) return undefined
3687
- const values = [
3688
- operationBox.width,
3689
- operationBox.height,
3690
- scrollerBox.top - operationBox.top,
3691
- scrollerBox.bottom - operationBox.top,
3692
- scrollerBox.left - operationBox.left,
3693
- scrollerBox.right - operationBox.left,
3694
- composerBox ? composerBox.top - operationBox.top : -1,
3695
- composerBox ? composerBox.bottom - operationBox.top : -1,
3696
- composerBox ? composerBox.left - operationBox.left : -1,
3697
- composerBox ? composerBox.right - operationBox.left : -1,
3698
- ]
3699
- if (!values.every(Number.isFinite)) return undefined
3700
- return values.map(value => Number(value.toFixed(2))).join(':')
3701
- }
3702
- function sampleGeometryStabilization() {
3703
- geometrySettleFrame = undefined
3704
- if (!started || failed || geometrySettleFramesRemaining <= 0) return
3705
- geometrySettleFramesRemaining -= 1
3706
- const signature = currentGeometrySignature()
3707
- if (signature === undefined) {
3708
- geometrySettleStableFrames = 0
3709
- } else if (signature !== geometrySettleSignature) {
3710
- geometrySettleSignature = signature
3711
- geometrySettleStableFrames = 1
3712
- geometryDirty = true
3713
- obstructionDirty = true
3714
- schedule()
3715
- } else {
3716
- geometrySettleStableFrames += 1
3717
- }
3718
- if (geometrySettleStableFrames >= GEOMETRY_SETTLE_STABLE_FRAMES) {
3719
- geometrySettleFramesRemaining = 0
3720
- return
3721
- }
3722
- if (geometrySettleFramesRemaining > 0) {
3723
- geometrySettleFrame = requestFrame(sampleGeometryStabilization)
3724
- }
3725
- }
3726
- function requestGeometryStabilization() {
3727
- if (!started || failed || phoneScaleHidden()) return
3728
- geometrySettleFramesRemaining = GEOMETRY_SETTLE_FRAME_LIMIT
3729
- geometrySettleStableFrames = 0
3730
- if (geometrySettleFrame === undefined) {
3731
- geometrySettleFrame = requestFrame(sampleGeometryStabilization)
3732
- }
3733
- }
3734
- function stopGeometryStabilization() {
3735
- cancelFrame(geometrySettleFrame)
3736
- geometrySettleFrame = undefined
3737
- geometrySettleFramesRemaining = 0
3738
- geometrySettleStableFrames = 0
3739
- geometrySettleSignature = undefined
3740
- }
3741
- function onHostGeometryChange() {
3742
- if (phoneScaleHidden()) {
3743
- stopGeometryStabilization()
3744
- return
3745
- }
3746
- requestGeometryStabilization()
3747
- schedule(true)
3748
- }
3749
- function reducedMotion() {
3750
- return window?.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches
3751
- || document.documentElement.dataset.prtsMotion === 'reduced'
3752
- }
3753
- function sampleWave(timestamp = currentTime()) {
3754
- if (waveFrame === undefined) return
3755
- const progress = clamp((currentTime(timestamp) - waveStartedAt) / CONVERSATION_SCALE_WAVE_DURATION, 0, 1)
3756
- const eased = 1 - (1 - progress) ** 3
3757
- waveCenter = waveStartCenter + (waveTargetCenter - waveStartCenter) * eased
3758
- waveIntensity = waveStartIntensity + (waveTargetIntensity - waveStartIntensity) * eased
3759
- }
3760
- function animateWave(timestamp) {
3761
- waveFrame = undefined
3762
- if (!started || failed) return
3763
- const time = currentTime(timestamp)
3764
- const progress = clamp((time - waveStartedAt) / CONVERSATION_SCALE_WAVE_DURATION, 0, 1)
3765
- const eased = 1 - (1 - progress) ** 3
3766
- waveCenter = waveStartCenter + (waveTargetCenter - waveStartCenter) * eased
3767
- waveIntensity = waveStartIntensity + (waveTargetIntensity - waveStartIntensity) * eased
3768
- schedule()
3769
- if (progress < 1) waveFrame = requestFrame(animateWave)
3770
- }
3771
- function retargetWave(index) {
3772
- const time = currentTime()
3773
- sampleWave(time)
3774
- cancelFrame(waveFrame)
3775
- waveFrame = undefined
3776
- waveStartCenter = waveCenter
3777
- waveStartIntensity = waveIntensity
3778
- waveTargetCenter = index >= 0 ? index : waveCenter
3779
- waveTargetIntensity = index >= 0 ? 1 : 0
3780
- waveStartedAt = time
3781
- if (reducedMotion()) {
3782
- waveCenter = waveTargetCenter
3783
- waveIntensity = waveTargetIntensity
3784
- schedule()
3785
- return
3786
- }
3787
- waveFrame = requestFrame(animateWave)
3788
- }
3789
- function resetWave() {
3790
- cancelFrame(waveFrame)
3791
- waveFrame = undefined
3792
- waveCenter = 0
3793
- waveIntensity = 0
3794
- waveStartCenter = 0
3795
- waveStartIntensity = 0
3796
- waveTargetCenter = 0
3797
- waveTargetIntensity = 0
3798
- waveStartedAt = 0
3799
- }
3800
- function cancelJump() {
3801
- jumpRequest += 1
3802
- }
3803
- function historyPrefix() {
3804
- return historyAvailable ? 1 : 0
3805
- }
3806
- function scaleItemCount() {
3807
- return turns.length + historyPrefix()
3808
- }
3809
- function scaleToTurnIndex(index) {
3810
- return index - historyPrefix()
3811
- }
3812
- function turnToScaleIndex(index) {
3813
- return index + historyPrefix()
3814
- }
3815
- function syncHistoryStatus() {
3816
- if (!historyStatus || !scale) return
3817
- const visible = historyPhase === 'loading' || historyPhase === 'paused' || historyPhase === 'error'
3818
- historyStatus.hidden = !visible
3819
- historyStatus.dataset.prtsHistoryPhase = historyPhase
3820
- scale.dataset.prtsHistoryPhase = historyPhase
3821
- scale.toggleAttribute('data-prts-conversation-history-available', historyAvailable)
3822
- if (!visible) {
3823
- syncHistoryHint()
3824
- return
3825
- }
3826
- const page = historyPhase === 'loading' ? historyPages + 1 : historyPages
3827
- const fallback = historyPhase === 'loading'
3828
- ? `正在载入更早内容 · 第 ${page} 页`
3829
- : historyPhase === 'error'
3830
- ? historyMessage || '更早内容载入失败'
3831
- : historyPages > 0
3832
- ? `已载入 ${historyPages} 页 · 尚未到达开头`
3833
- : '已载入部分内容 · 尚未到达开头'
3834
- scale._prtsHistoryText.textContent = fallback
3835
- scale._prtsHistoryAction.textContent = historyPhase === 'loading' ? '取消' : '继续'
3836
- scale._prtsHistoryAction.setAttribute(
3837
- 'aria-label',
3838
- historyPhase === 'loading' ? '取消前往会话开头' : '继续前往会话开头',
3839
- )
3840
- syncHistoryHint()
3841
- }
3842
- function syncHistoryHint() {
3843
- if (!historyHint || !scale) return
3844
- const railUnavailable = scaleSpaceObstructed || scaleBlockingObstructed || scaleObstructed
3845
- || scaleItemCount() < MINIMUM_TURNS
3846
- const visible = historyAvailable && historyPhase === 'idle' && !railUnavailable
3847
- if (!visible) historyHintHovered = false
3848
- const selected = visible && (
3849
- historyHintHovered
3850
- || (pointerInside && hoverIndex === 0)
3851
- )
3852
- historyHint.hidden = !visible
3853
- historyHint.toggleAttribute('data-prts-history-selected', selected)
3854
- scale.toggleAttribute('data-prts-conversation-history-selected', selected)
3855
- const tooltip = scale._prtsHistoryTooltip
3856
- tooltip.hidden = !selected
3857
- tooltip.setAttribute('aria-hidden', String(!selected))
3858
- const tooltipId = tooltip.id
3859
- for (const target of [scale, scale._prtsHistoryTrigger]) {
3860
- if (selected) target.setAttribute('aria-describedby', tooltipId)
3861
- else if (target.getAttribute('aria-describedby') === tooltipId) target.removeAttribute('aria-describedby')
3862
- }
3863
- }
3864
- function selectHistoryHint({ keyboard = false } = {}) {
3865
- if (!historyAvailable || historyPhase !== 'idle') return
3866
- keyboardActive = keyboard
3867
- hoverIndex = 0
3868
- cursorIndex = 0
3869
- ensureVisible(0)
3870
- retargetWave(0)
3871
- syncAccessibility()
3872
- schedule()
3873
- }
3874
- function setHistoryAvailable(next) {
3875
- const available = Boolean(next)
3876
- if (available === historyAvailable) return
3877
- const previousPrefix = historyPrefix()
3878
- historyAvailable = available
3879
- const delta = historyPrefix() - previousPrefix
3880
- if (cursorIndex >= previousPrefix) cursorIndex = Math.max(0, cursorIndex + delta)
3881
- if (hoverIndex >= previousPrefix) hoverIndex = Math.max(0, hoverIndex + delta)
3882
- if (!followBottom && scaleOffset > 0) scaleOffset = Math.max(0, scaleOffset + delta * CONVERSATION_SCALE_SPACING)
3883
- geometryDirty = true
3884
- syncHistoryStatus()
3885
- }
3886
- function readHistoryState() {
3887
- const snapshot = resolveConversationHistorySnapshot(sessions)
3888
- const olderButton = findConversationOlderButton(operation)
3889
- if (snapshot.key !== undefined && snapshot.key !== historySessionKey) {
3890
- historyRequest += 1
3891
- historySessionKey = snapshot.key
3892
- historyPages = 0
3893
- historyPhase = 'idle'
3894
- historyMessage = ''
3895
- }
3896
- const available = snapshot.hasMore || Boolean(olderButton) || historyPhase === 'loading'
3897
- setHistoryAvailable(available)
3898
- if (!available && historyPhase !== 'loading') {
3899
- historyPhase = 'idle'
3900
- historyMessage = ''
3901
- syncHistoryStatus()
3902
- }
3903
- return { ...snapshot, olderButton }
3904
- }
3905
- function cancelHistory({ paused = true } = {}) {
3906
- if (historyPhase !== 'loading') return
3907
- historyRequest += 1
3908
- historyPhase = paused && historyAvailable ? 'paused' : 'idle'
3909
- historyMessage = ''
3910
- syncHistoryStatus()
3911
- schedule()
3912
- }
3913
- function cancelNavigation() {
3914
- cancelJump()
3915
- cancelHistory()
3916
- }
3917
- function onHistoryAction(event) {
3918
- event.preventDefault()
3919
- event.stopPropagation()
3920
- if (historyPhase === 'loading') cancelHistory()
3921
- else void loadHistoryToStart()
3922
- }
3923
- function onHistoryHintPointerEnter() {
3924
- historyHintHovered = true
3925
- selectHistoryHint()
3926
- }
3927
- function onHistoryHintPointerLeave() {
3928
- historyHintHovered = false
3929
- if (!pointerInside) {
3930
- hoverIndex = -1
3931
- retargetWave(-1)
3932
- }
3933
- schedule()
3934
- }
3935
- function schedule(scan = false) {
3936
- if (scan) {
3937
- scanPending = true
3938
- fullScanPending = true
3939
- }
3940
- if (frame !== undefined || failed) return
3941
- frame = requestFrame(flush)
3942
- }
3943
- function clearTimers() {
3944
- for (const timer of [snapTimer, touchTimer, previewDelayTimer, previewHideTimer, previewRefreshTimer, resizeSettleTimer]) {
3945
- if (timer !== undefined) window?.clearTimeout?.(timer)
3946
- }
3947
- snapTimer = undefined
3948
- touchTimer = undefined
3949
- previewDelayTimer = undefined
3950
- previewHideTimer = undefined
3951
- previewRefreshTimer = undefined
3952
- resizeSettleTimer = undefined
3953
- }
3954
- function setScaleResizeState(active) {
3955
- resizeActive = Boolean(active)
3956
- for (const node of [scale, preview, historyHint, historyStatus, composer]) {
3957
- if (!node || node.hasAttribute('data-prts-resizing') === resizeActive) continue
3958
- node.toggleAttribute('data-prts-resizing', resizeActive)
3959
- }
3960
- }
3961
- function disconnectPreviewObserver() {
3962
- resizeSettleTimer = undefined
3963
- previewObserver?.disconnect()
3964
- previewObserver = undefined
3965
- previewSource = undefined
3966
- }
3967
- function observePreviewSource(source) {
3968
- if (source === previewSource) return
3969
- disconnectPreviewObserver()
3970
- const MutationObserver = window?.MutationObserver
3971
- if (!source || typeof MutationObserver !== 'function') return
3972
- previewSource = source
3973
- previewObserver = new MutationObserver(queuePreviewRefresh)
3974
- previewObserver.observe(source, {
3975
- subtree: true,
3976
- childList: true,
3977
- characterData: true,
3978
- attributes: true,
3979
- attributeFilter: ['hidden', 'aria-hidden'],
3980
- })
3981
- }
3982
- function resolveRoots() {
3983
- const nextOperation = document?.querySelector?.('[data-prts-region="operation"]')
3984
- const nextScroller = nextOperation?.querySelector?.('[data-conversation-scroll]')
3985
- if (!nextOperation || !nextScroller) {
3986
- if (operation || scroller || scale || preview) disconnectRoots()
3987
- return false
3988
- }
3989
- const nextComposer = nextScroller.querySelector('[data-composer-seat], [data-slot="conversation.composer"]')
3990
- if (operation === nextOperation && scroller === nextScroller && scale?.isConnected && preview?.isConnected
3991
- && historyHint?.isConnected && historyStatus?.isConnected) {
3992
- if (composer !== nextComposer) {
3993
- if (composer) resizeObserver?.unobserve?.(composer)
3994
- composer = nextComposer
3995
- if (composer) resizeObserver?.observe(composer)
3996
- geometryDirty = true
3997
- }
3998
- return true
3999
- }
4000
- disconnectRoots()
4001
- operation = nextOperation
4002
- scroller = nextScroller
4003
- composer = nextComposer
4004
- scale = createScale(document)
4005
- preview = scale._prtsPreview
4006
- historyHint = scale._prtsHistoryHint
4007
- historyStatus = scale._prtsHistoryStatus
4008
- operation.append(scale, preview, historyHint, historyStatus)
4009
- scale._prtsHistoryTrigger.addEventListener('click', onHistoryAction)
4010
- scale._prtsHistoryTrigger.addEventListener('pointerenter', onHistoryHintPointerEnter)
4011
- scale._prtsHistoryTrigger.addEventListener('pointerleave', onHistoryHintPointerLeave)
4012
- scale._prtsHistoryAction.addEventListener('click', onHistoryAction)
4013
- scroller.setAttribute('data-prts-conversation-scale-ready', '')
4014
- scale.addEventListener('pointermove', onPointerMove)
4015
- scale.addEventListener('pointerleave', onPointerLeave)
4016
- scale.addEventListener('pointerdown', onPointerDown)
4017
- scale.addEventListener('pointerup', onPointerUp)
4018
- scale.addEventListener('pointercancel', onPointerCancel)
4019
- scale.addEventListener('click', onClick)
4020
- scale.addEventListener('wheel', onWheel, { passive: false })
4021
- scale.addEventListener('keydown', onKeydown)
4022
- scale.addEventListener('focus', onFocus)
4023
- scale.addEventListener('blur', onBlur)
4024
- scroller.addEventListener('wheel', cancelNavigation, { passive: true })
4025
- scroller.addEventListener('touchstart', cancelNavigation, { passive: true })
4026
- scroller.addEventListener('pointerdown', cancelNavigation, { passive: true })
4027
- resizeObserver?.observe(operation)
4028
- resizeObserver?.observe(scroller)
4029
- if (composer) resizeObserver?.observe(composer)
4030
- turns = []
4031
- scaleOffset = 0
4032
- previousMaximum = 0
4033
- followBottom = true
4034
- obstructionDirty = true
4035
- cursorIndex = 0
4036
- hoverIndex = -1
4037
- previewIndex = -1
4038
- pendingPreviewIndex = -1
4039
- contentLeft = undefined
4040
- geometryDirty = true
4041
- scaleSpaceObstructed = true
4042
- overlayScanPending = true
4043
- historyRequest += 1
4044
- historyAvailable = false
4045
- historyPhase = 'idle'
4046
- historyPages = 0
4047
- historyMessage = ''
4048
- historySessionKey = undefined
4049
- historyHintHovered = false
4050
- setScaleResizeState(resizeActive)
4051
- cancelJump()
4052
- resetWave()
4053
- requestGeometryStabilization()
4054
- return true
4055
- }
4056
- function disconnectRoots() {
4057
- stopGeometryStabilization()
4058
- clearTimers()
4059
- hidePreview()
4060
- disconnectPreviewObserver()
4061
- if (scroller) {
4062
- scroller.removeAttribute('data-prts-conversation-scale-ready')
4063
- scroller.removeAttribute('data-prts-conversation-scale-empty')
4064
- scroller.removeEventListener('wheel', cancelNavigation)
4065
- scroller.removeEventListener('touchstart', cancelNavigation)
4066
- scroller.removeEventListener('pointerdown', cancelNavigation)
4067
- }
4068
- if (scale) {
4069
- scale.removeEventListener('pointermove', onPointerMove)
4070
- scale.removeEventListener('pointerleave', onPointerLeave)
4071
- scale.removeEventListener('pointerdown', onPointerDown)
4072
- scale.removeEventListener('pointerup', onPointerUp)
4073
- scale.removeEventListener('pointercancel', onPointerCancel)
4074
- scale.removeEventListener('click', onClick)
4075
- scale.removeEventListener('wheel', onWheel)
4076
- scale.removeEventListener('keydown', onKeydown)
4077
- scale.removeEventListener('focus', onFocus)
4078
- scale.removeEventListener('blur', onBlur)
4079
- scale._prtsHistoryTrigger?.removeEventListener('click', onHistoryAction)
4080
- scale._prtsHistoryTrigger?.removeEventListener('pointerenter', onHistoryHintPointerEnter)
4081
- scale._prtsHistoryTrigger?.removeEventListener('pointerleave', onHistoryHintPointerLeave)
4082
- scale._prtsHistoryAction?.removeEventListener('click', onHistoryAction)
4083
- scale.remove()
4084
- }
4085
- preview?.remove()
4086
- historyHint?.remove()
4087
- historyStatus?.remove()
4088
- resizeObserver?.disconnect()
4089
- historyRequest += 1
4090
- operation = undefined
4091
- scroller = undefined
4092
- composer = undefined
4093
- scale = undefined
4094
- preview = undefined
4095
- historyHint = undefined
4096
- historyStatus = undefined
4097
- turns = []
4098
- layout = undefined
4099
- geometry = undefined
4100
- hoverIndex = -1
4101
- previewIndex = -1
4102
- keyboardActive = false
4103
- pointerInside = false
4104
- pointerStart = undefined
4105
- historyHintHovered = false
4106
- resizeActive = false
4107
- cancelJump()
4108
- resetWave()
4109
- overlayCandidates.clear()
4110
- obstructionDirty = true
4111
- overlayScanPending = false
4112
- scaleObstructed = false
4113
- scaleBlockingObstructed = false
4114
- scaleSpaceObstructed = true
4115
- contentLeft = undefined
4116
- observedOperationWidth = undefined
4117
- observedOperationHeight = undefined
4118
- geometryDirty = true
4119
- pendingMutations = []
4120
- fullScanPending = false
4121
- }
4122
- function isTopLevelTurn(node) {
4123
- if (!node?.matches?.(CONVERSATION_USER_TURN_SELECTOR) || !scroller?.contains(node) || !visible(node)) return false
4124
- if (node.closest('[data-prts-conversation-scale], [data-prts-conversation-preview]')) return false
4125
- const parent = node.parentElement?.closest?.(CONVERSATION_USER_TURN_SELECTOR)
4126
- return !parent || !scroller.contains(parent)
4127
- }
4128
- function collectTurnsFromNode(node, target) {
4129
- if (node?.nodeType !== 1) return
4130
- if (node.matches?.(CONVERSATION_USER_TURN_SELECTOR)) target.add(node)
4131
- for (const turn of node.querySelectorAll?.(CONVERSATION_USER_TURN_SELECTOR) ?? []) target.add(turn)
4132
- }
4133
- function collectOverlayCandidates(node) {
4134
- if (node?.nodeType !== 1) return
4135
- if (node.matches?.(CONVERSATION_OVERLAY_SELECTOR)) overlayCandidates.add(node)
4136
- for (const candidate of node.querySelectorAll?.(CONVERSATION_OVERLAY_SELECTOR) ?? []) {
4137
- overlayCandidates.add(candidate)
4138
- }
4139
- }
4140
- function mutationNodeAffectsScale(node) {
4141
- if (node?.nodeType !== 1) return false
4142
- if (node.matches?.(CONVERSATION_OVERLAY_SELECTOR)
4143
- || node.matches?.(CONVERSATION_PORTAL_ROOT_SELECTOR)
4144
- || node.matches?.('[data-prts-region="operation"], [data-slot="conversation"]')) return true
4145
- return Boolean(node.querySelector?.([
4146
- CONVERSATION_OVERLAY_SELECTOR,
4147
- CONVERSATION_PORTAL_ROOT_SELECTOR,
4148
- '[data-prts-region="operation"]',
4149
- '[data-slot="conversation"]',
4150
- ].join(', ')))
4151
- }
4152
- function mutationAffectsTurns(mutation) {
4153
- if (mutation.type === 'attributes') {
4154
- if (mutation.attributeName === 'data-chat-flow-kind'
4155
- || mutation.attributeName === 'data-message-role') return true
4156
- if (mutation.target?.matches?.(CONVERSATION_USER_TURN_SELECTOR)
4157
- || mutation.target?.querySelector?.(CONVERSATION_USER_TURN_SELECTOR)) return true
4158
- }
4159
- for (const node of [...(mutation.addedNodes ?? []), ...(mutation.removedNodes ?? [])]) {
4160
- if (node?.nodeType !== 1) continue
4161
- if (node.matches?.(CONVERSATION_USER_TURN_SELECTOR)
4162
- || node.querySelector?.(CONVERSATION_USER_TURN_SELECTOR)) return true
4163
- }
4164
- return false
4165
- }
4166
- function mutationAffectsOverlay(mutation) {
4167
- if (overlayCandidates.has(mutation.target)) return true
4168
- if (mutationNodeAffectsScale(mutation.target)) return true
4169
- for (const node of mutation.addedNodes ?? []) if (mutationNodeAffectsScale(node)) return true
4170
- for (const node of mutation.removedNodes ?? []) {
4171
- if (mutationNodeAffectsScale(node)) return true
4172
- if ([...overlayCandidates].some(candidate => candidate === node || node?.contains?.(candidate))) return true
4173
- }
4174
- return false
4175
- }
4176
- function collectExternalOverlayCandidates() {
4177
- for (const child of document?.body?.children ?? []) {
4178
- if (child === operation || child.contains?.(operation)) continue
4179
- collectOverlayCandidates(child)
4180
- }
4181
- }
4182
- function updateOverlayCandidates(mutations, full = false) {
4183
- if (full || overlayScanPending) {
4184
- overlayCandidates.clear()
4185
- collectOverlayCandidates(operation)
4186
- collectExternalOverlayCandidates()
4187
- overlayScanPending = false
4188
- } else {
4189
- for (const mutation of mutations) {
4190
- if (mutation.type === 'attributes') {
4191
- if (mutation.target?.matches?.(CONVERSATION_OVERLAY_SELECTOR)) overlayCandidates.add(mutation.target)
4192
- else overlayCandidates.delete(mutation.target)
4193
- }
4194
- for (const node of mutation.addedNodes ?? []) collectOverlayCandidates(node)
4195
- }
4196
- }
4197
- for (const candidate of [...overlayCandidates]) {
4198
- if (!candidate.isConnected) overlayCandidates.delete(candidate)
4199
- }
4200
- }
4201
- function applyTurns(nextTurns) {
4202
- const wasAtBottom = shouldFollowConversationScaleBottom(scaleOffset, previousMaximum)
4203
- const previousList = turns
4204
- const previousTurns = new Set(previousList)
4205
- const previousCount = turns.length
4206
- const previousPrefix = historyPrefix()
4207
- const turnAtScaleIndex = index => previousList[index - previousPrefix]
4208
- const cursorTurn = turnAtScaleIndex(cursorIndex)
4209
- const hoverTurn = turnAtScaleIndex(hoverIndex)
4210
- const cursorWasHistory = historyAvailable && cursorIndex === 0
4211
- const hoverWasHistory = historyAvailable && hoverIndex === 0
4212
- const previewTurn = previousList[previewIndex]
4213
- const pendingPreviewTurn = previousList[pendingPreviewIndex]
4214
- const previewWasVisible = previewIndex >= 0
4215
- const anchorScaleIndex = layout
4216
- ? nearestVisibleConversationTick(layout, .5)
4217
- : -1
4218
- const anchorTurn = turnAtScaleIndex(anchorScaleIndex)
4219
- const anchorY = layout && anchorScaleIndex >= 0
4220
- ? layout.start + anchorScaleIndex * CONVERSATION_SCALE_SPACING - scaleOffset
4221
- : undefined
4222
- const replaced = previousCount > 0 && nextTurns.length > 0 && !nextTurns.some(turn => previousTurns.has(turn))
4223
- turns = nextTurns
4224
- if (replaced || turns.length !== previousCount) geometryDirty = true
4225
- if (replaced || turns.length > previousCount) cancelJump()
4226
- followBottom = replaced || previousCount === 0 || (turns.length > previousCount && wasAtBottom)
4227
- const nextScaleIndex = node => {
4228
- const index = node ? turns.indexOf(node) : -1
4229
- return index < 0 ? -1 : turnToScaleIndex(index)
4230
- }
4231
- cursorIndex = cursorWasHistory ? 0 : nextScaleIndex(cursorTurn)
4232
- if (cursorIndex < 0) cursorIndex = Math.max(0, scaleItemCount() - 1)
4233
- hoverIndex = hoverWasHistory ? 0 : nextScaleIndex(hoverTurn)
4234
- previewIndex = previewTurn ? turns.indexOf(previewTurn) : -1
4235
- pendingPreviewIndex = pendingPreviewTurn ? turns.indexOf(pendingPreviewTurn) : -1
4236
- if (previewWasVisible && previewIndex < 0) hidePreview()
4237
- if (!followBottom && anchorTurn && Number.isFinite(anchorY)) {
4238
- const nextAnchor = nextScaleIndex(anchorTurn)
4239
- if (nextAnchor >= 0) {
4240
- scaleOffset = Math.max(0, nextAnchor * CONVERSATION_SCALE_SPACING + (layout?.start ?? .5) - anchorY)
4241
- }
4242
- }
4243
- if ((previousCount === 0 || replaced) && turns.length) cursorIndex = scaleItemCount() - 1
4244
- const empty = scaleItemCount() < MINIMUM_TURNS
4245
- scale.dataset.prtsScaleCount = String(turns.length)
4246
- scale.toggleAttribute('data-prts-conversation-scale-partial', historyAvailable)
4247
- scale.toggleAttribute('data-prts-conversation-scale-empty', empty)
4248
- scroller.toggleAttribute('data-prts-conversation-scale-empty', empty)
4249
- syncAccessibility()
4250
- }
4251
- function syncTurns(mutations = [], full = false) {
4252
- updateOverlayCandidates(mutations, full)
4253
- const conversationMutations = mutations.filter(mutation => operation?.contains?.(mutation.target))
4254
- if (full || !turns.length) {
4255
- applyTurns(collectConversationTurns(scroller))
4256
- return
4257
- }
4258
- const next = new Set(turns.filter(turn => turn.isConnected && scroller.contains(turn)))
4259
- const touched = new Set()
4260
- for (const mutation of conversationMutations) {
4261
- if (mutation.type === 'attributes') {
4262
- collectTurnsFromNode(mutation.target, touched)
4263
- const closest = mutation.target?.closest?.(CONVERSATION_USER_TURN_SELECTOR)
4264
- if (closest) touched.add(closest)
4265
- }
4266
- for (const node of mutation.addedNodes ?? []) collectTurnsFromNode(node, touched)
4267
- for (const node of mutation.removedNodes ?? []) {
4268
- if (node?.nodeType !== 1) continue
4269
- for (const turn of next) {
4270
- if (turn === node || node.contains?.(turn)) next.delete(turn)
4271
- }
4272
- }
4273
- }
4274
- for (const turn of touched) {
4275
- if (isTopLevelTurn(turn)) next.add(turn)
4276
- else next.delete(turn)
4277
- }
4278
- const ordered = [...next].filter(isTopLevelTurn).sort((left, right) => {
4279
- if (left === right) return 0
4280
- return follows(left, right) ? -1 : 1
4281
- })
4282
- applyTurns(ordered)
4283
- }
4284
- function representativeContentLeft(operationBox) {
4285
- if (!geometryDirty) return contentLeft
4286
- const assistant = scroller.querySelector?.([
4287
- '[data-prts-ai-surface]:not([hidden])',
4288
- '[data-chat-flow-kind="assistant-step"]:not([hidden])',
4289
- '[data-message-role="assistant"]:not([hidden])',
4290
- ].join(', '))
4291
- const representatives = [assistant, turns[0], turns.at(-1)].filter(Boolean)
4292
- const positions = []
4293
- for (const node of representatives) {
4294
- if (!visible(node)) continue
4295
- const style = window?.getComputedStyle?.(node)
4296
- if (style?.display === 'none' || style?.visibility === 'hidden') continue
4297
- const box = node.getBoundingClientRect?.()
4298
- if (!box || box.width <= 0 || box.height <= 0) continue
4299
- positions.push(box.left - operationBox.left)
4300
- }
4301
- contentLeft = positions.length ? Math.min(...positions) : undefined
4302
- geometryDirty = false
4303
- return contentLeft
4304
- }
4305
- function visibleGeometry() {
4306
- const operationBox = operation.getBoundingClientRect()
4307
- const scrollerBox = scroller.getBoundingClientRect()
4308
- const composerBox = composer?.getBoundingClientRect?.()
4309
- const top = clamp(scrollerBox.top - operationBox.top + 12, 8, Math.max(8, operationBox.height - 92))
4310
- const bottomEdge = composerBox && composerBox.height > 0 && composerBox.top < operationBox.bottom
4311
- ? composerBox.top - operationBox.top - 12
4312
- : Math.min(scrollerBox.bottom, operationBox.bottom) - operationBox.top - 18
4313
- const height = Math.max(84, bottomEdge - top)
4314
- const drawerMode = document.documentElement.dataset.prtsDrawerMode
4315
- const scaleGeometry = drawerMode === 'overlay'
4316
- ? { visible: false, reason: 'drawer' }
4317
- : window.innerWidth <= 640
4318
- ? { visible: false, reason: 'phone' }
4319
- : resolveConversationScaleGeometry({
4320
- operationWidth: operationBox.width,
4321
- contentLeft: representativeContentLeft(operationBox),
4322
- maximumDistance,
4323
- previouslyHidden: scaleSpaceObstructed,
4324
- })
4325
- const left = Number.isFinite(scaleGeometry.left)
4326
- ? scaleGeometry.left
4327
- : CONVERSATION_SCALE_CONTENT_GAP
4328
- return { operationBox, scrollerBox, composerBox, top, height, left, scaleGeometry }
4329
- }
4330
- function boxesIntersect(left, right) {
4331
- return left.right > right.left
4332
- && left.left < right.right
4333
- && left.bottom > right.top
4334
- && left.top < right.bottom
4335
- }
4336
- function overlayIntersects(candidate, targets) {
4337
- if (!candidate?.isConnected || candidate.hidden || candidate.getAttribute('aria-hidden') === 'true') return false
4338
- if (candidate.closest?.('[data-prts-owned-conversation-scale], [data-prts-owned-conversation-preview]')) return false
4339
- const style = window?.getComputedStyle?.(candidate)
4340
- if (style?.display === 'none' || style?.visibility === 'hidden' || style?.opacity === '0') return false
4341
- const box = candidate.getBoundingClientRect?.()
4342
- if (!box || box.width <= 0 || box.height <= 0) return false
4343
- return targets.some(target => target?.width > 0 && target?.height > 0 && boxesIntersect(box, target))
4344
- }
4345
- function blockingOverlay(candidate) {
4346
- if (candidate?.matches?.(CONVERSATION_BLOCKING_OVERLAY_SELECTOR)) return true
4347
- const plugin = candidate?.matches?.('[data-plugin]') ? candidate : candidate?.closest?.('[data-plugin]')
4348
- return Boolean(plugin
4349
- && plugin.getAttribute('data-plugin') !== 'dsh-theme-prts'
4350
- && plugin.closest?.('[data-shell-overlay], [data-slot="shell.overlay"]'))
4351
- }
4352
- function syncScaleInteractiveState() {
4353
- if (!scale) return true
4354
- const hidden = scaleSpaceObstructed || scaleBlockingObstructed || scaleObstructed || scaleItemCount() < MINIMUM_TURNS
4355
- const wasHidden = scale.tabIndex === -1
4356
- if (hidden && !wasHidden) {
4357
- hidePreview()
4358
- pointerInside = false
4359
- hoverIndex = -1
4360
- keyboardActive = false
4361
- retargetWave(-1)
4362
- scale.tabIndex = -1
4363
- scale.setAttribute('aria-hidden', 'true')
4364
- if (document.activeElement === scale) scale.blur?.()
4365
- } else if (!hidden && wasHidden) {
4366
- scale.tabIndex = 0
4367
- scale.removeAttribute('aria-hidden')
4368
- }
4369
- syncHistoryHint()
4370
- return hidden
4371
- }
4372
- function syncScaleSpaceObstruction(resolution) {
4373
- const obstructed = !resolution.visible
4374
- scaleSpaceObstructed = obstructed
4375
- scale.toggleAttribute('data-prts-conversation-scale-space-obstructed', obstructed)
4376
- if (obstructed) scale.dataset.prtsScaleHiddenReason = resolution.reason || 'space'
4377
- else delete scale.dataset.prtsScaleHiddenReason
4378
- scale.toggleAttribute('data-prts-conversation-scale-centered', Boolean(resolution.centered))
4379
- syncScaleInteractiveState()
4380
- return scaleSpaceObstructed || scaleItemCount() < MINIMUM_TURNS
4381
- }
4382
- function syncScaleObstruction(currentGeometry) {
4383
- if (!scale) return false
4384
- obstructionDirty = false
4385
- if (scaleSpaceObstructed) {
4386
- scaleBlockingObstructed = false
4387
- scaleObstructed = false
4388
- scale.removeAttribute('data-prts-conversation-scale-blocked')
4389
- scale.removeAttribute('data-prts-conversation-scale-obstructed')
4390
- syncScaleInteractiveState()
4391
- return false
4392
- }
4393
- const candidates = [...overlayCandidates]
4394
- const operationBox = currentGeometry?.operationBox
4395
- const blocked = Boolean(operationBox?.width && operationBox?.height)
4396
- && candidates.some(candidate => blockingOverlay(candidate) && overlayIntersects(candidate, [operationBox]))
4397
- const scaleBox = scale.getBoundingClientRect?.()
4398
- const previewBox = preview?.hasAttribute?.('data-prts-conversation-preview-visible')
4399
- ? preview.getBoundingClientRect?.()
4400
- : undefined
4401
- const historyHintBox = historyHint && !historyHint.hidden
4402
- ? historyHint.getBoundingClientRect?.()
4403
- : undefined
4404
- const historyTooltipBox = scale._prtsHistoryTooltip && !scale._prtsHistoryTooltip.hidden
4405
- ? scale._prtsHistoryTooltip.getBoundingClientRect?.()
4406
- : undefined
4407
- const historyStatusBox = historyStatus && !historyStatus.hidden
4408
- ? historyStatus.getBoundingClientRect?.()
4409
- : undefined
4410
- const localTargets = [scaleBox, previewBox, historyHintBox, historyTooltipBox, historyStatusBox].filter(Boolean)
4411
- const obstructed = !blocked
4412
- && localTargets.length > 0
4413
- && candidates.some(candidate => !blockingOverlay(candidate) && overlayIntersects(candidate, localTargets))
4414
- scaleBlockingObstructed = blocked
4415
- scaleObstructed = obstructed
4416
- scale.toggleAttribute('data-prts-conversation-scale-blocked', blocked)
4417
- scale.toggleAttribute('data-prts-conversation-scale-obstructed', obstructed)
4418
- syncScaleInteractiveState()
4419
- return blocked || obstructed
4420
- }
4421
- function positionPreview(index) {
4422
- if (!preview || !layout || !geometry || index < 0 || index >= layout.count) return
4423
- const scaleIndex = turnToScaleIndex(index)
4424
- const tickY = clamp(layout.positions[scaleIndex], .5, layout.height - .5)
4425
- const anchor = geometry.top + tickY
4426
- const previewBox = preview.getBoundingClientRect?.()
4427
- const measuredHeight = previewBox?.height || preview.offsetHeight || PREVIEW_FALLBACK_HEIGHT
4428
- const maximumTop = Math.max(geometry.top, geometry.top + geometry.height - measuredHeight)
4429
- const top = clamp(anchor - measuredHeight / 2, geometry.top, maximumTop)
4430
- const left = geometry.left + SCALE_WIDTH + PREVIEW_GAP
4431
- preview.style.left = `${Number(left.toFixed(2))}px`
4432
- preview.style.top = `${Number(top.toFixed(2))}px`
4433
- preview.style.setProperty('--prts-preview-anchor-y', `${Number(clamp(anchor - top, 1, measuredHeight - 1).toFixed(2))}px`)
4434
- }
4435
- function render() {
4436
- if (!operation || !scroller || !scale) return
4437
- geometry = visibleGeometry()
4438
- scale.style.top = `${Number(geometry.top.toFixed(2))}px`
4439
- scale.style.left = `${Number(geometry.left.toFixed(2))}px`
4440
- scale.style.height = `${Number(geometry.height.toFixed(2))}px`
4441
- historyStatus.style.top = `${Number(geometry.top.toFixed(2))}px`
4442
- historyStatus.style.left = `${Number((geometry.left + SCALE_WIDTH + PREVIEW_GAP).toFixed(2))}px`
4443
- scale.dataset.prtsScaleMaxDistance = String(maximumDistance)
4444
- scale.dataset.prtsScaleFocusContrast = String(focusContrast)
4445
- syncHistoryStatus()
4446
- if (syncScaleSpaceObstruction(geometry.scaleGeometry)) return
4447
- if (obstructionDirty) {
4448
- if (syncScaleObstruction(geometry)) return
4449
- } else if (scaleBlockingObstructed || scaleObstructed) {
4450
- return
4451
- }
4452
- const provisional = getConversationScaleLayout(scaleItemCount(), geometry.height, scaleOffset)
4453
- if (followBottom) scaleOffset = provisional.maxOffset
4454
- layout = getConversationScaleLayout(scaleItemCount(), geometry.height, scaleOffset)
4455
- scaleOffset = layout.offset
4456
- previousMaximum = layout.maxOffset
4457
- followBottom = false
4458
- const historyY = layout.positions[0] ?? .5
4459
- historyHint.style.top = `${Number((geometry.top + historyY).toFixed(2))}px`
4460
- historyHint.style.left = `${Number(geometry.left.toFixed(2))}px`
4461
- syncHistoryHint()
4462
- const historyAnchor = geometry.top + historyY
4463
- const historyTooltipTop = clamp(
4464
- historyAnchor - PREVIEW_FALLBACK_HEIGHT / 2,
4465
- geometry.top,
4466
- Math.max(geometry.top, geometry.top + geometry.height - PREVIEW_FALLBACK_HEIGHT),
4467
- )
4468
- const historyTooltip = scale._prtsHistoryTooltip
4469
- historyTooltip.style.setProperty('--prts-history-tooltip-top', `${Number((historyTooltipTop - historyAnchor + HISTORY_TRIGGER_HEIGHT / 2).toFixed(2))}px`)
4470
- historyTooltip.style.setProperty('--prts-history-tooltip-anchor-y', `${Number(clamp(historyAnchor - historyTooltipTop, 1, PREVIEW_FALLBACK_HEIGHT - 1).toFixed(2))}px`)
4471
- const interactionIndex = hoverIndex >= 0
4472
- ? hoverIndex
4473
- : keyboardActive && scale.matches(':focus') ? cursorIndex : -1
4474
- const paths = buildConversationScalePaths(layout, interactionIndex, {
4475
- center: waveCenter,
4476
- intensity: waveIntensity,
4477
- historyAvailable,
4478
- }, scaleLengths)
4479
- scale._prtsSvg.setAttribute('viewBox', `0 0 ${SCALE_WIDTH} ${layout.height}`)
4480
- scale._prtsGray.setAttribute('d', paths.gray)
4481
- scale._prtsAccent.setAttribute('d', paths.yellow)
4482
- scale._prtsHistory.setAttribute('d', paths.history)
4483
- scale._prtsHit.setAttribute('height', String(layout.height))
4484
- scale._prtsMask.setAttribute('height', String(layout.height))
4485
- scale._prtsMaskRect.setAttribute('height', String(layout.height))
4486
- if (scaleOffset > 0) {
4487
- scale._prtsMarks.setAttribute('mask', `url(#${scale._prtsMaskId})`)
4488
- scale.setAttribute('data-prts-conversation-scale-top-fade', '')
4489
- } else {
4490
- scale._prtsMarks.removeAttribute('mask')
4491
- scale.removeAttribute('data-prts-conversation-scale-top-fade')
4492
- }
4493
- scale.dataset.prtsScaleCount = String(turns.length)
4494
- scale.toggleAttribute('data-prts-conversation-scale-partial', historyAvailable)
4495
- scale.dataset.prtsScaleOffset = String(Number(scaleOffset.toFixed(2)))
4496
- scale.dataset.prtsScaleMaximum = String(Number(layout.maxOffset.toFixed(2)))
4497
- if (interactionIndex >= 0) scale.dataset.prtsScaleWave = String(interactionIndex + 1)
4498
- else delete scale.dataset.prtsScaleWave
4499
- if (previewIndex >= 0) positionPreview(previewIndex)
4500
- syncAccessibility()
4501
- }
4502
- function syncAccessibility() {
4503
- if (!scale) return
4504
- const maximum = Math.max(1, scaleItemCount())
4505
- const current = clamp(cursorIndex + 1, 1, maximum)
4506
- scale.setAttribute('aria-valuemin', '1')
4507
- scale.setAttribute('aria-valuemax', String(maximum))
4508
- scale.setAttribute('aria-valuenow', String(current))
4509
- scale.setAttribute(
4510
- 'aria-valuetext',
4511
- historyAvailable && cursorIndex === 0
4512
- ? '更早内容尚未载入,按回车前往会话开头'
4513
- : turns.length
4514
- ? `当前已载入第 ${scaleToTurnIndex(cursorIndex) + 1} 轮,共 ${turns.length} 轮${historyAvailable ? ',前方仍有更早内容' : ''}`
4515
- : '无可用会话刻度',
4516
- )
4517
- }
4518
- function flush() {
4519
- frame = undefined
4520
- if (!started || failed) return
4521
- try {
4522
- if (!resolveRoots()) return
4523
- readHistoryState()
4524
- if (scanPending) {
4525
- scanPending = false
4526
- const mutations = pendingMutations
4527
- const full = fullScanPending
4528
- pendingMutations = []
4529
- fullScanPending = false
4530
- syncTurns(mutations, full)
4531
- }
4532
- render()
4533
- } catch {
4534
- failed = true
4535
- disconnectRoots()
4536
- }
4537
- }
4538
- function localIndex(event) {
4539
- if (!layout || scaleItemCount() < MINIMUM_TURNS) return -1
4540
- const box = scale.getBoundingClientRect()
4541
- return nearestVisibleConversationTick(layout, event.clientY - box.top)
4542
- }
4543
- function ensureVisible(index) {
4544
- if (!layout || index < 0) return
4545
- const target = layout.start + index * CONVERSATION_SCALE_SPACING - scaleOffset
4546
- if (target < .5) scaleOffset += target - .5
4547
- else if (target > layout.height - .5) scaleOffset += target - (layout.height - .5)
4548
- scaleOffset = clamp(scaleOffset, 0, layout.maxOffset)
4549
- }
4550
- function animatePreviewContent() {
4551
- if (reducedMotion() || typeof preview?._prtsBody?.animate !== 'function') return
4552
- preview._prtsBody.animate([
4553
- { opacity: .28 },
4554
- { opacity: 1 },
4555
- ], { duration: 70, easing: 'ease-out' })
4556
- }
4557
- function updatePreviewContent(index, animate = false) {
4558
- if (!preview || index < 0 || index >= turns.length) return
4559
- const content = getConversationTurnPreview(scroller, turns, index)
4560
- const changed = preview._prtsQuestion.textContent !== content.question
4561
- || preview._prtsAnswer.textContent !== content.answer
4562
- preview._prtsQuestion.textContent = content.question
4563
- preview._prtsAnswer.textContent = content.answer
4564
- preview.dataset.prtsPreviewState = content.state
4565
- preview.dataset.prtsPreviewTurn = String(index + 1)
4566
- observePreviewSource(content.answerSource)
4567
- if (changed && animate && preview.hasAttribute('data-prts-conversation-preview-visible')) animatePreviewContent()
4568
- }
4569
- function showPreview(index, { animate = true, temporary = false } = {}) {
4570
- if (!preview || index < 0 || index >= turns.length) return
4571
- if (previewDelayTimer !== undefined) window?.clearTimeout?.(previewDelayTimer)
4572
- if (previewHideTimer !== undefined) window?.clearTimeout?.(previewHideTimer)
4573
- previewDelayTimer = undefined
4574
- previewHideTimer = undefined
4575
- pendingPreviewIndex = -1
4576
- const switched = previewIndex !== index
4577
- previewIndex = index
4578
- updatePreviewContent(index, animate && switched)
4579
- preview.setAttribute('data-prts-conversation-preview-visible', '')
4580
- preview.setAttribute('aria-hidden', 'false')
4581
- scale?.setAttribute('aria-describedby', preview.id)
4582
- positionPreview(index)
4583
- if (temporary) {
4584
- previewHideTimer = window?.setTimeout?.(() => {
4585
- previewHideTimer = undefined
4586
- hidePreview()
4587
- }, PREVIEW_TOUCH_DURATION)
4588
- }
4589
- }
4590
- function queuePreview(index) {
4591
- if (index < 0 || index >= turns.length) return
4592
- if (preview?.hasAttribute('data-prts-conversation-preview-visible')) {
4593
- showPreview(index)
4594
- return
4595
- }
4596
- if (pendingPreviewIndex === index && previewDelayTimer !== undefined) return
4597
- if (previewDelayTimer !== undefined) window?.clearTimeout?.(previewDelayTimer)
4598
- pendingPreviewIndex = index
4599
- previewDelayTimer = window?.setTimeout?.(() => {
4600
- previewDelayTimer = undefined
4601
- const pending = pendingPreviewIndex
4602
- pendingPreviewIndex = -1
4603
- if (pointerInside && scaleToTurnIndex(hoverIndex) === pending) showPreview(pending)
4604
- }, PREVIEW_DELAY)
4605
- }
4606
- function hidePreview() {
4607
- if (previewDelayTimer !== undefined) window?.clearTimeout?.(previewDelayTimer)
4608
- if (previewHideTimer !== undefined) window?.clearTimeout?.(previewHideTimer)
4609
- if (previewRefreshTimer !== undefined) window?.clearTimeout?.(previewRefreshTimer)
4610
- previewDelayTimer = undefined
4611
- previewHideTimer = undefined
4612
- previewRefreshTimer = undefined
4613
- pendingPreviewIndex = -1
4614
- previewIndex = -1
4615
- disconnectPreviewObserver()
4616
- preview?.removeAttribute('data-prts-conversation-preview-visible')
4617
- preview?.setAttribute('aria-hidden', 'true')
4618
- scale?.removeAttribute('aria-describedby')
4619
- }
4620
- function queuePreviewRefresh() {
4621
- if (previewIndex < 0 || previewRefreshTimer !== undefined) return
4622
- previewRefreshTimer = window?.setTimeout?.(() => {
4623
- previewRefreshTimer = undefined
4624
- if (previewIndex >= 0) {
4625
- updatePreviewContent(previewIndex, true)
4626
- positionPreview(previewIndex)
4627
- }
4628
- }, PREVIEW_REFRESH_INTERVAL)
4629
- }
4630
- function wait(milliseconds) {
4631
- return new Promise(resolve => window?.setTimeout?.(resolve, milliseconds))
4632
- }
4633
- async function waitForHistoryPage(request, before, deadline) {
4634
- let sawLoading = false
4635
- while (Date.now() < deadline) {
4636
- await wait(40)
4637
- if (request !== historyRequest) return 'cancelled'
4638
- const state = readHistoryState()
4639
- sawLoading ||= state.loading || Boolean(state.olderButton?.disabled)
4640
- const firstTurn = collectConversationTurns(scroller)[0]
4641
- const progressed = historyMutationRevision > before.revision
4642
- && (firstTurn !== before.firstTurn || !state.loading)
4643
- if (!state.hasMore && !state.olderButton && !state.loading) return 'complete'
4644
- if (progressed && !state.loading && !state.olderButton?.disabled) return 'progress'
4645
- if (sawLoading && !state.loading && !state.olderButton?.disabled) return 'progress'
4646
- }
4647
- return 'timeout'
4648
- }
4649
- async function loadHistoryToStart() {
4650
- if (!operation || !scroller || historyPhase === 'loading') return
4651
- const initial = readHistoryState()
4652
- if (!historyAvailable) {
4653
- if (turns[0]) jump(0)
4654
- return
4655
- }
4656
- const request = historyRequest + 1
4657
- historyRequest = request
4658
- const startedAt = Date.now()
4659
- const sessionKey = initial.key
4660
- let loadedThisRun = 0
4661
- historyPhase = 'loading'
4662
- historyMessage = ''
4663
- hidePreview()
4664
- syncHistoryStatus()
4665
- schedule()
4666
- while (loadedThisRun < CONVERSATION_HISTORY_PAGE_LIMIT
4667
- && Date.now() - startedAt < CONVERSATION_HISTORY_TIME_LIMIT) {
4668
- if (request !== historyRequest) return
4669
- const state = readHistoryState()
4670
- if (sessionKey !== undefined && state.key !== undefined && state.key !== sessionKey) {
4671
- cancelHistory({ paused: false })
4672
- return
4673
- }
4674
- if (!state.hasMore && !state.olderButton && !state.loading) {
4675
- setHistoryAvailable(false)
4676
- historyPhase = 'idle'
4677
- syncTurns([], true)
4678
- schedule()
4679
- if (turns[0]) jump(0)
4680
- return
4681
- }
4682
- if (state.loading || state.olderButton?.disabled) {
4683
- const result = await waitForHistoryPage(
4684
- request,
4685
- {
4686
- firstTurn: collectConversationTurns(scroller)[0],
4687
- revision: historyMutationRevision,
4688
- },
4689
- Math.min(startedAt + CONVERSATION_HISTORY_TIME_LIMIT, Date.now() + HISTORY_PAGE_SETTLE_LIMIT),
4690
- )
4691
- if (result === 'cancelled') return
4692
- if (result === 'timeout') {
4693
- historyPhase = 'error'
4694
- historyMessage = '载入超时,可继续重试'
4695
- break
4696
- }
4697
- historyPages += 1
4698
- loadedThisRun += 1
4699
- syncTurns([], true)
4700
- syncHistoryStatus()
4701
- schedule()
4702
- continue
4703
- }
4704
- if (!state.olderButton) {
4705
- const availableDeadline = Math.min(startedAt + CONVERSATION_HISTORY_TIME_LIMIT, Date.now() + 600)
4706
- while (request === historyRequest && Date.now() < availableDeadline && !findConversationOlderButton(operation)) {
4707
- await wait(40)
4708
- }
4709
- }
4710
- const button = findConversationOlderButton(operation)
4711
- if (!button || button.disabled) {
4712
- historyPhase = 'error'
4713
- historyMessage = '暂时无法载入更早内容'
4714
- break
4715
- }
4716
- const before = {
4717
- firstTurn: collectConversationTurns(scroller)[0],
4718
- revision: historyMutationRevision,
4719
- }
4720
- button.click()
4721
- const result = await waitForHistoryPage(
4722
- request,
4723
- before,
4724
- Math.min(startedAt + CONVERSATION_HISTORY_TIME_LIMIT, Date.now() + HISTORY_PAGE_SETTLE_LIMIT),
4725
- )
4726
- if (result === 'cancelled') return
4727
- if (result === 'timeout') {
4728
- historyPhase = 'error'
4729
- historyMessage = '载入超时,可继续重试'
4730
- break
4731
- }
4732
- historyPages += 1
4733
- loadedThisRun += 1
4734
- syncTurns([], true)
4735
- syncHistoryStatus()
4736
- schedule()
4737
- }
4738
- if (request !== historyRequest) return
4739
- const finalState = readHistoryState()
4740
- if (!finalState.hasMore && !finalState.olderButton && !finalState.loading) {
4741
- setHistoryAvailable(false)
4742
- historyPhase = 'idle'
4743
- syncTurns([], true)
4744
- if (turns[0]) jump(0)
4745
- } else if (historyPhase === 'loading') {
4746
- historyPhase = 'paused'
4747
- }
4748
- syncHistoryStatus()
4749
- schedule()
4750
- }
4751
- function jump(index) {
4752
- const turn = turns[index]
4753
- if (!turn || !scroller || !operation) return
4754
- const jumpScroller = scroller
4755
- const jumpOperation = operation
4756
- const jumpComposer = composer
4757
- const request = jumpRequest + 1
4758
- jumpRequest = request
4759
- const getTargetTop = () => {
4760
- if (!turn.isConnected || scroller !== jumpScroller || operation !== jumpOperation) return Number.NaN
4761
- const operationBox = jumpOperation.getBoundingClientRect()
4762
- const scrollerBox = jumpScroller.getBoundingClientRect()
4763
- const composerBox = jumpComposer?.getBoundingClientRect?.()
4764
- const visibleTop = Math.max(scrollerBox.top, operationBox.top)
4765
- const visibleBottom = Math.min(scrollerBox.bottom, operationBox.bottom, composerBox?.top ?? operationBox.bottom)
4766
- return calculateConversationJumpTop({
4767
- scrollTop: jumpScroller.scrollTop,
4768
- scrollHeight: jumpScroller.scrollHeight,
4769
- clientHeight: jumpScroller.clientHeight,
4770
- turnTop: turn.getBoundingClientRect().top,
4771
- visibleTop,
4772
- visibleHeight: Math.max(0, visibleBottom - visibleTop),
4773
- })
4774
- }
4775
- void performConversationJump({
4776
- scroller: jumpScroller,
4777
- getTargetTop,
4778
- prefersReducedMotion: reducedMotion(),
4779
- requestFrame,
4780
- now: () => currentTime(),
4781
- cancelled: () => request !== jumpRequest,
4782
- onFrame: schedule,
4783
- }).catch(() => {
4784
- if (request === jumpRequest) cancelJump()
4785
- })
4786
- cursorIndex = turnToScaleIndex(index)
4787
- syncAccessibility()
4788
- }
4789
- function showScalePreview(index, options) {
4790
- const turnIndex = scaleToTurnIndex(index)
4791
- if (turnIndex < 0) {
4792
- hidePreview()
4793
- return
4794
- }
4795
- showPreview(turnIndex, options)
4796
- }
4797
- function queueScalePreview(index) {
4798
- const turnIndex = scaleToTurnIndex(index)
4799
- if (turnIndex < 0) {
4800
- hidePreview()
4801
- return
4802
- }
4803
- queuePreview(turnIndex)
4804
- }
4805
- function activateScaleIndex(index, options) {
4806
- if (historyAvailable && index === 0) {
4807
- hidePreview()
4808
- void loadHistoryToStart()
4809
- return
4810
- }
4811
- const turnIndex = scaleToTurnIndex(index)
4812
- if (turnIndex < 0) return
4813
- showPreview(turnIndex, options)
4814
- jump(turnIndex)
4815
- }
4816
- function showWave(index, temporary = false) {
4817
- if (index < 0) return
4818
- hoverIndex = index
4819
- cursorIndex = index
4820
- ensureVisible(index)
4821
- retargetWave(index)
4822
- if (touchTimer !== undefined) window?.clearTimeout?.(touchTimer)
4823
- if (temporary) {
4824
- touchTimer = window?.setTimeout?.(() => {
4825
- touchTimer = undefined
4826
- hoverIndex = -1
4827
- retargetWave(-1)
4828
- schedule()
4829
- }, TOUCH_WAVE_DURATION)
4830
- }
4831
- schedule()
4832
- }
4833
- function onPointerMove(event) {
4834
- if (event.pointerType === 'touch') return
4835
- pointerInside = true
4836
- keyboardActive = false
4837
- const index = localIndex(event)
4838
- if (index === hoverIndex) return
4839
- showWave(index)
4840
- queueScalePreview(index)
4841
- }
4842
- function onPointerLeave(event) {
4843
- if (event.pointerType === 'touch') return
4844
- pointerInside = false
4845
- hoverIndex = -1
4846
- retargetWave(-1)
4847
- hidePreview()
4848
- schedule()
4849
- }
4850
- function onPointerDown(event) {
4851
- cancelNavigation()
4852
- if (event.pointerType !== 'touch' && event.pointerType !== 'pen') return
4853
- pointerInside = true
4854
- pointerStart = { x: event.clientX, y: event.clientY, id: event.pointerId }
4855
- scale.setPointerCapture?.(event.pointerId)
4856
- event.preventDefault()
4857
- }
4858
- function onPointerUp(event) {
4859
- if (!pointerStart || pointerStart.id !== event.pointerId) return
4860
- const distance = Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y)
4861
- pointerStart = undefined
4862
- if (event.pointerType === 'touch') pointerInside = false
4863
- scale.releasePointerCapture?.(event.pointerId)
4864
- if (distance > 8) return
4865
- const index = localIndex(event)
4866
- if (index < 0) return
4867
- lastDirectJump = Date.now()
4868
- keyboardActive = false
4869
- showWave(index, true)
4870
- activateScaleIndex(index, { temporary: true })
4871
- scale.focus({ preventScroll: true })
4872
- event.preventDefault()
4873
- }
4874
- function onPointerCancel(event) {
4875
- if (pointerStart?.id === event.pointerId) {
4876
- pointerStart = undefined
4877
- if (event.pointerType === 'touch') pointerInside = false
4878
- }
4879
- }
4880
- function onClick(event) {
4881
- if (Date.now() - lastDirectJump < 300) return
4882
- keyboardActive = false
4883
- const index = localIndex(event)
4884
- if (index < 0) return
4885
- showWave(index)
4886
- activateScaleIndex(index)
4887
- scale.focus({ preventScroll: true })
4888
- }
4889
- function queueSnap() {
4890
- if (snapTimer !== undefined) window?.clearTimeout?.(snapTimer)
4891
- snapTimer = window?.setTimeout?.(() => {
4892
- snapTimer = undefined
4893
- if (!layout) return
4894
- scaleOffset = snapConversationScaleOffset(scaleOffset, layout.maxOffset)
4895
- schedule()
4896
- }, SNAP_DELAY)
4897
- }
4898
- function onWheel(event) {
4899
- cancelNavigation()
4900
- event.preventDefault()
4901
- event.stopPropagation()
4902
- hidePreview()
4903
- if (!layout || layout.maxOffset <= 0) return
4904
- const factor = event.deltaMode === 1 ? CONVERSATION_SCALE_SPACING : event.deltaMode === 2 ? layout.height : 1
4905
- scaleOffset = clamp(scaleOffset + event.deltaY * factor, 0, layout.maxOffset)
4906
- keyboardActive = false
4907
- hoverIndex = -1
4908
- retargetWave(-1)
4909
- schedule()
4910
- queueSnap()
4911
- }
4912
- function page(direction) {
4913
- if (!layout) return
4914
- const distance = Math.max(CONVERSATION_SCALE_SPACING, Math.floor(layout.height / CONVERSATION_SCALE_SPACING) * CONVERSATION_SCALE_SPACING)
4915
- scaleOffset = clamp(scaleOffset + direction * distance, 0, layout.maxOffset)
4916
- const edgeY = direction < 0 ? .5 : layout.height - .5
4917
- const nextLayout = getConversationScaleLayout(scaleItemCount(), layout.height, scaleOffset)
4918
- cursorIndex = nearestVisibleConversationTick(nextLayout, edgeY)
4919
- hoverIndex = cursorIndex
4920
- retargetWave(cursorIndex)
4921
- showScalePreview(cursorIndex)
4922
- schedule()
4923
- }
4924
- function onKeydown(event) {
4925
- if (scaleItemCount() < MINIMUM_TURNS) return
4926
- if (event.key === 'Escape' && historyPhase === 'loading') {
4927
- cancelHistory()
4928
- event.preventDefault()
4929
- return
4930
- }
4931
- if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
4932
- keyboardActive = true
4933
- cursorIndex = clamp(cursorIndex + (event.key === 'ArrowUp' ? -1 : 1), 0, scaleItemCount() - 1)
4934
- hoverIndex = cursorIndex
4935
- ensureVisible(cursorIndex)
4936
- showScalePreview(cursorIndex)
4937
- } else if (event.key === 'Home' || event.key === 'End') {
4938
- keyboardActive = true
4939
- cursorIndex = event.key === 'Home' ? 0 : scaleItemCount() - 1
4940
- hoverIndex = cursorIndex
4941
- ensureVisible(cursorIndex)
4942
- showScalePreview(cursorIndex)
4943
- } else if (event.key === 'PageUp' || event.key === 'PageDown') {
4944
- keyboardActive = true
4945
- page(event.key === 'PageUp' ? -1 : 1)
4946
- event.preventDefault()
4947
- return
4948
- } else if (event.key === 'Enter' || event.key === ' ') {
4949
- event.preventDefault()
4950
- activateScaleIndex(cursorIndex)
4951
- return
4952
- } else return
4953
- event.preventDefault()
4954
- retargetWave(cursorIndex)
4955
- schedule()
4956
- }
4957
- function onFocus() {
4958
- ensureVisible(cursorIndex)
4959
- schedule()
4960
- }
4961
- function onBlur() {
4962
- keyboardActive = false
4963
- hoverIndex = -1
4964
- retargetWave(-1)
4965
- if (!pointerInside) hidePreview()
4966
- schedule()
4967
- }
4968
- return {
4969
- getCalibrationState(candidate = maximumDistance) {
4970
- if (!started || failed || (!operation && !resolveRoots())) {
4971
- const fallback = resolveConversationScaleCalibrationState({
4972
- maximumDistance: candidate,
4973
- viewportWidth: window?.innerWidth,
4974
- })
4975
- return { ...fallback, simulated: true }
4976
- }
4977
- const cachedOperationBox = geometry?.operationBox
4978
- const operationBox = cachedOperationBox ?? operation.getBoundingClientRect?.()
4979
- const cachedContentLeft = Number.isFinite(contentLeft) ? contentLeft : undefined
4980
- return resolveConversationScaleCalibrationState({
4981
- operationWidth: operationBox?.width,
4982
- contentLeft: cachedContentLeft ?? representativeContentLeft(operationBox),
4983
- maximumDistance: candidate,
4984
- turnCount: turns.length,
4985
- drawerMode: document.documentElement.dataset.prtsDrawerMode,
4986
- viewportWidth: window?.innerWidth,
4987
- previouslyHidden: scaleSpaceObstructed,
4988
- })
4989
- },
4990
- update(nextPreferences = {}) {
4991
- const distanceNumeric = Number(nextPreferences.conversationScaleMaxDistance)
4992
- const nextDistance = Number.isFinite(distanceNumeric)
4993
- ? clamp(Math.round(distanceNumeric / 8) * 8, 16, 240)
4994
- : CONVERSATION_SCALE_DEFAULT_MAX_DISTANCE
4995
- const contrastNumeric = Number(nextPreferences.conversationScaleFocusContrast)
4996
- const nextContrast = Number.isFinite(contrastNumeric)
4997
- ? clamp(Math.round(contrastNumeric / 10) * 10, 0, 100)
4998
- : CONVERSATION_SCALE_FOCUS_CONTRAST_DEFAULT
4999
- if (nextDistance === maximumDistance && nextContrast === focusContrast) return
5000
- maximumDistance = nextDistance
5001
- if (nextContrast !== focusContrast) {
5002
- focusContrast = nextContrast
5003
- scaleLengths = resolveConversationScaleLengths(focusContrast)
5004
- }
5005
- schedule()
5006
- },
5007
- start() {
5008
- if (started || !document) return
5009
- started = true
5010
- failed = false
5011
- window?.addEventListener?.('resize', onHostGeometryChange)
5012
- window?.addEventListener?.('orientationchange', onHostGeometryChange)
5013
- window?.addEventListener?.('pageshow', onHostGeometryChange)
5014
- window?.visualViewport?.addEventListener?.('resize', onHostGeometryChange)
5015
- const ResizeObserver = window?.ResizeObserver
5016
- if (typeof ResizeObserver === 'function') {
5017
- resizeObserver = new ResizeObserver((entries = []) => {
5018
- geometryDirty = true
5019
- if (phoneScaleHidden()) {
5020
- stopGeometryStabilization()
5021
- if (resizeSettleTimer !== undefined) window?.clearTimeout?.(resizeSettleTimer)
5022
- resizeSettleTimer = undefined
5023
- setScaleResizeState(false)
5024
- return
5025
- }
5026
- requestGeometryStabilization()
5027
- const operationEntry = entries.find(entry => entry.target === operation)
5028
- const width = Number(operationEntry?.contentRect?.width)
5029
- const height = Number(operationEntry?.contentRect?.height)
5030
- const operationChanged = !entries.length || Boolean(operationEntry) && (
5031
- !Number.isFinite(width)
5032
- || !Number.isFinite(height)
5033
- || width !== observedOperationWidth
5034
- || height !== observedOperationHeight
5035
- )
5036
- if (operationEntry) {
5037
- if (Number.isFinite(width)) observedOperationWidth = width
5038
- if (Number.isFinite(height)) observedOperationHeight = height
5039
- }
5040
- if (!operationChanged) {
5041
- schedule()
5042
- return
5043
- }
5044
- if (!resizeActive) {
5045
- schedule()
5046
- setScaleResizeState(true)
5047
- }
5048
- if (resizeSettleTimer !== undefined) window?.clearTimeout?.(resizeSettleTimer)
5049
- resizeSettleTimer = window?.setTimeout?.(() => {
5050
- resizeSettleTimer = undefined
5051
- obstructionDirty = true
5052
- setScaleResizeState(false)
5053
- schedule()
5054
- }, 160)
5055
- })
5056
- }
5057
- const MutationObserver = window?.MutationObserver
5058
- if (typeof MutationObserver === 'function' && document.body) {
5059
- mutationObserver = new MutationObserver(mutations => {
5060
- const external = mutations.filter(mutation =>
5061
- !mutation.target?.closest?.('[data-prts-conversation-scale], [data-prts-conversation-preview], [data-prts-conversation-history-hint], [data-prts-conversation-history-status]')
5062
- )
5063
- if (phoneScaleHidden()) return
5064
- if (external.some(mutation =>
5065
- operation?.contains?.(mutation.target)
5066
- || mutation.target?.contains?.(operation)
5067
- || mutation.target?.matches?.('header, [data-host-header], [data-slot*="header" i]')
5068
- || mutationAffectsOverlay(mutation)
5069
- )) requestGeometryStabilization()
5070
- const historyRelevant = external.some(mutation =>
5071
- mutation.type === 'childList'
5072
- && operation?.contains?.(mutation.target)
5073
- && ((mutation.addedNodes?.length ?? 0) > 0 || (mutation.removedNodes?.length ?? 0) > 0)
5074
- )
5075
- if (historyRelevant) historyMutationRevision += 1
5076
- const relevant = external.filter(mutation =>
5077
- mutationAffectsTurns(mutation) || mutationAffectsOverlay(mutation)
5078
- )
5079
- if (relevant.some(mutationAffectsOverlay)) obstructionDirty = true
5080
- if (!relevant.length && !historyRelevant) return
5081
- if (previewIndex >= 0) queuePreviewRefresh()
5082
- pendingMutations.push(...relevant)
5083
- scanPending ||= relevant.length > 0
5084
- schedule()
5085
- })
5086
- mutationObserver.observe(document.body, {
5087
- subtree: true,
5088
- childList: true,
5089
- attributes: true,
5090
- attributeFilter: [
5091
- 'data-chat-flow-kind',
5092
- 'data-message-role',
5093
- 'data-prts-floating-glass',
5094
- 'hidden',
5095
- 'aria-hidden',
5096
- 'aria-modal',
5097
- 'role',
5098
- 'open',
5099
- 'popover',
5100
- 'class',
5101
- 'data-slot',
5102
- 'data-plugin',
5103
- 'style',
5104
- ],
5105
- })
5106
- }
5107
- document.fonts?.ready?.then?.(() => {
5108
- if (started) requestGeometryStabilization()
5109
- }).catch?.(() => {})
5110
- schedule(true)
5111
- },
5112
- dispose() {
5113
- window?.removeEventListener?.('resize', onHostGeometryChange)
5114
- window?.removeEventListener?.('orientationchange', onHostGeometryChange)
5115
- window?.removeEventListener?.('pageshow', onHostGeometryChange)
5116
- window?.visualViewport?.removeEventListener?.('resize', onHostGeometryChange)
5117
- stopGeometryStabilization()
5118
- started = false
5119
- failed = false
5120
- mutationObserver?.disconnect()
5121
- mutationObserver = undefined
5122
- resizeObserver?.disconnect()
5123
- resizeObserver = undefined
5124
- disconnectPreviewObserver()
5125
- if (frame !== undefined) {
5126
- if (window?.cancelAnimationFrame) window.cancelAnimationFrame(frame)
5127
- else window?.clearTimeout?.(frame)
5128
- }
5129
- frame = undefined
5130
- scanPending = false
5131
- fullScanPending = false
5132
- pendingMutations = []
5133
- overlayCandidates.clear()
5134
- overlayScanPending = false
5135
- scaleObstructed = false
5136
- scaleBlockingObstructed = false
5137
- scaleSpaceObstructed = true
5138
- contentLeft = undefined
5139
- geometryDirty = true
5140
- clearTimers()
5141
- setScaleResizeState(false)
5142
- disconnectRoots()
5143
- },
5144
- }
5145
- }
5146
-
5147
2905
  const USER_TURN_SELECTOR = [
5148
2906
  '[data-chat-flow-kind="user"]',
5149
2907
  '[data-chat-flow-kind="user-step"]',
@@ -7136,23 +4894,6 @@ return PARTICLE_OPTIONS.map(([value, label, count]) => `<button type="button" ro
7136
4894
  <i data-prts-particle-detail-preview aria-hidden="true">${Array.from({ length: count }, () => '<b></b>').join('')}</i><span>${label}</span>
7137
4895
  </button>`).join('')
7138
4896
  }
7139
- function calibrationMarkup() {
7140
- return `<div data-prts-scale-calibration data-prts-calibration-mode="hidden" data-prts-calibration-reason="unmeasured">
7141
- <div data-prts-scale-calibration-viewport>
7142
- <div data-prts-scale-calibration-canvas aria-hidden="true">
7143
- <i data-prts-scale-calibration-sidebar></i>
7144
- <span data-prts-scale-calibration-measure><i></i><output data-prts-scale-calibration-value>96 px</output></span>
7145
- <span data-prts-scale-calibration-rail>${Array.from({ length: 9 }, (_, index) => `<i style="--prts-calibration-tick:${index}"></i>`).join('')}</span>
7146
- <i data-prts-scale-calibration-gap></i>
7147
- <span data-prts-scale-calibration-content><i></i><small>会话内容区</small></span>
7148
- </div>
7149
- </div>
7150
- <div data-prts-scale-calibration-meta>
7151
- <span data-prts-scale-calibration-scale hidden>缩放预览</span>
7152
- <output data-prts-scale-calibration-status aria-live="polite">当前视图:几何测量中</output>
7153
- </div>
7154
- </div>`
7155
- }
7156
4897
  function themeSettingsMarkup() {
7157
4898
  return `<div data-prts-settings-backdrop hidden aria-hidden="true"></div>
7158
4899
  <dialog id="prts-theme-settings" data-prts-theme-settings aria-label="P.R.T.S. 主题设置" aria-hidden="true">
@@ -7175,7 +4916,7 @@ return `<div data-prts-settings-backdrop hidden aria-hidden="true"></div>
7175
4916
  <div data-prts-settings-common-grid>${COMMON_CONTROLS.map(([key, label, options]) => settingButtons(key, label, options)).join('')}</div>
7176
4917
  </section>
7177
4918
  <details data-prts-settings-advanced>
7178
- <summary><span><small>精细调整</small><strong>粒子与会话刻度</strong></span><output data-prts-advanced-summary>标准 / 96 px</output></summary>
4919
+ <summary><span><small>精细调整</small><strong>粒子效果</strong></span><output data-prts-advanced-summary>标准 / 1×</output></summary>
7179
4920
  <div data-prts-settings-advanced-content>
7180
4921
  <section data-prts-particle-detail>
7181
4922
  <header><strong>粒子精度</strong><span>同时调整会话与新会话徽记</span></header>
@@ -7186,22 +4927,6 @@ return `<div data-prts-settings-backdrop hidden aria-hidden="true"></div>
7186
4927
  </label>
7187
4928
  <span data-prts-particle-error role="alert" hidden>粒子资源加载异常,主题已使用静态后备效果</span>
7188
4929
  </section>
7189
- <section data-prts-scale-adjustment>
7190
- <header><strong>会话刻度</strong><span>调整位置距离与悬停焦点的视觉区分</span></header>
7191
- ${calibrationMarkup()}
7192
- <label data-prts-setting-row="conversationScaleMaxDistance" data-prts-setting-range-row>
7193
- <span>最大距离</span>
7194
- <div><input type="range" min="16" max="240" step="8" value="96" data-prts-setting-range data-prts-setting-key="conversationScaleMaxDistance" aria-label="会话刻度最大距离"><output data-prts-scale-distance-output>96 px</output></div>
7195
- </label>
7196
- <label data-prts-setting-row="conversationScaleFocusContrast" data-prts-setting-range-row>
7197
- <span>聚焦区分度</span>
7198
- <div data-prts-scale-focus-control>
7199
- <span data-prts-scale-focus-preview aria-hidden="true">${Array.from({ length: 5 }, (_, index) => `<i data-prts-scale-focus-preview-tick="${index}"></i>`).join('')}</span>
7200
- <input type="range" min="0" max="100" step="10" value="70" data-prts-setting-range data-prts-setting-key="conversationScaleFocusContrast" aria-label="会话刻度聚焦区分度">
7201
- <output data-prts-scale-focus-output>70</output>
7202
- </div>
7203
- </label>
7204
- </section>
7205
4930
  </div>
7206
4931
  </details>
7207
4932
  <footer data-prts-settings-actions>
@@ -7233,7 +4958,6 @@ onPreferenceChange = () => {},
7233
4958
  onPreferencePreview = () => {},
7234
4959
  onResetVisual = () => {},
7235
4960
  onRetrySave = () => {},
7236
- getConversationScalePreview = () => ({ visible: false, reason: 'unmeasured', mode: 'hidden' }),
7237
4961
  }) {
7238
4962
  const window = document?.defaultView
7239
4963
  const transparencyMedia = window?.matchMedia?.('(prefers-reduced-transparency: reduce)')
@@ -7244,17 +4968,8 @@ let previousFocus
7244
4968
  let currentPreferences
7245
4969
  let currentStatus
7246
4970
  let currentPersistence = { phase: 'idle', revision: 0 }
7247
- let scaleDistanceDraft
7248
- let scaleDistanceDirty = false
7249
- let scaleFocusContrastDraft
7250
- let scaleFocusContrastDirty = false
7251
4971
  let particleTraversalSpeedDraft
7252
4972
  let particleTraversalSpeedDirty = false
7253
- let calibrationResizeObserver
7254
- let calibrationSettleTimer
7255
- let calibrationFrame
7256
- let calibrationViewportWidth
7257
- let calibrationFactor
7258
4973
  let savedTimer
7259
4974
  let feedbackTimer
7260
4975
  let feedbackTarget
@@ -7297,8 +5012,6 @@ if (!panel || !backdrop || !trigger) return false
7297
5012
  const value = Boolean(next)
7298
5013
  if (value === isOpen) return isOpen
7299
5014
  if (!value) {
7300
- commitScaleDistance()
7301
- commitScaleFocusContrast()
7302
5015
  commitParticleTraversalSpeed()
7303
5016
  }
7304
5017
  isOpen = value
@@ -7310,7 +5023,6 @@ previousFocus = document.activeElement
7310
5023
  onOpen()
7311
5024
  showPanel()
7312
5025
  panel.setAttribute('data-prts-settings-visible', '')
7313
- renderScaleCalibration()
7314
5026
  ;(panel.querySelector('[data-prts-theme-settings-close]') ?? focusable()[0] ?? panel).focus?.()
7315
5027
  } else {
7316
5028
  panel.removeAttribute('data-prts-settings-visible')
@@ -7320,23 +5032,6 @@ if (restoreFocus) (trigger.isConnected ? trigger : previousFocus)?.focus?.()
7320
5032
  }
7321
5033
  return isOpen
7322
5034
  }
7323
- function normalizeScaleDistance(value) {
7324
- const numeric = Number(value)
7325
- if (!Number.isFinite(numeric)) return 96
7326
- return Math.min(240, Math.max(16, Math.round(numeric / 8) * 8))
7327
- }
7328
- function currentScaleDistance() {
7329
- return normalizeScaleDistance(scaleDistanceDirty ? scaleDistanceDraft : currentPreferences?.conversationScaleMaxDistance)
7330
- }
7331
- function normalizeScaleFocusContrast(value) {
7332
- const numeric = Number(value)
7333
- if (!Number.isFinite(numeric)) return CONVERSATION_SCALE_FOCUS_CONTRAST_DEFAULT
7334
- const clamped = Math.min(CONVERSATION_SCALE_FOCUS_CONTRAST_MAX, Math.max(CONVERSATION_SCALE_FOCUS_CONTRAST_MIN, numeric))
7335
- return Math.round(clamped / CONVERSATION_SCALE_FOCUS_CONTRAST_STEP) * CONVERSATION_SCALE_FOCUS_CONTRAST_STEP
7336
- }
7337
- function currentScaleFocusContrast() {
7338
- return normalizeScaleFocusContrast(scaleFocusContrastDirty ? scaleFocusContrastDraft : currentPreferences?.conversationScaleFocusContrast)
7339
- }
7340
5035
  function normalizeParticleTraversalSpeed(value) {
7341
5036
  const numeric = Number(value)
7342
5037
  if (!Number.isFinite(numeric)) return PARTICLE_TRAVERSAL_SPEED_DEFAULT
@@ -7363,131 +5058,9 @@ const range = panel.querySelector('input[data-prts-setting-range][data-prts-sett
7363
5058
  if (range && range.value !== String(value)) range.value = String(value)
7364
5059
  setText(panel.querySelector('[data-prts-particle-traversal-output]'), particleTraversalLabel(value))
7365
5060
  }
7366
- function calibrationStatus(state, value) {
7367
- if (state?.mode === 'configured') return `当前视图:使用配置上限 / ${Math.round(Number(state.left) || value)} px`
7368
- if (state?.simulated) return `模拟布局:使用配置上限 / ${value} px`
7369
- if (state?.mode === 'centered') return `当前视图:自动居中 / 距侧栏 ${Math.round(Number(state.left) || 0)} px`
7370
- const reasons = {
7371
- drawer: '抽屉布局', phone: '手机布局', turns: '消息不足', corridor: '会话走廊不足',
7372
- preview: '会话预览空间不足', unmeasured: '模拟布局',
7373
- }
7374
- return `当前视图:隐藏 / ${reasons[state?.reason] || '空间不足'}`
7375
- }
7376
5061
  function setText(node, value) {
7377
5062
  if (node && node.textContent !== value) node.textContent = value
7378
5063
  }
7379
- function setCalibrationResizeState(active) {
7380
- for (const node of [panel, backdrop]) {
7381
- if (!node || node.hasAttribute('data-prts-resizing') === active) continue
7382
- node.toggleAttribute('data-prts-resizing', active)
7383
- }
7384
- }
7385
- function cancelCalibrationFrame() {
7386
- if (calibrationFrame === undefined) return
7387
- window?.cancelAnimationFrame?.(calibrationFrame)
7388
- window?.clearTimeout?.(calibrationFrame)
7389
- calibrationFrame = undefined
7390
- }
7391
- function measureScaleCalibration() {
7392
- calibrationFrame = undefined
7393
- if (!isOpen) return
7394
- const viewport = panel?.querySelector?.('[data-prts-scale-calibration-viewport]')
7395
- const canvas = panel?.querySelector?.('[data-prts-scale-calibration-canvas]')
7396
- const calibration = panel?.querySelector?.('[data-prts-scale-calibration]')
7397
- const scaleNote = panel?.querySelector?.('[data-prts-scale-calibration-scale]')
7398
- if (!viewport || !canvas || !calibration) return
7399
- const available = calibrationViewportWidth || viewport.clientWidth
7400
- const factor = available > 0 ? Math.min(1, available / 360) : 1
7401
- const roundedFactor = Number(factor.toFixed(4))
7402
- const value = currentScaleDistance()
7403
- let state
7404
- try { state = getConversationScalePreview(value) } catch { state = { visible: false, reason: 'unmeasured', mode: 'hidden' } }
7405
- if (roundedFactor !== calibrationFactor) {
7406
- calibrationFactor = roundedFactor
7407
- canvas.style.transform = `scale(${roundedFactor})`
7408
- viewport.style.height = `${Math.ceil(94 * roundedFactor)}px`
7409
- }
7410
- const scaled = factor < .999
7411
- if (calibration.hasAttribute('data-prts-calibration-scaled') !== scaled) calibration.toggleAttribute('data-prts-calibration-scaled', scaled)
7412
- if (scaleNote && scaleNote.hidden !== !scaled) scaleNote.hidden = !scaled
7413
- const mode = state?.simulated ? 'simulated' : state?.mode || 'hidden'
7414
- const reason = state?.reason || 'unmeasured'
7415
- if (calibration.dataset.prtsCalibrationMode !== mode) calibration.dataset.prtsCalibrationMode = mode
7416
- if (calibration.dataset.prtsCalibrationReason !== reason) calibration.dataset.prtsCalibrationReason = reason
7417
- setText(panel.querySelector('[data-prts-scale-calibration-status]'), calibrationStatus(state, value))
7418
- }
7419
- function scheduleCalibrationMeasurement() {
7420
- if (!isOpen) return
7421
- cancelCalibrationFrame()
7422
- calibrationFrame = window?.requestAnimationFrame?.(measureScaleCalibration)
7423
- ?? window?.setTimeout?.(measureScaleCalibration, 16)
7424
- }
7425
- function scheduleScalePreviewRefresh(entries = []) {
7426
- const viewportEntry = entries.find?.(entry => entry.target?.matches?.('[data-prts-scale-calibration-viewport]'))
7427
- const observedWidth = Number(viewportEntry?.contentRect?.width)
7428
- if (Number.isFinite(observedWidth) && observedWidth > 0) {
7429
- calibrationViewportWidth = observedWidth
7430
- }
7431
- if (!isOpen) return
7432
- setCalibrationResizeState(true)
7433
- if (calibrationSettleTimer !== undefined) window?.clearTimeout?.(calibrationSettleTimer)
7434
- calibrationSettleTimer = window?.setTimeout?.(() => {
7435
- calibrationSettleTimer = undefined
7436
- setCalibrationResizeState(false)
7437
- renderScaleCalibration()
7438
- }, 160)
7439
- }
7440
- function renderScaleCalibration() {
7441
- if (!isOpen) return
7442
- if (!panel || !currentPreferences) return
7443
- const value = currentScaleDistance()
7444
- const contrast = currentScaleFocusContrast()
7445
- const lengths = resolveConversationScaleLengths(contrast)
7446
- const calibration = panel.querySelector('[data-prts-scale-calibration]')
7447
- const distanceRange = panel.querySelector('input[data-prts-setting-range][data-prts-setting-key="conversationScaleMaxDistance"]')
7448
- const contrastRange = panel.querySelector('input[data-prts-setting-range][data-prts-setting-key="conversationScaleFocusContrast"]')
7449
- const distanceOutput = panel.querySelector('[data-prts-scale-distance-output]')
7450
- const contrastOutput = panel.querySelector('[data-prts-scale-focus-output]')
7451
- const calibrationValue = panel.querySelector('[data-prts-scale-calibration-value]')
7452
- if (distanceRange && distanceRange.value !== String(value)) distanceRange.value = String(value)
7453
- if (contrastRange && contrastRange.value !== String(contrast)) contrastRange.value = String(contrast)
7454
- setText(distanceOutput, `${value} px`)
7455
- setText(contrastOutput, String(contrast))
7456
- setText(calibrationValue, `${value} px`)
7457
- for (const tick of panel.querySelectorAll('[data-prts-scale-focus-preview-tick]')) {
7458
- const length = lengths[Number(tick.dataset.prtsScaleFocusPreviewTick)] ?? lengths.at(-1)
7459
- const width = `${length}px`
7460
- if (tick.style.width !== width) tick.style.width = width
7461
- }
7462
- const detail = resolveParticleDetail(currentPreferences)
7463
- const detailLabels = { compact: '精简', standard: '标准', precise: '精细' }
7464
- const advanced = panel.querySelector('[data-prts-advanced-summary]')
7465
- setText(advanced, `${detailLabels[detail]} / ${conciseNumber(currentParticleTraversalSpeed())}× / 区分度 ${contrast} / ${value} px`)
7466
- if (!calibration) return
7467
- const distance = `${value}px`
7468
- if (calibration.style.getPropertyValue('--prts-calibration-distance') !== distance) {
7469
- calibration.style.setProperty('--prts-calibration-distance', distance)
7470
- }
7471
- scheduleCalibrationMeasurement()
7472
- }
7473
- function commitScaleDistance() {
7474
- if (!scaleDistanceDirty || !currentPreferences) return false
7475
- const value = currentScaleDistance()
7476
- scaleDistanceDirty = false
7477
- scaleDistanceDraft = value
7478
- if (value !== normalizeScaleDistance(currentPreferences.conversationScaleMaxDistance)) onPreferenceChange('conversationScaleMaxDistance', value)
7479
- else renderScaleCalibration()
7480
- return true
7481
- }
7482
- function commitScaleFocusContrast() {
7483
- if (!scaleFocusContrastDirty || !currentPreferences) return false
7484
- const value = currentScaleFocusContrast()
7485
- scaleFocusContrastDirty = false
7486
- scaleFocusContrastDraft = value
7487
- if (value !== normalizeScaleFocusContrast(currentPreferences.conversationScaleFocusContrast)) onPreferenceChange('conversationScaleFocusContrast', value)
7488
- else renderScaleCalibration()
7489
- return true
7490
- }
7491
5064
  function commitParticleTraversalSpeed() {
7492
5065
  if (!particleTraversalSpeedDirty || !currentPreferences) return false
7493
5066
  const value = currentParticleTraversalSpeed()
@@ -7539,11 +5112,8 @@ const transparency = panel.querySelector('[data-prts-transparency-status]')
7539
5112
  if (transparency) transparency.hidden = !(currentPreferences.glass !== 'off' && transparencyMedia?.matches)
7540
5113
  const particleError = panel.querySelector('[data-prts-particle-error]')
7541
5114
  if (particleError) particleError.hidden = currentStatus?.particle?.phase !== 'error'
7542
- if (!scaleDistanceDirty) scaleDistanceDraft = normalizeScaleDistance(currentPreferences.conversationScaleMaxDistance)
7543
- if (!scaleFocusContrastDirty) scaleFocusContrastDraft = normalizeScaleFocusContrast(currentPreferences.conversationScaleFocusContrast)
7544
5115
  if (!particleTraversalSpeedDirty) particleTraversalSpeedDraft = normalizeParticleTraversalSpeed(currentPreferences.particleTraversalSpeed)
7545
5116
  renderParticleTraversal()
7546
- renderScaleCalibration()
7547
5117
  renderPersistence()
7548
5118
  }
7549
5119
  function markFeedback(target) {
@@ -7573,10 +5143,6 @@ if (target.hasAttribute('data-prts-retry-save')) { onRetrySave(); return }
7573
5143
  if (target.hasAttribute('data-prts-reset-visual')) { setResetConfirmation(true); return }
7574
5144
  if (target.hasAttribute('data-prts-reset-cancel')) { setResetConfirmation(false); return }
7575
5145
  if (target.hasAttribute('data-prts-reset-confirm-action')) {
7576
- scaleDistanceDirty = false
7577
- scaleDistanceDraft = undefined
7578
- scaleFocusContrastDirty = false
7579
- scaleFocusContrastDraft = undefined
7580
5146
  particleTraversalSpeedDirty = false
7581
5147
  particleTraversalSpeedDraft = undefined
7582
5148
  setResetConfirmation(false)
@@ -7588,13 +5154,7 @@ const target = event.target
7588
5154
  if (!target?.matches?.('input[data-prts-setting-range]')) return
7589
5155
  const value = Number(target.value)
7590
5156
  if (!Number.isFinite(value)) return
7591
- if (target.dataset.prtsSettingKey === 'conversationScaleMaxDistance') {
7592
- scaleDistanceDraft = value
7593
- scaleDistanceDirty = true
7594
- } else if (target.dataset.prtsSettingKey === 'conversationScaleFocusContrast') {
7595
- scaleFocusContrastDraft = value
7596
- scaleFocusContrastDirty = true
7597
- } else if (target.dataset.prtsSettingKey === 'particleTraversalSpeed') {
5157
+ if (target.dataset.prtsSettingKey === 'particleTraversalSpeed') {
7598
5158
  particleTraversalSpeedDraft = normalizeParticleTraversalSpeed(value)
7599
5159
  particleTraversalSpeedDirty = true
7600
5160
  renderParticleTraversal()
@@ -7603,7 +5163,6 @@ return
7603
5163
  } else {
7604
5164
  return
7605
5165
  }
7606
- renderScaleCalibration()
7607
5166
  }
7608
5167
  function onKeydown(event) {
7609
5168
  if (!isOpen) return
@@ -7623,8 +5182,6 @@ const renderMediaState = () => renderState()
7623
5182
  const commitFromControl = event => {
7624
5183
  const target = event.target
7625
5184
  if (!target?.matches?.('input[data-prts-setting-range]')) return
7626
- if (target.dataset.prtsSettingKey === 'conversationScaleMaxDistance') commitScaleDistance()
7627
- if (target.dataset.prtsSettingKey === 'conversationScaleFocusContrast') commitScaleFocusContrast()
7628
5185
  if (target.dataset.prtsSettingKey === 'particleTraversalSpeed') commitParticleTraversalSpeed()
7629
5186
  }
7630
5187
  trigger?.addEventListener('click', toggle)
@@ -7638,23 +5195,14 @@ backdrop?.addEventListener('click', closeFromBackdrop)
7638
5195
  document.addEventListener('keydown', onKeydown)
7639
5196
  transparencyMedia?.addEventListener?.('change', renderMediaState)
7640
5197
  motionMedia?.addEventListener?.('change', renderMediaState)
7641
- if (typeof window?.ResizeObserver === 'function') {
7642
- calibrationResizeObserver = new window.ResizeObserver(scheduleScalePreviewRefresh)
7643
- const viewport = panel?.querySelector?.('[data-prts-scale-calibration-viewport]')
7644
- if (viewport) calibrationResizeObserver.observe(viewport)
7645
- }
7646
5198
  return {
7647
5199
  update(preferences, status, persistenceState = currentPersistence) {
7648
5200
  currentPreferences = preferences
7649
5201
  currentStatus = status
7650
5202
  currentPersistence = persistenceState ?? { phase: 'idle', revision: 0 }
7651
- if (!scaleDistanceDirty) scaleDistanceDraft = normalizeScaleDistance(preferences?.conversationScaleMaxDistance)
7652
- if (!scaleFocusContrastDirty) scaleFocusContrastDraft = normalizeScaleFocusContrast(preferences?.conversationScaleFocusContrast)
7653
5203
  if (!particleTraversalSpeedDirty) particleTraversalSpeedDraft = normalizeParticleTraversalSpeed(preferences?.particleTraversalSpeed)
7654
5204
  renderState()
7655
5205
  },
7656
- refreshScalePreview: renderScaleCalibration,
7657
- scheduleScalePreviewRefresh,
7658
5206
  open: () => setOpen(true),
7659
5207
  close: () => setOpen(false),
7660
5208
  toggle,
@@ -7663,10 +5211,6 @@ isOpen = false
7663
5211
  hidePanel()
7664
5212
  if (savedTimer !== undefined) window?.clearTimeout?.(savedTimer)
7665
5213
  if (feedbackTimer !== undefined) window?.clearTimeout?.(feedbackTimer)
7666
- if (calibrationSettleTimer !== undefined) window?.clearTimeout?.(calibrationSettleTimer)
7667
- calibrationSettleTimer = undefined
7668
- cancelCalibrationFrame()
7669
- setCalibrationResizeState(false)
7670
5214
  feedbackTarget?.removeAttribute?.('data-prts-setting-feedback')
7671
5215
  trigger?.setAttribute('aria-expanded', 'false')
7672
5216
  trigger?.removeEventListener('click', toggle)
@@ -7680,7 +5224,6 @@ backdrop?.removeEventListener('click', closeFromBackdrop)
7680
5224
  document.removeEventListener('keydown', onKeydown)
7681
5225
  transparencyMedia?.removeEventListener?.('change', renderMediaState)
7682
5226
  motionMedia?.removeEventListener?.('change', renderMediaState)
7683
- calibrationResizeObserver?.disconnect()
7684
5227
  document.documentElement.removeAttribute('data-prts-settings-open')
7685
5228
  },
7686
5229
  }
@@ -7791,7 +5334,6 @@ onThemeDisable = () => {},
7791
5334
  onPreferenceChange = () => {},
7792
5335
  onPreferencePreview = () => {},
7793
5336
  onVisualReset = () => {},
7794
- getConversationScalePreview = () => ({ visible: false, reason: 'unmeasured', mode: 'hidden' }),
7795
5337
  onRetrySave = () => {},
7796
5338
  }) {
7797
5339
  const root = document.documentElement
@@ -7951,7 +5493,6 @@ const candidate = operationRegion.querySelector(
7951
5493
  )
7952
5494
  const active = Boolean(candidate)
7953
5495
  root.dataset.prtsConversationState = active ? 'active' : 'idle'
7954
- settingsOverlay?.refreshScalePreview()
7955
5496
  }
7956
5497
  function toggleScheme(event) {
7957
5498
  if (suppressSchemeClick) {
@@ -8128,7 +5669,6 @@ function onResponsiveChange() {
8128
5669
  clearRailGesture()
8129
5670
  setRailViewport(window.innerWidth)
8130
5671
  syncRailState()
8131
- settingsOverlay?.scheduleScalePreviewRefresh?.()
8132
5672
  }
8133
5673
  function bindResponsiveQueries() {
8134
5674
  railViewportQuery = window.matchMedia?.('(min-width: 1180px)')
@@ -8165,7 +5705,6 @@ onPreferenceChange,
8165
5705
  onPreferencePreview,
8166
5706
  onResetVisual: onVisualReset,
8167
5707
  onRetrySave,
8168
- getConversationScalePreview,
8169
5708
  })
8170
5709
  resizeShield.start([
8171
5710
  operationRegion,
@@ -8316,10 +5855,8 @@ onTransitionStateChange(active) {
8316
5855
  particleField.setSchemeTransitionActive(active)
8317
5856
  },
8318
5857
  })
8319
- const sessions = contextService(ctx, 'sessions')
8320
5858
  const toBottom = createToBottomAdapter({ document, window })
8321
5859
  const conversationControls = createConversationControlAdapter({ document, window })
8322
- const conversationScale = createConversationScaleAdapter({ document, window, sessions })
8323
5860
  const layoutDiagnostics = createLayoutStabilityDiagnostics({ document, window })
8324
5861
  const sidebarControls = createSidebarControlAdapter({ document, window })
8325
5862
  const floatingGlass = createFloatingGlassAdapter({ document, window })
@@ -8393,7 +5930,6 @@ assistantGlass.dispose()
8393
5930
  particleField.update({ ...preferences, enabled: false })
8394
5931
  toBottom.dispose()
8395
5932
  conversationControls.dispose()
8396
- conversationScale.dispose()
8397
5933
  layoutDiagnostics.dispose()
8398
5934
  sidebarControls.dispose()
8399
5935
  floatingGlass.dispose()
@@ -8433,9 +5969,6 @@ bootAnimation: preferences.bootAnimation,
8433
5969
  onRetrySave() {
8434
5970
  retryPersistence()
8435
5971
  },
8436
- getConversationScalePreview(value) {
8437
- return conversationScale.getCalibrationState(value)
8438
- },
8439
5972
  })
8440
5973
  if (!operations.update(preferences, status, settingsPersistence)) {
8441
5974
  if (!mountWarningIssued) {
@@ -8455,8 +5988,6 @@ composerGlass.start()
8455
5988
  assistantGlass.start()
8456
5989
  toBottom.start()
8457
5990
  conversationControls.start()
8458
- conversationScale.update(preferences)
8459
- conversationScale.start()
8460
5991
  layoutDiagnostics.start()
8461
5992
  sidebarControls.start()
8462
5993
  floatingGlass.start()
@@ -8549,7 +6080,6 @@ assistantGlass.dispose()
8549
6080
  particleField.dispose()
8550
6081
  toBottom.dispose()
8551
6082
  conversationControls.dispose()
8552
- conversationScale.dispose()
8553
6083
  layoutDiagnostics.dispose()
8554
6084
  sidebarControls.dispose()
8555
6085
  floatingGlass.dispose()
@@ -8592,7 +6122,7 @@ inject: injectActions,
8592
6122
  }
8593
6123
  function apply(ctx) {
8594
6124
  const React = require('react')
8595
- const { defineStore } = require('@deepseek-ai/dsh-client-runtime/client')
6125
+ const { defineStore } = require('@deepseek-ai/dsh-client-store')
8596
6126
  applyPrtsPlugin(ctx, {
8597
6127
  document,
8598
6128
  window,