diff --git a/CHANGELOG.md b/CHANGELOG.md index 054f55042..f3ced66d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- Added "Sign in with OpenClaw ID" browser login through the first-party OIDC provider at id.openclaw.ai, reusing the existing OAuth transaction store, email-linked user provisioning, and session cookies alongside GitHub login. - Updated the minimum Go toolchain to 1.26.6 to resolve GO-2026-5026, GO-2026-5972, GO-2026-6090, and GO-2026-6218. ## v0.3.0 - 2026-08-13 diff --git a/apps/api/cmd/clickclack/main.go b/apps/api/cmd/clickclack/main.go index eaba41063..b35e5e88e 100644 --- a/apps/api/cmd/clickclack/main.go +++ b/apps/api/cmd/clickclack/main.go @@ -150,6 +150,12 @@ func serve(args []string) error { AllowedOrg: cfg.GitHubAllowedOrg, ModeratorOrg: cfg.GitHubModeratorOrg, }, + OpenClawID: httpapi.OpenClawIDConfig{ + ClientID: cfg.OpenClawIDClientID, + ClientSecret: cfg.OpenClawIDClientSecret, + Issuer: cfg.OpenClawIDIssuer, + PublicURL: cfg.PublicURL, + }, Access: httpapi.AccessConfig{ TeamDomain: cfg.AccessTeamDomain, Audience: cfg.AccessAUD, diff --git a/apps/api/internal/config/config.go b/apps/api/internal/config/config.go index 56a161111..5d9fc986f 100644 --- a/apps/api/internal/config/config.go +++ b/apps/api/internal/config/config.go @@ -13,28 +13,31 @@ import ( ) type Config struct { - Addr string `json:"addr"` - Data string `json:"data"` - DB string `json:"db"` - Uploads string `json:"uploads"` - Environment string `json:"environment"` - MetricsEnabled bool `json:"metrics_enabled"` - PublicURL string `json:"public_url"` - PublicAPIURL string `json:"public_api_url"` - EmbedFrameAncestors []string `json:"embed_frame_ancestors"` - CookieNamespace string `json:"cookie_namespace"` - DevBootstrap bool `json:"dev_bootstrap"` - GitHubClientID string `json:"github_client_id"` - GitHubClientSecret string `json:"github_client_secret"` - GitHubAllowedOrg string `json:"github_allowed_org"` - GitHubModeratorOrg string `json:"github_moderator_org"` - AccessTeamDomain string `json:"access_team_domain"` - AccessAUD string `json:"access_aud"` - PushoverAPIToken string `json:"pushover_api_token"` - R2AccountID string `json:"r2_account_id"` - R2AccessKeyID string `json:"r2_access_key_id"` - R2SecretAccessKey string `json:"r2_secret_access_key"` - R2Endpoint string `json:"r2_endpoint"` + Addr string `json:"addr"` + Data string `json:"data"` + DB string `json:"db"` + Uploads string `json:"uploads"` + Environment string `json:"environment"` + MetricsEnabled bool `json:"metrics_enabled"` + PublicURL string `json:"public_url"` + PublicAPIURL string `json:"public_api_url"` + EmbedFrameAncestors []string `json:"embed_frame_ancestors"` + CookieNamespace string `json:"cookie_namespace"` + DevBootstrap bool `json:"dev_bootstrap"` + GitHubClientID string `json:"github_client_id"` + GitHubClientSecret string `json:"github_client_secret"` + GitHubAllowedOrg string `json:"github_allowed_org"` + GitHubModeratorOrg string `json:"github_moderator_org"` + OpenClawIDClientID string `json:"openclaw_id_client_id"` + OpenClawIDClientSecret string `json:"openclaw_id_client_secret"` + OpenClawIDIssuer string `json:"openclaw_id_issuer"` + AccessTeamDomain string `json:"access_team_domain"` + AccessAUD string `json:"access_aud"` + PushoverAPIToken string `json:"pushover_api_token"` + R2AccountID string `json:"r2_account_id"` + R2AccessKeyID string `json:"r2_access_key_id"` + R2SecretAccessKey string `json:"r2_secret_access_key"` + R2Endpoint string `json:"r2_endpoint"` } func Defaults() Config { @@ -111,6 +114,15 @@ func Load(path string) (Config, error) { if env := os.Getenv("CLICKCLACK_GITHUB_MODERATOR_ORG"); env != "" { cfg.GitHubModeratorOrg = env } + if env := os.Getenv("OPENCLAW_ID_CLIENT_ID"); env != "" { + cfg.OpenClawIDClientID = env + } + if env := os.Getenv("OPENCLAW_ID_CLIENT_SECRET"); env != "" { + cfg.OpenClawIDClientSecret = env + } + if env := os.Getenv("OPENCLAW_ID_ISSUER"); env != "" { + cfg.OpenClawIDIssuer = env + } if env := os.Getenv("CLICKCLACK_ACCESS_TEAM_DOMAIN"); env != "" { cfg.AccessTeamDomain = env } @@ -182,6 +194,14 @@ func (c *Config) ValidateServe() error { if (allowedOrg != "" || moderatorOrg != "") && !hasClientID { return errors.New("GitHub organization settings require GitHub OAuth credentials") } + openclawClientID := strings.TrimSpace(c.OpenClawIDClientID) + openclawClientSecret := strings.TrimSpace(c.OpenClawIDClientSecret) + if (openclawClientID != "") != (openclawClientSecret != "") { + return errors.New("OPENCLAW_ID_CLIENT_ID and OPENCLAW_ID_CLIENT_SECRET must be configured together") + } + if openclawClientID != "" && publicURL == "" { + return errors.New("OpenClaw ID sign-in requires CLICKCLACK_PUBLIC_URL") + } if _, err := authpolicy.NewCookieNames(namespace, publicURL, publicAPIURL); err != nil { return fmt.Errorf("cookie policy: %w", err) } @@ -193,6 +213,9 @@ func (c *Config) ValidateServe() error { c.GitHubClientSecret = clientSecret c.GitHubAllowedOrg = allowedOrg c.GitHubModeratorOrg = moderatorOrg + c.OpenClawIDClientID = openclawClientID + c.OpenClawIDClientSecret = openclawClientSecret + c.OpenClawIDIssuer = strings.TrimSpace(c.OpenClawIDIssuer) return nil } diff --git a/apps/api/internal/config/config_test.go b/apps/api/internal/config/config_test.go index 927d64423..0cb6dc3b1 100644 --- a/apps/api/internal/config/config_test.go +++ b/apps/api/internal/config/config_test.go @@ -22,6 +22,9 @@ func TestLoadDefaultsEnvAndFile(t *testing.T) { t.Setenv("CLICKCLACK_GITHUB_CLIENT_SECRET", "secret") t.Setenv("CLICKCLACK_GITHUB_ALLOWED_ORG", "openclaw") t.Setenv("CLICKCLACK_GITHUB_MODERATOR_ORG", "openclaw") + t.Setenv("OPENCLAW_ID_CLIENT_ID", "ocid-client") + t.Setenv("OPENCLAW_ID_CLIENT_SECRET", "ocid-secret") + t.Setenv("OPENCLAW_ID_ISSUER", "https://id.openclaw.test/api/auth") t.Setenv("CLICKCLACK_PUSHOVER_API_TOKEN", "app-token") t.Setenv("CLICKCLACK_R2_ACCOUNT_ID", "account") t.Setenv("CLICKCLACK_R2_ACCESS_KEY_ID", "access") @@ -34,6 +37,9 @@ func TestLoadDefaultsEnvAndFile(t *testing.T) { if cfg.Addr != ":9000" || cfg.Data != "/tmp/clickclack" || cfg.DB != "sqlite:///tmp/clickclack.db" || cfg.Uploads != "r2://clickclack-uploads/prod" || cfg.Environment != "fakeco" || !cfg.MetricsEnabled || cfg.PublicURL != "https://clickclack.test" || cfg.PublicAPIURL != "https://api.clickclack.test/services/clickclack/" || len(cfg.EmbedFrameAncestors) != 2 || cfg.EmbedFrameAncestors[0] != "https://control.example.com" || cfg.CookieNamespace != "prod-2" || cfg.DevBootstrap || cfg.GitHubClientID != "client" || cfg.GitHubClientSecret != "secret" || cfg.GitHubAllowedOrg != "openclaw" || cfg.GitHubModeratorOrg != "openclaw" || cfg.PushoverAPIToken != "app-token" || cfg.R2AccountID != "account" || cfg.R2AccessKeyID != "access" || cfg.R2SecretAccessKey != "secret-access" || cfg.R2Endpoint != "https://r2.example.com" { t.Fatalf("unexpected env config: %#v", cfg) } + if cfg.OpenClawIDClientID != "ocid-client" || cfg.OpenClawIDClientSecret != "ocid-secret" || cfg.OpenClawIDIssuer != "https://id.openclaw.test/api/auth" { + t.Fatalf("unexpected OpenClaw ID env config: %#v", cfg) + } path := filepath.Join(t.TempDir(), "config.json") if err := os.WriteFile(path, []byte(`{"addr":":7000","data":"/data"}`), 0o644); err != nil { @@ -62,6 +68,9 @@ func TestLoadDefaultsEnvAndFile(t *testing.T) { t.Setenv("CLICKCLACK_GITHUB_CLIENT_SECRET", "") t.Setenv("CLICKCLACK_GITHUB_ALLOWED_ORG", "") t.Setenv("CLICKCLACK_GITHUB_MODERATOR_ORG", "") + t.Setenv("OPENCLAW_ID_CLIENT_ID", "") + t.Setenv("OPENCLAW_ID_CLIENT_SECRET", "") + t.Setenv("OPENCLAW_ID_ISSUER", "") t.Setenv("CLICKCLACK_PUSHOVER_API_TOKEN", "") t.Setenv("CLICKCLACK_R2_ACCOUNT_ID", "") t.Setenv("CLICKCLACK_R2_ACCESS_KEY_ID", "") @@ -164,6 +173,8 @@ func TestValidateServe(t *testing.T) { {"missing client secret", Config{PublicURL: "https://chat.example.com", GitHubClientID: "client"}}, {"oauth without public url", Config{GitHubClientID: "client", GitHubClientSecret: "secret"}}, {"org without oauth", Config{GitHubAllowedOrg: "openclaw"}}, + {"missing openclaw id client secret", Config{PublicURL: "https://chat.example.com", OpenClawIDClientID: "client"}}, + {"openclaw id without public url", Config{OpenClawIDClientID: "client", OpenClawIDClientSecret: "secret"}}, {"access domain only", Config{AccessTeamDomain: "https://openclaw.cloudflareaccess.com"}}, {"access audience only", Config{AccessAUD: "test-aud"}}, {"access domain must use https", Config{AccessTeamDomain: "http://openclaw.cloudflareaccess.com", AccessAUD: "test-aud"}}, diff --git a/apps/api/internal/httpapi/observability.go b/apps/api/internal/httpapi/observability.go index 92d4a9724..2e7d5d9d4 100644 --- a/apps/api/internal/httpapi/observability.go +++ b/apps/api/internal/httpapi/observability.go @@ -65,17 +65,19 @@ type metricValue struct { } type metricsRegistry struct { - mu sync.Mutex - values map[metricKey]metricValue - githubOAuthEvents map[string]uint64 - ready bool - readyMu sync.RWMutex + mu sync.Mutex + values map[metricKey]metricValue + githubOAuthEvents map[string]uint64 + openclawOAuthEvents map[string]uint64 + ready bool + readyMu sync.RWMutex } func newMetricsRegistry() *metricsRegistry { return &metricsRegistry{ - values: make(map[metricKey]metricValue), - githubOAuthEvents: make(map[string]uint64), + values: make(map[metricKey]metricValue), + githubOAuthEvents: make(map[string]uint64), + openclawOAuthEvents: make(map[string]uint64), } } @@ -123,6 +125,15 @@ func (s *Server) recordGitHubOAuthEvent(event string) { s.metrics.mu.Unlock() } +func (s *Server) recordOpenClawIDOAuthEvent(event string) { + if s.metrics == nil { + return + } + s.metrics.mu.Lock() + s.metrics.openclawOAuthEvents[event]++ + s.metrics.mu.Unlock() +} + func (s *Server) healthz(w http.ResponseWriter, _ *http.Request) { writeJSON(w, http.StatusOK, map[string]string{"status": "ok"}) } @@ -166,6 +177,12 @@ func (m *metricsRegistry) render(build buildMetadata) string { oauthEvents = append(oauthEvents, event) oauthEventValues[event] = value } + openclawEvents := make([]string, 0, len(m.openclawOAuthEvents)) + openclawEventValues := make(map[string]uint64, len(m.openclawOAuthEvents)) + for event, value := range m.openclawOAuthEvents { + openclawEvents = append(openclawEvents, event) + openclawEventValues[event] = value + } m.mu.Unlock() sort.Slice(keys, func(i, j int) bool { if keys[i].Method != keys[j].Method { @@ -204,6 +221,12 @@ func (m *metricsRegistry) render(build buildMetadata) string { for _, event := range oauthEvents { fmt.Fprintf(&out, "clickclack_github_oauth_events_total{event=\"%s\"} %d\n", metricLabel(event), oauthEventValues[event]) } + sort.Strings(openclawEvents) + out.WriteString("# HELP clickclack_openclaw_id_oauth_events_total OpenClaw ID OIDC lifecycle events by bounded event category.\n") + out.WriteString("# TYPE clickclack_openclaw_id_oauth_events_total counter\n") + for _, event := range openclawEvents { + fmt.Fprintf(&out, "clickclack_openclaw_id_oauth_events_total{event=\"%s\"} %d\n", metricLabel(event), openclawEventValues[event]) + } return out.String() } diff --git a/apps/api/internal/httpapi/openclawid.go b/apps/api/internal/httpapi/openclawid.go new file mode 100644 index 000000000..468151fe2 --- /dev/null +++ b/apps/api/internal/httpapi/openclawid.go @@ -0,0 +1,276 @@ +package httpapi + +import ( + "context" + "errors" + "log" + "net/http" + "slices" + "strings" + "time" + + "github.com/golang-jwt/jwt/v5" + "github.com/openclaw/clickclack/apps/api/internal/store" + "golang.org/x/oauth2" +) + +// OpenClawIDConfig configures browser sign-in through the first-party +// OpenClaw ID OIDC provider (Better Auth OAuth 2.1 at id.openclaw.ai). +type OpenClawIDConfig struct { + ClientID string + ClientSecret string + Issuer string + PublicURL string + AuthURL string + TokenURL string + HTTPClient *http.Client +} + +const ( + defaultOpenClawIDIssuer = "https://id.openclaw.ai/api/auth" + defaultOpenClawIDHTTPTimeout = 30 * time.Second + openClawIDTokenClockLeeway = 30 * time.Second +) + +const ( + openclawIDOAuthEventBrowserStart = "browser_start" + openclawIDOAuthEventStartRejected = "start_rejected" + openclawIDOAuthEventCapacityRejected = "capacity_rejected" + openclawIDOAuthEventStateRejected = "state_rejected" + openclawIDOAuthEventProviderFailed = "provider_failed" + openclawIDOAuthEventIdentityRejected = "identity_rejected" + openclawIDOAuthEventBrowserSucceeded = "browser_succeeded" +) + +func (c OpenClawIDConfig) withDefaults() OpenClawIDConfig { + c.ClientID = strings.TrimSpace(c.ClientID) + c.ClientSecret = strings.TrimSpace(c.ClientSecret) + c.PublicURL = strings.TrimSpace(c.PublicURL) + c.Issuer = strings.TrimRight(strings.TrimSpace(c.Issuer), "/") + if c.Issuer == "" { + c.Issuer = defaultOpenClawIDIssuer + } + if c.AuthURL == "" { + c.AuthURL = c.Issuer + "/oauth2/authorize" + } + if c.TokenURL == "" { + c.TokenURL = c.Issuer + "/oauth2/token" + } + if c.HTTPClient == nil { + c.HTTPClient = &http.Client{Timeout: defaultOpenClawIDHTTPTimeout} + } + return c +} + +func (s *Server) openclawIDStart(w http.ResponseWriter, r *http.Request) { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventBrowserStart) + if s.openclawID.ClientID == "" || s.openclawID.ClientSecret == "" { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStartRejected) + writeError(w, http.StatusNotImplemented, errors.New("openclaw id sign-in is not configured")) + return + } + redirectURL, err := s.openclawIDRedirectURL(r) + if err != nil { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStartRejected) + writeError(w, http.StatusServiceUnavailable, err) + return + } + browserBinding, err := s.oauthBrowserBinding(w, r) + if err != nil { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStartRejected) + if errors.Is(err, errAmbiguousCookie) { + writeError(w, http.StatusBadRequest, err) + return + } + s.writeOpenClawIDOAuthServerError(w, r, "browser binding", err) + return + } + state, err := randomOAuthSecret() + if err != nil { + s.writeOpenClawIDOAuthServerError(w, r, "state generation", err) + return + } + pkceVerifier, err := randomOAuthSecret() + if err != nil { + s.writeOpenClawIDOAuthServerError(w, r, "PKCE generation", err) + return + } + now := time.Now().UTC() + if err := s.store.CreateOAuthTransaction(r.Context(), store.OAuthTransaction{ + StateHash: secretHash(state), + BrowserBindingHash: secretHash(browserBinding), + Mode: store.OAuthModeBrowser, + PKCEVerifier: pkceVerifier, + CreatedAt: now, + ExpiresAt: now.Add(oauthTransactionTTL), + }); err != nil { + if errors.Is(err, store.ErrOAuthCapacityExceeded) { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventCapacityRejected) + writeError(w, http.StatusServiceUnavailable, err) + return + } + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStartRejected) + s.writeOpenClawIDOAuthServerError(w, r, "transaction creation", err) + return + } + http.Redirect(w, r, s.openclawIDOAuth2Config(redirectURL).AuthCodeURL(state, oauth2.S256ChallengeOption(pkceVerifier)), http.StatusFound) +} + +func (s *Server) openclawIDCallback(w http.ResponseWriter, r *http.Request) { + state := strings.TrimSpace(r.URL.Query().Get("state")) + if !validDesktopCode(state, oauthEncodedSecretLength, oauthEncodedSecretLength) { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStateRejected) + writeError(w, http.StatusBadRequest, errors.New("invalid openclaw id oauth state")) + return + } + bindingCookie, err := requestCookie(r, s.cookies.OAuthBinding) + if err != nil || !validDesktopCode(bindingCookie.Value, oauthEncodedSecretLength, oauthEncodedSecretLength) { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStateRejected) + writeError(w, http.StatusBadRequest, errors.New("invalid openclaw id oauth state")) + return + } + transaction, err := s.store.ConsumeOAuthTransaction(r.Context(), secretHash(state), secretHash(bindingCookie.Value), time.Now().UTC()) + if err != nil { + if errors.Is(err, store.ErrOAuthTransactionInvalid) { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStateRejected) + writeError(w, http.StatusBadRequest, errors.New("invalid openclaw id oauth state")) + return + } + s.writeOpenClawIDOAuthServerError(w, r, "transaction consumption", err) + return + } + if transaction.Mode != store.OAuthModeBrowser { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventStateRejected) + writeError(w, http.StatusBadRequest, errors.New("invalid openclaw id oauth state")) + return + } + code := strings.TrimSpace(r.URL.Query().Get("code")) + if code == "" { + writeError(w, http.StatusBadRequest, errors.New("openclaw id oauth code is required")) + return + } + redirectURL, err := s.openclawIDRedirectURL(r) + if err != nil { + writeError(w, http.StatusServiceUnavailable, err) + return + } + idToken, err := s.exchangeOpenClawIDCode(r.Context(), code, transaction.PKCEVerifier, redirectURL) + if err != nil { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventProviderFailed) + s.writeOpenClawIDOAuthProviderError(w, r, "token exchange", err) + return + } + claims, err := s.validateOpenClawIDToken(idToken) + if err != nil { + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventIdentityRejected) + writeError(w, http.StatusForbidden, err) + return + } + user, err := s.store.GetOrCreateUserByEmail(r.Context(), "openclaw-id", claims.Email, firstNonEmpty(claims.Name, claims.Email)) + if err != nil { + s.writeOpenClawIDOAuthServerError(w, r, "identity provisioning", err) + return + } + if _, err := s.store.EnsureDefaultWorkspaceMember(r.Context(), user.ID); err != nil { + s.writeOpenClawIDOAuthServerError(w, r, "workspace provisioning", err) + return + } + session, err := s.store.CreateSession(r.Context(), user.ID) + if err != nil { + s.writeOpenClawIDOAuthServerError(w, r, "browser session creation", err) + return + } + s.setSessionCookie(w, r, session) + s.recordOpenClawIDOAuthEvent(openclawIDOAuthEventBrowserSucceeded) + destination := "/" + if s.frontendURL != "" { + destination = s.frontendURL + "/" + } + http.Redirect(w, r, destination, http.StatusFound) +} + +func (s *Server) exchangeOpenClawIDCode(ctx context.Context, code, verifier, redirectURL string) (string, error) { + ctx = context.WithValue(ctx, oauth2.HTTPClient, s.openclawID.HTTPClient) + token, err := s.openclawIDOAuth2Config(redirectURL).Exchange(ctx, code, oauth2.VerifierOption(verifier)) + if err != nil { + return "", errors.New("openclaw id token exchange failed") + } + idToken, _ := token.Extra("id_token").(string) + if strings.TrimSpace(idToken) == "" { + return "", errors.New("openclaw id token missing") + } + return idToken, nil +} + +func (s *Server) openclawIDOAuth2Config(redirectURL string) *oauth2.Config { + return &oauth2.Config{ + ClientID: s.openclawID.ClientID, + ClientSecret: s.openclawID.ClientSecret, + Endpoint: oauth2.Endpoint{ + AuthURL: s.openclawID.AuthURL, + TokenURL: s.openclawID.TokenURL, + // OpenClaw ID registers ClickClack as a confidential client + // using client_secret_basic on the token endpoint. + AuthStyle: oauth2.AuthStyleInHeader, + }, + RedirectURL: redirectURL, + Scopes: []string{"openid", "profile", "email"}, + } +} + +type openClawIDClaims struct { + Email string `json:"email"` + EmailVerified bool `json:"email_verified"` + Name string `json:"name"` + jwt.RegisteredClaims +} + +// validateOpenClawIDToken checks the id_token claims. The token arrives +// directly from the issuer over TLS on an authenticated confidential-client +// token exchange, so a local JWKS signature check is not required; issuer, +// audience, expiry, and verified email are still enforced. +func (s *Server) validateOpenClawIDToken(idToken string) (openClawIDClaims, error) { + claims := openClawIDClaims{} + if _, _, err := jwt.NewParser().ParseUnverified(strings.TrimSpace(idToken), &claims); err != nil { + return openClawIDClaims{}, errors.New("invalid openclaw id token") + } + if strings.TrimRight(claims.Issuer, "/") != s.openclawID.Issuer { + return openClawIDClaims{}, errors.New("invalid openclaw id token issuer") + } + if !slices.Contains(claims.Audience, s.openclawID.ClientID) { + return openClawIDClaims{}, errors.New("invalid openclaw id token audience") + } + if claims.ExpiresAt == nil || time.Now().After(claims.ExpiresAt.Time.Add(openClawIDTokenClockLeeway)) { + return openClawIDClaims{}, errors.New("openclaw id token expired") + } + claims.Email = strings.ToLower(strings.TrimSpace(claims.Email)) + if claims.Email == "" || !claims.EmailVerified { + return openClawIDClaims{}, errors.New("openclaw id account email is not verified") + } + return claims, nil +} + +func (s *Server) openclawIDRedirectURL(r *http.Request) (string, error) { + base := strings.TrimRight(firstNonEmpty(s.publicAPIURL, s.openclawID.PublicURL), "/") + if base == "" { + if s.disableDevAuth || !isLocalHostPort(r.Host) || !isLocalHostPort(r.RemoteAddr) { + return "", errors.New("openclaw id sign-in requires a configured public URL") + } + scheme := "http" + if r.TLS != nil { + scheme = "https" + } + base = scheme + "://" + r.Host + } + return base + "/api/auth/openclaw/callback", nil +} + +func (s *Server) writeOpenClawIDOAuthServerError(w http.ResponseWriter, r *http.Request, phase string, err error) { + log.Printf("openclaw id oauth %s failed correlation_id=%q error_type=%T", phase, correlationIDFromContext(r.Context()), err) + writeError(w, http.StatusInternalServerError, errors.New("openclaw id oauth request failed")) +} + +func (s *Server) writeOpenClawIDOAuthProviderError(w http.ResponseWriter, r *http.Request, phase string, err error) { + log.Printf("openclaw id oauth provider %s failed correlation_id=%q error_type=%T", phase, correlationIDFromContext(r.Context()), err) + writeError(w, http.StatusBadGateway, errors.New("openclaw id authentication provider request failed")) +} diff --git a/apps/api/internal/httpapi/openclawid_test.go b/apps/api/internal/httpapi/openclawid_test.go new file mode 100644 index 000000000..c7b868dbc --- /dev/null +++ b/apps/api/internal/httpapi/openclawid_test.go @@ -0,0 +1,327 @@ +package httpapi + +import ( + "context" + "encoding/json" + "errors" + "net/http" + "net/http/httptest" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/golang-jwt/jwt/v5" + "github.com/openclaw/clickclack/apps/api/internal/realtime" + sqlitestore "github.com/openclaw/clickclack/apps/api/internal/store/sqlite" +) + +type openclawTokenRequest struct { + RedirectURL string + Verifier string + Authorization string + GrantType string +} + +func newOpenClawIDToken(t *testing.T, issuer, audience, email, name string, verified bool, expiresAt time.Time) string { + t.Helper() + token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ + "iss": issuer, + "aud": audience, + "sub": "ocid-user-1", + "email": email, + "email_verified": verified, + "name": name, + "exp": expiresAt.Unix(), + "iat": time.Now().Unix(), + }) + signed, err := token.SignedString([]byte("test-signing-key")) + if err != nil { + t.Fatal(err) + } + return signed +} + +func TestOpenClawIDOAuthFlow(t *testing.T) { + t.Parallel() + ctx := context.Background() + dataDir := t.TempDir() + st, err := sqlitestore.Open("sqlite://" + filepath.Join(dataDir, "clickclack.db")) + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { _ = st.Close() }) + if err := st.Migrate(ctx); err != nil { + t.Fatal(err) + } + + tokenRequests := make(chan openclawTokenRequest, 16) + var provider *httptest.Server + provider = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/oauth2/token": + w.Header().Set("Content-Type", "application/json") + if err := r.ParseForm(); err != nil { + t.Error(err) + } + tokenRequests <- openclawTokenRequest{ + RedirectURL: r.FormValue("redirect_uri"), + Verifier: r.FormValue("code_verifier"), + Authorization: r.Header.Get("Authorization"), + GrantType: r.FormValue("grant_type"), + } + switch r.FormValue("code") { + case "ok": + idToken := newOpenClawIDToken(t, provider.URL, "client", "Crab@Example.com", "Crab User", true, time.Now().Add(5*time.Minute)) + _ = json.NewEncoder(w).Encode(map[string]string{"access_token": "oc-token", "id_token": idToken}) + case "unverified": + idToken := newOpenClawIDToken(t, provider.URL, "client", "crab@example.com", "Crab User", false, time.Now().Add(5*time.Minute)) + _ = json.NewEncoder(w).Encode(map[string]string{"access_token": "oc-token", "id_token": idToken}) + case "wrong-issuer": + idToken := newOpenClawIDToken(t, "https://evil.example.com", "client", "crab@example.com", "Crab User", true, time.Now().Add(5*time.Minute)) + _ = json.NewEncoder(w).Encode(map[string]string{"access_token": "oc-token", "id_token": idToken}) + case "expired": + idToken := newOpenClawIDToken(t, provider.URL, "client", "crab@example.com", "Crab User", true, time.Now().Add(-5*time.Minute)) + _ = json.NewEncoder(w).Encode(map[string]string{"access_token": "oc-token", "id_token": idToken}) + case "missing-id-token": + _ = json.NewEncoder(w).Encode(map[string]string{"access_token": "oc-token"}) + default: + w.WriteHeader(http.StatusBadRequest) + } + default: + w.WriteHeader(http.StatusNotFound) + } + })) + t.Cleanup(provider.Close) + + server := httptest.NewServer(New(st, realtime.NewHub(), Options{OpenClawID: OpenClawIDConfig{ + ClientID: "client", + ClientSecret: "secret", + Issuer: provider.URL, + }}).Handler()) + t.Cleanup(server.Close) + client := &http.Client{CheckRedirect: func(_ *http.Request, _ []*http.Request) error { return http.ErrUseLastResponse }} + + resp, err := client.Get(server.URL + "/api/auth/openclaw/start") + if err != nil { + t.Fatal(err) + } + if resp.StatusCode != http.StatusFound || !strings.HasPrefix(resp.Header.Get("Location"), provider.URL+"/oauth2/authorize?") { + t.Fatalf("unexpected start response: %s %s", resp.Status, resp.Header.Get("Location")) + } + state, bindingCookie, authorizationURL := oauthStartResponse(t, resp) + resp.Body.Close() + query := authorizationURL.Query() + if query.Get("code_challenge_method") != "S256" || query.Get("code_challenge") == "" { + t.Fatalf("expected PKCE challenge, got %s", authorizationURL.String()) + } + if query.Get("response_type") != "code" || query.Get("scope") != "openid profile email" || query.Get("client_id") != "client" { + t.Fatalf("unexpected authorization parameters: %s", authorizationURL.String()) + } + + req, err := http.NewRequest(http.MethodGet, server.URL+"/api/auth/openclaw/callback?code=ok&state="+state, nil) + if err != nil { + t.Fatal(err) + } + req.AddCookie(bindingCookie) + resp, err = client.Do(req) + if err != nil { + t.Fatal(err) + } + if resp.StatusCode != http.StatusFound || resp.Header.Get("Location") != "/" { + t.Fatalf("unexpected callback response: %s %s", resp.Status, resp.Header.Get("Location")) + } + var sessionCookie *http.Cookie + for _, cookie := range resp.Cookies() { + if cookie.Name == "cc_session" { + sessionCookie = cookie + } + } + resp.Body.Close() + if sessionCookie == nil || sessionCookie.Value == "" { + t.Fatal("expected session cookie") + } + tokenRequest := <-tokenRequests + if tokenRequest.RedirectURL != server.URL+"/api/auth/openclaw/callback" { + t.Fatalf("unexpected token redirect URI %q", tokenRequest.RedirectURL) + } + if tokenRequest.GrantType != "authorization_code" { + t.Fatalf("unexpected grant type %q", tokenRequest.GrantType) + } + if !strings.HasPrefix(tokenRequest.Authorization, "Basic ") { + t.Fatalf("expected client_secret_basic token authentication, got %q", tokenRequest.Authorization) + } + if desktopCodeChallenge(tokenRequest.Verifier) != query.Get("code_challenge") { + t.Fatal("token exchange verifier did not match the authorization PKCE challenge") + } + + req, err = http.NewRequest(http.MethodGet, server.URL+"/api/me", nil) + if err != nil { + t.Fatal(err) + } + req.AddCookie(sessionCookie) + resp, err = http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + if resp.StatusCode != http.StatusOK { + resp.Body.Close() + t.Fatalf("expected session auth, got %s", resp.Status) + } + var me struct { + User struct { + ID string `json:"id"` + DisplayName string `json:"display_name"` + } `json:"user"` + } + if err := json.NewDecoder(resp.Body).Decode(&me); err != nil { + t.Fatal(err) + } + resp.Body.Close() + if me.User.DisplayName != "Crab User" { + t.Fatalf("unexpected display name %q", me.User.DisplayName) + } + + // The email is normalized to lowercase, so a magic-link user with the + // same email links to the same account. + user, err := st.GetOrCreateUserByEmail(ctx, "magic", "crab@example.com", "Other Name") + if err != nil { + t.Fatal(err) + } + if user.ID != me.User.ID { + t.Fatalf("expected email-linked user %q, got %q", me.User.ID, user.ID) + } + + // Replay of the consumed state is rejected. + req, err = http.NewRequest(http.MethodGet, server.URL+"/api/auth/openclaw/callback?code=ok&state="+state, nil) + if err != nil { + t.Fatal(err) + } + req.AddCookie(bindingCookie) + resp, err = client.Do(req) + if err != nil { + t.Fatal(err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusBadRequest { + t.Fatalf("expected replayed state rejection, got %s", resp.Status) + } + + // Invalid identity tokens are rejected after the exchange. + for _, code := range []string{"unverified", "wrong-issuer", "expired"} { + resp, err = client.Get(server.URL + "/api/auth/openclaw/start") + if err != nil { + t.Fatal(err) + } + state, bindingCookie, _ = oauthStartResponse(t, resp) + resp.Body.Close() + req, err = http.NewRequest(http.MethodGet, server.URL+"/api/auth/openclaw/callback?code="+code+"&state="+state, nil) + if err != nil { + t.Fatal(err) + } + req.AddCookie(bindingCookie) + resp, err = client.Do(req) + if err != nil { + t.Fatal(err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusForbidden { + t.Fatalf("expected %q rejection with 403, got %s", code, resp.Status) + } + <-tokenRequests + } + + // A token response without an id_token is a provider failure. + resp, err = client.Get(server.URL + "/api/auth/openclaw/start") + if err != nil { + t.Fatal(err) + } + state, bindingCookie, _ = oauthStartResponse(t, resp) + resp.Body.Close() + req, err = http.NewRequest(http.MethodGet, server.URL+"/api/auth/openclaw/callback?code=missing-id-token&state="+state, nil) + if err != nil { + t.Fatal(err) + } + req.AddCookie(bindingCookie) + resp, err = client.Do(req) + if err != nil { + t.Fatal(err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusBadGateway { + t.Fatalf("expected missing id_token to fail with 502, got %s", resp.Status) + } + <-tokenRequests +} + +func TestOpenClawIDOAuthErrors(t *testing.T) { + t.Parallel() + st := newEmptyHTTPStore(t) + server := httptest.NewServer(New(st, realtime.NewHub(), Options{}).Handler()) + t.Cleanup(server.Close) + + resp, err := http.Get(server.URL + "/api/auth/openclaw/start") + if err != nil { + t.Fatal(err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusNotImplemented { + t.Fatalf("expected unconfigured start to return 501, got %s", resp.Status) + } + + resp, err = http.Get(server.URL + "/api/auth/openclaw/callback?code=ok&state=short") + if err != nil { + t.Fatal(err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusBadRequest { + t.Fatalf("expected malformed state to return 400, got %s", resp.Status) + } +} + +func TestOpenClawIDConfigDefaults(t *testing.T) { + t.Parallel() + config := OpenClawIDConfig{ClientID: " client ", ClientSecret: " secret "}.withDefaults() + if config.Issuer != "https://id.openclaw.ai/api/auth" { + t.Fatalf("unexpected default issuer %q", config.Issuer) + } + if config.AuthURL != "https://id.openclaw.ai/api/auth/oauth2/authorize" { + t.Fatalf("unexpected default auth URL %q", config.AuthURL) + } + if config.TokenURL != "https://id.openclaw.ai/api/auth/oauth2/token" { + t.Fatalf("unexpected default token URL %q", config.TokenURL) + } + if config.ClientID != "client" || config.ClientSecret != "secret" { + t.Fatal("expected trimmed client credentials") + } + if config.HTTPClient == nil || config.HTTPClient.Timeout != defaultOpenClawIDHTTPTimeout { + t.Fatal("expected default HTTP client timeout") + } +} + +func TestOpenClawIDOAuthDoesNotExposeInternalStoreErrors(t *testing.T) { + t.Parallel() + base := newEmptyHTTPStore(t) + handler := New(failingOAuthTransactionStore{ + Store: base, + err: errors.New(`postgres://admin:secret@database.internal:5432/clickclack`), + }, realtime.NewHub(), Options{OpenClawID: OpenClawIDConfig{ + ClientID: "client", + ClientSecret: "secret", + PublicURL: "https://app.clickclack.test", + }}).Handler() + request := httptest.NewRequest(http.MethodGet, "http://127.0.0.1:8080/api/auth/openclaw/start", nil) + request.RemoteAddr = "127.0.0.1:12345" + recorder := httptest.NewRecorder() + handler.ServeHTTP(recorder, request) + if recorder.Code != http.StatusInternalServerError { + t.Fatalf("expected internal error, got %d", recorder.Code) + } + body := recorder.Body.String() + if strings.Contains(body, "admin") || strings.Contains(body, "secret") || strings.Contains(body, "database.internal") { + t.Fatalf("internal OAuth error leaked to client: %s", body) + } + if !strings.Contains(body, "openclaw id oauth request failed") { + t.Fatalf("unexpected public OAuth error: %s", body) + } +} diff --git a/apps/api/internal/httpapi/server.go b/apps/api/internal/httpapi/server.go index 9289d34b2..afcb4f2ce 100644 --- a/apps/api/internal/httpapi/server.go +++ b/apps/api/internal/httpapi/server.go @@ -33,6 +33,7 @@ type Server struct { uploadDir string uploadStorage uploadstore.Store githubOAuth GitHubOAuthConfig + openclawID OpenClawIDConfig access *accessVerifier frontendURL string publicAPIURL string @@ -81,6 +82,7 @@ type Options struct { UploadDir string UploadStorage uploadstore.Store GitHubOAuth GitHubOAuthConfig + OpenClawID OpenClawIDConfig Access AccessConfig FrontendURL string PublicAPIURL string @@ -118,6 +120,7 @@ func New(st store.Store, hub *realtime.Hub, options Options) *Server { uploadDir: options.UploadDir, uploadStorage: uploadStorage, githubOAuth: options.GitHubOAuth.withDefaults(), + openclawID: options.OpenClawID.withDefaults(), access: newAccessVerifier(options.Access), frontendURL: strings.TrimSpace(options.FrontendURL), publicAPIURL: strings.TrimRight(strings.TrimSpace(options.PublicAPIURL), "/"), @@ -161,6 +164,8 @@ func (s *Server) Handler() http.Handler { r.Get("/auth/github/desktop/start", s.githubDesktopStart) r.Post("/auth/github/desktop/consume", s.githubDesktopConsume) r.Get("/auth/github/callback", s.githubCallback) + r.Get("/auth/openclaw/start", s.openclawIDStart) + r.Get("/auth/openclaw/callback", s.openclawIDCallback) r.Get("/me", s.me) r.Patch("/me", s.updateMe) r.Get("/me/bots", s.listMyBots) diff --git a/apps/api/internal/webassets/dist/200.html b/apps/api/internal/webassets/dist/200.html index c8cc9a448..752850463 100644 --- a/apps/api/internal/webassets/dist/200.html +++ b/apps/api/internal/webassets/dist/200.html @@ -103,15 +103,15 @@ - + - + - +
@@ -125,7 +125,7 @@ Promise.all([ import("/_app/immutable/entry/start.CRNCrUAM.js"), - import("/_app/immutable/entry/app.YP60KM03.js") + import("/_app/immutable/entry/app.Bm7pRLHf.js") ]).then(([kit, app]) => { kit.start(app, element); }); diff --git a/apps/api/internal/webassets/dist/_app/immutable/assets/0.BPKxG8WH.css b/apps/api/internal/webassets/dist/_app/immutable/assets/0.BPKxG8WH.css deleted file mode 100644 index 0970d7f41..000000000 --- a/apps/api/internal/webassets/dist/_app/immutable/assets/0.BPKxG8WH.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-cyrillic-ext-wght-normal.DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-cyrillic-wght-normal.BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-vietnamese-wght-normal.6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-latin-ext-wght-normal.DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-latin-wght-normal.BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-symbols2-wght-normal.CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-vietnamese-wght-normal.DadHysG0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-latin-wght-normal.XN7g48iV.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-wght-normal.DLoelf7F.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-feature-settings:"ss01", "cv11";--font-display:"Bricolage Grotesque Variable", "Geist Variable", ui-sans-serif, system-ui, sans-serif;--font-mono:"Geist Mono Variable", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--rail:var(--lightningcss-light,#e2e5ea)var(--lightningcss-dark,#0b0e14);--bg:var(--lightningcss-light,#edeff2)var(--lightningcss-dark,#0e1219);--panel:var(--lightningcss-light,#f8f9fb)var(--lightningcss-dark,#141926);--panel-2:var(--lightningcss-light,#e8ebef)var(--lightningcss-dark,#1b2232);--panel-3:var(--lightningcss-light,#dde1e7)var(--lightningcss-dark,#232c3f);--surface:var(--panel-2);--hover:var(--lightningcss-light,#10151d0d)var(--lightningcss-dark,#d6e4ff0b);--hover-strong:var(--lightningcss-light,#10151d14)var(--lightningcss-dark,#d6e4ff14);--line:var(--lightningcss-light,#10151d1a)var(--lightningcss-dark,#bed2ff17);--line-strong:var(--lightningcss-light,#10151d2b)var(--lightningcss-dark,#bed2ff29);--text:var(--lightningcss-light,#232a35)var(--lightningcss-dark,#dbe2ec);--text-strong:var(--lightningcss-light,#10151d)var(--lightningcss-dark,#f4f7fb);--muted:var(--lightningcss-light,#5d6878)var(--lightningcss-dark,#8a95a8);--muted-2:var(--lightningcss-light,#8b94a3)var(--lightningcss-dark,#5c6577);--accent:var(--lightningcss-light,#0080c4)var(--lightningcss-dark,#41c6ff);--accent-hover:var(--lightningcss-light,#006aa6)var(--lightningcss-dark,#6ad3ff);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420);--accent-2:var(--lightningcss-light,#f56a1d)var(--lightningcss-dark,#ff9550);--accent-soft:var(--lightningcss-light,#0080c421)var(--lightningcss-dark,#41c6ff26);--brand-a:var(--lightningcss-light,#0072b0)var(--lightningcss-dark,#41c6ff);--brand-b:var(--lightningcss-light,#2653e8)var(--lightningcss-dark,#6d8bff);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420);--activity-accent:var(--lightningcss-light,#c07e0a)var(--lightningcss-dark,#e8b23e);--activity-accent-soft:var(--lightningcss-light,#c07e0a17)var(--lightningcss-dark,#e8b23e1a);--delivery-accent:var(--lightningcss-light,#5558d9)var(--lightningcss-dark,#8b8df2);--delivery-accent-soft:var(--lightningcss-light,#5558d90f)var(--lightningcss-dark,#8b8df214);--tool-call-bg:var(--lightningcss-light,#5558d917)var(--lightningcss-dark,#8b8df21f);--tool-call-bg-hover:var(--lightningcss-light,#5558d924)var(--lightningcss-dark,#8b8df22e);--accent-glow:0 0 0 1px color-mix(in srgb, var(--accent) 32%, transparent), 0 8px 30px -12px color-mix(in srgb, var(--accent) 48%, transparent);--success:var(--lightningcss-light,#14876a)var(--lightningcss-dark,#30c48d);--warn:#e8a33e;--danger:var(--lightningcss-light,#d13438)var(--lightningcss-dark,#ff6d68);--scrollbar:var(--lightningcss-light,#10151d2e)var(--lightningcss-dark,#bed2ff1f);--scrollbar-hover:var(--lightningcss-light,#10151d4d)var(--lightningcss-dark,#bed2ff38);--shadow:0 24px 60px -22px var(--lightningcss-light,#10151d4d)var(--lightningcss-dark,#02050ab3);--tooltip-bg:var(--lightningcss-light,#10151d)var(--lightningcss-dark,#2b3448);--tooltip-fg:var(--lightningcss-light,#f0f4fa)var(--lightningcss-dark,#f4f7fb);--key-edge:0 1px 0 var(--line-strong), 0 2px 0 var(--lightningcss-light,#10151d1a)var(--lightningcss-dark,#00000073);--key-edge-pressed:0 1px 0 var(--line-strong);--radius-sm:4px;--radius:6px;--radius-lg:10px;--radius-xl:14px;--safe-area-top:env(safe-area-inset-top,0px);--safe-area-right:env(safe-area-inset-right,0px);--safe-area-bottom:env(safe-area-inset-bottom,0px);--safe-area-left:env(safe-area-inset-left,0px);background:var(--bg);color:var(--text);font-family:Geist Variable,Inter,SF Pro Text,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-color-mode=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-board=ember]{--rail:var(--lightningcss-light,#e9e1d7)var(--lightningcss-dark,#16110d);--bg:var(--lightningcss-light,#f7f3ed)var(--lightningcss-dark,#1a1511);--panel:var(--lightningcss-light,#fffaf2)var(--lightningcss-dark,#211a15);--panel-2:var(--lightningcss-light,#efe7dc)var(--lightningcss-dark,#29211a);--panel-3:var(--lightningcss-light,#e4dbcf)var(--lightningcss-dark,#322820);--hover:var(--lightningcss-light,#1020270d)var(--lightningcss-dark,#fff4eb0b);--hover-strong:var(--lightningcss-light,#10202714)var(--lightningcss-dark,#fff4eb14);--line:var(--lightningcss-light,#1020271a)var(--lightningcss-dark,#ffece014);--line-strong:var(--lightningcss-light,#10202729)var(--lightningcss-dark,#ffece024);--text:var(--lightningcss-light,#22201d)var(--lightningcss-dark,#ece4da);--text-strong:var(--lightningcss-light,#11100e)var(--lightningcss-dark,#fbf6f0);--muted:var(--lightningcss-light,#6f675f)var(--lightningcss-dark,#a4917f);--muted-2:var(--lightningcss-light,#958b80)var(--lightningcss-dark,#6f6152);--accent:var(--lightningcss-light,#c94a32)var(--lightningcss-dark,#f0714c);--accent-hover:var(--lightningcss-light,#b13c26)var(--lightningcss-dark,#ff8560);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#241009);--accent-2:var(--lightningcss-light,#006d77)var(--lightningcss-dark,#45b8ac);--accent-soft:var(--lightningcss-light,#c94a3224)var(--lightningcss-dark,#f0714c2b);--brand-a:var(--lightningcss-light,#c64b32)var(--lightningcss-dark,#f0714c);--brand-b:var(--lightningcss-light,#c8425a)var(--lightningcss-dark,#d84a63);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#11100e);--scrollbar:var(--lightningcss-light,#1020272e)var(--lightningcss-dark,#ffece01a);--scrollbar-hover:var(--lightningcss-light,#1020274d)var(--lightningcss-dark,#ffece033);--shadow:0 24px 60px -22px var(--lightningcss-light,#10202752)var(--lightningcss-dark,#080402a6)}[data-board=moss]{--rail:var(--lightningcss-light,#dfe5e0)var(--lightningcss-dark,#0a100d);--bg:var(--lightningcss-light,#ecf0ed)var(--lightningcss-dark,#0e1512);--panel:var(--lightningcss-light,#f7f9f7)var(--lightningcss-dark,#131b16);--panel-2:var(--lightningcss-light,#e6ebe7)var(--lightningcss-dark,#1a241d);--panel-3:var(--lightningcss-light,#dbe2dc)var(--lightningcss-dark,#223026);--hover:var(--lightningcss-light,#0f17120d)var(--lightningcss-dark,#d6ffe40b);--hover-strong:var(--lightningcss-light,#0f171214)var(--lightningcss-dark,#d6ffe414);--line:var(--lightningcss-light,#0f17121a)var(--lightningcss-dark,#c8ffdc17);--line-strong:var(--lightningcss-light,#0f17122b)var(--lightningcss-dark,#c8ffdc29);--text:var(--lightningcss-light,#212b24)var(--lightningcss-dark,#dbe7de);--text-strong:var(--lightningcss-light,#0f1712)var(--lightningcss-dark,#f3faf4);--muted:var(--lightningcss-light,#5c6b60)var(--lightningcss-dark,#8fa295);--muted-2:var(--lightningcss-light,#8a9a8e)var(--lightningcss-dark,#5d6e62);--accent:var(--lightningcss-light,#177a50)var(--lightningcss-dark,#3ddc97);--accent-hover:var(--lightningcss-light,#0f6a44)var(--lightningcss-dark,#63e6ab);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#05140c);--accent-2:var(--lightningcss-light,#d97f26)var(--lightningcss-dark,#ffab5e);--accent-soft:var(--lightningcss-light,#177a5021)var(--lightningcss-dark,#3ddc9726);--brand-a:var(--lightningcss-light,#177a50)var(--lightningcss-dark,#3ddc97);--brand-b:var(--lightningcss-light,#0e7490)var(--lightningcss-dark,#2bb3a3);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#05140c);--scrollbar:var(--lightningcss-light,#0f17122e)var(--lightningcss-dark,#c8ffdc1f);--scrollbar-hover:var(--lightningcss-light,#0f17124d)var(--lightningcss-dark,#c8ffdc38)}[data-board=iris]{--rail:var(--lightningcss-light,#e2e2ea)var(--lightningcss-dark,#0d0c15);--bg:var(--lightningcss-light,#eeeef4)var(--lightningcss-dark,#12111c);--panel:var(--lightningcss-light,#f8f8fb)var(--lightningcss-dark,#181726);--panel-2:var(--lightningcss-light,#e9e9f0)var(--lightningcss-dark,#201e33);--panel-3:var(--lightningcss-light,#dedee8)var(--lightningcss-dark,#2a2742);--hover:var(--lightningcss-light,#1213270d)var(--lightningcss-dark,#e0dcff0b);--hover-strong:var(--lightningcss-light,#12132714)var(--lightningcss-dark,#e0dcff14);--line:var(--lightningcss-light,#1213271a)var(--lightningcss-dark,#d2cdff17);--line-strong:var(--lightningcss-light,#1213272b)var(--lightningcss-dark,#d2cdff29);--text:var(--lightningcss-light,#26283a)var(--lightningcss-dark,#e0dff0);--text-strong:var(--lightningcss-light,#121327)var(--lightningcss-dark,#f6f5fd);--muted:var(--lightningcss-light,#61637a)var(--lightningcss-dark,#918fa9);--muted-2:var(--lightningcss-light,#9092a8)var(--lightningcss-dark,#605e78);--accent:var(--lightningcss-light,#7048d9)var(--lightningcss-dark,#a78bfa);--accent-hover:var(--lightningcss-light,#5f39c2)var(--lightningcss-dark,#bda4ff);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#150f26);--accent-2:var(--lightningcss-light,#d94f8a)var(--lightningcss-dark,#ff8bb3);--accent-soft:var(--lightningcss-light,#7048d921)var(--lightningcss-dark,#a78bfa29);--brand-a:var(--lightningcss-light,#7048d9)var(--lightningcss-dark,#a78bfa);--brand-b:var(--lightningcss-light,#2653e8)var(--lightningcss-dark,#6d8bff);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#150f26);--scrollbar:var(--lightningcss-light,#1213272e)var(--lightningcss-dark,#d2cdff1f);--scrollbar-hover:var(--lightningcss-light,#1213274d)var(--lightningcss-dark,#d2cdff38)}[data-board=signal]{--rail:var(--lightningcss-light,#e2e5ea)var(--lightningcss-dark,#0b0e14);--bg:var(--lightningcss-light,#edeff2)var(--lightningcss-dark,#0e1219);--panel:var(--lightningcss-light,#f8f9fb)var(--lightningcss-dark,#141926);--panel-2:var(--lightningcss-light,#e8ebef)var(--lightningcss-dark,#1b2232);--panel-3:var(--lightningcss-light,#dde1e7)var(--lightningcss-dark,#232c3f);--hover:var(--lightningcss-light,#10151d0d)var(--lightningcss-dark,#d6e4ff0b);--hover-strong:var(--lightningcss-light,#10151d14)var(--lightningcss-dark,#d6e4ff14);--line:var(--lightningcss-light,#10151d1a)var(--lightningcss-dark,#bed2ff17);--line-strong:var(--lightningcss-light,#10151d2b)var(--lightningcss-dark,#bed2ff29);--text:var(--lightningcss-light,#232a35)var(--lightningcss-dark,#dbe2ec);--text-strong:var(--lightningcss-light,#10151d)var(--lightningcss-dark,#f4f7fb);--muted:var(--lightningcss-light,#5d6878)var(--lightningcss-dark,#8a95a8);--muted-2:var(--lightningcss-light,#8b94a3)var(--lightningcss-dark,#5c6577);--accent:var(--lightningcss-light,#0080c4)var(--lightningcss-dark,#41c6ff);--accent-hover:var(--lightningcss-light,#006aa6)var(--lightningcss-dark,#6ad3ff);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420);--accent-2:var(--lightningcss-light,#f56a1d)var(--lightningcss-dark,#ff9550);--accent-soft:var(--lightningcss-light,#0080c421)var(--lightningcss-dark,#41c6ff26);--brand-a:var(--lightningcss-light,#0072b0)var(--lightningcss-dark,#41c6ff);--brand-b:var(--lightningcss-light,#2653e8)var(--lightningcss-dark,#6d8bff);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420)}*{box-sizing:border-box}html,body{height:100%;margin:0;padding:0}body{background:radial-gradient(1000px 600px at 0% 0%, color-mix(in srgb, var(--accent) 6%, transparent), transparent 60%), radial-gradient(900px 700px at 100% 100%, color-mix(in srgb, var(--delivery-accent) 5%, transparent), transparent 60%), var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,textarea{font:inherit;color:inherit}code,pre,kbd,samp{font-variant-ligatures:none}button{cursor:pointer}input,textarea{background:0 0;border:0;outline:0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--scrollbar);background-clip:content-box;border:2px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-hover);background-clip:content-box}.auth-shell{min-height:100dvh;padding:calc(32px + var(--safe-area-top)) calc(32px + var(--safe-area-right)) calc(32px + var(--safe-area-bottom)) calc(32px + var(--safe-area-left));background:radial-gradient(color-mix(in srgb, var(--text) 6%, transparent) 1px, transparent 1.5px) 0 0 / 18px 18px, radial-gradient(700px 500px at 30% 20%, color-mix(in srgb, var(--brand-a) 14%, transparent), transparent 60%), radial-gradient(700px 500px at 80% 90%, color-mix(in srgb, var(--brand-b) 10%, transparent), transparent 60%), var(--bg);place-items:center;display:grid}.auth-panel{border:1px solid var(--line-strong);border-radius:var(--radius-xl);background:linear-gradient(180deg, #ffffff0a, #fff0) var(--panel);width:min(100%,440px);box-shadow:var(--key-edge), var(--shadow);gap:22px;padding:36px;display:grid}.auth-brand{align-items:center;gap:12px;display:flex}.auth-brand .mark{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));width:44px;height:44px;color:var(--brand-contrast);letter-spacing:-.02em;box-shadow:0 10px 24px -8px color-mix(in srgb, var(--brand-b) 65%, transparent);border-radius:12px;place-items:center;font-weight:800;display:grid}.auth-brand .brand-text strong{color:var(--text-strong);letter-spacing:-.01em;display:block}.auth-brand .brand-text span{color:var(--muted);font-size:12px;display:block}.auth-copy{gap:8px;margin-top:8px;display:grid}.auth-copy h1{letter-spacing:-.02em;color:var(--text-strong);font-size:28px;font-family:var(--font-display);margin:0;font-weight:700}.auth-copy p{color:var(--muted);margin:0;line-height:1.5}.github-login{color:#fff;background:#0d1117;border:1px solid #2b2f36;border-radius:12px;justify-content:center;align-items:center;gap:10px;min-height:46px;font-weight:600;text-decoration:none;transition:transform 80ms,background .12s,border-color .12s;display:inline-flex}.github-login:hover{background:#161b22;border-color:#3f4750;transform:translateY(-1px)}.auth-foot{color:var(--muted-2);text-align:center;margin:0;font-size:12px}.shell{grid-template-rows:minmax(0,1fr);grid-template-columns:72px 260px minmax(0,1fr) 0;height:100dvh;min-height:100dvh;transition:grid-template-columns .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden}.shell.thread-open,.shell.search-open{grid-template-columns:72px 260px minmax(0,1fr) minmax(340px,28vw)}.shell.artifact-open{grid-template-columns:72px 260px minmax(0,1fr) minmax(460px,42vw)}.shell.sidebar-collapsed{grid-template-columns:72px 0 minmax(0,1fr) 0}.shell.sidebar-collapsed.thread-open,.shell.sidebar-collapsed.search-open{grid-template-columns:72px 0 minmax(0,1fr) minmax(340px,28vw)}.shell.sidebar-collapsed.artifact-open{grid-template-columns:72px 0 minmax(0,1fr) minmax(460px,42vw)}.shell>.thread,.shell>.search-results,.shell>.artifact-viewer{grid-area:1/4}.shell.desktop-shell{background:radial-gradient(color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1.5px) 0 0 / 14px 14px, var(--rail);grid-template-rows:52px minmax(0,1fr)}.desktop-shell>.guild-rail,.desktop-shell>.sidebar{background:0 0;border-right:0}.desktop-shell>.sidebar{grid-template-rows:minmax(0,1fr) auto}@media (width<=820px){.desktop-shell>.guild-rail{background:radial-gradient(color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1.5px) 0 0 / 14px 14px, var(--rail);border-right:1px solid var(--line)}.desktop-shell>.sidebar{background:var(--panel);border-right:1px solid var(--line)}}.desktop-shell>.timeline{border-top:1px solid var(--line);border-left:1px solid var(--line);border-top-left-radius:12px}.desktop-shell:not(.thread-open):not(.search-open):not(.artifact-open)>.timeline{border-top-right-radius:12px}.desktop-shell>.thread,.desktop-shell>.search-results,.desktop-shell>.artifact-viewer{border-top:1px solid var(--line);border-top-right-radius:12px}.desktop-shell>.desktop-titlebar{grid-area:1/1/auto/-1}.desktop-shell>.guild-rail,.desktop-shell>.sidebar,.desktop-shell>.timeline,.desktop-shell>.thread,.desktop-shell>.search-results,.desktop-shell>.artifact-viewer{grid-row:2}.desktop-shell .mobile-nav-toggle{display:none}.desktop-auth-titlebar{z-index:10;-webkit-app-region:drag;height:52px;position:fixed;inset:0 0 auto}.desktop-titlebar{z-index:8;-webkit-app-region:drag;-webkit-user-select:none;user-select:none;background:0 0;align-items:center;min-width:0;height:52px;padding:0;display:flex;position:relative}.desktop-titlebar-safe-area{-webkit-app-region:drag;align-items:center;width:100%;min-width:0;height:100%;padding:0 14px;display:flex;position:relative}.desktop-titlebar[data-platform=darwin] .desktop-titlebar-safe-area{padding-left:78px}.desktop-titlebar[data-platform=win32] .desktop-titlebar-safe-area,.desktop-titlebar[data-platform=linux] .desktop-titlebar-safe-area{left:env(titlebar-area-x,0px);width:env(titlebar-area-width,calc(100% - 148px));position:absolute}.desktop-titlebar-leading{-webkit-app-region:no-drag;align-items:center;gap:9px;min-width:0;max-width:max(150px,50% - 300px);display:flex;overflow:hidden}.desktop-titlebar button,.desktop-external-link{color:var(--muted);background:0 0;border:1px solid #0000;place-items:center;display:grid}.desktop-titlebar button:hover,.desktop-external-link:hover{border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.desktop-external-link{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--muted);flex:0 0 28px;place-items:center;text-decoration:none;display:grid}.desktop-titlebar-leading>.desktop-sidebar-toggle{border-radius:8px;width:30px;height:30px}.desktop-titlebar-workspace{min-width:36px;max-width:190px;color:var(--text-strong);font-family:var(--font-display);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;border-radius:8px;flex:0 auto;padding:5px 9px;font-size:13px;font-weight:650;overflow:hidden}.desktop-titlebar-channel{min-width:30px;max-width:230px;color:var(--text-strong);font-family:var(--font-display);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;flex:0 auto;margin:0;font-size:13px;font-weight:650;overflow:hidden}.desktop-titlebar-channel.with-glyph:first-letter{color:var(--accent);margin-right:1px}.desktop-titlebar-divider{flex:none}.desktop-titlebar-status{color:var(--muted);white-space:nowrap;flex:none;align-items:center;gap:6px;margin-left:auto;font-size:11px;display:inline-flex}.desktop-titlebar-status:before{content:"";background:var(--muted-2);border-radius:50%;width:7px;height:7px;animation:1.6s ease-in-out infinite presence-pulse}.desktop-titlebar-actions{-webkit-app-region:no-drag;flex:none;align-items:center;margin-left:auto;display:flex}.desktop-titlebar-actions button{border-radius:8px;width:30px;height:30px}.desktop-titlebar-actions button:disabled{cursor:wait;opacity:.55}.desktop-titlebar-actions button.active{background:var(--accent-soft);color:var(--accent)}.desktop-titlebar-actions+.desktop-titlebar-status{margin-left:8px}@media (prefers-reduced-motion:reduce){.desktop-titlebar-status:before{animation:none}}.desktop-titlebar-search.search{border-color:var(--line-strong);background:color-mix(in srgb, var(--panel-2) 84%, transparent);-webkit-app-region:no-drag;width:clamp(220px,100vw - 700px,520px);height:32px;position:absolute;left:50%;transform:translate(-50%);box-shadow:inset 0 1px #ffffff09}.desktop-titlebar-search.search:focus-within{border-color:color-mix(in srgb, var(--accent) 66%, var(--line));background:var(--panel-2);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent)}.timeline{background:var(--bg);flex-direction:column;min-width:0;display:flex;overflow:hidden}.timeline>*{flex-shrink:0;min-width:0}.timeline>.messages{flex:1 1 0;min-height:0}.topbar{border-bottom:1px solid var(--line);background:linear-gradient(180deg, #ffffff05, transparent), var(--bg);align-items:center;gap:14px;min-height:60px;padding:12px 20px;display:flex}.topbar-title{flex:1;align-items:center;gap:10px;min-width:0;display:flex}.topbar-title h1{letter-spacing:-.01em;color:var(--text-strong);font-size:16px;font-weight:650;font-family:var(--font-display);white-space:nowrap;text-overflow:ellipsis;margin:0;overflow:hidden}.topbar-title h1.with-glyph:first-letter{color:var(--accent);margin-right:1px}.topbar-divider{background:var(--line-strong);width:1px;height:18px;margin:0 6px}.topbar-meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:12px;overflow:hidden}.search{border-radius:var(--radius);background:var(--panel);border:1px solid var(--line);width:min(280px,30vw);height:34px;color:var(--muted);align-items:center;gap:8px;padding:0 10px;transition:border-color .12s,background .12s;display:flex}.search:focus-within{border-color:var(--accent);background:var(--panel-2);color:var(--text)}.search input{min-width:0;height:100%;color:var(--text);flex:1}.search input::placeholder{color:var(--muted)}.search-clear{background:var(--panel-3);width:18px;height:18px;color:var(--muted);border:0;border-radius:50%;place-items:center;font-size:14px;line-height:1;display:grid}.search-clear:hover{background:var(--accent);color:var(--accent-contrast)}.search-submit{background:var(--accent-soft);height:22px;color:var(--accent);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;border:0;border-radius:5px;padding:0 8px;font-size:10px;font-weight:600}.search-submit:hover{background:var(--accent);color:var(--accent-contrast)}.topbar-actions{align-items:center;gap:6px;display:inline-flex}.topbar-actions button,.topbar-actions a{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel);width:32px;height:32px;color:var(--muted);box-shadow:var(--key-edge);place-items:center;text-decoration:none;transition:background .12s,color .12s,border-color .12s,box-shadow .12s,transform 80ms;display:grid}.topbar-actions button:hover,.topbar-actions a:hover,.topbar-actions button.active{background:var(--accent-soft);border-color:color-mix(in srgb, var(--accent) 55%, var(--line-strong));color:var(--accent)}.topbar-actions button:active,.topbar-actions a:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.notif-toggle{width:28px;height:28px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;margin-left:4px;display:inline-flex}.notif-toggle:hover{background:var(--accent-soft);color:var(--accent)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.search-results{border-left:1px solid var(--line);background:var(--panel);opacity:1;grid-template-rows:auto auto minmax(0,1fr);min-width:0;transition:opacity .18s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden;transform:translate(0)}.search-results.covered{opacity:0;pointer-events:none}.search-results-head{border-bottom:1px solid var(--line);background:linear-gradient(180deg, #ffffff05, transparent), var(--panel);justify-content:space-between;align-items:center;min-height:60px;padding:10px 16px;display:flex}.search-results-head>div{min-width:0}.search-results-head p{color:var(--muted);font-family:var(--font-mono);letter-spacing:0;text-transform:uppercase;margin:0 0 2px;font-size:10px;font-weight:600}.search-results-head strong{color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:14px;display:block;overflow:hidden}.search-results-head button{background:var(--panel-2);width:30px;height:30px;color:var(--muted);border:0;border-radius:50%;flex:none;place-items:center;font-size:19px;line-height:1;display:grid}.search-results-head button:hover{background:var(--hover);color:var(--text)}.search-results-summary{color:var(--muted);padding:12px 16px 8px;font-size:12px;font-weight:600}.search-results-scroll{min-height:0;padding:0 8px 16px;overflow-y:auto}.search-result-list{margin:0;padding:0;list-style:none}.search-result{color:var(--text);border-radius:var(--radius);text-align:left;background:0 0;border:0;align-items:flex-start;gap:10px;width:100%;padding:10px 8px;display:flex}.search-result:hover{background:var(--hover)}.search-result.is-active{background:color-mix(in srgb, var(--accent) 10%, transparent)}.search-result:focus-visible,.search-results-head button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.search-result .dm-avatar{width:30px;height:30px;font-size:13px}.search-result-body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.search-result-meta{align-items:baseline;gap:8px;min-width:0;display:flex}.search-result-meta strong{color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.search-result-handle{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.search-result-meta time{color:var(--muted);flex:none;margin-left:auto;font-size:11px}.search-result-snippet{color:var(--muted);-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.45;display:-webkit-box;overflow:hidden}.search-result-snippet mark{background:color-mix(in srgb, var(--accent) 22%, transparent);color:var(--text-strong);border-radius:2px;font-weight:650}.search-result-context{min-width:0;color:var(--muted-2);align-items:center;gap:10px;margin-top:1px;font-size:11px;display:flex}.search-result-context:empty{display:none}.search-result-where{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.search-result-thread{color:var(--accent);flex:none;align-items:center;gap:4px;font-weight:600;display:inline-flex}.search-load-more{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel-2);width:calc(100% - 16px);color:var(--text);margin:8px auto 0;padding:8px 12px;font-size:12px;font-weight:600;display:block}.search-load-more:hover:not(:disabled){background:var(--hover)}.search-load-more:disabled{color:var(--muted)}.search-load-more:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.search-end{color:var(--muted-2);text-align:center;padding:14px 8px 4px;font-size:11px}.search-foot-error{border:1px solid color-mix(in srgb, var(--danger) 40%, transparent);border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 8%, transparent);color:var(--text);justify-content:space-between;align-items:center;gap:10px;margin:8px 8px 0;padding:8px 12px;font-size:12px;display:flex}.search-foot-error p{min-width:0;margin:0}.search-foot-error button{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel-2);color:var(--text);flex:none;padding:4px 10px;font-size:12px;font-weight:600}.search-foot-error button:hover{background:var(--hover)}.search-state{color:var(--muted);text-align:center;justify-items:center;padding:56px 24px;display:grid}.search-state-icon{border:1px solid var(--line-strong);background:var(--panel-2);width:44px;height:44px;color:var(--muted-2);border-radius:50%;place-items:center;margin-bottom:14px;font-size:23px;display:grid}.search-state strong{color:var(--text-strong);font-size:14px}.search-state p{margin:5px 0 0;font-size:12px}.search-state-loading{grid-template-columns:repeat(3,7px);justify-content:center;gap:6px}.search-state-loading span{background:var(--accent);border-radius:50%;width:7px;height:7px;animation:1.2s ease-in-out infinite pulse}.search-state-loading span:nth-child(2){animation-delay:.12s}.search-state-loading span:nth-child(3){animation-delay:.24s}.guild-rail{background:radial-gradient(color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1.5px) 0 0 / 14px 14px, var(--rail);border-right:1px solid var(--line);flex-direction:column;align-items:center;gap:8px;padding:14px 0;display:flex;position:relative}.guild-rail .guild{background:var(--panel);width:48px;height:48px;color:var(--text);border:1px solid var(--line-strong);letter-spacing:-.02em;box-shadow:var(--key-edge);border-radius:12px;place-items:center;font-size:14px;font-weight:700;text-decoration:none;transition:border-color .12s,background .12s,transform .12s,box-shadow .12s;display:grid;position:relative}.guild-rail .guild:hover{border-color:color-mix(in srgb, var(--accent) 55%, var(--line-strong));color:var(--accent);box-shadow:var(--key-edge), 0 6px 16px -8px color-mix(in srgb, var(--accent) 45%, transparent);transform:translateY(-1px)}.guild-rail .guild:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.guild-rail .guild.home{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));border-color:color-mix(in srgb, var(--brand-b) 55%, var(--line-strong));color:var(--brand-contrast);font-weight:800;font-family:var(--font-display)}.guild-rail .guild.home:hover{color:var(--brand-contrast);transform:translateY(-1px)}.guild-rail .guild.home:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.guild-rail .guild__image{border-radius:inherit;object-fit:cover;width:100%;height:100%;display:block}.guild-rail .guild.add{color:var(--success);border:1px dashed color-mix(in srgb, var(--success) 45%, transparent);background:0 0}.guild-rail .guild.add:hover{background:color-mix(in srgb, var(--success) 14%, transparent);color:var(--success);border-style:solid;border-color:var(--success)}.guild-divider{background:var(--line-strong);width:36px;height:1px;margin:4px 0}.guild-list{flex-direction:column;flex:auto;align-items:center;gap:8px;min-height:0;display:flex;overflow-y:auto}.guild-wrap{position:relative}.guild-wrap:before{content:"";background:var(--accent);opacity:0;border-radius:0 4px 4px 0;width:4px;height:28px;transition:opacity .14s,transform .14s;position:absolute;top:50%;left:-14px;transform:translateY(-50%)scaleY(.2)}.guild-wrap:hover:before{opacity:.6;transform:translateY(-50%)scaleY(.5)}.guild-wrap.active:before{opacity:1;transform:translateY(-50%)scaleY(1)}.guild-wrap.active .guild{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, var(--text-strong));color:var(--accent-contrast)}.guild-create{background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);z-index:20;margin-left:8px;padding:8px;position:absolute;top:14px;left:100%}.guild-create input{border-radius:var(--radius-sm);background:var(--panel-2);width:200px;height:32px;color:var(--text);padding:0 10px}.sidebar{background:var(--panel);border-right:1px solid var(--line);grid-template-rows:auto minmax(0,1fr) auto;min-width:0;transition:opacity .16s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden}.sidebar-collapsed .sidebar{opacity:0;pointer-events:none;transform:translate(-14px)}.workspace-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:6px;min-height:60px;padding:14px 16px;display:flex}.workspace-header-icon{object-fit:cover;background:var(--panel-2);border-radius:8px;flex:none;width:28px;height:28px}.workspace-header-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.workspace-menu{min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;flex:1;align-items:center;gap:10px;margin-left:-8px;padding:5px 8px;transition:background .12s;display:flex}.workspace-menu:hover{background:var(--panel-2)}.workspace-menu-caret{color:var(--muted);flex:none;transition:color .12s}.workspace-menu:hover .workspace-menu-caret{color:var(--text-strong)}.sidebar-collapse{background:var(--panel-2);width:30px;height:30px;color:var(--muted);border:0;border-radius:8px;place-items:center;transition:color .12s,background .12s,transform .12s;display:grid}.sidebar-collapse:hover{background:var(--panel-3);color:var(--text-strong);transform:translate(-1px)}.workspace-name{flex-direction:column;gap:2px;min-width:0;display:flex}.workspace-name strong{min-width:0;color:var(--text-strong);letter-spacing:-.01em;font-size:15px;font-family:var(--font-display);align-items:center;gap:5px;font-weight:650;display:flex}.workspace-name-label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.workspace-name .presence{color:var(--muted);align-items:center;gap:6px;font-size:11px;display:inline-flex}.workspace-name .presence:before{content:"";background:var(--muted-2);border-radius:50%;width:7px;height:7px;animation:1.6s ease-in-out infinite presence-pulse}@keyframes presence-pulse{0%,to{opacity:.4}50%{opacity:1}}@media (prefers-reduced-motion:reduce){.workspace-name .presence:before{animation:none}}.sidebar-scroll{padding:12px 8px 16px;overflow-y:auto}.nav-section+.nav-section{margin-top:12px}.section-title{border-radius:var(--radius-sm);background:0 0;border:0;align-items:center;gap:4px;width:100%;padding:2px 4px;display:flex}.nav-section.collapsed+.nav-section{margin-top:4px}.section-toggle{border-radius:var(--radius-sm);min-width:0;min-height:28px;color:var(--muted);text-transform:uppercase;font-family:var(--font-mono);letter-spacing:.09em;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:6px;padding:4px;font-size:10px;font-weight:600;display:flex}.section-toggle:hover{color:var(--text);background:var(--hover)}.section-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.section-toggle .caret{opacity:.7;font-size:10px;transition:transform .14s}.section-toggle[aria-expanded=false] .caret{transform:rotate(-90deg)}.section-toggle .label{text-align:left;flex:1}.section-title .add-button{background:var(--hover-strong);width:18px;height:18px;color:var(--text);border:0;border-radius:4px;flex:none;place-items:center;padding:0;font-size:14px;font-weight:700;line-height:1;display:grid}.section-title .add-button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.section-title:hover .add-button{background:var(--accent);color:var(--accent-contrast)}.nav-list{flex-direction:column;gap:1px;margin-top:4px;display:flex}.nav-list[hidden]{display:none}.channel-subgroup{gap:1px;margin-top:6px;display:grid}.channel-subgroup-toggle{border-radius:var(--radius-sm);width:100%;min-height:26px;color:var(--muted);font-family:var(--font-mono);letter-spacing:.06em;text-align:left;text-transform:uppercase;background:0 0;border:0;align-items:center;gap:6px;padding:4px 9px 4px 28px;font-size:10px;font-weight:600;display:flex}.channel-subgroup-toggle:hover,.channel-subgroup-toggle:focus-visible{background:var(--hover);color:var(--text);outline:none}.channel-subgroup-toggle .caret{opacity:.7;font-size:10px;transition:transform .14s}.channel-subgroup-toggle[aria-expanded=false] .caret{transform:rotate(-90deg)}.channel-subgroup-count{color:var(--muted-2);font-variant-numeric:tabular-nums;margin-left:auto}.channel-subgroup-list{gap:1px;display:grid}.channel-subgroup-list[hidden]{display:none}.archived-channel-group{border-top:1px solid color-mix(in srgb, var(--line) 70%, transparent);margin-top:10px;padding-top:6px}@media (prefers-reduced-motion:reduce){.section-toggle .caret{transition:none}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.channel-row{border-radius:var(--radius-sm);align-items:center;display:flex;position:relative}.channel-row .nav-item{flex:1;min-width:0}.channel-row.subdued .nav-item:not(.active){color:var(--muted-2)}.managed-channel-marker{color:var(--muted-2);flex:none;place-items:center;display:inline-grid}.nav-item.active .managed-channel-marker,.nav-item:hover .managed-channel-marker{color:var(--accent)}.channel-row.reorderable .nav-item{padding-left:2px}.channel-drag-handle{border-radius:var(--radius-sm);color:var(--muted-2);cursor:grab;opacity:0;background:0 0;border:0;flex:0 0 24px;align-self:stretch;place-items:center;display:grid}.channel-row:hover .channel-drag-handle,.channel-drag-handle:focus-visible{opacity:1}.channel-drag-handle:hover{color:var(--text);background:var(--hover)}.channel-drag-handle:active{cursor:grabbing}.channel-drag-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.channel-drag-handle svg{fill:currentColor}.channel-move-menu{z-index:4;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel);min-width:112px;box-shadow:var(--shadow);padding:4px;display:grid;position:absolute;top:calc(100% + 2px);left:0}.channel-move-menu button{color:var(--text);text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}.channel-move-menu button:hover:not(:disabled),.channel-move-menu button:focus-visible{background:var(--hover-strong);outline:none}.channel-move-menu button:disabled{color:var(--muted-2);cursor:default}.channel-row.dragging{opacity:.45}.channel-row.drop-before:before,.channel-row.drop-after:after{content:"";z-index:1;background:var(--accent);pointer-events:none;border-radius:1px;height:2px;position:absolute;left:4px;right:4px}.channel-row.drop-before:before{top:-1px}.channel-row.drop-after:after{bottom:-1px}@media (hover:none){.channel-drag-handle{opacity:1}}@media (prefers-reduced-motion:reduce){.channel-subgroup-toggle .caret{transition:none}}.nav-item{border-radius:var(--radius-sm);width:100%;color:var(--muted);text-align:left;background:0 0;border:0;align-items:center;gap:8px;min-height:30px;padding:6px 10px;text-decoration:none;transition:background .1s,color .1s;display:flex}.nav-item:hover{background:var(--hover);color:var(--text)}.nav-item:focus{outline:none}.nav-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.nav-item.active{background:var(--accent-soft);color:var(--text-strong);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent)}.nav-item.has-unread{color:var(--text-strong);font-weight:600}.nav-item.has-unread .hash{color:var(--text-strong)}.unread-badge{background:var(--accent);min-width:18px;height:18px;color:var(--accent-contrast,white);text-align:center;letter-spacing:.01em;border-radius:9px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:700;line-height:18px}.nav-item .hash{color:var(--muted);text-align:center;width:14px;font-weight:600}.nav-item.active .hash{color:var(--accent)}.nav-label{white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:14px;overflow:hidden}.dm-row{grid-template-columns:minmax(0,1fr) 24px;align-items:center;gap:2px;display:grid;position:relative}.dm-row .nav-item{min-width:0}.dm-actions-trigger{border-radius:var(--radius-sm);width:22px;height:22px;color:var(--muted-2);opacity:0;background:0 0;border:0;place-items:center;font-size:18px;font-weight:700;line-height:1;display:grid}.dm-row:hover .dm-actions-trigger,.dm-row:focus-within .dm-actions-trigger,.dm-row.active .dm-actions-trigger{opacity:1}.dm-actions-trigger:hover,.dm-actions-trigger:focus-visible,.dm-actions-trigger[aria-expanded=true]{background:var(--hover);color:var(--text);outline:none}.dm-actions-menu{z-index:30;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel-2);min-width:164px;box-shadow:var(--shadow);padding:4px;position:absolute;top:28px;right:0}.dm-actions-item{width:100%;min-height:30px;color:var(--text);text-align:left;background:0 0;border:0;border-radius:6px;padding:0 10px;font-size:13px}.dm-actions-item:hover,.dm-actions-item:focus-visible{background:var(--hover);color:var(--text-strong);outline:none}.dm-undo{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);color:var(--muted);align-items:center;gap:8px;margin:6px 8px 2px;padding:6px 8px;font-size:12px;display:flex}.dm-undo span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.dm-undo button{background:var(--hover);color:var(--text);border:0;border-radius:6px;padding:4px 8px;font-size:12px;font-weight:700}.dm-undo button:hover,.dm-undo button:focus-visible{background:var(--accent);color:var(--accent-contrast);outline:none}.nav-empty{color:var(--muted-2);margin:4px 8px;font-size:12px}.dm-avatar{color:#fff;background:linear-gradient(135deg, hsl(var(--hue,220deg) 70% 55%), hsl(calc(var(--hue,220deg) + 40deg) 70% 45%));border-radius:50%;flex-shrink:0;place-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:grid;overflow:hidden}.dm-avatar img,.avatar img{object-fit:cover;width:100%;height:100%;display:block}.presence-dot{background:var(--muted-2);border-radius:50%;flex-shrink:0;width:8px;height:8px}.presence-dot.active{background:var(--success);box-shadow:0 0 0 2px var(--panel)}.inline-create{grid-template-columns:minmax(0,1fr) auto;gap:6px;margin:6px 4px 2px;display:grid}.inline-create input{border-radius:var(--radius-sm);background:var(--panel-2);width:100%;min-width:0;height:30px;color:var(--text);border:1px solid var(--line);padding:0 10px}.inline-create input:focus{border-color:var(--accent);background:var(--panel-3)}.inline-create button.ghost,button.ghost{border-radius:var(--radius-sm);background:var(--panel-3);width:30px;height:30px;color:var(--muted);border:0;place-items:center;padding:0;font-size:14px;font-weight:600;display:grid}.inline-create button.ghost:hover{background:var(--accent);color:var(--accent-contrast)}.user-card{background:var(--panel-2);border-top:1px solid var(--line);width:100%;color:inherit;text-align:left;cursor:pointer;border-bottom:0;border-left:0;border-right:0;align-items:center;gap:10px;padding:10px 12px;transition:background .12s;display:flex}.user-card:hover{background:var(--panel-3)}.user-card .dm-avatar{width:28px;height:28px;font-size:12px}.user-card .user-meta{flex:1;min-width:0}.user-card .user-meta strong{color:var(--text-strong);white-space:nowrap;text-overflow:ellipsis;font-size:13px;display:block;overflow:hidden}.user-card .user-meta span{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;display:block;overflow:hidden}@media (width<=820px){.workspace-header{min-height:calc(60px + var(--safe-area-top));padding-top:calc(14px + var(--safe-area-top));padding-right:calc(16px + var(--safe-area-right))}.sidebar-scroll{padding-bottom:calc(16px + var(--safe-area-bottom))}.user-card{padding-bottom:calc(10px + var(--safe-area-bottom))}}.messages{flex-direction:column;display:flex;position:relative}.messages-scroll{overflow-anchor:none;opacity:1;flex-direction:column;flex:1;min-height:0;padding:0 4px;transition:opacity .14s ease-out;display:flex;overflow-y:auto}.messages-scroll:focus{outline:none}.messages.is-revealing .messages-scroll{opacity:0;pointer-events:none;transition:opacity}.messages-spacer{flex-grow:1}.history-loader{pointer-events:none;gap:14px;margin:4px 0 6px;padding:6px 18px;animation:.22s ease-out both history-loader-fade;display:grid}.history-loader--newer{margin-top:6px;margin-bottom:4px}@keyframes history-loader-fade{0%{opacity:0}to{opacity:1}}.history-loader__row{grid-template-columns:56px minmax(0,1fr);min-height:44px;display:grid}.history-loader__avatar,.history-loader__meta,.history-loader__line,.history-loader__block{background:linear-gradient(90deg, color-mix(in srgb, var(--muted-2) 16%, transparent), color-mix(in srgb, var(--muted-2) 36%, transparent), color-mix(in srgb, var(--muted-2) 16%, transparent));animation:1.4s ease-in-out infinite history-loading;animation-delay:calc(var(--history-row,0) * 80ms);background-size:220% 100%;display:block}.history-loader__avatar{border-radius:10px;width:38px;height:38px}.history-loader__body{align-content:start;gap:8px;min-width:0;padding-top:4px;display:grid}.history-loader__meta{border-radius:999px;width:min(180px,38%);height:11px}.history-loader__line{border-radius:999px;height:10px}.history-loader__line--wide{width:min(540px,72%)}.history-loader__line--mid{width:min(360px,48%)}@keyframes history-loading{0%{background-position:120% 0}to{background-position:-120% 0}}@media (prefers-reduced-motion:reduce){.history-loader{animation:none}.history-loader__avatar,.history-loader__meta,.history-loader__line,.history-loader__block{background:color-mix(in srgb, var(--muted-2) 22%, transparent);animation:none}}.unread-bar{z-index:5;background:color-mix(in srgb, var(--panel) 82%, transparent);-webkit-backdrop-filter:blur(14px)saturate(140%);border:1px solid color-mix(in srgb, var(--accent) 38%, transparent);max-width:calc(100% - 32px);height:30px;color:var(--text);letter-spacing:.005em;box-shadow:inset 0 1px 0 #ffffff14, 0 10px 24px -14px #0000008c, 0 0 0 4px color-mix(in srgb, var(--accent) 10%, transparent);opacity:1;border-radius:999px;align-items:center;gap:6px;padding:0 5px 0 14px;font-size:12px;font-weight:600;transition:opacity .16s ease-out,transform .18s cubic-bezier(.2,.8,.2,1);display:inline-flex;position:absolute;top:10px;left:50%;transform:translate(-50%)}.unread-bar.is-clearing{opacity:0;pointer-events:none;transform:translate(-50%,-6px)}.unread-bar__jump,.unread-bar__mark{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;transition:background-color .12s ease-out,color .12s ease-out;display:inline-flex}.unread-bar__jump{text-align:left;min-width:0;color:color-mix(in srgb, var(--accent) 92%, var(--text));flex:0 auto;padding:0 6px 0 0}.unread-bar__jump:before{content:"";background:var(--accent);width:7px;height:7px;box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 55%, transparent);border-radius:50%;flex-shrink:0;animation:1.8s ease-out infinite unread-bar-pulse}@keyframes unread-bar-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 55%, transparent)}70%{box-shadow:0 0 0 7px color-mix(in srgb, var(--accent) 0%, transparent)}to{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 0%, transparent)}}@media (prefers-reduced-motion:reduce){.unread-bar__jump:before{animation:none}}.unread-bar__mark{background:color-mix(in srgb, var(--accent) 14%, transparent);height:22px;color:color-mix(in srgb, var(--accent) 90%, var(--text));letter-spacing:.01em;border-radius:999px;flex-shrink:0;padding:0 10px;font-size:11px;font-weight:600}.unread-bar__jump:hover{color:var(--accent)}.unread-bar__mark:hover{background:color-mix(in srgb, var(--accent) 24%, transparent);color:var(--accent)}.unread-bar__jump:focus-visible,.unread-bar__mark:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 70%, transparent);outline-offset:2px;border-radius:999px}.unread-bar__label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.typing-indicator{height:0;color:var(--text-muted);opacity:0;pointer-events:none;align-items:center;gap:8px;margin-top:0;padding:0 22px;font-size:12px;transition:height .12s ease-out,margin-top .12s ease-out,opacity .12s ease-out,transform .16s cubic-bezier(.2,.8,.2,1);display:flex;overflow:hidden;transform:translateY(2px)}.typing-indicator.visible{opacity:1;height:20px;margin-top:-4px;transform:translateY(0)}.composer-dock{padding-top:20px;position:relative}.topic-filter{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--accent) 8%, var(--panel));color:var(--muted);justify-content:space-between;align-items:center;gap:12px;padding:8px 18px;font-size:13px;display:flex}.topic-filter strong{color:var(--text)}.topic-filter button,.message-topic{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0}.topic-filter button:hover,.message-topic:hover{text-decoration:underline}.message-topic{background:color-mix(in srgb, var(--accent) 12%, transparent);border-radius:999px;margin:0 0 4px;padding:2px 7px;font-size:11px;font-weight:700;display:inline-flex}.topic-picker{border:1px solid var(--line);background:var(--panel);color:var(--muted);border-bottom:0;border-radius:10px 10px 0 0;align-items:center;gap:8px;margin:0 14px -1px;padding:7px 10px;font-size:12px;display:flex}.topic-picker select{min-width:0;max-width:min(280px,65vw);color:var(--text);font:inherit;background:0 0;border:0}.composer-dock .agent-responding{opacity:0;pointer-events:none;align-items:center;height:20px;margin:0;padding:0 22px;transition:opacity .12s ease-out;display:flex;position:absolute;top:0;left:0;right:0;overflow:hidden;transform:none}.composer-dock .agent-responding.visible{opacity:1;height:20px;margin:0;transform:none}.typing-indicator__dots{align-items:center;gap:3px;display:inline-flex}.typing-indicator__dots i{opacity:.55;background:currentColor;border-radius:50%;width:4px;height:4px;animation:1.1s ease-in-out infinite typing-dot}.typing-indicator__dots i:nth-child(2){animation-delay:.15s}.typing-indicator__dots i:nth-child(3){animation-delay:.3s}@keyframes typing-dot{0%,60%,to{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.message-row.is-pending{opacity:.55}.message-row.is-pending .message-content,.message-row.is-pending .markdown{pointer-events:none}.message-row.is-failed{opacity:1}.message-row.is-deleted{color:var(--muted)}.message-failed{background:color-mix(in srgb, var(--danger,#d04848) 14%, transparent);color:var(--danger,#d04848);border-radius:999px;align-items:center;gap:10px;margin-top:6px;padding:4px 10px;font-size:12px;display:inline-flex}.message-failed__label{font-weight:500}.message-failed__action{color:inherit;font:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:999px;padding:2px 8px;line-height:1}.message-failed__action:hover{background:color-mix(in srgb, currentColor 12%, transparent)}.message-failed__action--ghost{border-color:color-mix(in srgb, currentColor 50%, transparent)}@media (prefers-reduced-motion:reduce){.typing-indicator{transition:opacity 80ms ease-out;transform:none}.typing-indicator.visible{transform:none}.typing-indicator__dots i{opacity:.7;animation:none}}.empty{text-align:center;align-content:center;place-items:center;gap:10px;min-height:50vh;padding:48px 24px;display:grid}.empty-icon{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));border:1px solid color-mix(in srgb, var(--brand-b) 55%, var(--line-strong));width:64px;height:64px;color:var(--brand-contrast);box-shadow:var(--key-edge), 0 18px 40px -16px color-mix(in srgb, var(--brand-b) 60%, transparent);border-radius:16px;place-items:center;font-size:26px;font-weight:800;display:grid}.empty strong{color:var(--text-strong);letter-spacing:-.01em;font-size:19px;font-family:var(--font-display);overflow-wrap:anywhere;font-weight:700}.empty span{color:var(--muted);max-width:380px;line-height:1.5}.day-divider{pointer-events:none;align-items:center;gap:12px;margin:18px 18px 8px;display:flex}.day-divider:before,.day-divider:after{content:"";background:var(--line);flex:1;height:1px}.day-divider span{background:var(--bg);border:1px solid var(--line);font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.07em;border-radius:999px;padding:4px 12px;font-size:10px;font-weight:600}.new-messages-divider{pointer-events:none;opacity:1;align-items:center;gap:0;margin:4px 0 2px;padding:0 18px;transition:opacity .16s ease-out,transform .18s cubic-bezier(.2,.8,.2,1);display:flex;position:relative;transform:translateY(0)}.new-messages-divider.is-clearing{opacity:0;transform:translateY(-4px)}.new-messages-divider:before{content:"";background:var(--danger,#ed4245);opacity:.9;flex:1;height:1px}.new-messages-divider span{background:var(--danger,#ed4245);color:#fff;letter-spacing:.04em;text-transform:uppercase;border-radius:3px;align-items:center;height:14px;margin-left:8px;padding:0 5px;font-size:9px;font-weight:700;display:inline-flex}.message-group{grid-template-columns:56px minmax(0,1fr);padding:8px 18px;display:grid;position:relative}.avatar{color:#fff;background:linear-gradient(135deg, hsl(var(--hue,220deg) 70% 55%), hsl(calc(var(--hue,220deg) + 40deg) 70% 45%));border-radius:10px;place-items:center;width:38px;height:38px;margin-top:2px;font-size:14px;font-weight:700;display:grid;overflow:hidden;box-shadow:0 6px 20px -10px #0009}.avatar-button{z-index:2;cursor:pointer;border:0;padding:0;transition:transform .1s,box-shadow .12s,filter .12s;position:relative}.avatar-button:hover{filter:brightness(1.05);transform:translateY(-1px);box-shadow:0 10px 24px -12px #000c}.avatar.small{border-radius:10px;width:30px;height:30px;font-size:12px}.avatar.large{border-radius:16px;width:56px;height:56px;margin:0;font-size:18px}.group-body{min-width:0}.group-body>header{align-items:baseline;gap:8px;margin-bottom:2px;display:flex}.message-group .group-body>header{margin:0 -18px 0 -56px;padding:0 18px 2px 56px}.group-body>header strong{color:var(--text-strong);letter-spacing:-.005em;font-size:14.5px;font-weight:700}.author-name{color:var(--text-strong);letter-spacing:0;background:0 0;border:0;border-radius:4px;padding:0;font-size:14.5px;font-weight:700}.author-name:hover{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.author-name--static:hover{color:var(--text-strong);text-decoration:none}.group-body>header time{color:var(--muted);font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:10.5px}.group-body>header span{color:var(--muted);font-size:12px}.bot-chip{border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);height:18px;color:var(--accent);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;border-radius:4px;align-items:center;padding:0 6px;font-size:9.5px;font-weight:700;line-height:1;display:inline-flex}.bot-chip--deleted{border-color:var(--line-strong);color:var(--muted)}.message-row{border-radius:0;margin-left:-56px;margin-right:-18px;padding:1px 18px 1px 56px;transition:background 80ms;position:relative}.message-row:not(:first-child){margin-top:1px}.message-row:hover,.message-group .group-body>header:hover,.message-group .group-body>header:hover+.message-row{background:var(--hover)}.message-group .group-body>header:has(+.message-row:hover){background:var(--hover)}.message-group .group-body>header:hover+.message-row .message-actions{opacity:1;pointer-events:auto}.message-row.selected{background:var(--accent-soft)}.message-row.can-open-thread{cursor:pointer}.row-stamp{font-family:var(--font-mono);color:var(--muted-2);opacity:0;font-variant-numeric:tabular-nums;font-size:9.5px;position:absolute;top:4px;left:8px}.message-row.is-preamble{background:0 0;margin-bottom:6px;padding-top:4px;padding-bottom:4px}.message-row.is-preamble:not(.before-final-message) .message-content{border:1px solid color-mix(in srgb, var(--activity-accent) 20%, transparent);border-radius:var(--radius-lg);background:var(--activity-accent-soft);box-shadow:0 2px 0 color-mix(in srgb, var(--activity-accent) 14%, transparent);padding:10px 14px}.message-row.is-preamble-collapsed .message-content{padding-top:6px;padding-bottom:6px}.message-row.is-preamble.before-final-message{background:0 0;margin-bottom:0;padding-top:2px;padding-bottom:0}.message-row.after-preamble{margin-top:0;padding-top:0;padding-bottom:2px}.message-row.is-preamble.before-final-message:before{display:none}.message-row.is-preamble.before-final-message .message-content{border:1px solid color-mix(in srgb, var(--activity-accent) 20%, transparent);background:var(--activity-accent-soft);border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);border-bottom:0;padding:10px 14px}.message-row.after-preamble .message-content{border:1px solid color-mix(in srgb, var(--delivery-accent) 20%, transparent);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg);background:var(--delivery-accent-soft);box-shadow:0 2px 0 color-mix(in srgb, var(--delivery-accent) 14%, transparent);border-top:0;padding:10px 14px}.message-row.is-preamble.before-final-message.is-preamble-collapsed .message-content{background:color-mix(in srgb, var(--activity-accent) 10%, var(--panel));border-bottom:1px solid color-mix(in srgb, var(--activity-accent) 30%, transparent);padding-top:7px;padding-bottom:7px}:root[data-user-align=right] .message-group.is-self,:root[data-other-align=right] .message-group:not(.is-self){grid-template-columns:minmax(0,1fr) 56px}:root[data-user-align=right] .message-group.is-self>.avatar,:root[data-other-align=right] .message-group:not(.is-self)>.avatar{grid-area:1/2;justify-self:end}:root[data-user-align=right] .message-group.is-self>.group-body,:root[data-other-align=right] .message-group:not(.is-self)>.group-body{grid-area:1/1;min-width:0}:root[data-user-align=right] .message-group.is-self .group-body>header,:root[data-other-align=right] .message-group:not(.is-self) .group-body>header{justify-content:flex-end;margin:0 -56px 0 -18px;padding:0 56px 2px 18px}:root[data-user-align=right] .message-group.is-self .message-row,:root[data-other-align=right] .message-group:not(.is-self) .message-row{margin-left:-18px;margin-right:-56px;padding-left:18px;padding-right:56px}:root[data-user-align=right] .message-group.is-self .message-content,:root[data-other-align=right] .message-group:not(.is-self) .message-content{text-align:right;margin-left:auto}:root[data-user-align=right] .message-group.is-self .markdown,:root[data-other-align=right] .message-group:not(.is-self) .markdown{text-align:right}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown ul,:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown ol,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown ul,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown ol{padding-left:0;padding-right:0;list-style-position:inside}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown li>ul,:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown li>ol,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown li>ul,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown li>ol{padding-left:0;padding-right:22px}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown li>p:first-child,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown li>p:first-child{display:inline}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown blockquote,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown blockquote{border-left:0;border-right:3px solid var(--accent);padding-left:0;padding-right:12px}:root[data-user-align=right] .message-group.is-self .attachment-grid,:root[data-other-align=right] .message-group:not(.is-self) .attachment-grid{margin-left:auto}.preamble-contract{gap:7px;min-width:0;display:grid}.preamble-toggle{width:100%;min-height:20px;color:var(--activity-accent);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:auto auto auto minmax(0,1fr);align-items:center;gap:7px;padding:0;display:grid}.preamble-chevron{color:var(--activity-accent);font-size:10px;transition:transform .12s}.preamble-chevron.open{transform:rotate(90deg)}.preamble-state,.preamble-action{line-height:1}.preamble-state{border:1px solid color-mix(in srgb, var(--activity-accent) 30%, transparent);height:17px;color:var(--activity-accent);text-transform:uppercase;letter-spacing:.03em;border-radius:999px;align-items:center;padding:0 7px;font-size:9.5px;font-weight:750;display:inline-flex}.preamble-state.is-live{border-color:color-mix(in srgb, var(--activity-accent) 55%, transparent);animation:1.6s ease-in-out infinite preamble-live-pulse}@keyframes preamble-live-pulse{0%,to{opacity:1}50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.preamble-state.is-live{animation:none}}.preamble-action{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.preamble-body{color:var(--muted);overflow-wrap:anywhere;word-break:break-word;min-width:0}.preamble-flow{gap:7px;min-width:0;padding-left:17px;display:grid}.preamble-tool{--tool-accent:var(--activity-accent);background:var(--tool-call-bg);border-radius:7px;min-width:0;overflow:hidden}.preamble-tool-summary{width:100%;min-width:0;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:7px;padding:4px 9px;line-height:1.5;display:flex}.preamble-tool-summary:hover{background:var(--tool-call-bg-hover)}.preamble-tool-full{color:var(--muted);overflow-wrap:anywhere;word-break:break-word;gap:5px;min-width:0;padding:2px 10px 8px 27px;font-size:12px;display:grid}.preamble-tool-full-head{font-family:var(--font-mono);color:color-mix(in srgb, var(--tool-accent) 45%, var(--muted));font-size:11px;font-weight:600}.preamble-tool-full-body{min-width:0}.preamble-tool-full pre{white-space:pre-wrap;overflow-wrap:anywhere}.tool-line-chevron{color:var(--muted-2);flex-shrink:0;font-size:9px;transition:transform .12s}.tool-line-chevron.open{transform:rotate(90deg)}.tool-line-glyph{filter:saturate(.85);flex-shrink:0;font-size:11px}.tool-line-action{color:color-mix(in srgb, var(--tool-accent) 38%, var(--text));flex-shrink:0;font-size:11.5px;font-weight:600}.tool-line-name{text-overflow:ellipsis;white-space:nowrap;max-width:40%;color:color-mix(in srgb, var(--tool-accent) 55%, var(--muted));font-size:11px;font-weight:500;font-family:var(--font-mono);flex-shrink:0;overflow:hidden}.tool-line-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--muted);font-size:11px;font-weight:400;font-family:var(--font-mono);opacity:.85;flex:auto;overflow:hidden}.message-row:hover .row-stamp{opacity:1}.message-content{min-width:0;display:flow-root}.thread-hint{min-height:22px;color:var(--muted-2);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;margin-top:4px;padding:3px 8px;font-size:12px;font-weight:700;line-height:1;display:inline-flex}.thread-hint:not(.has-replies):not(.is-open){display:none}.thread-hint svg{flex:none}.thread-hint time{color:var(--muted);font-variant-numeric:tabular-nums;font-size:10.5px;font-weight:500}.thread-hint.has-replies,.thread-hint.is-open{color:var(--accent)}.thread-hint.is-open{border-color:color-mix(in srgb, var(--accent) 40%, transparent);background:color-mix(in srgb, var(--accent-soft) 70%, transparent)}.thread-hint:hover{border-color:var(--line-strong);background:var(--panel)}.thread-hint:disabled{cursor:default;opacity:.45}.message-actions{opacity:0;pointer-events:none;background:var(--panel);border:1px solid var(--line-strong);box-shadow:var(--shadow);border-radius:8px;align-items:flex-start;gap:4px;padding:2px;transition:opacity .1s;display:flex;position:absolute;top:-24px;right:8px}.message-row:hover .message-actions,.message-row.selected .message-actions,.message-row.menu-open .message-actions{opacity:1;pointer-events:auto}.message-row:has(:focus-visible) .message-actions{opacity:1;pointer-events:auto}.message-row.actions-flip .message-actions{top:auto;bottom:-24px}.message-row.menu-open{z-index:6}.message-row:hover,.message-row.selected{z-index:5}.message-row:has(:focus-visible){z-index:5}.messages:has(.message-row.menu-open) .message-row:hover:not(.menu-open) .message-actions{opacity:0;pointer-events:none}.messages:has(.message-row.menu-open) .message-group .group-body>header:hover+.message-row:not(.menu-open) .message-actions{opacity:0;pointer-events:none}@media (hover:none),(pointer:coarse){.message-actions{width:1px;height:1px;box-shadow:none;opacity:1;pointer-events:auto;background:0 0;border:0;padding:0;top:1px;bottom:auto;overflow:visible;transform:none}.message-actions>:not(.message-more){display:none}.message-row.actions-flip .message-actions{top:1px;bottom:auto}.message-actions .message-more{position:static}.message-actions .message-actions-trigger{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.message-actions .message-actions-trigger:focus-visible{clip:auto;clip-path:none;border:1px solid var(--line-strong);background:var(--panel);width:36px;height:36px;box-shadow:var(--shadow);margin:0;top:0;right:0;overflow:visible}.message-row:has(.message-actions-trigger:focus-visible) .message-content{padding-right:44px}}.message-actions button{width:28px;height:28px;color:var(--muted);background:0 0;border:0;border-radius:6px;place-items:center;display:grid}.message-actions button:hover{background:var(--hover-strong);color:var(--text-strong)}.message-actions button:disabled{opacity:.45}.message-copy-status{background:var(--accent-soft);height:24px;color:var(--accent);white-space:nowrap;border-radius:5px;align-self:center;align-items:center;padding:0 6px;font-size:11px;font-weight:700;display:inline-flex}.message-copy-status.is-error{background:color-mix(in srgb, var(--danger) 10%, transparent);color:var(--danger)}.message-sheet-scrim{z-index:60;background:#05080f66;flex-direction:column;justify-content:flex-end;display:flex;position:fixed;inset:0}.message-sheet-backdrop{background:0 0;border:0;padding:0;position:absolute;inset:0}.message-action-sheet{z-index:1;background:var(--panel);border:1px solid var(--line);max-height:calc(100dvh - 16px - env(safe-area-inset-top,0px));padding:8px 12px calc(10px + env(safe-area-inset-bottom,0px));overscroll-behavior:contain;border-bottom:0;border-radius:16px 16px 0 0;animation:.16s ease-out sheet-rise;position:relative;overflow-y:auto}@keyframes sheet-rise{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.message-action-sheet{animation:none}}.message-action-sheet .sheet-grabber{background:var(--line-strong);border-radius:999px;width:36px;height:4px;margin:0 auto 8px}.message-action-sheet .sheet-emoji-row{border-bottom:1px solid var(--line);justify-content:space-around;gap:4px;padding-bottom:8px;display:flex}.message-action-sheet .sheet-emoji-row button{background:0 0;border:0;border-radius:10px;place-items:center;width:44px;height:44px;font-size:22px;line-height:1;display:grid}.message-action-sheet .sheet-emoji-row button:active{background:var(--hover-strong)}.message-action-sheet .sheet-actions{flex-direction:column;padding-top:4px;display:flex}.message-action-sheet .sheet-actions button{width:100%;color:var(--text-strong);text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:12px;padding:12px 8px;font-size:15px;display:flex}.message-action-sheet .sheet-actions button:active{background:var(--hover-strong)}.message-action-sheet .sheet-actions button:disabled{opacity:.45}.message-action-sheet .sheet-actions svg{color:var(--muted);flex:none}.message-action-sheet .sheet-danger,.message-action-sheet .sheet-danger svg{color:var(--danger)}.message-action-sheet .sheet-copy-status{background:var(--accent-soft);height:22px;color:var(--accent);white-space:nowrap;border-radius:5px;align-items:center;margin-left:auto;padding:0 6px;font-size:11px;font-weight:700;display:inline-flex}.message-action-sheet .sheet-copy-status.is-error{background:color-mix(in srgb, var(--danger) 10%, transparent);color:var(--danger)}.message-action-sheet .sheet-action-error{color:var(--danger);margin:-4px 12px 4px;font-size:12px;line-height:1.35}.message-actions .message-action-react{font-size:15px;line-height:1}.message-actions .action-sep{background:var(--line);flex:none;align-self:center;width:1px;height:18px;margin:0 3px}.message-actions .picker-wrapper,.message-actions .message-more{position:relative}.message-menu{z-index:30;background:var(--panel);border:1px solid var(--line-strong);min-width:190px;box-shadow:var(--shadow);border-radius:10px;padding:5px;font-size:13px;position:absolute;top:calc(100% + 4px);right:0}.message-menu.above{top:auto;bottom:calc(100% + 4px)}.message-menu button{width:100%;height:auto;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:7px;align-items:center;gap:9px;padding:7px 10px;font-size:13px;display:flex}.message-menu button:hover{background:var(--hover-strong);color:var(--text-strong)}.message-menu button svg{color:var(--muted);flex:none}.message-menu .menu-sep{border-top:1px solid var(--line);margin:5px 4px}.message-menu .menu-danger,.message-menu .menu-danger svg{color:var(--danger)}.message-menu .menu-danger:hover{background:color-mix(in srgb, var(--danger) 10%, transparent);color:var(--danger)}.message-edit{gap:7px;width:min(100%,760px);padding:5px 0 3px;display:grid}.message-edit__textarea{border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 94%, var(--text) 6%);width:100%;min-height:72px;max-height:240px;color:var(--text);font:inherit;resize:vertical;box-sizing:border-box;box-shadow:inset 0 1px 1px color-mix(in srgb, var(--text) 5%, transparent);border-radius:7px;padding:9px 11px;font-size:14.5px;line-height:1.5;transition:border-color .12s,box-shadow .12s,background .12s}.message-edit__textarea:hover:not(:disabled){border-color:color-mix(in srgb, var(--line-strong) 62%, var(--text) 38%)}.message-edit__textarea:focus{border-color:var(--accent);background:var(--panel);box-shadow:inset 0 1px 1px color-mix(in srgb, var(--text) 4%, transparent), 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.message-edit__textarea:disabled{cursor:progress;opacity:.78}.message-edit__footer{flex-wrap:wrap;align-items:center;gap:6px;min-height:30px;display:flex}.message-edit__footer .message-edit__save{background:var(--accent);min-width:68px;min-height:30px;color:var(--accent-contrast);cursor:pointer;border:0;border-radius:6px;justify-content:center;align-items:center;gap:4px;padding:5px 12px;font-size:13px;font-weight:500;display:inline-flex}.message-edit__footer .message-edit__save:hover{filter:brightness(1.1)}.message-edit__footer .message-edit__save:focus-visible,.message-edit__footer .message-edit__cancel:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.message-edit__footer .message-edit__save:disabled{opacity:.5;cursor:progress}.message-edit__footer .message-edit__cancel{min-height:30px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:5px 10px;font-size:13px;display:inline-flex}.message-edit__footer .message-edit__cancel:hover{border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.message-edit__error{border-left:2px solid var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent);width:fit-content;max-width:100%;color:var(--danger);border-radius:3px;margin:0;padding:5px 8px;font-size:12.5px;line-height:1.35}.message-edit__indicator{color:var(--muted);align-items:center;gap:3px;margin-left:8px;font-size:11px;display:inline-flex}.message-row.editing .message-actions{display:none}@media (width<=520px){.message-edit__footer .message-edit__save,.message-edit__footer .message-edit__cancel{flex:1 1 0}}.message-deleted{min-height:22px;color:var(--muted);align-items:center;font-size:13px;font-style:italic;display:inline-flex}.markdown{color:var(--text);overflow-wrap:anywhere;word-break:break-word;font-size:14.5px;line-height:1.5}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p{margin:0}.markdown p+p,.markdown ul,.markdown ol,.markdown blockquote,.markdown pre{margin-top:6px}.markdown a{color:var(--accent);text-decoration:none}.markdown a:hover{text-decoration:underline}.message-mention{border:1px solid color-mix(in srgb, currentColor 18%, transparent);background:color-mix(in srgb, currentColor 8%, transparent);color:inherit;border-radius:4px;margin:0 1px;padding:0 3px;font-weight:600}.message-mention.is-current-user{border-color:color-mix(in srgb, var(--accent) 42%, transparent);background:color-mix(in srgb, var(--accent) 20%, transparent);color:var(--accent);font-weight:700}.markdown code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-family:Geist Mono Variable,JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.markdown pre{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;overflow-x:auto}.markdown pre code{background:0 0;border:0;padding:0}.markdown blockquote{border-left:3px solid var(--accent);color:var(--muted);margin:0;padding:4px 0 4px 12px}.markdown ul,.markdown ol{padding-left:22px}.markdown img{border-radius:var(--radius);border:1px solid var(--line);object-fit:contain;background:var(--panel);cursor:zoom-in;max-width:100%;max-height:360px;margin-top:6px}.markdown-table-scroll{-webkit-overflow-scrolling:touch;overscroll-behavior-inline:contain;max-width:100%;margin-top:6px;overflow-x:auto}.markdown-table-scroll[data-overflowing]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.markdown-table-scroll:first-child{margin-top:0}.markdown-table-scroll>table{border-collapse:collapse;border-spacing:0;width:max-content;min-width:100%;font-size:.9em}.markdown thead{background:var(--muted-2)}.markdown th,.markdown td{vertical-align:top;border:1px solid var(--line);padding:8px 12px}.markdown thead th{color:var(--text-strong);font-weight:700}.markdown tbody tr:nth-child(2n){background:color-mix(in srgb, var(--muted-2) 18%, transparent)}.markdown tbody tr:hover{background:color-mix(in srgb, var(--muted-2) 26%, transparent)}.gif-player{vertical-align:top;max-width:100%;display:inline-block;position:relative}.gif-player img{display:block}.gif-badge,.gif-replay{z-index:1;color:#fff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:0;position:absolute}.gif-badge{letter-spacing:.04em;pointer-events:none;background:#0000008a;border-radius:999px;padding:4px 7px;font-size:10px;font-weight:800;bottom:9px;left:9px}.gif-replay{opacity:0;pointer-events:none;background:#0a0c12b8;border-radius:999px;place-items:center;width:30px;height:30px;font-size:16px;line-height:1;transition:opacity .13s,transform .13s,background .12s;display:grid;bottom:9px;right:9px;transform:scale(.88)}.gif-replay:hover{background:var(--accent)}.gif-player.paused .gif-replay{opacity:1;pointer-events:auto;transform:scale(1)}.gif-player.playing .gif-badge{animation:.9s ease-in-out infinite gif-breathe}@keyframes gif-breathe{0%,to{opacity:.85}50%{opacity:.45}}.attachment-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;max-width:560px;margin-top:8px;display:grid}.attachment-grid.compact{grid-template-columns:minmax(0,1fr);max-width:420px}.media-tile{border:1px solid var(--line);border-radius:var(--radius-lg);isolation:isolate;text-align:left;width:100%;color:inherit;cursor:pointer;background:#0a0c12;margin:0;padding:0;text-decoration:none;transition:border-color .14s,transform .14s,box-shadow .14s;display:block;position:relative;overflow:hidden}.media-tile:hover{border-color:var(--line-strong);box-shadow:0 18px 40px -28px #000000e6}.media-tile:focus-visible{border-color:var(--line-strong);box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent);outline:none}.media-tile--image{cursor:zoom-in}.media-tile__open{width:100%;color:inherit;cursor:zoom-in;background:0 0;border:0;margin:0;padding:0;display:block}.media-tile__open:focus{outline:0}.media-tile__open:focus-visible+.media-tile__caption .media-tile__name{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.media-tile--video{cursor:default}.media-tile img,.media-tile video{object-fit:contain;background:#05070d;width:100%;max-height:360px;display:block}.media-tile--image img{max-height:320px}.media-tile__caption{z-index:3;opacity:0;pointer-events:none;background:linear-gradient(#0000 0%,#00000080 60%,#000000c7 100%);align-items:center;gap:8px;padding:22px 10px 8px;transition:opacity .14s;display:flex;position:absolute;inset:auto 0 0}.media-tile__caption>*{pointer-events:auto}.media-tile:hover .media-tile__caption,.media-tile:focus-within .media-tile__caption{opacity:1}.media-tile--video.is-started .media-tile__caption{display:none}.media-tile__name{color:#fff;white-space:nowrap;text-overflow:ellipsis;text-shadow:0 1px 2px #0009;flex:1;min-width:0;font-size:12px;font-weight:500;overflow:hidden}.media-tile__chip{z-index:4;color:#fff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#00000080;border:1px solid #ffffff2e;border-radius:8px;flex:none;place-items:center;width:28px;height:28px;text-decoration:none;transition:background .12s,border-color .12s,transform .12s;display:inline-grid;position:relative}.media-tile__chip:hover{background:#000000b3;border-color:#ffffff52;transform:translateY(-1px)}.media-tile__play{cursor:pointer;z-index:1;background:0 0;border:0;place-items:center;width:100%;height:auto;margin:0;padding:0;display:grid;position:absolute;inset:0 0 48px}.media-tile__play:before{content:"";opacity:.7;pointer-events:none;background:radial-gradient(#0000002e 0%,#0000000d 45%,#0000 70%);transition:opacity .16s;position:absolute;inset:0}.media-tile__play:hover:before{opacity:.9}.media-tile__play-icon{color:#fff;-webkit-backdrop-filter:blur(10px);background:#0000008c;border-radius:999px;place-items:center;width:46px;height:46px;padding-left:3px;transition:transform .2s cubic-bezier(.2,.8,.2,1),background .18s,box-shadow .2s;display:grid;position:relative;box-shadow:0 6px 20px -8px #0000008c}.media-tile__play-icon svg{filter:drop-shadow(0 1px 2px #0006)}.media-tile__play:hover .media-tile__play-icon{background:#000000b3;transform:scale(1.06);box-shadow:0 10px 28px -10px #000000a6}.media-tile__play:active .media-tile__play-icon{transition-duration:80ms;transform:scale(.97)}.media-tile__play:focus-visible{outline:none}.media-tile__play:focus-visible .media-tile__play-icon{box-shadow:0 0 0 2px #fff9,0 10px 28px -10px #000000a6}.media-tile__duration{z-index:2;color:#fff;font-variant-numeric:tabular-nums;letter-spacing:.02em;pointer-events:none;background:#000000b8;border-radius:4px;padding:2px 6px;font-size:11px;font-weight:600;position:absolute;bottom:8px;left:8px}.file-attachment{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);align-items:center;gap:10px;max-width:360px;padding:10px;display:flex}.file-attachment:hover{border-color:var(--line-strong);background:var(--panel-2)}.file-icon{background:var(--accent-soft);width:34px;height:34px;color:var(--accent);border-radius:8px;place-items:center;font-weight:800;display:grid}.file-attachment strong,.file-attachment small{display:block}.file-attachment strong{color:var(--text-strong);font-size:13px}.file-attachment small{color:var(--muted);font-size:11px}.audio-attachment,.document-attachment{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(100%,420px);overflow:hidden}.audio-attachment{gap:10px;padding:10px;display:grid}.audio-attachment__meta{align-items:center;gap:10px;min-width:0;display:flex}.audio-attachment audio{width:100%;height:36px}.document-attachment{grid-template-columns:64px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px;display:grid}.document-attachment__thumbnail{border:1px solid var(--line);background:linear-gradient(135deg, transparent 0 76%, var(--panel-3) 76% 100%), linear-gradient(180deg, #fff 0%, #f0f2f7 100%);width:64px;height:82px;color:var(--accent);letter-spacing:0;cursor:pointer;border-radius:6px;place-items:center;font-size:13px;font-weight:800;text-decoration:none;display:inline-grid;position:relative;overflow:hidden;box-shadow:0 8px 18px -16px #0009}.document-attachment__thumbnail:before,.document-attachment__thumbnail:after{content:"";background:color-mix(in srgb, var(--muted) 36%, transparent);border-radius:999px;height:2px;position:absolute;left:14px;right:14px}.document-attachment__thumbnail:before{top:48px}.document-attachment__thumbnail:after{top:56px}.document-attachment__meta{gap:5px;min-width:0;display:grid}.document-attachment__title{width:100%;min-width:0;color:var(--text-strong);white-space:nowrap;text-overflow:ellipsis;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:700;text-decoration:none;overflow:hidden}.document-attachment__title:hover{text-underline-offset:3px;text-decoration:underline}.document-attachment__meta small{color:var(--muted);white-space:nowrap;font-size:11px}.document-attachment__download{width:30px;height:30px;color:var(--muted);border-radius:8px;place-items:center;text-decoration:none;transition:background .12s,color .12s;display:inline-grid}.document-attachment__download:hover{background:var(--panel-2);color:var(--text-strong)}@media (width<=520px){.message-group{grid-template-columns:44px minmax(0,1fr);padding:7px 12px}:root[data-user-align=right] .message-group.is-self,:root[data-other-align=right] .message-group:not(.is-self){grid-template-columns:minmax(0,1fr) 44px}.message-row{margin-left:-44px;margin-right:-12px;padding-left:44px;padding-right:12px}:root[data-user-align=right] .message-group.is-self .message-row,:root[data-other-align=right] .message-group:not(.is-self) .message-row{margin-left:-12px;margin-right:-44px;padding-left:12px;padding-right:44px}.message-group .group-body>header{margin-left:-44px;margin-right:-12px;padding-left:44px;padding-right:12px}:root[data-user-align=right] .message-group.is-self .group-body>header,:root[data-other-align=right] .message-group:not(.is-self) .group-body>header{margin-left:-12px;margin-right:-44px;padding-left:12px;padding-right:44px}.row-stamp{display:none}.attachment-grid,.attachment-grid.compact{grid-template-columns:minmax(0,1fr);max-width:100%}}:root[data-message-layout=outlined] .message-group .group-body{width:100%}:root[data-message-layout=outlined] .message-group .message-row{margin-left:0;margin-right:0;padding:0}:root[data-message-layout=outlined] .message-group .group-body>header{margin-left:0;margin-right:0;padding-left:0;padding-right:0}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .message-content,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .message-content,:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .markdown,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .markdown{text-align:start}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .thread-hint,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .thread-hint{width:fit-content;margin-left:auto;display:flex}:root[data-message-layout=outlined] .message-group .row-stamp{left:-48px}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .row-stamp,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .row-stamp{left:auto;right:-48px}:root[data-message-layout=outlined] .message-group .message-row:not(:first-child){margin-top:4px}:root[data-message-layout=outlined] .message-group .message-content{border-radius:var(--radius-lg);width:fit-content;max-width:min(96%,1100px);margin-top:2px;padding:10px 14px;position:relative}:root[data-message-layout=outlined] .message-group .message-row:not(.is-preamble):not(.after-preamble) .message-content{border:1px solid var(--line-strong)}:root[data-message-layout=outlined] .message-group.is-agent .message-content{width:96%;max-width:1100px}:root[data-message-layout=outlined] .message-group .message-row.before-final-message+.message-row.after-preamble{margin-top:-1px}:root[data-message-layout=outlined] .message-group.is-agent .message-row.before-final-message .message-content{border-bottom-right-radius:0;border-bottom-left-radius:0}:root[data-message-layout=outlined] .message-group.is-agent .message-row.after-preamble .message-content{border-top-left-radius:0;border-top-right-radius:0}:root[data-density=compact] .message-group{grid-template-columns:42px minmax(0,1fr);padding:2px 18px}:root[data-density=compact][data-user-align=right] .message-group.is-self,:root[data-density=compact][data-other-align=right] .message-group:not(.is-self){grid-template-columns:minmax(0,1fr) 42px}:root[data-density=compact] .message-group>.avatar{border-radius:7px;width:26px;height:26px;font-size:11px}:root[data-density=compact] .group-body>header{gap:6px;margin-bottom:0}:root[data-density=compact] .message-group .group-body>header{margin-left:-42px;padding-left:42px}:root[data-density=compact][data-user-align=right] .message-group.is-self .group-body>header,:root[data-density=compact][data-other-align=right] .message-group:not(.is-self) .group-body>header{margin-left:-18px;margin-right:-42px;padding-left:18px;padding-right:42px}:root[data-density=compact] .group-body>header strong,:root[data-density=compact] .author-name{font-size:13px}:root[data-density=compact] .group-body>header time{font-size:10px}:root[data-density=compact] .message-row{margin-left:-42px;padding-left:42px}:root[data-density=compact][data-user-align=right] .message-group.is-self .message-row,:root[data-density=compact][data-other-align=right] .message-group:not(.is-self) .message-row{margin-left:-18px;margin-right:-42px;padding-left:18px;padding-right:42px}:root[data-density=compact] .markdown{font-size:13.5px;line-height:1.42}:root[data-density=compact] .reactions-bar{margin-top:2px}:root[data-density=compact][data-message-layout=outlined] .message-group .message-row{margin-left:0;padding-left:0}:root[data-density=compact][data-message-layout=outlined] .message-group .row-stamp{left:-34px}:root[data-density=compact][data-message-layout=outlined][data-user-align=right] .message-group.is-self .row-stamp,:root[data-density=compact][data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .row-stamp{left:auto;right:-34px}@media (width<=520px){:root[data-density=compact] .message-group{padding-left:12px;padding-right:12px}}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .message-row,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .message-row,:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .group-body>header,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .group-body>header{margin-left:0;margin-right:0;padding-left:0;padding-right:0}.composer{--composer-card-top:8px;--composer-overlay-gap:8px;--composer-overlay-inset-x:18px;background:var(--bg);gap:0;padding:8px 18px 6px;display:grid;position:relative}.composer-card{background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius-lg);box-shadow:var(--key-edge);flex-direction:column;transition:border-color .12s,box-shadow .12s;display:flex;overflow:hidden}.composer:focus-within .composer-card{border-color:color-mix(in srgb, var(--accent) 55%, var(--line-strong));box-shadow:var(--key-edge), 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent)}.composer-suggestions{left:var(--composer-overlay-inset-x);bottom:calc(100% - var(--composer-card-top) + var(--composer-overlay-gap));z-index:40;width:min(560px, calc(100% - (var(--composer-overlay-inset-x) * 2)));border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 97%, transparent);max-height:min(320px,45vh);box-shadow:var(--shadow);border-radius:12px;margin:0;position:absolute;overflow:hidden auto}.composer-suggestions button{border:0;border-bottom:1px solid var(--line);width:100%;min-height:48px;color:var(--text);text-align:left;background:0 0;border-radius:0;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 10px;display:grid}.composer-suggestions button:last-child{border-bottom:0}.composer-suggestions button:hover,.composer-suggestions button.active{background:var(--hover-strong)}.suggestion-mark{background:var(--accent-soft);width:30px;height:30px;color:var(--accent);border-radius:8px;place-items:center;font-size:13px;font-weight:800;display:grid}.suggestion-copy{gap:2px;min-width:0;display:grid}.suggestion-copy strong,.suggestion-copy span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.suggestion-copy strong{color:var(--text-strong);font-size:13px}.suggestion-copy span{color:var(--muted);font-size:12px}.suggestion-kind{color:var(--muted-2);text-transform:uppercase;font-size:11px;font-weight:700}.suggestion-hint{color:var(--muted);font-size:12px;font-style:normal;font-weight:500}.composer-notice{margin:0 var(--composer-overlay-inset-x,0) 6px;border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 97%, transparent);border-radius:10px;align-items:baseline;gap:8px;padding:7px 10px;font-size:13px;display:flex}.composer-notice__label{color:var(--muted-2);text-transform:uppercase;flex:none;font-size:11px;font-weight:700}.composer-notice--error .composer-notice__label{color:var(--danger)}.composer-notice__text{min-width:0;color:var(--text);overflow-wrap:anywhere;flex:1}.composer-notice__dismiss{width:22px;height:22px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;align-self:center;place-items:center;font-size:15px;line-height:1;display:grid}.composer-notice__dismiss:hover{background:var(--hover-strong);color:var(--text-strong)}.composer-toolbar{border:0;border-top:1px solid var(--line);background:color-mix(in srgb, var(--panel-2) 35%, transparent);width:100%;min-width:0;box-shadow:none;scrollbar-width:none;-webkit-overflow-scrolling:touch;border-radius:0;align-items:center;gap:2px;margin:0;padding:4px 6px;display:inline-flex;overflow:auto hidden}.composer-toolbar::-webkit-scrollbar{display:none}.composer-toolbar button{min-width:28px;height:26px;color:var(--text);opacity:.78;background:0 0;border:0;border-radius:6px;flex:none;place-items:center;font-size:11.5px;font-weight:700;transition:background .1s,color .1s,opacity .1s,transform 80ms;display:grid}.composer-toolbar button:hover{background:var(--hover-strong);color:var(--text-strong);opacity:1}.composer-toolbar button.active{background:var(--accent-soft);color:var(--accent);opacity:1}.composer-toolbar button:active{transform:translateY(1px)}.gif-picker{border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 96%, transparent);width:min(520px,100vw - 40px);box-shadow:var(--shadow);border-radius:16px;margin-top:8px;margin-bottom:8px;padding:10px;animation:.16s cubic-bezier(.2,.8,.2,1) picker-in}.gif-picker-head{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px;padding:2px 2px 10px;display:grid}.gif-picker-head strong{color:var(--text-strong);font-size:13px}.gif-picker-head input{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);min-width:0;height:32px;padding:0 10px}.gif-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;max-height:240px;display:grid;overflow-y:auto}.gif-grid button{aspect-ratio:4/3;background:var(--panel-2);color:#fff;box-shadow:inset 0 0 0 1px var(--line);border:0;border-radius:12px;padding:0;transition:transform .12s,box-shadow .12s;position:relative;overflow:hidden}.gif-grid button:hover{box-shadow:inset 0 0 0 2px var(--accent), 0 14px 30px -22px #000c;transform:translateY(-2px)}.gif-grid img{object-fit:cover;width:100%;height:100%;display:block}.gif-grid span{text-overflow:ellipsis;white-space:nowrap;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0000008f;border-radius:999px;padding:4px 7px;font-size:10.5px;font-weight:700;position:absolute;bottom:6px;left:6px;right:6px;overflow:hidden}@keyframes picker-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.composer-row{--composer-control-size:36px;--composer-line-height:22px;--composer-text-padding-block:7px;background:0 0;border:0;border-radius:0;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:4px;padding:8px 8px 4px 10px;display:grid}.composer-row:has(.composer-icon){grid-template-columns:auto minmax(0,1fr) auto}.composer:focus-within .composer-toolbar,.composer-row:focus-within{border-color:#0000}.composer-row:focus-within{box-shadow:none}.composer-icon{width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);color:var(--muted);cursor:pointer;border-radius:10px;align-self:start;place-items:center;transition:background .12s,color .12s;display:grid}.composer-icon:hover{background:var(--hover-strong);color:var(--text-strong)}.composer-icon input[type=file]{opacity:0;pointer-events:none;block-size:1px;inline-size:1px;position:absolute}.composer textarea,.reply-composer textarea{width:100%;height:auto;min-height:44px;max-height:50vh;padding:var(--composer-text-padding-block) 4px;resize:none;color:var(--text);line-height:var(--composer-line-height);box-sizing:border-box;align-self:start;font-size:14.5px;overflow-y:auto}.composer textarea::placeholder,.reply-composer textarea::placeholder{color:var(--muted)}.send{width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);border:1px solid color-mix(in srgb, var(--accent) 70%, var(--text-strong));border-radius:var(--radius);background:var(--accent);color:var(--accent-contrast);box-shadow:var(--key-edge);align-self:start;place-items:center;transition:background .12s,transform 80ms,box-shadow 80ms,opacity .12s;display:grid}.send:hover:not(:disabled){background:var(--accent-hover);transform:translateY(-1px)}.send:active:not(:disabled){box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.send:disabled{background:var(--panel-3);border-color:var(--line-strong);color:var(--muted-2);cursor:not-allowed;box-shadow:none}.composer-attachment{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);color:var(--text);align-items:center;gap:8px;width:fit-content;margin-top:8px;margin-bottom:8px;padding:6px 10px;font-size:13px;display:inline-flex}.attachment-icon{background:var(--accent-soft);width:20px;height:20px;color:var(--accent);border-radius:6px;place-items:center;display:grid}.pending-image{object-fit:cover;border:1px solid var(--line);background:var(--panel-2);border-radius:7px;width:42px;height:32px}.attachment-name{text-overflow:ellipsis;white-space:nowrap;max-width:240px;overflow:hidden}.attachment-remove{width:18px;height:18px;color:var(--muted);background:0 0;border:0;border-radius:50%;font-size:14px;line-height:1}.attachment-remove:hover{background:var(--danger);color:#fff}.composer-hint{color:var(--muted-2);padding:7px 4px 0;font-size:11px}.composer-hint kbd{background:var(--panel-2);border:1px solid var(--line-strong);font-family:var(--font-mono);color:var(--text);box-shadow:0 1px 0 var(--line-strong);border-radius:4px;padding:0 5px;font-size:10.5px;display:inline-block}@media (width<=820px){.composer{padding:8px calc(14px + var(--safe-area-right)) calc(6px + var(--safe-area-bottom)) calc(14px + var(--safe-area-left))}.composer textarea,.reply-composer textarea{font-size:16px}.composer-suggestions{max-height:min(320px,42dvh)}}.thread{background:var(--panel);border-left:1px solid var(--line);opacity:0;pointer-events:none;grid-template-rows:auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-width:0;transition:opacity .18s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden;transform:translate(28px)}.thread.open{opacity:1;pointer-events:auto;transform:translate(0)}.thread.covered{opacity:0;pointer-events:none}.thread>header{border-bottom:1px solid var(--line);background:linear-gradient(180deg, #ffffff05, transparent), var(--panel);align-items:center;gap:10px;min-height:60px;padding:12px 16px;display:flex}.thread>header>div{flex:1;min-width:0}.thread>header p,.thread>header strong{margin:0}.thread>header p{color:var(--muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:600;overflow:hidden}.thread>header strong{color:var(--text-strong);font-size:14px;display:block}.thread .thread-pin-error{color:var(--danger);margin-top:3px;font-size:11px;line-height:1.35;display:block}.thread .close{background:var(--panel-2);width:28px;height:28px;color:var(--muted);border:0;border-radius:50%;font-size:18px;line-height:1}.thread .close:hover{background:var(--panel-3);color:var(--text-strong)}.thread .thread-open-link{color:var(--accent);font-family:var(--font-mono);white-space:nowrap;flex:none;font-size:11px;font-weight:700;text-decoration:none}.thread .thread-open-link:hover{color:var(--accent-hover);text-decoration:underline}.thread .thread-open-link:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}.thread .thread-back{background:var(--panel-2);width:28px;height:28px;color:var(--muted);border:0;border-radius:50%;flex:none;place-items:center;display:grid}.thread .thread-back:hover{background:var(--panel-3);color:var(--text-strong)}.thread .thread-back:focus-visible,.thread .close:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.thread-scroll{padding:12px 16px;overflow-y:auto}.thread-root{border-bottom:1px solid var(--line);grid-template-columns:38px minmax(0,1fr);gap:12px;padding-bottom:12px;display:grid}.thread-divider{align-items:center;gap:10px;margin:14px 0 10px;display:flex}.thread-divider:before,.thread-divider:after{content:"";background:var(--line);flex:1;height:1px}.thread-divider span{font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;font-weight:600}.reply-list{flex-direction:column;gap:10px;display:flex}.reply{border-radius:var(--radius-sm);grid-template-columns:30px minmax(0,1fr);gap:10px;padding:6px;display:grid}.reply:hover{background:var(--hover)}.thread .reply-quote-btn,.thread .thread-action-btn{width:26px;height:26px;color:var(--muted);background:0 0;border:0;border-radius:6px;place-items:center;display:inline-grid}.thread .reply-quote-btn:hover,.thread .thread-action-btn:hover{background:var(--hover-strong);color:var(--text-strong)}.thread .reply-quote-btn:disabled,.thread .thread-action-btn:disabled{cursor:default;opacity:.45}.thread .thread-action-btn--danger{color:var(--danger)}.thread .thread-action-btn--danger:hover{background:color-mix(in srgb, var(--danger) 12%, transparent);color:var(--danger)}.thread .thread-more-actions{display:none}@media (hover:none),(pointer:coarse){.thread .group-body>header{min-height:28px;padding-right:32px;position:relative}.thread .reply-quote-btn,.thread .thread-action-btn:not(.thread-more-actions){display:none}.thread .thread-more-actions{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;display:inline-grid;position:absolute;top:0;right:0;overflow:hidden}.thread .thread-more-actions:focus-visible{clip:auto;clip-path:none;border:1px solid var(--line-strong);background:var(--panel);width:28px;height:28px;box-shadow:var(--shadow);margin:0;overflow:visible}}.reply-composer{--composer-card-top:10px;--composer-overlay-inset-x:14px;background:var(--panel);border-top:1px solid var(--line);padding:10px 14px 14px}.reply-composer .composer-row{border-radius:0}.thread-empty{text-align:center;grid-row:span 3;align-content:center;place-items:center;gap:8px;padding:32px 24px;display:grid}.thread-icon{background:var(--panel-2);width:56px;height:56px;color:var(--muted);border-radius:16px;place-items:center;display:grid}.thread-empty strong{color:var(--text-strong);font-size:15px}.thread-empty span{color:var(--muted);max-width:260px;font-size:13px;line-height:1.5}.profile-pane{overflow-y:auto}.profile-hero{background:linear-gradient(180deg, transparent, #0000003d), linear-gradient(135deg, hsl(var(--hue,220deg) 76% 58%), hsl(calc(var(--hue,220deg) + 54deg) 74% 38%));border-bottom:1px solid var(--line);place-items:end center;min-height:210px;padding:28px 20px;display:grid}.profile-avatar{aspect-ratio:1;color:#fff;background:#ffffff2e;border-radius:16px;place-items:center;width:min(240px,70%);font-size:clamp(48px,12vw,88px);font-weight:800;display:grid;overflow:hidden;box-shadow:0 26px 60px -30px #000000e6}.profile-avatar img{object-fit:cover;width:100%;height:100%}.profile-pane-body{gap:18px;padding:18px 16px 22px;display:grid}.profile-pane-title{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.profile-pane-title h2{color:var(--text-strong);letter-spacing:0;margin:0;font-size:22px}.profile-pane-title span{color:var(--muted);margin-top:3px;font-size:13px;display:block}.profile-pane-title .bot-badge{border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);min-height:20px;color:var(--accent);border-radius:999px;align-items:center;margin-top:6px;padding:0 8px;font-size:11px;font-weight:800;line-height:1;display:inline-flex}.text-action{color:var(--accent);background:0 0;border:0;border-radius:6px;padding:4px 6px;font-size:13px;font-weight:700}.text-action:hover{background:var(--accent-soft)}.profile-presence{color:var(--text);align-items:center;gap:8px;font-size:14px;display:inline-flex}.profile-actions-row{grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:10px;display:grid}.profile-actions-row .primary-action,.profile-actions-row .ghost-action{border-radius:var(--radius);white-space:nowrap;justify-content:center;align-items:center;width:100%;min-width:0;height:48px;padding:0 16px;font-size:14px;font-weight:800;line-height:1;display:inline-flex}.moderation-actions{grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:8px;display:grid}.moderation-actions .primary-action,.moderation-actions .ghost-action,.moderation-actions .danger-action{border-radius:var(--radius);min-height:40px;font-size:13px;font-weight:800}.danger-action{border:1px solid color-mix(in srgb, var(--danger), transparent 35%);background:color-mix(in srgb, var(--danger), transparent 86%);color:var(--danger)}.role-pill{background:var(--panel-2);color:var(--muted);text-transform:uppercase;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:800}.profile-info{border-top:1px solid var(--line);gap:12px;padding-top:18px;display:grid}.profile-info header{justify-content:space-between;align-items:center;gap:10px;display:flex}.profile-info header strong{color:var(--text-strong);font-size:14px}.profile-info-row{grid-template-columns:48px minmax(0,1fr);align-items:center;gap:14px;min-height:48px;display:grid}.info-icon{background:var(--panel-2);width:48px;height:48px;color:var(--muted);border-radius:12px;justify-content:center;align-items:center;line-height:1;display:inline-flex}.info-icon svg{flex:none;display:block}.profile-info-row>div>small,.profile-info-row>div>span{display:block}.profile-info-row>div>small{color:var(--muted);font-size:12px;line-height:1.2}.profile-info-row>div>span{color:var(--text);overflow-wrap:anywhere;font-size:14px;line-height:1.3}.profile-note{color:var(--muted);margin:0;font-size:13px;line-height:1.5}@media (width<=820px){.thread{min-height:100dvh}.thread>header{min-height:calc(60px + var(--safe-area-top));padding-top:calc(12px + var(--safe-area-top));padding-right:calc(16px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.thread-scroll{padding-right:calc(16px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.reply-composer{padding-right:calc(14px + var(--safe-area-right));padding-bottom:calc(14px + var(--safe-area-bottom));padding-left:calc(14px + var(--safe-area-left))}}.artifact-viewer{z-index:2;border-left:1px solid var(--line);background:var(--panel);opacity:0;pointer-events:none;grid-template-rows:auto minmax(0,1fr);min-width:0;transition:opacity .18s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden;transform:translate(28px)}.artifact-viewer.open{opacity:1;pointer-events:auto;transform:translate(0)}.artifact-viewer__header{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--panel) 92%, var(--bg));justify-content:space-between;align-items:center;gap:16px;min-height:64px;padding:10px 12px 10px 16px;display:flex}.artifact-viewer__identity{grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;gap:5px 10px;min-width:0;display:grid}.artifact-viewer__identity span{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;grid-column:1/-1;font-size:11px;font-weight:700}.artifact-viewer__identity strong{min-width:0;color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.artifact-viewer__identity small{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px}.artifact-viewer__actions,.artifact-viewer__segmented{align-items:center;gap:4px;display:inline-flex}.artifact-viewer__actions>a,.artifact-viewer__actions>button,.artifact-viewer__segmented button,.artifact-viewer__pdf-toolbar button{border-radius:var(--radius-sm);min-width:32px;height:32px;color:var(--muted);background:0 0;border:1px solid #0000;place-items:center;padding:0 9px;text-decoration:none;display:inline-grid}.artifact-viewer__office-toolbar button,.artifact-viewer__sheet-tabs button{border-radius:var(--radius-sm);min-height:30px;color:var(--muted);background:0 0;border:1px solid #0000;padding:0 10px;font-size:11px}.artifact-viewer__actions>button{font-size:20px;line-height:1}.artifact-viewer__actions>a:hover,.artifact-viewer__actions>button:hover,.artifact-viewer__segmented button:hover,.artifact-viewer__pdf-toolbar button:hover:not(:disabled){border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.artifact-viewer__actions :focus-visible,.artifact-viewer__pdf-toolbar button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.artifact-viewer__segmented{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);padding:2px}.artifact-viewer__segmented button{min-width:58px;height:28px;font-size:11px;font-weight:650}.artifact-viewer__segmented button.active{border-color:var(--line);background:var(--panel);color:var(--text-strong)}.artifact-viewer__body{background:var(--bg);min-height:0;overflow:auto}.artifact-viewer__state{min-height:100%;color:var(--muted);text-align:center;align-content:center;justify-items:center;gap:10px;padding:32px 24px;display:grid}.artifact-viewer__state strong{color:var(--text-strong);font-size:15px}.artifact-viewer__state p{max-width:34ch;margin:0;font-size:13px;line-height:1.5}.artifact-viewer__state a{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel);min-height:36px;color:var(--text-strong);margin-top:4px;padding:8px 12px;font-size:13px;font-weight:650;text-decoration:none}.artifact-viewer__state--error svg{color:var(--danger)}.artifact-viewer__spinner{border:2px solid var(--line-strong);border-top-color:var(--accent);border-radius:50%;width:26px;height:26px;animation:.7s linear infinite artifact-spin}@keyframes artifact-spin{to{transform:rotate(360deg)}}.artifact-viewer__source{background:color-mix(in srgb, var(--bg) 90%, #090b10);width:max-content;min-width:100%;min-height:100%;color:var(--text);font-family:var(--font-mono);tab-size:2;white-space:pre;margin:0;padding:20px;font-size:12px;line-height:1.65}.artifact-viewer__source code{font:inherit}.artifact-viewer__document{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(100%,760px);min-height:calc(100% - 32px);color:var(--text);overflow-wrap:anywhere;margin:16px auto;padding:clamp(24px,5vw,56px);font-size:15px;line-height:1.65}.artifact-viewer__document>:first-child{margin-top:0}.artifact-viewer__document>:last-child{margin-bottom:0}.artifact-viewer__document h1,.artifact-viewer__document h2,.artifact-viewer__document h3{color:var(--text-strong);line-height:1.25}.artifact-viewer__document h1{font-size:28px}.artifact-viewer__document h2{margin-top:1.75em;font-size:21px}.artifact-viewer__document h3{margin-top:1.5em;font-size:17px}.artifact-viewer__document pre{border-radius:var(--radius);background:var(--panel-2);padding:14px;overflow:auto}.artifact-viewer__document code{font-family:var(--font-mono)}.artifact-viewer__document table{border-collapse:collapse;width:100%}.artifact-viewer__document th,.artifact-viewer__document td{border:1px solid var(--line-strong);text-align:left;padding:8px 10px}.artifact-viewer__document img{max-width:100%;height:auto}.artifact-viewer__document a{color:var(--accent)}.artifact-viewer__body.is-pdf{grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}.artifact-viewer__body.is-office{grid-template-rows:auto minmax(0,1fr) auto;display:grid;overflow:hidden}.artifact-viewer__office-toolbar,.artifact-viewer__sheet-tabs{border-bottom:1px solid var(--line);background:var(--panel);min-height:44px;color:var(--muted);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;gap:4px;padding:6px 10px;font-size:11px;display:flex}.artifact-viewer__office-toolbar button:disabled{cursor:not-allowed;opacity:.4}.artifact-viewer__office-toolbar button:hover:not(:disabled),.artifact-viewer__sheet-tabs button:hover,.artifact-viewer__sheet-tabs button.active{border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.artifact-viewer__office-toolbar button:focus-visible,.artifact-viewer__sheet-tabs button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.artifact-viewer__office-toolbar{flex-wrap:wrap}.artifact-viewer__spreadsheet{background:var(--panel);min-height:0;overflow:auto}.artifact-viewer__spreadsheet table{table-layout:fixed;border-spacing:0;border-collapse:separate;width:max-content;color:var(--text);font-size:12px}.artifact-viewer__spreadsheet th,.artifact-viewer__spreadsheet td{box-sizing:border-box;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--panel);text-align:left;text-overflow:ellipsis;white-space:nowrap;width:160px;min-width:160px;max-width:160px;height:30px;padding:5px 8px;overflow:hidden}.artifact-viewer__spreadsheet thead th{z-index:2;background:var(--panel-2);color:var(--muted);text-align:center;position:sticky;top:0}.artifact-viewer__spreadsheet .row-heading{z-index:1;background:var(--panel-2);width:44px;min-width:44px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;position:sticky;left:0}.artifact-viewer__spreadsheet thead .row-heading{z-index:3}.artifact-viewer__grid-note{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);width:max-content;max-width:min(480px,100vw - 48px);color:var(--muted);white-space:normal;margin:16px;padding:8px 10px;font-size:12px;line-height:1.45;position:sticky;left:0}.artifact-viewer__sheet-tabs{border-top:1px solid var(--line);border-bottom:0;justify-content:flex-start;overflow-x:auto}.artifact-viewer__sheet-tabs button{flex:none}.artifact-viewer__slide-stage{align-content:center;place-items:center;gap:12px;min-height:0;padding:24px;display:grid;overflow:auto}.artifact-viewer__slide{aspect-ratio:16/9;color:#172033;background:#fff;flex-direction:column;justify-content:safe center;width:min(100%,860px);padding:48px;display:flex;overflow:auto;box-shadow:0 16px 48px -24px #000000a6}.artifact-viewer__slide h2{letter-spacing:0;margin:0 0 .7em;font-size:36px;line-height:1.15}.artifact-viewer__slide p{margin:.35em 0;font-size:20px;line-height:1.4}.artifact-viewer__office-note{color:var(--muted);margin:0;font-size:12px}@media (width<=640px){.artifact-viewer__slide{padding:28px}.artifact-viewer__slide h2{font-size:24px}.artifact-viewer__slide p{font-size:15px}}.artifact-viewer__pdf-toolbar{border-bottom:1px solid var(--line);background:var(--panel);min-height:44px;color:var(--muted);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;gap:4px;padding:6px 10px;font-size:11px;display:flex}.artifact-viewer__pdf-toolbar button{min-width:30px;height:30px;font-size:11px}.artifact-viewer__pdf-toolbar button:disabled{cursor:not-allowed;opacity:.4}.artifact-viewer__toolbar-divider{background:var(--line);width:1px;height:18px;margin:0 4px}.artifact-viewer__pdf-stage{text-align:center;min-height:0;padding:24px;overflow:auto}.artifact-viewer__pdf-stage canvas{background:#fff;max-width:none;transition:opacity .12s;display:inline-block;box-shadow:0 16px 48px -24px #000000a6}.artifact-viewer__pdf-text{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.artifact-viewer__pdf-stage.is-rendering canvas{opacity:.55}.hljs-comment,.hljs-quote{color:var(--muted);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-section,.hljs-link{color:var(--accent)}.hljs-string,.hljs-title,.hljs-name,.hljs-type,.hljs-attribute,.hljs-symbol,.hljs-bullet,.hljs-addition{color:var(--success)}.hljs-number,.hljs-meta,.hljs-built_in,.hljs-builtin-name,.hljs-params{color:var(--activity-accent)}.hljs-deletion{color:var(--danger)}@media (width<=820px){.artifact-viewer{z-index:40;border-left:0;min-height:100dvh;position:fixed;inset:0}.artifact-viewer__header{min-height:calc(64px + var(--safe-area-top));padding-top:calc(10px + var(--safe-area-top));padding-right:calc(12px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.artifact-viewer__identity small{display:none}.artifact-viewer__document{border:0;border-radius:0;min-height:100%;margin:0}}@media (prefers-reduced-motion:reduce){.artifact-viewer{transition:none}.artifact-viewer__spinner{animation-duration:1.4s}}.modal-scrim{z-index:50;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#05080f8a;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.modal-backdrop{background:0 0;border:0;position:absolute;inset:0}.modal-backdrop:focus{outline:0}.profile-modal{z-index:1;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius-xl);width:min(480px,100%);box-shadow:var(--key-edge), var(--shadow);animation:.15s ease-out settings-modal-fade;position:relative;overflow:hidden}.profile-modal>header{justify-content:space-between;align-items:flex-start;gap:12px;padding:18px 20px 4px;display:flex}.profile-modal>header p{color:var(--muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;margin:0 0 4px;font-size:10px;font-weight:600}.profile-modal>header h2{color:var(--text-strong);font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:20px;font-weight:700}.profile-modal>header>button{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);width:28px;height:28px;color:var(--muted);flex:none;place-items:center;font-size:16px;line-height:1;display:grid}.profile-modal>header>button:hover{background:var(--panel-3);color:var(--text-strong)}.create-modal{width:min(420px,100%)}.profile-form{gap:14px;padding:20px;display:grid}.profile-preview{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);align-items:center;gap:14px;padding:14px;display:flex}.profile-preview strong,.profile-preview span{display:block}.profile-preview strong{color:var(--text-strong);font-size:15px}.profile-preview span{color:var(--muted);font-size:13px}.field{gap:6px;display:grid}.field span{color:var(--muted);font-size:12px;font-weight:700}.field input,.field select{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);width:100%;height:38px;color:var(--text);padding:0 12px}.field select{cursor:pointer}.field input:focus,.field select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.check-field{align-items:center;gap:10px;display:flex}.check-field input{width:16px;height:16px;padding:0}.profile-status{color:var(--success);font-size:12px}.profile-status.error{color:var(--danger)}.profile-actions{justify-content:flex-end;gap:8px;padding-top:4px;display:flex}.person-picker{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);gap:4px;max-height:240px;padding:4px;display:grid;overflow-y:auto}.person-choice{border-radius:var(--radius-sm);width:100%;min-height:44px;color:var(--text);text-align:left;background:0 0;border:0;grid-template-columns:32px minmax(0,1fr);align-items:center;gap:10px;padding:6px 8px;display:grid}.person-choice:hover{background:var(--hover-strong)}.person-choice .dm-avatar{width:32px;height:32px}.person-choice strong,.person-choice small{text-overflow:ellipsis;white-space:nowrap;min-width:0;display:block;overflow:hidden}.person-choice strong{color:var(--text-strong);font-size:13px}.person-choice small{color:var(--muted);font-size:12px}.person-empty{color:var(--muted);padding:10px 8px;font-size:12px}.profile-actions .ghost-action,.profile-actions .primary-action,.profile-actions .danger-action{box-sizing:border-box;border-radius:var(--radius);white-space:nowrap;min-height:44px;box-shadow:var(--key-edge);flex:none;justify-content:center;align-items:center;padding:0 14px;font-weight:700;line-height:1;transition:background .12s,box-shadow 80ms,transform 80ms;display:inline-flex}.ghost-action{border:1px solid var(--line-strong);background:var(--panel);color:var(--text)}.primary-action{border:1px solid color-mix(in srgb, var(--accent) 70%, var(--text-strong));background:var(--accent);color:var(--accent-contrast)}.profile-actions .danger-action{border:1px solid color-mix(in srgb, var(--danger) 76%, var(--text-strong));background:var(--danger);color:#fff}.ghost-action:hover{background:var(--hover)}.primary-action:hover{background:var(--accent-hover)}.profile-actions .danger-action:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 86%, #000)}.profile-actions .ghost-action:disabled,.profile-actions .primary-action:disabled,.profile-actions .danger-action:disabled{cursor:default;opacity:.58}.profile-actions .ghost-action:active,.profile-actions .primary-action:active,.profile-actions .danger-action:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.delete-message-scrim{padding:20px}.delete-message-modal{width:min(520px,100%)}.delete-message-modal>header{padding-bottom:10px}.delete-message-content{gap:18px;padding:4px 20px 20px;display:grid}.delete-message-content>p{color:var(--text);margin:0;font-size:14px;line-height:1.5}.delete-message-preview{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel-2);grid-template-columns:36px minmax(0,1fr);align-items:start;gap:12px;padding:14px;display:grid}.delete-message-preview__content{min-width:0}.delete-message-preview>.avatar{border-radius:9px;width:36px;height:36px;margin:0}.delete-message-preview__meta{align-items:baseline;gap:8px;min-width:0;display:flex}.delete-message-preview__meta strong{color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.delete-message-preview__meta time{color:var(--muted);flex:none;font-size:11px}.delete-message-preview__body{max-height:128px;color:var(--text);overflow-wrap:anywhere;white-space:pre-wrap;margin-top:4px;font-size:14px;line-height:1.45;overflow:auto}.delete-message-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:0;display:grid}.delete-message-actions button{width:100%}@media (width<=520px){.delete-message-modal{width:100%}.delete-message-content,.delete-message-modal>header{padding-inline:16px}}.channel-settings-scrim{padding:20px}.channel-settings-modal{width:min(460px,100%)}.channel-settings-content{gap:18px;padding:14px 20px 20px;display:grid}.channel-settings-name{color:var(--text-strong);font-family:var(--font-display);font-size:16px;display:block}.channel-settings-content p{color:var(--muted);margin:6px 0 0;font-size:13px;line-height:1.5}.channel-settings-content .channel-settings-warning{border-left:3px solid var(--danger);background:color-mix(in srgb, var(--danger) 8%, var(--panel-2));color:var(--text);margin:0;padding:12px}.channel-settings-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:0;display:grid}.channel-settings-actions button{width:100%}@media (width<=520px){.channel-settings-content,.channel-settings-modal>header{padding-inline:16px}}.image-viewer-scrim{-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:#000000c7;padding:28px}.image-viewer{z-index:1;color:#fff;background:#07090f;border:1px solid #ffffff1f;border-radius:14px;grid-template-rows:auto minmax(0,1fr);width:min(1280px,100%);height:min(900px,100dvh - 56px);max-height:100%;animation:.15s cubic-bezier(.2,.8,.2,1) picker-in;display:grid;position:relative;overflow:hidden;box-shadow:0 34px 90px -34px #000000f2}.image-viewer>header{background:#ffffff0a;border-bottom:1px solid #ffffff1a;justify-content:space-between;align-items:center;gap:16px;min-height:52px;padding:10px 12px 10px 16px;display:flex}.image-viewer>header strong{color:#fff;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;overflow:hidden}.image-viewer>header div{flex-shrink:0;align-items:center;gap:8px;display:inline-flex}.image-viewer>header a{color:#fff;background:#ffffff14;border-radius:7px;align-items:center;height:30px;padding:0 10px;font-size:12px;font-weight:700;text-decoration:none;display:inline-flex}.image-viewer>header a:hover{background:#ffffff24}.image-viewer>header a:focus-visible,.image-viewer>header button:focus-visible{outline-offset:2px;outline:2px solid #fff}.image-viewer>header button{color:#ffffffc7;background:0 0;border:0;border-radius:7px;place-items:center;width:30px;height:30px;font-size:22px;line-height:1;display:grid}.image-viewer>header button:hover{color:#fff;background:#ffffff1f}.image-viewer-stage{place-items:center;min-height:0;padding:18px;display:grid}.image-viewer-stage img{object-fit:contain;background:#ffffff0a;border-radius:8px;max-width:100%;max-height:100%;display:block}@media (width<=720px),(height<=520px) and (orientation:landscape){.image-viewer-scrim{padding:0}.image-viewer{border:0;border-radius:0;width:100%;height:100dvh}.image-viewer>header{padding-top:calc(10px + var(--safe-area-top));padding-right:calc(12px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.image-viewer-stage{padding-right:calc(12px + var(--safe-area-right));padding-bottom:calc(12px + var(--safe-area-bottom));padding-left:calc(12px + var(--safe-area-left))}}.mobile-nav-toggle{top:calc(14px + var(--safe-area-top));left:calc(14px + var(--safe-area-left));z-index:30;border:1px solid var(--line-strong);background:var(--panel);width:38px;height:38px;color:var(--text);border-radius:10px;font-size:22px;line-height:1;display:none;position:fixed}.mobile-nav-toggle .bars{gap:3px;display:grid}.mobile-nav-toggle .bars i{background:currentColor;border-radius:2px;width:16px;height:2px;display:block}.mobile-nav-backdrop{display:none}@media (width<=1180px){.shell{grid-template-columns:72px 240px minmax(0,1fr)}.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open,.shell.sidebar-collapsed.search-open{grid-template-columns:72px 0 minmax(0,1fr)}.thread,.search-results{width:min(420px,100vw);box-shadow:var(--shadow);z-index:4;border-left:1px solid var(--line-strong);transition:transform .18s;position:fixed;inset:0 0 0 auto;transform:translate(100%)}.thread.open,.search-results{transform:translate(0)}.desktop-shell .thread,.desktop-shell .search-results{top:52px;bottom:0}}@media (width<=820px){.mobile-nav-toggle{place-items:center;display:grid}.shell,.shell.thread-open,.shell.search-open,.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open,.shell.sidebar-collapsed.search-open{grid-template-columns:1fr}.sidebar-collapsed .sidebar{opacity:1;pointer-events:none;transform:translate(calc(-100% - 72px))}.guild-rail,.sidebar{z-index:20;pointer-events:none;height:100dvh;transition:transform .18s;position:fixed;inset:0 auto 0 0;transform:translate(-100%)}.guild-rail{width:72px;padding-top:calc(14px + var(--safe-area-top));padding-bottom:calc(14px + var(--safe-area-bottom))}.sidebar{width:min(260px,100vw - 72px);left:72px;transform:translate(calc(-100% - 72px))}.nav-open .guild-rail,.nav-open .sidebar{pointer-events:auto;transform:translate(0,0)}.nav-open .guild-rail{padding-top:calc(62px + var(--safe-area-top))}.desktop-shell .guild-rail,.desktop-shell .sidebar{height:calc(100dvh - 52px);top:52px}.desktop-shell.nav-open .guild-rail{padding-top:calc(14px + var(--safe-area-top))}.desktop-shell .mobile-nav-backdrop{top:52px}.mobile-nav-backdrop{z-index:15;background:#05081075;border:0;padding:0;display:block;position:fixed;inset:0 0 0 min(332px,100vw)}.topbar{min-height:calc(60px + var(--safe-area-top));padding-top:calc(12px + var(--safe-area-top));padding-right:calc(20px + var(--safe-area-right));padding-left:calc(64px + var(--safe-area-left))}.search{width:180px}}@media (width<=520px){.search,.topbar-meta,.topbar-divider{display:none}}.message-row.highlight,.thread-root.highlight,.reply.highlight{animation:1.4s ease-out quote-flash}@keyframes quote-flash{0%{background:color-mix(in srgb, var(--accent) 22%, transparent)}to{background:0 0}}.quote-block{color:inherit;cursor:pointer;text-align:left;max-width:100%;font:inherit;background:0 0;border:0;border-radius:6px;align-items:stretch;gap:.5rem;margin:0 0 .35rem;padding:.25rem .5rem .25rem 0;display:inline-flex}.quote-block:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 8%, transparent)}.quote-block:disabled{cursor:default;opacity:.75}.quote-block .quote-bar{background:var(--accent);border-radius:2px;flex:0 0 3px;align-self:stretch;width:3px}.quote-block .quote-content{flex-direction:column;gap:.1rem;min-width:0;display:flex}.quote-block .quote-author{color:var(--accent);font-size:.78rem;font-weight:600}.quote-block .quote-snippet{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;max-width:56ch;font-size:.85rem;overflow:hidden}.quote-block .quote-snippet.muted{opacity:.75;font-style:italic}.quote-preview{background:color-mix(in srgb, var(--accent) 5%, transparent);border:0;border-bottom:1px solid var(--line);color:var(--muted);border-radius:0;align-items:center;gap:.5rem;margin:0;padding:6px 10px 6px 12px;font-size:12.5px;display:flex}.quote-preview .quote-bar{display:none}.quote-preview-body{flex:1;align-items:baseline;gap:.4rem;min-width:0;display:flex;overflow:hidden}.quote-preview-label{color:color-mix(in srgb, var(--accent) 85%, var(--text));white-space:nowrap;font-size:12px}.quote-preview-label strong{color:var(--text-strong);font-weight:600}.quote-preview-snippet{white-space:nowrap;text-overflow:ellipsis;color:var(--muted);flex:1;min-width:0;font-size:12px;overflow:hidden}.quote-preview-clear{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:2px 6px;font-size:16px;line-height:1;transition:background .1s,color .1s}.quote-preview-clear:hover{color:var(--text-strong);background:var(--hover-strong)}.reply-quote-btn{color:var(--muted);cursor:pointer;opacity:0;background:0 0;border:0;margin-left:auto;padding:0 .3rem;font-size:.95rem;transition:opacity .15s;position:relative}.reply:hover .reply-quote-btn,.thread-root:hover .reply-quote-btn,.reply-quote-btn:focus-visible{opacity:1}.reply-quote-btn:hover{color:var(--accent)}.tooltip{position:relative}.tooltip:before,.reply-quote-btn:before{content:attr(data-tooltip);z-index:20;background:var(--tooltip-bg);color:var(--tooltip-fg);white-space:nowrap;opacity:0;pointer-events:none;border-radius:9px;padding:.42rem .62rem;font-size:.78rem;font-weight:700;line-height:1;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 12px);left:50%;transform:translate(-50%,4px)scale(.96);box-shadow:0 10px 28px #00000047}.tooltip:after,.reply-quote-btn:after{content:"";z-index:20;background:var(--tooltip-bg);opacity:0;pointer-events:none;border-radius:2px;width:12px;height:12px;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 5px);left:50%;transform:translate(-50%,4px)rotate(45deg)scale(.9)}.tooltip:hover:before,.tooltip:focus-visible:before,.reply-quote-btn:hover:before,.reply-quote-btn:focus-visible:before,.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{opacity:1;transform:translate(-50%)scale(1)}.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{transform:translate(-50%)rotate(45deg)scale(1)}.tooltip-align-end:before{transform-origin:100% 100%;left:auto;right:0;transform:translateY(4px)scale(.96)}.tooltip-align-end:hover:before,.tooltip-align-end:focus-visible:before{transform:translateY(0)scale(1)}.settings-modal-scrim{z-index:1000;color:var(--text);-webkit-font-smoothing:antialiased;background:var(--lightningcss-light,#080a0e6b)var(--lightningcss-dark,#0000008c);place-items:center;font-size:14px;line-height:1.5;animation:.15s ease-out settings-modal-fade;display:grid;position:fixed;inset:0}@keyframes settings-modal-fade{0%{opacity:0}to{opacity:1}}.settings-modal{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);width:min(1100px,96vw);height:min(760px,92vh);box-shadow:var(--shadow);grid-template-columns:232px minmax(0,1fr);display:grid;position:relative;overflow:hidden}.settings-modal__close{z-index:6;width:28px;height:28px;color:var(--muted);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:0;place-items:center;transition:background .12s,color .12s;display:grid;position:absolute;top:14px;right:14px}.settings-modal__close:hover{background:var(--hover);color:var(--text-strong)}.settings-modal__rail{background:var(--panel-2);border-right:1px solid var(--line);flex-direction:column;padding:16px 10px;display:flex;overflow-y:auto}.settings-modal__rail-group+.settings-modal__rail-group{margin-top:14px}.settings-modal__rail-heading{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0;padding:6px 8px 4px;font-size:10px;font-weight:600}.settings-modal__rail ul{margin:0;padding:0;list-style:none}.settings-modal__rail-item{border-radius:var(--radius-sm);cursor:pointer;width:100%;font:inherit;color:var(--text);text-align:left;background:0 0;border:0;align-items:center;gap:10px;margin:1px 0;padding:6px 10px;font-size:13.5px;line-height:1.4;transition:background .1s,color .1s;display:flex}.settings-modal__rail-item:hover{background:var(--hover)}.settings-modal__rail-item.is-active{background:var(--hover-strong);color:var(--text-strong);font-weight:600}.settings-modal__rail-icon{width:16px;height:16px;color:var(--muted);flex-shrink:0;place-items:center;display:grid}.settings-modal__rail-icon svg{width:16px;height:16px;display:block}.settings-modal__rail-item.is-active .settings-modal__rail-icon{color:var(--text-strong)}.settings-modal__rail-avatar{color:#fff;background:linear-gradient(135deg, hsl(var(--hue,220deg) 70% 55%), hsl(calc(var(--hue,220deg) + 40deg) 70% 45%));border-radius:4px;flex-shrink:0;place-items:center;width:18px;height:18px;font-size:9px;font-weight:700;display:grid;overflow:hidden}.settings-modal__rail-avatar img{object-fit:cover;width:100%;height:100%;display:block}.settings-modal__rail-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.settings-modal__content{background:var(--panel);color:var(--text);padding:40px 56px 56px;overflow-y:auto}.settings-modal__content .settings-page__header{margin-bottom:32px}.settings-modal__content .settings-page__eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0 0 6px;font-size:10px;font-weight:600}.settings-modal__content .settings-page__h1{letter-spacing:-.01em;color:var(--text-strong);font-size:26px;font-weight:700;line-height:1.2;font-family:var(--font-display);margin:0 0 6px}.settings-modal__content .settings-page__lead{color:var(--muted);margin:0;font-size:14px;line-height:1.5}.settings-modal__content .settings-form{flex-direction:column;gap:24px;max-width:640px;display:flex}.settings-modal__content .settings-footer{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;margin-top:8px;padding-top:20px;display:flex}.settings-modal__content .settings-footer__spacer{flex:1}.settings-modal__content .settings-section{flex-direction:column;gap:20px;display:flex}.settings-modal__content .settings-section__h{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 4px;font-size:12px;font-weight:600}.settings-modal__content .settings-field{flex-direction:column;gap:6px;display:flex}.settings-modal__content .settings-field__label{color:var(--text-strong);font-size:13px;font-weight:600}.settings-modal__content .settings-field__hint{color:var(--muted);margin:0;font-size:12.5px;line-height:1.5}.settings-modal__content .settings-field__hint.is-error{color:var(--danger)}.settings-modal__content .settings-identity{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);align-items:center;gap:14px;padding:14px 16px;display:flex}.settings-modal__content .settings-identity__meta{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.settings-modal__content .settings-identity__name{color:var(--text-strong);white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:700;line-height:1.25;overflow:hidden}.settings-modal__content .settings-identity__handle{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:13px;line-height:1.3;overflow:hidden}.settings-modal__content .settings-identity__tag{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:999px;flex-shrink:0;padding:3px 8px;font-size:10px;font-weight:600}.settings-modal__content .settings-rows{flex-direction:column;display:flex}.settings-modal__content .settings-rows--sectioned .settings-row2{border-top:0;align-items:center;padding:12px 0}.settings-modal__content .settings-row2{border-top:1px solid var(--line);grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:32px;padding:20px 0;display:grid}.settings-modal__content .settings-row2--toggle{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px}.settings-modal__content .settings-row2:first-child{border-top:0;padding-top:4px}.settings-modal__content .settings-row2__desc{min-width:0}.settings-modal__content .settings-row2__label{color:var(--text-strong);margin-bottom:4px;font-size:13.5px;font-weight:600;display:block}.settings-modal__content .settings-row2__hint{color:var(--muted);margin:0;font-size:12.5px;line-height:1.5}.settings-modal__content .settings-row2__control{flex-direction:column;align-items:flex-start;gap:8px;min-width:0;max-width:380px;display:flex}.settings-modal__content .settings-row2__control--end{flex-direction:row;justify-content:center;align-items:flex-end;max-width:none}.settings-modal__content .settings-rows__head{border-top:1px solid var(--line);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0;padding:24px 0 12px;font-size:11px;font-weight:600}.settings-modal__content .settings-rows__head:first-child{border-top:0;padding-top:4px}.settings-modal__content .settings-rows__head+.settings-row2{border-top:0;padding-top:0}.settings-modal__content .settings-input-group{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);align-items:stretch;width:100%;transition:border-color .12s,box-shadow .12s,background .12s;display:flex}.settings-modal__content .settings-input-group:hover{border-color:var(--line-strong)}.settings-modal__content .settings-input-group:focus-within{border-color:var(--accent);background:var(--panel);box-shadow:0 0 0 3px var(--accent-soft)}.settings-modal__content .settings-input-group__prefix{color:var(--muted);border-right:1px solid var(--line);background:var(--panel-2);border-radius:var(--radius-sm) 0 0 var(--radius-sm);place-items:center;padding:0 10px;font-size:14px;font-weight:500;display:grid}.settings-modal__content .settings-input--in-group{box-shadow:none!important;border-radius:0 var(--radius-sm) var(--radius-sm) 0!important;background:0 0!important;border:0!important;max-width:none!important}.settings-modal__content .settings-input--in-group:focus{box-shadow:none!important;background:0 0!important;border:0!important}.settings-modal__content .settings-linklike{color:var(--muted);cursor:pointer;font:inherit;text-underline-offset:2px;background:0 0;border:0;padding:2px 0;font-size:12.5px;text-decoration:underline;transition:color .12s}.settings-modal__content .settings-linklike:hover{color:var(--text-strong)}.settings-modal__content .settings-row{grid-template-columns:1fr auto;align-items:center;gap:24px;display:grid}.settings-modal__content .settings-row__main{min-width:0}.settings-modal__content .settings-row__label{color:var(--text-strong);margin-bottom:2px;font-size:13.5px;font-weight:600}.settings-modal__content .settings-row__hint{color:var(--muted);font-size:12.5px;line-height:1.5}.settings-modal__content .settings-row__hint.is-error{color:var(--danger)}.settings-modal__content .settings-input{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;max-width:420px;height:36px;color:var(--text);font:inherit;padding:0 12px;font-size:14px;transition:border-color .12s,box-shadow .12s,background .12s}.settings-modal__content .settings-input:hover{border-color:var(--line-strong)}.settings-modal__content .settings-input:focus{border-color:var(--accent);background:var(--panel);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.settings-modal__content .settings-input--wide{max-width:560px}.settings-modal__content .settings-row .settings-input{width:auto;min-width:240px;max-width:320px}.settings-modal__content .settings-button{background:var(--panel-2);height:34px;color:var(--text);border:1px solid var(--line-strong);border-radius:var(--radius);font:inherit;cursor:pointer;white-space:nowrap;box-shadow:var(--key-edge);justify-content:center;align-items:center;gap:6px;padding:0 14px;font-size:13.5px;font-weight:600;transition:background .1s,border-color .1s,box-shadow 80ms,transform 80ms;display:inline-flex}.settings-modal__content .settings-button:hover{background:var(--panel-3);border-color:var(--line-strong)}.settings-modal__content .settings-button:active:not(:disabled){box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.settings-modal__content .settings-button:focus-visible{box-shadow:0 0 0 3px var(--accent-soft);outline:0}.settings-modal__content .settings-button:disabled{opacity:.55;cursor:not-allowed}.settings-modal__content .settings-button--primary{background:var(--accent);color:var(--accent-contrast);border-color:color-mix(in srgb, var(--accent) 70%, var(--text-strong))}.settings-modal__content .settings-button--primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.settings-modal__content .settings-switch{appearance:none;background:var(--line-strong);cursor:pointer;border:0;border-radius:9px;flex-shrink:0;width:32px;height:18px;margin:0;transition:background .15s;position:relative}.settings-modal__content .settings-switch:checked{background:var(--accent)}.settings-modal__content .settings-switch:disabled{opacity:.5;cursor:not-allowed}.settings-modal__content .settings-switch:after{content:"";background:#fff;border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.settings-modal__content .settings-switch:checked:after{transform:translate(14px)}.settings-modal__content .settings-switch:focus-visible{box-shadow:0 0 0 3px var(--accent-soft);outline:0}.settings-modal__content .settings-actions{justify-content:flex-end;align-items:center;gap:12px;margin-top:4px;display:flex}.settings-modal__content .settings-status{color:var(--muted);margin:0;font-size:13px}.settings-modal__content .settings-status.is-error{color:var(--danger)}@media (width<=720px){.settings-modal{border-radius:0;grid-template-rows:auto 1fr;grid-template-columns:1fr;width:100vw;height:100dvh}.settings-modal__rail{border-right:0;border-bottom:1px solid var(--line);flex-direction:row;padding:8px;overflow-x:auto}.settings-modal__content{padding:24px 20px 60px}.settings-modal__content .settings-row2{grid-template-columns:1fr;gap:10px}.settings-modal__content .settings-row2__control{max-width:none}}.ws-settings{color:var(--text);z-index:50;background:var(--lightningcss-light,#0f0f0f38)var(--lightningcss-dark,#00000059);place-items:center;padding:28px 80px 28px 28px;font-size:14px;line-height:1.5;display:grid;position:fixed;inset:0}.ws-settings__panel{background:var(--panel);border:1px solid var(--line);width:100%;max-width:1400px;height:100%;box-shadow:var(--shadow);grid-template-columns:260px minmax(0,1fr);display:grid;overflow:hidden}.ws-settings__rail{background:var(--panel-2);border-right:1px solid var(--line);flex-direction:column;padding:14px 10px 18px;display:flex;overflow-y:auto}.ws-settings__rail-search{margin:2px 4px 12px;position:relative}.ws-settings__rail-search-icon{color:var(--muted);pointer-events:none;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.ws-settings__rail-search-icon svg{width:14px;height:14px;display:block}.ws-settings__rail-search-input{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;height:32px;color:var(--text);font:inherit;padding:0 12px 0 32px;font-size:13px}.ws-settings__rail-search-input::placeholder{color:var(--muted)}.ws-settings__rail-search-input:disabled{cursor:not-allowed;opacity:.65}.ws-settings__rail-group{margin-top:6px}.ws-settings__rail-heading{color:var(--muted);letter-spacing:.02em;margin:0;padding:8px 10px 6px;font-size:11.5px;font-weight:600}.ws-settings__rail-heading-name{color:var(--text-strong);font-weight:700}.ws-settings__rail-list{margin:0;padding:0;list-style:none}.ws-settings__rail-item{border-radius:var(--radius-sm);cursor:pointer;width:100%;font:inherit;color:var(--text);text-align:left;background:0 0;border:0;align-items:center;gap:10px;margin:1px 0;padding:6px 10px;font-size:14px;line-height:1.4;transition:background .1s,color .1s;display:flex}.ws-settings__rail-item:hover{background:var(--hover)}.ws-settings__rail-item.is-active{background:var(--hover-strong);color:var(--text-strong);font-weight:600}.ws-settings__rail-item-icon{width:16px;height:16px;color:var(--muted);flex-shrink:0;place-items:center;display:grid}.ws-settings__rail-item-icon svg{width:16px;height:16px;display:block}.ws-settings__rail-item.is-active .ws-settings__rail-item-icon{color:var(--text-strong)}.ws-settings__rail-item-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.ws-settings__content{background:var(--bg);position:relative;overflow-y:auto}.ws-settings__content-inner{max-width:740px;padding:56px 80px 80px}.ws-settings__close{border:1px solid var(--line-strong);background:var(--panel);width:36px;height:36px;color:var(--text-strong);cursor:pointer;z-index:60;border-radius:50%;place-items:center;transition:background .12s,color .12s,border-color .12s;display:grid;position:fixed;top:28px;right:22px;box-shadow:0 1px 3px #00000026}@media (width<=760px){.ws-settings{padding:0}.ws-settings__panel{border:0;border-radius:0;max-width:none}}.ws-settings__close:hover{background:var(--panel-2);color:var(--text-strong);border-color:var(--line-strong)}.ws-settings__error{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);color:var(--danger);margin:0 0 20px;padding:14px 16px;font-size:13.5px}.ws-settings .ws-page__header{margin-bottom:32px}.ws-settings .ws-page__h1{letter-spacing:-.01em;color:var(--text-strong);font-size:28px;font-weight:700;line-height:1.2;font-family:var(--font-display);margin:0 0 8px}.ws-settings .ws-page__lead{color:var(--muted);margin:0;font-size:14px;line-height:1.5}.workspace-settings-empty{background:var(--panel-2);border:1px dashed var(--line);border-radius:var(--radius);color:var(--muted);padding:24px;font-size:14px;line-height:1.6}.workspace-settings-empty p{margin:0}.ws-section{border-top:1px solid var(--line);flex-direction:column;margin-top:24px;display:flex}.ws-section__h{color:var(--text-strong);margin:0;padding:18px 0 6px;font-size:14px;font-weight:700}.ws-row{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;padding:18px 0;display:grid}.ws-section>.ws-row:first-child,.ws-section>.ws-section__h+.ws-row{border-top:0}.ws-row__main{min-width:0}.ws-row__label{color:var(--text-strong);margin-bottom:4px;font-size:14px;font-weight:600}.ws-row__hint{color:var(--muted);font-size:13px;line-height:1.5}.ws-row__hint b{color:var(--text-strong);font-weight:600}.ws-row__value{color:var(--text-strong);text-align:right;word-break:break-word;max-width:320px;font-size:14px;font-weight:500}.ws-row__control{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;min-width:0;max-width:420px;display:flex}.ws-strip{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);align-items:center;gap:12px;margin-bottom:8px;padding:10px 14px;font-size:14px;display:flex}.ws-strip__avatar{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));width:28px;height:28px;color:var(--brand-contrast);border-radius:6px;flex-shrink:0;place-items:center;font-size:12px;font-weight:700;display:grid;overflow:hidden}.ws-strip__avatar img{object-fit:cover;width:100%;height:100%;display:block}.ws-strip__name{color:var(--text-strong);font-weight:600}.ws-strip__pill{letter-spacing:.01em;border-radius:999px;margin-left:auto;padding:2px 10px;font-size:12px;font-weight:600}.ws-strip__pill--owner{background:color-mix(in srgb, var(--success) 15%, transparent);color:var(--success);border:1px solid color-mix(in srgb, var(--success) 32%, transparent)}.ws-strip__pill--moderator{background:color-mix(in srgb, var(--delivery-accent) 15%, transparent);color:var(--delivery-accent);border:1px solid color-mix(in srgb, var(--delivery-accent) 32%, transparent)}.ws-strip__pill--member,.ws-strip__pill--guest,.ws-strip__pill--bot{background:var(--panel-3,var(--hover));color:var(--text);border:1px solid var(--line)}.ws-input{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm);width:220px;max-width:100%;height:34px;color:var(--text-strong);font:inherit;padding:0 12px;font-size:14px}.ws-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.ws-input:disabled{opacity:.65;cursor:not-allowed}.ws-select{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm);width:220px;max-width:100%;height:34px;color:var(--text-strong);font:inherit;padding:0 34px 0 10px;font-size:13.5px}.ws-select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.ws-select:disabled{opacity:.65;cursor:not-allowed}.ws-file{display:none}.ws-actions{border-top:1px solid var(--line);justify-content:flex-end;align-items:center;gap:12px;padding:14px 0 0;display:flex}.ws-status{min-height:20px;color:var(--muted);flex:1;margin:0;font-size:13px}.ws-status.is-error{color:var(--danger)}.ws-input[readonly]{cursor:default;color:var(--text)}.ws-btn{background:var(--panel-2);border:1px solid var(--line-strong);border-radius:var(--radius);height:34px;color:var(--text-strong);font:inherit;cursor:pointer;box-shadow:var(--key-edge);padding:0 14px;font-size:13.5px;font-weight:500;transition:background .12s,color .12s,border-color .12s,box-shadow 80ms,transform 80ms}.ws-btn:active:not(:disabled){box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.ws-btn:hover:not(:disabled){background:var(--panel-3,var(--hover-strong));border-color:var(--line-strong)}.ws-btn:disabled{opacity:.55;cursor:not-allowed}.ws-btn--danger{color:var(--danger);border-color:var(--line)}.ws-btn--danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 9%, transparent);border-color:var(--danger)}.ws-btn--primary{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, var(--text-strong));color:var(--accent-contrast);align-items:center;gap:6px;display:inline-flex}.ws-btn--primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.ws-btn--primary svg{width:14px;height:14px}.ws-settings__content:has(.ws-members-page){overflow:hidden}.ws-settings__content-inner:has(.ws-members-page){flex-direction:column;max-width:none;height:100%;min-height:0;padding:56px 80px 28px;display:flex}.ws-members-page{flex-direction:column;flex:1;min-height:0;display:flex}.ws-members-page__header{flex:none}.ws-members__toolbar{background:var(--bg);border-bottom:1px solid var(--line);flex-wrap:wrap;flex:none;justify-content:space-between;align-items:center;gap:16px;margin:4px 0 12px;padding:14px 0 12px;display:flex}.ws-members__count{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:12.5px;font-weight:600}.ws-members__controls{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.ws-members__search{align-items:center;display:flex;position:relative}.ws-members__search-icon{width:14px;height:14px;color:var(--muted);pointer-events:none;display:inline-flex;position:absolute;left:10px}.ws-members__search-icon svg{width:100%;height:100%}.ws-members__search-input{width:220px;height:34px;color:var(--text);background:var(--panel-2);border:1px solid var(--line);border-radius:6px;outline:none;padding:0 12px 0 32px;font-size:13px}.ws-members__search-input::-webkit-search-cancel-button{appearance:none}.ws-members__search-input:focus{border-color:var(--accent)}.ws-members__role-select{height:34px;color:var(--text);background:var(--panel-2);border:1px solid var(--line);cursor:pointer;border-radius:6px;outline:none;padding:0 28px 0 10px;font-size:13px}.ws-members__list{border:1px solid var(--line);background:var(--panel);border-radius:6px;flex:auto;min-height:0;overflow:hidden auto}.ws-members__row{border-bottom:1px solid var(--line);box-sizing:border-box;grid-template-columns:36px 1fr auto auto;align-items:center;gap:14px;padding:0 16px;display:grid}.ws-members__avatar{letter-spacing:-.02em;background:var(--accent-soft);width:36px;height:36px;color:var(--accent);border-radius:7px;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;font-weight:600;display:inline-flex;overflow:hidden}.ws-members__avatar--bot{background:color-mix(in srgb, var(--warn) 18%, transparent);color:color-mix(in srgb, var(--warn) 72%, var(--text))}.ws-members__avatar img{object-fit:cover;width:100%;height:100%}.ws-members__main{flex-direction:column;gap:2px;min-width:0;display:flex}.ws-members__name{color:var(--text-strong,var(--text));white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;overflow:hidden}.ws-members__meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:6px;font-size:12.5px;display:flex;overflow:hidden}.ws-members__handle{font-family:var(--font-mono);color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:1px 6px;font-size:12px}.ws-members__dot{opacity:.6}.ws-members__pill{text-transform:capitalize;color:var(--text);white-space:nowrap;background:#7f7f7f24;border-radius:999px;padding:3px 10px;font-size:11.5px;font-weight:600}.ws-members__pill--owner{background:color-mix(in srgb, var(--success) 16%, transparent);color:var(--success)}.ws-members__pill--moderator{background:color-mix(in srgb, var(--delivery-accent) 16%, transparent);color:var(--delivery-accent)}.ws-members__pill--bot{background:var(--accent-soft);color:var(--accent)}.ws-members__pill--guest{background:color-mix(in srgb, var(--warn) 18%, transparent);color:color-mix(in srgb, var(--warn) 72%, var(--text))}.ws-members__actions{width:28px;height:28px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.ws-members__actions:hover:not(:disabled){background:var(--bg);border-color:var(--line);color:var(--text)}.ws-members__actions:disabled{opacity:.45;cursor:not-allowed}.ws-members__empty{text-align:center;border:1px dashed var(--line);color:var(--muted);background:var(--panel);border-radius:8px;margin-top:24px;padding:36px 20px;font-size:13.5px}.ws-members__loading{color:var(--muted);text-align:center;border-top:1px solid var(--line);padding:10px 16px;font-size:12.5px}.ws-members__row--skeleton{height:64px}.ws-members__skeleton{background:linear-gradient(90deg,#7f7f7f14,#7f7f7f2e,#7f7f7f14) 0 0/200% 100%;border-radius:6px;animation:1.4s ease-in-out infinite ws-members-shimmer}.ws-members__skeleton--line{height:10px;margin:4px 0}.ws-members__skeleton--pill{border-radius:999px;width:64px;height:18px}@keyframes ws-members-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (width<=760px){.ws-settings__panel{grid-template-rows:auto 1fr;grid-template-columns:1fr}.ws-settings__rail{border-right:0;border-bottom:1px solid var(--line);padding:10px}.ws-settings__content-inner{padding:32px 20px 60px}.ws-settings__close{top:10px;right:12px}}.ws-bots-page{flex-direction:column;gap:0;display:flex}.ws-bots__toolbar{background:var(--bg);border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin:4px 0 12px;padding:14px 0 12px;display:flex}.ws-bots__count{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:12.5px;font-weight:600}.ws-bots__toolbar-actions{align-items:center;gap:8px;display:flex}.ws-bots__panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;margin:8px 0 16px;padding:18px 20px}.ws-bots__empty{text-align:center;border:1px dashed var(--line);color:var(--muted);background:var(--surface);border-radius:8px;margin-top:16px;padding:36px 20px;font-size:13.5px}.ws-bots__list{flex-direction:column;margin-bottom:60px;display:flex}.ws-bots__row{border-bottom:1px solid var(--line)}.ws-bots__row:last-child{border-bottom:0}.ws-bots__row.is-expanded{background:var(--surface)}.ws-bots__row-main{text-align:left;cursor:pointer;width:100%;color:inherit;background:0 0;border:0;grid-template-columns:36px 1fr auto auto;align-items:center;gap:14px;padding:14px 16px;display:grid}.ws-bots__row-main:hover{background:var(--hover,#7f7f7f0f)}.ws-bots__row-text{flex-direction:column;gap:2px;min-width:0;display:flex}.ws-bots__row-name{color:var(--text-strong,var(--text));white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;overflow:hidden}.ws-bots__row-meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:6px;font-size:12.5px;display:flex;overflow:hidden}.ws-bots__owner-pill{color:var(--text);white-space:nowrap;background:#7f7f7f24;border-radius:999px;padding:3px 10px;font-size:11.5px;font-weight:600}.ws-bots__owner-pill--service{background:color-mix(in srgb, var(--delivery-accent) 16%, transparent);color:var(--delivery-accent)}.ws-bots__owner-pill--user{background:color-mix(in srgb, var(--warn) 18%, transparent);color:color-mix(in srgb, var(--warn) 72%, var(--text))}.ws-bots__chevron{width:20px;height:20px;color:var(--muted);justify-content:center;align-items:center;display:inline-flex}.ws-bots__detail{border-top:1px dashed var(--line);flex-direction:column;gap:12px;padding:4px 16px 18px;display:flex}.ws-bots__detail-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;padding-top:14px;display:flex}.ws-bots__detail-title{color:var(--text-strong,var(--text));margin:0 0 4px;font-size:13.5px;font-weight:600}.ws-bots__detail-hint{color:var(--muted);max-width:60ch;margin:0;font-size:12.5px}.ws-bots__detail-actions{flex-wrap:wrap;gap:8px;display:flex}.ws-bots__detail-empty{color:var(--muted);background:var(--bg);border:1px dashed var(--line);border-radius:6px;margin:0;padding:16px;font-size:13px}.ws-bots__token-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.ws-bots__token-row{background:var(--bg);border:1px solid var(--line);border-radius:6px;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px 16px;padding:12px 14px;display:flex}.ws-bots__token-row>.ws-btn{flex-shrink:0}.ws-bots__token-main{flex-direction:column;flex:240px;gap:4px;min-width:0;display:flex}.ws-bots__token-name{color:var(--text-strong,var(--text));font-size:13.5px;font-weight:600}.ws-bots__token-meta{color:var(--muted);font-size:12.5px}.ws-bots__scope-row{flex-wrap:wrap;gap:6px;margin-top:2px;display:flex}.ws-bots__scope-chip{font-family:var(--font-mono);background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:999px;padding:2px 8px;font-size:11.5px}.ws-bots__scope-chip--bundle{color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, transparent);border-color:color-mix(in srgb, var(--accent) 35%, transparent);font-family:inherit;font-weight:600}.ws-bots__scope-toggle{color:var(--muted);text-underline-offset:2px;cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:11.5px;text-decoration:underline}.ws-bots__scope-toggle:hover{color:var(--text)}.ws-bots__scope-details{margin-top:6px}.ws-bots__scope-details>summary{color:var(--muted);cursor:pointer;width:fit-content;font-size:11.5px}.ws-bots__scope-details[open]>summary{margin-bottom:6px}.ws-bots__form{flex-direction:column;gap:16px;display:flex}.ws-bots__form-header{flex-direction:column;gap:4px;display:flex}.ws-bots__form-title{color:var(--text-strong,var(--text));margin:0;font-size:16px;font-weight:600}.ws-bots__form-hint{color:var(--muted);max-width:60ch;margin:0;font-size:13px}.ws-bots__form-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (width<=640px){.ws-bots__form-grid{grid-template-columns:1fr}}.ws-bots__form-field{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:0;display:flex}.ws-bots__form-label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.ws-bots__form-input{height:34px;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:6px;outline:none;padding:0 12px;font-size:13.5px}.ws-bots__form-input:focus{border-color:var(--accent)}.ws-bots__form-handle{background:var(--surface);border:1px solid var(--line);border-radius:6px;align-items:center;gap:6px;padding:0 10px;display:flex}.ws-bots__form-handle span{color:var(--muted);font-family:var(--font-mono);font-size:13px}.ws-bots__form-handle .ws-bots__form-input{background:0 0;border:0;flex:1;padding-left:0}.ws-bots__choices{flex-direction:column;gap:8px;display:flex}.ws-bots__choice{border:1px solid var(--line);background:var(--surface);cursor:pointer;border-radius:6px;grid-template-rows:auto auto;grid-template-columns:18px 1fr;gap:2px 10px;padding:10px 12px;display:grid}.ws-bots__choice.is-active{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 7%, transparent)}.ws-bots__choice input{accent-color:var(--accent);grid-row:1/span 2;align-self:center}.ws-bots__choice-title{color:var(--text-strong,var(--text));font-size:13.5px;font-weight:600}.ws-bots__choice-hint{color:var(--muted);font-size:12.5px}.ws-bots__form-error{background:color-mix(in srgb, var(--danger) 9%, transparent);color:var(--danger);border:1px solid color-mix(in srgb, var(--danger) 32%, transparent);border-radius:6px;margin:0;padding:10px 12px;font-size:13px}.ws-bots__form-actions{justify-content:flex-end;gap:8px;display:flex}.ws-bots__token-form-panel{background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:14px}.ws-bots__token-form .ws-bots__choices{grid-template-columns:repeat(3,minmax(0,1fr));display:grid}@media (width<=720px){.ws-bots__token-form .ws-bots__choices{grid-template-columns:1fr}}.ws-bots__reveal{background:var(--surface);border:1px solid var(--accent);border-radius:8px;flex-direction:column;gap:14px;margin:8px 0 16px;padding:18px 20px;display:flex}.ws-bots__reveal-header{flex-direction:column;gap:4px;display:flex}.ws-bots__reveal-title{color:var(--text-strong,var(--text));margin:0;font-size:16px;font-weight:600}.ws-bots__reveal-hint{color:var(--muted);max-width:60ch;margin:0;font-size:13px}.ws-bots__reveal-hint code{background:var(--bg);border:1px solid var(--line);font-family:var(--font-mono);color:var(--text);white-space:nowrap;border-radius:4px;padding:1px 6px;font-size:12px}.ws-bots__reveal-field{flex-direction:column;gap:6px;display:flex}.ws-bots__reveal-label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.ws-bots__reveal-row{align-items:center;gap:8px;display:flex}.ws-bots__reveal-input{height:34px;font-family:var(--font-mono);color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:6px;flex:1;padding:0 12px;font-size:13px}.ws-bots__reveal-snippet-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.ws-bots__reveal-details{border:1px solid var(--line);background:var(--bg);border-radius:6px}.ws-bots__reveal-summary{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;cursor:pointer;-webkit-user-select:none;user-select:none;padding:10px 14px;font-size:11px;font-weight:600}.ws-bots__reveal-summary:hover{color:var(--text)}.ws-bots__reveal-details-body{gap:8px;padding:0 14px 12px;display:grid}.ws-bots__reveal-details-body .ws-bots__reveal-hint{margin:0}.ws-bots__setup-mode{background:var(--bg);border:1px solid var(--line);border-radius:6px;grid-template-columns:repeat(2,minmax(0,1fr));width:min(320px,100%);padding:3px;display:inline-grid}.ws-bots__setup-mode button{min-height:30px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:0 12px;font-size:12.5px;font-weight:600}.ws-bots__setup-mode button.is-active{background:var(--surface);color:var(--text);box-shadow:0 0 0 1px var(--line)}.ws-bots__reveal-snippet{background:var(--bg);border:1px solid var(--line);font-family:var(--font-mono);color:var(--text);white-space:pre-wrap;border-radius:6px;margin:0;padding:12px 14px;font-size:12.5px;overflow-x:auto}.ws-bots__reveal-ack{color:var(--text);align-items:center;gap:8px;font-size:13px;display:flex}.ws-bots__reveal-actions{justify-content:flex-end;display:flex}.ws-bots__my-list{flex-direction:column;gap:18px;display:flex}.ws-bots__my-group{flex-direction:column;gap:8px;display:flex}.ws-bots__my-group-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.ws-bots__my-group-title{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:0;font-size:13px;font-weight:600}.ws-bots__my-rows{border:1px solid var(--line);background:var(--surface);border-radius:6px;flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.ws-bots__my-row{border-bottom:1px solid var(--line);grid-template-columns:36px 1fr auto;align-items:center;gap:14px;padding:12px 14px;display:grid}.ws-bots__my-row:last-child{border-bottom:0}.ws-bots__my-row-text{flex-direction:column;gap:2px;min-width:0;display:flex}.ws-bots__my-row-name{color:var(--text-strong,var(--text));font-size:14px;font-weight:600}.ws-bots__my-row-meta{color:var(--muted);align-items:center;gap:6px;font-size:12.5px;display:flex}.appearance-preview{border:1px solid var(--line-strong);border-radius:var(--radius-lg);background:var(--bg);overflow:hidden}.appearance-preview__bar{border-bottom:1px solid var(--line);background:var(--panel);color:var(--text-strong);align-items:baseline;gap:8px;padding:9px 14px;font-size:12px;font-weight:700;display:flex}.appearance-preview__hash{color:var(--accent)}.appearance-preview__topic{color:var(--muted);font-size:11.5px;font-weight:500}.appearance-preview__chat{gap:14px;padding:14px 16px 16px;display:grid}.appearance-preview[data-density=compact] .appearance-preview__chat{gap:7px;padding:10px 14px 12px}.appearance-preview__msg{grid-template-columns:34px minmax(0,1fr);gap:10px;display:grid}.appearance-preview[data-density=compact] .appearance-preview__msg{grid-template-columns:24px minmax(0,1fr);gap:8px}.appearance-preview__avatar{background:var(--accent);width:34px;height:34px;color:var(--accent-contrast);border-radius:9px;place-items:center;font-size:14px;font-weight:700;display:grid}.appearance-preview[data-density=compact] .appearance-preview__avatar{border-radius:7px;width:24px;height:24px;font-size:11px}.appearance-preview__avatar.is-agent{background:var(--accent-2)}.appearance-preview__body{gap:3px;min-width:0;display:grid}.appearance-preview[data-density=compact] .appearance-preview__body{gap:1px}.appearance-preview__head{align-items:baseline;gap:7px;display:flex}.appearance-preview__who{color:var(--text-strong);font-size:13px;font-weight:700}.appearance-preview[data-density=compact] .appearance-preview__who{font-size:12px}.appearance-preview__when{color:var(--muted);font-size:10px}.appearance-preview__text{font-size:13px;line-height:1.5}.appearance-preview[data-density=compact] .appearance-preview__text{font-size:12.5px;line-height:1.4}.appearance-preview__activity{background:color-mix(in srgb, var(--accent-2) 9%, var(--panel));color:var(--muted);border-radius:7px 7px 0 0;margin-top:3px;padding:6px 10px;font-size:11.5px}.appearance-preview__activity code{color:var(--text-strong);font-family:var(--font-mono,ui-monospace, monospace);font-size:10.5px}.appearance-preview__answer{background:color-mix(in srgb, var(--accent) 7%, var(--panel));border-radius:0 0 7px 7px;padding:7px 10px 8px;font-size:13px;line-height:1.5}.appearance-preview[data-density=compact] .appearance-preview__activity{padding:4px 8px;font-size:11px}.appearance-preview[data-density=compact] .appearance-preview__answer{padding:5px 8px 6px;font-size:12.5px}.appearance-preview[data-layout=outlined] .appearance-preview__activity{border:1px solid color-mix(in srgb, var(--accent-2) 45%, var(--line));background:0 0;border-bottom:0}.appearance-preview[data-layout=outlined] .appearance-preview__answer{border:1px solid color-mix(in srgb, var(--accent) 40%, var(--line));background:0 0}.appearance-preview__reactions{gap:5px;margin-top:5px;display:flex}.appearance-preview[data-density=compact] .appearance-preview__reactions{margin-top:2px}.appearance-preview__reaction{border:1px solid var(--line);background:var(--panel);color:var(--muted);border-radius:999px;padding:2px 8px;font-size:11px}.appearance-preview__reaction.is-mine{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, var(--panel));color:var(--text-strong)}.appearance-preview__caption{color:var(--muted-2);text-align:right;margin:-14px 2px 0;font-size:11px}.appearance-rows{display:grid}.appearance-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;padding:14px 0;display:grid}.appearance-row+.appearance-row{border-top:1px solid var(--line)}.appearance-row__meta{gap:2px;display:grid}.appearance-row__label{color:var(--text-strong);font-size:13.5px;font-weight:650}.appearance-row__desc{color:var(--muted);font-size:12px}.appearance-row__control{align-items:center;gap:12px;display:inline-flex}.appearance-seg{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--panel-2);gap:2px;padding:2px;display:inline-flex}.appearance-seg__btn{color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;padding:5px 12px;font-size:12.5px;font-weight:600}.appearance-seg__btn:hover{color:var(--text-strong)}.appearance-seg__btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.appearance-seg__btn.is-active{border-color:var(--line-strong);background:var(--panel);color:var(--text-strong);box-shadow:0 1px 2px #10151d1a}.board-chips__name{min-width:44px;color:var(--muted);text-align:right;font-size:12px}.board-chips{align-items:center;gap:10px;display:inline-flex}.board-chip{border:1px solid var(--line-strong);background:linear-gradient(135deg, var(--panel) 52%, var(--accent) 52%);cursor:pointer;border-radius:8px;width:26px;height:26px;padding:0;position:relative}.board-chip:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.board-chip.is-active:after{content:"";border:2px solid var(--accent);border-radius:11px;position:absolute;inset:-5px}@media (width<=640px){.appearance-row{grid-template-columns:1fr;gap:10px}.appearance-row__control,.board-chips__name{text-align:left;justify-self:start}}.ws-intg-page{padding-bottom:60px}.ws-intg__app-icon{background:var(--surface);border:1px solid var(--line);width:36px;height:36px;color:var(--text);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.ws-intg__wizard{background:var(--surface);border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:16px;margin:8px 0 16px;padding:18px 20px;display:flex}.ws-intg__wizard-header{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.ws-intg__wizard-step{color:var(--muted);white-space:nowrap;padding-top:2px;font-size:11.5px;font-weight:600}.ws-intg__wizard-body{flex-direction:column;gap:14px;display:flex}.ws-intg__catalog{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;display:grid}.ws-intg__catalog-card{border:1px solid var(--line);text-align:left;cursor:pointer;color:inherit;background:0 0;border-radius:8px;flex-direction:column;align-items:flex-start;gap:8px;padding:16px;transition:border-color .12s,background .12s;display:flex}.ws-intg__catalog-card:hover{border-color:var(--accent);background:var(--hover,#7f7f7f0f)}.ws-intg__catalog-name{color:var(--text-strong,var(--text));font-size:14px;font-weight:600}.ws-intg__catalog-desc{color:var(--muted);font-size:12.5px;line-height:1.45}.ws-intg__chips{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.ws-intg__chip{background:color-mix(in srgb, var(--accent) 14%, transparent);color:var(--text);border-radius:999px;align-items:center;gap:6px;padding:3px 6px 3px 10px;font-size:12px;font-weight:600;display:inline-flex}.ws-intg__chip-remove{width:16px;height:16px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:50%;justify-content:center;align-items:center;font-size:13px;line-height:1;display:inline-flex}.ws-intg__chip-remove:hover{color:var(--text);background:#7f7f7f2e}.ws-intg__member-results{border:1px solid var(--line);background:var(--surface);border-radius:8px;flex-direction:column;gap:2px;max-height:220px;margin:6px 0 0;padding:4px;list-style:none;display:flex;overflow-y:auto}.ws-intg__member-result{text-align:left;cursor:pointer;width:100%;color:inherit;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:7px 10px;font-size:13px;display:flex}.ws-intg__member-result:hover{background:var(--hover,#7f7f7f14)}.ws-intg__toggle{cursor:pointer;align-items:flex-start;gap:10px;display:flex}.ws-intg__toggle input[type=checkbox]{flex-shrink:0;margin-top:3px}.ws-intg__toggle>span{flex-direction:column;gap:2px;display:flex}.ws-intg__panel{border:1px solid var(--line);background:var(--surface);border-radius:8px;flex-direction:column;gap:12px;padding:14px 16px;display:flex}.ws-intg__panel-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.ws-intg__panel-title{color:var(--text-strong,var(--text));margin:0 0 3px;font-size:13px;font-weight:600}.ws-intg__panel-hint{color:var(--muted);max-width:560px;margin:0;font-size:12.5px;line-height:1.45}.ws-intg__panel-empty{color:var(--muted);margin:0;font-size:12.5px}.ws-intg__inline-form{border:1px dashed var(--line);border-radius:8px;flex-direction:column;gap:12px;padding:14px;display:flex}.ws-intg__item-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.ws-intg__item-row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:14px;padding:11px 0;display:flex}.ws-intg__item-row:last-child{border-bottom:0}.ws-intg__item-row--stacked{flex-direction:column;align-items:stretch}.ws-intg__item-top{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.ws-intg__item-main{flex-direction:column;gap:4px;min-width:0;display:flex}.ws-intg__item-name{color:var(--text-strong,var(--text));font-size:13.5px;font-weight:600}.ws-intg__item-meta{color:var(--muted);overflow-wrap:anywhere;font-size:12px}.ws-intg__url{font-family:var(--mono,ui-monospace, monospace);font-size:11.5px}.ws-intg__item-actions{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;display:flex}.ws-intg__type-chips{flex-wrap:wrap;gap:5px;display:flex}.ws-intg__secret{border:1px solid color-mix(in srgb, var(--warn) 45%, var(--line));background:color-mix(in srgb, var(--warn) 7%, transparent);border-radius:8px;flex-direction:column;gap:6px;margin-top:6px;padding:10px 12px;display:flex}.ws-intg__secret-label{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-size:11px;font-weight:700}.ws-intg__secret-row{align-items:center;gap:8px;display:flex}.ws-intg__secret-row .ws-bots__reveal-input{flex:1;min-width:0}.ws-intg__confirm{border:1px solid color-mix(in srgb, var(--danger,#d33) 40%, var(--line));background:color-mix(in srgb, var(--danger,#d33) 6%, transparent);border-radius:8px;flex-direction:column;gap:12px;padding:14px 16px;display:flex}.ws-intg__confirm-text{color:var(--text);margin:0;font-size:13px;line-height:1.5}.ws-intg__event-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:6px;margin-top:10px;display:grid}.ws-intg__event-option{border:1px solid var(--line);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:7px 10px;font-size:12px;display:flex}.ws-intg__event-option.is-active{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent)}.ws-intg__deliveries{border-top:1px dashed var(--line);flex-direction:column;gap:8px;padding-top:10px;display:flex}.ws-intg__deliveries-scroll{border:1px solid var(--line);border-radius:8px;max-height:420px;overflow-y:auto}.ws-intg__delivery{border-bottom:1px solid var(--line)}.ws-intg__delivery:last-child{border-bottom:0}.ws-intg__delivery-row{text-align:left;cursor:pointer;width:100%;color:inherit;background:0 0;border:0;grid-template-columns:84px 1fr auto auto;align-items:center;gap:12px;padding:10px 12px;font-size:12.5px;display:grid}.ws-intg__delivery-row:hover{background:var(--hover,#7f7f7f0f)}.ws-intg__delivery-status{text-align:center;white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.ws-intg__delivery-status--ok{background:color-mix(in srgb, var(--delivery-accent,#2a9d5c) 16%, transparent);color:var(--delivery-accent,#2a9d5c)}.ws-intg__delivery-status--fail{background:color-mix(in srgb, var(--danger,#d33) 14%, transparent);color:var(--danger,#d33)}.ws-intg__delivery-type{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.ws-intg__delivery-attempt,.ws-intg__delivery-time{color:var(--muted);white-space:nowrap;font-size:11.5px}.ws-intg__delivery-detail{flex-direction:column;gap:10px;padding:4px 12px 14px;display:flex}.ws-intg__delivery-block{flex-direction:column;gap:4px;display:flex}.ws-intg__delivery-block .ws-bots__reveal-snippet{max-height:260px;overflow:auto}.ws-intg__deliveries-more{justify-content:center;display:flex}.ws-intg__deliveries-retry{justify-content:space-between;align-items:center;gap:12px;display:flex}.ws-intg__section{flex-direction:column;gap:12px;margin-top:28px;display:flex}.ws-intg__section-title{color:var(--text-strong,var(--text));margin:0;font-size:15px;font-weight:600}.ws-intg__section-hint{color:var(--muted);margin:-6px 0 0;font-size:12.5px}.ws-bots__choice.is-disabled{opacity:.55;cursor:not-allowed} diff --git a/apps/api/internal/webassets/dist/_app/immutable/assets/0.C0ts6lYR.css b/apps/api/internal/webassets/dist/_app/immutable/assets/0.C0ts6lYR.css new file mode 100644 index 000000000..c49db3251 --- /dev/null +++ b/apps/api/internal/webassets/dist/_app/immutable/assets/0.C0ts6lYR.css @@ -0,0 +1 @@ +@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-cyrillic-ext-wght-normal.DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-cyrillic-wght-normal.BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-vietnamese-wght-normal.6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-latin-ext-wght-normal.DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-latin-wght-normal.BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-symbols2-wght-normal.CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-vietnamese-wght-normal.DadHysG0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./geist-mono-latin-wght-normal.XN7g48iV.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-wght-normal.DLoelf7F.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-feature-settings:"ss01", "cv11";--font-display:"Bricolage Grotesque Variable", "Geist Variable", ui-sans-serif, system-ui, sans-serif;--font-mono:"Geist Mono Variable", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--rail:var(--lightningcss-light,#e2e5ea)var(--lightningcss-dark,#0b0e14);--bg:var(--lightningcss-light,#edeff2)var(--lightningcss-dark,#0e1219);--panel:var(--lightningcss-light,#f8f9fb)var(--lightningcss-dark,#141926);--panel-2:var(--lightningcss-light,#e8ebef)var(--lightningcss-dark,#1b2232);--panel-3:var(--lightningcss-light,#dde1e7)var(--lightningcss-dark,#232c3f);--surface:var(--panel-2);--hover:var(--lightningcss-light,#10151d0d)var(--lightningcss-dark,#d6e4ff0b);--hover-strong:var(--lightningcss-light,#10151d14)var(--lightningcss-dark,#d6e4ff14);--line:var(--lightningcss-light,#10151d1a)var(--lightningcss-dark,#bed2ff17);--line-strong:var(--lightningcss-light,#10151d2b)var(--lightningcss-dark,#bed2ff29);--text:var(--lightningcss-light,#232a35)var(--lightningcss-dark,#dbe2ec);--text-strong:var(--lightningcss-light,#10151d)var(--lightningcss-dark,#f4f7fb);--muted:var(--lightningcss-light,#5d6878)var(--lightningcss-dark,#8a95a8);--muted-2:var(--lightningcss-light,#8b94a3)var(--lightningcss-dark,#5c6577);--accent:var(--lightningcss-light,#0080c4)var(--lightningcss-dark,#41c6ff);--accent-hover:var(--lightningcss-light,#006aa6)var(--lightningcss-dark,#6ad3ff);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420);--accent-2:var(--lightningcss-light,#f56a1d)var(--lightningcss-dark,#ff9550);--accent-soft:var(--lightningcss-light,#0080c421)var(--lightningcss-dark,#41c6ff26);--brand-a:var(--lightningcss-light,#0072b0)var(--lightningcss-dark,#41c6ff);--brand-b:var(--lightningcss-light,#2653e8)var(--lightningcss-dark,#6d8bff);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420);--activity-accent:var(--lightningcss-light,#c07e0a)var(--lightningcss-dark,#e8b23e);--activity-accent-soft:var(--lightningcss-light,#c07e0a17)var(--lightningcss-dark,#e8b23e1a);--delivery-accent:var(--lightningcss-light,#5558d9)var(--lightningcss-dark,#8b8df2);--delivery-accent-soft:var(--lightningcss-light,#5558d90f)var(--lightningcss-dark,#8b8df214);--tool-call-bg:var(--lightningcss-light,#5558d917)var(--lightningcss-dark,#8b8df21f);--tool-call-bg-hover:var(--lightningcss-light,#5558d924)var(--lightningcss-dark,#8b8df22e);--accent-glow:0 0 0 1px color-mix(in srgb, var(--accent) 32%, transparent), 0 8px 30px -12px color-mix(in srgb, var(--accent) 48%, transparent);--success:var(--lightningcss-light,#14876a)var(--lightningcss-dark,#30c48d);--warn:#e8a33e;--danger:var(--lightningcss-light,#d13438)var(--lightningcss-dark,#ff6d68);--scrollbar:var(--lightningcss-light,#10151d2e)var(--lightningcss-dark,#bed2ff1f);--scrollbar-hover:var(--lightningcss-light,#10151d4d)var(--lightningcss-dark,#bed2ff38);--shadow:0 24px 60px -22px var(--lightningcss-light,#10151d4d)var(--lightningcss-dark,#02050ab3);--tooltip-bg:var(--lightningcss-light,#10151d)var(--lightningcss-dark,#2b3448);--tooltip-fg:var(--lightningcss-light,#f0f4fa)var(--lightningcss-dark,#f4f7fb);--key-edge:0 1px 0 var(--line-strong), 0 2px 0 var(--lightningcss-light,#10151d1a)var(--lightningcss-dark,#00000073);--key-edge-pressed:0 1px 0 var(--line-strong);--radius-sm:4px;--radius:6px;--radius-lg:10px;--radius-xl:14px;--safe-area-top:env(safe-area-inset-top,0px);--safe-area-right:env(safe-area-inset-right,0px);--safe-area-bottom:env(safe-area-inset-bottom,0px);--safe-area-left:env(safe-area-inset-left,0px);background:var(--bg);color:var(--text);font-family:Geist Variable,Inter,SF Pro Text,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-color-mode=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-board=ember]{--rail:var(--lightningcss-light,#e9e1d7)var(--lightningcss-dark,#16110d);--bg:var(--lightningcss-light,#f7f3ed)var(--lightningcss-dark,#1a1511);--panel:var(--lightningcss-light,#fffaf2)var(--lightningcss-dark,#211a15);--panel-2:var(--lightningcss-light,#efe7dc)var(--lightningcss-dark,#29211a);--panel-3:var(--lightningcss-light,#e4dbcf)var(--lightningcss-dark,#322820);--hover:var(--lightningcss-light,#1020270d)var(--lightningcss-dark,#fff4eb0b);--hover-strong:var(--lightningcss-light,#10202714)var(--lightningcss-dark,#fff4eb14);--line:var(--lightningcss-light,#1020271a)var(--lightningcss-dark,#ffece014);--line-strong:var(--lightningcss-light,#10202729)var(--lightningcss-dark,#ffece024);--text:var(--lightningcss-light,#22201d)var(--lightningcss-dark,#ece4da);--text-strong:var(--lightningcss-light,#11100e)var(--lightningcss-dark,#fbf6f0);--muted:var(--lightningcss-light,#6f675f)var(--lightningcss-dark,#a4917f);--muted-2:var(--lightningcss-light,#958b80)var(--lightningcss-dark,#6f6152);--accent:var(--lightningcss-light,#c94a32)var(--lightningcss-dark,#f0714c);--accent-hover:var(--lightningcss-light,#b13c26)var(--lightningcss-dark,#ff8560);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#241009);--accent-2:var(--lightningcss-light,#006d77)var(--lightningcss-dark,#45b8ac);--accent-soft:var(--lightningcss-light,#c94a3224)var(--lightningcss-dark,#f0714c2b);--brand-a:var(--lightningcss-light,#c64b32)var(--lightningcss-dark,#f0714c);--brand-b:var(--lightningcss-light,#c8425a)var(--lightningcss-dark,#d84a63);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#11100e);--scrollbar:var(--lightningcss-light,#1020272e)var(--lightningcss-dark,#ffece01a);--scrollbar-hover:var(--lightningcss-light,#1020274d)var(--lightningcss-dark,#ffece033);--shadow:0 24px 60px -22px var(--lightningcss-light,#10202752)var(--lightningcss-dark,#080402a6)}[data-board=moss]{--rail:var(--lightningcss-light,#dfe5e0)var(--lightningcss-dark,#0a100d);--bg:var(--lightningcss-light,#ecf0ed)var(--lightningcss-dark,#0e1512);--panel:var(--lightningcss-light,#f7f9f7)var(--lightningcss-dark,#131b16);--panel-2:var(--lightningcss-light,#e6ebe7)var(--lightningcss-dark,#1a241d);--panel-3:var(--lightningcss-light,#dbe2dc)var(--lightningcss-dark,#223026);--hover:var(--lightningcss-light,#0f17120d)var(--lightningcss-dark,#d6ffe40b);--hover-strong:var(--lightningcss-light,#0f171214)var(--lightningcss-dark,#d6ffe414);--line:var(--lightningcss-light,#0f17121a)var(--lightningcss-dark,#c8ffdc17);--line-strong:var(--lightningcss-light,#0f17122b)var(--lightningcss-dark,#c8ffdc29);--text:var(--lightningcss-light,#212b24)var(--lightningcss-dark,#dbe7de);--text-strong:var(--lightningcss-light,#0f1712)var(--lightningcss-dark,#f3faf4);--muted:var(--lightningcss-light,#5c6b60)var(--lightningcss-dark,#8fa295);--muted-2:var(--lightningcss-light,#8a9a8e)var(--lightningcss-dark,#5d6e62);--accent:var(--lightningcss-light,#177a50)var(--lightningcss-dark,#3ddc97);--accent-hover:var(--lightningcss-light,#0f6a44)var(--lightningcss-dark,#63e6ab);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#05140c);--accent-2:var(--lightningcss-light,#d97f26)var(--lightningcss-dark,#ffab5e);--accent-soft:var(--lightningcss-light,#177a5021)var(--lightningcss-dark,#3ddc9726);--brand-a:var(--lightningcss-light,#177a50)var(--lightningcss-dark,#3ddc97);--brand-b:var(--lightningcss-light,#0e7490)var(--lightningcss-dark,#2bb3a3);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#05140c);--scrollbar:var(--lightningcss-light,#0f17122e)var(--lightningcss-dark,#c8ffdc1f);--scrollbar-hover:var(--lightningcss-light,#0f17124d)var(--lightningcss-dark,#c8ffdc38)}[data-board=iris]{--rail:var(--lightningcss-light,#e2e2ea)var(--lightningcss-dark,#0d0c15);--bg:var(--lightningcss-light,#eeeef4)var(--lightningcss-dark,#12111c);--panel:var(--lightningcss-light,#f8f8fb)var(--lightningcss-dark,#181726);--panel-2:var(--lightningcss-light,#e9e9f0)var(--lightningcss-dark,#201e33);--panel-3:var(--lightningcss-light,#dedee8)var(--lightningcss-dark,#2a2742);--hover:var(--lightningcss-light,#1213270d)var(--lightningcss-dark,#e0dcff0b);--hover-strong:var(--lightningcss-light,#12132714)var(--lightningcss-dark,#e0dcff14);--line:var(--lightningcss-light,#1213271a)var(--lightningcss-dark,#d2cdff17);--line-strong:var(--lightningcss-light,#1213272b)var(--lightningcss-dark,#d2cdff29);--text:var(--lightningcss-light,#26283a)var(--lightningcss-dark,#e0dff0);--text-strong:var(--lightningcss-light,#121327)var(--lightningcss-dark,#f6f5fd);--muted:var(--lightningcss-light,#61637a)var(--lightningcss-dark,#918fa9);--muted-2:var(--lightningcss-light,#9092a8)var(--lightningcss-dark,#605e78);--accent:var(--lightningcss-light,#7048d9)var(--lightningcss-dark,#a78bfa);--accent-hover:var(--lightningcss-light,#5f39c2)var(--lightningcss-dark,#bda4ff);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#150f26);--accent-2:var(--lightningcss-light,#d94f8a)var(--lightningcss-dark,#ff8bb3);--accent-soft:var(--lightningcss-light,#7048d921)var(--lightningcss-dark,#a78bfa29);--brand-a:var(--lightningcss-light,#7048d9)var(--lightningcss-dark,#a78bfa);--brand-b:var(--lightningcss-light,#2653e8)var(--lightningcss-dark,#6d8bff);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#150f26);--scrollbar:var(--lightningcss-light,#1213272e)var(--lightningcss-dark,#d2cdff1f);--scrollbar-hover:var(--lightningcss-light,#1213274d)var(--lightningcss-dark,#d2cdff38)}[data-board=signal]{--rail:var(--lightningcss-light,#e2e5ea)var(--lightningcss-dark,#0b0e14);--bg:var(--lightningcss-light,#edeff2)var(--lightningcss-dark,#0e1219);--panel:var(--lightningcss-light,#f8f9fb)var(--lightningcss-dark,#141926);--panel-2:var(--lightningcss-light,#e8ebef)var(--lightningcss-dark,#1b2232);--panel-3:var(--lightningcss-light,#dde1e7)var(--lightningcss-dark,#232c3f);--hover:var(--lightningcss-light,#10151d0d)var(--lightningcss-dark,#d6e4ff0b);--hover-strong:var(--lightningcss-light,#10151d14)var(--lightningcss-dark,#d6e4ff14);--line:var(--lightningcss-light,#10151d1a)var(--lightningcss-dark,#bed2ff17);--line-strong:var(--lightningcss-light,#10151d2b)var(--lightningcss-dark,#bed2ff29);--text:var(--lightningcss-light,#232a35)var(--lightningcss-dark,#dbe2ec);--text-strong:var(--lightningcss-light,#10151d)var(--lightningcss-dark,#f4f7fb);--muted:var(--lightningcss-light,#5d6878)var(--lightningcss-dark,#8a95a8);--muted-2:var(--lightningcss-light,#8b94a3)var(--lightningcss-dark,#5c6577);--accent:var(--lightningcss-light,#0080c4)var(--lightningcss-dark,#41c6ff);--accent-hover:var(--lightningcss-light,#006aa6)var(--lightningcss-dark,#6ad3ff);--accent-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420);--accent-2:var(--lightningcss-light,#f56a1d)var(--lightningcss-dark,#ff9550);--accent-soft:var(--lightningcss-light,#0080c421)var(--lightningcss-dark,#41c6ff26);--brand-a:var(--lightningcss-light,#0072b0)var(--lightningcss-dark,#41c6ff);--brand-b:var(--lightningcss-light,#2653e8)var(--lightningcss-dark,#6d8bff);--brand-contrast:var(--lightningcss-light,#fff)var(--lightningcss-dark,#061420)}*{box-sizing:border-box}html,body{height:100%;margin:0;padding:0}body{background:radial-gradient(1000px 600px at 0% 0%, color-mix(in srgb, var(--accent) 6%, transparent), transparent 60%), radial-gradient(900px 700px at 100% 100%, color-mix(in srgb, var(--delivery-accent) 5%, transparent), transparent 60%), var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,textarea{font:inherit;color:inherit}code,pre,kbd,samp{font-variant-ligatures:none}button{cursor:pointer}input,textarea{background:0 0;border:0;outline:0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--scrollbar);background-clip:content-box;border:2px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-hover);background-clip:content-box}.auth-shell{min-height:100dvh;padding:calc(32px + var(--safe-area-top)) calc(32px + var(--safe-area-right)) calc(32px + var(--safe-area-bottom)) calc(32px + var(--safe-area-left));background:radial-gradient(color-mix(in srgb, var(--text) 6%, transparent) 1px, transparent 1.5px) 0 0 / 18px 18px, radial-gradient(700px 500px at 30% 20%, color-mix(in srgb, var(--brand-a) 14%, transparent), transparent 60%), radial-gradient(700px 500px at 80% 90%, color-mix(in srgb, var(--brand-b) 10%, transparent), transparent 60%), var(--bg);place-items:center;display:grid}.auth-panel{border:1px solid var(--line-strong);border-radius:var(--radius-xl);background:linear-gradient(180deg, #ffffff0a, #fff0) var(--panel);width:min(100%,440px);box-shadow:var(--key-edge), var(--shadow);gap:22px;padding:36px;display:grid}.auth-brand{align-items:center;gap:12px;display:flex}.auth-brand .mark{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));width:44px;height:44px;color:var(--brand-contrast);letter-spacing:-.02em;box-shadow:0 10px 24px -8px color-mix(in srgb, var(--brand-b) 65%, transparent);border-radius:12px;place-items:center;font-weight:800;display:grid}.auth-brand .brand-text strong{color:var(--text-strong);letter-spacing:-.01em;display:block}.auth-brand .brand-text span{color:var(--muted);font-size:12px;display:block}.auth-copy{gap:8px;margin-top:8px;display:grid}.auth-copy h1{letter-spacing:-.02em;color:var(--text-strong);font-size:28px;font-family:var(--font-display);margin:0;font-weight:700}.auth-copy p{color:var(--muted);margin:0;line-height:1.5}.github-login{color:#fff;background:#0d1117;border:1px solid #2b2f36;border-radius:12px;justify-content:center;align-items:center;gap:10px;min-height:46px;font-weight:600;text-decoration:none;transition:transform 80ms,background .12s,border-color .12s;display:inline-flex}.github-login:hover{background:#161b22;border-color:#3f4750;transform:translateY(-1px)}.openclaw-login{min-height:46px;color:var(--text-strong);border:1px solid var(--muted-2);background:0 0;border-radius:12px;justify-content:center;align-items:center;gap:10px;font-weight:600;text-decoration:none;transition:transform 80ms,background .12s,border-color .12s;display:inline-flex}.openclaw-login:hover{background:color-mix(in srgb, var(--text-strong) 6%, transparent);border-color:var(--muted);transform:translateY(-1px)}.auth-foot{color:var(--muted-2);text-align:center;margin:0;font-size:12px}.shell{grid-template-rows:minmax(0,1fr);grid-template-columns:72px 260px minmax(0,1fr) 0;height:100dvh;min-height:100dvh;transition:grid-template-columns .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden}.shell.thread-open,.shell.search-open{grid-template-columns:72px 260px minmax(0,1fr) minmax(340px,28vw)}.shell.artifact-open{grid-template-columns:72px 260px minmax(0,1fr) minmax(460px,42vw)}.shell.sidebar-collapsed{grid-template-columns:72px 0 minmax(0,1fr) 0}.shell.sidebar-collapsed.thread-open,.shell.sidebar-collapsed.search-open{grid-template-columns:72px 0 minmax(0,1fr) minmax(340px,28vw)}.shell.sidebar-collapsed.artifact-open{grid-template-columns:72px 0 minmax(0,1fr) minmax(460px,42vw)}.shell>.thread,.shell>.search-results,.shell>.artifact-viewer{grid-area:1/4}.shell.desktop-shell{background:radial-gradient(color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1.5px) 0 0 / 14px 14px, var(--rail);grid-template-rows:52px minmax(0,1fr)}.desktop-shell>.guild-rail,.desktop-shell>.sidebar{background:0 0;border-right:0}.desktop-shell>.sidebar{grid-template-rows:minmax(0,1fr) auto}@media (width<=820px){.desktop-shell>.guild-rail{background:radial-gradient(color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1.5px) 0 0 / 14px 14px, var(--rail);border-right:1px solid var(--line)}.desktop-shell>.sidebar{background:var(--panel);border-right:1px solid var(--line)}}.desktop-shell>.timeline{border-top:1px solid var(--line);border-left:1px solid var(--line);border-top-left-radius:12px}.desktop-shell:not(.thread-open):not(.search-open):not(.artifact-open)>.timeline{border-top-right-radius:12px}.desktop-shell>.thread,.desktop-shell>.search-results,.desktop-shell>.artifact-viewer{border-top:1px solid var(--line);border-top-right-radius:12px}.desktop-shell>.desktop-titlebar{grid-area:1/1/auto/-1}.desktop-shell>.guild-rail,.desktop-shell>.sidebar,.desktop-shell>.timeline,.desktop-shell>.thread,.desktop-shell>.search-results,.desktop-shell>.artifact-viewer{grid-row:2}.desktop-shell .mobile-nav-toggle{display:none}.desktop-auth-titlebar{z-index:10;-webkit-app-region:drag;height:52px;position:fixed;inset:0 0 auto}.desktop-titlebar{z-index:8;-webkit-app-region:drag;-webkit-user-select:none;user-select:none;background:0 0;align-items:center;min-width:0;height:52px;padding:0;display:flex;position:relative}.desktop-titlebar-safe-area{-webkit-app-region:drag;align-items:center;width:100%;min-width:0;height:100%;padding:0 14px;display:flex;position:relative}.desktop-titlebar[data-platform=darwin] .desktop-titlebar-safe-area{padding-left:78px}.desktop-titlebar[data-platform=win32] .desktop-titlebar-safe-area,.desktop-titlebar[data-platform=linux] .desktop-titlebar-safe-area{left:env(titlebar-area-x,0px);width:env(titlebar-area-width,calc(100% - 148px));position:absolute}.desktop-titlebar-leading{-webkit-app-region:no-drag;align-items:center;gap:9px;min-width:0;max-width:max(150px,50% - 300px);display:flex;overflow:hidden}.desktop-titlebar button,.desktop-external-link{color:var(--muted);background:0 0;border:1px solid #0000;place-items:center;display:grid}.desktop-titlebar button:hover,.desktop-external-link:hover{border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.desktop-external-link{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--muted);flex:0 0 28px;place-items:center;text-decoration:none;display:grid}.desktop-titlebar-leading>.desktop-sidebar-toggle{border-radius:8px;width:30px;height:30px}.desktop-titlebar-workspace{min-width:36px;max-width:190px;color:var(--text-strong);font-family:var(--font-display);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;border-radius:8px;flex:0 auto;padding:5px 9px;font-size:13px;font-weight:650;overflow:hidden}.desktop-titlebar-channel{min-width:30px;max-width:230px;color:var(--text-strong);font-family:var(--font-display);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;flex:0 auto;margin:0;font-size:13px;font-weight:650;overflow:hidden}.desktop-titlebar-channel.with-glyph:first-letter{color:var(--accent);margin-right:1px}.desktop-titlebar-divider{flex:none}.desktop-titlebar-status{color:var(--muted);white-space:nowrap;flex:none;align-items:center;gap:6px;margin-left:auto;font-size:11px;display:inline-flex}.desktop-titlebar-status:before{content:"";background:var(--muted-2);border-radius:50%;width:7px;height:7px;animation:1.6s ease-in-out infinite presence-pulse}.desktop-titlebar-actions{-webkit-app-region:no-drag;flex:none;align-items:center;margin-left:auto;display:flex}.desktop-titlebar-actions button{border-radius:8px;width:30px;height:30px}.desktop-titlebar-actions button:disabled{cursor:wait;opacity:.55}.desktop-titlebar-actions button.active{background:var(--accent-soft);color:var(--accent)}.desktop-titlebar-actions+.desktop-titlebar-status{margin-left:8px}@media (prefers-reduced-motion:reduce){.desktop-titlebar-status:before{animation:none}}.desktop-titlebar-search.search{border-color:var(--line-strong);background:color-mix(in srgb, var(--panel-2) 84%, transparent);-webkit-app-region:no-drag;width:clamp(220px,100vw - 700px,520px);height:32px;position:absolute;left:50%;transform:translate(-50%);box-shadow:inset 0 1px #ffffff09}.desktop-titlebar-search.search:focus-within{border-color:color-mix(in srgb, var(--accent) 66%, var(--line));background:var(--panel-2);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent)}.timeline{background:var(--bg);flex-direction:column;min-width:0;display:flex;overflow:hidden}.timeline>*{flex-shrink:0;min-width:0}.timeline>.messages{flex:1 1 0;min-height:0}.topbar{border-bottom:1px solid var(--line);background:linear-gradient(180deg, #ffffff05, transparent), var(--bg);align-items:center;gap:14px;min-height:60px;padding:12px 20px;display:flex}.topbar-title{flex:1;align-items:center;gap:10px;min-width:0;display:flex}.topbar-title h1{letter-spacing:-.01em;color:var(--text-strong);font-size:16px;font-weight:650;font-family:var(--font-display);white-space:nowrap;text-overflow:ellipsis;margin:0;overflow:hidden}.topbar-title h1.with-glyph:first-letter{color:var(--accent);margin-right:1px}.topbar-divider{background:var(--line-strong);width:1px;height:18px;margin:0 6px}.topbar-meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:12px;overflow:hidden}.search{border-radius:var(--radius);background:var(--panel);border:1px solid var(--line);width:min(280px,30vw);height:34px;color:var(--muted);align-items:center;gap:8px;padding:0 10px;transition:border-color .12s,background .12s;display:flex}.search:focus-within{border-color:var(--accent);background:var(--panel-2);color:var(--text)}.search input{min-width:0;height:100%;color:var(--text);flex:1}.search input::placeholder{color:var(--muted)}.search-clear{background:var(--panel-3);width:18px;height:18px;color:var(--muted);border:0;border-radius:50%;place-items:center;font-size:14px;line-height:1;display:grid}.search-clear:hover{background:var(--accent);color:var(--accent-contrast)}.search-submit{background:var(--accent-soft);height:22px;color:var(--accent);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;border:0;border-radius:5px;padding:0 8px;font-size:10px;font-weight:600}.search-submit:hover{background:var(--accent);color:var(--accent-contrast)}.topbar-actions{align-items:center;gap:6px;display:inline-flex}.topbar-actions button,.topbar-actions a{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel);width:32px;height:32px;color:var(--muted);box-shadow:var(--key-edge);place-items:center;text-decoration:none;transition:background .12s,color .12s,border-color .12s,box-shadow .12s,transform 80ms;display:grid}.topbar-actions button:hover,.topbar-actions a:hover,.topbar-actions button.active{background:var(--accent-soft);border-color:color-mix(in srgb, var(--accent) 55%, var(--line-strong));color:var(--accent)}.topbar-actions button:active,.topbar-actions a:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.notif-toggle{width:28px;height:28px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;margin-left:4px;display:inline-flex}.notif-toggle:hover{background:var(--accent-soft);color:var(--accent)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.search-results{border-left:1px solid var(--line);background:var(--panel);opacity:1;grid-template-rows:auto auto minmax(0,1fr);min-width:0;transition:opacity .18s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden;transform:translate(0)}.search-results.covered{opacity:0;pointer-events:none}.search-results-head{border-bottom:1px solid var(--line);background:linear-gradient(180deg, #ffffff05, transparent), var(--panel);justify-content:space-between;align-items:center;min-height:60px;padding:10px 16px;display:flex}.search-results-head>div{min-width:0}.search-results-head p{color:var(--muted);font-family:var(--font-mono);letter-spacing:0;text-transform:uppercase;margin:0 0 2px;font-size:10px;font-weight:600}.search-results-head strong{color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:14px;display:block;overflow:hidden}.search-results-head button{background:var(--panel-2);width:30px;height:30px;color:var(--muted);border:0;border-radius:50%;flex:none;place-items:center;font-size:19px;line-height:1;display:grid}.search-results-head button:hover{background:var(--hover);color:var(--text)}.search-results-summary{color:var(--muted);padding:12px 16px 8px;font-size:12px;font-weight:600}.search-results-scroll{min-height:0;padding:0 8px 16px;overflow-y:auto}.search-result-list{margin:0;padding:0;list-style:none}.search-result{color:var(--text);border-radius:var(--radius);text-align:left;background:0 0;border:0;align-items:flex-start;gap:10px;width:100%;padding:10px 8px;display:flex}.search-result:hover{background:var(--hover)}.search-result.is-active{background:color-mix(in srgb, var(--accent) 10%, transparent)}.search-result:focus-visible,.search-results-head button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.search-result .dm-avatar{width:30px;height:30px;font-size:13px}.search-result-body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.search-result-meta{align-items:baseline;gap:8px;min-width:0;display:flex}.search-result-meta strong{color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.search-result-handle{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.search-result-meta time{color:var(--muted);flex:none;margin-left:auto;font-size:11px}.search-result-snippet{color:var(--muted);-webkit-line-clamp:3;-webkit-box-orient:vertical;line-height:1.45;display:-webkit-box;overflow:hidden}.search-result-snippet mark{background:color-mix(in srgb, var(--accent) 22%, transparent);color:var(--text-strong);border-radius:2px;font-weight:650}.search-result-context{min-width:0;color:var(--muted-2);align-items:center;gap:10px;margin-top:1px;font-size:11px;display:flex}.search-result-context:empty{display:none}.search-result-where{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.search-result-thread{color:var(--accent);flex:none;align-items:center;gap:4px;font-weight:600;display:inline-flex}.search-load-more{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel-2);width:calc(100% - 16px);color:var(--text);margin:8px auto 0;padding:8px 12px;font-size:12px;font-weight:600;display:block}.search-load-more:hover:not(:disabled){background:var(--hover)}.search-load-more:disabled{color:var(--muted)}.search-load-more:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.search-end{color:var(--muted-2);text-align:center;padding:14px 8px 4px;font-size:11px}.search-foot-error{border:1px solid color-mix(in srgb, var(--danger) 40%, transparent);border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 8%, transparent);color:var(--text);justify-content:space-between;align-items:center;gap:10px;margin:8px 8px 0;padding:8px 12px;font-size:12px;display:flex}.search-foot-error p{min-width:0;margin:0}.search-foot-error button{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel-2);color:var(--text);flex:none;padding:4px 10px;font-size:12px;font-weight:600}.search-foot-error button:hover{background:var(--hover)}.search-state{color:var(--muted);text-align:center;justify-items:center;padding:56px 24px;display:grid}.search-state-icon{border:1px solid var(--line-strong);background:var(--panel-2);width:44px;height:44px;color:var(--muted-2);border-radius:50%;place-items:center;margin-bottom:14px;font-size:23px;display:grid}.search-state strong{color:var(--text-strong);font-size:14px}.search-state p{margin:5px 0 0;font-size:12px}.search-state-loading{grid-template-columns:repeat(3,7px);justify-content:center;gap:6px}.search-state-loading span{background:var(--accent);border-radius:50%;width:7px;height:7px;animation:1.2s ease-in-out infinite pulse}.search-state-loading span:nth-child(2){animation-delay:.12s}.search-state-loading span:nth-child(3){animation-delay:.24s}.guild-rail{background:radial-gradient(color-mix(in srgb, var(--text) 7%, transparent) 1px, transparent 1.5px) 0 0 / 14px 14px, var(--rail);border-right:1px solid var(--line);flex-direction:column;align-items:center;gap:8px;padding:14px 0;display:flex;position:relative}.guild-rail .guild{background:var(--panel);width:48px;height:48px;color:var(--text);border:1px solid var(--line-strong);letter-spacing:-.02em;box-shadow:var(--key-edge);border-radius:12px;place-items:center;font-size:14px;font-weight:700;text-decoration:none;transition:border-color .12s,background .12s,transform .12s,box-shadow .12s;display:grid;position:relative}.guild-rail .guild:hover{border-color:color-mix(in srgb, var(--accent) 55%, var(--line-strong));color:var(--accent);box-shadow:var(--key-edge), 0 6px 16px -8px color-mix(in srgb, var(--accent) 45%, transparent);transform:translateY(-1px)}.guild-rail .guild:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.guild-rail .guild.home{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));border-color:color-mix(in srgb, var(--brand-b) 55%, var(--line-strong));color:var(--brand-contrast);font-weight:800;font-family:var(--font-display)}.guild-rail .guild.home:hover{color:var(--brand-contrast);transform:translateY(-1px)}.guild-rail .guild.home:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.guild-rail .guild__image{border-radius:inherit;object-fit:cover;width:100%;height:100%;display:block}.guild-rail .guild.add{color:var(--success);border:1px dashed color-mix(in srgb, var(--success) 45%, transparent);background:0 0}.guild-rail .guild.add:hover{background:color-mix(in srgb, var(--success) 14%, transparent);color:var(--success);border-style:solid;border-color:var(--success)}.guild-divider{background:var(--line-strong);width:36px;height:1px;margin:4px 0}.guild-list{flex-direction:column;flex:auto;align-items:center;gap:8px;min-height:0;display:flex;overflow-y:auto}.guild-wrap{position:relative}.guild-wrap:before{content:"";background:var(--accent);opacity:0;border-radius:0 4px 4px 0;width:4px;height:28px;transition:opacity .14s,transform .14s;position:absolute;top:50%;left:-14px;transform:translateY(-50%)scaleY(.2)}.guild-wrap:hover:before{opacity:.6;transform:translateY(-50%)scaleY(.5)}.guild-wrap.active:before{opacity:1;transform:translateY(-50%)scaleY(1)}.guild-wrap.active .guild{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, var(--text-strong));color:var(--accent-contrast)}.guild-create{background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);z-index:20;margin-left:8px;padding:8px;position:absolute;top:14px;left:100%}.guild-create input{border-radius:var(--radius-sm);background:var(--panel-2);width:200px;height:32px;color:var(--text);padding:0 10px}.sidebar{background:var(--panel);border-right:1px solid var(--line);grid-template-rows:auto minmax(0,1fr) auto;min-width:0;transition:opacity .16s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden}.sidebar-collapsed .sidebar{opacity:0;pointer-events:none;transform:translate(-14px)}.workspace-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:6px;min-height:60px;padding:14px 16px;display:flex}.workspace-header-icon{object-fit:cover;background:var(--panel-2);border-radius:8px;flex:none;width:28px;height:28px}.workspace-header-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.workspace-menu{min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;flex:1;align-items:center;gap:10px;margin-left:-8px;padding:5px 8px;transition:background .12s;display:flex}.workspace-menu:hover{background:var(--panel-2)}.workspace-menu-caret{color:var(--muted);flex:none;transition:color .12s}.workspace-menu:hover .workspace-menu-caret{color:var(--text-strong)}.sidebar-collapse{background:var(--panel-2);width:30px;height:30px;color:var(--muted);border:0;border-radius:8px;place-items:center;transition:color .12s,background .12s,transform .12s;display:grid}.sidebar-collapse:hover{background:var(--panel-3);color:var(--text-strong);transform:translate(-1px)}.workspace-name{flex-direction:column;gap:2px;min-width:0;display:flex}.workspace-name strong{min-width:0;color:var(--text-strong);letter-spacing:-.01em;font-size:15px;font-family:var(--font-display);align-items:center;gap:5px;font-weight:650;display:flex}.workspace-name-label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.workspace-name .presence{color:var(--muted);align-items:center;gap:6px;font-size:11px;display:inline-flex}.workspace-name .presence:before{content:"";background:var(--muted-2);border-radius:50%;width:7px;height:7px;animation:1.6s ease-in-out infinite presence-pulse}@keyframes presence-pulse{0%,to{opacity:.4}50%{opacity:1}}@media (prefers-reduced-motion:reduce){.workspace-name .presence:before{animation:none}}.sidebar-scroll{padding:12px 8px 16px;overflow-y:auto}.nav-section+.nav-section{margin-top:12px}.section-title{border-radius:var(--radius-sm);background:0 0;border:0;align-items:center;gap:4px;width:100%;padding:2px 4px;display:flex}.nav-section.collapsed+.nav-section{margin-top:4px}.section-toggle{border-radius:var(--radius-sm);min-width:0;min-height:28px;color:var(--muted);text-transform:uppercase;font-family:var(--font-mono);letter-spacing:.09em;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:6px;padding:4px;font-size:10px;font-weight:600;display:flex}.section-toggle:hover{color:var(--text);background:var(--hover)}.section-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.section-toggle .caret{opacity:.7;font-size:10px;transition:transform .14s}.section-toggle[aria-expanded=false] .caret{transform:rotate(-90deg)}.section-toggle .label{text-align:left;flex:1}.section-title .add-button{background:var(--hover-strong);width:18px;height:18px;color:var(--text);border:0;border-radius:4px;flex:none;place-items:center;padding:0;font-size:14px;font-weight:700;line-height:1;display:grid}.section-title .add-button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.section-title:hover .add-button{background:var(--accent);color:var(--accent-contrast)}.nav-list{flex-direction:column;gap:1px;margin-top:4px;display:flex}.nav-list[hidden]{display:none}.channel-subgroup{gap:1px;margin-top:6px;display:grid}.channel-subgroup-toggle{border-radius:var(--radius-sm);width:100%;min-height:26px;color:var(--muted);font-family:var(--font-mono);letter-spacing:.06em;text-align:left;text-transform:uppercase;background:0 0;border:0;align-items:center;gap:6px;padding:4px 9px 4px 28px;font-size:10px;font-weight:600;display:flex}.channel-subgroup-toggle:hover,.channel-subgroup-toggle:focus-visible{background:var(--hover);color:var(--text);outline:none}.channel-subgroup-toggle .caret{opacity:.7;font-size:10px;transition:transform .14s}.channel-subgroup-toggle[aria-expanded=false] .caret{transform:rotate(-90deg)}.channel-subgroup-count{color:var(--muted-2);font-variant-numeric:tabular-nums;margin-left:auto}.channel-subgroup-list{gap:1px;display:grid}.channel-subgroup-list[hidden]{display:none}.archived-channel-group{border-top:1px solid color-mix(in srgb, var(--line) 70%, transparent);margin-top:10px;padding-top:6px}@media (prefers-reduced-motion:reduce){.section-toggle .caret{transition:none}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.channel-row{border-radius:var(--radius-sm);align-items:center;display:flex;position:relative}.channel-row .nav-item{flex:1;min-width:0}.channel-row.subdued .nav-item:not(.active){color:var(--muted-2)}.managed-channel-marker{color:var(--muted-2);flex:none;place-items:center;display:inline-grid}.nav-item.active .managed-channel-marker,.nav-item:hover .managed-channel-marker{color:var(--accent)}.channel-row.reorderable .nav-item{padding-left:2px}.channel-drag-handle{border-radius:var(--radius-sm);color:var(--muted-2);cursor:grab;opacity:0;background:0 0;border:0;flex:0 0 24px;align-self:stretch;place-items:center;display:grid}.channel-row:hover .channel-drag-handle,.channel-drag-handle:focus-visible{opacity:1}.channel-drag-handle:hover{color:var(--text);background:var(--hover)}.channel-drag-handle:active{cursor:grabbing}.channel-drag-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.channel-drag-handle svg{fill:currentColor}.channel-move-menu{z-index:4;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel);min-width:112px;box-shadow:var(--shadow);padding:4px;display:grid;position:absolute;top:calc(100% + 2px);left:0}.channel-move-menu button{color:var(--text);text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}.channel-move-menu button:hover:not(:disabled),.channel-move-menu button:focus-visible{background:var(--hover-strong);outline:none}.channel-move-menu button:disabled{color:var(--muted-2);cursor:default}.channel-row.dragging{opacity:.45}.channel-row.drop-before:before,.channel-row.drop-after:after{content:"";z-index:1;background:var(--accent);pointer-events:none;border-radius:1px;height:2px;position:absolute;left:4px;right:4px}.channel-row.drop-before:before{top:-1px}.channel-row.drop-after:after{bottom:-1px}@media (hover:none){.channel-drag-handle{opacity:1}}@media (prefers-reduced-motion:reduce){.channel-subgroup-toggle .caret{transition:none}}.nav-item{border-radius:var(--radius-sm);width:100%;color:var(--muted);text-align:left;background:0 0;border:0;align-items:center;gap:8px;min-height:30px;padding:6px 10px;text-decoration:none;transition:background .1s,color .1s;display:flex}.nav-item:hover{background:var(--hover);color:var(--text)}.nav-item:focus{outline:none}.nav-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.nav-item.active{background:var(--accent-soft);color:var(--text-strong);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent)}.nav-item.has-unread{color:var(--text-strong);font-weight:600}.nav-item.has-unread .hash{color:var(--text-strong)}.unread-badge{background:var(--accent);min-width:18px;height:18px;color:var(--accent-contrast,white);text-align:center;letter-spacing:.01em;border-radius:9px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:700;line-height:18px}.nav-item .hash{color:var(--muted);text-align:center;width:14px;font-weight:600}.nav-item.active .hash{color:var(--accent)}.nav-label{white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:14px;overflow:hidden}.dm-row{grid-template-columns:minmax(0,1fr) 24px;align-items:center;gap:2px;display:grid;position:relative}.dm-row .nav-item{min-width:0}.dm-actions-trigger{border-radius:var(--radius-sm);width:22px;height:22px;color:var(--muted-2);opacity:0;background:0 0;border:0;place-items:center;font-size:18px;font-weight:700;line-height:1;display:grid}.dm-row:hover .dm-actions-trigger,.dm-row:focus-within .dm-actions-trigger,.dm-row.active .dm-actions-trigger{opacity:1}.dm-actions-trigger:hover,.dm-actions-trigger:focus-visible,.dm-actions-trigger[aria-expanded=true]{background:var(--hover);color:var(--text);outline:none}.dm-actions-menu{z-index:30;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel-2);min-width:164px;box-shadow:var(--shadow);padding:4px;position:absolute;top:28px;right:0}.dm-actions-item{width:100%;min-height:30px;color:var(--text);text-align:left;background:0 0;border:0;border-radius:6px;padding:0 10px;font-size:13px}.dm-actions-item:hover,.dm-actions-item:focus-visible{background:var(--hover);color:var(--text-strong);outline:none}.dm-undo{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);color:var(--muted);align-items:center;gap:8px;margin:6px 8px 2px;padding:6px 8px;font-size:12px;display:flex}.dm-undo span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.dm-undo button{background:var(--hover);color:var(--text);border:0;border-radius:6px;padding:4px 8px;font-size:12px;font-weight:700}.dm-undo button:hover,.dm-undo button:focus-visible{background:var(--accent);color:var(--accent-contrast);outline:none}.nav-empty{color:var(--muted-2);margin:4px 8px;font-size:12px}.dm-avatar{color:#fff;background:linear-gradient(135deg, hsl(var(--hue,220deg) 70% 55%), hsl(calc(var(--hue,220deg) + 40deg) 70% 45%));border-radius:50%;flex-shrink:0;place-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:grid;overflow:hidden}.dm-avatar img,.avatar img{object-fit:cover;width:100%;height:100%;display:block}.presence-dot{background:var(--muted-2);border-radius:50%;flex-shrink:0;width:8px;height:8px}.presence-dot.active{background:var(--success);box-shadow:0 0 0 2px var(--panel)}.inline-create{grid-template-columns:minmax(0,1fr) auto;gap:6px;margin:6px 4px 2px;display:grid}.inline-create input{border-radius:var(--radius-sm);background:var(--panel-2);width:100%;min-width:0;height:30px;color:var(--text);border:1px solid var(--line);padding:0 10px}.inline-create input:focus{border-color:var(--accent);background:var(--panel-3)}.inline-create button.ghost,button.ghost{border-radius:var(--radius-sm);background:var(--panel-3);width:30px;height:30px;color:var(--muted);border:0;place-items:center;padding:0;font-size:14px;font-weight:600;display:grid}.inline-create button.ghost:hover{background:var(--accent);color:var(--accent-contrast)}.user-card{background:var(--panel-2);border-top:1px solid var(--line);width:100%;color:inherit;text-align:left;cursor:pointer;border-bottom:0;border-left:0;border-right:0;align-items:center;gap:10px;padding:10px 12px;transition:background .12s;display:flex}.user-card:hover{background:var(--panel-3)}.user-card .dm-avatar{width:28px;height:28px;font-size:12px}.user-card .user-meta{flex:1;min-width:0}.user-card .user-meta strong{color:var(--text-strong);white-space:nowrap;text-overflow:ellipsis;font-size:13px;display:block;overflow:hidden}.user-card .user-meta span{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;display:block;overflow:hidden}@media (width<=820px){.workspace-header{min-height:calc(60px + var(--safe-area-top));padding-top:calc(14px + var(--safe-area-top));padding-right:calc(16px + var(--safe-area-right))}.sidebar-scroll{padding-bottom:calc(16px + var(--safe-area-bottom))}.user-card{padding-bottom:calc(10px + var(--safe-area-bottom))}}.messages{flex-direction:column;display:flex;position:relative}.messages-scroll{overflow-anchor:none;opacity:1;flex-direction:column;flex:1;min-height:0;padding:0 4px;transition:opacity .14s ease-out;display:flex;overflow-y:auto}.messages-scroll:focus{outline:none}.messages.is-revealing .messages-scroll{opacity:0;pointer-events:none;transition:opacity}.messages-spacer{flex-grow:1}.history-loader{pointer-events:none;gap:14px;margin:4px 0 6px;padding:6px 18px;animation:.22s ease-out both history-loader-fade;display:grid}.history-loader--newer{margin-top:6px;margin-bottom:4px}@keyframes history-loader-fade{0%{opacity:0}to{opacity:1}}.history-loader__row{grid-template-columns:56px minmax(0,1fr);min-height:44px;display:grid}.history-loader__avatar,.history-loader__meta,.history-loader__line,.history-loader__block{background:linear-gradient(90deg, color-mix(in srgb, var(--muted-2) 16%, transparent), color-mix(in srgb, var(--muted-2) 36%, transparent), color-mix(in srgb, var(--muted-2) 16%, transparent));animation:1.4s ease-in-out infinite history-loading;animation-delay:calc(var(--history-row,0) * 80ms);background-size:220% 100%;display:block}.history-loader__avatar{border-radius:10px;width:38px;height:38px}.history-loader__body{align-content:start;gap:8px;min-width:0;padding-top:4px;display:grid}.history-loader__meta{border-radius:999px;width:min(180px,38%);height:11px}.history-loader__line{border-radius:999px;height:10px}.history-loader__line--wide{width:min(540px,72%)}.history-loader__line--mid{width:min(360px,48%)}@keyframes history-loading{0%{background-position:120% 0}to{background-position:-120% 0}}@media (prefers-reduced-motion:reduce){.history-loader{animation:none}.history-loader__avatar,.history-loader__meta,.history-loader__line,.history-loader__block{background:color-mix(in srgb, var(--muted-2) 22%, transparent);animation:none}}.unread-bar{z-index:5;background:color-mix(in srgb, var(--panel) 82%, transparent);-webkit-backdrop-filter:blur(14px)saturate(140%);border:1px solid color-mix(in srgb, var(--accent) 38%, transparent);max-width:calc(100% - 32px);height:30px;color:var(--text);letter-spacing:.005em;box-shadow:inset 0 1px 0 #ffffff14, 0 10px 24px -14px #0000008c, 0 0 0 4px color-mix(in srgb, var(--accent) 10%, transparent);opacity:1;border-radius:999px;align-items:center;gap:6px;padding:0 5px 0 14px;font-size:12px;font-weight:600;transition:opacity .16s ease-out,transform .18s cubic-bezier(.2,.8,.2,1);display:inline-flex;position:absolute;top:10px;left:50%;transform:translate(-50%)}.unread-bar.is-clearing{opacity:0;pointer-events:none;transform:translate(-50%,-6px)}.unread-bar__jump,.unread-bar__mark{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;transition:background-color .12s ease-out,color .12s ease-out;display:inline-flex}.unread-bar__jump{text-align:left;min-width:0;color:color-mix(in srgb, var(--accent) 92%, var(--text));flex:0 auto;padding:0 6px 0 0}.unread-bar__jump:before{content:"";background:var(--accent);width:7px;height:7px;box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 55%, transparent);border-radius:50%;flex-shrink:0;animation:1.8s ease-out infinite unread-bar-pulse}@keyframes unread-bar-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 55%, transparent)}70%{box-shadow:0 0 0 7px color-mix(in srgb, var(--accent) 0%, transparent)}to{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 0%, transparent)}}@media (prefers-reduced-motion:reduce){.unread-bar__jump:before{animation:none}}.unread-bar__mark{background:color-mix(in srgb, var(--accent) 14%, transparent);height:22px;color:color-mix(in srgb, var(--accent) 90%, var(--text));letter-spacing:.01em;border-radius:999px;flex-shrink:0;padding:0 10px;font-size:11px;font-weight:600}.unread-bar__jump:hover{color:var(--accent)}.unread-bar__mark:hover{background:color-mix(in srgb, var(--accent) 24%, transparent);color:var(--accent)}.unread-bar__jump:focus-visible,.unread-bar__mark:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 70%, transparent);outline-offset:2px;border-radius:999px}.unread-bar__label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.typing-indicator{height:0;color:var(--text-muted);opacity:0;pointer-events:none;align-items:center;gap:8px;margin-top:0;padding:0 22px;font-size:12px;transition:height .12s ease-out,margin-top .12s ease-out,opacity .12s ease-out,transform .16s cubic-bezier(.2,.8,.2,1);display:flex;overflow:hidden;transform:translateY(2px)}.typing-indicator.visible{opacity:1;height:20px;margin-top:-4px;transform:translateY(0)}.composer-dock{padding-top:20px;position:relative}.topic-filter{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--accent) 8%, var(--panel));color:var(--muted);justify-content:space-between;align-items:center;gap:12px;padding:8px 18px;font-size:13px;display:flex}.topic-filter strong{color:var(--text)}.topic-filter button,.message-topic{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0}.topic-filter button:hover,.message-topic:hover{text-decoration:underline}.message-topic{background:color-mix(in srgb, var(--accent) 12%, transparent);border-radius:999px;margin:0 0 4px;padding:2px 7px;font-size:11px;font-weight:700;display:inline-flex}.topic-picker{border:1px solid var(--line);background:var(--panel);color:var(--muted);border-bottom:0;border-radius:10px 10px 0 0;align-items:center;gap:8px;margin:0 14px -1px;padding:7px 10px;font-size:12px;display:flex}.topic-picker select{min-width:0;max-width:min(280px,65vw);color:var(--text);font:inherit;background:0 0;border:0}.composer-dock .agent-responding{opacity:0;pointer-events:none;align-items:center;height:20px;margin:0;padding:0 22px;transition:opacity .12s ease-out;display:flex;position:absolute;top:0;left:0;right:0;overflow:hidden;transform:none}.composer-dock .agent-responding.visible{opacity:1;height:20px;margin:0;transform:none}.typing-indicator__dots{align-items:center;gap:3px;display:inline-flex}.typing-indicator__dots i{opacity:.55;background:currentColor;border-radius:50%;width:4px;height:4px;animation:1.1s ease-in-out infinite typing-dot}.typing-indicator__dots i:nth-child(2){animation-delay:.15s}.typing-indicator__dots i:nth-child(3){animation-delay:.3s}@keyframes typing-dot{0%,60%,to{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.message-row.is-pending{opacity:.55}.message-row.is-pending .message-content,.message-row.is-pending .markdown{pointer-events:none}.message-row.is-failed{opacity:1}.message-row.is-deleted{color:var(--muted)}.message-failed{background:color-mix(in srgb, var(--danger,#d04848) 14%, transparent);color:var(--danger,#d04848);border-radius:999px;align-items:center;gap:10px;margin-top:6px;padding:4px 10px;font-size:12px;display:inline-flex}.message-failed__label{font-weight:500}.message-failed__action{color:inherit;font:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:999px;padding:2px 8px;line-height:1}.message-failed__action:hover{background:color-mix(in srgb, currentColor 12%, transparent)}.message-failed__action--ghost{border-color:color-mix(in srgb, currentColor 50%, transparent)}@media (prefers-reduced-motion:reduce){.typing-indicator{transition:opacity 80ms ease-out;transform:none}.typing-indicator.visible{transform:none}.typing-indicator__dots i{opacity:.7;animation:none}}.empty{text-align:center;align-content:center;place-items:center;gap:10px;min-height:50vh;padding:48px 24px;display:grid}.empty-icon{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));border:1px solid color-mix(in srgb, var(--brand-b) 55%, var(--line-strong));width:64px;height:64px;color:var(--brand-contrast);box-shadow:var(--key-edge), 0 18px 40px -16px color-mix(in srgb, var(--brand-b) 60%, transparent);border-radius:16px;place-items:center;font-size:26px;font-weight:800;display:grid}.empty strong{color:var(--text-strong);letter-spacing:-.01em;font-size:19px;font-family:var(--font-display);overflow-wrap:anywhere;font-weight:700}.empty span{color:var(--muted);max-width:380px;line-height:1.5}.day-divider{pointer-events:none;align-items:center;gap:12px;margin:18px 18px 8px;display:flex}.day-divider:before,.day-divider:after{content:"";background:var(--line);flex:1;height:1px}.day-divider span{background:var(--bg);border:1px solid var(--line);font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.07em;border-radius:999px;padding:4px 12px;font-size:10px;font-weight:600}.new-messages-divider{pointer-events:none;opacity:1;align-items:center;gap:0;margin:4px 0 2px;padding:0 18px;transition:opacity .16s ease-out,transform .18s cubic-bezier(.2,.8,.2,1);display:flex;position:relative;transform:translateY(0)}.new-messages-divider.is-clearing{opacity:0;transform:translateY(-4px)}.new-messages-divider:before{content:"";background:var(--danger,#ed4245);opacity:.9;flex:1;height:1px}.new-messages-divider span{background:var(--danger,#ed4245);color:#fff;letter-spacing:.04em;text-transform:uppercase;border-radius:3px;align-items:center;height:14px;margin-left:8px;padding:0 5px;font-size:9px;font-weight:700;display:inline-flex}.message-group{grid-template-columns:56px minmax(0,1fr);padding:8px 18px;display:grid;position:relative}.avatar{color:#fff;background:linear-gradient(135deg, hsl(var(--hue,220deg) 70% 55%), hsl(calc(var(--hue,220deg) + 40deg) 70% 45%));border-radius:10px;place-items:center;width:38px;height:38px;margin-top:2px;font-size:14px;font-weight:700;display:grid;overflow:hidden;box-shadow:0 6px 20px -10px #0009}.avatar-button{z-index:2;cursor:pointer;border:0;padding:0;transition:transform .1s,box-shadow .12s,filter .12s;position:relative}.avatar-button:hover{filter:brightness(1.05);transform:translateY(-1px);box-shadow:0 10px 24px -12px #000c}.avatar.small{border-radius:10px;width:30px;height:30px;font-size:12px}.avatar.large{border-radius:16px;width:56px;height:56px;margin:0;font-size:18px}.group-body{min-width:0}.group-body>header{align-items:baseline;gap:8px;margin-bottom:2px;display:flex}.message-group .group-body>header{margin:0 -18px 0 -56px;padding:0 18px 2px 56px}.group-body>header strong{color:var(--text-strong);letter-spacing:-.005em;font-size:14.5px;font-weight:700}.author-name{color:var(--text-strong);letter-spacing:0;background:0 0;border:0;border-radius:4px;padding:0;font-size:14.5px;font-weight:700}.author-name:hover{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.author-name--static:hover{color:var(--text-strong);text-decoration:none}.group-body>header time{color:var(--muted);font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:10.5px}.group-body>header span{color:var(--muted);font-size:12px}.bot-chip{border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);height:18px;color:var(--accent);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;border-radius:4px;align-items:center;padding:0 6px;font-size:9.5px;font-weight:700;line-height:1;display:inline-flex}.bot-chip--deleted{border-color:var(--line-strong);color:var(--muted)}.message-row{border-radius:0;margin-left:-56px;margin-right:-18px;padding:1px 18px 1px 56px;transition:background 80ms;position:relative}.message-row:not(:first-child){margin-top:1px}.message-row:hover,.message-group .group-body>header:hover,.message-group .group-body>header:hover+.message-row{background:var(--hover)}.message-group .group-body>header:has(+.message-row:hover){background:var(--hover)}.message-group .group-body>header:hover+.message-row .message-actions{opacity:1;pointer-events:auto}.message-row.selected{background:var(--accent-soft)}.message-row.can-open-thread{cursor:pointer}.row-stamp{font-family:var(--font-mono);color:var(--muted-2);opacity:0;font-variant-numeric:tabular-nums;font-size:9.5px;position:absolute;top:4px;left:8px}.message-row.is-preamble{background:0 0;margin-bottom:6px;padding-top:4px;padding-bottom:4px}.message-row.is-preamble:not(.before-final-message) .message-content{border:1px solid color-mix(in srgb, var(--activity-accent) 20%, transparent);border-radius:var(--radius-lg);background:var(--activity-accent-soft);box-shadow:0 2px 0 color-mix(in srgb, var(--activity-accent) 14%, transparent);padding:10px 14px}.message-row.is-preamble-collapsed .message-content{padding-top:6px;padding-bottom:6px}.message-row.is-preamble.before-final-message{background:0 0;margin-bottom:0;padding-top:2px;padding-bottom:0}.message-row.after-preamble{margin-top:0;padding-top:0;padding-bottom:2px}.message-row.is-preamble.before-final-message:before{display:none}.message-row.is-preamble.before-final-message .message-content{border:1px solid color-mix(in srgb, var(--activity-accent) 20%, transparent);background:var(--activity-accent-soft);border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);border-bottom:0;padding:10px 14px}.message-row.after-preamble .message-content{border:1px solid color-mix(in srgb, var(--delivery-accent) 20%, transparent);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg);background:var(--delivery-accent-soft);box-shadow:0 2px 0 color-mix(in srgb, var(--delivery-accent) 14%, transparent);border-top:0;padding:10px 14px}.message-row.is-preamble.before-final-message.is-preamble-collapsed .message-content{background:color-mix(in srgb, var(--activity-accent) 10%, var(--panel));border-bottom:1px solid color-mix(in srgb, var(--activity-accent) 30%, transparent);padding-top:7px;padding-bottom:7px}:root[data-user-align=right] .message-group.is-self,:root[data-other-align=right] .message-group:not(.is-self){grid-template-columns:minmax(0,1fr) 56px}:root[data-user-align=right] .message-group.is-self>.avatar,:root[data-other-align=right] .message-group:not(.is-self)>.avatar{grid-area:1/2;justify-self:end}:root[data-user-align=right] .message-group.is-self>.group-body,:root[data-other-align=right] .message-group:not(.is-self)>.group-body{grid-area:1/1;min-width:0}:root[data-user-align=right] .message-group.is-self .group-body>header,:root[data-other-align=right] .message-group:not(.is-self) .group-body>header{justify-content:flex-end;margin:0 -56px 0 -18px;padding:0 56px 2px 18px}:root[data-user-align=right] .message-group.is-self .message-row,:root[data-other-align=right] .message-group:not(.is-self) .message-row{margin-left:-18px;margin-right:-56px;padding-left:18px;padding-right:56px}:root[data-user-align=right] .message-group.is-self .message-content,:root[data-other-align=right] .message-group:not(.is-self) .message-content{text-align:right;margin-left:auto}:root[data-user-align=right] .message-group.is-self .markdown,:root[data-other-align=right] .message-group:not(.is-self) .markdown{text-align:right}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown ul,:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown ol,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown ul,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown ol{padding-left:0;padding-right:0;list-style-position:inside}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown li>ul,:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown li>ol,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown li>ul,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown li>ol{padding-left:0;padding-right:22px}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown li>p:first-child,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown li>p:first-child{display:inline}:root:not([data-message-layout=outlined])[data-user-align=right] .message-group.is-self .markdown blockquote,:root:not([data-message-layout=outlined])[data-other-align=right] .message-group:not(.is-self) .markdown blockquote{border-left:0;border-right:3px solid var(--accent);padding-left:0;padding-right:12px}:root[data-user-align=right] .message-group.is-self .attachment-grid,:root[data-other-align=right] .message-group:not(.is-self) .attachment-grid{margin-left:auto}.preamble-contract{gap:7px;min-width:0;display:grid}.preamble-toggle{width:100%;min-height:20px;color:var(--activity-accent);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:auto auto auto minmax(0,1fr);align-items:center;gap:7px;padding:0;display:grid}.preamble-chevron{color:var(--activity-accent);font-size:10px;transition:transform .12s}.preamble-chevron.open{transform:rotate(90deg)}.preamble-state,.preamble-action{line-height:1}.preamble-state{border:1px solid color-mix(in srgb, var(--activity-accent) 30%, transparent);height:17px;color:var(--activity-accent);text-transform:uppercase;letter-spacing:.03em;border-radius:999px;align-items:center;padding:0 7px;font-size:9.5px;font-weight:750;display:inline-flex}.preamble-state.is-live{border-color:color-mix(in srgb, var(--activity-accent) 55%, transparent);animation:1.6s ease-in-out infinite preamble-live-pulse}@keyframes preamble-live-pulse{0%,to{opacity:1}50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.preamble-state.is-live{animation:none}}.preamble-action{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.preamble-body{color:var(--muted);overflow-wrap:anywhere;word-break:break-word;min-width:0}.preamble-flow{gap:7px;min-width:0;padding-left:17px;display:grid}.preamble-tool{--tool-accent:var(--activity-accent);background:var(--tool-call-bg);border-radius:7px;min-width:0;overflow:hidden}.preamble-tool-summary{width:100%;min-width:0;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:7px;padding:4px 9px;line-height:1.5;display:flex}.preamble-tool-summary:hover{background:var(--tool-call-bg-hover)}.preamble-tool-full{color:var(--muted);overflow-wrap:anywhere;word-break:break-word;gap:5px;min-width:0;padding:2px 10px 8px 27px;font-size:12px;display:grid}.preamble-tool-full-head{font-family:var(--font-mono);color:color-mix(in srgb, var(--tool-accent) 45%, var(--muted));font-size:11px;font-weight:600}.preamble-tool-full-body{min-width:0}.preamble-tool-full pre{white-space:pre-wrap;overflow-wrap:anywhere}.tool-line-chevron{color:var(--muted-2);flex-shrink:0;font-size:9px;transition:transform .12s}.tool-line-chevron.open{transform:rotate(90deg)}.tool-line-glyph{filter:saturate(.85);flex-shrink:0;font-size:11px}.tool-line-action{color:color-mix(in srgb, var(--tool-accent) 38%, var(--text));flex-shrink:0;font-size:11.5px;font-weight:600}.tool-line-name{text-overflow:ellipsis;white-space:nowrap;max-width:40%;color:color-mix(in srgb, var(--tool-accent) 55%, var(--muted));font-size:11px;font-weight:500;font-family:var(--font-mono);flex-shrink:0;overflow:hidden}.tool-line-detail{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--muted);font-size:11px;font-weight:400;font-family:var(--font-mono);opacity:.85;flex:auto;overflow:hidden}.message-row:hover .row-stamp{opacity:1}.message-content{min-width:0;display:flow-root}.thread-hint{min-height:22px;color:var(--muted-2);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;margin-top:4px;padding:3px 8px;font-size:12px;font-weight:700;line-height:1;display:inline-flex}.thread-hint:not(.has-replies):not(.is-open){display:none}.thread-hint svg{flex:none}.thread-hint time{color:var(--muted);font-variant-numeric:tabular-nums;font-size:10.5px;font-weight:500}.thread-hint.has-replies,.thread-hint.is-open{color:var(--accent)}.thread-hint.is-open{border-color:color-mix(in srgb, var(--accent) 40%, transparent);background:color-mix(in srgb, var(--accent-soft) 70%, transparent)}.thread-hint:hover{border-color:var(--line-strong);background:var(--panel)}.thread-hint:disabled{cursor:default;opacity:.45}.message-actions{opacity:0;pointer-events:none;background:var(--panel);border:1px solid var(--line-strong);box-shadow:var(--shadow);border-radius:8px;align-items:flex-start;gap:4px;padding:2px;transition:opacity .1s;display:flex;position:absolute;top:-24px;right:8px}.message-row:hover .message-actions,.message-row.selected .message-actions,.message-row.menu-open .message-actions{opacity:1;pointer-events:auto}.message-row:has(:focus-visible) .message-actions{opacity:1;pointer-events:auto}.message-row.actions-flip .message-actions{top:auto;bottom:-24px}.message-row.menu-open{z-index:6}.message-row:hover,.message-row.selected{z-index:5}.message-row:has(:focus-visible){z-index:5}.messages:has(.message-row.menu-open) .message-row:hover:not(.menu-open) .message-actions{opacity:0;pointer-events:none}.messages:has(.message-row.menu-open) .message-group .group-body>header:hover+.message-row:not(.menu-open) .message-actions{opacity:0;pointer-events:none}@media (hover:none),(pointer:coarse){.message-actions{width:1px;height:1px;box-shadow:none;opacity:1;pointer-events:auto;background:0 0;border:0;padding:0;top:1px;bottom:auto;overflow:visible;transform:none}.message-actions>:not(.message-more){display:none}.message-row.actions-flip .message-actions{top:1px;bottom:auto}.message-actions .message-more{position:static}.message-actions .message-actions-trigger{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.message-actions .message-actions-trigger:focus-visible{clip:auto;clip-path:none;border:1px solid var(--line-strong);background:var(--panel);width:36px;height:36px;box-shadow:var(--shadow);margin:0;top:0;right:0;overflow:visible}.message-row:has(.message-actions-trigger:focus-visible) .message-content{padding-right:44px}}.message-actions button{width:28px;height:28px;color:var(--muted);background:0 0;border:0;border-radius:6px;place-items:center;display:grid}.message-actions button:hover{background:var(--hover-strong);color:var(--text-strong)}.message-actions button:disabled{opacity:.45}.message-copy-status{background:var(--accent-soft);height:24px;color:var(--accent);white-space:nowrap;border-radius:5px;align-self:center;align-items:center;padding:0 6px;font-size:11px;font-weight:700;display:inline-flex}.message-copy-status.is-error{background:color-mix(in srgb, var(--danger) 10%, transparent);color:var(--danger)}.message-sheet-scrim{z-index:60;background:#05080f66;flex-direction:column;justify-content:flex-end;display:flex;position:fixed;inset:0}.message-sheet-backdrop{background:0 0;border:0;padding:0;position:absolute;inset:0}.message-action-sheet{z-index:1;background:var(--panel);border:1px solid var(--line);max-height:calc(100dvh - 16px - env(safe-area-inset-top,0px));padding:8px 12px calc(10px + env(safe-area-inset-bottom,0px));overscroll-behavior:contain;border-bottom:0;border-radius:16px 16px 0 0;animation:.16s ease-out sheet-rise;position:relative;overflow-y:auto}@keyframes sheet-rise{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.message-action-sheet{animation:none}}.message-action-sheet .sheet-grabber{background:var(--line-strong);border-radius:999px;width:36px;height:4px;margin:0 auto 8px}.message-action-sheet .sheet-emoji-row{border-bottom:1px solid var(--line);justify-content:space-around;gap:4px;padding-bottom:8px;display:flex}.message-action-sheet .sheet-emoji-row button{background:0 0;border:0;border-radius:10px;place-items:center;width:44px;height:44px;font-size:22px;line-height:1;display:grid}.message-action-sheet .sheet-emoji-row button:active{background:var(--hover-strong)}.message-action-sheet .sheet-actions{flex-direction:column;padding-top:4px;display:flex}.message-action-sheet .sheet-actions button{width:100%;color:var(--text-strong);text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:12px;padding:12px 8px;font-size:15px;display:flex}.message-action-sheet .sheet-actions button:active{background:var(--hover-strong)}.message-action-sheet .sheet-actions button:disabled{opacity:.45}.message-action-sheet .sheet-actions svg{color:var(--muted);flex:none}.message-action-sheet .sheet-danger,.message-action-sheet .sheet-danger svg{color:var(--danger)}.message-action-sheet .sheet-copy-status{background:var(--accent-soft);height:22px;color:var(--accent);white-space:nowrap;border-radius:5px;align-items:center;margin-left:auto;padding:0 6px;font-size:11px;font-weight:700;display:inline-flex}.message-action-sheet .sheet-copy-status.is-error{background:color-mix(in srgb, var(--danger) 10%, transparent);color:var(--danger)}.message-action-sheet .sheet-action-error{color:var(--danger);margin:-4px 12px 4px;font-size:12px;line-height:1.35}.message-actions .message-action-react{font-size:15px;line-height:1}.message-actions .action-sep{background:var(--line);flex:none;align-self:center;width:1px;height:18px;margin:0 3px}.message-actions .picker-wrapper,.message-actions .message-more{position:relative}.message-menu{z-index:30;background:var(--panel);border:1px solid var(--line-strong);min-width:190px;box-shadow:var(--shadow);border-radius:10px;padding:5px;font-size:13px;position:absolute;top:calc(100% + 4px);right:0}.message-menu.above{top:auto;bottom:calc(100% + 4px)}.message-menu button{width:100%;height:auto;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:7px;align-items:center;gap:9px;padding:7px 10px;font-size:13px;display:flex}.message-menu button:hover{background:var(--hover-strong);color:var(--text-strong)}.message-menu button svg{color:var(--muted);flex:none}.message-menu .menu-sep{border-top:1px solid var(--line);margin:5px 4px}.message-menu .menu-danger,.message-menu .menu-danger svg{color:var(--danger)}.message-menu .menu-danger:hover{background:color-mix(in srgb, var(--danger) 10%, transparent);color:var(--danger)}.message-edit{gap:7px;width:min(100%,760px);padding:5px 0 3px;display:grid}.message-edit__textarea{border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 94%, var(--text) 6%);width:100%;min-height:72px;max-height:240px;color:var(--text);font:inherit;resize:vertical;box-sizing:border-box;box-shadow:inset 0 1px 1px color-mix(in srgb, var(--text) 5%, transparent);border-radius:7px;padding:9px 11px;font-size:14.5px;line-height:1.5;transition:border-color .12s,box-shadow .12s,background .12s}.message-edit__textarea:hover:not(:disabled){border-color:color-mix(in srgb, var(--line-strong) 62%, var(--text) 38%)}.message-edit__textarea:focus{border-color:var(--accent);background:var(--panel);box-shadow:inset 0 1px 1px color-mix(in srgb, var(--text) 4%, transparent), 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.message-edit__textarea:disabled{cursor:progress;opacity:.78}.message-edit__footer{flex-wrap:wrap;align-items:center;gap:6px;min-height:30px;display:flex}.message-edit__footer .message-edit__save{background:var(--accent);min-width:68px;min-height:30px;color:var(--accent-contrast);cursor:pointer;border:0;border-radius:6px;justify-content:center;align-items:center;gap:4px;padding:5px 12px;font-size:13px;font-weight:500;display:inline-flex}.message-edit__footer .message-edit__save:hover{filter:brightness(1.1)}.message-edit__footer .message-edit__save:focus-visible,.message-edit__footer .message-edit__cancel:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.message-edit__footer .message-edit__save:disabled{opacity:.5;cursor:progress}.message-edit__footer .message-edit__cancel{min-height:30px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:5px 10px;font-size:13px;display:inline-flex}.message-edit__footer .message-edit__cancel:hover{border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.message-edit__error{border-left:2px solid var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent);width:fit-content;max-width:100%;color:var(--danger);border-radius:3px;margin:0;padding:5px 8px;font-size:12.5px;line-height:1.35}.message-edit__indicator{color:var(--muted);align-items:center;gap:3px;margin-left:8px;font-size:11px;display:inline-flex}.message-row.editing .message-actions{display:none}@media (width<=520px){.message-edit__footer .message-edit__save,.message-edit__footer .message-edit__cancel{flex:1 1 0}}.message-deleted{min-height:22px;color:var(--muted);align-items:center;font-size:13px;font-style:italic;display:inline-flex}.markdown{color:var(--text);overflow-wrap:anywhere;word-break:break-word;font-size:14.5px;line-height:1.5}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p{margin:0}.markdown p+p,.markdown ul,.markdown ol,.markdown blockquote,.markdown pre{margin-top:6px}.markdown a{color:var(--accent);text-decoration:none}.markdown a:hover{text-decoration:underline}.message-mention{border:1px solid color-mix(in srgb, currentColor 18%, transparent);background:color-mix(in srgb, currentColor 8%, transparent);color:inherit;border-radius:4px;margin:0 1px;padding:0 3px;font-weight:600}.message-mention.is-current-user{border-color:color-mix(in srgb, var(--accent) 42%, transparent);background:color-mix(in srgb, var(--accent) 20%, transparent);color:var(--accent);font-weight:700}.markdown code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-family:Geist Mono Variable,JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.markdown pre{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;overflow-x:auto}.markdown pre code{background:0 0;border:0;padding:0}.markdown blockquote{border-left:3px solid var(--accent);color:var(--muted);margin:0;padding:4px 0 4px 12px}.markdown ul,.markdown ol{padding-left:22px}.markdown img{border-radius:var(--radius);border:1px solid var(--line);object-fit:contain;background:var(--panel);cursor:zoom-in;max-width:100%;max-height:360px;margin-top:6px}.markdown-table-scroll{-webkit-overflow-scrolling:touch;overscroll-behavior-inline:contain;max-width:100%;margin-top:6px;overflow-x:auto}.markdown-table-scroll[data-overflowing]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.markdown-table-scroll:first-child{margin-top:0}.markdown-table-scroll>table{border-collapse:collapse;border-spacing:0;width:max-content;min-width:100%;font-size:.9em}.markdown thead{background:var(--muted-2)}.markdown th,.markdown td{vertical-align:top;border:1px solid var(--line);padding:8px 12px}.markdown thead th{color:var(--text-strong);font-weight:700}.markdown tbody tr:nth-child(2n){background:color-mix(in srgb, var(--muted-2) 18%, transparent)}.markdown tbody tr:hover{background:color-mix(in srgb, var(--muted-2) 26%, transparent)}.gif-player{vertical-align:top;max-width:100%;display:inline-block;position:relative}.gif-player img{display:block}.gif-badge,.gif-replay{z-index:1;color:#fff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:0;position:absolute}.gif-badge{letter-spacing:.04em;pointer-events:none;background:#0000008a;border-radius:999px;padding:4px 7px;font-size:10px;font-weight:800;bottom:9px;left:9px}.gif-replay{opacity:0;pointer-events:none;background:#0a0c12b8;border-radius:999px;place-items:center;width:30px;height:30px;font-size:16px;line-height:1;transition:opacity .13s,transform .13s,background .12s;display:grid;bottom:9px;right:9px;transform:scale(.88)}.gif-replay:hover{background:var(--accent)}.gif-player.paused .gif-replay{opacity:1;pointer-events:auto;transform:scale(1)}.gif-player.playing .gif-badge{animation:.9s ease-in-out infinite gif-breathe}@keyframes gif-breathe{0%,to{opacity:.85}50%{opacity:.45}}.attachment-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;max-width:560px;margin-top:8px;display:grid}.attachment-grid.compact{grid-template-columns:minmax(0,1fr);max-width:420px}.media-tile{border:1px solid var(--line);border-radius:var(--radius-lg);isolation:isolate;text-align:left;width:100%;color:inherit;cursor:pointer;background:#0a0c12;margin:0;padding:0;text-decoration:none;transition:border-color .14s,transform .14s,box-shadow .14s;display:block;position:relative;overflow:hidden}.media-tile:hover{border-color:var(--line-strong);box-shadow:0 18px 40px -28px #000000e6}.media-tile:focus-visible{border-color:var(--line-strong);box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent);outline:none}.media-tile--image{cursor:zoom-in}.media-tile__open{width:100%;color:inherit;cursor:zoom-in;background:0 0;border:0;margin:0;padding:0;display:block}.media-tile__open:focus{outline:0}.media-tile__open:focus-visible+.media-tile__caption .media-tile__name{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.media-tile--video{cursor:default}.media-tile img,.media-tile video{object-fit:contain;background:#05070d;width:100%;max-height:360px;display:block}.media-tile--image img{max-height:320px}.media-tile__caption{z-index:3;opacity:0;pointer-events:none;background:linear-gradient(#0000 0%,#00000080 60%,#000000c7 100%);align-items:center;gap:8px;padding:22px 10px 8px;transition:opacity .14s;display:flex;position:absolute;inset:auto 0 0}.media-tile__caption>*{pointer-events:auto}.media-tile:hover .media-tile__caption,.media-tile:focus-within .media-tile__caption{opacity:1}.media-tile--video.is-started .media-tile__caption{display:none}.media-tile__name{color:#fff;white-space:nowrap;text-overflow:ellipsis;text-shadow:0 1px 2px #0009;flex:1;min-width:0;font-size:12px;font-weight:500;overflow:hidden}.media-tile__chip{z-index:4;color:#fff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#00000080;border:1px solid #ffffff2e;border-radius:8px;flex:none;place-items:center;width:28px;height:28px;text-decoration:none;transition:background .12s,border-color .12s,transform .12s;display:inline-grid;position:relative}.media-tile__chip:hover{background:#000000b3;border-color:#ffffff52;transform:translateY(-1px)}.media-tile__play{cursor:pointer;z-index:1;background:0 0;border:0;place-items:center;width:100%;height:auto;margin:0;padding:0;display:grid;position:absolute;inset:0 0 48px}.media-tile__play:before{content:"";opacity:.7;pointer-events:none;background:radial-gradient(#0000002e 0%,#0000000d 45%,#0000 70%);transition:opacity .16s;position:absolute;inset:0}.media-tile__play:hover:before{opacity:.9}.media-tile__play-icon{color:#fff;-webkit-backdrop-filter:blur(10px);background:#0000008c;border-radius:999px;place-items:center;width:46px;height:46px;padding-left:3px;transition:transform .2s cubic-bezier(.2,.8,.2,1),background .18s,box-shadow .2s;display:grid;position:relative;box-shadow:0 6px 20px -8px #0000008c}.media-tile__play-icon svg{filter:drop-shadow(0 1px 2px #0006)}.media-tile__play:hover .media-tile__play-icon{background:#000000b3;transform:scale(1.06);box-shadow:0 10px 28px -10px #000000a6}.media-tile__play:active .media-tile__play-icon{transition-duration:80ms;transform:scale(.97)}.media-tile__play:focus-visible{outline:none}.media-tile__play:focus-visible .media-tile__play-icon{box-shadow:0 0 0 2px #fff9,0 10px 28px -10px #000000a6}.media-tile__duration{z-index:2;color:#fff;font-variant-numeric:tabular-nums;letter-spacing:.02em;pointer-events:none;background:#000000b8;border-radius:4px;padding:2px 6px;font-size:11px;font-weight:600;position:absolute;bottom:8px;left:8px}.file-attachment{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);align-items:center;gap:10px;max-width:360px;padding:10px;display:flex}.file-attachment:hover{border-color:var(--line-strong);background:var(--panel-2)}.file-icon{background:var(--accent-soft);width:34px;height:34px;color:var(--accent);border-radius:8px;place-items:center;font-weight:800;display:grid}.file-attachment strong,.file-attachment small{display:block}.file-attachment strong{color:var(--text-strong);font-size:13px}.file-attachment small{color:var(--muted);font-size:11px}.audio-attachment,.document-attachment{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(100%,420px);overflow:hidden}.audio-attachment{gap:10px;padding:10px;display:grid}.audio-attachment__meta{align-items:center;gap:10px;min-width:0;display:flex}.audio-attachment audio{width:100%;height:36px}.document-attachment{grid-template-columns:64px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px;display:grid}.document-attachment__thumbnail{border:1px solid var(--line);background:linear-gradient(135deg, transparent 0 76%, var(--panel-3) 76% 100%), linear-gradient(180deg, #fff 0%, #f0f2f7 100%);width:64px;height:82px;color:var(--accent);letter-spacing:0;cursor:pointer;border-radius:6px;place-items:center;font-size:13px;font-weight:800;text-decoration:none;display:inline-grid;position:relative;overflow:hidden;box-shadow:0 8px 18px -16px #0009}.document-attachment__thumbnail:before,.document-attachment__thumbnail:after{content:"";background:color-mix(in srgb, var(--muted) 36%, transparent);border-radius:999px;height:2px;position:absolute;left:14px;right:14px}.document-attachment__thumbnail:before{top:48px}.document-attachment__thumbnail:after{top:56px}.document-attachment__meta{gap:5px;min-width:0;display:grid}.document-attachment__title{width:100%;min-width:0;color:var(--text-strong);white-space:nowrap;text-overflow:ellipsis;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:700;text-decoration:none;overflow:hidden}.document-attachment__title:hover{text-underline-offset:3px;text-decoration:underline}.document-attachment__meta small{color:var(--muted);white-space:nowrap;font-size:11px}.document-attachment__download{width:30px;height:30px;color:var(--muted);border-radius:8px;place-items:center;text-decoration:none;transition:background .12s,color .12s;display:inline-grid}.document-attachment__download:hover{background:var(--panel-2);color:var(--text-strong)}@media (width<=520px){.message-group{grid-template-columns:44px minmax(0,1fr);padding:7px 12px}:root[data-user-align=right] .message-group.is-self,:root[data-other-align=right] .message-group:not(.is-self){grid-template-columns:minmax(0,1fr) 44px}.message-row{margin-left:-44px;margin-right:-12px;padding-left:44px;padding-right:12px}:root[data-user-align=right] .message-group.is-self .message-row,:root[data-other-align=right] .message-group:not(.is-self) .message-row{margin-left:-12px;margin-right:-44px;padding-left:12px;padding-right:44px}.message-group .group-body>header{margin-left:-44px;margin-right:-12px;padding-left:44px;padding-right:12px}:root[data-user-align=right] .message-group.is-self .group-body>header,:root[data-other-align=right] .message-group:not(.is-self) .group-body>header{margin-left:-12px;margin-right:-44px;padding-left:12px;padding-right:44px}.row-stamp{display:none}.attachment-grid,.attachment-grid.compact{grid-template-columns:minmax(0,1fr);max-width:100%}}:root[data-message-layout=outlined] .message-group .group-body{width:100%}:root[data-message-layout=outlined] .message-group .message-row{margin-left:0;margin-right:0;padding:0}:root[data-message-layout=outlined] .message-group .group-body>header{margin-left:0;margin-right:0;padding-left:0;padding-right:0}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .message-content,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .message-content,:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .markdown,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .markdown{text-align:start}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .thread-hint,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .thread-hint{width:fit-content;margin-left:auto;display:flex}:root[data-message-layout=outlined] .message-group .row-stamp{left:-48px}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .row-stamp,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .row-stamp{left:auto;right:-48px}:root[data-message-layout=outlined] .message-group .message-row:not(:first-child){margin-top:4px}:root[data-message-layout=outlined] .message-group .message-content{border-radius:var(--radius-lg);width:fit-content;max-width:min(96%,1100px);margin-top:2px;padding:10px 14px;position:relative}:root[data-message-layout=outlined] .message-group .message-row:not(.is-preamble):not(.after-preamble) .message-content{border:1px solid var(--line-strong)}:root[data-message-layout=outlined] .message-group.is-agent .message-content{width:96%;max-width:1100px}:root[data-message-layout=outlined] .message-group .message-row.before-final-message+.message-row.after-preamble{margin-top:-1px}:root[data-message-layout=outlined] .message-group.is-agent .message-row.before-final-message .message-content{border-bottom-right-radius:0;border-bottom-left-radius:0}:root[data-message-layout=outlined] .message-group.is-agent .message-row.after-preamble .message-content{border-top-left-radius:0;border-top-right-radius:0}:root[data-density=compact] .message-group{grid-template-columns:42px minmax(0,1fr);padding:2px 18px}:root[data-density=compact][data-user-align=right] .message-group.is-self,:root[data-density=compact][data-other-align=right] .message-group:not(.is-self){grid-template-columns:minmax(0,1fr) 42px}:root[data-density=compact] .message-group>.avatar{border-radius:7px;width:26px;height:26px;font-size:11px}:root[data-density=compact] .group-body>header{gap:6px;margin-bottom:0}:root[data-density=compact] .message-group .group-body>header{margin-left:-42px;padding-left:42px}:root[data-density=compact][data-user-align=right] .message-group.is-self .group-body>header,:root[data-density=compact][data-other-align=right] .message-group:not(.is-self) .group-body>header{margin-left:-18px;margin-right:-42px;padding-left:18px;padding-right:42px}:root[data-density=compact] .group-body>header strong,:root[data-density=compact] .author-name{font-size:13px}:root[data-density=compact] .group-body>header time{font-size:10px}:root[data-density=compact] .message-row{margin-left:-42px;padding-left:42px}:root[data-density=compact][data-user-align=right] .message-group.is-self .message-row,:root[data-density=compact][data-other-align=right] .message-group:not(.is-self) .message-row{margin-left:-18px;margin-right:-42px;padding-left:18px;padding-right:42px}:root[data-density=compact] .markdown{font-size:13.5px;line-height:1.42}:root[data-density=compact] .reactions-bar{margin-top:2px}:root[data-density=compact][data-message-layout=outlined] .message-group .message-row{margin-left:0;padding-left:0}:root[data-density=compact][data-message-layout=outlined] .message-group .row-stamp{left:-34px}:root[data-density=compact][data-message-layout=outlined][data-user-align=right] .message-group.is-self .row-stamp,:root[data-density=compact][data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .row-stamp{left:auto;right:-34px}@media (width<=520px){:root[data-density=compact] .message-group{padding-left:12px;padding-right:12px}}:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .message-row,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .message-row,:root[data-message-layout=outlined][data-user-align=right] .message-group.is-self .group-body>header,:root[data-message-layout=outlined][data-other-align=right] .message-group:not(.is-self) .group-body>header{margin-left:0;margin-right:0;padding-left:0;padding-right:0}.composer{--composer-card-top:8px;--composer-overlay-gap:8px;--composer-overlay-inset-x:18px;background:var(--bg);gap:0;padding:8px 18px 6px;display:grid;position:relative}.composer-card{background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius-lg);box-shadow:var(--key-edge);flex-direction:column;transition:border-color .12s,box-shadow .12s;display:flex;overflow:hidden}.composer:focus-within .composer-card{border-color:color-mix(in srgb, var(--accent) 55%, var(--line-strong));box-shadow:var(--key-edge), 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent)}.composer-suggestions{left:var(--composer-overlay-inset-x);bottom:calc(100% - var(--composer-card-top) + var(--composer-overlay-gap));z-index:40;width:min(560px, calc(100% - (var(--composer-overlay-inset-x) * 2)));border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 97%, transparent);max-height:min(320px,45vh);box-shadow:var(--shadow);border-radius:12px;margin:0;position:absolute;overflow:hidden auto}.composer-suggestions button{border:0;border-bottom:1px solid var(--line);width:100%;min-height:48px;color:var(--text);text-align:left;background:0 0;border-radius:0;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 10px;display:grid}.composer-suggestions button:last-child{border-bottom:0}.composer-suggestions button:hover,.composer-suggestions button.active{background:var(--hover-strong)}.suggestion-mark{background:var(--accent-soft);width:30px;height:30px;color:var(--accent);border-radius:8px;place-items:center;font-size:13px;font-weight:800;display:grid}.suggestion-copy{gap:2px;min-width:0;display:grid}.suggestion-copy strong,.suggestion-copy span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.suggestion-copy strong{color:var(--text-strong);font-size:13px}.suggestion-copy span{color:var(--muted);font-size:12px}.suggestion-kind{color:var(--muted-2);text-transform:uppercase;font-size:11px;font-weight:700}.suggestion-hint{color:var(--muted);font-size:12px;font-style:normal;font-weight:500}.composer-notice{margin:0 var(--composer-overlay-inset-x,0) 6px;border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 97%, transparent);border-radius:10px;align-items:baseline;gap:8px;padding:7px 10px;font-size:13px;display:flex}.composer-notice__label{color:var(--muted-2);text-transform:uppercase;flex:none;font-size:11px;font-weight:700}.composer-notice--error .composer-notice__label{color:var(--danger)}.composer-notice__text{min-width:0;color:var(--text);overflow-wrap:anywhere;flex:1}.composer-notice__dismiss{width:22px;height:22px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;align-self:center;place-items:center;font-size:15px;line-height:1;display:grid}.composer-notice__dismiss:hover{background:var(--hover-strong);color:var(--text-strong)}.composer-toolbar{border:0;border-top:1px solid var(--line);background:color-mix(in srgb, var(--panel-2) 35%, transparent);width:100%;min-width:0;box-shadow:none;scrollbar-width:none;-webkit-overflow-scrolling:touch;border-radius:0;align-items:center;gap:2px;margin:0;padding:4px 6px;display:inline-flex;overflow:auto hidden}.composer-toolbar::-webkit-scrollbar{display:none}.composer-toolbar button{min-width:28px;height:26px;color:var(--text);opacity:.78;background:0 0;border:0;border-radius:6px;flex:none;place-items:center;font-size:11.5px;font-weight:700;transition:background .1s,color .1s,opacity .1s,transform 80ms;display:grid}.composer-toolbar button:hover{background:var(--hover-strong);color:var(--text-strong);opacity:1}.composer-toolbar button.active{background:var(--accent-soft);color:var(--accent);opacity:1}.composer-toolbar button:active{transform:translateY(1px)}.gif-picker{border:1px solid var(--line-strong);background:color-mix(in srgb, var(--panel) 96%, transparent);width:min(520px,100vw - 40px);box-shadow:var(--shadow);border-radius:16px;margin-top:8px;margin-bottom:8px;padding:10px;animation:.16s cubic-bezier(.2,.8,.2,1) picker-in}.gif-picker-head{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px;padding:2px 2px 10px;display:grid}.gif-picker-head strong{color:var(--text-strong);font-size:13px}.gif-picker-head input{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);min-width:0;height:32px;padding:0 10px}.gif-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;max-height:240px;display:grid;overflow-y:auto}.gif-grid button{aspect-ratio:4/3;background:var(--panel-2);color:#fff;box-shadow:inset 0 0 0 1px var(--line);border:0;border-radius:12px;padding:0;transition:transform .12s,box-shadow .12s;position:relative;overflow:hidden}.gif-grid button:hover{box-shadow:inset 0 0 0 2px var(--accent), 0 14px 30px -22px #000c;transform:translateY(-2px)}.gif-grid img{object-fit:cover;width:100%;height:100%;display:block}.gif-grid span{text-overflow:ellipsis;white-space:nowrap;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0000008f;border-radius:999px;padding:4px 7px;font-size:10.5px;font-weight:700;position:absolute;bottom:6px;left:6px;right:6px;overflow:hidden}@keyframes picker-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.composer-row{--composer-control-size:36px;--composer-line-height:22px;--composer-text-padding-block:7px;background:0 0;border:0;border-radius:0;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:4px;padding:8px 8px 4px 10px;display:grid}.composer-row:has(.composer-icon){grid-template-columns:auto minmax(0,1fr) auto}.composer:focus-within .composer-toolbar,.composer-row:focus-within{border-color:#0000}.composer-row:focus-within{box-shadow:none}.composer-icon{width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);color:var(--muted);cursor:pointer;border-radius:10px;align-self:start;place-items:center;transition:background .12s,color .12s;display:grid}.composer-icon:hover{background:var(--hover-strong);color:var(--text-strong)}.composer-icon input[type=file]{opacity:0;pointer-events:none;block-size:1px;inline-size:1px;position:absolute}.composer textarea,.reply-composer textarea{width:100%;height:auto;min-height:44px;max-height:50vh;padding:var(--composer-text-padding-block) 4px;resize:none;color:var(--text);line-height:var(--composer-line-height);box-sizing:border-box;align-self:start;font-size:14.5px;overflow-y:auto}.composer textarea::placeholder,.reply-composer textarea::placeholder{color:var(--muted)}.send{width:var(--composer-control-size);height:var(--composer-control-size);margin-top:calc(var(--composer-text-padding-block) + (var(--composer-line-height) - var(--composer-control-size)) / 2);border:1px solid color-mix(in srgb, var(--accent) 70%, var(--text-strong));border-radius:var(--radius);background:var(--accent);color:var(--accent-contrast);box-shadow:var(--key-edge);align-self:start;place-items:center;transition:background .12s,transform 80ms,box-shadow 80ms,opacity .12s;display:grid}.send:hover:not(:disabled){background:var(--accent-hover);transform:translateY(-1px)}.send:active:not(:disabled){box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.send:disabled{background:var(--panel-3);border-color:var(--line-strong);color:var(--muted-2);cursor:not-allowed;box-shadow:none}.composer-attachment{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);color:var(--text);align-items:center;gap:8px;width:fit-content;margin-top:8px;margin-bottom:8px;padding:6px 10px;font-size:13px;display:inline-flex}.attachment-icon{background:var(--accent-soft);width:20px;height:20px;color:var(--accent);border-radius:6px;place-items:center;display:grid}.pending-image{object-fit:cover;border:1px solid var(--line);background:var(--panel-2);border-radius:7px;width:42px;height:32px}.attachment-name{text-overflow:ellipsis;white-space:nowrap;max-width:240px;overflow:hidden}.attachment-remove{width:18px;height:18px;color:var(--muted);background:0 0;border:0;border-radius:50%;font-size:14px;line-height:1}.attachment-remove:hover{background:var(--danger);color:#fff}.composer-hint{color:var(--muted-2);padding:7px 4px 0;font-size:11px}.composer-hint kbd{background:var(--panel-2);border:1px solid var(--line-strong);font-family:var(--font-mono);color:var(--text);box-shadow:0 1px 0 var(--line-strong);border-radius:4px;padding:0 5px;font-size:10.5px;display:inline-block}@media (width<=820px){.composer{padding:8px calc(14px + var(--safe-area-right)) calc(6px + var(--safe-area-bottom)) calc(14px + var(--safe-area-left))}.composer textarea,.reply-composer textarea{font-size:16px}.composer-suggestions{max-height:min(320px,42dvh)}}.thread{background:var(--panel);border-left:1px solid var(--line);opacity:0;pointer-events:none;grid-template-rows:auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-width:0;transition:opacity .18s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden;transform:translate(28px)}.thread.open{opacity:1;pointer-events:auto;transform:translate(0)}.thread.covered{opacity:0;pointer-events:none}.thread>header{border-bottom:1px solid var(--line);background:linear-gradient(180deg, #ffffff05, transparent), var(--panel);align-items:center;gap:10px;min-height:60px;padding:12px 16px;display:flex}.thread>header>div{flex:1;min-width:0}.thread>header p,.thread>header strong{margin:0}.thread>header p{color:var(--muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:600;overflow:hidden}.thread>header strong{color:var(--text-strong);font-size:14px;display:block}.thread .thread-pin-error{color:var(--danger);margin-top:3px;font-size:11px;line-height:1.35;display:block}.thread .close{background:var(--panel-2);width:28px;height:28px;color:var(--muted);border:0;border-radius:50%;font-size:18px;line-height:1}.thread .close:hover{background:var(--panel-3);color:var(--text-strong)}.thread .thread-open-link{color:var(--accent);font-family:var(--font-mono);white-space:nowrap;flex:none;font-size:11px;font-weight:700;text-decoration:none}.thread .thread-open-link:hover{color:var(--accent-hover);text-decoration:underline}.thread .thread-open-link:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}.thread .thread-back{background:var(--panel-2);width:28px;height:28px;color:var(--muted);border:0;border-radius:50%;flex:none;place-items:center;display:grid}.thread .thread-back:hover{background:var(--panel-3);color:var(--text-strong)}.thread .thread-back:focus-visible,.thread .close:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.thread-scroll{padding:12px 16px;overflow-y:auto}.thread-root{border-bottom:1px solid var(--line);grid-template-columns:38px minmax(0,1fr);gap:12px;padding-bottom:12px;display:grid}.thread-divider{align-items:center;gap:10px;margin:14px 0 10px;display:flex}.thread-divider:before,.thread-divider:after{content:"";background:var(--line);flex:1;height:1px}.thread-divider span{font-family:var(--font-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:10px;font-weight:600}.reply-list{flex-direction:column;gap:10px;display:flex}.reply{border-radius:var(--radius-sm);grid-template-columns:30px minmax(0,1fr);gap:10px;padding:6px;display:grid}.reply:hover{background:var(--hover)}.thread .reply-quote-btn,.thread .thread-action-btn{width:26px;height:26px;color:var(--muted);background:0 0;border:0;border-radius:6px;place-items:center;display:inline-grid}.thread .reply-quote-btn:hover,.thread .thread-action-btn:hover{background:var(--hover-strong);color:var(--text-strong)}.thread .reply-quote-btn:disabled,.thread .thread-action-btn:disabled{cursor:default;opacity:.45}.thread .thread-action-btn--danger{color:var(--danger)}.thread .thread-action-btn--danger:hover{background:color-mix(in srgb, var(--danger) 12%, transparent);color:var(--danger)}.thread .thread-more-actions{display:none}@media (hover:none),(pointer:coarse){.thread .group-body>header{min-height:28px;padding-right:32px;position:relative}.thread .reply-quote-btn,.thread .thread-action-btn:not(.thread-more-actions){display:none}.thread .thread-more-actions{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;display:inline-grid;position:absolute;top:0;right:0;overflow:hidden}.thread .thread-more-actions:focus-visible{clip:auto;clip-path:none;border:1px solid var(--line-strong);background:var(--panel);width:28px;height:28px;box-shadow:var(--shadow);margin:0;overflow:visible}}.reply-composer{--composer-card-top:10px;--composer-overlay-inset-x:14px;background:var(--panel);border-top:1px solid var(--line);padding:10px 14px 14px}.reply-composer .composer-row{border-radius:0}.thread-empty{text-align:center;grid-row:span 3;align-content:center;place-items:center;gap:8px;padding:32px 24px;display:grid}.thread-icon{background:var(--panel-2);width:56px;height:56px;color:var(--muted);border-radius:16px;place-items:center;display:grid}.thread-empty strong{color:var(--text-strong);font-size:15px}.thread-empty span{color:var(--muted);max-width:260px;font-size:13px;line-height:1.5}.profile-pane{overflow-y:auto}.profile-hero{background:linear-gradient(180deg, transparent, #0000003d), linear-gradient(135deg, hsl(var(--hue,220deg) 76% 58%), hsl(calc(var(--hue,220deg) + 54deg) 74% 38%));border-bottom:1px solid var(--line);place-items:end center;min-height:210px;padding:28px 20px;display:grid}.profile-avatar{aspect-ratio:1;color:#fff;background:#ffffff2e;border-radius:16px;place-items:center;width:min(240px,70%);font-size:clamp(48px,12vw,88px);font-weight:800;display:grid;overflow:hidden;box-shadow:0 26px 60px -30px #000000e6}.profile-avatar img{object-fit:cover;width:100%;height:100%}.profile-pane-body{gap:18px;padding:18px 16px 22px;display:grid}.profile-pane-title{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.profile-pane-title h2{color:var(--text-strong);letter-spacing:0;margin:0;font-size:22px}.profile-pane-title span{color:var(--muted);margin-top:3px;font-size:13px;display:block}.profile-pane-title .bot-badge{border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);min-height:20px;color:var(--accent);border-radius:999px;align-items:center;margin-top:6px;padding:0 8px;font-size:11px;font-weight:800;line-height:1;display:inline-flex}.text-action{color:var(--accent);background:0 0;border:0;border-radius:6px;padding:4px 6px;font-size:13px;font-weight:700}.text-action:hover{background:var(--accent-soft)}.profile-presence{color:var(--text);align-items:center;gap:8px;font-size:14px;display:inline-flex}.profile-actions-row{grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:10px;display:grid}.profile-actions-row .primary-action,.profile-actions-row .ghost-action{border-radius:var(--radius);white-space:nowrap;justify-content:center;align-items:center;width:100%;min-width:0;height:48px;padding:0 16px;font-size:14px;font-weight:800;line-height:1;display:inline-flex}.moderation-actions{grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:8px;display:grid}.moderation-actions .primary-action,.moderation-actions .ghost-action,.moderation-actions .danger-action{border-radius:var(--radius);min-height:40px;font-size:13px;font-weight:800}.danger-action{border:1px solid color-mix(in srgb, var(--danger), transparent 35%);background:color-mix(in srgb, var(--danger), transparent 86%);color:var(--danger)}.role-pill{background:var(--panel-2);color:var(--muted);text-transform:uppercase;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:800}.profile-info{border-top:1px solid var(--line);gap:12px;padding-top:18px;display:grid}.profile-info header{justify-content:space-between;align-items:center;gap:10px;display:flex}.profile-info header strong{color:var(--text-strong);font-size:14px}.profile-info-row{grid-template-columns:48px minmax(0,1fr);align-items:center;gap:14px;min-height:48px;display:grid}.info-icon{background:var(--panel-2);width:48px;height:48px;color:var(--muted);border-radius:12px;justify-content:center;align-items:center;line-height:1;display:inline-flex}.info-icon svg{flex:none;display:block}.profile-info-row>div>small,.profile-info-row>div>span{display:block}.profile-info-row>div>small{color:var(--muted);font-size:12px;line-height:1.2}.profile-info-row>div>span{color:var(--text);overflow-wrap:anywhere;font-size:14px;line-height:1.3}.profile-note{color:var(--muted);margin:0;font-size:13px;line-height:1.5}@media (width<=820px){.thread{min-height:100dvh}.thread>header{min-height:calc(60px + var(--safe-area-top));padding-top:calc(12px + var(--safe-area-top));padding-right:calc(16px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.thread-scroll{padding-right:calc(16px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.reply-composer{padding-right:calc(14px + var(--safe-area-right));padding-bottom:calc(14px + var(--safe-area-bottom));padding-left:calc(14px + var(--safe-area-left))}}.artifact-viewer{z-index:2;border-left:1px solid var(--line);background:var(--panel);opacity:0;pointer-events:none;grid-template-rows:auto minmax(0,1fr);min-width:0;transition:opacity .18s,transform .22s cubic-bezier(.2,.8,.2,1);display:grid;overflow:hidden;transform:translate(28px)}.artifact-viewer.open{opacity:1;pointer-events:auto;transform:translate(0)}.artifact-viewer__header{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--panel) 92%, var(--bg));justify-content:space-between;align-items:center;gap:16px;min-height:64px;padding:10px 12px 10px 16px;display:flex}.artifact-viewer__identity{grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;gap:5px 10px;min-width:0;display:grid}.artifact-viewer__identity span{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;grid-column:1/-1;font-size:11px;font-weight:700}.artifact-viewer__identity strong{min-width:0;color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.artifact-viewer__identity small{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px}.artifact-viewer__actions,.artifact-viewer__segmented{align-items:center;gap:4px;display:inline-flex}.artifact-viewer__actions>a,.artifact-viewer__actions>button,.artifact-viewer__segmented button,.artifact-viewer__pdf-toolbar button{border-radius:var(--radius-sm);min-width:32px;height:32px;color:var(--muted);background:0 0;border:1px solid #0000;place-items:center;padding:0 9px;text-decoration:none;display:inline-grid}.artifact-viewer__office-toolbar button,.artifact-viewer__sheet-tabs button{border-radius:var(--radius-sm);min-height:30px;color:var(--muted);background:0 0;border:1px solid #0000;padding:0 10px;font-size:11px}.artifact-viewer__actions>button{font-size:20px;line-height:1}.artifact-viewer__actions>a:hover,.artifact-viewer__actions>button:hover,.artifact-viewer__segmented button:hover,.artifact-viewer__pdf-toolbar button:hover:not(:disabled){border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.artifact-viewer__actions :focus-visible,.artifact-viewer__pdf-toolbar button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.artifact-viewer__segmented{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);padding:2px}.artifact-viewer__segmented button{min-width:58px;height:28px;font-size:11px;font-weight:650}.artifact-viewer__segmented button.active{border-color:var(--line);background:var(--panel);color:var(--text-strong)}.artifact-viewer__body{background:var(--bg);min-height:0;overflow:auto}.artifact-viewer__state{min-height:100%;color:var(--muted);text-align:center;align-content:center;justify-items:center;gap:10px;padding:32px 24px;display:grid}.artifact-viewer__state strong{color:var(--text-strong);font-size:15px}.artifact-viewer__state p{max-width:34ch;margin:0;font-size:13px;line-height:1.5}.artifact-viewer__state a{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel);min-height:36px;color:var(--text-strong);margin-top:4px;padding:8px 12px;font-size:13px;font-weight:650;text-decoration:none}.artifact-viewer__state--error svg{color:var(--danger)}.artifact-viewer__spinner{border:2px solid var(--line-strong);border-top-color:var(--accent);border-radius:50%;width:26px;height:26px;animation:.7s linear infinite artifact-spin}@keyframes artifact-spin{to{transform:rotate(360deg)}}.artifact-viewer__source{background:color-mix(in srgb, var(--bg) 90%, #090b10);width:max-content;min-width:100%;min-height:100%;color:var(--text);font-family:var(--font-mono);tab-size:2;white-space:pre;margin:0;padding:20px;font-size:12px;line-height:1.65}.artifact-viewer__source code{font:inherit}.artifact-viewer__document{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(100%,760px);min-height:calc(100% - 32px);color:var(--text);overflow-wrap:anywhere;margin:16px auto;padding:clamp(24px,5vw,56px);font-size:15px;line-height:1.65}.artifact-viewer__document>:first-child{margin-top:0}.artifact-viewer__document>:last-child{margin-bottom:0}.artifact-viewer__document h1,.artifact-viewer__document h2,.artifact-viewer__document h3{color:var(--text-strong);line-height:1.25}.artifact-viewer__document h1{font-size:28px}.artifact-viewer__document h2{margin-top:1.75em;font-size:21px}.artifact-viewer__document h3{margin-top:1.5em;font-size:17px}.artifact-viewer__document pre{border-radius:var(--radius);background:var(--panel-2);padding:14px;overflow:auto}.artifact-viewer__document code{font-family:var(--font-mono)}.artifact-viewer__document table{border-collapse:collapse;width:100%}.artifact-viewer__document th,.artifact-viewer__document td{border:1px solid var(--line-strong);text-align:left;padding:8px 10px}.artifact-viewer__document img{max-width:100%;height:auto}.artifact-viewer__document a{color:var(--accent)}.artifact-viewer__body.is-pdf{grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}.artifact-viewer__body.is-office{grid-template-rows:auto minmax(0,1fr) auto;display:grid;overflow:hidden}.artifact-viewer__office-toolbar,.artifact-viewer__sheet-tabs{border-bottom:1px solid var(--line);background:var(--panel);min-height:44px;color:var(--muted);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;gap:4px;padding:6px 10px;font-size:11px;display:flex}.artifact-viewer__office-toolbar button:disabled{cursor:not-allowed;opacity:.4}.artifact-viewer__office-toolbar button:hover:not(:disabled),.artifact-viewer__sheet-tabs button:hover,.artifact-viewer__sheet-tabs button.active{border-color:var(--line);background:var(--hover-strong);color:var(--text-strong)}.artifact-viewer__office-toolbar button:focus-visible,.artifact-viewer__sheet-tabs button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.artifact-viewer__office-toolbar{flex-wrap:wrap}.artifact-viewer__spreadsheet{background:var(--panel);min-height:0;overflow:auto}.artifact-viewer__spreadsheet table{table-layout:fixed;border-spacing:0;border-collapse:separate;width:max-content;color:var(--text);font-size:12px}.artifact-viewer__spreadsheet th,.artifact-viewer__spreadsheet td{box-sizing:border-box;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--panel);text-align:left;text-overflow:ellipsis;white-space:nowrap;width:160px;min-width:160px;max-width:160px;height:30px;padding:5px 8px;overflow:hidden}.artifact-viewer__spreadsheet thead th{z-index:2;background:var(--panel-2);color:var(--muted);text-align:center;position:sticky;top:0}.artifact-viewer__spreadsheet .row-heading{z-index:1;background:var(--panel-2);width:44px;min-width:44px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;position:sticky;left:0}.artifact-viewer__spreadsheet thead .row-heading{z-index:3}.artifact-viewer__grid-note{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);width:max-content;max-width:min(480px,100vw - 48px);color:var(--muted);white-space:normal;margin:16px;padding:8px 10px;font-size:12px;line-height:1.45;position:sticky;left:0}.artifact-viewer__sheet-tabs{border-top:1px solid var(--line);border-bottom:0;justify-content:flex-start;overflow-x:auto}.artifact-viewer__sheet-tabs button{flex:none}.artifact-viewer__slide-stage{align-content:center;place-items:center;gap:12px;min-height:0;padding:24px;display:grid;overflow:auto}.artifact-viewer__slide{aspect-ratio:16/9;color:#172033;background:#fff;flex-direction:column;justify-content:safe center;width:min(100%,860px);padding:48px;display:flex;overflow:auto;box-shadow:0 16px 48px -24px #000000a6}.artifact-viewer__slide h2{letter-spacing:0;margin:0 0 .7em;font-size:36px;line-height:1.15}.artifact-viewer__slide p{margin:.35em 0;font-size:20px;line-height:1.4}.artifact-viewer__office-note{color:var(--muted);margin:0;font-size:12px}@media (width<=640px){.artifact-viewer__slide{padding:28px}.artifact-viewer__slide h2{font-size:24px}.artifact-viewer__slide p{font-size:15px}}.artifact-viewer__pdf-toolbar{border-bottom:1px solid var(--line);background:var(--panel);min-height:44px;color:var(--muted);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;gap:4px;padding:6px 10px;font-size:11px;display:flex}.artifact-viewer__pdf-toolbar button{min-width:30px;height:30px;font-size:11px}.artifact-viewer__pdf-toolbar button:disabled{cursor:not-allowed;opacity:.4}.artifact-viewer__toolbar-divider{background:var(--line);width:1px;height:18px;margin:0 4px}.artifact-viewer__pdf-stage{text-align:center;min-height:0;padding:24px;overflow:auto}.artifact-viewer__pdf-stage canvas{background:#fff;max-width:none;transition:opacity .12s;display:inline-block;box-shadow:0 16px 48px -24px #000000a6}.artifact-viewer__pdf-text{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.artifact-viewer__pdf-stage.is-rendering canvas{opacity:.55}.hljs-comment,.hljs-quote{color:var(--muted);font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-section,.hljs-link{color:var(--accent)}.hljs-string,.hljs-title,.hljs-name,.hljs-type,.hljs-attribute,.hljs-symbol,.hljs-bullet,.hljs-addition{color:var(--success)}.hljs-number,.hljs-meta,.hljs-built_in,.hljs-builtin-name,.hljs-params{color:var(--activity-accent)}.hljs-deletion{color:var(--danger)}@media (width<=820px){.artifact-viewer{z-index:40;border-left:0;min-height:100dvh;position:fixed;inset:0}.artifact-viewer__header{min-height:calc(64px + var(--safe-area-top));padding-top:calc(10px + var(--safe-area-top));padding-right:calc(12px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.artifact-viewer__identity small{display:none}.artifact-viewer__document{border:0;border-radius:0;min-height:100%;margin:0}}@media (prefers-reduced-motion:reduce){.artifact-viewer{transition:none}.artifact-viewer__spinner{animation-duration:1.4s}}.modal-scrim{z-index:50;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#05080f8a;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.modal-backdrop{background:0 0;border:0;position:absolute;inset:0}.modal-backdrop:focus{outline:0}.profile-modal{z-index:1;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--radius-xl);width:min(480px,100%);box-shadow:var(--key-edge), var(--shadow);animation:.15s ease-out settings-modal-fade;position:relative;overflow:hidden}.profile-modal>header{justify-content:space-between;align-items:flex-start;gap:12px;padding:18px 20px 4px;display:flex}.profile-modal>header p{color:var(--muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;margin:0 0 4px;font-size:10px;font-weight:600}.profile-modal>header h2{color:var(--text-strong);font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:20px;font-weight:700}.profile-modal>header>button{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);width:28px;height:28px;color:var(--muted);flex:none;place-items:center;font-size:16px;line-height:1;display:grid}.profile-modal>header>button:hover{background:var(--panel-3);color:var(--text-strong)}.create-modal{width:min(420px,100%)}.profile-form{gap:14px;padding:20px;display:grid}.profile-preview{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);align-items:center;gap:14px;padding:14px;display:flex}.profile-preview strong,.profile-preview span{display:block}.profile-preview strong{color:var(--text-strong);font-size:15px}.profile-preview span{color:var(--muted);font-size:13px}.field{gap:6px;display:grid}.field span{color:var(--muted);font-size:12px;font-weight:700}.field input,.field select{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-2);width:100%;height:38px;color:var(--text);padding:0 12px}.field select{cursor:pointer}.field input:focus,.field select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.check-field{align-items:center;gap:10px;display:flex}.check-field input{width:16px;height:16px;padding:0}.profile-status{color:var(--success);font-size:12px}.profile-status.error{color:var(--danger)}.profile-actions{justify-content:flex-end;gap:8px;padding-top:4px;display:flex}.person-picker{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);gap:4px;max-height:240px;padding:4px;display:grid;overflow-y:auto}.person-choice{border-radius:var(--radius-sm);width:100%;min-height:44px;color:var(--text);text-align:left;background:0 0;border:0;grid-template-columns:32px minmax(0,1fr);align-items:center;gap:10px;padding:6px 8px;display:grid}.person-choice:hover{background:var(--hover-strong)}.person-choice .dm-avatar{width:32px;height:32px}.person-choice strong,.person-choice small{text-overflow:ellipsis;white-space:nowrap;min-width:0;display:block;overflow:hidden}.person-choice strong{color:var(--text-strong);font-size:13px}.person-choice small{color:var(--muted);font-size:12px}.person-empty{color:var(--muted);padding:10px 8px;font-size:12px}.profile-actions .ghost-action,.profile-actions .primary-action,.profile-actions .danger-action{box-sizing:border-box;border-radius:var(--radius);white-space:nowrap;min-height:44px;box-shadow:var(--key-edge);flex:none;justify-content:center;align-items:center;padding:0 14px;font-weight:700;line-height:1;transition:background .12s,box-shadow 80ms,transform 80ms;display:inline-flex}.ghost-action{border:1px solid var(--line-strong);background:var(--panel);color:var(--text)}.primary-action{border:1px solid color-mix(in srgb, var(--accent) 70%, var(--text-strong));background:var(--accent);color:var(--accent-contrast)}.profile-actions .danger-action{border:1px solid color-mix(in srgb, var(--danger) 76%, var(--text-strong));background:var(--danger);color:#fff}.ghost-action:hover{background:var(--hover)}.primary-action:hover{background:var(--accent-hover)}.profile-actions .danger-action:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 86%, #000)}.profile-actions .ghost-action:disabled,.profile-actions .primary-action:disabled,.profile-actions .danger-action:disabled{cursor:default;opacity:.58}.profile-actions .ghost-action:active,.profile-actions .primary-action:active,.profile-actions .danger-action:active{box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.delete-message-scrim{padding:20px}.delete-message-modal{width:min(520px,100%)}.delete-message-modal>header{padding-bottom:10px}.delete-message-content{gap:18px;padding:4px 20px 20px;display:grid}.delete-message-content>p{color:var(--text);margin:0;font-size:14px;line-height:1.5}.delete-message-preview{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--panel-2);grid-template-columns:36px minmax(0,1fr);align-items:start;gap:12px;padding:14px;display:grid}.delete-message-preview__content{min-width:0}.delete-message-preview>.avatar{border-radius:9px;width:36px;height:36px;margin:0}.delete-message-preview__meta{align-items:baseline;gap:8px;min-width:0;display:flex}.delete-message-preview__meta strong{color:var(--text-strong);text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.delete-message-preview__meta time{color:var(--muted);flex:none;font-size:11px}.delete-message-preview__body{max-height:128px;color:var(--text);overflow-wrap:anywhere;white-space:pre-wrap;margin-top:4px;font-size:14px;line-height:1.45;overflow:auto}.delete-message-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:0;display:grid}.delete-message-actions button{width:100%}@media (width<=520px){.delete-message-modal{width:100%}.delete-message-content,.delete-message-modal>header{padding-inline:16px}}.channel-settings-scrim{padding:20px}.channel-settings-modal{width:min(460px,100%)}.channel-settings-content{gap:18px;padding:14px 20px 20px;display:grid}.channel-settings-name{color:var(--text-strong);font-family:var(--font-display);font-size:16px;display:block}.channel-settings-content p{color:var(--muted);margin:6px 0 0;font-size:13px;line-height:1.5}.channel-settings-content .channel-settings-warning{border-left:3px solid var(--danger);background:color-mix(in srgb, var(--danger) 8%, var(--panel-2));color:var(--text);margin:0;padding:12px}.channel-settings-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:0;display:grid}.channel-settings-actions button{width:100%}@media (width<=520px){.channel-settings-content,.channel-settings-modal>header{padding-inline:16px}}.image-viewer-scrim{-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:#000000c7;padding:28px}.image-viewer{z-index:1;color:#fff;background:#07090f;border:1px solid #ffffff1f;border-radius:14px;grid-template-rows:auto minmax(0,1fr);width:min(1280px,100%);height:min(900px,100dvh - 56px);max-height:100%;animation:.15s cubic-bezier(.2,.8,.2,1) picker-in;display:grid;position:relative;overflow:hidden;box-shadow:0 34px 90px -34px #000000f2}.image-viewer>header{background:#ffffff0a;border-bottom:1px solid #ffffff1a;justify-content:space-between;align-items:center;gap:16px;min-height:52px;padding:10px 12px 10px 16px;display:flex}.image-viewer>header strong{color:#fff;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;overflow:hidden}.image-viewer>header div{flex-shrink:0;align-items:center;gap:8px;display:inline-flex}.image-viewer>header a{color:#fff;background:#ffffff14;border-radius:7px;align-items:center;height:30px;padding:0 10px;font-size:12px;font-weight:700;text-decoration:none;display:inline-flex}.image-viewer>header a:hover{background:#ffffff24}.image-viewer>header a:focus-visible,.image-viewer>header button:focus-visible{outline-offset:2px;outline:2px solid #fff}.image-viewer>header button{color:#ffffffc7;background:0 0;border:0;border-radius:7px;place-items:center;width:30px;height:30px;font-size:22px;line-height:1;display:grid}.image-viewer>header button:hover{color:#fff;background:#ffffff1f}.image-viewer-stage{place-items:center;min-height:0;padding:18px;display:grid}.image-viewer-stage img{object-fit:contain;background:#ffffff0a;border-radius:8px;max-width:100%;max-height:100%;display:block}@media (width<=720px),(height<=520px) and (orientation:landscape){.image-viewer-scrim{padding:0}.image-viewer{border:0;border-radius:0;width:100%;height:100dvh}.image-viewer>header{padding-top:calc(10px + var(--safe-area-top));padding-right:calc(12px + var(--safe-area-right));padding-left:calc(16px + var(--safe-area-left))}.image-viewer-stage{padding-right:calc(12px + var(--safe-area-right));padding-bottom:calc(12px + var(--safe-area-bottom));padding-left:calc(12px + var(--safe-area-left))}}.mobile-nav-toggle{top:calc(14px + var(--safe-area-top));left:calc(14px + var(--safe-area-left));z-index:30;border:1px solid var(--line-strong);background:var(--panel);width:38px;height:38px;color:var(--text);border-radius:10px;font-size:22px;line-height:1;display:none;position:fixed}.mobile-nav-toggle .bars{gap:3px;display:grid}.mobile-nav-toggle .bars i{background:currentColor;border-radius:2px;width:16px;height:2px;display:block}.mobile-nav-backdrop{display:none}@media (width<=1180px){.shell{grid-template-columns:72px 240px minmax(0,1fr)}.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open,.shell.sidebar-collapsed.search-open{grid-template-columns:72px 0 minmax(0,1fr)}.thread,.search-results{width:min(420px,100vw);box-shadow:var(--shadow);z-index:4;border-left:1px solid var(--line-strong);transition:transform .18s;position:fixed;inset:0 0 0 auto;transform:translate(100%)}.thread.open,.search-results{transform:translate(0)}.desktop-shell .thread,.desktop-shell .search-results{top:52px;bottom:0}}@media (width<=820px){.mobile-nav-toggle{place-items:center;display:grid}.shell,.shell.thread-open,.shell.search-open,.shell.sidebar-collapsed,.shell.sidebar-collapsed.thread-open,.shell.sidebar-collapsed.search-open{grid-template-columns:1fr}.sidebar-collapsed .sidebar{opacity:1;pointer-events:none;transform:translate(calc(-100% - 72px))}.guild-rail,.sidebar{z-index:20;pointer-events:none;height:100dvh;transition:transform .18s;position:fixed;inset:0 auto 0 0;transform:translate(-100%)}.guild-rail{width:72px;padding-top:calc(14px + var(--safe-area-top));padding-bottom:calc(14px + var(--safe-area-bottom))}.sidebar{width:min(260px,100vw - 72px);left:72px;transform:translate(calc(-100% - 72px))}.nav-open .guild-rail,.nav-open .sidebar{pointer-events:auto;transform:translate(0,0)}.nav-open .guild-rail{padding-top:calc(62px + var(--safe-area-top))}.desktop-shell .guild-rail,.desktop-shell .sidebar{height:calc(100dvh - 52px);top:52px}.desktop-shell.nav-open .guild-rail{padding-top:calc(14px + var(--safe-area-top))}.desktop-shell .mobile-nav-backdrop{top:52px}.mobile-nav-backdrop{z-index:15;background:#05081075;border:0;padding:0;display:block;position:fixed;inset:0 0 0 min(332px,100vw)}.topbar{min-height:calc(60px + var(--safe-area-top));padding-top:calc(12px + var(--safe-area-top));padding-right:calc(20px + var(--safe-area-right));padding-left:calc(64px + var(--safe-area-left))}.search{width:180px}}@media (width<=520px){.search,.topbar-meta,.topbar-divider{display:none}}.message-row.highlight,.thread-root.highlight,.reply.highlight{animation:1.4s ease-out quote-flash}@keyframes quote-flash{0%{background:color-mix(in srgb, var(--accent) 22%, transparent)}to{background:0 0}}.quote-block{color:inherit;cursor:pointer;text-align:left;max-width:100%;font:inherit;background:0 0;border:0;border-radius:6px;align-items:stretch;gap:.5rem;margin:0 0 .35rem;padding:.25rem .5rem .25rem 0;display:inline-flex}.quote-block:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 8%, transparent)}.quote-block:disabled{cursor:default;opacity:.75}.quote-block .quote-bar{background:var(--accent);border-radius:2px;flex:0 0 3px;align-self:stretch;width:3px}.quote-block .quote-content{flex-direction:column;gap:.1rem;min-width:0;display:flex}.quote-block .quote-author{color:var(--accent);font-size:.78rem;font-weight:600}.quote-block .quote-snippet{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;max-width:56ch;font-size:.85rem;overflow:hidden}.quote-block .quote-snippet.muted{opacity:.75;font-style:italic}.quote-preview{background:color-mix(in srgb, var(--accent) 5%, transparent);border:0;border-bottom:1px solid var(--line);color:var(--muted);border-radius:0;align-items:center;gap:.5rem;margin:0;padding:6px 10px 6px 12px;font-size:12.5px;display:flex}.quote-preview .quote-bar{display:none}.quote-preview-body{flex:1;align-items:baseline;gap:.4rem;min-width:0;display:flex;overflow:hidden}.quote-preview-label{color:color-mix(in srgb, var(--accent) 85%, var(--text));white-space:nowrap;font-size:12px}.quote-preview-label strong{color:var(--text-strong);font-weight:600}.quote-preview-snippet{white-space:nowrap;text-overflow:ellipsis;color:var(--muted);flex:1;min-width:0;font-size:12px;overflow:hidden}.quote-preview-clear{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:2px 6px;font-size:16px;line-height:1;transition:background .1s,color .1s}.quote-preview-clear:hover{color:var(--text-strong);background:var(--hover-strong)}.reply-quote-btn{color:var(--muted);cursor:pointer;opacity:0;background:0 0;border:0;margin-left:auto;padding:0 .3rem;font-size:.95rem;transition:opacity .15s;position:relative}.reply:hover .reply-quote-btn,.thread-root:hover .reply-quote-btn,.reply-quote-btn:focus-visible{opacity:1}.reply-quote-btn:hover{color:var(--accent)}.tooltip{position:relative}.tooltip:before,.reply-quote-btn:before{content:attr(data-tooltip);z-index:20;background:var(--tooltip-bg);color:var(--tooltip-fg);white-space:nowrap;opacity:0;pointer-events:none;border-radius:9px;padding:.42rem .62rem;font-size:.78rem;font-weight:700;line-height:1;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 12px);left:50%;transform:translate(-50%,4px)scale(.96);box-shadow:0 10px 28px #00000047}.tooltip:after,.reply-quote-btn:after{content:"";z-index:20;background:var(--tooltip-bg);opacity:0;pointer-events:none;border-radius:2px;width:12px;height:12px;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 5px);left:50%;transform:translate(-50%,4px)rotate(45deg)scale(.9)}.tooltip:hover:before,.tooltip:focus-visible:before,.reply-quote-btn:hover:before,.reply-quote-btn:focus-visible:before,.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{opacity:1;transform:translate(-50%)scale(1)}.tooltip:hover:after,.tooltip:focus-visible:after,.reply-quote-btn:hover:after,.reply-quote-btn:focus-visible:after{transform:translate(-50%)rotate(45deg)scale(1)}.tooltip-align-end:before{transform-origin:100% 100%;left:auto;right:0;transform:translateY(4px)scale(.96)}.tooltip-align-end:hover:before,.tooltip-align-end:focus-visible:before{transform:translateY(0)scale(1)}.settings-modal-scrim{z-index:1000;color:var(--text);-webkit-font-smoothing:antialiased;background:var(--lightningcss-light,#080a0e6b)var(--lightningcss-dark,#0000008c);place-items:center;font-size:14px;line-height:1.5;animation:.15s ease-out settings-modal-fade;display:grid;position:fixed;inset:0}@keyframes settings-modal-fade{0%{opacity:0}to{opacity:1}}.settings-modal{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);width:min(1100px,96vw);height:min(760px,92vh);box-shadow:var(--shadow);grid-template-columns:232px minmax(0,1fr);display:grid;position:relative;overflow:hidden}.settings-modal__close{z-index:6;width:28px;height:28px;color:var(--muted);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:0;place-items:center;transition:background .12s,color .12s;display:grid;position:absolute;top:14px;right:14px}.settings-modal__close:hover{background:var(--hover);color:var(--text-strong)}.settings-modal__rail{background:var(--panel-2);border-right:1px solid var(--line);flex-direction:column;padding:16px 10px;display:flex;overflow-y:auto}.settings-modal__rail-group+.settings-modal__rail-group{margin-top:14px}.settings-modal__rail-heading{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0;padding:6px 8px 4px;font-size:10px;font-weight:600}.settings-modal__rail ul{margin:0;padding:0;list-style:none}.settings-modal__rail-item{border-radius:var(--radius-sm);cursor:pointer;width:100%;font:inherit;color:var(--text);text-align:left;background:0 0;border:0;align-items:center;gap:10px;margin:1px 0;padding:6px 10px;font-size:13.5px;line-height:1.4;transition:background .1s,color .1s;display:flex}.settings-modal__rail-item:hover{background:var(--hover)}.settings-modal__rail-item.is-active{background:var(--hover-strong);color:var(--text-strong);font-weight:600}.settings-modal__rail-icon{width:16px;height:16px;color:var(--muted);flex-shrink:0;place-items:center;display:grid}.settings-modal__rail-icon svg{width:16px;height:16px;display:block}.settings-modal__rail-item.is-active .settings-modal__rail-icon{color:var(--text-strong)}.settings-modal__rail-avatar{color:#fff;background:linear-gradient(135deg, hsl(var(--hue,220deg) 70% 55%), hsl(calc(var(--hue,220deg) + 40deg) 70% 45%));border-radius:4px;flex-shrink:0;place-items:center;width:18px;height:18px;font-size:9px;font-weight:700;display:grid;overflow:hidden}.settings-modal__rail-avatar img{object-fit:cover;width:100%;height:100%;display:block}.settings-modal__rail-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.settings-modal__content{background:var(--panel);color:var(--text);padding:40px 56px 56px;overflow-y:auto}.settings-modal__content .settings-page__header{margin-bottom:32px}.settings-modal__content .settings-page__eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0 0 6px;font-size:10px;font-weight:600}.settings-modal__content .settings-page__h1{letter-spacing:-.01em;color:var(--text-strong);font-size:26px;font-weight:700;line-height:1.2;font-family:var(--font-display);margin:0 0 6px}.settings-modal__content .settings-page__lead{color:var(--muted);margin:0;font-size:14px;line-height:1.5}.settings-modal__content .settings-form{flex-direction:column;gap:24px;max-width:640px;display:flex}.settings-modal__content .settings-footer{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;margin-top:8px;padding-top:20px;display:flex}.settings-modal__content .settings-footer__spacer{flex:1}.settings-modal__content .settings-section{flex-direction:column;gap:20px;display:flex}.settings-modal__content .settings-section__h{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 4px;font-size:12px;font-weight:600}.settings-modal__content .settings-field{flex-direction:column;gap:6px;display:flex}.settings-modal__content .settings-field__label{color:var(--text-strong);font-size:13px;font-weight:600}.settings-modal__content .settings-field__hint{color:var(--muted);margin:0;font-size:12.5px;line-height:1.5}.settings-modal__content .settings-field__hint.is-error{color:var(--danger)}.settings-modal__content .settings-identity{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);align-items:center;gap:14px;padding:14px 16px;display:flex}.settings-modal__content .settings-identity__meta{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.settings-modal__content .settings-identity__name{color:var(--text-strong);white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:700;line-height:1.25;overflow:hidden}.settings-modal__content .settings-identity__handle{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:13px;line-height:1.3;overflow:hidden}.settings-modal__content .settings-identity__tag{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:999px;flex-shrink:0;padding:3px 8px;font-size:10px;font-weight:600}.settings-modal__content .settings-rows{flex-direction:column;display:flex}.settings-modal__content .settings-rows--sectioned .settings-row2{border-top:0;align-items:center;padding:12px 0}.settings-modal__content .settings-row2{border-top:1px solid var(--line);grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:32px;padding:20px 0;display:grid}.settings-modal__content .settings-row2--toggle{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px}.settings-modal__content .settings-row2:first-child{border-top:0;padding-top:4px}.settings-modal__content .settings-row2__desc{min-width:0}.settings-modal__content .settings-row2__label{color:var(--text-strong);margin-bottom:4px;font-size:13.5px;font-weight:600;display:block}.settings-modal__content .settings-row2__hint{color:var(--muted);margin:0;font-size:12.5px;line-height:1.5}.settings-modal__content .settings-row2__control{flex-direction:column;align-items:flex-start;gap:8px;min-width:0;max-width:380px;display:flex}.settings-modal__content .settings-row2__control--end{flex-direction:row;justify-content:center;align-items:flex-end;max-width:none}.settings-modal__content .settings-rows__head{border-top:1px solid var(--line);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0;padding:24px 0 12px;font-size:11px;font-weight:600}.settings-modal__content .settings-rows__head:first-child{border-top:0;padding-top:4px}.settings-modal__content .settings-rows__head+.settings-row2{border-top:0;padding-top:0}.settings-modal__content .settings-input-group{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);align-items:stretch;width:100%;transition:border-color .12s,box-shadow .12s,background .12s;display:flex}.settings-modal__content .settings-input-group:hover{border-color:var(--line-strong)}.settings-modal__content .settings-input-group:focus-within{border-color:var(--accent);background:var(--panel);box-shadow:0 0 0 3px var(--accent-soft)}.settings-modal__content .settings-input-group__prefix{color:var(--muted);border-right:1px solid var(--line);background:var(--panel-2);border-radius:var(--radius-sm) 0 0 var(--radius-sm);place-items:center;padding:0 10px;font-size:14px;font-weight:500;display:grid}.settings-modal__content .settings-input--in-group{box-shadow:none!important;border-radius:0 var(--radius-sm) var(--radius-sm) 0!important;background:0 0!important;border:0!important;max-width:none!important}.settings-modal__content .settings-input--in-group:focus{box-shadow:none!important;background:0 0!important;border:0!important}.settings-modal__content .settings-linklike{color:var(--muted);cursor:pointer;font:inherit;text-underline-offset:2px;background:0 0;border:0;padding:2px 0;font-size:12.5px;text-decoration:underline;transition:color .12s}.settings-modal__content .settings-linklike:hover{color:var(--text-strong)}.settings-modal__content .settings-row{grid-template-columns:1fr auto;align-items:center;gap:24px;display:grid}.settings-modal__content .settings-row__main{min-width:0}.settings-modal__content .settings-row__label{color:var(--text-strong);margin-bottom:2px;font-size:13.5px;font-weight:600}.settings-modal__content .settings-row__hint{color:var(--muted);font-size:12.5px;line-height:1.5}.settings-modal__content .settings-row__hint.is-error{color:var(--danger)}.settings-modal__content .settings-input{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;max-width:420px;height:36px;color:var(--text);font:inherit;padding:0 12px;font-size:14px;transition:border-color .12s,box-shadow .12s,background .12s}.settings-modal__content .settings-input:hover{border-color:var(--line-strong)}.settings-modal__content .settings-input:focus{border-color:var(--accent);background:var(--panel);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.settings-modal__content .settings-input--wide{max-width:560px}.settings-modal__content .settings-row .settings-input{width:auto;min-width:240px;max-width:320px}.settings-modal__content .settings-button{background:var(--panel-2);height:34px;color:var(--text);border:1px solid var(--line-strong);border-radius:var(--radius);font:inherit;cursor:pointer;white-space:nowrap;box-shadow:var(--key-edge);justify-content:center;align-items:center;gap:6px;padding:0 14px;font-size:13.5px;font-weight:600;transition:background .1s,border-color .1s,box-shadow 80ms,transform 80ms;display:inline-flex}.settings-modal__content .settings-button:hover{background:var(--panel-3);border-color:var(--line-strong)}.settings-modal__content .settings-button:active:not(:disabled){box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.settings-modal__content .settings-button:focus-visible{box-shadow:0 0 0 3px var(--accent-soft);outline:0}.settings-modal__content .settings-button:disabled{opacity:.55;cursor:not-allowed}.settings-modal__content .settings-button--primary{background:var(--accent);color:var(--accent-contrast);border-color:color-mix(in srgb, var(--accent) 70%, var(--text-strong))}.settings-modal__content .settings-button--primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.settings-modal__content .settings-switch{appearance:none;background:var(--line-strong);cursor:pointer;border:0;border-radius:9px;flex-shrink:0;width:32px;height:18px;margin:0;transition:background .15s;position:relative}.settings-modal__content .settings-switch:checked{background:var(--accent)}.settings-modal__content .settings-switch:disabled{opacity:.5;cursor:not-allowed}.settings-modal__content .settings-switch:after{content:"";background:#fff;border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.settings-modal__content .settings-switch:checked:after{transform:translate(14px)}.settings-modal__content .settings-switch:focus-visible{box-shadow:0 0 0 3px var(--accent-soft);outline:0}.settings-modal__content .settings-actions{justify-content:flex-end;align-items:center;gap:12px;margin-top:4px;display:flex}.settings-modal__content .settings-status{color:var(--muted);margin:0;font-size:13px}.settings-modal__content .settings-status.is-error{color:var(--danger)}@media (width<=720px){.settings-modal{border-radius:0;grid-template-rows:auto 1fr;grid-template-columns:1fr;width:100vw;height:100dvh}.settings-modal__rail{border-right:0;border-bottom:1px solid var(--line);flex-direction:row;padding:8px;overflow-x:auto}.settings-modal__content{padding:24px 20px 60px}.settings-modal__content .settings-row2{grid-template-columns:1fr;gap:10px}.settings-modal__content .settings-row2__control{max-width:none}}.ws-settings{color:var(--text);z-index:50;background:var(--lightningcss-light,#0f0f0f38)var(--lightningcss-dark,#00000059);place-items:center;padding:28px 80px 28px 28px;font-size:14px;line-height:1.5;display:grid;position:fixed;inset:0}.ws-settings__panel{background:var(--panel);border:1px solid var(--line);width:100%;max-width:1400px;height:100%;box-shadow:var(--shadow);grid-template-columns:260px minmax(0,1fr);display:grid;overflow:hidden}.ws-settings__rail{background:var(--panel-2);border-right:1px solid var(--line);flex-direction:column;padding:14px 10px 18px;display:flex;overflow-y:auto}.ws-settings__rail-search{margin:2px 4px 12px;position:relative}.ws-settings__rail-search-icon{color:var(--muted);pointer-events:none;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.ws-settings__rail-search-icon svg{width:14px;height:14px;display:block}.ws-settings__rail-search-input{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;height:32px;color:var(--text);font:inherit;padding:0 12px 0 32px;font-size:13px}.ws-settings__rail-search-input::placeholder{color:var(--muted)}.ws-settings__rail-search-input:disabled{cursor:not-allowed;opacity:.65}.ws-settings__rail-group{margin-top:6px}.ws-settings__rail-heading{color:var(--muted);letter-spacing:.02em;margin:0;padding:8px 10px 6px;font-size:11.5px;font-weight:600}.ws-settings__rail-heading-name{color:var(--text-strong);font-weight:700}.ws-settings__rail-list{margin:0;padding:0;list-style:none}.ws-settings__rail-item{border-radius:var(--radius-sm);cursor:pointer;width:100%;font:inherit;color:var(--text);text-align:left;background:0 0;border:0;align-items:center;gap:10px;margin:1px 0;padding:6px 10px;font-size:14px;line-height:1.4;transition:background .1s,color .1s;display:flex}.ws-settings__rail-item:hover{background:var(--hover)}.ws-settings__rail-item.is-active{background:var(--hover-strong);color:var(--text-strong);font-weight:600}.ws-settings__rail-item-icon{width:16px;height:16px;color:var(--muted);flex-shrink:0;place-items:center;display:grid}.ws-settings__rail-item-icon svg{width:16px;height:16px;display:block}.ws-settings__rail-item.is-active .ws-settings__rail-item-icon{color:var(--text-strong)}.ws-settings__rail-item-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.ws-settings__content{background:var(--bg);position:relative;overflow-y:auto}.ws-settings__content-inner{max-width:740px;padding:56px 80px 80px}.ws-settings__close{border:1px solid var(--line-strong);background:var(--panel);width:36px;height:36px;color:var(--text-strong);cursor:pointer;z-index:60;border-radius:50%;place-items:center;transition:background .12s,color .12s,border-color .12s;display:grid;position:fixed;top:28px;right:22px;box-shadow:0 1px 3px #00000026}@media (width<=760px){.ws-settings{padding:0}.ws-settings__panel{border:0;border-radius:0;max-width:none}}.ws-settings__close:hover{background:var(--panel-2);color:var(--text-strong);border-color:var(--line-strong)}.ws-settings__error{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);color:var(--danger);margin:0 0 20px;padding:14px 16px;font-size:13.5px}.ws-settings .ws-page__header{margin-bottom:32px}.ws-settings .ws-page__h1{letter-spacing:-.01em;color:var(--text-strong);font-size:28px;font-weight:700;line-height:1.2;font-family:var(--font-display);margin:0 0 8px}.ws-settings .ws-page__lead{color:var(--muted);margin:0;font-size:14px;line-height:1.5}.workspace-settings-empty{background:var(--panel-2);border:1px dashed var(--line);border-radius:var(--radius);color:var(--muted);padding:24px;font-size:14px;line-height:1.6}.workspace-settings-empty p{margin:0}.ws-section{border-top:1px solid var(--line);flex-direction:column;margin-top:24px;display:flex}.ws-section__h{color:var(--text-strong);margin:0;padding:18px 0 6px;font-size:14px;font-weight:700}.ws-row{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;padding:18px 0;display:grid}.ws-section>.ws-row:first-child,.ws-section>.ws-section__h+.ws-row{border-top:0}.ws-row__main{min-width:0}.ws-row__label{color:var(--text-strong);margin-bottom:4px;font-size:14px;font-weight:600}.ws-row__hint{color:var(--muted);font-size:13px;line-height:1.5}.ws-row__hint b{color:var(--text-strong);font-weight:600}.ws-row__value{color:var(--text-strong);text-align:right;word-break:break-word;max-width:320px;font-size:14px;font-weight:500}.ws-row__control{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;min-width:0;max-width:420px;display:flex}.ws-strip{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);align-items:center;gap:12px;margin-bottom:8px;padding:10px 14px;font-size:14px;display:flex}.ws-strip__avatar{background:linear-gradient(135deg, var(--brand-a), var(--brand-b));width:28px;height:28px;color:var(--brand-contrast);border-radius:6px;flex-shrink:0;place-items:center;font-size:12px;font-weight:700;display:grid;overflow:hidden}.ws-strip__avatar img{object-fit:cover;width:100%;height:100%;display:block}.ws-strip__name{color:var(--text-strong);font-weight:600}.ws-strip__pill{letter-spacing:.01em;border-radius:999px;margin-left:auto;padding:2px 10px;font-size:12px;font-weight:600}.ws-strip__pill--owner{background:color-mix(in srgb, var(--success) 15%, transparent);color:var(--success);border:1px solid color-mix(in srgb, var(--success) 32%, transparent)}.ws-strip__pill--moderator{background:color-mix(in srgb, var(--delivery-accent) 15%, transparent);color:var(--delivery-accent);border:1px solid color-mix(in srgb, var(--delivery-accent) 32%, transparent)}.ws-strip__pill--member,.ws-strip__pill--guest,.ws-strip__pill--bot{background:var(--panel-3,var(--hover));color:var(--text);border:1px solid var(--line)}.ws-input{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm);width:220px;max-width:100%;height:34px;color:var(--text-strong);font:inherit;padding:0 12px;font-size:14px}.ws-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.ws-input:disabled{opacity:.65;cursor:not-allowed}.ws-select{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius-sm);width:220px;max-width:100%;height:34px;color:var(--text-strong);font:inherit;padding:0 34px 0 10px;font-size:13.5px}.ws-select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:0}.ws-select:disabled{opacity:.65;cursor:not-allowed}.ws-file{display:none}.ws-actions{border-top:1px solid var(--line);justify-content:flex-end;align-items:center;gap:12px;padding:14px 0 0;display:flex}.ws-status{min-height:20px;color:var(--muted);flex:1;margin:0;font-size:13px}.ws-status.is-error{color:var(--danger)}.ws-input[readonly]{cursor:default;color:var(--text)}.ws-btn{background:var(--panel-2);border:1px solid var(--line-strong);border-radius:var(--radius);height:34px;color:var(--text-strong);font:inherit;cursor:pointer;box-shadow:var(--key-edge);padding:0 14px;font-size:13.5px;font-weight:500;transition:background .12s,color .12s,border-color .12s,box-shadow 80ms,transform 80ms}.ws-btn:active:not(:disabled){box-shadow:var(--key-edge-pressed);transform:translateY(1px)}.ws-btn:hover:not(:disabled){background:var(--panel-3,var(--hover-strong));border-color:var(--line-strong)}.ws-btn:disabled{opacity:.55;cursor:not-allowed}.ws-btn--danger{color:var(--danger);border-color:var(--line)}.ws-btn--danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 9%, transparent);border-color:var(--danger)}.ws-btn--primary{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, var(--text-strong));color:var(--accent-contrast);align-items:center;gap:6px;display:inline-flex}.ws-btn--primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.ws-btn--primary svg{width:14px;height:14px}.ws-settings__content:has(.ws-members-page){overflow:hidden}.ws-settings__content-inner:has(.ws-members-page){flex-direction:column;max-width:none;height:100%;min-height:0;padding:56px 80px 28px;display:flex}.ws-members-page{flex-direction:column;flex:1;min-height:0;display:flex}.ws-members-page__header{flex:none}.ws-members__toolbar{background:var(--bg);border-bottom:1px solid var(--line);flex-wrap:wrap;flex:none;justify-content:space-between;align-items:center;gap:16px;margin:4px 0 12px;padding:14px 0 12px;display:flex}.ws-members__count{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:12.5px;font-weight:600}.ws-members__controls{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.ws-members__search{align-items:center;display:flex;position:relative}.ws-members__search-icon{width:14px;height:14px;color:var(--muted);pointer-events:none;display:inline-flex;position:absolute;left:10px}.ws-members__search-icon svg{width:100%;height:100%}.ws-members__search-input{width:220px;height:34px;color:var(--text);background:var(--panel-2);border:1px solid var(--line);border-radius:6px;outline:none;padding:0 12px 0 32px;font-size:13px}.ws-members__search-input::-webkit-search-cancel-button{appearance:none}.ws-members__search-input:focus{border-color:var(--accent)}.ws-members__role-select{height:34px;color:var(--text);background:var(--panel-2);border:1px solid var(--line);cursor:pointer;border-radius:6px;outline:none;padding:0 28px 0 10px;font-size:13px}.ws-members__list{border:1px solid var(--line);background:var(--panel);border-radius:6px;flex:auto;min-height:0;overflow:hidden auto}.ws-members__row{border-bottom:1px solid var(--line);box-sizing:border-box;grid-template-columns:36px 1fr auto auto;align-items:center;gap:14px;padding:0 16px;display:grid}.ws-members__avatar{letter-spacing:-.02em;background:var(--accent-soft);width:36px;height:36px;color:var(--accent);border-radius:7px;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;font-weight:600;display:inline-flex;overflow:hidden}.ws-members__avatar--bot{background:color-mix(in srgb, var(--warn) 18%, transparent);color:color-mix(in srgb, var(--warn) 72%, var(--text))}.ws-members__avatar img{object-fit:cover;width:100%;height:100%}.ws-members__main{flex-direction:column;gap:2px;min-width:0;display:flex}.ws-members__name{color:var(--text-strong,var(--text));white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;overflow:hidden}.ws-members__meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:6px;font-size:12.5px;display:flex;overflow:hidden}.ws-members__handle{font-family:var(--font-mono);color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:1px 6px;font-size:12px}.ws-members__dot{opacity:.6}.ws-members__pill{text-transform:capitalize;color:var(--text);white-space:nowrap;background:#7f7f7f24;border-radius:999px;padding:3px 10px;font-size:11.5px;font-weight:600}.ws-members__pill--owner{background:color-mix(in srgb, var(--success) 16%, transparent);color:var(--success)}.ws-members__pill--moderator{background:color-mix(in srgb, var(--delivery-accent) 16%, transparent);color:var(--delivery-accent)}.ws-members__pill--bot{background:var(--accent-soft);color:var(--accent)}.ws-members__pill--guest{background:color-mix(in srgb, var(--warn) 18%, transparent);color:color-mix(in srgb, var(--warn) 72%, var(--text))}.ws-members__actions{width:28px;height:28px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.ws-members__actions:hover:not(:disabled){background:var(--bg);border-color:var(--line);color:var(--text)}.ws-members__actions:disabled{opacity:.45;cursor:not-allowed}.ws-members__empty{text-align:center;border:1px dashed var(--line);color:var(--muted);background:var(--panel);border-radius:8px;margin-top:24px;padding:36px 20px;font-size:13.5px}.ws-members__loading{color:var(--muted);text-align:center;border-top:1px solid var(--line);padding:10px 16px;font-size:12.5px}.ws-members__row--skeleton{height:64px}.ws-members__skeleton{background:linear-gradient(90deg,#7f7f7f14,#7f7f7f2e,#7f7f7f14) 0 0/200% 100%;border-radius:6px;animation:1.4s ease-in-out infinite ws-members-shimmer}.ws-members__skeleton--line{height:10px;margin:4px 0}.ws-members__skeleton--pill{border-radius:999px;width:64px;height:18px}@keyframes ws-members-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (width<=760px){.ws-settings__panel{grid-template-rows:auto 1fr;grid-template-columns:1fr}.ws-settings__rail{border-right:0;border-bottom:1px solid var(--line);padding:10px}.ws-settings__content-inner{padding:32px 20px 60px}.ws-settings__close{top:10px;right:12px}}.ws-bots-page{flex-direction:column;gap:0;display:flex}.ws-bots__toolbar{background:var(--bg);border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin:4px 0 12px;padding:14px 0 12px;display:flex}.ws-bots__count{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:12.5px;font-weight:600}.ws-bots__toolbar-actions{align-items:center;gap:8px;display:flex}.ws-bots__panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;margin:8px 0 16px;padding:18px 20px}.ws-bots__empty{text-align:center;border:1px dashed var(--line);color:var(--muted);background:var(--surface);border-radius:8px;margin-top:16px;padding:36px 20px;font-size:13.5px}.ws-bots__list{flex-direction:column;margin-bottom:60px;display:flex}.ws-bots__row{border-bottom:1px solid var(--line)}.ws-bots__row:last-child{border-bottom:0}.ws-bots__row.is-expanded{background:var(--surface)}.ws-bots__row-main{text-align:left;cursor:pointer;width:100%;color:inherit;background:0 0;border:0;grid-template-columns:36px 1fr auto auto;align-items:center;gap:14px;padding:14px 16px;display:grid}.ws-bots__row-main:hover{background:var(--hover,#7f7f7f0f)}.ws-bots__row-text{flex-direction:column;gap:2px;min-width:0;display:flex}.ws-bots__row-name{color:var(--text-strong,var(--text));white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;overflow:hidden}.ws-bots__row-meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:6px;font-size:12.5px;display:flex;overflow:hidden}.ws-bots__owner-pill{color:var(--text);white-space:nowrap;background:#7f7f7f24;border-radius:999px;padding:3px 10px;font-size:11.5px;font-weight:600}.ws-bots__owner-pill--service{background:color-mix(in srgb, var(--delivery-accent) 16%, transparent);color:var(--delivery-accent)}.ws-bots__owner-pill--user{background:color-mix(in srgb, var(--warn) 18%, transparent);color:color-mix(in srgb, var(--warn) 72%, var(--text))}.ws-bots__chevron{width:20px;height:20px;color:var(--muted);justify-content:center;align-items:center;display:inline-flex}.ws-bots__detail{border-top:1px dashed var(--line);flex-direction:column;gap:12px;padding:4px 16px 18px;display:flex}.ws-bots__detail-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;padding-top:14px;display:flex}.ws-bots__detail-title{color:var(--text-strong,var(--text));margin:0 0 4px;font-size:13.5px;font-weight:600}.ws-bots__detail-hint{color:var(--muted);max-width:60ch;margin:0;font-size:12.5px}.ws-bots__detail-actions{flex-wrap:wrap;gap:8px;display:flex}.ws-bots__detail-empty{color:var(--muted);background:var(--bg);border:1px dashed var(--line);border-radius:6px;margin:0;padding:16px;font-size:13px}.ws-bots__token-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.ws-bots__token-row{background:var(--bg);border:1px solid var(--line);border-radius:6px;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px 16px;padding:12px 14px;display:flex}.ws-bots__token-row>.ws-btn{flex-shrink:0}.ws-bots__token-main{flex-direction:column;flex:240px;gap:4px;min-width:0;display:flex}.ws-bots__token-name{color:var(--text-strong,var(--text));font-size:13.5px;font-weight:600}.ws-bots__token-meta{color:var(--muted);font-size:12.5px}.ws-bots__scope-row{flex-wrap:wrap;gap:6px;margin-top:2px;display:flex}.ws-bots__scope-chip{font-family:var(--font-mono);background:var(--bg);border:1px solid var(--line);color:var(--text);border-radius:999px;padding:2px 8px;font-size:11.5px}.ws-bots__scope-chip--bundle{color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, transparent);border-color:color-mix(in srgb, var(--accent) 35%, transparent);font-family:inherit;font-weight:600}.ws-bots__scope-toggle{color:var(--muted);text-underline-offset:2px;cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:11.5px;text-decoration:underline}.ws-bots__scope-toggle:hover{color:var(--text)}.ws-bots__scope-details{margin-top:6px}.ws-bots__scope-details>summary{color:var(--muted);cursor:pointer;width:fit-content;font-size:11.5px}.ws-bots__scope-details[open]>summary{margin-bottom:6px}.ws-bots__form{flex-direction:column;gap:16px;display:flex}.ws-bots__form-header{flex-direction:column;gap:4px;display:flex}.ws-bots__form-title{color:var(--text-strong,var(--text));margin:0;font-size:16px;font-weight:600}.ws-bots__form-hint{color:var(--muted);max-width:60ch;margin:0;font-size:13px}.ws-bots__form-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (width<=640px){.ws-bots__form-grid{grid-template-columns:1fr}}.ws-bots__form-field{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:0;display:flex}.ws-bots__form-label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.ws-bots__form-input{height:34px;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:6px;outline:none;padding:0 12px;font-size:13.5px}.ws-bots__form-input:focus{border-color:var(--accent)}.ws-bots__form-handle{background:var(--surface);border:1px solid var(--line);border-radius:6px;align-items:center;gap:6px;padding:0 10px;display:flex}.ws-bots__form-handle span{color:var(--muted);font-family:var(--font-mono);font-size:13px}.ws-bots__form-handle .ws-bots__form-input{background:0 0;border:0;flex:1;padding-left:0}.ws-bots__choices{flex-direction:column;gap:8px;display:flex}.ws-bots__choice{border:1px solid var(--line);background:var(--surface);cursor:pointer;border-radius:6px;grid-template-rows:auto auto;grid-template-columns:18px 1fr;gap:2px 10px;padding:10px 12px;display:grid}.ws-bots__choice.is-active{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 7%, transparent)}.ws-bots__choice input{accent-color:var(--accent);grid-row:1/span 2;align-self:center}.ws-bots__choice-title{color:var(--text-strong,var(--text));font-size:13.5px;font-weight:600}.ws-bots__choice-hint{color:var(--muted);font-size:12.5px}.ws-bots__form-error{background:color-mix(in srgb, var(--danger) 9%, transparent);color:var(--danger);border:1px solid color-mix(in srgb, var(--danger) 32%, transparent);border-radius:6px;margin:0;padding:10px 12px;font-size:13px}.ws-bots__form-actions{justify-content:flex-end;gap:8px;display:flex}.ws-bots__token-form-panel{background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:14px}.ws-bots__token-form .ws-bots__choices{grid-template-columns:repeat(3,minmax(0,1fr));display:grid}@media (width<=720px){.ws-bots__token-form .ws-bots__choices{grid-template-columns:1fr}}.ws-bots__reveal{background:var(--surface);border:1px solid var(--accent);border-radius:8px;flex-direction:column;gap:14px;margin:8px 0 16px;padding:18px 20px;display:flex}.ws-bots__reveal-header{flex-direction:column;gap:4px;display:flex}.ws-bots__reveal-title{color:var(--text-strong,var(--text));margin:0;font-size:16px;font-weight:600}.ws-bots__reveal-hint{color:var(--muted);max-width:60ch;margin:0;font-size:13px}.ws-bots__reveal-hint code{background:var(--bg);border:1px solid var(--line);font-family:var(--font-mono);color:var(--text);white-space:nowrap;border-radius:4px;padding:1px 6px;font-size:12px}.ws-bots__reveal-field{flex-direction:column;gap:6px;display:flex}.ws-bots__reveal-label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.ws-bots__reveal-row{align-items:center;gap:8px;display:flex}.ws-bots__reveal-input{height:34px;font-family:var(--font-mono);color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:6px;flex:1;padding:0 12px;font-size:13px}.ws-bots__reveal-snippet-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.ws-bots__reveal-details{border:1px solid var(--line);background:var(--bg);border-radius:6px}.ws-bots__reveal-summary{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;cursor:pointer;-webkit-user-select:none;user-select:none;padding:10px 14px;font-size:11px;font-weight:600}.ws-bots__reveal-summary:hover{color:var(--text)}.ws-bots__reveal-details-body{gap:8px;padding:0 14px 12px;display:grid}.ws-bots__reveal-details-body .ws-bots__reveal-hint{margin:0}.ws-bots__setup-mode{background:var(--bg);border:1px solid var(--line);border-radius:6px;grid-template-columns:repeat(2,minmax(0,1fr));width:min(320px,100%);padding:3px;display:inline-grid}.ws-bots__setup-mode button{min-height:30px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:0 12px;font-size:12.5px;font-weight:600}.ws-bots__setup-mode button.is-active{background:var(--surface);color:var(--text);box-shadow:0 0 0 1px var(--line)}.ws-bots__reveal-snippet{background:var(--bg);border:1px solid var(--line);font-family:var(--font-mono);color:var(--text);white-space:pre-wrap;border-radius:6px;margin:0;padding:12px 14px;font-size:12.5px;overflow-x:auto}.ws-bots__reveal-ack{color:var(--text);align-items:center;gap:8px;font-size:13px;display:flex}.ws-bots__reveal-actions{justify-content:flex-end;display:flex}.ws-bots__my-list{flex-direction:column;gap:18px;display:flex}.ws-bots__my-group{flex-direction:column;gap:8px;display:flex}.ws-bots__my-group-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.ws-bots__my-group-title{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:0;font-size:13px;font-weight:600}.ws-bots__my-rows{border:1px solid var(--line);background:var(--surface);border-radius:6px;flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.ws-bots__my-row{border-bottom:1px solid var(--line);grid-template-columns:36px 1fr auto;align-items:center;gap:14px;padding:12px 14px;display:grid}.ws-bots__my-row:last-child{border-bottom:0}.ws-bots__my-row-text{flex-direction:column;gap:2px;min-width:0;display:flex}.ws-bots__my-row-name{color:var(--text-strong,var(--text));font-size:14px;font-weight:600}.ws-bots__my-row-meta{color:var(--muted);align-items:center;gap:6px;font-size:12.5px;display:flex}.appearance-preview{border:1px solid var(--line-strong);border-radius:var(--radius-lg);background:var(--bg);overflow:hidden}.appearance-preview__bar{border-bottom:1px solid var(--line);background:var(--panel);color:var(--text-strong);align-items:baseline;gap:8px;padding:9px 14px;font-size:12px;font-weight:700;display:flex}.appearance-preview__hash{color:var(--accent)}.appearance-preview__topic{color:var(--muted);font-size:11.5px;font-weight:500}.appearance-preview__chat{gap:14px;padding:14px 16px 16px;display:grid}.appearance-preview[data-density=compact] .appearance-preview__chat{gap:7px;padding:10px 14px 12px}.appearance-preview__msg{grid-template-columns:34px minmax(0,1fr);gap:10px;display:grid}.appearance-preview[data-density=compact] .appearance-preview__msg{grid-template-columns:24px minmax(0,1fr);gap:8px}.appearance-preview__avatar{background:var(--accent);width:34px;height:34px;color:var(--accent-contrast);border-radius:9px;place-items:center;font-size:14px;font-weight:700;display:grid}.appearance-preview[data-density=compact] .appearance-preview__avatar{border-radius:7px;width:24px;height:24px;font-size:11px}.appearance-preview__avatar.is-agent{background:var(--accent-2)}.appearance-preview__body{gap:3px;min-width:0;display:grid}.appearance-preview[data-density=compact] .appearance-preview__body{gap:1px}.appearance-preview__head{align-items:baseline;gap:7px;display:flex}.appearance-preview__who{color:var(--text-strong);font-size:13px;font-weight:700}.appearance-preview[data-density=compact] .appearance-preview__who{font-size:12px}.appearance-preview__when{color:var(--muted);font-size:10px}.appearance-preview__text{font-size:13px;line-height:1.5}.appearance-preview[data-density=compact] .appearance-preview__text{font-size:12.5px;line-height:1.4}.appearance-preview__activity{background:color-mix(in srgb, var(--accent-2) 9%, var(--panel));color:var(--muted);border-radius:7px 7px 0 0;margin-top:3px;padding:6px 10px;font-size:11.5px}.appearance-preview__activity code{color:var(--text-strong);font-family:var(--font-mono,ui-monospace, monospace);font-size:10.5px}.appearance-preview__answer{background:color-mix(in srgb, var(--accent) 7%, var(--panel));border-radius:0 0 7px 7px;padding:7px 10px 8px;font-size:13px;line-height:1.5}.appearance-preview[data-density=compact] .appearance-preview__activity{padding:4px 8px;font-size:11px}.appearance-preview[data-density=compact] .appearance-preview__answer{padding:5px 8px 6px;font-size:12.5px}.appearance-preview[data-layout=outlined] .appearance-preview__activity{border:1px solid color-mix(in srgb, var(--accent-2) 45%, var(--line));background:0 0;border-bottom:0}.appearance-preview[data-layout=outlined] .appearance-preview__answer{border:1px solid color-mix(in srgb, var(--accent) 40%, var(--line));background:0 0}.appearance-preview__reactions{gap:5px;margin-top:5px;display:flex}.appearance-preview[data-density=compact] .appearance-preview__reactions{margin-top:2px}.appearance-preview__reaction{border:1px solid var(--line);background:var(--panel);color:var(--muted);border-radius:999px;padding:2px 8px;font-size:11px}.appearance-preview__reaction.is-mine{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, var(--panel));color:var(--text-strong)}.appearance-preview__caption{color:var(--muted-2);text-align:right;margin:-14px 2px 0;font-size:11px}.appearance-rows{display:grid}.appearance-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;padding:14px 0;display:grid}.appearance-row+.appearance-row{border-top:1px solid var(--line)}.appearance-row__meta{gap:2px;display:grid}.appearance-row__label{color:var(--text-strong);font-size:13.5px;font-weight:650}.appearance-row__desc{color:var(--muted);font-size:12px}.appearance-row__control{align-items:center;gap:12px;display:inline-flex}.appearance-seg{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--panel-2);gap:2px;padding:2px;display:inline-flex}.appearance-seg__btn{color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;padding:5px 12px;font-size:12.5px;font-weight:600}.appearance-seg__btn:hover{color:var(--text-strong)}.appearance-seg__btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.appearance-seg__btn.is-active{border-color:var(--line-strong);background:var(--panel);color:var(--text-strong);box-shadow:0 1px 2px #10151d1a}.board-chips__name{min-width:44px;color:var(--muted);text-align:right;font-size:12px}.board-chips{align-items:center;gap:10px;display:inline-flex}.board-chip{border:1px solid var(--line-strong);background:linear-gradient(135deg, var(--panel) 52%, var(--accent) 52%);cursor:pointer;border-radius:8px;width:26px;height:26px;padding:0;position:relative}.board-chip:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.board-chip.is-active:after{content:"";border:2px solid var(--accent);border-radius:11px;position:absolute;inset:-5px}@media (width<=640px){.appearance-row{grid-template-columns:1fr;gap:10px}.appearance-row__control,.board-chips__name{text-align:left;justify-self:start}}.ws-intg-page{padding-bottom:60px}.ws-intg__app-icon{background:var(--surface);border:1px solid var(--line);width:36px;height:36px;color:var(--text);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.ws-intg__wizard{background:var(--surface);border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:16px;margin:8px 0 16px;padding:18px 20px;display:flex}.ws-intg__wizard-header{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.ws-intg__wizard-step{color:var(--muted);white-space:nowrap;padding-top:2px;font-size:11.5px;font-weight:600}.ws-intg__wizard-body{flex-direction:column;gap:14px;display:flex}.ws-intg__catalog{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;display:grid}.ws-intg__catalog-card{border:1px solid var(--line);text-align:left;cursor:pointer;color:inherit;background:0 0;border-radius:8px;flex-direction:column;align-items:flex-start;gap:8px;padding:16px;transition:border-color .12s,background .12s;display:flex}.ws-intg__catalog-card:hover{border-color:var(--accent);background:var(--hover,#7f7f7f0f)}.ws-intg__catalog-name{color:var(--text-strong,var(--text));font-size:14px;font-weight:600}.ws-intg__catalog-desc{color:var(--muted);font-size:12.5px;line-height:1.45}.ws-intg__chips{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.ws-intg__chip{background:color-mix(in srgb, var(--accent) 14%, transparent);color:var(--text);border-radius:999px;align-items:center;gap:6px;padding:3px 6px 3px 10px;font-size:12px;font-weight:600;display:inline-flex}.ws-intg__chip-remove{width:16px;height:16px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:50%;justify-content:center;align-items:center;font-size:13px;line-height:1;display:inline-flex}.ws-intg__chip-remove:hover{color:var(--text);background:#7f7f7f2e}.ws-intg__member-results{border:1px solid var(--line);background:var(--surface);border-radius:8px;flex-direction:column;gap:2px;max-height:220px;margin:6px 0 0;padding:4px;list-style:none;display:flex;overflow-y:auto}.ws-intg__member-result{text-align:left;cursor:pointer;width:100%;color:inherit;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:7px 10px;font-size:13px;display:flex}.ws-intg__member-result:hover{background:var(--hover,#7f7f7f14)}.ws-intg__toggle{cursor:pointer;align-items:flex-start;gap:10px;display:flex}.ws-intg__toggle input[type=checkbox]{flex-shrink:0;margin-top:3px}.ws-intg__toggle>span{flex-direction:column;gap:2px;display:flex}.ws-intg__panel{border:1px solid var(--line);background:var(--surface);border-radius:8px;flex-direction:column;gap:12px;padding:14px 16px;display:flex}.ws-intg__panel-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.ws-intg__panel-title{color:var(--text-strong,var(--text));margin:0 0 3px;font-size:13px;font-weight:600}.ws-intg__panel-hint{color:var(--muted);max-width:560px;margin:0;font-size:12.5px;line-height:1.45}.ws-intg__panel-empty{color:var(--muted);margin:0;font-size:12.5px}.ws-intg__inline-form{border:1px dashed var(--line);border-radius:8px;flex-direction:column;gap:12px;padding:14px;display:flex}.ws-intg__item-list{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.ws-intg__item-row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:14px;padding:11px 0;display:flex}.ws-intg__item-row:last-child{border-bottom:0}.ws-intg__item-row--stacked{flex-direction:column;align-items:stretch}.ws-intg__item-top{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.ws-intg__item-main{flex-direction:column;gap:4px;min-width:0;display:flex}.ws-intg__item-name{color:var(--text-strong,var(--text));font-size:13.5px;font-weight:600}.ws-intg__item-meta{color:var(--muted);overflow-wrap:anywhere;font-size:12px}.ws-intg__url{font-family:var(--mono,ui-monospace, monospace);font-size:11.5px}.ws-intg__item-actions{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;display:flex}.ws-intg__type-chips{flex-wrap:wrap;gap:5px;display:flex}.ws-intg__secret{border:1px solid color-mix(in srgb, var(--warn) 45%, var(--line));background:color-mix(in srgb, var(--warn) 7%, transparent);border-radius:8px;flex-direction:column;gap:6px;margin-top:6px;padding:10px 12px;display:flex}.ws-intg__secret-label{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-size:11px;font-weight:700}.ws-intg__secret-row{align-items:center;gap:8px;display:flex}.ws-intg__secret-row .ws-bots__reveal-input{flex:1;min-width:0}.ws-intg__confirm{border:1px solid color-mix(in srgb, var(--danger,#d33) 40%, var(--line));background:color-mix(in srgb, var(--danger,#d33) 6%, transparent);border-radius:8px;flex-direction:column;gap:12px;padding:14px 16px;display:flex}.ws-intg__confirm-text{color:var(--text);margin:0;font-size:13px;line-height:1.5}.ws-intg__event-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:6px;margin-top:10px;display:grid}.ws-intg__event-option{border:1px solid var(--line);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:7px 10px;font-size:12px;display:flex}.ws-intg__event-option.is-active{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent)}.ws-intg__deliveries{border-top:1px dashed var(--line);flex-direction:column;gap:8px;padding-top:10px;display:flex}.ws-intg__deliveries-scroll{border:1px solid var(--line);border-radius:8px;max-height:420px;overflow-y:auto}.ws-intg__delivery{border-bottom:1px solid var(--line)}.ws-intg__delivery:last-child{border-bottom:0}.ws-intg__delivery-row{text-align:left;cursor:pointer;width:100%;color:inherit;background:0 0;border:0;grid-template-columns:84px 1fr auto auto;align-items:center;gap:12px;padding:10px 12px;font-size:12.5px;display:grid}.ws-intg__delivery-row:hover{background:var(--hover,#7f7f7f0f)}.ws-intg__delivery-status{text-align:center;white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700}.ws-intg__delivery-status--ok{background:color-mix(in srgb, var(--delivery-accent,#2a9d5c) 16%, transparent);color:var(--delivery-accent,#2a9d5c)}.ws-intg__delivery-status--fail{background:color-mix(in srgb, var(--danger,#d33) 14%, transparent);color:var(--danger,#d33)}.ws-intg__delivery-type{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.ws-intg__delivery-attempt,.ws-intg__delivery-time{color:var(--muted);white-space:nowrap;font-size:11.5px}.ws-intg__delivery-detail{flex-direction:column;gap:10px;padding:4px 12px 14px;display:flex}.ws-intg__delivery-block{flex-direction:column;gap:4px;display:flex}.ws-intg__delivery-block .ws-bots__reveal-snippet{max-height:260px;overflow:auto}.ws-intg__deliveries-more{justify-content:center;display:flex}.ws-intg__deliveries-retry{justify-content:space-between;align-items:center;gap:12px;display:flex}.ws-intg__section{flex-direction:column;gap:12px;margin-top:28px;display:flex}.ws-intg__section-title{color:var(--text-strong,var(--text));margin:0;font-size:15px;font-weight:600}.ws-intg__section-hint{color:var(--muted);margin:-6px 0 0;font-size:12.5px}.ws-bots__choice.is-disabled{opacity:.55;cursor:not-allowed} diff --git a/apps/api/internal/webassets/dist/_app/immutable/chunks/ICuO3Jye.js b/apps/api/internal/webassets/dist/_app/immutable/chunks/Du-A4cpj.js similarity index 63% rename from apps/api/internal/webassets/dist/_app/immutable/chunks/ICuO3Jye.js rename to apps/api/internal/webassets/dist/_app/immutable/chunks/Du-A4cpj.js index de6268c14..4a00782ad 100644 --- a/apps/api/internal/webassets/dist/_app/immutable/chunks/ICuO3Jye.js +++ b/apps/api/internal/webassets/dist/_app/immutable/chunks/Du-A4cpj.js @@ -1,8 +1,8 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BB6meo0l.js","./HclGiUj8.js"])))=>i.map(i=>d[i]); import{t as e}from"./DK3Fl9T5.js";import{$ as t,B as n,C as r,D as i,F as a,I as o,K as s,N as c,O as l,P as u,Q as d,R as f,S as p,St as m,U as h,V as g,W as _,X as v,Z as y,_ as b,_t as x,a as S,at as C,b as w,bt as T,c as E,ct as D,dt as O,f as k,ft as A,gt as ee,h as j,it as M,j as N,k as P,lt as F,m as te,n as ne,nt as I,o as re,ot as L,p as R,q as z,r as ie,rt as B,s as ae,st as V,u as oe,v as se,xt as H,y as ce,z as U}from"./uCPLfb5l.js";import{n as le}from"./Cid4Tjuh.js";import{t as ue}from"./HclGiUj8.js";import"./xihTtKlq.js";import"./D_03Opfq.js";import{a as de,i as fe,n as W,o as pe,s as me,t as he}from"./2Ij-r2c7.js";import{c as ge,d as _e,f as ve,h as ye,i as be,l as xe,m as Se,n as Ce,p as we,r as Te,s as Ee,t as De,u as Oe}from"./YwXLQysC.js";import{a as ke,i as Ae,n as je,t as Me}from"./Qo16U5GS.js";import{t as G}from"./OQjxVT6U.js";import"./BdPWQrN9.js";import{A as Ne,B as Pe,D as Fe,E as Ie,F as Le,H as Re,I as ze,L as K,M as Be,N as Ve,O as He,P as Ue,R as We,T as Ge,V as q,_ as J,b as Ke,d as qe,f as Je,g as Y,h as X,j as Ye,k as Xe,m as Z,p as Q,r as Ze,u as Qe,v as $e,y as et,z as tt}from"./dUztObX2.js";import{n as nt,t as rt}from"./DlGnnCJo.js";import{n as it,t as at}from"./D8ODVW2D.js";import{n as ot,t as st}from"./CSGZ0Ari.js";import{p as ct,r as lt}from"./DhPJt53a.js";import{t as ut}from"./CDrSvh7y.js";var dt=typeof window>`u`?void 0:window.clickclackDesktop;async function ft(e){return e.type.startsWith(`image/`)?pt(e):e.type.startsWith(`video/`)?mt(e):{width:0,height:0,durationMS:0}}function pt(e){return new Promise(t=>{let n=URL.createObjectURL(e),r=new Image;r.onload=()=>{let e={width:r.naturalWidth,height:r.naturalHeight,durationMS:0};URL.revokeObjectURL(n),t(e)},r.onerror=()=>{URL.revokeObjectURL(n),t({width:0,height:0,durationMS:0})},r.src=n})}function mt(e){return new Promise(t=>{let n=URL.createObjectURL(e),r=document.createElement(`video`);r.preload=`metadata`,r.muted=!0;let i=()=>{URL.revokeObjectURL(n),r.src=``};r.onloadedmetadata=()=>{let e=Number.isFinite(r.duration)&&r.duration>0?Math.round(r.duration*1e3):0,n={width:r.videoWidth,height:r.videoHeight,durationMS:e};i(),t(n)},r.onerror=()=>{i(),t({width:0,height:0,durationMS:0})},r.src=n})}var ht=[{title:`Ship it`,url:`https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYjJ1bm1meHE4N2x3bnN0djJkMWtjNGc5bXYzZDFiOHBsbG16M3F0ZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/l0HlHFRbmaZtBRhXG/giphy.gif`,tags:[`ship`,`launch`,`done`]},{title:`Approved`,url:`https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExazBpbzJ6ODZ3bXQ3OHBvNGJidWZoajc0cHV6YnVub3MzZ3c1a2Z2dSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/111ebonMs90YLu/giphy.gif`,tags:[`yes`,`approved`,`nice`]},{title:`Deploy dance`,url:`https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExY3NkaTVmZW9ydWNnZnl0ZWQ5aHQyeGNrd2k3NG4wZWNqYzNmd3k1ZCZlcD12MV9naWZzX3NlYXJjaCZjdD1n/GeimqsH0TLDt4tScGw/giphy.gif`,tags:[`deploy`,`dance`,`celebrate`]},{title:`Looking`,url:`https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWZ3emE0dm5mN2h0bGVsY2w0OXBodGd2cGJlNDRiZXo1YWNtdWRmZyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/26n6WywJyh39n1pBu/giphy.gif`,tags:[`search`,`looking`,`debug`]},{title:`Typing faster`,url:`https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExOWFlbnJnbnIzbHYxcDIzdXZ3NGF3N2FocHNvMmR5enU3bHpycHBlZSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/13HgwGsXF0aiGY/giphy.gif`,tags:[`typing`,`code`,`work`]},{title:`Tiny victory`,url:`https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdjJ2b2tqNmF4dG16NjE0eXhuc3h5bTlvamgwNTR0Zmd6ZjhtM2JuaSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/3o7abKhOpu0NwenH3O/giphy.gif`,tags:[`win`,`victory`,`celebrate`]}],gt=new Set([`agent_commentary`,`agent_tool`]),_t=18e4;function vt(e){return e.kind!==void 0&>.has(e.kind)}function yt(e){return e.kind===void 0||e.kind===`message`}function bt(e){return e.author?.id||e.author_id||``}function xt(e){return`${e.channel_id?`channel:${e.channel_id}`:`direct:${e.direct_conversation_id||``}`}\u0000${bt(e)}\u0000${e.turn_id||e.id}`}function St(e){let t=e.trim(),n=``,r=``,i=t.match(/^\*\*([^*]+)\*\*\s*\n+([\s\S]+)$/),a=t.match(/^\*\*([^*]+)\*\*$/);if(i)n=i[1].trim(),r=wt(i[2]);else if(a)n=a[1].trim();else return Ct(t.replace(/\*\*/g,``).trim(),``);return Ct(n,r)}function Ct(e,t){let n=wt(e),r=n.indexOf(` `),i,a;r===-1?(i=n,a=``):(i=n.slice(0,r),a=n.slice(r+1).trim());let o=[a,t].filter(e=>e.length>0).join(` · `);return{name:i,detail:o||void 0}}function wt(e){return e.replace(/\s+/g,` `).trim()}function Tt(e,t,n,r){let i=[];for(let e of t)if(e.kind===`agent_tool`){if(r.hideToolCalls)continue;let t=St(e.body);i.push({type:`tool`,id:e.id,name:t.name,detail:t.detail,full:e.body.trim()})}else{if(r.hideCommentary)continue;let t=e.body.trim();t&&i.push({type:`commentary`,id:e.id,body:t})}return i.length===0?null:{turnId:e,items:i,final:n}}function Et(e,t,n=Date.now()){let r=new Map,i=new Map;for(let t=0;to.firstIndex;if(!r){let e=Date.parse(o.rows[o.rows.length-1].created_at);Number.isFinite(e)&&n-e>_t&&(r=!0)}a.set(t,r)}let o=[];for(let n=0;n=Rt)&&(zt.active=!0,zt.lastPingAt=t,Ht(e,`typing.started`)),zt.idleTimer&&window.clearTimeout(zt.idleTimer),zt.idleTimer=window.setTimeout(()=>{zt&&=(Wt(zt),null)},Lt)}async function Wt(e){e.idleTimer&&window.clearTimeout(e.idleTimer),e.active&&await Ht(e.scope,`typing.stopped`)}function Gt(){zt&&=(Wt(zt),null)}var Kt=2e3,qt=2097152;function Jt(e){let t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function Yt(e,t,n){return!t||e.length>262144?Promise.resolve(Jt(e)):new Promise((r,i)=>{let a=new Worker(new URL(``+new URL(`../workers/highlight.worker-DMiSXOFf.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),o=!1,s=e=>{o||(o=!0,clearTimeout(l),n.removeEventListener(`abort`,c),a.terminate(),e())},c=()=>s(()=>i(new DOMException(`Syntax highlighting was aborted.`,`AbortError`))),l=window.setTimeout(()=>s(()=>r(Jt(e))),Kt);if(a.onmessage=t=>{let n=t.data;`error`in n?s(()=>r(Jt(e))):s(()=>r(n.html))},a.onerror=()=>s(()=>r(Jt(e))),n.addEventListener(`abort`,c,{once:!0}),n.aborted){c();return}a.postMessage({source:e,language:t,outputLimit:qt})})}var Xt=5e3;function Zt(e,t,n){return new Promise((r,i)=>{let a=new Worker(new URL(``+new URL(`../workers/office.worker-BdyMEpKK.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),o=!1,s=e=>{o||(o=!0,clearTimeout(l),n.removeEventListener(`abort`,c),a.terminate(),e())},c=()=>s(()=>i(new DOMException(`Office preview was aborted.`,`AbortError`))),l=window.setTimeout(()=>s(()=>i(Error(`Office preview took too long and was stopped.`))),Xt);if(a.onmessage=t=>{let n=t.data;if(`error`in n){s(()=>i(Error(n.error)));return}if(n.kind!==e){s(()=>i(Error(`Office preview returned an unexpected result.`)));return}s(()=>r(n.preview))},a.onerror=()=>s(()=>i(Error(`Could not parse this Office file safely.`))),n.addEventListener(`abort`,c,{once:!0}),n.aborted){c();return}let u=t.byteOffset===0&&t.buffer instanceof ArrayBuffer&&t.byteLength===t.buffer.byteLength?t:t.slice(),d={kind:e,bytes:u};a.postMessage(d,[u.buffer])})}var Qt=16777216,$t=1e4,en=1e4,tn=`This PDF page is too large to preview safely. Download the original to open it locally.`;function nn(e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<1||t<1||e>8192||t>8192||e*t>16777216)throw Error(tn)}var rn=``+new URL(`../assets/pdf.worker.CLesOks4.mjs`,import.meta.url).href,an=o(`
`),on=o(`

Preparing a safe preview.

`),sn=o(``),cn=o(`
No preview for this file type

You can still download the original file.

Download original
`),ln=o(`
`,1),un=o(` `),dn=o(` `),fn=o(` `),pn=o(` `),mn=o(`

Preview is limited to 10,000 cells, the first 1,000 rows, and the first 100 columns. Download the original to inspect omitted cells.

`),hn=o(``),gn=o(`
Raw cached values; number and date formatting omitted
`,1),_n=o(`

`),vn=o(`

`),yn=o(`

`),bn=o(`

Some slide content was omitted by preview limits.

`),xn=o(`

Text outline only. Visuals, layout, animations, and speaker notes are omitted.

`,1),Sn=o(`
`),Cn=o(`
`),wn=o(`
`),Tn=o(`
 
`),En=o(`
`,1);function Dn(e,r){x(r,!0);let o=F(null),s=A(()=>$e(r.upload)),f=F(`preview`),p=F(`idle`),m=F(``),h=F(``),g=F(``),v=F(!1),y=F(``),b=F(null),S=F(1),E=F(1),O=F(!1),k=F(``),j=null,te=!1,I=F(null),re=F(0),L=F(null),z=F(0),ie=1e4,V=65536,oe=5e3;class se extends Error{}let ce=A(()=>X(_(s))),U=A(()=>Ie(r.upload)),le=A(()=>(_(s)===`markdown`||_(s)===`html`)&&_(p)===`ready`&&_(v));function de(e){return`This ${_(ce).toLowerCase()} is ${Ge(r.upload.byte_size)}. Preview is limited to ${Ge(e)}.`}function fe(e){pe(e);let t=document.createElement(`template`);t.innerHTML=e;let n=et.sanitize(t.content,{RETURN_DOM_FRAGMENT:!0,USE_PROFILES:{html:!0},FORBID_TAGS:[`base`,`embed`,`form`,`iframe`,`link`,`meta`,`object`,`script`,`style`],FORBID_ATTR:[`action`,`formaction`,`srcset`,`style`,`xlink:href`]});for(let e of n.querySelectorAll(`*`))for(let t of Array.from(e.attributes))e.removeAttribute(t.name);let r=document.createElement(`div`);r.append(n);let i=r.innerHTML;return me(i),`${i}`}function W(e){pe(e);let t=Q(e);return me(t),et.sanitize(t,{ALLOWED_TAGS:[`blockquote`,`br`,`code`,`del`,`em`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`hr`,`li`,`ol`,`p`,`pre`,`strong`,`table`,`tbody`,`td`,`th`,`thead`,`tr`,`ul`],ALLOWED_ATTR:[]})}function pe(e){if(e.length>65536)throw new se(`Structured preview exceeded the safe source limit.`);let t=0;for(let n of e)if("<[]>*_`-+.!#>|~".includes(n)&&(t+=1,t>ie))throw new se(`Structured preview exceeded the safe complexity limit.`)}function me(e){if(e.length>4194304)throw new se(`Rendered preview exceeded the safe output limit.`);let t=0;for(let n of e)if(n===`<`&&++t>ie*2)throw new se(`Rendered preview exceeded the safe element limit.`)}function he(e){return`Preview data exceeded the ${Ge(e)} safety limit.`}async function ge(e,t){let n=await fetch(_(U),{credentials:`include`,signal:e});if(!n.ok)throw n.status===401||n.status===403?Error(`You no longer have access to this artifact.`):n.status===404?Error(`This artifact is no longer available.`):Error(`Could not load this artifact (${n.status}).`);let r=Number(n.headers.get(`Content-Length`));if(Number.isFinite(r)&&r>t)throw Error(he(t));if(!n.body){let e=new Uint8Array(await n.arrayBuffer());if(e.byteLength>t)throw Error(he(t));return e}let i=n.body.getReader(),a=[],o=0;try{for(;;){let{done:e,value:n}=await i.read();if(e)break;if(o+=n.byteLength,o>t)throw await i.cancel(),Error(he(t));a.push(n)}}finally{i.releaseLock()}let s=new Uint8Array(o),c=0;for(let e of a)s.set(e,c),c+=e.byteLength;return s}async function _e(e,t){return new TextDecoder(`utf-8`,{fatal:!1}).decode(await ge(e,t))}async function ve(e){j?.(),j=null,D(b,null),D(h,``),D(g,``),D(v,!1),D(y,``),D(S,1),D(E,1),D(k,``),te=!1,D(I,null),D(re,0),D(L,null),D(z,0),D(f,`preview`),D(m,``);let t=J(_(s));if(t!==void 0&&r.upload.byte_size>t){D(p,`error`),D(m,de(t),!0);return}if(_(s)===`unsupported`){D(p,`ready`);return}D(p,`loading`);try{if(_(s)===`pdf`){let n=await ue(()=>import(`./BB6meo0l.js`),__vite__mapDeps([0,1]),import.meta.url);if(e.aborted)return;n.GlobalWorkerOptions.workerSrc=rn;let r=new AbortController,i=()=>r.abort();e.addEventListener(`abort`,i,{once:!0});let a=null,o=0,s=new Promise((e,t)=>{o=window.setTimeout(()=>{r.abort(),a?.destroy(),t(Error(`PDF preview took too long and was stopped.`))},$t)}),c;try{if(c=await Promise.race([ge(r.signal,t),s]),e.aborted)throw new DOMException(`Aborted`,`AbortError`);a=new n.PDFWorker,await Promise.race([a.promise,s])}catch(t){throw clearTimeout(o),e.removeEventListener(`abort`,i),t}if(e.aborted||!a){clearTimeout(o),e.removeEventListener(`abort`,i),a?.destroy();return}let l=a.port,u=e=>{let t=e.data;typeof t==`object`&&t&&`reason`in t&&typeof t.reason==`object`&&t.reason!==null&&`message`in t.reason&&t.reason.message===`Image exceeded maximum allowed size and was removed.`&&(te=!0,j?.(),D(p,`error`),D(m,`PDF page content could not be rendered completely within safety limits.`))};l.addEventListener(`message`,u);let d=null,f=!1;j=()=>{f||(f=!0,l.removeEventListener(`message`,u),d&&d.destroy(),a.destroy(),D(b,null))};let h=n.getDocument({data:c,maxImageSize:Qt,canvasMaxAreaInBytes:Qt*4,stopAtErrors:!0,worker:a});d=h;try{D(b,await Promise.race([h.promise,s]),!0)}finally{clearTimeout(o),e.removeEventListener(`abort`,i)}}else if(_(s)===`spreadsheet`||_(s)===`presentation`){let n=await ge(e,t);if(e.aborted)return;if(_(s)===`spreadsheet`){let t=await Zt(_(s),n,e);if(e.aborted)return;D(I,t,!0)}else{let t=await Zt(_(s),n,e);if(e.aborted)return;D(L,t,!0)}}else{if(D(h,await _e(e,t),!0),e.aborted)return;_(s)===`code`&&D(y,await Yt(_(h),Y(r.upload),e),!0);try{_(s)===`markdown`&&(D(g,W(_(h)),!0),D(v,!0)),_(s)===`html`&&(D(g,fe(_(h)),!0),D(v,!0))}catch(e){if(!(e instanceof se))throw e;D(g,``),D(f,`source`)}}e.aborted||D(p,`ready`)}catch(t){if(e.aborted||t instanceof Error&&t.name===`AbortError`)return;j?.(),j=null,D(p,`error`),D(m,t instanceof Error?t.message:`Could not preview this artifact.`,!0)}}t(()=>{let e=new AbortController;return ve(e.signal),()=>e.abort()}),t(()=>{if(_(s)!==`pdf`||!_(b)||!_(o)||_(p)!==`ready`)return;let e=_(b),t=_(S),n=_(E),r=!1,i=null,a=null,c=null,l=0;return D(O,!0),D(k,``),(async()=>{try{if(l=window.setTimeout(()=>{r||(i?.cancel(),c?.cancel(),j?.(),D(p,`error`),D(m,`PDF page rendering took too long and was stopped.`))},en),a=await e.getPage(t),r||!_(o))return;let s=``,u=0;c=a.streamTextContent().getReader();try{for(;!r;){let{done:e,value:t}=await c.read();if(e)break;for(let e of t.items){if(u+=1,u>oe){await c.cancel(),s=`${s}…`;break}if(!(`str`in e)||!e.str)continue;let t=`${s}${s?` `:``}${e.str}`;if(t.length>V){await c.cancel(),s=`${t.slice(0,V)}…`;break}s=t}if(u>oe||s.endsWith(`…`))break}}finally{c.releaseLock(),c=null}if(r)return;D(k,s||`This page has no extractable text.`,!0);let d=a.getViewport({scale:n}),f=Math.min(window.devicePixelRatio||1,2),h=Math.max(1,Math.floor(d.width*f)),g=Math.max(1,Math.floor(d.height*f));nn(h,g);let v=_(o).getContext(`2d`);if(!v)throw Error(`PDF canvas is unavailable.`);if(_(o).width=h,_(o).height=g,_(o).style.width=`${d.width}px`,_(o).style.height=`${d.height}px`,v.setTransform(f,0,0,f,0,0),i=a.render({canvasContext:v,viewport:d}),await i.promise,te)throw Error(`PDF page content could not be rendered completely within safety limits.`)}catch(e){!r&&!(e instanceof Error&&e.name===`RenderingCancelledException`)&&(j?.(),D(p,`error`),D(m,e instanceof Error?e.message:`Could not render this PDF page.`,!0))}finally{clearTimeout(l),a?.cleanup(),a=null,r||D(O,!1)}})(),()=>{r=!0,clearTimeout(l),i?.cancel(),c?.cancel()}}),ne(()=>j?.());function ye(e){let t=e.match(/^[A-Z]+/i)?.[0]?.toUpperCase()||`A`,n=0;for(let e of t)n=n*26+e.charCodeAt(0)-64;return n}function be(e){return Number(e.match(/\d+$/)?.[0]||1)}function xe(e){let t=``;for(let n=e;n>0;n=Math.floor((n-1)/26))t=String.fromCharCode(65+(n-1)%26)+t;return t}let Se=A(()=>{let e=_(I)?.sheets[_(re)];if(!e)return{columns:[],rows:[],clipped:!1};let t=Math.max(1,...e.cells.map(e=>ye(e.reference))),n=Math.max(1,...e.cells.map(e=>be(e.reference))),r=Math.min(100,t),i=Math.min(1e3,Math.floor(1e4/r),n),a=new Map(e.cells.map(e=>[e.reference.toUpperCase(),e.value])),o=Array.from({length:r},(e,t)=>xe(t+1));return{columns:o,rows:Array.from({length:i},(e,t)=>({number:t+1,values:o.map(e=>a.get(`${e}${t+1}`)||``)})),clipped:t>r||n>i}});var Ce=En(),we=M(Ce),Te=B(we),Ee=B(Te),De=B(Ee,!0);H(Ee);var Oe=C(Ee,2),ke=B(Oe,!0);H(Oe);var Ae=C(Oe,2),je=B(Ae,!0);H(Ae),H(Te);var Me=C(Te,2),G=B(Me),Ne=e=>{var t=an(),r=B(t);let i;var a=C(r,2);let o;H(t),d(()=>{R(t,`aria-label`,`${_(ce)} view`),R(r,`aria-pressed`,_(f)===`preview`),i=w(r,1,``,null,i,{active:_(f)===`preview`}),R(a,`aria-pressed`,_(f)===`source`),o=w(a,1,``,null,o,{active:_(f)===`source`})}),n(`click`,r,()=>D(f,`preview`)),n(`click`,a,()=>D(f,`source`)),u(e,t)};N(G,e=>{_(le)&&e(Ne)});var Pe=C(G,2),Fe=C(Pe,2);H(Me),H(we);var Le=C(we,2);let Re;var ze=B(Le),K=e=>{var t=on(),n=C(B(t),2),r=B(n);H(n),T(2),H(t),d(e=>c(r,`Opening ${e??``}`),[()=>_(ce).toLowerCase()]),u(e,t)},Be=e=>{var t=sn(),n=C(B(t),4),i=B(n,!0);H(n);var a=C(n,2);H(t),d(()=>{c(i,_(m)),R(a,`href`,_(U)),R(a,`download`,r.upload.filename)}),u(e,t)},Ve=e=>{var t=cn(),n=C(B(t),6);H(t),d(()=>{R(n,`href`,_(U)),R(n,`download`,r.upload.filename)}),u(e,t)},He=e=>{var t=ln(),r=M(t),i=B(r),a=C(i,2),s=B(a);H(a);var l=C(a,2),f=C(l,4),p=C(f,2),m=B(p);H(p);var h=C(p,2);H(r);var g=C(r,2);let v;var y=B(g);ae(y,e=>D(o,e),()=>_(o));var x=C(y,2),T=B(x,!0);H(x),H(g),d(e=>{i.disabled=_(S)<=1||_(O),c(s,`Page ${_(S)??``} of ${_(b).numPages??``}`),l.disabled=_(S)>=_(b).numPages||_(O),f.disabled=_(E)<=.6||_(O),c(m,`${e??``}%`),h.disabled=_(E)>=2||_(O),v=w(g,1,`artifact-viewer__pdf-stage`,null,v,{"is-rendering":_(O)}),R(g,`aria-label`,`PDF page ${_(S)} visual preview`),R(x,`aria-label`,`PDF page ${_(S)} text`),c(T,_(k))},[()=>Math.round(_(E)*100)]),n(`click`,i,()=>D(S,_(S)-1)),n(`click`,l,()=>D(S,_(S)+1)),n(`click`,f,()=>D(E,Math.max(.6,_(E)-.2),!0)),n(`click`,h,()=>D(E,Math.min(2,_(E)+.2),!0)),u(e,t)},Ue=e=>{var t=gn(),r=M(t),i=B(r),a=B(i);H(i);var o=C(i,4),s=e=>{var t=un(),n=B(t);H(t),d(()=>c(n,`${_(I).hiddenSheets??``} hidden ${_(I).hiddenSheets===1?`sheet`:`sheets`} omitted`)),u(e,t)};N(o,e=>{_(I).hiddenSheets>0&&e(s)});var f=C(o,2),p=e=>{var t=un(),n=B(t);H(t),d(()=>c(n,`${_(I).unsupportedSheets??``} non-worksheet ${_(I).unsupportedSheets===1?`sheet`:`sheets`} omitted`)),u(e,t)};N(f,e=>{_(I).unsupportedSheets>0&&e(p)}),H(r);var m=C(r,2),h=B(m),g=B(h),v=B(g),y=C(B(v));l(y,17,()=>_(Se).columns,P,(e,t)=>{var n=dn(),r=B(n,!0);H(n),d(()=>c(r,_(t))),u(e,n)}),H(v),H(g);var b=C(g);l(b,21,()=>_(Se).rows,P,(e,t)=>{var n=pn(),r=B(n),i=B(r,!0);H(r);var a=C(r);l(a,17,()=>_(t).values,P,(e,t)=>{var n=fn(),r=B(n,!0);H(n),d(()=>c(r,_(t))),u(e,n)}),H(n),d(()=>c(i,_(t).number)),u(e,n)}),H(b),H(h);var x=C(h,2),S=e=>{var t=mn();u(e,t)};N(x,e=>{(_(Se).clipped||_(I).sheets[_(re)].truncated)&&e(S)}),H(m);var T=C(m,2);l(T,21,()=>_(I).sheets,P,(e,t,r)=>{var i=hn();let a;var o=B(i,!0);H(i),d(()=>{R(i,`aria-selected`,_(re)===r),a=w(i,1,``,null,a,{active:_(re)===r}),c(o,_(t).name)}),n(`click`,i,()=>D(re,r,!0)),u(e,i)}),H(T),d(()=>{c(a,`${_(I).sheets.length??``} ${_(I).sheets.length===1?`sheet`:`sheets`}`),R(m,`aria-label`,`${_(I).sheets[_(re)].name} worksheet`)}),u(e,t)},We=e=>{var t=xn(),r=M(t),i=B(r),o=C(i,2),s=B(o);H(o);var f=C(o,2);H(r);var p=C(r,2),m=B(p);l(m,21,()=>_(L).slides[_(z)].paragraphs,P,(e,t,n)=>{var r=a(),i=M(r),o=e=>{var n=_n(),r=B(n,!0);H(n),d(()=>c(r,_(t))),u(e,n)},s=e=>{var n=vn(),r=B(n,!0);H(n),d(()=>c(r,_(t))),u(e,n)};N(i,e=>{n===0?e(o):e(s,-1)}),u(e,r)}),H(m);var h=C(m,4),g=e=>{var t=yn(),n=B(t);H(t),d(()=>c(n,`${_(L).hiddenSlides??``} hidden ${_(L).hiddenSlides===1?`slide`:`slides`} omitted.`)),u(e,t)};N(h,e=>{_(L).hiddenSlides>0&&e(g)});var v=C(h,2),y=e=>{var t=bn();u(e,t)};N(v,e=>{_(L).truncated&&e(y)}),H(p),d(()=>{i.disabled=_(z)===0,c(s,`Slide ${_(z)+1} of ${_(L).slides.length??``}`),f.disabled=_(z)>=_(L).slides.length-1,R(m,`aria-label`,`Slide ${_(z)+1}: ${_(L).slides[_(z)].title}`)}),n(`click`,i,()=>D(z,_(z)-1)),n(`click`,f,()=>D(z,_(z)+1)),u(e,t)},q=e=>{var t=Sn();i(t,()=>_(g),!0),H(t),u(e,t)},Ke=e=>{var t=Cn();i(t,()=>_(g),!0),H(t),u(e,t)},qe=e=>{var t=wn(),n=B(t);i(n,()=>_(y),!0),H(n),H(t),u(e,t)},Je=e=>{var t=Tn(),n=B(t),r=B(n,!0);H(n),H(t),d(()=>c(r,_(h))),u(e,t)};N(ze,e=>{_(p)===`loading`?e(K):_(p)===`error`?e(Be,1):_(s)===`unsupported`?e(Ve,2):_(s)===`pdf`&&_(b)?e(He,3):_(s)===`spreadsheet`&&_(I)?e(Ue,4):_(s)===`presentation`&&_(L)?e(We,5):_(s)===`html`&&_(f)===`preview`&&_(g)?e(q,6):_(s)===`markdown`&&_(f)===`preview`?e(Ke,7):_(s)===`code`?e(qe,8):e(Je,-1)}),H(Le),d(e=>{c(De,_(ce)),R(Oe,`title`,r.upload.filename),c(ke,r.upload.filename),c(je,e),R(Pe,`href`,_(U)),R(Pe,`download`,r.upload.filename),R(Pe,`aria-label`,`Download ${r.upload.filename}`),Re=w(Le,1,`artifact-viewer__body`,null,Re,{"is-pdf":_(s)===`pdf`,"is-office":_(s)===`spreadsheet`||_(s)===`presentation`})},[()=>Ge(r.upload.byte_size)]),n(`click`,Fe,function(...e){r.onClose?.apply(this,e)}),u(e,Ce),ee()}U([`click`]);var On=o(``),kn=o(``);function An(e,t){x(t,!0);let r=S(t,`deleting`,3,!1),i=S(t,`error`,3,``),a=A(()=>t.message.author?.display_name||`Local User`);function o(){r()||t.onClose()}var s=kn(),l=B(s),f=C(l,2),p=B(f),m=C(B(p),2);H(p);var h=C(p,2),g=C(B(h),2),v=B(g);{let e=A(()=>t.message.author?.id||t.message.author_id),n=A(()=>t.message.author?.avatar_url);qe(v,{class:`avatar`,get id(){return _(e)},get name(){return _(a)},get src(){return _(n)},size:36,loading:`eager`,fetchPriority:`auto`})}var y=C(v,2),b=B(y),w=B(b),T=B(w,!0);H(w);var E=C(w,2),D=B(E,!0);H(E),H(b);var O=C(b,2),k=B(O,!0);H(O),H(y),H(g);var j=C(g,2),M=e=>{var t=On(),n=B(t,!0);H(t),d(()=>c(n,i())),u(e,t)};N(j,e=>{i()&&e(M)});var P=C(j,2),F=B(P),te=C(F,2),ne=B(te,!0);H(te),H(P),H(h),H(f),H(s),d(e=>{l.disabled=r(),m.disabled=r(),c(T,_(a)),R(E,`datetime`,t.message.created_at),c(D,e),c(k,t.message.body),F.disabled=r(),te.disabled=r(),c(ne,r()?`Deleting...`:`Delete`)},[()=>Z(t.message.created_at)]),n(`click`,l,o),n(`click`,m,o),n(`click`,F,o),n(`click`,te,function(...e){t.onConfirm?.apply(this,e)}),u(e,s),ee()}U([`click`]);var jn=6500,Mn=o(`
`);function Nn(e,t){x(t,!0);let n=A(()=>t.entries.filter(e=>e.userID!==t.currentUserID));function r(e,t=`Someone`){return e?.display_name?.trim()||(e?.handle?`@${e.handle}`:t)}let i=A(()=>_(n).length===0?``:_(n).length===1?`${r(_(n)[0].user)} is typing…`:_(n).length===2?`${r(_(n)[0].user)} and ${r(_(n)[1].user)} are typing…`:_(n).length===3?`${r(_(n)[0].user)}, ${r(_(n)[1].user)}, and ${r(_(n)[2].user)} are typing…`:`Several people are typing…`);var a=Mn();let o;var s=C(B(a),2),l=B(s,!0);H(s),H(a),d(()=>{o=w(a,1,`typing-indicator`,null,o,{visible:_(n).length>0}),c(l,_(i))}),u(e,a),ee()}var Pn=45e3,Fn=o(`
`),In=o(`
`),Ln=o(`
`);function Rn(e,t){x(t,!0);function n(e){return e.kind===`tool`&&e.toolName?!e.text||e.text===e.toolName?e.toolName:`${e.toolName}: ${e.text}`:e.text}function r(e){switch(e){case`tool`:return`⚙`;case`thinking`:case`commentary`:return`✦`;case`plan`:return`☰`;case`patch`:return`±`;case`command_output`:return`›`;case`error`:return`✕`;default:return`·`}}var i=a(),o=M(i),s=e=>{var i=Ln();l(i,21,()=>t.turns,e=>e.key,(e,t)=>{var i=In();l(i,21,()=>_(t).lines,e=>e.id,(e,t)=>{var i=Fn();let a;var o=B(i),s=B(o,!0);H(o);var l=C(o,2),f=B(l,!0);H(l),H(i),d((e,n)=>{a=w(i,1,`agent-progress__line svelte-6vwkyv`,null,a,{"agent-progress__line--done":_(t).finalized}),R(i,`data-kind`,_(t).kind),c(s,e),c(f,n)},[()=>r(_(t).kind),()=>n(_(t))]),u(e,i)}),H(i),u(e,i)}),H(i),u(e,i)};N(o,e=>{t.turns.length>0&&e(s)}),u(e,i),ee()}var zn=o(`

`),Bn=o(``);function Vn(e,t){x(t,!0);var r=Bn(),i=B(r),a=C(i,2),o=B(a),s=C(B(o),2);H(o);var l=C(o,2),f=B(l),p=C(B(f),2);k(p),H(f);var m=C(f,2),h=e=>{var n=zn(),r=B(n,!0);H(n),d(()=>c(r,t.status)),u(e,n)};N(m,e=>{t.status&&e(h)});var _=C(m,2),v=B(_);T(2),H(_),H(l),H(a),H(r),d(()=>j(p,t.channelName)),n(`click`,i,function(...e){t.onClose?.apply(this,e)}),n(`click`,s,function(...e){t.onClose?.apply(this,e)}),g(`submit`,l,e=>{e.preventDefault(),t.onCreate()}),n(`input`,p,e=>t.onChannelName(e.currentTarget.value)),n(`click`,v,function(...e){t.onClose?.apply(this,e)}),u(e,r),ee()}U([`click`,`input`]);var Hn=o(``),Un=o(`
No matching people yet
`),Wn=o(``);function Gn(e,t){x(t,!0);let r=A(()=>t.memberID.trim().toLowerCase()),i=A(()=>t.people.filter(e=>e.id!==t.currentUserID).filter(e=>!_(r)||e.display_name.toLowerCase().includes(_(r))||e.handle?.toLowerCase().includes(_(r))||e.id.toLowerCase().includes(_(r))));var a=Wn(),o=B(a),s=C(o,2),f=B(s),p=C(B(f),2);H(f);var m=C(f,2),h=B(m),v=C(B(h),2);k(v),H(h);var y=C(h,2),b=B(y);l(b,17,()=>_(i),e=>e.id,(e,r)=>{var i=Hn(),a=B(i);qe(a,{class:`dm-avatar`,get id(){return _(r).id},get name(){return _(r).display_name},get src(){return _(r).avatar_url},size:32});var o=C(a,2),s=B(o),l=B(s,!0);H(s);var f=C(s,2),p=B(f,!0);H(f),H(o),H(i),d(e=>{c(l,_(r).display_name),c(p,e)},[()=>ze(_(r).handle)||_(r).id]),n(`click`,i,()=>t.onStart(_(r).id)),u(e,i)});var S=C(b,2),w=e=>{var t=Un();u(e,t)};N(S,e=>{_(i).length===0&&e(w)}),H(y);var E=C(y,2),D=B(E);T(2),H(E),H(m),H(s),H(a),d(()=>j(v,t.memberID)),n(`click`,o,function(...e){t.onClose?.apply(this,e)}),n(`click`,p,function(...e){t.onClose?.apply(this,e)}),g(`submit`,m,e=>{e.preventDefault(),t.onStart(t.memberID)}),n(`input`,v,e=>t.onMemberID(e.currentTarget.value)),n(`click`,D,function(...e){t.onClose?.apply(this,e)}),u(e,a),ee()}U([`click`,`input`]);var Kn=o(``),qn=o(` `),Jn=o(`
`),Yn=o(`
`),Xn=o(``);function Zn(e,t){x(t,!0);let r=S(t,`homeHref`,3,`/`);function i(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}var a=Xn(),o=B(a),s=C(o,4),f=B(s);l(f,17,()=>t.workspaces,e=>e.id,(e,r)=>{var a=Jn();let o;var s=B(a),l=B(s),f=e=>{var t=Kn();d(e=>R(t,`src`,e),[()=>fe(_(r).icon_url)]),u(e,t)},p=e=>{var t=qn(),n=B(t,!0);H(t),d(e=>c(n,e),[()=>tt(_(r).name)]),u(e,t)};N(l,e=>{_(r).icon_url?e(f):e(p,-1)}),H(s),H(a),d(e=>{o=w(a,1,`guild-wrap`,null,o,{active:_(r).id===t.selectedWorkspaceID}),R(s,`title`,_(r).name),R(s,`aria-label`,_(r).name),R(s,`href`,e)},[()=>t.hrefForWorkspace(_(r).id)]),n(`click`,s,e=>{i(e)&&(e.preventDefault(),t.onSelectWorkspace(_(r).id))}),u(e,a)});var p=C(f,2);H(s);var m=C(s,2),h=e=>{var r=Yn(),i=B(r);k(i),H(r),d(()=>j(i,t.workspaceName)),g(`submit`,r,e=>{e.preventDefault(),t.onCreateWorkspace()}),n(`input`,i,e=>t.onWorkspaceName(e.currentTarget.value)),u(e,r)};N(m,e=>{t.showWorkspaceCreate&&e(h)}),H(a),d(()=>R(o,`href`,r())),n(`click`,p,function(...e){t.onToggleWorkspaceCreate?.apply(this,e)}),u(e,a),ee()}U([`click`,`input`]);var Qn=o(``),$n=o(` `,1),er=o(``),tr=o(` `),nr=o(`
#
`),rr=o(`
`),ir=o(``),ar=o(`Drag with a pointer, use Arrow Up and Arrow Down while focused, or open the move menu. Moves stay within the current channel section. `,1),or=o(`
`);function sr(e,r){x(r,!0);let i=(e,t=m,i=m,a=m,o=m,s=m)=>{let l=A(()=>t().unread_count||0),f=A(()=>i().findIndex(e=>e.id===t().id));var b=nr();let x;var E=B(b),O=e=>{var r=$n(),o=M(r),s=C(o,2),c=e=>{var r=Qn(),a=B(r),o=C(a,2);H(r),ae(r,e=>D(T,e),()=>_(T)),d(e=>{R(r,`aria-label`,e),a.disabled=_(f)<=0,o.disabled=_(f)<0||_(f)>=i().length-1},[()=>`Move #${rt(t())}`]),n(`keydown`,r,e=>{e.key===`Escape`&&(e.preventDefault(),ge(!0))}),n(`click`,a,()=>_e(t().id,-1,i())),n(`click`,o,()=>_e(t().id,1,i())),u(e,r)};N(s,e=>{_(S)===t().id&&e(c)}),d(e=>{R(o,`aria-label`,e),R(o,`aria-expanded`,_(S)===t().id)},[()=>`Move #${rt(t())}`]),n(`click`,o,e=>void he(t().id,e.currentTarget)),g(`dragstart`,o,e=>fe(e,t().id,a())),g(`dragend`,o,me),n(`keydown`,o,e=>{e.key===`ArrowUp`||e.key===`ArrowDown`?(e.preventDefault(),D(S,``),de(t().id,e.key===`ArrowUp`?-1:1,i())):e.key===`Escape`&&D(S,``)}),u(e,r)};N(E,e=>{s()&&e(O)});var k=C(E,2);let ee;var j=C(B(k),2),P=B(j,!0);H(j);var F=C(j,2),te=e=>{var t=er();u(e,t)};N(F,e=>{t().external_managed&&e(te)});var ne=C(F,2),I=e=>{var t=tr(),n=B(t,!0);H(t),d(()=>{R(t,`aria-label`,`${_(l)} unread`),c(n,_(l)>99?`99+`:_(l))}),u(e,t)};N(ne,e=>{_(l)>0&&!(t().id===r.selectedChannelID&&!r.selectedDirectID)&&e(I)}),H(k),H(b),d((e,n)=>{x=w(b,1,`channel-row`,null,x,{reorderable:s(),subdued:o(),dragging:_(p)===t().id,"drop-before":_(v)===t().id&&_(y),"drop-after":_(v)===t().id&&!_(y)}),R(k,`href`,e),ee=w(k,1,`nav-item channel`,null,ee,{active:t().id===r.selectedChannelID&&!r.selectedDirectID,"has-unread":_(l)>0&&!(t().id===r.selectedChannelID&&!r.selectedDirectID)}),c(P,n)},[()=>r.hrefForChannel(t().id),()=>rt(t())]),g(`dragover`,b,e=>{s()&&W(e,t().id,a())}),g(`drop`,b,e=>{e.preventDefault(),!(!s()||_(h)!==a())&&(ue(_(p),t().id,_(y),i()),me())}),n(`focusout`,b,e=>{e.currentTarget.contains(e.relatedTarget)||D(S,``)}),n(`click`,k,e=>{ve(e)&&(e.preventDefault(),r.onSelectChannel(t().id))}),u(e,b)},o=(e,t=m,r=m,a=m)=>{let o=A(()=>oe(t().key)),s=A(()=>U(t()));var f=rr();let p;var h=B(f),g=C(B(h),2),v=B(g,!0);H(g);var y=C(g,2),b=B(y,!0);H(y),H(h);var x=C(h,2);l(x,21,()=>_(s),e=>e.id,(e,n)=>{i(e,()=>_(n),()=>t().channels,()=>t().key,a,()=>_(o))}),H(x),H(f),d(()=>{p=w(f,1,`channel-subgroup`,null,p,{"archived-channel-group":a()}),R(h,`aria-expanded`,_(o)),R(h,`aria-controls`,r()),c(v,t().label),c(b,t().channels.length),R(x,`id`,r()),R(x,`hidden`,!_(o)&&_(s).length===0)}),n(`click`,h,()=>se(t().key)),u(e,f)},f=`archived`,p=F(``),h=F(``),v=F(``),y=F(!0),b=F(!1),S=F(``),T=F(void 0),E,O=F(``),k=F(L({})),j=A(()=>r.channels.filter(e=>!e.archived_at)),P=A(()=>r.channels.filter(e=>!!e.archived_at)),te=A(()=>_(j).filter(e=>!e.sidebar_section?.trim())),ne=A(()=>{let e=new Map;for(let t of _(j)){let n=t.sidebar_section?.trim();if(!n)continue;let r=e.get(n)??[];r.push(t),e.set(n,r)}return[...e.entries()].map(([e,t])=>({key:`section:${e}`,label:e,channels:t})).sort((e,t)=>e.label.localeCompare(t.label,void 0,{sensitivity:`base`}))}),re=A(()=>r.channels.filter(e=>e.id===r.selectedChannelID&&!r.selectedDirectID||(e.unread_count||0)>0));function z(e){if(!e)return{};try{let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return{};let n=Object.entries(t);return n.length>1e3||n.some(([e,t])=>e.length>256||typeof t!=`boolean`)?{}:Object.fromEntries(n)}catch{return{}}}function ie(e){return`clickclack:sidebar-channel-groups:v1:${e}`}function V(e){if(!e)return{};try{return z(window.localStorage.getItem(ie(e)))}catch{return{}}}function oe(e){let t=_(k)[e];return typeof t==`boolean`?t:e!==f}function se(e){if(D(k,{..._(k),[e]:!oe(e)},!0),r.workspaceID)try{window.localStorage.setItem(ie(r.workspaceID),JSON.stringify(_(k)))}catch{}}function ce(e){e.key===ie(r.workspaceID)&&D(k,z(e.newValue),!0)}function U(e){return oe(e.key)?e.channels:e.channels.filter(e=>e.id===r.selectedChannelID&&!r.selectedDirectID||(e.unread_count||0)>0)}function le(e){D(O,``),queueMicrotask(()=>{D(O,e,!0)})}function ue(e,t,n,i){if(!e||!t||e===t)return;let a=r.channels.map(e=>e.id),o=a.indexOf(e);if(o<0)return;a.splice(o,1);let s=a.indexOf(t);if(s<0)return;a.splice(s+ +!n,0,e),r.onReorder(a);let c=r.channels.find(t=>t.id===e),l=i.map(e=>e.id).filter(t=>t!==e),u=l.indexOf(t);l.splice(u+ +!n,0,e),c&&le(`Moved #${rt(c)} to position ${l.indexOf(e)+1} of ${l.length}`)}function de(e,t,n){let r=n.findIndex(t=>t.id===e),i=r+t;r<0||i<0||i>=n.length||ue(e,n[i].id,t<0,n)}function fe(e,t,n){D(b,!0),D(S,``),D(p,t,!0),D(h,n,!0),e.dataTransfer?.setData(`text/plain`,t),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}function W(e,t,n){if(!_(p)||_(p)===t||_(h)!==n)return;e.preventDefault();let r=e.currentTarget;D(v,t,!0),D(y,e.clientY{D(b,!1)},0)}async function he(e,t){if(!_(b)){if(_(S)===e){D(S,``);return}E=t,D(S,e,!0),await s(),_(T)?.querySelector(`button:not(:disabled)`)?.focus()}}async function ge(e=!1){D(S,``),e&&(await s(),E?.focus())}function _e(e,t,n){de(e,t,n),ge(!0)}function ve(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}t(()=>{D(k,V(r.workspaceID),!0)}),t(()=>{r.expanded||(D(S,``),pe(),D(b,!1))});var ye=or();g(`storage`,I,ce);let be;var xe=B(ye),Se=B(xe),Ce=C(Se,2);H(xe);var we=C(xe,2),Te=B(we),Ee=e=>{var t=ar(),n=C(M(t),2);l(n,17,()=>_(te),e=>e.id,(e,t)=>{i(e,()=>_(t),()=>_(te),()=>`unsectioned`,()=>!1,()=>!0)});var a=C(n,2);l(a,19,()=>_(ne),e=>e.key,(e,t,n)=>{o(e,()=>_(t),()=>`sidebar-channel-section-${_(n)}`,()=>!1)});var s=C(a,2),c=e=>{o(e,()=>({key:f,label:`Archived`,channels:_(P)}),()=>`sidebar-archived-channels`,()=>!0)};N(s,e=>{_(P).length>0&&e(c)});var d=C(s,2),p=e=>{var t=ir();u(e,t)};N(d,e=>{r.channels.length===0&&e(p)}),u(e,t)},De=e=>{var t=a(),n=M(t);l(n,17,()=>_(re),e=>e.id,(e,t)=>{{let n=A(()=>!!_(t).archived_at);i(e,()=>_(t),()=>_(re),()=>`priority`,()=>_(n),()=>!1)}}),u(e,t)};N(Te,e=>{r.expanded?e(Ee):e(De,-1)}),H(we);var Oe=C(we,2),ke=B(Oe,!0);H(Oe),H(ye),d(()=>{be=w(ye,1,`nav-section`,null,be,{collapsed:!r.expanded}),R(Se,`aria-expanded`,r.expanded),R(we,`hidden`,!r.expanded&&_(re).length===0),c(ke,_(O))}),n(`click`,Se,function(...e){r.onToggle?.apply(this,e)}),n(`click`,Ce,function(...e){r.onCreateChannel?.apply(this,e)}),u(e,ye),ee()}U([`focusout`,`click`,`keydown`]);var cr=o(` `),lr=o(``),ur=o(``),dr=o(`
`),fr=o(``),pr=o(`
`),mr=o(`
`);function hr(e,t){x(t,!0);let r=F(``),i=A(()=>t.expanded?t.conversations:t.conversations.filter(e=>e.id===t.selectedDirectID||(e.unread_count||0)>0));function a(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function o(e){D(r,_(r)===e?``:e,!0)}function s(){D(r,``)}var f=mr();let p;var m=B(f),h=B(m),g=C(h,2);H(m);var v=C(m,2),y=B(v);l(y,17,()=>_(i),e=>e.id,(e,i)=>{let l=A(()=>Ue(_(i),t.currentUserID)),f=A(()=>_(i).unread_count||0),p=A(()=>_(i).id===t.selectedDirectID);var m=dr();let h;var g=B(m);let v;var y=B(g);{let e=A(()=>_(l)?.id||_(i).id),t=A(()=>_(l)?.display_name),n=A(()=>K(_(l))?void 0:_(l)?.avatar_url);qe(y,{class:`dm-avatar`,get id(){return _(e)},get name(){return _(t)},get src(){return _(n)},size:22})}var b=C(y,2),x=B(b,!0);H(b);var S=C(b,2),T=e=>{var t=cr(),n=B(t,!0);H(t),d(()=>{R(t,`aria-label`,`${_(f)} unread`),c(n,_(f)>99?`99+`:_(f))}),u(e,t)},E=e=>{var t=lr();u(e,t)};N(S,e=>{_(f)>0&&!_(p)?e(T):e(E,-1)}),H(g);var D=C(g,2),O=C(D,2),k=e=>{var r=ur(),a=B(r);H(r),n(`click`,a,e=>{e.preventDefault(),e.stopPropagation(),s(),t.onHideDirect(_(i).id)}),u(e,r)};N(O,e=>{_(r)===_(i).id&&e(k)}),H(m),d((e,t,n)=>{h=w(m,1,`dm-row`,null,h,{active:_(p)}),R(g,`href`,e),v=w(g,1,`nav-item dm`,null,v,{active:_(p),"has-unread":_(f)>0&&!_(p)}),c(x,t),R(D,`aria-label`,n),R(D,`aria-expanded`,_(r)===_(i).id)},[()=>t.hrefForDirect(_(i).id),()=>Le(_(i),t.currentUserID),()=>`Direct message actions for ${Le(_(i),t.currentUserID)}`]),n(`click`,g,e=>{a(e)&&(e.preventDefault(),t.onSelectDirect(_(i).id))}),n(`click`,D,e=>{e.preventDefault(),e.stopPropagation(),o(_(i).id)}),n(`keydown`,D,e=>{e.key===`Escape`&&s()}),u(e,m)});var b=C(y,2),S=e=>{var t=fr();u(e,t)};N(b,e=>{t.expanded&&t.conversations.length===0&&e(S)});var T=C(b,2),E=e=>{var r=pr(),i=B(r),a=B(i);H(i);var o=C(i,2);H(r),d(()=>c(a,`Closed ${t.hiddenDirectTitle??``}`)),n(`click`,o,function(...e){t.onUndoHideDirect?.apply(this,e)}),u(e,r)};N(T,e=>{t.expanded&&t.hiddenDirectTitle&&e(E)}),H(v),H(f),d(()=>{p=w(f,1,`nav-section`,null,p,{collapsed:!t.expanded}),R(h,`aria-expanded`,t.expanded),R(v,`hidden`,!t.expanded&&_(i).length===0)}),n(`click`,h,function(...e){t.onToggle?.apply(this,e)}),n(`click`,g,function(...e){t.onCreateDirect?.apply(this,e)}),u(e,f),ee()}U([`click`,`keydown`]);var gr=o(``),_r=o(`Connecting…`),vr=o(`
`),yr=o(` `),br=o(``),xr=o(``),Sr=o(``);function Cr(e,r){x(r,!0);let i=S(r,`showHeader`,3,!0),a=`clickclack:sidebar-sections:v1:`,o={channels:!0,directMessages:!0,people:!0},s=F(L({...o}));function f(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.channels==`boolean`&&typeof t.directMessages==`boolean`&&typeof t.people==`boolean`}function p(e){if(!e)return{...o};try{let t=window.localStorage.getItem(`${a}${e}`);if(!t)return{...o};let n=JSON.parse(t);return f(n)?n:{...o}}catch{return{...o}}}function m(e){if(D(s,{..._(s),[e]:!_(s)[e]},!0),r.workspaceID)try{window.localStorage.setItem(`${a}${r.workspaceID}`,JSON.stringify(_(s)))}catch{}}t(()=>{D(s,p(r.workspaceID),!0)});let h=1e6,v=F(L([]));function y(e,t){return`clickclack:sidebar-channel-order:v1:${t}:${e}`}function b(e){if(!e||e.length>h)return[];try{let t=JSON.parse(e);return Array.isArray(t)&&t.length<=1e4&&t.every(e=>typeof e==`string`&&e.length<=128)?[...new Set(t)]:[]}catch{return[]}}function E(e,t){if(!e||!t)return[];try{return b(window.localStorage.getItem(y(e,t)))}catch{return[]}}function O(e){if(D(v,e,!0),!(!r.workspaceID||!r.currentUser?.id))try{let t=y(r.workspaceID,r.currentUser.id),n=JSON.stringify(e);if(n.length>h){window.localStorage.removeItem(t);return}window.localStorage.setItem(t,n)}catch{}}function k(e){!r.workspaceID||!r.currentUser?.id||e.key===y(r.workspaceID,r.currentUser.id)&&D(v,b(e.newValue),!0)}let j=A(()=>{let e=new Map(r.channels.map(e=>[e.id,e]));return[..._(v).flatMap(t=>{let n=e.get(t);return n?(e.delete(t),[n]):[]}),...e.values()]});t(()=>{D(v,E(r.workspaceID,r.currentUser?.id||``),!0)});function M(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}var P=Sr();g(`storage`,I,k);var te=B(P),ne=e=>{var t=vr(),i=B(t),a=B(i),o=e=>{var t=gr();d(e=>R(t,`src`,e),[()=>fe(r.workspaceIconURL)]),u(e,t)};N(a,e=>{r.workspaceIconURL&&e(o)});var s=C(a,2),l=B(s),f=B(l),p=B(f,!0);H(f),T(2),H(l);var m=C(l,2),h=e=>{var t=_r();u(e,t)};N(m,e=>{r.connected||e(h)}),H(s),H(i);var g=C(i,2),_=B(g),v=B(_),y=B(v);H(v),H(_),H(g),H(t),d(()=>{c(p,r.workspaceName||`Pick a workspace`),R(_,`aria-label`,r.sidebarCollapsed?`Expand sidebar`:`Collapse sidebar`),R(_,`title`,r.sidebarCollapsed?`Expand sidebar`:`Collapse sidebar`),R(y,`d`,r.sidebarCollapsed?`m9 6 6 6-6 6`:`m15 6-6 6 6 6`)}),n(`click`,i,function(...e){r.onOpenWorkspaceSettings?.apply(this,e)}),n(`click`,_,function(...e){r.onToggleCollapse?.apply(this,e)}),u(e,t)};N(te,e=>{i()&&e(ne)});var re=C(te,2),z=B(re);sr(z,{get workspaceID(){return r.workspaceID},get expanded(){return _(s).channels},get channels(){return _(j)},get selectedChannelID(){return r.selectedChannelID},get selectedDirectID(){return r.selectedDirectID},get hrefForChannel(){return r.hrefForChannel},get onSelectChannel(){return r.onSelectChannel},get onCreateChannel(){return r.onCreateChannel},onToggle:()=>m(`channels`),onReorder:O});var ie=C(z,2);{let e=A(()=>r.currentUser?.id);hr(ie,{get expanded(){return _(s).directMessages},get conversations(){return r.directConversations},get currentUserID(){return _(e)},get selectedDirectID(){return r.selectedDirectID},get hrefForDirect(){return r.hrefForDirect},get onSelectDirect(){return r.onSelectDirect},get onCreateDirect(){return r.onCreateDirect},get onHideDirect(){return r.onHideDirect},get hiddenDirectTitle(){return r.hiddenDirectTitle},get onUndoHideDirect(){return r.onUndoHideDirect},onToggle:()=>m(`directMessages`)})}var ae=C(ie,2);let V;var oe=B(ae),se=B(oe);H(oe);var ce=C(oe,2),U=B(ce);l(U,17,()=>r.recentPeople,e=>e.id,(e,t)=>{let i=A(()=>Ve(r.directConversations,_(t).id));var a=yr();let o;var s=B(a);qe(s,{class:`dm-avatar`,get id(){return _(t).id},get name(){return _(t).display_name},get src(){return _(t).avatar_url},size:22});var l=C(s,2),f=B(l,!0);H(l),T(2),H(a),d(e=>{R(a,`href`,e),o=w(a,1,`nav-item dm`,null,o,{active:_(i)?.id===r.selectedDirectID||r.selectedProfile?.id===_(t).id}),c(f,_(t).display_name)},[()=>_(i)?r.hrefForDirect(_(i).id):`#`]),n(`click`,a,e=>{if(_(i)){if(!M(e))return;e.preventDefault(),r.onSelectDirect(_(i).id)}else e.preventDefault(),r.onOpenProfile(_(t))}),u(e,a)});var le=C(U,2),ue=e=>{var t=br();u(e,t)};N(le,e=>{r.recentPeople.length===0&&e(ue)}),H(ce),H(ae),H(re);var de=C(re,2),W=e=>{var t=xr(),i=B(t);qe(i,{class:`dm-avatar`,get id(){return r.currentUser.id},get name(){return r.currentUser.display_name},get src(){return r.currentUser.avatar_url},size:28,loading:`eager`,fetchPriority:`auto`});var a=C(i,2),o=B(a),s=B(o,!0);H(o);var l=C(o,2),f=B(l,!0);H(l),H(a),T(2),H(t),d((e,n)=>{R(t,`aria-label`,e),c(s,r.currentUser.display_name),c(f,n)},[()=>`Account settings for ${r.currentUser.display_name} ${ze(r.currentUser.handle)}`,()=>r.currentUser.handle?ze(r.currentUser.handle):r.connected?`Active`:`Reconnecting…`]),n(`click`,t,function(...e){r.onOpenSettings?.apply(this,e)}),n(`contextmenu`,t,e=>{e.preventDefault(),r.onOpenSettings()}),u(e,t)};N(de,e=>{r.currentUser&&e(W)}),H(P),d(()=>{V=w(ae,1,`nav-section`,null,V,{collapsed:!_(s).people}),R(se,`aria-expanded`,_(s).people),R(ce,`hidden`,!_(s).people)}),n(`click`,se,()=>m(`people`)),u(e,P),ee()}U([`click`,`contextmenu`]);var wr=o(` `),Tr=o(` `),Er=o(``),Dr=o(``),Or=o(`
User kind
`),kr=o(`

`),Ar=o(`

Blocked.

`),jr=o(``),Mr=o(``),Nr=o(``),Pr=o(`
Moderation
`),Fr=o(`

Profile

Active
Contact information
Handle
User ID
About

`,1);function Ir(e,t){x(t,!0);let r=A(()=>t.profile.kind===`bot`?t.profile.owner_user_id?`Bot of ${t.profile.owner_user_id}`:`Service bot`:``),i=A(()=>t.moderation?.role||`member`),a=A(()=>!!t.moderation&&_(i)!==`owner`&&(t.currentUserRole===`owner`||t.currentUserRole===`moderator`&&(_(i)===`member`||_(i)===`guest`))),o=A(()=>t.currentUser?.id!==t.profile.id&&_(a)),s=A(()=>!!t.moderation?.blocked_at),l=A(()=>_(i));var f=Fr(),p=M(f),m=B(p),h=C(B(m),2),g=B(h,!0);H(h),H(m);var v=C(m,2);H(p);var y=C(p,2),b=B(y),S=B(b);qe(S,{class:`profile-avatar`,get id(){return t.profile.id},get name(){return t.profile.display_name},get src(){return t.profile.avatar_url},size:240,loading:`eager`,fetchPriority:`auto`}),H(b);var w=C(b,2),T=B(w),E=B(T),D=B(E),O=B(D,!0);H(D);var k=C(D,2),j=e=>{var t=wr(),n=B(t,!0);H(t),d(()=>c(n,_(r))),u(e,t)};N(k,e=>{_(r)&&e(j)});var P=C(k,2),F=e=>{var n=Tr(),r=B(n,!0);H(n),d(e=>c(r,e),[()=>ze(t.profile.handle)]),u(e,n)};N(P,e=>{t.profile.handle&&e(F)}),H(E);var te=C(E,2),ne=e=>{var r=Er();n(`click`,r,function(...e){t.onEdit?.apply(this,e)}),u(e,r)};N(te,e=>{t.currentUser?.id===t.profile.id&&e(ne)}),H(T);var I=C(T,4),re=B(I),L=e=>{var r=Dr();n(`click`,r,()=>t.onMessage(t.profile.id)),u(e,r)};N(re,e=>{t.currentUser?.id!==t.profile.id&&e(L)});var R=C(re,2);H(I);var z=C(I,2),ie=B(z),ae=C(B(ie),2),V=e=>{var r=Er();n(`click`,r,function(...e){t.onEdit?.apply(this,e)}),u(e,r)};N(ae,e=>{t.currentUser?.id===t.profile.id&&e(V)}),H(ie);var oe=C(ie,2),se=C(B(oe),2),U=C(B(se),2),le=B(U,!0);H(U),H(se),H(oe);var ue=C(oe,2),de=C(B(ue),2),fe=C(B(de),2),W=B(fe,!0);H(fe),H(de),H(ue);var pe=C(ue,2),me=e=>{var t=Or(),n=C(B(t),2),i=C(B(n),2),a=B(i,!0);H(i),H(n),H(t),d(()=>c(a,_(r))),u(e,t)};N(pe,e=>{t.profile.kind===`bot`&&e(me)}),H(z);var he=C(z,2),ge=C(B(he),2),_e=B(ge);H(ge),H(he);var ve=C(he,2),ye=e=>{var r=Pr(),i=B(r),a=C(B(i),2),o=B(a,!0);H(a),H(i);var f=C(i,2),p=e=>{var n=kr(),r=B(n);H(n),d(()=>c(r,`${t.moderation.posts_remaining??``} of ${t.moderation.post_limit??``} waiting-room posts left today.`)),u(e,n)};N(f,e=>{t.moderation.role===`guest`&&t.moderation.post_limit>0&&e(p)});var m=C(f,2),h=e=>{var n=kr(),r=B(n);H(n),d(e=>c(r,`Timed out until ${e??``}.`),[()=>new Date(t.moderation.timeout_until).toLocaleString()]),u(e,n)};N(m,e=>{t.moderation.timeout_until&&e(h)});var g=C(m,2),v=e=>{var t=Ar();u(e,t)};N(g,e=>{t.moderation.blocked_at&&e(v)});var y=C(g,2),b=B(y),x=e=>{var r=jr();n(`click`,r,()=>t.onApprove(t.profile.id)),u(e,r)};N(b,e=>{t.moderation.role===`guest`&&e(x)});var S=C(b,2),w=C(S,2),T=e=>{var r=Mr();n(`click`,r,()=>t.onUnblock(t.profile.id)),u(e,r)},E=e=>{var r=Nr();n(`click`,r,()=>t.onBlock(t.profile.id)),u(e,r)};N(w,e=>{_(s)?e(T):e(E,-1)}),H(y),H(r),d(()=>c(o,_(l))),n(`click`,S,()=>t.onTimeout(t.profile.id)),u(e,r)};N(ve,e=>{_(o)&&t.moderation&&e(ye)}),H(w),H(y),d((e,n)=>{c(g,t.profile.display_name),ce(b,`--hue: ${e??``}deg`),c(O,t.profile.display_name),c(le,n),c(W,t.profile.id),c(_e,`Member of ${(t.workspaceName||`this workspace`)??``}.`)},[()=>Ne(t.profile.id),()=>t.profile.handle?ze(t.profile.handle):`No handle set`]),n(`click`,v,function(...e){t.onClose?.apply(this,e)}),n(`click`,R,function(...e){t.onSetStatus?.apply(this,e)}),u(e,f),ee()}U([`click`]);var Lr=o(`
Loading...
`),Rr=o(`
`),zr=o(`
`),Br=o(`

No pinned messages

Pin important messages to keep them easily accessible.

`),Vr=o(`
`),Hr=o(`
`),Ur=o(`
`),Wr=o(` `,1),Gr=o(`

Pinned Messages

`);function Kr(e,t){x(t,!0);let r=S(t,`loading`,3,!1),a=S(t,`error`,3,``),o=S(t,`topics`,19,()=>[]),s=S(t,`mentionPeople`,19,()=>[]),f=S(t,`maxPins`,3,100),m=F(L(new Set)),h=F(``);async function g(e){if(!_(m).has(e.id)){D(m,new Set(_(m)).add(e.id),!0),D(h,``);try{await t.onUnpin(e)}catch(e){D(h,e instanceof Error?e.message:`Could not unpin message`,!0)}finally{let t=new Set(_(m));t.delete(e.id),D(m,t,!0)}}}var v=Gr(),y=B(v),b=B(y),w=B(b),T=C(B(w),2),E=B(T);H(T),H(w);var O=C(w,2),k=B(O);H(O),H(b);var j=C(b,2);H(y);var P=C(y,2),te=B(P),ne=e=>{var t=Lr();u(e,t)},I=e=>{var t=Rr(),n=B(t,!0);H(t),d(()=>c(n,a())),u(e,t)},re=e=>{var r=Wr(),a=M(r),f=e=>{var t=zr(),n=B(t,!0);H(t),d(()=>c(n,_(h))),u(e,t)};N(a,e=>{_(h)&&e(f)});var v=C(a,2),y=e=>{var t=Br();u(e,t)},b=e=>{var r=Ur();l(r,21,()=>t.messages,e=>e.id,(e,r)=>{let a=A(()=>o().find(e=>e.id===_(r).topic_id));var f=Hr(),h=B(f),v=B(h),y=B(v,!0);H(v);var b=C(v,2),x=B(b,!0);H(b),H(h);var S=C(h,2);it(S,{get topic(){return _(a)},get onSelect(){return t.onSelectTopic}});var w=C(S,2);i(w,()=>Q(_(r).body),!0),H(w),p(w,e=>q?.(e)),p(w,(e,t)=>Qe?.(e,t),()=>({people:s(),attentionUserID:t.mentionAttentionUserID}));var T=C(w,2),E=e=>{var n=Vr();l(n,21,()=>_(r).attachments,e=>e.id,(e,n)=>{{let r=A(()=>Ie(_(n)));Ze(e,{get upload(){return _(n)},get url(){return _(r)},get onOpenImage(){return t.onOpenImage},get onOpenArtifact(){return t.onOpenArtifact}})}}),H(n),u(e,n)};N(T,e=>{_(r).attachments?.length&&e(E)});var D=C(T,2),O=B(D),k=C(O,2);H(D),H(f),d((e,t)=>{R(f,`data-message-id`,_(r).id),c(y,_(r).author?.display_name||`Unknown`),c(x,e),k.disabled=t},[()=>Z(_(r).created_at),()=>_(m).has(_(r).id)]),n(`click`,O,()=>t.onOpenThread(_(r))),n(`click`,k,()=>g(_(r))),u(e,f)}),H(r),u(e,r)};N(v,e=>{t.messages.length===0?e(y):e(b,-1)}),u(e,r)};N(te,e=>{r()?e(ne):a()?e(I,1):e(re,-1)}),H(P),H(v),d(()=>{c(E,`${t.messages.length??``} / ${f()??``} pinned`),c(k,`Shared across this channel, with a maximum of ${f()??``} messages.`)}),n(`click`,j,function(...e){t.onClose?.apply(this,e)}),u(e,v),ee()}U([`click`]);var qr=o(` `,1),Jr=o(`
`),Yr=o(`
We couldn’t search messages

`),Xr=o(`
No messages found

Try another word or phrase.

`),Zr=o(`deleted bot`),Qr=o(` `),$r=o(` `),ei=o(` `),ti=o(` Reply in thread`),ni=o(` `),ri=o(`
  • `),ii=o(``),ai=o(``),oi=o(``),si=o(`
      `,1),ci=o(``);function li(e,t){x(t,!0);let r=S(t,`covered`,3,!1),i=S(t,`inert`,3,!1),o=new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`}),s=new Intl.DateTimeFormat(void 0,{month:`short`,day:`numeric`}),p=new Intl.DateTimeFormat(void 0,{month:`short`,day:`numeric`,year:`numeric`});function m(e,t){let n=Array.from(e),r=[],i=0;for(let e of t){let t=Math.max(i,Math.min(n.length,e.start)),a=Math.max(t,Math.min(n.length,e.end));t>i&&r.push({text:n.slice(i,t).join(``),highlighted:!1}),a>t&&r.push({text:n.slice(t,a).join(``),highlighted:!0}),i=a}return i{var t=f(`Searching messages…`);u(e,t)},ne=e=>{var n=qr(),r=M(n),i=C(r),a=e=>{var n=f();d(()=>c(n,`in ${t.session.scope.label??``}`)),u(e,n)};N(i,e=>{t.session.scope.label&&e(a)}),d(()=>c(r,`${t.session.results.length??``}${t.session.nextCursor?`+`:``} ${t.session.results.length===1&&!t.session.nextCursor?`result`:`results`}`)),u(e,n)},I=e=>{var t=f(`Search unavailable`);u(e,t)};N(F,e=>{t.session.state===`loading`?e(te):t.session.state===`ready`?e(ne,1):t.session.state===`error`&&e(I,2)}),H(j);var re=C(j,2),L=B(re),z=e=>{var t=Jr();u(e,t)},ie=e=>{var n=Yr(),r=C(B(n),4),i=B(r,!0);H(r),H(n),d(()=>c(i,t.session.error)),u(e,n)},ae=e=>{var t=Xr();u(e,t)},V=e=>{var r=si(),i=M(r);l(i,21,()=>t.session.results,e=>e.id,(e,r)=>{let i=A(()=>t.contextFor(_(r)));var o=ri(),s=B(o);let p;var g=B(s);{let e=A(()=>K(_(r).author)?void 0:_(r).author.avatar_url);qe(g,{class:`dm-avatar`,get id(){return _(r).author.id},get name(){return _(r).author.display_name},get src(){return _(e)},size:30})}var v=C(g,2),y=B(v),b=B(y),x=B(b,!0);H(b);var S=C(b,2),T=e=>{var t=Zr();u(e,t)},E=A(()=>K(_(r).author)),D=e=>{var t=Qr(),n=B(t,!0);H(t),d(e=>c(n,e),[()=>ze(We(_(r).author))]),u(e,t)},O=A(()=>We(_(r).author));N(S,e=>{_(E)?e(T):_(O)&&e(D,1)});var k=C(S,2),ee=B(k,!0);H(k),H(y);var j=C(y,2);l(j,21,()=>m(_(r).snippet,_(r).highlights),P,(e,t)=>{var n=a(),r=M(n),i=e=>{var n=$r(),r=B(n,!0);H(n),d(()=>c(r,_(t).text)),u(e,n)},o=e=>{var n=f();d(()=>c(n,_(t).text)),u(e,n)};N(r,e=>{_(t).highlighted?e(i):e(o,-1)}),u(e,n)}),H(j);var F=C(j,2),te=B(F),ne=e=>{var t=ei(),n=B(t,!0);H(t),d(()=>c(n,_(i))),u(e,t)};N(te,e=>{_(i)&&e(ne)});var I=C(te,2),re=e=>{var t=ti();u(e,t)},L=e=>{var t=ni(),n=C(B(t));H(t),d(()=>c(n,` ${_(r).reply_count??``} ${_(r).reply_count===1?`reply`:`replies`}`)),u(e,t)};N(I,e=>{_(r).parent_message_id?e(re):_(r).reply_count>0&&e(L,1)}),H(F),H(v),H(s),H(o),d(e=>{p=w(s,1,`search-result`,null,p,{"is-active":t.session.activeResultID===_(r).id}),R(s,`data-result-id`,_(r).id),c(x,_(r).author.display_name||`Local User`),R(k,`datetime`,_(r).created_at),c(ee,e)},[()=>h(_(r).created_at)]),n(`click`,s,()=>t.onOpenResult(_(r))),u(e,o)}),H(i);var o=C(i,2),s=e=>{var r=ii(),i=B(r),a=B(i,!0);H(i);var o=C(i,2);H(r),d(()=>c(a,t.session.moreError)),n(`click`,o,function(...e){t.onLoadMore?.apply(this,e)}),u(e,r)},p=e=>{var r=ai(),i=B(r,!0);H(r),d(()=>{r.disabled=t.session.loadingMore,c(i,t.session.loadingMore?`Loading more…`:`Load more results`)}),n(`click`,r,function(...e){t.onLoadMore?.apply(this,e)}),u(e,r)},g=e=>{var t=oi();u(e,t)};N(o,e=>{t.session.moreError?e(s):t.session.nextCursor?e(p,1):e(g,-1)}),u(e,r)};N(L,e=>{t.session.state===`loading`?e(z):t.session.state===`error`?e(ie,1):t.session.results.length===0?e(ae,2):e(V,-1)}),H(re),H(g),d(()=>{v=w(g,1,`search-results`,null,v,{covered:r()}),g.inert=i(),R(g,`aria-hidden`,r()?`true`:void 0),c(E,`Search${t.session.scope.label?` in ${t.session.scope.label}`:``}`),c(O,`Results for “${t.session.query??``}”`)}),n(`click`,k,function(...e){t.onClose?.apply(this,e)}),u(e,g),ee()}U([`click`]);var ui=o(``),di=o(`
      `),fi=o(`

      `,1),pi=o(`
      `),mi=o(``);function hi(e,t){x(t,!0);let r=S(t,`saving`,3,!1),i=S(t,`error`,3,``),a=F(!1),o=A(()=>!!t.channel.archived_at),s=A(()=>`#${rt(t.channel)}`);function l(){r()||t.onClose()}var f=mi(),p=B(f),m=C(p,2),h=B(m),g=C(B(h),2);H(h);var v=C(h,2),y=B(v),b=B(y),w=B(b,!0);H(b),T(2),H(y);var E=C(y,2),O=e=>{var t=ui(),n=B(t,!0);H(t),d(()=>c(n,i())),u(e,t)};N(E,e=>{i()&&e(O)});var k=C(E,2),j=e=>{var i=di(),a=B(i),o=C(a,2),s=B(o,!0);H(o),H(i),d(()=>{a.disabled=r(),o.disabled=r(),c(s,r()?`Restoring...`:`Restore channel`)}),n(`click`,a,l),n(`click`,o,()=>t.onArchivedChange(!1)),u(e,i)},P=e=>{var i=fi(),o=M(i),l=B(o);H(o);var f=C(o,2),p=B(f),m=C(p,2),h=B(m,!0);H(m),H(f),d(()=>{c(l,`Archive ${_(s)??``}? The channel will remain available to workspace members under Archived.`),p.disabled=r(),m.disabled=r(),c(h,r()?`Archiving...`:`Archive channel`)}),n(`click`,p,()=>D(a,!1)),n(`click`,m,()=>t.onArchivedChange(!0)),u(e,i)},te=e=>{var t=pi(),i=B(t),o=C(i,2);H(t),d(()=>{i.disabled=r(),o.disabled=r()}),n(`click`,i,l),n(`click`,o,()=>D(a,!0)),u(e,t)};N(k,e=>{_(o)?e(j):_(a)?e(P,1):e(te,-1)}),H(v),H(m),H(f),d(()=>{p.disabled=r(),g.disabled=r(),c(w,_(s))}),n(`click`,p,l),n(`click`,g,l),u(e,f),ee()}U([`click`]);var gi=`clickclack:browser-notifications-enabled:v1:`;function _i(e){return`${gi}${e}`}function vi(e){if(!e)return!1;try{return window.localStorage.getItem(_i(e))===`enabled`}catch{return!1}}function yi(e,t){if(!e)return!1;try{return t?window.localStorage.setItem(_i(e),`enabled`):window.localStorage.removeItem(_i(e)),!0}catch{return!1}}var bi=o(`

      Browser notifications are not supported on this device.

      `),xi=o(`

      Browser notifications are blocked by this browser.

      `),Si=o(`

      `),Ci=o(`

      Show alerts when ClickClack is in the background.

      `);function wi(e,r){x(r,!0);let i=S(r,`isDesktop`,3,!1),a=F(!1),o=F(!1),s=F(`default`),l=F(``),f=F(!1);t(()=>{p(r.user.id,i())});function p(e,t){if(t){D(a,!0),D(s,`granted`),D(o,vi(e),!0),r.onChanged?.(_(o));return}D(a,typeof Notification<`u`),D(s,_(a)?Notification.permission:`unsupported`,!0);let n=vi(e);D(o,_(s)===`granted`&&n,!0),n&&_(s)!==`granted`&&yi(e,!1),r.onChanged?.(_(o))}async function m(e){if(D(l,``),D(f,!1),!e){yi(r.user.id,!1),D(o,!1),r.onChanged?.(!1),D(l,i()?`Desktop notifications disabled`:`Browser notifications disabled`,!0);return}if(i()){D(o,yi(r.user.id,!0),!0),r.onChanged?.(_(o)),D(l,_(o)?`Desktop notifications enabled`:`Desktop notification preference could not be saved`,!0),D(f,!_(o));return}if(typeof Notification>`u`){D(a,!1),D(s,`unsupported`),D(o,!1),r.onChanged?.(!1),D(l,`Browser notifications are not supported`),D(f,!0);return}if(D(s,Notification.permission==="default"?await Notification.requestPermission():Notification.permission,!0),D(a,!0),_(s)===`granted`){D(o,yi(r.user.id,!0),!0),r.onChanged?.(_(o)),D(l,_(o)?`Browser notifications enabled`:`Browser notification preference could not be saved`,!0),D(f,!_(o));return}yi(r.user.id,!1),D(o,!1),r.onChanged?.(!1),D(l,_(s)===`denied`?`Browser notifications are blocked by this browser`:`Browser notifications were not enabled`,!0),D(f,!0)}var h=Ci(),g=B(h),v=B(g),y=B(v,!0);H(v);var b=C(v,4),T=e=>{var t=bi();u(e,t)},E=e=>{var t=xi();u(e,t)};N(b,e=>{!i()&&!_(a)?e(T):!i()&&_(s)===`denied`&&e(E,1)});var O=C(b,2),A=e=>{var t=Si();let n;var r=B(t,!0);H(t),d(()=>{n=w(t,1,`settings-row2__hint`,null,n,{"is-error":_(f)}),c(r,_(l))}),u(e,t)};N(O,e=>{_(l)&&e(A)}),H(g);var j=C(g,2),M=B(j);k(M),H(j),H(h),d(()=>{c(y,i()?`Desktop notifications`:`Browser notifications`),R(M,`aria-label`,i()?`Desktop notifications`:`Browser notifications`),M.disabled=!_(a)||_(s)===`denied`,te(M,_(o))}),n(`change`,M,e=>void m(e.currentTarget.checked)),u(e,h),ee()}U([`change`]);var Ti=o(``),Ei=o(`

      `),Di=o(``),Oi=o(`
      Preview

      Shown in messages, mentions, and your profile card.

      Used in mentions and the quick switcher. Must be unique.

      Paste a public image URL. Your initials show when empty.

      Conversation display

      Keep agent reasoning summaries out of the message timeline.

      Hide tool execution details while keeping ordinary messages visible.

      Choose which side of the timeline shows your messages.

      Choose which side of the timeline shows messages from other people and agents.

      Notifications

      `);function ki(e,r){x(r,!0);let i=S(r,`isDesktop`,3,!1),a=F(null),o=A(()=>_(a)??r.user),s=F(``),l=F(``),f=F(``),p=F(``),m=F(!1),h=F(!1),v=A(()=>_(s).trim()||_(o).display_name||`Your name`),y=A(()=>_(l).trim().replace(/^@+/,``)||_(o).handle||``);t(()=>{D(s,_(o).display_name,!0),D(l,_(o).handle??``,!0),D(f,_(o).avatar_url,!0)});function E(){let e=_(l).trim().replace(/^@+/,``);return e?`@${e}`:``}async function O(){if(!_(h)){D(h,!0),D(p,``),D(m,!1);try{let e=await _e({method:`PATCH`,body:JSON.stringify({display_name:_(s),handle:E(),avatar_url:_(f),notification_settings:_(o).notification_settings})});D(a,e.user,!0),r.onUserUpdated?.(e.user),D(p,`Saved`),r.onSaved?.()}catch(e){D(p,e instanceof Error?e.message:`Could not save profile`,!0),D(m,!0)}finally{D(h,!1)}}}function j(){D(f,``)}var M=Oi(),P=B(M),ne=B(P);qe(ne,{get id(){return _(o).id},get name(){return _(v)},get src(){return _(f)},size:52,loading:`eager`,fetchPriority:`auto`});var I=C(ne,2),re=B(I),L=B(re,!0);H(re);var R=C(re,2),z=B(R,!0);H(R),H(I),T(2),H(P);var ie=C(P,2),ae=B(ie),V=C(B(ae),2),ce=B(V);k(ce),H(V),H(ae);var U=C(ae,2),le=C(B(U),2),ue=B(le),de=C(B(ue),2);k(de),H(ue),H(le),H(U);var fe=C(U,2),W=C(B(fe),2),pe=B(W);k(pe);var me=C(pe,2),he=e=>{var t=Ti();n(`click`,t,j),u(e,t)};N(me,e=>{_(f)&&e(he)}),H(W),H(fe);var ge=C(fe,4),ve=C(B(ge),2),ye=B(ve);k(ye),H(ve),H(ge);var be=C(ge,2),xe=C(B(be),2),Se=B(xe);k(Se),H(xe),H(be);var Ce=C(be,2),we=C(B(Ce),2),Te=B(we),Ee=B(Te);Ee.value=Ee.__value=`left`;var De=C(Ee);De.value=De.__value=`right`,H(Te);var Oe;b(Te),H(we),H(Ce);var ke=C(Ce,2),Ae=C(B(ke),2),je=B(Ae),Me=B(je);Me.value=Me.__value=`left`;var G=C(Me);G.value=G.__value=`right`,H(je);var Ne;b(je),H(Ae),H(ke),wi(C(ke,4),{get user(){return _(o)},get isDesktop(){return i()},get onChanged(){return r.onBrowserNotificationsChanged}}),H(ie);var Pe=C(ie,2),Fe=B(Pe),Ie=e=>{var t=Ei();let n;var r=B(t,!0);H(t),d(()=>{n=w(t,1,`settings-status`,null,n,{"is-error":_(m)}),c(r,_(p))}),u(e,t)},Le=e=>{var t=Di();u(e,t)};N(Fe,e=>{_(p)?e(Ie):e(Le,-1)});var Re=C(Fe,2),ze=B(Re,!0);H(Re),H(Pe),H(M),d(()=>{c(L,_(v)),c(z,_(y)?`@${_(y)}`:`No handle set`),te(ye,r.hideCommentary),te(Se,r.hideToolCalls),Oe!==(Oe=r.userAlign)&&(Te.value=(Te.__value=r.userAlign)??``,se(Te,r.userAlign)),Ne!==(Ne=r.otherAlign)&&(je.value=(je.__value=r.otherAlign)??``,se(je,r.otherAlign)),Re.disabled=_(h),c(ze,_(h)?`Saving...`:`Save profile`)}),g(`submit`,M,e=>{e.preventDefault(),O()}),oe(ce,()=>_(s),e=>D(s,e)),oe(de,()=>_(l),e=>D(l,e)),oe(pe,()=>_(f),e=>D(f,e)),n(`change`,ye,e=>r.onHideCommentary(e.currentTarget.checked)),n(`change`,Se,e=>r.onHideToolCalls(e.currentTarget.checked)),n(`change`,Te,e=>r.onUserAlign(e.currentTarget.value===`right`?`right`:`left`)),n(`change`,je,e=>r.onOtherAlign(e.currentTarget.value===`right`?`right`:`left`)),u(e,M),ee()}U([`click`,`change`]);var Ai=o(`

      `),ji=o(``),Mi=o(`

      Desktop

      Mobile push

      Send push notifications to your phone via Pushover.

      Find this in your Pushover dashboard under "Your User Key".

      `);function Ni(e,n){x(n,!0);let r=S(n,`isDesktop`,3,!1),i=F(null),a=A(()=>_(i)??n.user),o=F(!1),s=F(``),l=F(``),f=F(!1),p=F(!1);t(()=>{D(o,_(a).notification_settings?.pushover_enabled??!1,!0),D(s,_(a).notification_settings?.pushover_user_key??``,!0)});async function m(){if(!_(p)){D(p,!0),D(l,``),D(f,!1);try{let e=await _e({method:`PATCH`,body:JSON.stringify({display_name:_(a).display_name,handle:_(a).handle?`@${_(a).handle}`:``,avatar_url:_(a).avatar_url,notification_settings:{pushover_enabled:_(o),pushover_user_key:_(s)}})});D(i,e.user,!0),n.onUserUpdated?.(e.user),D(l,`Saved`)}catch(e){D(l,e instanceof Error?e.message:`Could not save notifications`,!0),D(f,!0)}finally{D(p,!1)}}}var h=Mi(),v=B(h),y=C(B(v),2);wi(y,{get user(){return _(a)},get isDesktop(){return r()},get onChanged(){return n.onBrowserNotificationsChanged}});var b=C(y,4),T=C(B(b),2),O=B(T);k(O),H(T),H(b);var j=C(b,2),M=C(B(j),2),P=B(M);k(P),H(M),H(j),H(v);var te=C(v,2),ne=B(te),I=e=>{var t=Ai();let n;var r=B(t,!0);H(t),d(()=>{n=w(t,1,`settings-status`,null,n,{"is-error":_(f)}),c(r,_(l))}),u(e,t)},re=e=>{var t=ji();u(e,t)};N(ne,e=>{_(l)?e(I):e(re,-1)});var L=C(ne,2),R=B(L,!0);H(L),H(te),H(h),d(()=>{L.disabled=_(p),c(R,_(p)?`Saving...`:`Save notifications`)}),g(`submit`,h,e=>{e.preventDefault(),m()}),E(O,()=>_(o),e=>D(o,e)),oe(P,()=>_(s),e=>D(s,e)),u(e,h),ee()}var Pi=o(`

      Loading…

      `),Fi=o(`

      `),Ii=o(`
      You don't own any bots yet. Open a workspace's Bots & agents page to mint one.
      `),Li=o(``),Ri=o(`
    • `),zi=o(`

        `),Bi=o(`
        `),Vi=o(`

        Account

        My bots

        Bots you own across your workspaces. Tokens live with the workspace where the bot was created.

        `,1);function Hi(e,t){x(t,!0);let r=F(L([])),i=F(`loading`),a=F(``);ie(()=>{o()});async function o(){D(i,`loading`);try{D(r,await ct(),!0),D(i,`ready`)}catch(e){D(i,`error`),D(a,lt(e),!0)}}function s(e){t.onClose(),le(ke(e.workspace.route_id||e.workspace.id,`bots`))}function p(e){return e.startsWith(`@`)?e:`@${e}`}function m(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.slice(0,2).toUpperCase()}let h=A(()=>{let e=new Map;for(let t of _(r)){let n=t.workspace.id,r=e.get(n);r?r.entries.push(t):e.set(n,{workspace:t.workspace,entries:[t]})}return[...e.values()].sort((e,t)=>e.workspace.name.localeCompare(t.workspace.name))});var g=Vi(),v=C(M(g),2),y=e=>{var t=Pi();u(e,t)},b=e=>{var t=Fi(),n=B(t,!0);H(t),d(()=>c(n,_(a))),u(e,t)},S=e=>{var t=Ii();u(e,t)},w=e=>{var t=Bi();l(t,21,()=>_(h),e=>e.workspace.id,(e,t)=>{var r=zi(),i=B(r),a=B(i),o=B(a,!0);H(a);var h=C(a,2);H(i);var g=C(i,2);l(g,21,()=>_(t).entries,e=>e.bot.id,(e,t)=>{var r=Ri(),i=B(r),a=B(i),o=e=>{var n=Li();d(()=>R(n,`src`,_(t).bot.avatar_url)),u(e,n)},l=e=>{var n=f();d(e=>c(n,e),[()=>m(_(t).bot.display_name||_(t).bot.handle||`?`)]),u(e,n)};N(a,e=>{_(t).bot.avatar_url?e(o):e(l,-1)}),H(i);var h=C(i,2),g=B(h),v=B(g,!0);H(g);var y=C(g,2),b=B(y),x=B(b,!0);H(b);var S=C(b,4),w=B(S);H(S),H(y),H(h);var T=C(h,2);H(r),d(e=>{c(v,_(t).bot.display_name||_(t).bot.handle),c(x,e),c(w,`${_(t).active_token_count??``} - active ${_(t).active_token_count===1?`token`:`tokens`}`)},[()=>p(_(t).bot.handle)]),n(`click`,T,()=>s(_(t))),u(e,r)}),H(g),H(r),d(()=>c(o,_(t).workspace.name)),n(`click`,h,()=>s(_(t).entries[0])),u(e,r)}),H(t),u(e,t)};N(v,e=>{_(i)===`loading`?e(y):_(i)===`error`?e(b,1):_(r).length===0?e(S,2):e(w,-1)}),u(e,g),ee()}U([`click`]);var Ui=o(``),Wi=o(``),Gi=o(`

        Account

        Appearance

        Changes apply instantly and follow your account on every device.

        Live preview — updates as you pick

        Color mode System follows your OS setting
        Board theme Palette for boards, accents, and highlights
        Message layout How agent activity attaches to replies
        Density Compact fits more messages on screen
        `,1);function Ki(e,r){x(r,!0);let i=A(()=>r.user.display_name||r.user.handle||`You`),a=A(()=>(_(i)[0]??`Y`).toUpperCase()),o=F(L(ge())),s=F(L(Ee())),f=F(L(Oe())),p=F(L(xe()));t(()=>{r.user.appearance_preferences,D(o,ge(),!0),D(s,Ee(),!0),D(f,Oe(),!0),D(p,xe(),!0)});function m(e){D(o,e,!0),we(e)}function h(e){D(s,e,!0),ve(e)}function g(e){D(f,e,!0),ye(e)}function v(e){D(p,e,!0),Se(e)}function y(e,t,n,r){let i;switch(e.key){case`ArrowRight`:case`ArrowDown`:i=(n+1)%t;break;case`ArrowLeft`:case`ArrowUp`:i=(n-1+t)%t;break;case`Home`:i=0;break;case`End`:i=t-1;break;default:return}e.preventDefault(),r(i),(e.currentTarget.parentElement?.querySelectorAll(`[role="radio"]`))?.item(i).focus()}var b=Gi(),S=C(M(b),2),E=B(S),O=C(B(E),2),k=B(O),j=B(k),N=B(j,!0);H(j);var P=C(j,2),te=B(P),ne=B(te),I=B(ne,!0);H(ne),T(2),H(te),T(2),H(P),H(k);var re=C(k,4),z=B(re),ie=B(z,!0);H(z);var ae=C(z,2),V=B(ae),oe=B(V),se=B(oe,!0);H(oe),T(2),H(V),T(2),H(ae),H(re),H(O),H(E);var ce=C(E,4),U=B(ce),le=C(B(U),2);l(le,23,()=>Ce,e=>e.id,(e,t,r)=>{var i=Ui();let a;var s=B(i,!0);H(i),d(()=>{a=w(i,1,`appearance-seg__btn`,null,a,{"is-active":_(o)===_(t).id}),R(i,`aria-checked`,_(o)===_(t).id),R(i,`tabindex`,_(o)===_(t).id?0:-1),c(s,_(t).label)}),n(`click`,i,()=>m(_(t).id)),n(`keydown`,i,e=>y(e,Ce.length,_(r),e=>m(Ce[e].id))),u(e,i)}),H(le),H(U);var ue=C(U,2),de=C(B(ue),2),fe=B(de),W=B(fe,!0);H(fe);var pe=C(fe,2);l(pe,23,()=>De,e=>e.id,(e,t,r)=>{var i=Wi();let a;d(()=>{a=w(i,1,`board-chip`,null,a,{"is-active":_(s)===_(t).id}),R(i,`aria-checked`,_(s)===_(t).id),R(i,`tabindex`,_(s)===_(t).id?0:-1),R(i,`data-board`,_(t).id),R(i,`aria-label`,`${_(t).label} — ${_(t).blurb}`),R(i,`title`,`${_(t).label} — ${_(t).blurb}`)}),n(`click`,i,()=>h(_(t).id)),n(`keydown`,i,e=>y(e,De.length,_(r),e=>h(De[e].id))),u(e,i)}),H(pe),H(de),H(ue);var me=C(ue,2),he=C(B(me),2);l(he,23,()=>be,e=>e.id,(e,t,r)=>{var i=Ui();let a;var o=B(i,!0);H(i),d(()=>{a=w(i,1,`appearance-seg__btn`,null,a,{"is-active":_(f)===_(t).id}),R(i,`aria-checked`,_(f)===_(t).id),R(i,`tabindex`,_(f)===_(t).id?0:-1),R(i,`title`,_(t).blurb),c(o,_(t).label)}),n(`click`,i,()=>g(_(t).id)),n(`keydown`,i,e=>y(e,be.length,_(r),e=>g(be[e].id))),u(e,i)}),H(he),H(me);var _e=C(me,2),ke=C(B(_e),2);l(ke,23,()=>Te,e=>e.id,(e,t,r)=>{var i=Ui();let a;var o=B(i,!0);H(i),d(()=>{a=w(i,1,`appearance-seg__btn`,null,a,{"is-active":_(p)===_(t).id}),R(i,`aria-checked`,_(p)===_(t).id),R(i,`tabindex`,_(p)===_(t).id?0:-1),R(i,`title`,_(t).blurb),c(o,_(t).label)}),n(`click`,i,()=>v(_(t).id)),n(`keydown`,i,e=>y(e,Te.length,_(r),e=>v(Te[e].id))),u(e,i)}),H(ke),H(_e),H(ce),H(S),d(e=>{R(E,`data-layout`,_(f)),R(E,`data-density`,_(p)),c(N,_(a)),c(I,_(i)),c(ie,_(a)),c(se,_(i)),c(W,e)},[()=>De.find(e=>e.id===_(s))?.label]),u(e,b),ee()}U([`click`,`keydown`]);var qi=o(` `,1),Ji=o(` `,1),Yi=o(` `,1),Xi=o(` `,1),Zi=o(`
      • `),Qi=o(`
      • `),$i=o(`

          `),ea=o(`

          Loading...

          `),ta=o(`

          `),na=o(`

          Account

          Profile settings

          How you appear across ClickClack.

          `,1),ra=o(`

          Account

          Notifications

          Decide when and how ClickClack should reach you.

          `,1),ia=o(``);function aa(e,r){x(r,!0);let i=S(r,`workspaces`,19,()=>[]),o=S(r,`initialSection`,3,je),s=S(r,`isDesktop`,3,!1),f=F(L(je)),p=F(null),m=A(()=>_(p)?.id===r.user.id?_(p):r.user),h=F(`ready`),v=F(``);t(()=>{D(f,o(),!0)}),ie(()=>{y()});async function y(){D(h,`loading`);try{let e=await _e();D(p,e.user,!0),r.onUserUpdated?.(e.user),D(h,`ready`)}catch(e){if(e instanceof he&&(e.status===401||e.status===403)){D(h,`error`),D(v,`Sign in to manage your account`);return}D(h,`error`),D(v,e instanceof Error?e.message:`Could not load your account`,!0)}}function b(e){D(p,e,!0),r.onUserUpdated?.(e)}function T(e){e.target===e.currentTarget&&r.onClose()}function E(e){if(e.key!==`Escape`)return;let t=e.target;t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable)||(e.preventDefault(),r.onClose())}function O(e,t){r.onClose(),le(ke(e.route_id||e.id,t))}var k=ia();g(`keydown`,I,E);var j=B(k),P=B(j),te=C(P,2),ne=B(te),re=C(B(ne),2);l(re,21,()=>Me,e=>e.id,(e,t)=>{var r=Zi(),i=B(r);let a;var o=B(i),s=e=>{var n=qi(),r=M(n);qe(r,{class:`settings-modal__rail-avatar`,get id(){return _(m).id},get name(){return _(m).display_name},get src(){return _(m).avatar_url},size:18});var i=C(r,2),a=B(i,!0);H(i),d(()=>c(a,_(m).display_name||_(t).label)),u(e,n)},l=e=>{var n=Ji(),r=C(M(n),2),i=B(r,!0);H(r),d(()=>c(i,_(t).label)),u(e,n)},p=e=>{var n=Yi(),r=C(M(n),2),i=B(r,!0);H(r),d(()=>c(i,_(t).label)),u(e,n)},h=e=>{var n=Xi(),r=C(M(n),2),i=B(r,!0);H(r),d(()=>c(i,_(t).label)),u(e,n)};N(o,e=>{_(t).id===`profile`?e(s):_(t).id===`appearance`?e(l,1):_(t).id===`notifications`?e(p,2):_(t).id===`bots`&&e(h,3)}),H(i),H(r),d(()=>{a=w(i,1,`settings-modal__rail-item`,null,a,{"is-active":_(f)===_(t).id}),R(i,`aria-current`,_(f)===_(t).id?`page`:void 0)}),n(`click`,i,()=>D(f,_(t).id,!0)),u(e,r)}),H(re),H(ne);var z=C(ne,2);l(z,17,i,e=>e.id,(e,t)=>{var r=$i(),i=B(r),o=B(i);H(i);var s=C(i,2);l(s,21,()=>Ae,e=>e.id,(e,r)=>{var i=a(),o=M(i),s=e=>{var i=Qi(),a=B(i),o=C(B(a),2),s=B(o,!0);H(o),H(a),H(i),d(()=>c(s,_(r).label)),n(`click`,a,()=>O(_(t),_(r).slug)),u(e,i)},l=A(()=>!_(r).managersOnly||G(_(t).role));N(o,e=>{_(l)&&e(s)}),u(e,i)}),H(s),H(r),d(()=>{R(i,`title`,_(t).name),c(o,`Workspace · ${_(t).name??``}`)}),u(e,r)}),H(te);var ae=C(te,2),V=B(ae),oe=e=>{var t=ea();u(e,t)},se=e=>{var t=ta(),n=B(t,!0);H(t),d(()=>c(n,_(v))),u(e,t)},ce=e=>{var t=na();ki(C(M(t),2),{get user(){return _(m)},get hideCommentary(){return r.hideCommentary},get hideToolCalls(){return r.hideToolCalls},get userAlign(){return r.userAlign},get otherAlign(){return r.otherAlign},get isDesktop(){return s()},onUserUpdated:b,get onSaved(){return r.onClose},get onHideCommentary(){return r.onHideCommentary},get onHideToolCalls(){return r.onHideToolCalls},get onUserAlign(){return r.onUserAlign},get onOtherAlign(){return r.onOtherAlign},get onBrowserNotificationsChanged(){return r.onBrowserNotificationsChanged}}),u(e,t)},U=e=>{Ki(e,{get user(){return _(m)}})},ue=e=>{var t=ra();Ni(C(M(t),2),{get user(){return _(m)},get isDesktop(){return s()},onUserUpdated:b,get onBrowserNotificationsChanged(){return r.onBrowserNotificationsChanged}}),u(e,t)},de=e=>{Hi(e,{get onClose(){return r.onClose}})};N(V,e=>{_(h)===`loading`?e(oe):_(h)===`error`?e(se,1):_(f)===`profile`?e(ce,2):_(f)===`appearance`?e(U,3):_(f)===`notifications`?e(ue,4):_(f)===`bots`&&e(de,5)}),H(ae),H(j),H(k),n(`click`,k,T),n(`click`,P,function(...e){r.onClose?.apply(this,e)}),u(e,k),ee()}U([`click`]);var oa=o(`
          No thread open Hover any message and tap the bubble to keep side conversations tidy.
          `);function sa(e){var t=oa();u(e,t)}var ca=o(``),$=o(`

          `,1),la=o(``),ua=o(``),da=o(``),fa=o(``),pa=o(``),ma=o(``),ha=o(``),ga=o(`
          `),_a=o(`Connecting…`),va=o(`
          `);function ya(e,t){x(t,!0);function r(e){return e===`muted`?`Channel muted - click to change`:e===`mentions`?`Notifications for @mentions only - click to change`:`All notifications enabled - click to change`}let i=S(t,`channelNotifPreference`,3,void 0),a=S(t,`channelNotifSaving`,3,!1),o=S(t,`channelSettingsAvailable`,3,!1),s=S(t,`pinsAvailable`,3,!1),l=S(t,`pinnedOpen`,3,!1),f=S(t,`onOpenChannelSettings`,3,()=>{}),p=S(t,`onToggleChannelNotifications`,3,()=>{}),m=A(()=>nt(t.externalURL));var h=va(),v=B(h),y=B(v),b=B(y),E=B(b),D=C(B(E),2);H(E),H(b);var O=C(b,2),P=B(O,!0);H(O);var F=C(O,2),te=e=>{var n=$(),r=C(M(n),2),i=B(r,!0);H(r);var a=C(r,2),o=e=>{var t=ca();d(()=>R(t,`href`,_(m))),u(e,t)};N(a,e=>{_(m)&&e(o)}),d(()=>{R(r,`title`,t.channelTitle),c(i,t.channelTitle)}),u(e,n)};N(F,e=>{t.channelTitle&&e(te)}),H(y);var ne=C(y,2),I=C(B(ne),2);k(I);var re=C(I,2),L=e=>{var r=la();n(`click`,r,function(...e){t.onResetSearch?.apply(this,e)}),u(e,r)};N(re,e=>{t.searchQuery&&e(L)}),T(2),H(ne);var z=C(ne,2),ie=e=>{var c=ga(),m=B(c),h=e=>{var t=pa(),o=B(t),s=e=>{var t=ua();u(e,t)},c=e=>{var t=da();u(e,t)},l=e=>{var t=fa();u(e,t)};N(o,e=>{i()===`muted`?e(s):i()===`mentions`?e(c,1):e(l,-1)}),H(t),d((e,n)=>{R(t,`title`,e),R(t,`aria-label`,n),R(t,`aria-busy`,a()),t.disabled=a()},[()=>r(i()),()=>r(i())]),n(`click`,t,function(...e){p()?.apply(this,e)}),u(e,t)};N(m,e=>{i()&&e(h)});var g=C(m,2),_=e=>{var r=ma();let i;d(()=>{R(r,`title`,l()?`Close pinned items`:`Pinned items`),R(r,`aria-label`,l()?`Close pinned items`:`Pinned items`),i=w(r,1,``,null,i,{active:l()})}),n(`click`,r,function(...e){t.onPinnedItems?.apply(this,e)}),u(e,r)};N(g,e=>{s()&&e(_)});var v=C(g,2),y=e=>{var t=ha();n(`click`,t,function(...e){f()?.apply(this,e)}),u(e,t)};N(v,e=>{o()&&e(y)}),H(c),u(e,c)};N(z,e=>{(i()||s()||o())&&e(ie)});var ae=C(z,2),V=e=>{var t=_a();u(e,t)};N(ae,e=>{t.connected||e(V)}),H(v),H(h),d(()=>{R(h,`data-platform`,t.platform),R(b,`aria-label`,t.mobileNavigation?t.mobileNavOpen?`Close navigation`:`Open navigation`:t.sidebarCollapsed?`Expand sidebar`:`Collapse sidebar`),R(b,`title`,t.mobileNavigation?t.mobileNavOpen?`Close navigation`:`Open navigation`:t.sidebarCollapsed?`Expand sidebar`:`Collapse sidebar`),R(D,`d`,t.mobileNavigation?t.mobileNavOpen?`m15 9-3 3 3 3`:`m9 9 3 3-3 3`:t.sidebarCollapsed?`m13 9 3 3-3 3`:`m16 9-3 3 3 3`),c(P,t.workspaceName||`ClickClack`),j(I,t.searchQuery)}),n(`click`,b,function(...e){t.onToggleSidebar?.apply(this,e)}),n(`click`,O,function(...e){t.onOpenWorkspaceSettings?.apply(this,e)}),g(`submit`,ne,e=>{e.preventDefault(),t.onSearch()}),n(`input`,I,e=>t.onSearchQuery(e.currentTarget.value)),u(e,h),ee()}U([`click`,`input`]);var ba=o(`

          `),xa=o(``),Sa=o(``),Ca=o(``),wa=o(``),Ta=o(`

          `,1),Ea=o(`

          ClickClack

          `),Da=o(``),Oa=o(``),ka=o(``),Aa=o(``),ja=o(`

          `);function Ma(e,t){x(t,!0);function r(e){return e===`muted`?`Channel muted - click to change`:e===`mentions`?`Notifications for @mentions only - click to change`:`All notifications enabled - click to change`}let i=S(t,`pinnedOpen`,3,!1),a=S(t,`channelNotifPreference`,3,void 0),o=S(t,`channelNotifSaving`,3,!1),s=S(t,`channelSettingsAvailable`,3,!1),l=S(t,`onOpenChannelSettings`,3,()=>{}),f=S(t,`onToggleChannelNotifications`,3,()=>{}),p=A(()=>t.selectedDirect?void 0:nt(t.selectedChannel?.external_url));var m=ja(),h=B(m),v=B(h),y=e=>{var n=ba(),r=B(n,!0);H(n),d(e=>c(r,e),[()=>`@${Le(t.selectedDirect,t.currentUserID)}`]),u(e,n)},b=e=>{var i=Ta(),s=M(i),l=B(s,!0);H(s);var p=C(s,2),m=e=>{var t=wa(),i=B(t),s=e=>{var t=xa();u(e,t)},c=e=>{var t=Sa();u(e,t)},l=e=>{var t=Ca();u(e,t)};N(i,e=>{a()===`muted`?e(s):a()===`mentions`?e(c,1):e(l,-1)}),H(t),d((e,n)=>{R(t,`title`,e),R(t,`aria-label`,n),R(t,`aria-busy`,o()),t.disabled=o()},[()=>r(a()),()=>r(a())]),n(`click`,t,function(...e){f()?.apply(this,e)}),u(e,t)};N(p,e=>{a()&&e(m)}),d(e=>c(l,e),[()=>`#${rt(t.selectedChannel)}`]),u(e,i)},E=e=>{var t=Ea();u(e,t)};N(v,e=>{t.selectedDirect?e(y):t.selectedChannel?e(b,1):e(E,-1)});var D=C(v,4),O=B(D,!0);H(D),H(h);var P=C(h,2),F=C(B(P),2);k(F);var te=C(F,2),ne=e=>{var r=Da();n(`click`,r,function(...e){t.onResetSearch?.apply(this,e)}),u(e,r)};N(te,e=>{t.searchQuery&&e(ne)}),T(2),H(P);var I=C(P,2),re=B(I),L=e=>{var t=Oa();d(()=>R(t,`href`,_(p))),u(e,t)};N(re,e=>{_(p)&&e(L)});var z=C(re,2);let ie;var ae=C(z,2),V=e=>{var r=ka();let a;d(()=>{R(r,`title`,i()?`Close pinned items`:`Pinned items`),R(r,`aria-label`,i()?`Close pinned items`:`Pinned items`),a=w(r,1,``,null,a,{active:i()})}),n(`click`,r,function(...e){t.onPinnedItems?.apply(this,e)}),u(e,r)};N(ae,e=>{t.selectedChannel&&e(V)});var oe=C(ae,2),se=e=>{var t=Aa();n(`click`,t,function(...e){l()?.apply(this,e)}),u(e,t)};N(oe,e=>{t.selectedChannel&&s()&&e(se)}),H(I),H(m),d(()=>{c(O,t.workspaceName||`no workspace`),j(F,t.searchQuery),R(z,`title`,t.threadOpen?`Close thread`:`Open a message thread`),R(z,`aria-label`,t.threadOpen?`Close thread`:`Open a message thread`),ie=w(z,1,``,null,ie,{active:t.threadOpen})}),g(`submit`,P,e=>{e.preventDefault(),t.onSearch()}),n(`input`,F,e=>t.onSearchQuery(e.currentTarget.value)),n(`click`,z,function(...e){t.onToggleThread?.apply(this,e)}),u(e,m),ee()}U([`click`,`input`]);function Na(e,t){return`${e}\u0000${t}`}function Pa(e,t,n){let r=t.find(t=>t.bot.id===e)?.bot??n(e);return r?.display_name?.trim()||(r?.handle?`@${r.handle}`:``)}function Fa(e,t,n){let r=new Set,i=[];for(let a of e){if(!a.lines.some(e=>!e.finalized)||a.userId&&r.has(a.userId))continue;a.userId&&r.add(a.userId);let e=Pa(a.userId,t,n);e&&i.push(e)}return i}async function Ia(e){return(await W(`/api/workspaces/${e}/bot-commands`)).bot_commands??[]}function La(e){let t=e.trim().toLowerCase();return t?t.startsWith(`/`)?t:`/${t}`:``}function Ra(e){let t=/^(\/\S+)\s*([\s\S]*)$/.exec(e);return t?{command:La(t[1]),text:t[2].trim()}:null}function za(e,t){return e.find(e=>!e.revoked_at&&La(e.command)===t)}async function Ba(e,t,n){let r=new URLSearchParams;r.set(`command`,t),r.set(`text`,n);let i=await fetch(de(`/api/hooks/slash/${e}`),{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`,"X-ClickClack-CSRF":`1`},body:r.toString()}),a=await i.text();if(!i.ok)throw new he(i.status,a);let o=a?JSON.parse(a):{};return{response_type:o.response_type||`in_channel`,text:(o.text||``).trim()}}var Va=e({default:()=>eo}),Ha=o(``),Ua=o(``),Wa=o(`
          cc
          ClickClack OpenClaw workspace chat

          Welcome.

          Sign in with GitHub to join the guest room.

          `,1),Ga=o(``),Ka=o(``),qa=o(`
          Showing topic
          `),Ja=o(`
          `),Ya=o(``),Xa=o(``),Za=o(``),Qa=o(``),$a=o(`
          `,1);function eo(e,t){x(t,!1);let i=V(),o=V(),p=V(),m=V(),T=V(),E=V(),k=V(),A=V(),j=V(),P=V(),F=V(),te=V(),L=V(),oe=V(),ce=V(),U=V(),ue=V(),ge=V(),ve=V(),ye=V(),be=V(),xe=V(),Se=V(),Ce=V(),we=`clickclack:hide-commentary:v1`,Te=`clickclack:hide-tool-calls:v1`,Ee=`clickclack:user-align:v1`,De=`clickclack:other-align:v1`,Oe=Date.now(),Ae=dt?.integratedTitleBar===!0,je=S(t,`routeWorkspaceID`,8,``),Me=S(t,`routeTargetID`,8,``),G=V(null),Ne=new Fe(()=>_(G)?.id||``),Ie=new Xe(Do),ze=V([]),K=V([]),Ve=V([]),Ue=V(null),We=new Map,Ge=V(!1),q=V([]),J=V([]),qe=V([]),Y=V(``),X=V(``),Z=V(``),Q=V(null),Ze=V(``),Qe=V(``),$e=0,et=``,tt=!1,nt=new Map,it=V(null),ct=V(null),lt=V(!1),pt=!1,mt=V([]),gt=V(!1),_t=V(``),vt=V(new Set),yt=0,bt=V([]),xt=V([]),St=V([]),Ct=V([]),wt=V(null),Tt=V([]),Dt=V(``),Ot=V(null),kt=V(null),jt=V(``),Mt=V(null),Nt=null,Pt=V(null),Ft=V(null),Lt=new Set,Rt=V(``),zt=V(``),Bt=V(``),Vt=V(``),Ht=V(``),Wt=V(``),Kt=V(null),qt=V(!1),Jt=0,Yt=0,Xt=V(null),Zt=V(!1),Qt=V(!1),$t=V(`profile`),en=V(!1),tn=V(!1),nn=V(``),rn=V(!1),an=V(!1),on=V(``),sn=V(!1),cn=V(!1),ln=V(!1),un=V(`left`),dn=V(`left`),fn=V(`loading`),pn=V(!1),mn=V(``),hn=V(!1),gn=``,_n=``,vn=``,yn=null,bn=Promise.resolve(),xn=V(null),Sn=new Map,Cn=V(new Map),wn=new Set,Tn=V(`idle`),En=`idle`,On=!1,kn=!1,Mn=V(!1),Fn=V(!1),In=V(!1),Ln=V(!1),zn=new Map,Bn=0,Hn=V(``),Un=V(void 0),Wn=V(``),Kn=V(!0),qn=V(!1),Jn=V(!1),Yn=V(!1),Xn=V(!1),Qn=V(null),$n=V(null),er=V(null),tr=V(null),nr=V(`message`),rr=V([]),ir,ar=V([]),or,sr=V(Date.now()),cr,lr=V(``),ur=0,dr=0,fr=0,pr=0,mr=0,hr=0,gr=0,_r=0,vr=0,yr=0,br=0,xr=0,Sr=0,wr=V(null),Tr,Er=V(new Set),Dr=V(null),Or=V(``);function kr(e){e!==et&&(et=e,tt=!1,D(Ze,``),Ar(``))}function Ar(e){e!==_(Qe)&&(D(Qe,e),$e+=1)}function jr(){return`${_(Y)}:${$()}:${_(Qe)}:${$e}`}function Mr(e,t){return t?e.filter(e=>!e.archived_at&&(!e.channel_id||e.channel_id===t)):[]}ie(()=>{Fr(),cr=window.setInterval(()=>{D(sr,Date.now())},3e4),Yr(),Hr();let e=window.matchMedia(`(max-width: 820px)`),t=()=>{D(Yn,!1),D(Xn,e.matches)};t();let n=dt?.onNavigate(e=>{le(e,{keepFocus:!0,noScroll:!0})}),r=dt?.onQuickCompose(()=>Nr());return e.addEventListener(`change`,t),()=>{e.removeEventListener(`change`,t),n?.(),r?.()}});function Nr(){s().then(()=>{(_(nr)===`thread`?_(tr):_(er))?.focus()})}async function Pr(e){if(dt){e.preventDefault(),D(mn,`Opening GitHub in your browser…`);try{await dt.signInWithGitHub(),D(mn,`Finish signing in in your browser. ClickClack will complete here automatically.`)}catch{D(mn,`Could not open your browser. Try again.`)}}}function Fr(){try{let e=window.localStorage.getItem(`clickclack:show-agent-activity:v1`)===`0`;D(cn,window.localStorage.getItem(we)===`1`||e),D(ln,window.localStorage.getItem(Te)===`1`||e),D(un,window.localStorage.getItem(Ee)===`right`?`right`:`left`),D(dn,window.localStorage.getItem(De)===`right`?`right`:`left`)}catch{D(cn,!1),D(ln,!1),D(un,`left`),D(dn,`left`)}Lr()}function Lr(){try{document.documentElement.setAttribute(`data-user-align`,_(un)),document.documentElement.setAttribute(`data-other-align`,_(dn))}catch{}}function Rr(e){D(un,e),Lr();try{window.localStorage.setItem(Ee,e)}catch{}}function zr(e){D(dn,e),Lr();try{window.localStorage.setItem(De,e)}catch{}}function Br(e){D(cn,e);try{window.localStorage.setItem(we,e?`1`:`0`)}catch{}}function Vr(e){D(ln,e);try{window.localStorage.setItem(Te,e?`1`:`0`)}catch{}}ne(()=>{yn?.close(),yn=null,D(hn,!1),Gt(),ir&&window.clearInterval(ir),or&&window.clearInterval(or),cr&&window.clearInterval(cr),Tr&&clearTimeout(Tr),Os(!1,null)});async function Hr(){try{let e=await _e();if(D(G,e.user),Yr(),await $r(),_(ze).length===0){D(fn,`create a workspace`);return}await _i(je(),Me()),D(fn,`ready`)}catch(e){if(e instanceof he&&(e.status===401||e.status===403)){D(pn,!0),D(fn,`auth`);return}D(fn,e instanceof Error?e.message:`Could not load ClickClack`)}}function Ur(){_(G)&&(D($t,`profile`),D(Qt,!0))}function Wr(){let e=_(i)?.route_id||_(Y)||je();e&&le(ke(e))}function Gr(){_(E)&&(D(nn,``),D(en,!0))}async function qr(e){let t=_(T);if(!(!t||!_(E)||_(tn))){D(tn,!0),D(nn,``);try{let n=await W(`/api/channels/${t.id}`,{method:`PATCH`,body:JSON.stringify({archived:e})});D(K,_(K).map(e=>e.id===n.channel.id?n.channel:e)),D(en,!1)}catch(t){D(nn,me(t,e?`Could not archive channel`:`Could not restore channel`))}finally{D(tn,!1)}}}function Jr(e){D(G,e),oo(_(J).map(t=>t.author?.id===e.id?{...t,author:e}:t)),D(qe,_(qe).map(t=>t.author?.id===e.id?{...t,author:e}:t)),_(Q)?.author?.id===e.id&&D(Q,{..._(Q),author:e})}function Yr(){if(dt){D(sn,Zr());return}let e=Zr();D(sn,typeof Notification<`u`&&Notification.permission===`granted`&&e),e&&!_(sn)&&Qr(!1)}function Xr(){return _(G)?.id?`clickclack:browser-notifications-enabled:v1:${_(G).id}`:``}function Zr(){let e=Xr();if(!e)return!1;try{return window.localStorage.getItem(e)===`enabled`}catch{return!1}}function Qr(e){let t=Xr();if(!t)return!1;try{return e?window.localStorage.setItem(t,`enabled`):window.localStorage.removeItem(t),!0}catch{return!1}}async function $r(){let e=++fr,t=await W(`/api/workspaces`);e===fr&&D(ze,t.workspaces)}function ei(e=``,t=``){return`${e||``}/${t||``}`}function ti(e=_(Y),t=``){let n=ii(e);if(!n)return`/app`;let r=`/app/${encodeURIComponent(n)}`,i=ai(t);return i?`${r}/${encodeURIComponent(i)}`:r}async function ni(e){if(!e.channel_id||e.parent_message_id)throw Error(`Only channel roots have links`);let t=await W(`/api/messages/${e.id}/route`,{method:`POST`});if(!t.message.route_id)throw Error(`Message route was not allocated`);Oo(t.message);let n=ii(t.message.workspace_id);if(!n)throw Error(`Workspace route is unavailable`);let r=`/app/${encodeURIComponent(n)}/${encodeURIComponent(t.message.route_id)}`;return new URL(r,`${pe()}/`).toString()}function ri(e){let t=_(K).find(t=>t.id===e)?.route_id||_(q).find(t=>t.id===e)?.route_id;return t?ti(_(Y),t):!_(Y)||!e?`/app`:`/app/${encodeURIComponent(_(Y))}/${encodeURIComponent(e)}`}function ii(e=_(Y)){return e?_(ze).find(t=>t.id===e||t.route_id===e)?.route_id||e:``}function ai(e=``){return e?_(K).find(t=>t.id===e||t.route_id===e)?.route_id||_(q).find(t=>t.id===e||t.route_id===e)?.route_id||_(Q)?.id===e&&_(Q).route_id||_(J).find(t=>t.id===e)?.route_id||e:``}async function oi(e=_(Y),t=``,n=!1){let r=ti(e,t);window.location.pathname!==r&&await le(r,{replaceState:n,noScroll:!0,keepFocus:!0})}function si(){_(qt)&&qo(),D(Q,null),D(it,null),D(ct,null),D(lt,!1),D(nr,`message`),D(qe,[]),D(Yn,!1)}function ci(e=_(Y)){return pi(e)||_(K).find(e=>e.name.toLowerCase()===`guest`)?.id||_(K)[0]?.id||_(q)[0]?.id||``}function ui(e=_(Y)){return _(ze).find(t=>t.id===e||t.route_id===e)}function di(e=_(Y)){let t=ui(e),n=t?.route_id||t?.id||e;return n?`clickclack:last-channel:v1:${n}`:``}function fi(e){try{let t=JSON.parse(e);return{id:typeof t.id==`string`?t.id:``,routeID:typeof t.routeID==`string`?t.routeID:``}}catch{return{id:e}}}function pi(e=_(Y)){let t=di(e);if(!t)return``;let n;try{let e=window.localStorage.getItem(t);if(!e)return``;n=fi(e)}catch{return``}let r=_(K).find(e=>e.id===n.id||e.route_id===n.routeID);if(r)return r.id;try{window.localStorage.removeItem(t)}catch{}return``}function mi(e,t){if(!e||!t)return;let n=_(K).find(e=>e.id===t);if(!n)return;let r=di(e);if(r)try{window.localStorage.setItem(r,JSON.stringify({id:n.id,routeID:n.route_id}))}catch{}}function gi(e){vn===e&&(vn=``,ls())}async function _i(e=``,t=``){let n=++ur;Ne.clear();let r=ei(e,t),i=t.trim()?await yi(e,t):null;if(n!==ur)return;let a=i?_(ze).find(e=>e.id===i.workspace_id):_(ze).find(t=>t.id===e||t.route_id===e)||_(ze)[0];if(!a){Wi(``,Ui({messages:[],oldest_seq:0,newest_seq:0,has_older:!1,has_newer:!1}),`replace`),D(lr,r);return}let o=i?ei(i.workspace_route_id,i.target_route_id):ei(a.route_id,``),s=_(Y)!==a.id;if(s&&(io(),Ie.clear(),D(Y,a.id),mr+=1,vr+=1,yr+=1,_r+=1,D(St,[]),D(Ct,[]),D(Ve,[]),D(xt,[]),D(X,``),D(Z,``),D(Q,null),D(it,null),D(ct,null),D(nr,`message`),D(qe,[]),qo(),Zi(),D(Kn,!0),vn=a.id),(s||_(K).length===0)&&await Ci(!1,!1),n!==ur||((s||_(q).length===0)&&await es(),s&&(await Promise.all([Ei(),Oi(a.id),ki(a.id),wi(a.id)]),Di(a.id)),n!==ur))return;if(i){let e=await vi(i,n);if(n!==ur)return;if(!e){si(),await oi(a.id,ci(),!0);return}}if(i?.canonical_path&&window.location.pathname!==i.canonical_path&&(D(lr,o),await le(i.canonical_path,{replaceState:!0,noScroll:!0,keepFocus:!0}),n!==ur))return;if(i?.target_type===`channel`&&_(K).some(e=>e.id===i.target_id)){let e=i.target_id,t=!s&&_(X)===e&&!_(Z)&&_(Hn)===e;D(X,e),D(Z,``),mi(a.id,e),si();let r=pt;if(pt=!1,t){D(lt,r),D(lr,o),Ji(e),gi(a.id);return}if(kr(e),await Promise.all([Li(),Is(e,``)]),n!==ur)return;D(lt,r),D(lr,o),gi(a.id);return}if(i?.target_type===`direct`&&_(q).some(e=>e.id===i.target_id)){let e=i.target_id,t=!s&&_(Z)===e&&!_(X)&&_(Hn)===e;if(D(Z,e),D(X,``),si(),t){D(lr,o),Ji(e),gi(a.id);return}if(kr(e),await Li(),n!==ur)return;D(lr,o),gi(a.id);return}if(i?.target_type===`thread`){let e=await bi(i);if(n!==ur)return;if(e){D(lr,o),gi(a.id);return}}let c=ci();if(si(),!c){D(X,``),D(Z,``),kr(``),await Li(),D(lr,r),(e!==a.route_id||t)&&await oi(a.id,``,!0),gi(a.id);return}await oi(a.id,c,!0)}async function vi(e,t){return e.target_type===`channel`?(_(K).some(t=>t.id===e.target_id)||await Ci(!1,!1,!1),t===ur&&_(K).some(t=>t.id===e.target_id)):e.target_type===`direct`?(_(q).some(t=>t.id===e.target_id)||(await es(),_(q).some(t=>t.id===e.target_id)||ts((await W(`/api/dms/${e.target_id}`)).conversation)),t===ur&&_(q).some(t=>t.id===e.target_id)):e.parent_type===`channel`&&e.parent_id?(_(K).some(t=>t.id===e.parent_id)||await Ci(!1,!1,!1),t===ur&&_(K).some(t=>t.id===e.parent_id)):e.parent_type===`direct`&&e.parent_id?(_(q).some(t=>t.id===e.parent_id)||(await es(),_(q).some(t=>t.id===e.parent_id)||ts((await W(`/api/dms/${e.parent_id}`)).conversation)),t===ur&&_(q).some(t=>t.id===e.parent_id)):!0}async function yi(e,t){try{return(await W(`/api/routes/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)).route}catch(e){if(e instanceof he&&(e.status===403||e.status===404))return null;throw e}}async function bi(e){if(e.workspace_id!==_(Y))return!1;let t=e.parent_type===`channel`&&e.parent_id||``,n=e.parent_type===`direct`&&e.parent_id||``;if(t){if(!_(K).some(e=>e.id===t))return!1;D(X,t),D(Z,``),mi(e.workspace_id,t)}else if(n){if(!_(q).some(e=>e.id===n))return!1;D(Z,n),D(X,``)}else return!1;let r=_(Q)?.id===e.target_id&&_(Hn)===$();if(D(ct,null),D(lt,!1),D(nr,`thread`),D(Yn,!1),await Mo(e.target_id),t&&await Is(t,``),!r&&t&&_(Q)&&(_(Q).thread_state?.reply_count??0)===0){let e=_(Q);return D(Q,null),D(it,null),D(qe,[]),D(nr,`message`),await Zo(e),!0}return!r&&_(Q)&&await Zo(_(Q)),!0}async function xi(){if(!_(Bt).trim())return;let e=await W(`/api/workspaces`,{method:`POST`,body:JSON.stringify({name:_(Bt)})});D(Bt,``),D(qn,!1),D(ze,[..._(ze),e.workspace]),D(Yn,!1),await _i(e.workspace.route_id||e.workspace.id,``),await oi(e.workspace.id),D(fn,`ready`)}async function Si(e){D(Yn,!1),await oi(e)}async function Ci(e=!0,t=!0,n=!0){let r=_(Y);if(!r)return;let i=++pr,a=await W(`/api/workspaces/${r}/channels`);i===pr&&r===_(Y)&&(D(K,a.channels),t?D(X,_(K).find(e=>e.id===_(X))?.id||_(K).find(e=>!e.archived_at)?.id||_(K)[0]?.id||``):_(X)&&!_(K).some(e=>e.id===_(X))&&D(X,``),n&&(_(qt)&&qo(),D(Q,null),D(ct,null),D(nr,`message`),D(qe,[])),e&&await Li())}async function wi(e=_(Y)){let t=++mr,n=$(),r=_(X),i=!1;if(!e){D(Ve,[]);return}try{let a=await W(`/api/workspaces/${e}/topics`);if(t!==mr||e!==_(Y)||(D(Ve,a.topics),$()!==n||_(X)!==r))return;let o=new Set(Mr(a.topics,r).map(e=>e.id));_(Ze)&&!o.has(_(Ze))&&D(Ze,``),_(Qe)&&!o.has(_(Qe))&&(Ar(``),Sn.delete($()),_(Cn).delete($()),i=!0)}catch{return}if(!(!i||$()!==n))try{await Ri()}catch(e){if($()!==n||_(Qe))return;oo(bo(n)),D(wt,{kind:`error`,text:e instanceof Error?`Topic changed, but messages could not reload: ${e.message}`:`Topic changed, but messages could not reload`})}}function Ti(){D(nr,`message`),_(X)&&wi()}async function Ei(e=_(Y)){let t=++gr;if(!e||e!==_(Y)||_(o)!==`owner`&&_(o)!==`moderator`){t===gr&&D(bt,[]);return}try{let n=await W(`/api/workspaces/${e}/moderation/members`);if(t!==gr||e!==_(Y))return;D(bt,n.members)}catch{t===gr&&e===_(Y)&&D(bt,[])}}async function Di(e=_(Y)){let t=++_r;if(!e){D(xt,[]);return}try{let n=[],r;do{let t=await ut({workspaceID:e,cursor:r,limit:100});n.push(...t.members.map(e=>e.user)),r=t.has_more?t.next_cursor:void 0}while(r);if(t!==_r||e!==_(Y))return;D(xt,n)}catch{t===_r&&e===_(Y)&&D(xt,[])}}async function Oi(e=_(Y)){let t=++vr;if(!e){D(St,[]);return}try{let n=await W(`/api/workspaces/${e}/slash-commands`);if(t!==vr||e!==_(Y))return;D(St,n.slash_commands)}catch{t===vr&&e===_(Y)&&D(St,[])}}async function ki(e=_(Y),t=!1){let n=++yr;if(!e){D(Ct,[]);return}try{let t=await Ia(e);if(n!==yr||e!==_(Y))return;D(Ct,t)}catch(r){let i=n===yr&&e===_(Y);if(i&&D(Ct,[]),t&&i)throw r}}function Ai(e){Sr+=1,D(wt,null)}async function ji(e,t){if(!_(Y))return;let n=await W(`/api/workspaces/${_(Y)}/moderation/members/${e}`,{method:`PATCH`,body:JSON.stringify(t)});D(bt,[..._(bt).filter(t=>t.user.id!==e),n.member]),await Ci(!1,!1,!1),D(fn,`ready`)}async function Mi(){if(!_(Y)||!_(Vt).trim())return;let e=await W(`/api/workspaces/${_(Y)}/channels`,{method:`POST`,body:JSON.stringify({name:_(Vt),kind:`public`})});D(Vt,``),D(K,[..._(K),e.channel]),D(rn,!1),await oi(_(Y),e.channel.id)}async function Ni(e){D(Yn,!1),mi(_(Y),e);let t=ti(_(Y),e);e===_(X)&&!_(Z)&&window.location.pathname===t||await oi(_(Y),e)}async function Pi(e,t){let n=++br;if(D(Ue,null),!(!e||t))try{let t=await W(`/api/channels/${e}/notification-settings`);if(n!==br||e!==_(X)||_(Z))return;Aa(e,t.preference),D(Ue,t.preference)}catch{if(n===br&&e===_(X)&&!_(Z)){let t=ka(e)||`all`;Aa(e,t),D(Ue,t)}}}async function Fi(){let e=_(X);if(!e||_(Z)||_(Ge)||!_(Ue))return;let t=++br,n=[`all`,`mentions`,`muted`],r=_(Ue),i=n[(n.indexOf(r)+1)%n.length];D(Ue,i),Aa(e,i),D(Ge,!0);try{await W(`/api/channels/${e}/notification-settings`,{method:`PATCH`,body:JSON.stringify({preference:i})})}catch{We.get(e)===i&&Aa(e,r),t===br&&e===_(X)&&!_(Z)&&D(Ue,r)}finally{D(Ge,!1)}}function Ii(e,t){return e===dr&&$()===t}async function Li(e=!0){e&&io();let t=$(),n=++dr,r=t!==_(Hn);Zi(),r&&D(Kn,!0);try{if(!_(Z)&&!_(X)){Wi(``,Ui({messages:[],oldest_seq:0,newest_seq:0,has_older:!1,has_newer:!1}),`replace`);return}let e=await W(Vi(zi()));if(!Ii(n,t))return;Wi(t,Ui(e),`replace`)}finally{Ii(n,t)&&D(Kn,!1)}}async function Ri(){let e=$();if(!e)return;let t=++dr;Zi(),D(Kn,!0),Sn.set(e,{atBottom:!0});try{let n=await W(Vi(`limit=100`));if(!Ii(t,e))return;Wi(e,Ui(n),`replace`)}finally{Ii(t,e)&&D(Kn,!1)}}function zi(){let e=Bi(),t=e.unread_count||0,n=e.last_read_seq||0;return t>0?`around_seq=${encodeURIComponent(String(n+1))}&limit=100`:`limit=100`}function Bi(){return _(Z)?_(q).find(e=>e.id===_(Z))||{}:_(X)&&_(K).find(e=>e.id===_(X))||{}}function Vi(e){let t=_(Z)?`/api/dms/${_(Z)}/messages`:`/api/channels/${_(X)}/messages`,n=new URLSearchParams(e);!_(Z)&&_(Qe)&&n.set(`topic_id`,_(Qe));let r=n.toString();return r?`${t}?${r}`:t}async function Hi(e){if(!_(X)||e===_(Qe)||tt)return;let t=$(),n=_(Qe),r=_(Ze),i=_(Cn).get(t),a=Sn.get(t);tt=!0,Ar(e);let o=$e;e&&D(Ze,e),Sn.delete(t),_(Cn).delete(t);try{if(await Ri(),$()!==t||$e!==o)return}catch(s){if($()!==t||$e!==o)return;Ar(n),_(Ze)===e&&D(Ze,r),_(Cn).delete(t);let c=$e;try{if(await Ri(),$()!==t||$e!==c)return;a&&(Sn.set(t,a),D(Un,a))}catch{if($()!==t||$e!==c)return;i?(Gi(t,i),ao(t,i.messages),Ji(t,i)):oo(bo(t)),a&&(Sn.set(t,a),D(Un,a))}D(wt,{kind:`error`,text:s instanceof Error?`Topic could not change: ${s.message}`:`Topic could not change`})}finally{tt=!1}}function Ui(e){return{messages:e.messages,oldest_seq:e.oldest_seq,newest_seq:e.newest_seq,has_older:e.has_older,has_newer:e.has_newer}}function Wi(e,t,n){let r=ea(e,t.messages,n),i=r[0]?.channel_seq||0,a=r[r.length-1]?.channel_seq||0,o=i>(t.messages[0]?.channel_seq||i),s=a<(t.messages[t.messages.length-1]?.channel_seq||a),c={messages:r,oldest_seq:i,newest_seq:a,has_older:t.has_older||o,has_newer:t.has_newer||s};Gi(e,c),Ji(e,c),ao(e,r)}function Gi(e,t){e&&(_(Cn).delete(e),_(Cn).set(e,t),Ki(e),qi(e),D(Cn,new Map(_(Cn))))}function Ki(e){let t=_(Cn).size+1;for(;_(Cn).size>8&&t>0;){t--;let n=_(Cn).keys().next().value;if(!n)return;if(n===e){let e=_(Cn).get(n);_(Cn).delete(n),e&&_(Cn).set(n,e);continue}_(Cn).delete(n)}}function qi(e){let t=Sn.size+1;for(;Sn.size>16&&t>0;){t--;let n=Sn.keys().next().value;if(!n)return;if(n===e){let e=Sn.get(n);Sn.delete(n),e&&Sn.set(n,e);continue}Sn.delete(n)}}function Ji(e,t=_(Cn).get(e)){e===$()&&(D(Mn,t?.has_older||!1),D(Fn,t?.has_newer||!1))}function Yi(e){let t=_(Cn).get(e);!e||!t||(Gi(e,{...t,has_newer:!0}),Ji(e))}function Xi(e,t){e===`older`?(D(Tn,t),D(In,t===`loading`)):(En=t,D(Ln,t===`loading`))}function Zi(){wn=new Set,D(Tn,`idle`),En=`idle`,On=!1,kn=!1,D(In,!1),D(Ln,!1)}function Qi(e,t){let n=new Map;for(let r of[...e,...t])n.set(r.id,r);return[...n.values()].sort((e,t)=>(e.channel_seq||0)-(t.channel_seq||0))}function $i(e){let t=new Set,n=ba(e);if(n>=0){let r=xa(e,_(J),n);r&&t.add(r.id)}let r=Sn.get(e)?.anchorMessageID;r&&t.add(r);let i=Ie.session(e);i&&t.add(i.messageID),_(Q)&&co(_(Q),e)&&t.add(_(Q).id),_(Qn)&&co(_(Qn),e)&&t.add(_(Qn).id);for(let n of _(J))(n.status===`pending`||n.status===`failed`)&&co(n,e)&&t.add(n.id);return t}function ea(e,t,n){return Pe(t,n,$i(e))}function ta(){if(_(Tn)!==`idle`){On=!0;return}ra()}function na(e=!1){if(En!==`idle`){e&&(kn=!0);return}ia()}async function ra(){let e=$(),t=jr(),n=_(Cn).get(e),r=`${t}:older`;if(_(Tn)!==`idle`){On=!0;return}if(!e||!n?.has_older||n.oldest_seq<=0||wn.has(r))return;wn.add(r),On=!1,Xi(`older`,`loading`),io();let i=!1;try{let r=await W(Vi(`before_seq=${encodeURIComponent(String(n.oldest_seq))}&limit=50`));if(jr()!==t)return;Wi(e,{messages:Qi(r.messages,_(J)),oldest_seq:r.oldest_seq||n.oldest_seq,newest_seq:n.newest_seq,has_older:r.has_older,has_newer:n.has_newer},`prepend`),i=!0,Xi(`older`,`settling`)}catch(e){jr()===t&&D(fn,e instanceof Error?e.message:`Could not load older messages`)}finally{wn.delete(r),jr()===t&&!i&&Xi(`older`,`idle`)}}async function ia(){let e=$(),t=jr(),n=_(Cn).get(e),r=`${t}:newer`;if(En!==`idle`){kn=!0;return}if(!e||wn.has(r))return;if(!n||n.newest_seq<=0){await Li();return}wn.add(r),kn=!1,Xi(`newer`,`loading`);let i=!1;try{let r=await W(Vi(`after_seq=${encodeURIComponent(String(n.newest_seq))}&limit=50`));if(jr()!==t)return;if(r.messages.length===0){Wi(e,{...n,has_newer:r.has_newer},`append`),i=!0,Xi(`newer`,`settling`);return}Wi(e,{messages:Qi(_(J),r.messages),oldest_seq:n.oldest_seq,newest_seq:r.newest_seq||n.newest_seq,has_older:n.has_older,has_newer:r.has_newer},`append`),i=!0,Xi(`newer`,`settling`)}catch(e){jr()===t&&D(fn,e instanceof Error?e.message:`Could not load newer messages`)}finally{wn.delete(r),jr()===t&&!i&&Xi(`newer`,`idle`)}}function oa(){let e=_(Y),t=$(),n=jr();if(!e||!t)return Promise.resolve();let r=bn.catch(()=>void 0).then(async()=>{if(_(Y)!==e||$()!==t||jr()!==n)return;let r=_(Cn).get(t);if(!r||r.newest_seq<=0){await Li();return}let i=await W(Vi(`after_seq=${encodeURIComponent(String(r.newest_seq))}&limit=50`));if(_(Y)!==e||$()!==t||jr()!==n)return;let a=_(Cn).get(t);if(!a)return;let o=i.newest_seq||r.newest_seq,s=o>a.newest_seq?i.has_newer:on&&(n=r.channel_seq));return n}function ua(e,t=_(J)){let n=0;for(let r of t)r.direct_conversation_id===e&&typeof r.channel_seq==`number`&&r.channel_seq>n&&(n=r.channel_seq);return n}function da(e,t){return e&&t.unread_count||0}async function fa(e,t){let n=_(K).find(t=>t.id===e);if(n&&!(t<=0||t<=(n.last_read_seq||0))){D(K,_(K).map(n=>n.id===e?(()=>{let e=Math.max(n.last_seq||0,t);return{...n,last_seq:e,unread_count:t>=e?0:n.unread_count||0,last_read_seq:t}})():n));try{await W(`/api/channels/${e}/read`,{method:`POST`,body:JSON.stringify({seq:t})})}catch{}}}async function pa(e,t){let n=_(q).find(t=>t.id===e);if(n&&!(t<=0||t<=(n.last_read_seq||0))){D(q,_(q).map(n=>n.id===e?(()=>{let e=Math.max(n.last_seq||0,t);return{...n,last_seq:e,unread_count:t>=e?0:n.unread_count||0,last_read_seq:t}})():n));try{await W(`/api/dms/${e}/read`,{method:`POST`,body:JSON.stringify({seq:t})})}catch{}}}function ma(e){let t=_(Cn).get(e)?.newest_seq||0,n=_(K).find(t=>t.id===e);if(n)return Math.max(n.last_seq||0,(n.last_read_seq||0)+(n.unread_count||0),la(e),t);let r=_(q).find(t=>t.id===e);return r?Math.max(r.last_seq||0,(r.last_read_seq||0)+(r.unread_count||0),ua(e),t):0}function ha(e){let t=_(Cn).get(e);return!t||t.has_newer?0:_(K).find(t=>t.id===e)?la(e):_(q).find(t=>t.id===e)?ua(e):0}function ga(e={}){if(!e.all&&Date.now()e.id===t))return;if(!e.all&&!e.seq){let e=ba(t);if(e>=0&&!to(t,e))return}let n=e.all?Math.max(e.seq||0,ma(t)):e.seq||ha(t);if(!(n<=0)){if(_(q).some(e=>e.id===t)){pa(t,n),e.all&&_a(t,n);return}_(K).some(e=>e.id===t)&&(fa(t,n),e.all&&_a(t,n))}}function _a(e,t){zn.delete(e),zn=new Map(zn),D(K,_(K).map(n=>n.id===e?{...n,last_seq:Math.max(n.last_seq||0,t),last_read_seq:Math.max(n.last_read_seq||0,t),unread_count:0}:n)),D(q,_(q).map(n=>n.id===e?{...n,last_seq:Math.max(n.last_seq||0,t),last_read_seq:Math.max(n.last_read_seq||0,t),unread_count:0}:n))}function va(e){let t=_(K).find(t=>t.id===e);return t?t.last_read_seq||0:_(q).find(t=>t.id===e)?.last_read_seq||0}function ba(e){let t=_(K).find(t=>t.id===e);if(t)return da(e,t)>0?t.last_read_seq||0:-1;let n=_(q).find(t=>t.id===e);return n&&da(e,n)>0?n.last_read_seq||0:-1}function xa(e,t,n){for(let r of t){if(!co(r,e)||r.parent_message_id||r.author?.id===_(G)?.id||r.author_id===_(G)?.id)continue;let t=r.channel_seq;if(typeof t==`number`&&t>n)return r}return null}function Sa(e,t){if(!e)return;let n=eo(e);if(da(e,n)<=0){zn.delete(e),zn=new Map(zn);return}let r=n.last_read_seq||0,i=zn.get(e);if(i?.boundarySeq===r&&i.since||!to(e,r))return;let a=xa(e,t,r);a&&(zn=new Map(zn).set(e,{boundarySeq:r,since:ro(a.created_at)}))}function Ca(e,t,n){if(!e||!n)return;let r=zn.get(e);r?.boundarySeq===t&&r.since||(zn=new Map(zn).set(e,{boundarySeq:t,since:ro(n)}))}function wa(e){let t=e.payload,n=t.channel_seq??e.seq??t.seq;return typeof n==`number`?n:Number(n)||0}function Ta(e){let t=e.payload;return{channelID:e.channel_id||(typeof t.channel_id==`string`?t.channel_id:``),dmID:typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``}}async function Ea(e){try{let t=await W(`/api/channels/${e}/notification-settings`);return Aa(e,t.preference),e===_(X)&&!_(Z)&&!_(Ge)&&D(Ue,t.preference),t.preference}catch{return ka(e)||`all`}}function Da(e){return _(G)?.id&&e?`clickclack:channel-notification:v1:${_(G).id}:${e}`:``}function Oa(e){let t=Da(e);if(!t)return null;try{let e=window.localStorage.getItem(t);return e===`all`||e===`mentions`||e===`muted`?e:null}catch{return null}}function ka(e){return We.get(e)||Oa(e)}function Aa(e,t){We=new Map(We).set(e,t);let n=Da(e);if(n)try{window.localStorage.setItem(n,t)}catch{}}async function ja(e,t){if(e.type!==`message.created`&&e.type!==`thread.reply_created`)return;let n=e.payload,r=typeof n.kind==`string`?n.kind:``;if(r===`agent_commentary`||r===`agent_tool`||!_(sn)||document.visibilityState===`visible`&&t)return;let{channelID:i,dmID:a}=Ta(e);if(i){let t=await Ea(i);if(!t||!_(sn))return;let n=i===_(X)&&!_(Z);if(document.visibilityState===`visible`&&n||t===`muted`||t===`mentions`&&!e.mentioned_user_ids?.includes(_(G)?.id||``))return}let o=typeof n.message_id==`string`?n.message_id:`${e.channel_id||``}:${e.seq||Date.now()}`,s=typeof n.author_id==`string`?n.author_id:``,c=typeof n.body==`string`?n.body:`New message`;if(e.type===`thread.reply_created`&&typeof n.message_id==`string`)try{let e=await W(`/api/messages/${n.message_id}`);s=e.message.author_id,c=e.message.body}catch{}if(s&&s===_(G)?.id||!_(sn)||document.visibilityState===`visible`&&(i&&i===_(X)||a&&a===_(Z)))return;let l=_(K).find(e=>e.id===i),u=ys(s)?.display_name||`ClickClack`,d=l?`#${rt(l)}`:`Direct message`;if(dt){dt.notify({body:Pa(c),route:ri(i||a),tag:`clickclack:${o}`,title:`${u} in ${d}`});return}if(!(typeof Notification>`u`||Notification.permission!==`granted`))try{let e=new Notification(`${u} in ${d}`,{body:Pa(c),tag:`clickclack:${o}`,icon:`/favicon.svg`});e.onclick=()=>{window.focus(),e.close(),i?Ni(i):a&&rs(a)}}catch{}}function Pa(e){let t=e.replace(/!\[[^\]]*]\([^)]+\)/g,`[image]`).replace(/\[[^\]]+]\(([^)]+)\)/g,`$1`).replace(/[`*_>#|]/g,``).replace(/\s+/g,` `).trim();return t?t.length>180?`${t.slice(0,177)}...`:t:`New message`}function La(e){if(e.type!==`message.created`)return!1;let t=wa(e);if(t<=0)return!1;let{channelID:n,dmID:r}=Ta(e);return n?t<=(_(K).find(e=>e.id===n)?.last_seq||0):r?t<=(_(q).find(e=>e.id===r)?.last_seq||0):!1}async function Va(e){let t=e.payload,n=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;return!n||_(q).some(e=>e.id===n)?!1:(await es(),_(q).some(e=>e.id===n))}function eo(e){return _(K).find(t=>t.id===e)||_(q).find(t=>t.id===e)||{}}function to(e,t,n=_(Cn)){if(!e||t<0)return!1;let r=n.get(e);if(!r||r.messages.length===0)return!1;let i=t+1;return r.oldest_seq<=i&&r.newest_seq>=i}function no(e,t,n=_(Cn)){let r=zn.get(e);if(r?.boundarySeq===t)return r.since;if(!to(e,t,n))return``;let i=xa(e,_(J),t);return i?ro(i.created_at):``}function ro(e){let t=new Date(e);return Number.isNaN(t.getTime())?``:new Intl.DateTimeFormat(void 0,{hour:`numeric`,minute:`2-digit`}).format(t)}function io(){if(!_(Hn)||!_(xn))return;let e=_(xn).captureState();e&&Sn.set(_(Hn),e)}function ao(e,t){let n=e!==_(Hn);D(Un,Sn.get(e));let r=bo(e),i=new Map(r.map(e=>[e.id,e])),a=new Map(r.filter(e=>e.nonce).map(e=>[e.nonce,e]));Ne.seedMessages(t);let o=t.map(e=>{let t=i.get(e.id)||(e.nonce?a.get(e.nonce):void 0);return t?e.nonce&&mo.has(e.nonce)?{...e,nonce:t.nonce,status:t.status,attachments:t.attachments?.length?t.attachments:e.attachments}:{...e,nonce:t.nonce,attachments:t.attachments?.length?t.attachments:e.attachments}:e}),s=new Set(o.map(e=>e.id)),c=new Set(o.map(e=>e.nonce).filter(Boolean)),l=r.filter(t=>(t.status===`pending`||t.status===`failed`)&&t.id.startsWith(`tmp_`)&&!s.has(t.id)&&!(t.nonce&&c.has(t.nonce))&&co(t,e)&&(!_(Qe)||t.topic_id===_(Qe)));D(J,l.length>0?[...o,...l]:o),Ie.reconcile(e,_(J)),D(Hn,e),Sa(e,_(J)),n&&(D(rr,[]),D(ar,[]),Gt())}function oo(e,t=`append`){let n=$(),r=n?_(Cn).get(n):void 0;if(!n||!r){D(J,e);return}let i=e.filter(e=>co(e,n)),a=ea(n,i,t),o=a.filter(e=>(e.channel_seq||0)>0),s=o[0]?.channel_seq||r.oldest_seq,c=o[o.length-1]?.channel_seq||r.newest_seq,l=so(a[0])>so(i[0]),u=so(a[a.length-1])0)&&await Ri(),await lo(),ga({all:!0}),await lo()}catch(e){D(fn,e instanceof Error?e.message:`Could not jump to latest messages`)}}let mo=new Map;function ho(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID().replace(/-/g,``):`${Date.now().toString(36)}${Math.random().toString(36).slice(2,10)}`}function go(e,t,n=`tmp_${e}`){let r=new Date().toISOString();return{id:n,workspace_id:t.workspaceID,channel_id:t.channelID,direct_conversation_id:t.directConversationID,topic_id:t.topicID,author_id:_(G)?.id||``,thread_root_id:n,body:t.body,body_format:`markdown`,created_at:r,author:_(G)||void 0,attachments:t.upload?[t.upload]:[],quoted_message_id:t.quotedMessageID,nonce:e,status:`pending`}}async function _o(){let e=_(Rt).trim();if(!e)return;if(_(j)&&!_(P)){D(fn,`This conversation has no active recipient`);return}if(!_(X)&&!_(Z)){D(fn,`pick or create a channel`);return}Gt(),D(wt,null);let t=++Sr,n=$(),r=_(Z)?`dm`:`channel`,i=_(Qn)&&_($n)===r?_(Qn):null;if(_(X)&&!_(Z)&&!_(Xt)&&!i){let r=Ra(e),i=r?za(_(St),r.command):void 0;if(r&&i){D(Rt,``),await vo(_(X),r.command,r.text,e,n,t);return}}let a={body:e,quotedMessageID:i?.id,upload:_(Xt)||void 0,workspaceID:_(Y),channelID:_(X)||void 0,directConversationID:_(Z)||void 0,topicID:_(X)&&_(Ze)||void 0,topicFilterID:_(Qe),topicFilterGeneration:$e,viewKey:$()};D(Rt,``),i&&zo(),D(Xt,null),await wo(a)}async function vo(e,t,n,r,i,a){try{let r=await Ba(e,t,n);if(a!==Sr||$()!==i)return;r.text&&r.response_type!==`in_channel`&&D(wt,{kind:`ephemeral`,text:r.text})}catch(e){if(console.warn(`slash dispatch failed`,e),a!==Sr||$()!==i)return;D(wt,{kind:`error`,text:e instanceof he&&e.message?yo(e):`${t} failed`}),_(Rt).trim()||D(Rt,r)}}function yo(e){try{let t=JSON.parse(e.message);if(t&&typeof t.error==`string`&&t.error)return t.error}catch{}return e.message}function bo(e){let t=[..._(J),...nt.get(e)||[]].filter(t=>(t.status===`pending`||t.status===`failed`)&&co(t,e)&&(!_(Qe)||t.topic_id===_(Qe))),n=new Map;for(let e of t){let t=e.nonce?`nonce:${e.nonce}`:`id:${e.id}`;n.set(t,e)}return[...n.values()]}function xo(e,t){let n=(nt.get(e)||[]).filter(e=>e.id!==t.id&&!(t.nonce&&e.nonce===t.nonce));nt=new Map(nt).set(e,[...n,t])}function So(e,t,n){let r=nt.get(e);if(!r)return;let i=r.filter(e=>e.id!==t&&!(n&&e.nonce===n)),a=new Map(nt);i.length>0?a.set(e,i):a.delete(e),nt=a}async function Co(e,t,n){if(xo(e.viewKey,t),$()!==e.viewKey)return;let r=!1;if(_(Qe)===e.topicFilterID&&$e===e.topicFilterGeneration&&_(Qe)&&e.topicID!==_(Qe)){Ar(``),Sn.delete(e.viewKey),_(Cn).delete(e.viewKey);try{await Ri()}catch{r=!0}}if($()!==e.viewKey)return;if(_(Qe)&&e.topicID!==_(Qe)){_(Rt).trim()||D(Rt,e.body),D(wt,{kind:`error`,text:`${n} Clear the active topic filter to recover the draft.`});return}r&&oo(bo(e.viewKey));let i=t.id,a=t.nonce,o=_(J).findIndex(e=>e.id===i||a&&e.nonce===a);oo(o>=0?_(J).map((e,n)=>n===o?t:e):[..._(J),t]),D(wt,{kind:`error`,text:r?`${n} The unfiltered timeline could not reload.`:n}),await fo()}async function wo(e,t,n){let r=t??ho(),i=`tmp_${r}`,a=n??i,o=!_(Qe)||e.topicID===_(Qe),s=!t&&$()===e.viewKey&&o,c=s&&_(Fn);mo.set(r,e);let l=go(r,e,a);t&&xo(e.viewKey,l),t?oo(_(J).map(e=>e.id===a?l:e)):$()===e.viewKey&&o&&(oo([..._(J),l]),fo());let u=e.directConversationID?`/api/dms/${e.directConversationID}/messages`:`/api/channels/${e.channelID}/messages`,d={body:e.body,nonce:r};e.quotedMessageID&&(d.quoted_message_id=e.quotedMessageID),e.topicID&&(d.topic_id=e.topicID);try{let t=(await W(u,{method:`POST`,body:JSON.stringify(d)})).message;if(e.upload)try{await W(`/api/messages/${t.id}/attachments`,{method:`POST`,body:JSON.stringify({upload_id:e.upload.id})}),t={...t,attachments:[...t.attachments||[],e.upload]}}catch(n){console.warn(`attachment failed`,n),await Co(e,{...t,nonce:r,status:`failed`,attachments:e.upload?[...t.attachments||[],e.upload]:t.attachments},`The message was sent, but its attachment failed. Retry or discard it below.`);return}So(e.viewKey,t.id,r),mo.delete(r),_(J).findIndex(e=>e.id===a)>=0?oo(_(J).map(e=>e.id===a?t:e)):_(J).some(e=>e.id===t.id)?oo(_(J).map(e=>e.id===t.id?t:e)):co(t,$())&&(!_(Qe)||t.topic_id===_(Qe))&&!_(J).some(e=>e.id===t.id)&&oo([..._(J),t]),$()===e.viewKey&&s&&(c&&await Ri(),await fo(),ga({all:!0,seq:t.channel_seq||0}))}catch(t){console.warn(`send failed`,t),await Co(e,{...l,status:`failed`},`The message failed to send. Retry or discard it below.`)}}function To(e){if(!e.nonce)return;let t=mo.get(e.nonce);if(!t){Eo(e);return}wo({...t,viewKey:t.viewKey},e.nonce,e.id)}function Eo(e){if(e.nonce){let t=mo.get(e.nonce);t&&So(t.viewKey,e.id,e.nonce),mo.delete(e.nonce)}oo(_(J).filter(t=>t.id!==e.id))}async function Do(e,t){if(e!==_(Wn))return;t.surface===`timeline`&&_(xn)?.scrollToMessage(t.messageID);let n=document.querySelector(t.surface===`timeline`?`main.timeline`:`[aria-label="Thread pane"]`);for(let e=0;e<16;e+=1){await s(),await new Promise(e=>requestAnimationFrame(()=>e()));let e=n?.querySelector(`[data-message-id="${CSS.escape(t.messageID)}"]`)?.querySelector(`textarea[aria-label="Edit message"]`);if(e){e.focus();return}}}function Oo(e){oo(_(J).map(t=>t.id===e.id?{...t,...e}:t)),D(qe,_(qe).map(t=>t.id===e.id?{...t,...e}:t)),D(mt,_(mt).map(t=>t.id===e.id?{...t,...e}:t)),_(Q)?.id===e.id&&D(Q,{..._(Q),...e})}function ko(e){!e.id||e.deleted_at||_(Er).has(e.id)||(D(Dr,e),D(Or,``))}async function Ao(){let e=_(Dr);if(!(!e||_(Er).has(e.id))){D(Er,new Set([..._(Er),e.id])),D(Or,``);try{let t=(await W(`/api/messages/${e.id}`,{method:`DELETE`})).message;Ie.cancelMessage($(),t.id),oo(_(J).map(e=>e.id===t.id?{...e,...t}:e)),D(qe,_(qe).map(e=>e.id===t.id?{...e,...t}:e)),D(mt,_(mt).filter(e=>e.id!==t.id)),_(Q)?.id===t.id&&D(Q,{..._(Q),...t}),_(Qn)?.id===t.id&&zo(),D(fn,``),D(Dr,null)}catch(e){D(Or,e instanceof Error?e.message:`Could not delete message`)}finally{let t=new Set(_(Er));t.delete(e.id),D(Er,t)}}}async function jo(e){qo(),D(lt,!1),await Mo(e.id,e),_(Y)&&_(Q)?.route_id&&window.location.pathname!==ti(_(Y),_(Q).id)&&await oi(_(Y),_(Q).id)}async function Mo(e,t,n=()=>!0){D(kt,null),D(jt,``),D(ct,null),t&&(D(Q,t),D(nr,`thread`));let r=await W(`/api/messages/${e}/thread`);if(!n())return!1;let[i,...a]=[{...r.root,thread_state:r.thread_state},...r.replies];return Ne.seedMessages([i,...a]),Ie.reconcile($(),[i,...a]),D(Q,i),D(nr,`thread`),oo(_(J).map(e=>e.id===i.id?i:e)),D(qe,a),D(it,r.thread_state),!0}async function No(e){let t=await W(`/api/messages/${e}/thread`),n={...t.root,thread_state:t.thread_state};Ne.seedMessages([n]),oo(_(J).map(e=>e.id===n.id?n:e))}function Po(e,t){let n=_(J).find(t=>t.id===e);if(!n)return!1;let r=new Date(t.created_at).getTime();if(Number.isFinite(r)&&ra}async function Fo(){let e=_(zt).trim();if(!e||!_(Q))return;if(_(j)&&!_(P)){D(fn,`This direct message has no active recipient`);return}let t=_(Qn)&&_($n)===`thread`?_(Qn):null;D(zt,``);let n={body:e,nonce:ho()};t&&(n.quoted_message_id=t.id);let r=await W(`/api/messages/${_(Q).id}/thread/replies`,{method:`POST`,body:JSON.stringify(n)});t&&zo(),_(qe).some(e=>e.id===r.message.id)||D(qe,[..._(qe),r.message]),D(it,r.thread_state)}function Io(e,t){D(Qn,e),D($n,t),D(nr,t===`thread`?`thread`:`message`)}function Lo(){return _(Dr)!==null||_(Ot)!==null||_(Qt)||_(en)||_(rn)||_(an)}function Ro(){return _(nr)===`thread`&&_(Q)&&_(tr)?_(tr):_(er)}function zo(){D(Qn,null),D($n,null)}async function Bo(e){let t=e.quoted_message_id;if(!t)return;if(_(xn)?.scrollToMessage(t)??!1){await Uo(t);return}let n=await W(`/api/messages/${t}`);co(n.message,$())&&await Zo(n.message)}async function Vo(){Bn=Date.now()+1200,!(_(U)&&_(xn)?.scrollToDivider(!1))&&await Ho()}async function Ho(){let e=$();if(!e)return;Bn=Date.now()+1200;let t=va(e),n=zn.get(e),r=(n?.boundarySeq===t?n.boundarySeq:t)+1;r<=0||(await Qo(r),await s(),_(xn)?.scrollToDivider(!1))}async function Uo(e){for(let t=0;t<16;t+=1){await s(),await new Promise(e=>requestAnimationFrame(()=>e()));let t=document.querySelector(`[data-message-id="${CSS.escape(e)}"]`);if(t){t.classList.add(`highlight`),window.setTimeout(()=>t.classList.remove(`highlight`),1500);return}}}async function Wo(){if(!_(Y)||!_(Wt).trim()){qo();return}let e=_(Wt).trim();_(kt)&&Ds(),(_(Q)||_(ct))&&Ps();let t=++Yt,n=_(Z)&&_(j)?{workspaceID:_(Y),channelID:``,directConversationID:_(Z),label:`@${Le(_(j),_(G)?.id)}`}:_(X)&&_(T)?{workspaceID:_(Y),channelID:_(X),directConversationID:``,label:`#${rt(_(T))}`}:{workspaceID:_(Y),channelID:``,directConversationID:``,label:``};D(qt,!1),Jt=0;let r={query:e,scope:n,results:[],nextCursor:null,state:`loading`,error:``,loadingMore:!1,moreError:``,activeResultID:``};D(Kt,r);try{let e=await W(`/api/search?${Go(r).toString()}`);if(t!==Yt)return;D(Kt,{...r,results:e.results,nextCursor:e.next_cursor,state:`ready`})}catch(e){if(t!==Yt)return;D(Kt,{...r,state:`error`,error:e instanceof he?e.message:`Search is unavailable right now.`})}}function Go(e,t=``){let n=new URLSearchParams({workspace_id:e.scope.workspaceID,q:e.query});return e.scope.directConversationID?n.set(`direct_conversation_id`,e.scope.directConversationID):e.scope.channelID&&n.set(`channel_id`,e.scope.channelID),t&&n.set(`cursor`,t),n}async function Ko(){let e=_(Kt);if(!e||e.state!==`ready`||!e.nextCursor||e.loadingMore)return;let t=Yt;D(Kt,{...e,loadingMore:!0,moreError:``});try{let n=await W(`/api/search?${Go(e,e.nextCursor).toString()}`);if(t!==Yt||!_(Kt))return;let r=new Set(_(Kt).results.map(e=>e.id));D(Kt,{..._(Kt),results:[..._(Kt).results,...n.results.filter(e=>!r.has(e.id))],nextCursor:n.next_cursor,loadingMore:!1})}catch(e){if(t!==Yt||!_(Kt))return;D(Kt,{..._(Kt),loadingMore:!1,moreError:e instanceof he?e.message:`Couldn’t load more results.`})}}function qo(){Yt+=1,D(Wt,``),D(Kt,null),D(qt,!1),Jt=0}function Jo(e){if(e.channel_name)return`#${e.channel_name}`;if(e.direct_conversation_id){let t=_(q).find(t=>t.id===e.direct_conversation_id);return t?`@${Le(t,_(G)?.id)}`:`Direct message`}return``}async function Yo(e){let t=_(Kt),n=e.channel_id||e.direct_conversation_id||``;if(!(!t||!_(Y)||!n)&&(D(Kt,{...t,activeResultID:e.id}),$()!==n&&(await oi(_(Y),n),await _i(_(Y),n)),$()===n)){if(e.parent_message_id){Jt=document.querySelector(`.search-results-scroll`)?.scrollTop??0;let t=Yt;D(qt,!0);try{if(!await Mo(e.thread_root_id,void 0,()=>t===Yt&&_(qt)&&_(Kt)?.activeResultID===e.id))return}catch(e){throw D(qt,!1),await s(),e}_(Q)?.route_id&&await oi(_(Y),_(Q).id),await s(),document.querySelector(`.thread [data-message-id="${CSS.escape(e.id)}"]`)?.scrollIntoView({block:`center`}),document.querySelector(`.thread .thread-back`)?.focus(),await Uo(e.id);return}if(e.channel_seq&&e.channel_seq>0){await Qo(e.channel_seq,e.id);return}await Li()}}async function Xo(){if(!_(Kt)||!_(qt))return;let e=$();_($n)===`thread`&&zo(),D(Q,null),D(ct,null),D(nr,`message`),D(qe,[]),D(qt,!1),_(Y)&&e&&await oi(_(Y),e),await s();let t=document.querySelector(`.search-results-scroll`);t&&(t.scrollTop=Jt),(_(Kt).activeResultID?document.querySelector(`.search-result[data-result-id="${CSS.escape(_(Kt).activeResultID)}"]`):null)?.focus({preventScroll:!0})}async function Zo(e){let t=e.channel_seq||0;if(t<=0){await Li();return}await Qo(t,e.id)}async function Qo(e,t=``){let n=$();if(!n)return;_(Qe)&&(Ar(``),_(Cn).delete(n),D(Kn,!0));let r=jr();t&&Sn.set(n,{atBottom:!1,anchorMessageID:t,anchorPixelOffset:0});let i=n!==_(Hn);Zi(),i&&D(Kn,!0);try{let i=await W(Vi(`around_seq=${encodeURIComponent(String(e))}&limit=100`));if($()!==n||jr()!==r)return;Wi(n,Ui(i),`around`),await s(),t&&(_(xn)?.scrollToMessage(t),await Uo(t))}finally{$()===n&&D(Kn,!1)}}async function $o(e){let t=e.currentTarget,n=t.files?.[0];if(!n||!_(Y))return;let r=await ft(n),i=new FormData;i.set(`workspace_id`,_(Y)),i.set(`file`,n),r.width>0&&i.set(`width`,String(r.width)),r.height>0&&i.set(`height`,String(r.height)),r.durationMS>0&&i.set(`duration_ms`,String(r.durationMS));let a=await W(`/api/uploads`,{method:`POST`,body:i});D(Xt,a.upload),t.value=``}async function es(e=_(Y)){let t=++hr;if(!e){D(q,[]);return}let n=await W(`/api/dms?workspace_id=${e}`);t===hr&&e===_(Y)&&(D(q,n.conversations),_(Z)&&!_(q).some(e=>e.id===_(Z))&&D(Z,``))}function ts(e){D(q,_(q).some(t=>t.id===e.id)?_(q).map(t=>t.id===e.id?e:t):[..._(q),e])}async function ns(e){let t=e.trim();t&&(await is(t),D(Ht,``),D(an,!1))}async function rs(e){D(Yn,!1);let t=ti(_(Y),e);e===_(Z)&&!_(X)&&window.location.pathname===t||await oi(_(Y),e)}async function is(e){let t=e.trim();if(!_(Y)||!t)return;let n=_(q).find(e=>e.members.some(e=>e.id===t));if(n){D(Yn,!1),await oi(_(Y),n.id);return}let r=await W(`/api/dms`,{method:`POST`,body:JSON.stringify({workspace_id:_(Y),member_ids:[t]})});ts(r.conversation),D(Yn,!1),await oi(_(Y),r.conversation.id)}function as(){Tr&&clearTimeout(Tr),Tr=void 0,D(wr,null)}function os(e,t){as(),D(wr,{conversation:e,restoreRoute:t,title:Le(e,_(G)?.id)}),Tr=setTimeout(()=>{D(wr,null),Tr=void 0},8e3)}async function ss(){let e=_(wr);if(e){as();try{let t=await W(`/api/dms/${e.conversation.id}/open`,{method:`POST`});ts(t.conversation),e.restoreRoute&&await oi(e.conversation.workspace_id,t.conversation.id),D(fn,`direct message restored`)}catch(e){D(fn,e instanceof Error?e.message:`Could not restore direct message`)}}}async function cs(e){if(!e)return;let t=_(q).find(t=>t.id===e),n=_(Z)===e;if(await W(`/api/dms/${e}`,{method:`DELETE`}),D(q,_(q).filter(t=>t.id!==e)),t&&os(t,n),n){si();let e=_(K)[0]?.id||``;D(Z,``),D(X,e),e&&mi(_(Y),e),await oi(_(Y),e),await Li()}}function ls(){if(xr+=1,yn?.close(),yn=null,D(hn,!1),!_(Y))return;let e=_(Y);yn=He({workspaceID:e,onEvent:ds,onOpen:async(t,n)=>{await us(e,t,_n===e,n),t()&&(_n=e,e===_(Y)&&_(fn)===gn&&D(fn,`ready`),gn=``)},onError:t=>{e===_(Y)&&(gn=t instanceof Error?t.message:`Could not process realtime event`,D(fn,gn))},onStatusChange:e=>{D(hn,e)}})}async function us(e,t=()=>!0,n=!0,r=!0){let i=++xr;if(!e||e!==_(Y)||!t())return;let a=_(Q)?.id||``,o=_(ct)?.kind===`bot`?_(ct).id:``;if(D(rr,[]),D(ar,[]),!r){await Promise.all([Oi(e),ki(e,!0)]);return}if(Ne.clear(),await Promise.all([$r(),Ci(!1,!1,!1),es(e),Ei(e),Oi(e),ki(e,!0),wi(e)]),!(i!==xr||e!==_(Y)||!t())){if(_(X)&&!_(K).some(e=>e.id===_(X))&&D(X,``),_(Z)&&!_(q).some(e=>e.id===_(Z))&&D(Z,``),!_(X)&&!_(Z)){let t=ci(e);if(t){let n=_(q).some(e=>e.id===t);D(Z,n?t:``),D(X,n?``:t),n||mi(e,t),await oi(e,t,!0)}}if(!(i!==xr||e!==_(Y)||!t())&&(await Li(n),!(i!==xr||e!==_(Y)||!t())&&(await Is(),!(i!==xr||e!==_(Y)||!t())&&(a&&_(Q)?.id===a&&await Mo(a,_(Q)),o&&_(ct)?.id===o)))){let e=ys(o);D(ct,e&&!e.deleted_at?e:null)}}}async function ds(e){if((e.type===`pin.added`||e.type===`pin.removed`)&&e.channel_id===_(X)&&!_(Z)){await Is();return}if(e.type===`typing.started`||e.type===`typing.stopped`){gs(e);return}if(e.type===`agent.progress`){_s(e);return}if(e.type===`channel.read`||e.type===`dm.read`){ms(e);return}if(e.type===`bot_command.updated`){e.workspace_id===_(Y)&&ki(e.workspace_id,!0).catch(t=>{e.workspace_id===_(Y)&&(D(fn,t instanceof Error?t.message:`Could not refresh bot commands`),ls())});return}if(e.type===`bot.deleted`){e.workspace_id===_(Y)&&await fs(e);return}if(e.type===`bot.membership_removed`){e.workspace_id===_(Y)&&await ps(e);return}if((e.type===`channel.created`||e.type===`channel.updated`)&&e.workspace_id===_(Y)){await Ci(!1,!1,!1);return}if(e.type===`member.moderation_updated`&&e.workspace_id===_(Y)){let t=_(Z),n=e.payload.user_id===_(G)?.id;if(await $r(),await Ei(),await Ci(!1,n,n),n){if(await es(),t&&(_(q).some(e=>e.id===t)?(D(Z,t),D(X,``)):D(Z,``)),!_(X)&&!_(Z)){Wi(``,Ui({messages:[],oldest_seq:0,newest_seq:0,has_older:!1,has_newer:!1}),`replace`);return}await Li()}return}if(e.workspace_id===_(Y)&&e.payload.topic_id&&!_(Ve).some(t=>t.id===e.payload.topic_id)&&await wi(e.workspace_id),La(e))return;(e.type===`message.updated`||e.type===`message.deleted`)&&_(vt).has(e.payload.message_id||``)&&await Is();let t=(e.channel_id===_(X)||e.payload.direct_conversation_id===_(Z))&&!(e.type===`message.created`&&_(Qe)&&e.payload.topic_id!==_(Qe));if(t&&(e.type===`reaction.added`||e.type===`reaction.removed`)){Ne.applyEvent(e);return}if(ja(e,t),e.type===`message.created`&&!t&&(await Va(e)||hs(e)),t&&(e.type===`message.created`||e.type===`message.updated`||e.type===`message.deleted`)){let t=e.payload.nonce;if(e.type===`message.created`&&t&&mo.has(t))return;let n=uo();e.type===`message.created`&&!n?(Bn=Date.now()+1200,Yi($())):e.type===`message.created`?await oa():await Li(),e.type===`message.created`&&hs(e,n),e.type===`message.created`&&n&&(await lo(),ga({all:!0,seq:wa(e)}))}let n=e.payload.root_message_id||e.payload.message_id;n&&e.type===`thread.state_updated`&&Po(n,e)?_(Q)?.id===n?await Mo(n,_(Q)):await No(n):e.type!==`thread.reply_created`&&_(Q)&&n===_(Q).id&&await Mo(_(Q).id,_(Q))}async function fs(e){let t=e.payload.bot_user_id||``;if(!t)return;let n=e.payload.deleted_at||e.created_at,r=e.payload.former_handle||``,i=e=>e.id===t?{...e,handle:``,former_handle:r,deleted_at:n}:e;D(q,_(q).map(e=>({...e,members:e.members.map(i)}))),D(bt,_(bt).filter(e=>e.user.id!==t)),D(St,_(St).filter(e=>e.bot_user_id!==t)),D(Ct,_(Ct).filter(e=>e.bot.id!==t)),D(rr,_(rr).filter(e=>e.userID!==t)),_(Kt)&&D(Kt,{..._(Kt),results:_(Kt).results.map(e=>({...e,author:i(e.author)}))}),_(ct)?.id===t&&D(ct,null);let a=_(Q)?.id||``;await Promise.all([es(),Ei(),Oi(),ki()]),Di(),await Li(),a&&await Mo(a)}async function ps(e){let t=e.payload.bot_user_id||``;t&&(D(bt,_(bt).filter(e=>e.user.id!==t)),D(St,_(St).filter(e=>e.bot_user_id!==t)),D(Ct,_(Ct).filter(e=>e.bot.id!==t)),_(ct)?.id===t&&D(ct,null),await Promise.all([es(e.workspace_id),Ei(e.workspace_id),Oi(e.workspace_id),ki(e.workspace_id)]),Di(e.workspace_id))}function ms(e){let t=e.payload,n=typeof t.user_id==`string`?t.user_id:``;if(!n||n!==_(G)?.id)return;let r=e.seq??t.last_read_seq??t.seq,i=typeof r==`number`?r:Number(r)||0;if(e.type===`channel.read`){let n=typeof t.channel_id==`string`?t.channel_id:e.channel_id||``;if(!n)return;D(K,_(K).map(e=>{if(e.id!==n)return e;let t=Math.max(e.last_read_seq||0,i);return{...e,last_read_seq:t,unread_count:t>=(e.last_seq||0)?0:e.unread_count||0}}))}else{let e=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;if(!e)return;D(q,_(q).map(t=>{if(t.id!==e)return t;let n=Math.max(t.last_read_seq||0,i);return{...t,last_read_seq:n,unread_count:n>=(t.last_seq||0)?0:t.unread_count||0}}))}}function hs(e,t){let n=e.payload,r=typeof n.kind==`string`?n.kind:``;if(r===`agent_commentary`||r===`agent_tool`)return;let i=typeof n.author_id==`string`?n.author_id:``;if(i&&i===_(G)?.id||n.parent_message_id)return;let a=wa(e),{channelID:o,dmID:s}=Ta(e);if(o){let n=o===_(X)&&!_(Z),r=n&&!_(Qe)?t??uo():!1,i=_(K).find(e=>e.id===o),s=a>0?a:(i?.last_seq||0)+1;n&&!r&&(i?.unread_count||0)===0&&Ca(o,i?.last_read_seq||0,e.created_at),D(K,_(K).map(e=>{if(e.id!==o)return e;let t=Math.max(e.last_seq||0,s),i=n&&!r&&(e.unread_count||0)===0?Math.max(e.last_read_seq||0,s-1):e.last_read_seq||0,a=r?0:(e.unread_count||0)+1;return{...e,last_seq:t,last_read_seq:i,unread_count:a}}))}else if(s){let n=s===_(Z),r=n?t??uo():!1,i=_(q).find(e=>e.id===s),o=a>0?a:(i?.last_seq||0)+1;n&&!r&&(i?.unread_count||0)===0&&Ca(s,i?.last_read_seq||0,e.created_at),D(q,_(q).map(e=>{if(e.id!==s)return e;let t=Math.max(e.last_seq||0,o),i=n&&!r&&(e.unread_count||0)===0?Math.max(e.last_read_seq||0,o-1):e.last_read_seq||0,a=r?0:(e.unread_count||0)+1;return{...e,last_seq:t,last_read_seq:i,unread_count:a}}))}}function gs(e){let t=e.payload,n=typeof t.user_id==`string`?t.user_id:``;if(!n||n===_(G)?.id)return;let r=e.channel_id||(typeof t.channel_id==`string`?t.channel_id:``),i=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;if(!(_(X)&&r===_(X)||_(Z)&&i===_(Z)))return;if(e.type===`typing.stopped`){D(rr,_(rr).filter(e=>e.userID!==n));return}let a=ys(n),o=_(rr).filter(e=>e.userID!==n);o.push({userID:n,user:a,expiresAt:Date.now()+jn}),D(rr,o),bs()}function _s(e){let t=e.payload,n=e.channel_id||(typeof t.channel_id==`string`?t.channel_id:``),r=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;if(!(_(X)&&n===_(X)||_(Z)&&r===_(Z)))return;let i=typeof t.turn_id==`string`?t.turn_id:``,a=typeof t.op==`string`?t.op:``;if(!i||!a)return;let o=typeof t.user_id==`string`?t.user_id:``,s=Na(o,i);if(a===`clear`){D(ar,_(ar).filter(e=>e.turnId===i?o&&e.userId?e.key!==s:!1:!0));return}let c=t.line,l=c&&typeof c.id==`string`?c.id:``;if(!l)return;let u=c&&typeof c.text==`string`?c.text:``,d=c&&typeof c.title==`string`?c.title:``,f=u||d,p=c&&typeof c.tool_name==`string`?c.tool_name:typeof c?.toolName==`string`?c.toolName:void 0,m=c&&typeof c.status==`string`?c.status:void 0,h=c&&typeof c.kind==`string`?c.kind:void 0,g=_(ar).find(e=>e.key===s),v=g?.lines.find(e=>e.id===l),y={id:l,kind:h??v?.kind??`lifecycle`,text:f||v?.text||``,toolName:p??v?.toolName,status:m??v?.status,finalized:a===`finalize`||(v?.finalized??!1)};if(!v&&!y.text&&!y.toolName)return;let b=Date.now()+Pn;if(!g)D(ar,[..._(ar),{key:s,turnId:i,userId:o,lines:[y],expiresAt:b}]);else{let e=g.lines.some(e=>e.id===l)?g.lines.map(e=>e.id===l?y:e):[...g.lines,y];D(ar,_(ar).map(t=>t.key===s?{...t,lines:e,expiresAt:b}:t))}vs()}function vs(){or||=window.setInterval(()=>{let e=Date.now(),t=_(ar).filter(t=>t.expiresAt>e);t.length!==_(ar).length&&D(ar,t),t.length===0&&or&&(window.clearInterval(or),or=void 0)},1e3)}function ys(e){if(_(G)?.id===e)return _(G);let t=_(xt).find(t=>t.id===e);if(t)return t;let n=_(J).find(t=>t.author?.id===e)?.author;if(n)return n;let r=_(qe).find(t=>t.author?.id===e)?.author;if(r)return r;if(_(Q)?.author?.id===e)return _(Q).author;let i=_(bt).find(t=>t.user.id===e)?.user;if(i)return i;for(let t of _(q)){let n=t.members.find(t=>t.id===e);if(n)return n}}function bs(){ir||=window.setInterval(()=>{let e=Date.now(),t=_(rr).filter(t=>t.expiresAt>e);t.length!==_(rr).length&&D(rr,t),t.length===0&&ir&&(window.clearInterval(ir),ir=void 0)},1e3)}function xs(){_(Y)&&(!_(X)&&!_(Z)||Ut({workspaceID:_(Y),channelID:_(X)||void 0,directConversationID:_(Z)||void 0}))}function Ss(e){!e||e.deleted_at||(qo(),D(kt,null),D(jt,``),D(Q,null),D(lt,!1),D(ct,e),(_(o)===`owner`||_(o)===`moderator`)&&!_(bt).some(t=>t.user.id===e.id)&&Ei())}function Cs(e){if(e.key===`Escape`&&_(Qn)&&_($n)!==`thread`){e.preventDefault(),zo();return}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),_o())}function ws(e){if(e.key===`Escape`&&_(Qn)&&_($n)===`thread`){e.preventDefault(),zo();return}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Fo())}function Ts(e,t){Lo()||D(Ot,{url:e,title:t})}function Es(e){D(Mt,document.activeElement instanceof HTMLElement?document.activeElement:null),Nt=_(Q)?document.querySelector(`.thread-scroll`)?.scrollTop??null:null,D(jt,_(Wn)),D(kt,e),s().then(()=>{document.querySelector(`.artifact-viewer__actions > button:last-child`)?.focus()})}function Ds(){let e=_(Mt),t=_(kt)?.id||``;D(kt,null),D(jt,``),D(Mt,null),s().then(()=>{if(Nt!==null){let e=document.querySelector(`.thread-scroll`);e&&(e.scrollTop=Nt)}if(Nt=null,e?.isConnected){e.focus({preventScroll:!0});return}(_(Q)?document.querySelector(`.thread`):document)?.querySelector(`[data-artifact-upload-id="${CSS.escape(t)}"]`)?.focus({preventScroll:!0})})}function Os(e,t){for(let e of Lt)e.inert=!1;if(Lt.clear(),!(!e||!_(Ft)||!t))for(let e of _(Ft).children)!(e instanceof HTMLElement)||e===t||e.inert||(e.inert=!0,Lt.add(e))}function ks(e){if(!_(kt)||!_(Xn)||e.key!==`Tab`||!_(Pt))return;let t=Array.from(_(Pt).querySelectorAll(`a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])`)).filter(e=>!e.inert&&e.getClientRects().length>0);if(t.length===0){e.preventDefault(),_(Pt).focus();return}let n=t[0],r=t[t.length-1];e.shiftKey&&(document.activeElement===n||!_(Pt).contains(document.activeElement))?(e.preventDefault(),r.focus()):!e.shiftKey&&(document.activeElement===r||!_(Pt).contains(document.activeElement))&&(e.preventDefault(),n.focus())}function As(e){let t=e.target;t instanceof HTMLImageElement&&t.closest(`.markdown`)&&(e.preventDefault(),Ts(Re(t),t.alt||`Image`))}function js(e){let t=_(Rt)&&!_(Rt).endsWith(` + active ${_(t).active_token_count===1?`token`:`tokens`}`)},[()=>p(_(t).bot.handle)]),n(`click`,T,()=>s(_(t))),u(e,r)}),H(g),H(r),d(()=>c(o,_(t).workspace.name)),n(`click`,h,()=>s(_(t).entries[0])),u(e,r)}),H(t),u(e,t)};N(v,e=>{_(i)===`loading`?e(y):_(i)===`error`?e(b,1):_(r).length===0?e(S,2):e(w,-1)}),u(e,g),ee()}U([`click`]);var Ui=o(``),Wi=o(``),Gi=o(`

          Account

          Appearance

          Changes apply instantly and follow your account on every device.

          Live preview — updates as you pick

          Color mode System follows your OS setting
          Board theme Palette for boards, accents, and highlights
          Message layout How agent activity attaches to replies
          Density Compact fits more messages on screen
          `,1);function Ki(e,r){x(r,!0);let i=A(()=>r.user.display_name||r.user.handle||`You`),a=A(()=>(_(i)[0]??`Y`).toUpperCase()),o=F(L(ge())),s=F(L(Ee())),f=F(L(Oe())),p=F(L(xe()));t(()=>{r.user.appearance_preferences,D(o,ge(),!0),D(s,Ee(),!0),D(f,Oe(),!0),D(p,xe(),!0)});function m(e){D(o,e,!0),we(e)}function h(e){D(s,e,!0),ve(e)}function g(e){D(f,e,!0),ye(e)}function v(e){D(p,e,!0),Se(e)}function y(e,t,n,r){let i;switch(e.key){case`ArrowRight`:case`ArrowDown`:i=(n+1)%t;break;case`ArrowLeft`:case`ArrowUp`:i=(n-1+t)%t;break;case`Home`:i=0;break;case`End`:i=t-1;break;default:return}e.preventDefault(),r(i),(e.currentTarget.parentElement?.querySelectorAll(`[role="radio"]`))?.item(i).focus()}var b=Gi(),S=C(M(b),2),E=B(S),O=C(B(E),2),k=B(O),j=B(k),N=B(j,!0);H(j);var P=C(j,2),te=B(P),ne=B(te),I=B(ne,!0);H(ne),T(2),H(te),T(2),H(P),H(k);var re=C(k,4),z=B(re),ie=B(z,!0);H(z);var ae=C(z,2),V=B(ae),oe=B(V),se=B(oe,!0);H(oe),T(2),H(V),T(2),H(ae),H(re),H(O),H(E);var ce=C(E,4),U=B(ce),le=C(B(U),2);l(le,23,()=>Ce,e=>e.id,(e,t,r)=>{var i=Ui();let a;var s=B(i,!0);H(i),d(()=>{a=w(i,1,`appearance-seg__btn`,null,a,{"is-active":_(o)===_(t).id}),R(i,`aria-checked`,_(o)===_(t).id),R(i,`tabindex`,_(o)===_(t).id?0:-1),c(s,_(t).label)}),n(`click`,i,()=>m(_(t).id)),n(`keydown`,i,e=>y(e,Ce.length,_(r),e=>m(Ce[e].id))),u(e,i)}),H(le),H(U);var ue=C(U,2),de=C(B(ue),2),fe=B(de),W=B(fe,!0);H(fe);var pe=C(fe,2);l(pe,23,()=>De,e=>e.id,(e,t,r)=>{var i=Wi();let a;d(()=>{a=w(i,1,`board-chip`,null,a,{"is-active":_(s)===_(t).id}),R(i,`aria-checked`,_(s)===_(t).id),R(i,`tabindex`,_(s)===_(t).id?0:-1),R(i,`data-board`,_(t).id),R(i,`aria-label`,`${_(t).label} — ${_(t).blurb}`),R(i,`title`,`${_(t).label} — ${_(t).blurb}`)}),n(`click`,i,()=>h(_(t).id)),n(`keydown`,i,e=>y(e,De.length,_(r),e=>h(De[e].id))),u(e,i)}),H(pe),H(de),H(ue);var me=C(ue,2),he=C(B(me),2);l(he,23,()=>be,e=>e.id,(e,t,r)=>{var i=Ui();let a;var o=B(i,!0);H(i),d(()=>{a=w(i,1,`appearance-seg__btn`,null,a,{"is-active":_(f)===_(t).id}),R(i,`aria-checked`,_(f)===_(t).id),R(i,`tabindex`,_(f)===_(t).id?0:-1),R(i,`title`,_(t).blurb),c(o,_(t).label)}),n(`click`,i,()=>g(_(t).id)),n(`keydown`,i,e=>y(e,be.length,_(r),e=>g(be[e].id))),u(e,i)}),H(he),H(me);var _e=C(me,2),ke=C(B(_e),2);l(ke,23,()=>Te,e=>e.id,(e,t,r)=>{var i=Ui();let a;var o=B(i,!0);H(i),d(()=>{a=w(i,1,`appearance-seg__btn`,null,a,{"is-active":_(p)===_(t).id}),R(i,`aria-checked`,_(p)===_(t).id),R(i,`tabindex`,_(p)===_(t).id?0:-1),R(i,`title`,_(t).blurb),c(o,_(t).label)}),n(`click`,i,()=>v(_(t).id)),n(`keydown`,i,e=>y(e,Te.length,_(r),e=>v(Te[e].id))),u(e,i)}),H(ke),H(_e),H(ce),H(S),d(e=>{R(E,`data-layout`,_(f)),R(E,`data-density`,_(p)),c(N,_(a)),c(I,_(i)),c(ie,_(a)),c(se,_(i)),c(W,e)},[()=>De.find(e=>e.id===_(s))?.label]),u(e,b),ee()}U([`click`,`keydown`]);var qi=o(` `,1),Ji=o(` `,1),Yi=o(` `,1),Xi=o(` `,1),Zi=o(`
        • `),Qi=o(`
        • `),$i=o(`

            `),ea=o(`

            Loading...

            `),ta=o(`

            `),na=o(`

            Account

            Profile settings

            How you appear across ClickClack.

            `,1),ra=o(`

            Account

            Notifications

            Decide when and how ClickClack should reach you.

            `,1),ia=o(``);function aa(e,r){x(r,!0);let i=S(r,`workspaces`,19,()=>[]),o=S(r,`initialSection`,3,je),s=S(r,`isDesktop`,3,!1),f=F(L(je)),p=F(null),m=A(()=>_(p)?.id===r.user.id?_(p):r.user),h=F(`ready`),v=F(``);t(()=>{D(f,o(),!0)}),ie(()=>{y()});async function y(){D(h,`loading`);try{let e=await _e();D(p,e.user,!0),r.onUserUpdated?.(e.user),D(h,`ready`)}catch(e){if(e instanceof he&&(e.status===401||e.status===403)){D(h,`error`),D(v,`Sign in to manage your account`);return}D(h,`error`),D(v,e instanceof Error?e.message:`Could not load your account`,!0)}}function b(e){D(p,e,!0),r.onUserUpdated?.(e)}function T(e){e.target===e.currentTarget&&r.onClose()}function E(e){if(e.key!==`Escape`)return;let t=e.target;t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable)||(e.preventDefault(),r.onClose())}function O(e,t){r.onClose(),le(ke(e.route_id||e.id,t))}var k=ia();g(`keydown`,I,E);var j=B(k),P=B(j),te=C(P,2),ne=B(te),re=C(B(ne),2);l(re,21,()=>Me,e=>e.id,(e,t)=>{var r=Zi(),i=B(r);let a;var o=B(i),s=e=>{var n=qi(),r=M(n);qe(r,{class:`settings-modal__rail-avatar`,get id(){return _(m).id},get name(){return _(m).display_name},get src(){return _(m).avatar_url},size:18});var i=C(r,2),a=B(i,!0);H(i),d(()=>c(a,_(m).display_name||_(t).label)),u(e,n)},l=e=>{var n=Ji(),r=C(M(n),2),i=B(r,!0);H(r),d(()=>c(i,_(t).label)),u(e,n)},p=e=>{var n=Yi(),r=C(M(n),2),i=B(r,!0);H(r),d(()=>c(i,_(t).label)),u(e,n)},h=e=>{var n=Xi(),r=C(M(n),2),i=B(r,!0);H(r),d(()=>c(i,_(t).label)),u(e,n)};N(o,e=>{_(t).id===`profile`?e(s):_(t).id===`appearance`?e(l,1):_(t).id===`notifications`?e(p,2):_(t).id===`bots`&&e(h,3)}),H(i),H(r),d(()=>{a=w(i,1,`settings-modal__rail-item`,null,a,{"is-active":_(f)===_(t).id}),R(i,`aria-current`,_(f)===_(t).id?`page`:void 0)}),n(`click`,i,()=>D(f,_(t).id,!0)),u(e,r)}),H(re),H(ne);var z=C(ne,2);l(z,17,i,e=>e.id,(e,t)=>{var r=$i(),i=B(r),o=B(i);H(i);var s=C(i,2);l(s,21,()=>Ae,e=>e.id,(e,r)=>{var i=a(),o=M(i),s=e=>{var i=Qi(),a=B(i),o=C(B(a),2),s=B(o,!0);H(o),H(a),H(i),d(()=>c(s,_(r).label)),n(`click`,a,()=>O(_(t),_(r).slug)),u(e,i)},l=A(()=>!_(r).managersOnly||G(_(t).role));N(o,e=>{_(l)&&e(s)}),u(e,i)}),H(s),H(r),d(()=>{R(i,`title`,_(t).name),c(o,`Workspace · ${_(t).name??``}`)}),u(e,r)}),H(te);var ae=C(te,2),V=B(ae),oe=e=>{var t=ea();u(e,t)},se=e=>{var t=ta(),n=B(t,!0);H(t),d(()=>c(n,_(v))),u(e,t)},ce=e=>{var t=na();ki(C(M(t),2),{get user(){return _(m)},get hideCommentary(){return r.hideCommentary},get hideToolCalls(){return r.hideToolCalls},get userAlign(){return r.userAlign},get otherAlign(){return r.otherAlign},get isDesktop(){return s()},onUserUpdated:b,get onSaved(){return r.onClose},get onHideCommentary(){return r.onHideCommentary},get onHideToolCalls(){return r.onHideToolCalls},get onUserAlign(){return r.onUserAlign},get onOtherAlign(){return r.onOtherAlign},get onBrowserNotificationsChanged(){return r.onBrowserNotificationsChanged}}),u(e,t)},U=e=>{Ki(e,{get user(){return _(m)}})},ue=e=>{var t=ra();Ni(C(M(t),2),{get user(){return _(m)},get isDesktop(){return s()},onUserUpdated:b,get onBrowserNotificationsChanged(){return r.onBrowserNotificationsChanged}}),u(e,t)},de=e=>{Hi(e,{get onClose(){return r.onClose}})};N(V,e=>{_(h)===`loading`?e(oe):_(h)===`error`?e(se,1):_(f)===`profile`?e(ce,2):_(f)===`appearance`?e(U,3):_(f)===`notifications`?e(ue,4):_(f)===`bots`&&e(de,5)}),H(ae),H(j),H(k),n(`click`,k,T),n(`click`,P,function(...e){r.onClose?.apply(this,e)}),u(e,k),ee()}U([`click`]);var oa=o(`
            No thread open Hover any message and tap the bubble to keep side conversations tidy.
            `);function sa(e){var t=oa();u(e,t)}var ca=o(``),$=o(`

            `,1),la=o(``),ua=o(``),da=o(``),fa=o(``),pa=o(``),ma=o(``),ha=o(``),ga=o(`
            `),_a=o(`Connecting…`),va=o(`
            `);function ya(e,t){x(t,!0);function r(e){return e===`muted`?`Channel muted - click to change`:e===`mentions`?`Notifications for @mentions only - click to change`:`All notifications enabled - click to change`}let i=S(t,`channelNotifPreference`,3,void 0),a=S(t,`channelNotifSaving`,3,!1),o=S(t,`channelSettingsAvailable`,3,!1),s=S(t,`pinsAvailable`,3,!1),l=S(t,`pinnedOpen`,3,!1),f=S(t,`onOpenChannelSettings`,3,()=>{}),p=S(t,`onToggleChannelNotifications`,3,()=>{}),m=A(()=>nt(t.externalURL));var h=va(),v=B(h),y=B(v),b=B(y),E=B(b),D=C(B(E),2);H(E),H(b);var O=C(b,2),P=B(O,!0);H(O);var F=C(O,2),te=e=>{var n=$(),r=C(M(n),2),i=B(r,!0);H(r);var a=C(r,2),o=e=>{var t=ca();d(()=>R(t,`href`,_(m))),u(e,t)};N(a,e=>{_(m)&&e(o)}),d(()=>{R(r,`title`,t.channelTitle),c(i,t.channelTitle)}),u(e,n)};N(F,e=>{t.channelTitle&&e(te)}),H(y);var ne=C(y,2),I=C(B(ne),2);k(I);var re=C(I,2),L=e=>{var r=la();n(`click`,r,function(...e){t.onResetSearch?.apply(this,e)}),u(e,r)};N(re,e=>{t.searchQuery&&e(L)}),T(2),H(ne);var z=C(ne,2),ie=e=>{var c=ga(),m=B(c),h=e=>{var t=pa(),o=B(t),s=e=>{var t=ua();u(e,t)},c=e=>{var t=da();u(e,t)},l=e=>{var t=fa();u(e,t)};N(o,e=>{i()===`muted`?e(s):i()===`mentions`?e(c,1):e(l,-1)}),H(t),d((e,n)=>{R(t,`title`,e),R(t,`aria-label`,n),R(t,`aria-busy`,a()),t.disabled=a()},[()=>r(i()),()=>r(i())]),n(`click`,t,function(...e){p()?.apply(this,e)}),u(e,t)};N(m,e=>{i()&&e(h)});var g=C(m,2),_=e=>{var r=ma();let i;d(()=>{R(r,`title`,l()?`Close pinned items`:`Pinned items`),R(r,`aria-label`,l()?`Close pinned items`:`Pinned items`),i=w(r,1,``,null,i,{active:l()})}),n(`click`,r,function(...e){t.onPinnedItems?.apply(this,e)}),u(e,r)};N(g,e=>{s()&&e(_)});var v=C(g,2),y=e=>{var t=ha();n(`click`,t,function(...e){f()?.apply(this,e)}),u(e,t)};N(v,e=>{o()&&e(y)}),H(c),u(e,c)};N(z,e=>{(i()||s()||o())&&e(ie)});var ae=C(z,2),V=e=>{var t=_a();u(e,t)};N(ae,e=>{t.connected||e(V)}),H(v),H(h),d(()=>{R(h,`data-platform`,t.platform),R(b,`aria-label`,t.mobileNavigation?t.mobileNavOpen?`Close navigation`:`Open navigation`:t.sidebarCollapsed?`Expand sidebar`:`Collapse sidebar`),R(b,`title`,t.mobileNavigation?t.mobileNavOpen?`Close navigation`:`Open navigation`:t.sidebarCollapsed?`Expand sidebar`:`Collapse sidebar`),R(D,`d`,t.mobileNavigation?t.mobileNavOpen?`m15 9-3 3 3 3`:`m9 9 3 3-3 3`:t.sidebarCollapsed?`m13 9 3 3-3 3`:`m16 9-3 3 3 3`),c(P,t.workspaceName||`ClickClack`),j(I,t.searchQuery)}),n(`click`,b,function(...e){t.onToggleSidebar?.apply(this,e)}),n(`click`,O,function(...e){t.onOpenWorkspaceSettings?.apply(this,e)}),g(`submit`,ne,e=>{e.preventDefault(),t.onSearch()}),n(`input`,I,e=>t.onSearchQuery(e.currentTarget.value)),u(e,h),ee()}U([`click`,`input`]);var ba=o(`

            `),xa=o(``),Sa=o(``),Ca=o(``),wa=o(``),Ta=o(`

            `,1),Ea=o(`

            ClickClack

            `),Da=o(``),Oa=o(``),ka=o(``),Aa=o(``),ja=o(`

            `);function Ma(e,t){x(t,!0);function r(e){return e===`muted`?`Channel muted - click to change`:e===`mentions`?`Notifications for @mentions only - click to change`:`All notifications enabled - click to change`}let i=S(t,`pinnedOpen`,3,!1),a=S(t,`channelNotifPreference`,3,void 0),o=S(t,`channelNotifSaving`,3,!1),s=S(t,`channelSettingsAvailable`,3,!1),l=S(t,`onOpenChannelSettings`,3,()=>{}),f=S(t,`onToggleChannelNotifications`,3,()=>{}),p=A(()=>t.selectedDirect?void 0:nt(t.selectedChannel?.external_url));var m=ja(),h=B(m),v=B(h),y=e=>{var n=ba(),r=B(n,!0);H(n),d(e=>c(r,e),[()=>`@${Le(t.selectedDirect,t.currentUserID)}`]),u(e,n)},b=e=>{var i=Ta(),s=M(i),l=B(s,!0);H(s);var p=C(s,2),m=e=>{var t=wa(),i=B(t),s=e=>{var t=xa();u(e,t)},c=e=>{var t=Sa();u(e,t)},l=e=>{var t=Ca();u(e,t)};N(i,e=>{a()===`muted`?e(s):a()===`mentions`?e(c,1):e(l,-1)}),H(t),d((e,n)=>{R(t,`title`,e),R(t,`aria-label`,n),R(t,`aria-busy`,o()),t.disabled=o()},[()=>r(a()),()=>r(a())]),n(`click`,t,function(...e){f()?.apply(this,e)}),u(e,t)};N(p,e=>{a()&&e(m)}),d(e=>c(l,e),[()=>`#${rt(t.selectedChannel)}`]),u(e,i)},E=e=>{var t=Ea();u(e,t)};N(v,e=>{t.selectedDirect?e(y):t.selectedChannel?e(b,1):e(E,-1)});var D=C(v,4),O=B(D,!0);H(D),H(h);var P=C(h,2),F=C(B(P),2);k(F);var te=C(F,2),ne=e=>{var r=Da();n(`click`,r,function(...e){t.onResetSearch?.apply(this,e)}),u(e,r)};N(te,e=>{t.searchQuery&&e(ne)}),T(2),H(P);var I=C(P,2),re=B(I),L=e=>{var t=Oa();d(()=>R(t,`href`,_(p))),u(e,t)};N(re,e=>{_(p)&&e(L)});var z=C(re,2);let ie;var ae=C(z,2),V=e=>{var r=ka();let a;d(()=>{R(r,`title`,i()?`Close pinned items`:`Pinned items`),R(r,`aria-label`,i()?`Close pinned items`:`Pinned items`),a=w(r,1,``,null,a,{active:i()})}),n(`click`,r,function(...e){t.onPinnedItems?.apply(this,e)}),u(e,r)};N(ae,e=>{t.selectedChannel&&e(V)});var oe=C(ae,2),se=e=>{var t=Aa();n(`click`,t,function(...e){l()?.apply(this,e)}),u(e,t)};N(oe,e=>{t.selectedChannel&&s()&&e(se)}),H(I),H(m),d(()=>{c(O,t.workspaceName||`no workspace`),j(F,t.searchQuery),R(z,`title`,t.threadOpen?`Close thread`:`Open a message thread`),R(z,`aria-label`,t.threadOpen?`Close thread`:`Open a message thread`),ie=w(z,1,``,null,ie,{active:t.threadOpen})}),g(`submit`,P,e=>{e.preventDefault(),t.onSearch()}),n(`input`,F,e=>t.onSearchQuery(e.currentTarget.value)),n(`click`,z,function(...e){t.onToggleThread?.apply(this,e)}),u(e,m),ee()}U([`click`,`input`]);function Na(e,t){return`${e}\u0000${t}`}function Pa(e,t,n){let r=t.find(t=>t.bot.id===e)?.bot??n(e);return r?.display_name?.trim()||(r?.handle?`@${r.handle}`:``)}function Fa(e,t,n){let r=new Set,i=[];for(let a of e){if(!a.lines.some(e=>!e.finalized)||a.userId&&r.has(a.userId))continue;a.userId&&r.add(a.userId);let e=Pa(a.userId,t,n);e&&i.push(e)}return i}async function Ia(e){return(await W(`/api/workspaces/${e}/bot-commands`)).bot_commands??[]}function La(e){let t=e.trim().toLowerCase();return t?t.startsWith(`/`)?t:`/${t}`:``}function Ra(e){let t=/^(\/\S+)\s*([\s\S]*)$/.exec(e);return t?{command:La(t[1]),text:t[2].trim()}:null}function za(e,t){return e.find(e=>!e.revoked_at&&La(e.command)===t)}async function Ba(e,t,n){let r=new URLSearchParams;r.set(`command`,t),r.set(`text`,n);let i=await fetch(de(`/api/hooks/slash/${e}`),{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/x-www-form-urlencoded`,"X-ClickClack-CSRF":`1`},body:r.toString()}),a=await i.text();if(!i.ok)throw new he(i.status,a);let o=a?JSON.parse(a):{};return{response_type:o.response_type||`in_channel`,text:(o.text||``).trim()}}var Va=e({default:()=>to}),Ha=o(``),Ua=o(``),Wa=o(``),Ga=o(`
            cc
            ClickClack OpenClaw workspace chat

            Welcome.

            Sign in with GitHub to join the guest room.

            `,1),Ka=o(``),qa=o(``),Ja=o(`
            Showing topic
            `),Ya=o(`
            `),Xa=o(``),Za=o(``),Qa=o(``),$a=o(``),eo=o(`
            `,1);function to(e,t){x(t,!1);let i=V(),o=V(),p=V(),m=V(),T=V(),E=V(),k=V(),A=V(),j=V(),P=V(),F=V(),te=V(),L=V(),oe=V(),ce=V(),U=V(),ue=V(),ge=V(),ve=V(),ye=V(),be=V(),xe=V(),Se=V(),Ce=V(),we=`clickclack:hide-commentary:v1`,Te=`clickclack:hide-tool-calls:v1`,Ee=`clickclack:user-align:v1`,De=`clickclack:other-align:v1`,Oe=Date.now(),Ae=dt?.integratedTitleBar===!0,je=S(t,`routeWorkspaceID`,8,``),Me=S(t,`routeTargetID`,8,``),G=V(null),Ne=new Fe(()=>_(G)?.id||``),Ie=new Xe(Oo),ze=V([]),K=V([]),Ve=V([]),Ue=V(null),We=new Map,Ge=V(!1),q=V([]),J=V([]),qe=V([]),Y=V(``),X=V(``),Z=V(``),Q=V(null),Ze=V(``),Qe=V(``),$e=0,et=``,tt=!1,nt=new Map,it=V(null),ct=V(null),lt=V(!1),pt=!1,mt=V([]),gt=V(!1),_t=V(``),vt=V(new Set),yt=0,bt=V([]),xt=V([]),St=V([]),Ct=V([]),wt=V(null),Tt=V([]),Dt=V(``),Ot=V(null),kt=V(null),jt=V(``),Mt=V(null),Nt=null,Pt=V(null),Ft=V(null),Lt=new Set,Rt=V(``),zt=V(``),Bt=V(``),Vt=V(``),Ht=V(``),Wt=V(``),Kt=V(null),qt=V(!1),Jt=0,Yt=0,Xt=V(null),Zt=V(!1),Qt=V(!1),$t=V(`profile`),en=V(!1),tn=V(!1),nn=V(``),rn=V(!1),an=V(!1),on=V(``),sn=V(!1),cn=V(!1),ln=V(!1),un=V(`left`),dn=V(`left`),fn=V(`loading`),pn=V(!1),mn=V(``),hn=V(!1),gn=``,_n=``,vn=``,yn=null,bn=Promise.resolve(),xn=V(null),Sn=new Map,Cn=V(new Map),wn=new Set,Tn=V(`idle`),En=`idle`,On=!1,kn=!1,Mn=V(!1),Fn=V(!1),In=V(!1),Ln=V(!1),zn=new Map,Bn=0,Hn=V(``),Un=V(void 0),Wn=V(``),Kn=V(!0),qn=V(!1),Jn=V(!1),Yn=V(!1),Xn=V(!1),Qn=V(null),$n=V(null),er=V(null),tr=V(null),nr=V(`message`),rr=V([]),ir,ar=V([]),or,sr=V(Date.now()),cr,lr=V(``),ur=0,dr=0,fr=0,pr=0,mr=0,hr=0,gr=0,_r=0,vr=0,yr=0,br=0,xr=0,Sr=0,wr=V(null),Tr,Er=V(new Set),Dr=V(null),Or=V(``);function kr(e){e!==et&&(et=e,tt=!1,D(Ze,``),Ar(``))}function Ar(e){e!==_(Qe)&&(D(Qe,e),$e+=1)}function jr(){return`${_(Y)}:${$()}:${_(Qe)}:${$e}`}function Mr(e,t){return t?e.filter(e=>!e.archived_at&&(!e.channel_id||e.channel_id===t)):[]}ie(()=>{Fr(),cr=window.setInterval(()=>{D(sr,Date.now())},3e4),Yr(),Hr();let e=window.matchMedia(`(max-width: 820px)`),t=()=>{D(Yn,!1),D(Xn,e.matches)};t();let n=dt?.onNavigate(e=>{le(e,{keepFocus:!0,noScroll:!0})}),r=dt?.onQuickCompose(()=>Nr());return e.addEventListener(`change`,t),()=>{e.removeEventListener(`change`,t),n?.(),r?.()}});function Nr(){s().then(()=>{(_(nr)===`thread`?_(tr):_(er))?.focus()})}async function Pr(e){if(dt){e.preventDefault(),D(mn,`Opening GitHub in your browser…`);try{await dt.signInWithGitHub(),D(mn,`Finish signing in in your browser. ClickClack will complete here automatically.`)}catch{D(mn,`Could not open your browser. Try again.`)}}}function Fr(){try{let e=window.localStorage.getItem(`clickclack:show-agent-activity:v1`)===`0`;D(cn,window.localStorage.getItem(we)===`1`||e),D(ln,window.localStorage.getItem(Te)===`1`||e),D(un,window.localStorage.getItem(Ee)===`right`?`right`:`left`),D(dn,window.localStorage.getItem(De)===`right`?`right`:`left`)}catch{D(cn,!1),D(ln,!1),D(un,`left`),D(dn,`left`)}Lr()}function Lr(){try{document.documentElement.setAttribute(`data-user-align`,_(un)),document.documentElement.setAttribute(`data-other-align`,_(dn))}catch{}}function Rr(e){D(un,e),Lr();try{window.localStorage.setItem(Ee,e)}catch{}}function zr(e){D(dn,e),Lr();try{window.localStorage.setItem(De,e)}catch{}}function Br(e){D(cn,e);try{window.localStorage.setItem(we,e?`1`:`0`)}catch{}}function Vr(e){D(ln,e);try{window.localStorage.setItem(Te,e?`1`:`0`)}catch{}}ne(()=>{yn?.close(),yn=null,D(hn,!1),Gt(),ir&&window.clearInterval(ir),or&&window.clearInterval(or),cr&&window.clearInterval(cr),Tr&&clearTimeout(Tr),ks(!1,null)});async function Hr(){try{let e=await _e();if(D(G,e.user),Yr(),await $r(),_(ze).length===0){D(fn,`create a workspace`);return}await _i(je(),Me()),D(fn,`ready`)}catch(e){if(e instanceof he&&(e.status===401||e.status===403)){D(pn,!0),D(fn,`auth`);return}D(fn,e instanceof Error?e.message:`Could not load ClickClack`)}}function Ur(){_(G)&&(D($t,`profile`),D(Qt,!0))}function Wr(){let e=_(i)?.route_id||_(Y)||je();e&&le(ke(e))}function Gr(){_(E)&&(D(nn,``),D(en,!0))}async function qr(e){let t=_(T);if(!(!t||!_(E)||_(tn))){D(tn,!0),D(nn,``);try{let n=await W(`/api/channels/${t.id}`,{method:`PATCH`,body:JSON.stringify({archived:e})});D(K,_(K).map(e=>e.id===n.channel.id?n.channel:e)),D(en,!1)}catch(t){D(nn,me(t,e?`Could not archive channel`:`Could not restore channel`))}finally{D(tn,!1)}}}function Jr(e){D(G,e),so(_(J).map(t=>t.author?.id===e.id?{...t,author:e}:t)),D(qe,_(qe).map(t=>t.author?.id===e.id?{...t,author:e}:t)),_(Q)?.author?.id===e.id&&D(Q,{..._(Q),author:e})}function Yr(){if(dt){D(sn,Zr());return}let e=Zr();D(sn,typeof Notification<`u`&&Notification.permission===`granted`&&e),e&&!_(sn)&&Qr(!1)}function Xr(){return _(G)?.id?`clickclack:browser-notifications-enabled:v1:${_(G).id}`:``}function Zr(){let e=Xr();if(!e)return!1;try{return window.localStorage.getItem(e)===`enabled`}catch{return!1}}function Qr(e){let t=Xr();if(!t)return!1;try{return e?window.localStorage.setItem(t,`enabled`):window.localStorage.removeItem(t),!0}catch{return!1}}async function $r(){let e=++fr,t=await W(`/api/workspaces`);e===fr&&D(ze,t.workspaces)}function ei(e=``,t=``){return`${e||``}/${t||``}`}function ti(e=_(Y),t=``){let n=ii(e);if(!n)return`/app`;let r=`/app/${encodeURIComponent(n)}`,i=ai(t);return i?`${r}/${encodeURIComponent(i)}`:r}async function ni(e){if(!e.channel_id||e.parent_message_id)throw Error(`Only channel roots have links`);let t=await W(`/api/messages/${e.id}/route`,{method:`POST`});if(!t.message.route_id)throw Error(`Message route was not allocated`);ko(t.message);let n=ii(t.message.workspace_id);if(!n)throw Error(`Workspace route is unavailable`);let r=`/app/${encodeURIComponent(n)}/${encodeURIComponent(t.message.route_id)}`;return new URL(r,`${pe()}/`).toString()}function ri(e){let t=_(K).find(t=>t.id===e)?.route_id||_(q).find(t=>t.id===e)?.route_id;return t?ti(_(Y),t):!_(Y)||!e?`/app`:`/app/${encodeURIComponent(_(Y))}/${encodeURIComponent(e)}`}function ii(e=_(Y)){return e?_(ze).find(t=>t.id===e||t.route_id===e)?.route_id||e:``}function ai(e=``){return e?_(K).find(t=>t.id===e||t.route_id===e)?.route_id||_(q).find(t=>t.id===e||t.route_id===e)?.route_id||_(Q)?.id===e&&_(Q).route_id||_(J).find(t=>t.id===e)?.route_id||e:``}async function oi(e=_(Y),t=``,n=!1){let r=ti(e,t);window.location.pathname!==r&&await le(r,{replaceState:n,noScroll:!0,keepFocus:!0})}function si(){_(qt)&&Jo(),D(Q,null),D(it,null),D(ct,null),D(lt,!1),D(nr,`message`),D(qe,[]),D(Yn,!1)}function ci(e=_(Y)){return pi(e)||_(K).find(e=>e.name.toLowerCase()===`guest`)?.id||_(K)[0]?.id||_(q)[0]?.id||``}function ui(e=_(Y)){return _(ze).find(t=>t.id===e||t.route_id===e)}function di(e=_(Y)){let t=ui(e),n=t?.route_id||t?.id||e;return n?`clickclack:last-channel:v1:${n}`:``}function fi(e){try{let t=JSON.parse(e);return{id:typeof t.id==`string`?t.id:``,routeID:typeof t.routeID==`string`?t.routeID:``}}catch{return{id:e}}}function pi(e=_(Y)){let t=di(e);if(!t)return``;let n;try{let e=window.localStorage.getItem(t);if(!e)return``;n=fi(e)}catch{return``}let r=_(K).find(e=>e.id===n.id||e.route_id===n.routeID);if(r)return r.id;try{window.localStorage.removeItem(t)}catch{}return``}function mi(e,t){if(!e||!t)return;let n=_(K).find(e=>e.id===t);if(!n)return;let r=di(e);if(r)try{window.localStorage.setItem(r,JSON.stringify({id:n.id,routeID:n.route_id}))}catch{}}function gi(e){vn===e&&(vn=``,us())}async function _i(e=``,t=``){let n=++ur;Ne.clear();let r=ei(e,t),i=t.trim()?await yi(e,t):null;if(n!==ur)return;let a=i?_(ze).find(e=>e.id===i.workspace_id):_(ze).find(t=>t.id===e||t.route_id===e)||_(ze)[0];if(!a){Wi(``,Ui({messages:[],oldest_seq:0,newest_seq:0,has_older:!1,has_newer:!1}),`replace`),D(lr,r);return}let o=i?ei(i.workspace_route_id,i.target_route_id):ei(a.route_id,``),s=_(Y)!==a.id;if(s&&(ao(),Ie.clear(),D(Y,a.id),mr+=1,vr+=1,yr+=1,_r+=1,D(St,[]),D(Ct,[]),D(Ve,[]),D(xt,[]),D(X,``),D(Z,``),D(Q,null),D(it,null),D(ct,null),D(nr,`message`),D(qe,[]),Jo(),Zi(),D(Kn,!0),vn=a.id),(s||_(K).length===0)&&await Ci(!1,!1),n!==ur||((s||_(q).length===0)&&await ts(),s&&(await Promise.all([Ei(),Oi(a.id),ki(a.id),wi(a.id)]),Di(a.id)),n!==ur))return;if(i){let e=await vi(i,n);if(n!==ur)return;if(!e){si(),await oi(a.id,ci(),!0);return}}if(i?.canonical_path&&window.location.pathname!==i.canonical_path&&(D(lr,o),await le(i.canonical_path,{replaceState:!0,noScroll:!0,keepFocus:!0}),n!==ur))return;if(i?.target_type===`channel`&&_(K).some(e=>e.id===i.target_id)){let e=i.target_id,t=!s&&_(X)===e&&!_(Z)&&_(Hn)===e;D(X,e),D(Z,``),mi(a.id,e),si();let r=pt;if(pt=!1,t){D(lt,r),D(lr,o),Ji(e),gi(a.id);return}if(kr(e),await Promise.all([Li(),Ls(e,``)]),n!==ur)return;D(lt,r),D(lr,o),gi(a.id);return}if(i?.target_type===`direct`&&_(q).some(e=>e.id===i.target_id)){let e=i.target_id,t=!s&&_(Z)===e&&!_(X)&&_(Hn)===e;if(D(Z,e),D(X,``),si(),t){D(lr,o),Ji(e),gi(a.id);return}if(kr(e),await Li(),n!==ur)return;D(lr,o),gi(a.id);return}if(i?.target_type===`thread`){let e=await bi(i);if(n!==ur)return;if(e){D(lr,o),gi(a.id);return}}let c=ci();if(si(),!c){D(X,``),D(Z,``),kr(``),await Li(),D(lr,r),(e!==a.route_id||t)&&await oi(a.id,``,!0),gi(a.id);return}await oi(a.id,c,!0)}async function vi(e,t){return e.target_type===`channel`?(_(K).some(t=>t.id===e.target_id)||await Ci(!1,!1,!1),t===ur&&_(K).some(t=>t.id===e.target_id)):e.target_type===`direct`?(_(q).some(t=>t.id===e.target_id)||(await ts(),_(q).some(t=>t.id===e.target_id)||ns((await W(`/api/dms/${e.target_id}`)).conversation)),t===ur&&_(q).some(t=>t.id===e.target_id)):e.parent_type===`channel`&&e.parent_id?(_(K).some(t=>t.id===e.parent_id)||await Ci(!1,!1,!1),t===ur&&_(K).some(t=>t.id===e.parent_id)):e.parent_type===`direct`&&e.parent_id?(_(q).some(t=>t.id===e.parent_id)||(await ts(),_(q).some(t=>t.id===e.parent_id)||ns((await W(`/api/dms/${e.parent_id}`)).conversation)),t===ur&&_(q).some(t=>t.id===e.parent_id)):!0}async function yi(e,t){try{return(await W(`/api/routes/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)).route}catch(e){if(e instanceof he&&(e.status===403||e.status===404))return null;throw e}}async function bi(e){if(e.workspace_id!==_(Y))return!1;let t=e.parent_type===`channel`&&e.parent_id||``,n=e.parent_type===`direct`&&e.parent_id||``;if(t){if(!_(K).some(e=>e.id===t))return!1;D(X,t),D(Z,``),mi(e.workspace_id,t)}else if(n){if(!_(q).some(e=>e.id===n))return!1;D(Z,n),D(X,``)}else return!1;let r=_(Q)?.id===e.target_id&&_(Hn)===$();if(D(ct,null),D(lt,!1),D(nr,`thread`),D(Yn,!1),await No(e.target_id),t&&await Ls(t,``),!r&&t&&_(Q)&&(_(Q).thread_state?.reply_count??0)===0){let e=_(Q);return D(Q,null),D(it,null),D(qe,[]),D(nr,`message`),await Qo(e),!0}return!r&&_(Q)&&await Qo(_(Q)),!0}async function xi(){if(!_(Bt).trim())return;let e=await W(`/api/workspaces`,{method:`POST`,body:JSON.stringify({name:_(Bt)})});D(Bt,``),D(qn,!1),D(ze,[..._(ze),e.workspace]),D(Yn,!1),await _i(e.workspace.route_id||e.workspace.id,``),await oi(e.workspace.id),D(fn,`ready`)}async function Si(e){D(Yn,!1),await oi(e)}async function Ci(e=!0,t=!0,n=!0){let r=_(Y);if(!r)return;let i=++pr,a=await W(`/api/workspaces/${r}/channels`);i===pr&&r===_(Y)&&(D(K,a.channels),t?D(X,_(K).find(e=>e.id===_(X))?.id||_(K).find(e=>!e.archived_at)?.id||_(K)[0]?.id||``):_(X)&&!_(K).some(e=>e.id===_(X))&&D(X,``),n&&(_(qt)&&Jo(),D(Q,null),D(ct,null),D(nr,`message`),D(qe,[])),e&&await Li())}async function wi(e=_(Y)){let t=++mr,n=$(),r=_(X),i=!1;if(!e){D(Ve,[]);return}try{let a=await W(`/api/workspaces/${e}/topics`);if(t!==mr||e!==_(Y)||(D(Ve,a.topics),$()!==n||_(X)!==r))return;let o=new Set(Mr(a.topics,r).map(e=>e.id));_(Ze)&&!o.has(_(Ze))&&D(Ze,``),_(Qe)&&!o.has(_(Qe))&&(Ar(``),Sn.delete($()),_(Cn).delete($()),i=!0)}catch{return}if(!(!i||$()!==n))try{await Ri()}catch(e){if($()!==n||_(Qe))return;so(xo(n)),D(wt,{kind:`error`,text:e instanceof Error?`Topic changed, but messages could not reload: ${e.message}`:`Topic changed, but messages could not reload`})}}function Ti(){D(nr,`message`),_(X)&&wi()}async function Ei(e=_(Y)){let t=++gr;if(!e||e!==_(Y)||_(o)!==`owner`&&_(o)!==`moderator`){t===gr&&D(bt,[]);return}try{let n=await W(`/api/workspaces/${e}/moderation/members`);if(t!==gr||e!==_(Y))return;D(bt,n.members)}catch{t===gr&&e===_(Y)&&D(bt,[])}}async function Di(e=_(Y)){let t=++_r;if(!e){D(xt,[]);return}try{let n=[],r;do{let t=await ut({workspaceID:e,cursor:r,limit:100});n.push(...t.members.map(e=>e.user)),r=t.has_more?t.next_cursor:void 0}while(r);if(t!==_r||e!==_(Y))return;D(xt,n)}catch{t===_r&&e===_(Y)&&D(xt,[])}}async function Oi(e=_(Y)){let t=++vr;if(!e){D(St,[]);return}try{let n=await W(`/api/workspaces/${e}/slash-commands`);if(t!==vr||e!==_(Y))return;D(St,n.slash_commands)}catch{t===vr&&e===_(Y)&&D(St,[])}}async function ki(e=_(Y),t=!1){let n=++yr;if(!e){D(Ct,[]);return}try{let t=await Ia(e);if(n!==yr||e!==_(Y))return;D(Ct,t)}catch(r){let i=n===yr&&e===_(Y);if(i&&D(Ct,[]),t&&i)throw r}}function Ai(e){Sr+=1,D(wt,null)}async function ji(e,t){if(!_(Y))return;let n=await W(`/api/workspaces/${_(Y)}/moderation/members/${e}`,{method:`PATCH`,body:JSON.stringify(t)});D(bt,[..._(bt).filter(t=>t.user.id!==e),n.member]),await Ci(!1,!1,!1),D(fn,`ready`)}async function Mi(){if(!_(Y)||!_(Vt).trim())return;let e=await W(`/api/workspaces/${_(Y)}/channels`,{method:`POST`,body:JSON.stringify({name:_(Vt),kind:`public`})});D(Vt,``),D(K,[..._(K),e.channel]),D(rn,!1),await oi(_(Y),e.channel.id)}async function Ni(e){D(Yn,!1),mi(_(Y),e);let t=ti(_(Y),e);e===_(X)&&!_(Z)&&window.location.pathname===t||await oi(_(Y),e)}async function Pi(e,t){let n=++br;if(D(Ue,null),!(!e||t))try{let t=await W(`/api/channels/${e}/notification-settings`);if(n!==br||e!==_(X)||_(Z))return;Aa(e,t.preference),D(Ue,t.preference)}catch{if(n===br&&e===_(X)&&!_(Z)){let t=ka(e)||`all`;Aa(e,t),D(Ue,t)}}}async function Fi(){let e=_(X);if(!e||_(Z)||_(Ge)||!_(Ue))return;let t=++br,n=[`all`,`mentions`,`muted`],r=_(Ue),i=n[(n.indexOf(r)+1)%n.length];D(Ue,i),Aa(e,i),D(Ge,!0);try{await W(`/api/channels/${e}/notification-settings`,{method:`PATCH`,body:JSON.stringify({preference:i})})}catch{We.get(e)===i&&Aa(e,r),t===br&&e===_(X)&&!_(Z)&&D(Ue,r)}finally{D(Ge,!1)}}function Ii(e,t){return e===dr&&$()===t}async function Li(e=!0){e&&ao();let t=$(),n=++dr,r=t!==_(Hn);Zi(),r&&D(Kn,!0);try{if(!_(Z)&&!_(X)){Wi(``,Ui({messages:[],oldest_seq:0,newest_seq:0,has_older:!1,has_newer:!1}),`replace`);return}let e=await W(Vi(zi()));if(!Ii(n,t))return;Wi(t,Ui(e),`replace`)}finally{Ii(n,t)&&D(Kn,!1)}}async function Ri(){let e=$();if(!e)return;let t=++dr;Zi(),D(Kn,!0),Sn.set(e,{atBottom:!0});try{let n=await W(Vi(`limit=100`));if(!Ii(t,e))return;Wi(e,Ui(n),`replace`)}finally{Ii(t,e)&&D(Kn,!1)}}function zi(){let e=Bi(),t=e.unread_count||0,n=e.last_read_seq||0;return t>0?`around_seq=${encodeURIComponent(String(n+1))}&limit=100`:`limit=100`}function Bi(){return _(Z)?_(q).find(e=>e.id===_(Z))||{}:_(X)&&_(K).find(e=>e.id===_(X))||{}}function Vi(e){let t=_(Z)?`/api/dms/${_(Z)}/messages`:`/api/channels/${_(X)}/messages`,n=new URLSearchParams(e);!_(Z)&&_(Qe)&&n.set(`topic_id`,_(Qe));let r=n.toString();return r?`${t}?${r}`:t}async function Hi(e){if(!_(X)||e===_(Qe)||tt)return;let t=$(),n=_(Qe),r=_(Ze),i=_(Cn).get(t),a=Sn.get(t);tt=!0,Ar(e);let o=$e;e&&D(Ze,e),Sn.delete(t),_(Cn).delete(t);try{if(await Ri(),$()!==t||$e!==o)return}catch(s){if($()!==t||$e!==o)return;Ar(n),_(Ze)===e&&D(Ze,r),_(Cn).delete(t);let c=$e;try{if(await Ri(),$()!==t||$e!==c)return;a&&(Sn.set(t,a),D(Un,a))}catch{if($()!==t||$e!==c)return;i?(Gi(t,i),oo(t,i.messages),Ji(t,i)):so(xo(t)),a&&(Sn.set(t,a),D(Un,a))}D(wt,{kind:`error`,text:s instanceof Error?`Topic could not change: ${s.message}`:`Topic could not change`})}finally{tt=!1}}function Ui(e){return{messages:e.messages,oldest_seq:e.oldest_seq,newest_seq:e.newest_seq,has_older:e.has_older,has_newer:e.has_newer}}function Wi(e,t,n){let r=ea(e,t.messages,n),i=r[0]?.channel_seq||0,a=r[r.length-1]?.channel_seq||0,o=i>(t.messages[0]?.channel_seq||i),s=a<(t.messages[t.messages.length-1]?.channel_seq||a),c={messages:r,oldest_seq:i,newest_seq:a,has_older:t.has_older||o,has_newer:t.has_newer||s};Gi(e,c),Ji(e,c),oo(e,r)}function Gi(e,t){e&&(_(Cn).delete(e),_(Cn).set(e,t),Ki(e),qi(e),D(Cn,new Map(_(Cn))))}function Ki(e){let t=_(Cn).size+1;for(;_(Cn).size>8&&t>0;){t--;let n=_(Cn).keys().next().value;if(!n)return;if(n===e){let e=_(Cn).get(n);_(Cn).delete(n),e&&_(Cn).set(n,e);continue}_(Cn).delete(n)}}function qi(e){let t=Sn.size+1;for(;Sn.size>16&&t>0;){t--;let n=Sn.keys().next().value;if(!n)return;if(n===e){let e=Sn.get(n);Sn.delete(n),e&&Sn.set(n,e);continue}Sn.delete(n)}}function Ji(e,t=_(Cn).get(e)){e===$()&&(D(Mn,t?.has_older||!1),D(Fn,t?.has_newer||!1))}function Yi(e){let t=_(Cn).get(e);!e||!t||(Gi(e,{...t,has_newer:!0}),Ji(e))}function Xi(e,t){e===`older`?(D(Tn,t),D(In,t===`loading`)):(En=t,D(Ln,t===`loading`))}function Zi(){wn=new Set,D(Tn,`idle`),En=`idle`,On=!1,kn=!1,D(In,!1),D(Ln,!1)}function Qi(e,t){let n=new Map;for(let r of[...e,...t])n.set(r.id,r);return[...n.values()].sort((e,t)=>(e.channel_seq||0)-(t.channel_seq||0))}function $i(e){let t=new Set,n=ba(e);if(n>=0){let r=xa(e,_(J),n);r&&t.add(r.id)}let r=Sn.get(e)?.anchorMessageID;r&&t.add(r);let i=Ie.session(e);i&&t.add(i.messageID),_(Q)&&lo(_(Q),e)&&t.add(_(Q).id),_(Qn)&&lo(_(Qn),e)&&t.add(_(Qn).id);for(let n of _(J))(n.status===`pending`||n.status===`failed`)&&lo(n,e)&&t.add(n.id);return t}function ea(e,t,n){return Pe(t,n,$i(e))}function ta(){if(_(Tn)!==`idle`){On=!0;return}ra()}function na(e=!1){if(En!==`idle`){e&&(kn=!0);return}ia()}async function ra(){let e=$(),t=jr(),n=_(Cn).get(e),r=`${t}:older`;if(_(Tn)!==`idle`){On=!0;return}if(!e||!n?.has_older||n.oldest_seq<=0||wn.has(r))return;wn.add(r),On=!1,Xi(`older`,`loading`),ao();let i=!1;try{let r=await W(Vi(`before_seq=${encodeURIComponent(String(n.oldest_seq))}&limit=50`));if(jr()!==t)return;Wi(e,{messages:Qi(r.messages,_(J)),oldest_seq:r.oldest_seq||n.oldest_seq,newest_seq:n.newest_seq,has_older:r.has_older,has_newer:n.has_newer},`prepend`),i=!0,Xi(`older`,`settling`)}catch(e){jr()===t&&D(fn,e instanceof Error?e.message:`Could not load older messages`)}finally{wn.delete(r),jr()===t&&!i&&Xi(`older`,`idle`)}}async function ia(){let e=$(),t=jr(),n=_(Cn).get(e),r=`${t}:newer`;if(En!==`idle`){kn=!0;return}if(!e||wn.has(r))return;if(!n||n.newest_seq<=0){await Li();return}wn.add(r),kn=!1,Xi(`newer`,`loading`);let i=!1;try{let r=await W(Vi(`after_seq=${encodeURIComponent(String(n.newest_seq))}&limit=50`));if(jr()!==t)return;if(r.messages.length===0){Wi(e,{...n,has_newer:r.has_newer},`append`),i=!0,Xi(`newer`,`settling`);return}Wi(e,{messages:Qi(_(J),r.messages),oldest_seq:n.oldest_seq,newest_seq:r.newest_seq||n.newest_seq,has_older:n.has_older,has_newer:r.has_newer},`append`),i=!0,Xi(`newer`,`settling`)}catch(e){jr()===t&&D(fn,e instanceof Error?e.message:`Could not load newer messages`)}finally{wn.delete(r),jr()===t&&!i&&Xi(`newer`,`idle`)}}function oa(){let e=_(Y),t=$(),n=jr();if(!e||!t)return Promise.resolve();let r=bn.catch(()=>void 0).then(async()=>{if(_(Y)!==e||$()!==t||jr()!==n)return;let r=_(Cn).get(t);if(!r||r.newest_seq<=0){await Li();return}let i=await W(Vi(`after_seq=${encodeURIComponent(String(r.newest_seq))}&limit=50`));if(_(Y)!==e||$()!==t||jr()!==n)return;let a=_(Cn).get(t);if(!a)return;let o=i.newest_seq||r.newest_seq,s=o>a.newest_seq?i.has_newer:on&&(n=r.channel_seq));return n}function ua(e,t=_(J)){let n=0;for(let r of t)r.direct_conversation_id===e&&typeof r.channel_seq==`number`&&r.channel_seq>n&&(n=r.channel_seq);return n}function da(e,t){return e&&t.unread_count||0}async function fa(e,t){let n=_(K).find(t=>t.id===e);if(n&&!(t<=0||t<=(n.last_read_seq||0))){D(K,_(K).map(n=>n.id===e?(()=>{let e=Math.max(n.last_seq||0,t);return{...n,last_seq:e,unread_count:t>=e?0:n.unread_count||0,last_read_seq:t}})():n));try{await W(`/api/channels/${e}/read`,{method:`POST`,body:JSON.stringify({seq:t})})}catch{}}}async function pa(e,t){let n=_(q).find(t=>t.id===e);if(n&&!(t<=0||t<=(n.last_read_seq||0))){D(q,_(q).map(n=>n.id===e?(()=>{let e=Math.max(n.last_seq||0,t);return{...n,last_seq:e,unread_count:t>=e?0:n.unread_count||0,last_read_seq:t}})():n));try{await W(`/api/dms/${e}/read`,{method:`POST`,body:JSON.stringify({seq:t})})}catch{}}}function ma(e){let t=_(Cn).get(e)?.newest_seq||0,n=_(K).find(t=>t.id===e);if(n)return Math.max(n.last_seq||0,(n.last_read_seq||0)+(n.unread_count||0),la(e),t);let r=_(q).find(t=>t.id===e);return r?Math.max(r.last_seq||0,(r.last_read_seq||0)+(r.unread_count||0),ua(e),t):0}function ha(e){let t=_(Cn).get(e);return!t||t.has_newer?0:_(K).find(t=>t.id===e)?la(e):_(q).find(t=>t.id===e)?ua(e):0}function ga(e={}){if(!e.all&&Date.now()e.id===t))return;if(!e.all&&!e.seq){let e=ba(t);if(e>=0&&!no(t,e))return}let n=e.all?Math.max(e.seq||0,ma(t)):e.seq||ha(t);if(!(n<=0)){if(_(q).some(e=>e.id===t)){pa(t,n),e.all&&_a(t,n);return}_(K).some(e=>e.id===t)&&(fa(t,n),e.all&&_a(t,n))}}function _a(e,t){zn.delete(e),zn=new Map(zn),D(K,_(K).map(n=>n.id===e?{...n,last_seq:Math.max(n.last_seq||0,t),last_read_seq:Math.max(n.last_read_seq||0,t),unread_count:0}:n)),D(q,_(q).map(n=>n.id===e?{...n,last_seq:Math.max(n.last_seq||0,t),last_read_seq:Math.max(n.last_read_seq||0,t),unread_count:0}:n))}function va(e){let t=_(K).find(t=>t.id===e);return t?t.last_read_seq||0:_(q).find(t=>t.id===e)?.last_read_seq||0}function ba(e){let t=_(K).find(t=>t.id===e);if(t)return da(e,t)>0?t.last_read_seq||0:-1;let n=_(q).find(t=>t.id===e);return n&&da(e,n)>0?n.last_read_seq||0:-1}function xa(e,t,n){for(let r of t){if(!lo(r,e)||r.parent_message_id||r.author?.id===_(G)?.id||r.author_id===_(G)?.id)continue;let t=r.channel_seq;if(typeof t==`number`&&t>n)return r}return null}function Sa(e,t){if(!e)return;let n=to(e);if(da(e,n)<=0){zn.delete(e),zn=new Map(zn);return}let r=n.last_read_seq||0,i=zn.get(e);if(i?.boundarySeq===r&&i.since||!no(e,r))return;let a=xa(e,t,r);a&&(zn=new Map(zn).set(e,{boundarySeq:r,since:io(a.created_at)}))}function Ca(e,t,n){if(!e||!n)return;let r=zn.get(e);r?.boundarySeq===t&&r.since||(zn=new Map(zn).set(e,{boundarySeq:t,since:io(n)}))}function wa(e){let t=e.payload,n=t.channel_seq??e.seq??t.seq;return typeof n==`number`?n:Number(n)||0}function Ta(e){let t=e.payload;return{channelID:e.channel_id||(typeof t.channel_id==`string`?t.channel_id:``),dmID:typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``}}async function Ea(e){try{let t=await W(`/api/channels/${e}/notification-settings`);return Aa(e,t.preference),e===_(X)&&!_(Z)&&!_(Ge)&&D(Ue,t.preference),t.preference}catch{return ka(e)||`all`}}function Da(e){return _(G)?.id&&e?`clickclack:channel-notification:v1:${_(G).id}:${e}`:``}function Oa(e){let t=Da(e);if(!t)return null;try{let e=window.localStorage.getItem(t);return e===`all`||e===`mentions`||e===`muted`?e:null}catch{return null}}function ka(e){return We.get(e)||Oa(e)}function Aa(e,t){We=new Map(We).set(e,t);let n=Da(e);if(n)try{window.localStorage.setItem(n,t)}catch{}}async function ja(e,t){if(e.type!==`message.created`&&e.type!==`thread.reply_created`)return;let n=e.payload,r=typeof n.kind==`string`?n.kind:``;if(r===`agent_commentary`||r===`agent_tool`||!_(sn)||document.visibilityState===`visible`&&t)return;let{channelID:i,dmID:a}=Ta(e);if(i){let t=await Ea(i);if(!t||!_(sn))return;let n=i===_(X)&&!_(Z);if(document.visibilityState===`visible`&&n||t===`muted`||t===`mentions`&&!e.mentioned_user_ids?.includes(_(G)?.id||``))return}let o=typeof n.message_id==`string`?n.message_id:`${e.channel_id||``}:${e.seq||Date.now()}`,s=typeof n.author_id==`string`?n.author_id:``,c=typeof n.body==`string`?n.body:`New message`;if(e.type===`thread.reply_created`&&typeof n.message_id==`string`)try{let e=await W(`/api/messages/${n.message_id}`);s=e.message.author_id,c=e.message.body}catch{}if(s&&s===_(G)?.id||!_(sn)||document.visibilityState===`visible`&&(i&&i===_(X)||a&&a===_(Z)))return;let l=_(K).find(e=>e.id===i),u=bs(s)?.display_name||`ClickClack`,d=l?`#${rt(l)}`:`Direct message`;if(dt){dt.notify({body:Pa(c),route:ri(i||a),tag:`clickclack:${o}`,title:`${u} in ${d}`});return}if(!(typeof Notification>`u`||Notification.permission!==`granted`))try{let e=new Notification(`${u} in ${d}`,{body:Pa(c),tag:`clickclack:${o}`,icon:`/favicon.svg`});e.onclick=()=>{window.focus(),e.close(),i?Ni(i):a&&is(a)}}catch{}}function Pa(e){let t=e.replace(/!\[[^\]]*]\([^)]+\)/g,`[image]`).replace(/\[[^\]]+]\(([^)]+)\)/g,`$1`).replace(/[`*_>#|]/g,``).replace(/\s+/g,` `).trim();return t?t.length>180?`${t.slice(0,177)}...`:t:`New message`}function La(e){if(e.type!==`message.created`)return!1;let t=wa(e);if(t<=0)return!1;let{channelID:n,dmID:r}=Ta(e);return n?t<=(_(K).find(e=>e.id===n)?.last_seq||0):r?t<=(_(q).find(e=>e.id===r)?.last_seq||0):!1}async function Va(e){let t=e.payload,n=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;return!n||_(q).some(e=>e.id===n)?!1:(await ts(),_(q).some(e=>e.id===n))}function to(e){return _(K).find(t=>t.id===e)||_(q).find(t=>t.id===e)||{}}function no(e,t,n=_(Cn)){if(!e||t<0)return!1;let r=n.get(e);if(!r||r.messages.length===0)return!1;let i=t+1;return r.oldest_seq<=i&&r.newest_seq>=i}function ro(e,t,n=_(Cn)){let r=zn.get(e);if(r?.boundarySeq===t)return r.since;if(!no(e,t,n))return``;let i=xa(e,_(J),t);return i?io(i.created_at):``}function io(e){let t=new Date(e);return Number.isNaN(t.getTime())?``:new Intl.DateTimeFormat(void 0,{hour:`numeric`,minute:`2-digit`}).format(t)}function ao(){if(!_(Hn)||!_(xn))return;let e=_(xn).captureState();e&&Sn.set(_(Hn),e)}function oo(e,t){let n=e!==_(Hn);D(Un,Sn.get(e));let r=xo(e),i=new Map(r.map(e=>[e.id,e])),a=new Map(r.filter(e=>e.nonce).map(e=>[e.nonce,e]));Ne.seedMessages(t);let o=t.map(e=>{let t=i.get(e.id)||(e.nonce?a.get(e.nonce):void 0);return t?e.nonce&&ho.has(e.nonce)?{...e,nonce:t.nonce,status:t.status,attachments:t.attachments?.length?t.attachments:e.attachments}:{...e,nonce:t.nonce,attachments:t.attachments?.length?t.attachments:e.attachments}:e}),s=new Set(o.map(e=>e.id)),c=new Set(o.map(e=>e.nonce).filter(Boolean)),l=r.filter(t=>(t.status===`pending`||t.status===`failed`)&&t.id.startsWith(`tmp_`)&&!s.has(t.id)&&!(t.nonce&&c.has(t.nonce))&&lo(t,e)&&(!_(Qe)||t.topic_id===_(Qe)));D(J,l.length>0?[...o,...l]:o),Ie.reconcile(e,_(J)),D(Hn,e),Sa(e,_(J)),n&&(D(rr,[]),D(ar,[]),Gt())}function so(e,t=`append`){let n=$(),r=n?_(Cn).get(n):void 0;if(!n||!r){D(J,e);return}let i=e.filter(e=>lo(e,n)),a=ea(n,i,t),o=a.filter(e=>(e.channel_seq||0)>0),s=o[0]?.channel_seq||r.oldest_seq,c=o[o.length-1]?.channel_seq||r.newest_seq,l=co(a[0])>co(i[0]),u=co(a[a.length-1])0)&&await Ri(),await uo(),ga({all:!0}),await uo()}catch(e){D(fn,e instanceof Error?e.message:`Could not jump to latest messages`)}}let ho=new Map;function go(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID().replace(/-/g,``):`${Date.now().toString(36)}${Math.random().toString(36).slice(2,10)}`}function _o(e,t,n=`tmp_${e}`){let r=new Date().toISOString();return{id:n,workspace_id:t.workspaceID,channel_id:t.channelID,direct_conversation_id:t.directConversationID,topic_id:t.topicID,author_id:_(G)?.id||``,thread_root_id:n,body:t.body,body_format:`markdown`,created_at:r,author:_(G)||void 0,attachments:t.upload?[t.upload]:[],quoted_message_id:t.quotedMessageID,nonce:e,status:`pending`}}async function vo(){let e=_(Rt).trim();if(!e)return;if(_(j)&&!_(P)){D(fn,`This conversation has no active recipient`);return}if(!_(X)&&!_(Z)){D(fn,`pick or create a channel`);return}Gt(),D(wt,null);let t=++Sr,n=$(),r=_(Z)?`dm`:`channel`,i=_(Qn)&&_($n)===r?_(Qn):null;if(_(X)&&!_(Z)&&!_(Xt)&&!i){let r=Ra(e),i=r?za(_(St),r.command):void 0;if(r&&i){D(Rt,``),await yo(_(X),r.command,r.text,e,n,t);return}}let a={body:e,quotedMessageID:i?.id,upload:_(Xt)||void 0,workspaceID:_(Y),channelID:_(X)||void 0,directConversationID:_(Z)||void 0,topicID:_(X)&&_(Ze)||void 0,topicFilterID:_(Qe),topicFilterGeneration:$e,viewKey:$()};D(Rt,``),i&&Bo(),D(Xt,null),await To(a)}async function yo(e,t,n,r,i,a){try{let r=await Ba(e,t,n);if(a!==Sr||$()!==i)return;r.text&&r.response_type!==`in_channel`&&D(wt,{kind:`ephemeral`,text:r.text})}catch(e){if(console.warn(`slash dispatch failed`,e),a!==Sr||$()!==i)return;D(wt,{kind:`error`,text:e instanceof he&&e.message?bo(e):`${t} failed`}),_(Rt).trim()||D(Rt,r)}}function bo(e){try{let t=JSON.parse(e.message);if(t&&typeof t.error==`string`&&t.error)return t.error}catch{}return e.message}function xo(e){let t=[..._(J),...nt.get(e)||[]].filter(t=>(t.status===`pending`||t.status===`failed`)&&lo(t,e)&&(!_(Qe)||t.topic_id===_(Qe))),n=new Map;for(let e of t){let t=e.nonce?`nonce:${e.nonce}`:`id:${e.id}`;n.set(t,e)}return[...n.values()]}function So(e,t){let n=(nt.get(e)||[]).filter(e=>e.id!==t.id&&!(t.nonce&&e.nonce===t.nonce));nt=new Map(nt).set(e,[...n,t])}function Co(e,t,n){let r=nt.get(e);if(!r)return;let i=r.filter(e=>e.id!==t&&!(n&&e.nonce===n)),a=new Map(nt);i.length>0?a.set(e,i):a.delete(e),nt=a}async function wo(e,t,n){if(So(e.viewKey,t),$()!==e.viewKey)return;let r=!1;if(_(Qe)===e.topicFilterID&&$e===e.topicFilterGeneration&&_(Qe)&&e.topicID!==_(Qe)){Ar(``),Sn.delete(e.viewKey),_(Cn).delete(e.viewKey);try{await Ri()}catch{r=!0}}if($()!==e.viewKey)return;if(_(Qe)&&e.topicID!==_(Qe)){_(Rt).trim()||D(Rt,e.body),D(wt,{kind:`error`,text:`${n} Clear the active topic filter to recover the draft.`});return}r&&so(xo(e.viewKey));let i=t.id,a=t.nonce,o=_(J).findIndex(e=>e.id===i||a&&e.nonce===a);so(o>=0?_(J).map((e,n)=>n===o?t:e):[..._(J),t]),D(wt,{kind:`error`,text:r?`${n} The unfiltered timeline could not reload.`:n}),await po()}async function To(e,t,n){let r=t??go(),i=`tmp_${r}`,a=n??i,o=!_(Qe)||e.topicID===_(Qe),s=!t&&$()===e.viewKey&&o,c=s&&_(Fn);ho.set(r,e);let l=_o(r,e,a);t&&So(e.viewKey,l),t?so(_(J).map(e=>e.id===a?l:e)):$()===e.viewKey&&o&&(so([..._(J),l]),po());let u=e.directConversationID?`/api/dms/${e.directConversationID}/messages`:`/api/channels/${e.channelID}/messages`,d={body:e.body,nonce:r};e.quotedMessageID&&(d.quoted_message_id=e.quotedMessageID),e.topicID&&(d.topic_id=e.topicID);try{let t=(await W(u,{method:`POST`,body:JSON.stringify(d)})).message;if(e.upload)try{await W(`/api/messages/${t.id}/attachments`,{method:`POST`,body:JSON.stringify({upload_id:e.upload.id})}),t={...t,attachments:[...t.attachments||[],e.upload]}}catch(n){console.warn(`attachment failed`,n),await wo(e,{...t,nonce:r,status:`failed`,attachments:e.upload?[...t.attachments||[],e.upload]:t.attachments},`The message was sent, but its attachment failed. Retry or discard it below.`);return}Co(e.viewKey,t.id,r),ho.delete(r),_(J).findIndex(e=>e.id===a)>=0?so(_(J).map(e=>e.id===a?t:e)):_(J).some(e=>e.id===t.id)?so(_(J).map(e=>e.id===t.id?t:e)):lo(t,$())&&(!_(Qe)||t.topic_id===_(Qe))&&!_(J).some(e=>e.id===t.id)&&so([..._(J),t]),$()===e.viewKey&&s&&(c&&await Ri(),await po(),ga({all:!0,seq:t.channel_seq||0}))}catch(t){console.warn(`send failed`,t),await wo(e,{...l,status:`failed`},`The message failed to send. Retry or discard it below.`)}}function Eo(e){if(!e.nonce)return;let t=ho.get(e.nonce);if(!t){Do(e);return}To({...t,viewKey:t.viewKey},e.nonce,e.id)}function Do(e){if(e.nonce){let t=ho.get(e.nonce);t&&Co(t.viewKey,e.id,e.nonce),ho.delete(e.nonce)}so(_(J).filter(t=>t.id!==e.id))}async function Oo(e,t){if(e!==_(Wn))return;t.surface===`timeline`&&_(xn)?.scrollToMessage(t.messageID);let n=document.querySelector(t.surface===`timeline`?`main.timeline`:`[aria-label="Thread pane"]`);for(let e=0;e<16;e+=1){await s(),await new Promise(e=>requestAnimationFrame(()=>e()));let e=n?.querySelector(`[data-message-id="${CSS.escape(t.messageID)}"]`)?.querySelector(`textarea[aria-label="Edit message"]`);if(e){e.focus();return}}}function ko(e){so(_(J).map(t=>t.id===e.id?{...t,...e}:t)),D(qe,_(qe).map(t=>t.id===e.id?{...t,...e}:t)),D(mt,_(mt).map(t=>t.id===e.id?{...t,...e}:t)),_(Q)?.id===e.id&&D(Q,{..._(Q),...e})}function Ao(e){!e.id||e.deleted_at||_(Er).has(e.id)||(D(Dr,e),D(Or,``))}async function jo(){let e=_(Dr);if(!(!e||_(Er).has(e.id))){D(Er,new Set([..._(Er),e.id])),D(Or,``);try{let t=(await W(`/api/messages/${e.id}`,{method:`DELETE`})).message;Ie.cancelMessage($(),t.id),so(_(J).map(e=>e.id===t.id?{...e,...t}:e)),D(qe,_(qe).map(e=>e.id===t.id?{...e,...t}:e)),D(mt,_(mt).filter(e=>e.id!==t.id)),_(Q)?.id===t.id&&D(Q,{..._(Q),...t}),_(Qn)?.id===t.id&&Bo(),D(fn,``),D(Dr,null)}catch(e){D(Or,e instanceof Error?e.message:`Could not delete message`)}finally{let t=new Set(_(Er));t.delete(e.id),D(Er,t)}}}async function Mo(e){Jo(),D(lt,!1),await No(e.id,e),_(Y)&&_(Q)?.route_id&&window.location.pathname!==ti(_(Y),_(Q).id)&&await oi(_(Y),_(Q).id)}async function No(e,t,n=()=>!0){D(kt,null),D(jt,``),D(ct,null),t&&(D(Q,t),D(nr,`thread`));let r=await W(`/api/messages/${e}/thread`);if(!n())return!1;let[i,...a]=[{...r.root,thread_state:r.thread_state},...r.replies];return Ne.seedMessages([i,...a]),Ie.reconcile($(),[i,...a]),D(Q,i),D(nr,`thread`),so(_(J).map(e=>e.id===i.id?i:e)),D(qe,a),D(it,r.thread_state),!0}async function Po(e){let t=await W(`/api/messages/${e}/thread`),n={...t.root,thread_state:t.thread_state};Ne.seedMessages([n]),so(_(J).map(e=>e.id===n.id?n:e))}function Fo(e,t){let n=_(J).find(t=>t.id===e);if(!n)return!1;let r=new Date(t.created_at).getTime();if(Number.isFinite(r)&&ra}async function Io(){let e=_(zt).trim();if(!e||!_(Q))return;if(_(j)&&!_(P)){D(fn,`This direct message has no active recipient`);return}let t=_(Qn)&&_($n)===`thread`?_(Qn):null;D(zt,``);let n={body:e,nonce:go()};t&&(n.quoted_message_id=t.id);let r=await W(`/api/messages/${_(Q).id}/thread/replies`,{method:`POST`,body:JSON.stringify(n)});t&&Bo(),_(qe).some(e=>e.id===r.message.id)||D(qe,[..._(qe),r.message]),D(it,r.thread_state)}function Lo(e,t){D(Qn,e),D($n,t),D(nr,t===`thread`?`thread`:`message`)}function Ro(){return _(Dr)!==null||_(Ot)!==null||_(Qt)||_(en)||_(rn)||_(an)}function zo(){return _(nr)===`thread`&&_(Q)&&_(tr)?_(tr):_(er)}function Bo(){D(Qn,null),D($n,null)}async function Vo(e){let t=e.quoted_message_id;if(!t)return;if(_(xn)?.scrollToMessage(t)??!1){await Wo(t);return}let n=await W(`/api/messages/${t}`);lo(n.message,$())&&await Qo(n.message)}async function Ho(){Bn=Date.now()+1200,!(_(U)&&_(xn)?.scrollToDivider(!1))&&await Uo()}async function Uo(){let e=$();if(!e)return;Bn=Date.now()+1200;let t=va(e),n=zn.get(e),r=(n?.boundarySeq===t?n.boundarySeq:t)+1;r<=0||(await $o(r),await s(),_(xn)?.scrollToDivider(!1))}async function Wo(e){for(let t=0;t<16;t+=1){await s(),await new Promise(e=>requestAnimationFrame(()=>e()));let t=document.querySelector(`[data-message-id="${CSS.escape(e)}"]`);if(t){t.classList.add(`highlight`),window.setTimeout(()=>t.classList.remove(`highlight`),1500);return}}}async function Go(){if(!_(Y)||!_(Wt).trim()){Jo();return}let e=_(Wt).trim();_(kt)&&Os(),(_(Q)||_(ct))&&Fs();let t=++Yt,n=_(Z)&&_(j)?{workspaceID:_(Y),channelID:``,directConversationID:_(Z),label:`@${Le(_(j),_(G)?.id)}`}:_(X)&&_(T)?{workspaceID:_(Y),channelID:_(X),directConversationID:``,label:`#${rt(_(T))}`}:{workspaceID:_(Y),channelID:``,directConversationID:``,label:``};D(qt,!1),Jt=0;let r={query:e,scope:n,results:[],nextCursor:null,state:`loading`,error:``,loadingMore:!1,moreError:``,activeResultID:``};D(Kt,r);try{let e=await W(`/api/search?${Ko(r).toString()}`);if(t!==Yt)return;D(Kt,{...r,results:e.results,nextCursor:e.next_cursor,state:`ready`})}catch(e){if(t!==Yt)return;D(Kt,{...r,state:`error`,error:e instanceof he?e.message:`Search is unavailable right now.`})}}function Ko(e,t=``){let n=new URLSearchParams({workspace_id:e.scope.workspaceID,q:e.query});return e.scope.directConversationID?n.set(`direct_conversation_id`,e.scope.directConversationID):e.scope.channelID&&n.set(`channel_id`,e.scope.channelID),t&&n.set(`cursor`,t),n}async function qo(){let e=_(Kt);if(!e||e.state!==`ready`||!e.nextCursor||e.loadingMore)return;let t=Yt;D(Kt,{...e,loadingMore:!0,moreError:``});try{let n=await W(`/api/search?${Ko(e,e.nextCursor).toString()}`);if(t!==Yt||!_(Kt))return;let r=new Set(_(Kt).results.map(e=>e.id));D(Kt,{..._(Kt),results:[..._(Kt).results,...n.results.filter(e=>!r.has(e.id))],nextCursor:n.next_cursor,loadingMore:!1})}catch(e){if(t!==Yt||!_(Kt))return;D(Kt,{..._(Kt),loadingMore:!1,moreError:e instanceof he?e.message:`Couldn’t load more results.`})}}function Jo(){Yt+=1,D(Wt,``),D(Kt,null),D(qt,!1),Jt=0}function Yo(e){if(e.channel_name)return`#${e.channel_name}`;if(e.direct_conversation_id){let t=_(q).find(t=>t.id===e.direct_conversation_id);return t?`@${Le(t,_(G)?.id)}`:`Direct message`}return``}async function Xo(e){let t=_(Kt),n=e.channel_id||e.direct_conversation_id||``;if(!(!t||!_(Y)||!n)&&(D(Kt,{...t,activeResultID:e.id}),$()!==n&&(await oi(_(Y),n),await _i(_(Y),n)),$()===n)){if(e.parent_message_id){Jt=document.querySelector(`.search-results-scroll`)?.scrollTop??0;let t=Yt;D(qt,!0);try{if(!await No(e.thread_root_id,void 0,()=>t===Yt&&_(qt)&&_(Kt)?.activeResultID===e.id))return}catch(e){throw D(qt,!1),await s(),e}_(Q)?.route_id&&await oi(_(Y),_(Q).id),await s(),document.querySelector(`.thread [data-message-id="${CSS.escape(e.id)}"]`)?.scrollIntoView({block:`center`}),document.querySelector(`.thread .thread-back`)?.focus(),await Wo(e.id);return}if(e.channel_seq&&e.channel_seq>0){await $o(e.channel_seq,e.id);return}await Li()}}async function Zo(){if(!_(Kt)||!_(qt))return;let e=$();_($n)===`thread`&&Bo(),D(Q,null),D(ct,null),D(nr,`message`),D(qe,[]),D(qt,!1),_(Y)&&e&&await oi(_(Y),e),await s();let t=document.querySelector(`.search-results-scroll`);t&&(t.scrollTop=Jt),(_(Kt).activeResultID?document.querySelector(`.search-result[data-result-id="${CSS.escape(_(Kt).activeResultID)}"]`):null)?.focus({preventScroll:!0})}async function Qo(e){let t=e.channel_seq||0;if(t<=0){await Li();return}await $o(t,e.id)}async function $o(e,t=``){let n=$();if(!n)return;_(Qe)&&(Ar(``),_(Cn).delete(n),D(Kn,!0));let r=jr();t&&Sn.set(n,{atBottom:!1,anchorMessageID:t,anchorPixelOffset:0});let i=n!==_(Hn);Zi(),i&&D(Kn,!0);try{let i=await W(Vi(`around_seq=${encodeURIComponent(String(e))}&limit=100`));if($()!==n||jr()!==r)return;Wi(n,Ui(i),`around`),await s(),t&&(_(xn)?.scrollToMessage(t),await Wo(t))}finally{$()===n&&D(Kn,!1)}}async function es(e){let t=e.currentTarget,n=t.files?.[0];if(!n||!_(Y))return;let r=await ft(n),i=new FormData;i.set(`workspace_id`,_(Y)),i.set(`file`,n),r.width>0&&i.set(`width`,String(r.width)),r.height>0&&i.set(`height`,String(r.height)),r.durationMS>0&&i.set(`duration_ms`,String(r.durationMS));let a=await W(`/api/uploads`,{method:`POST`,body:i});D(Xt,a.upload),t.value=``}async function ts(e=_(Y)){let t=++hr;if(!e){D(q,[]);return}let n=await W(`/api/dms?workspace_id=${e}`);t===hr&&e===_(Y)&&(D(q,n.conversations),_(Z)&&!_(q).some(e=>e.id===_(Z))&&D(Z,``))}function ns(e){D(q,_(q).some(t=>t.id===e.id)?_(q).map(t=>t.id===e.id?e:t):[..._(q),e])}async function rs(e){let t=e.trim();t&&(await as(t),D(Ht,``),D(an,!1))}async function is(e){D(Yn,!1);let t=ti(_(Y),e);e===_(Z)&&!_(X)&&window.location.pathname===t||await oi(_(Y),e)}async function as(e){let t=e.trim();if(!_(Y)||!t)return;let n=_(q).find(e=>e.members.some(e=>e.id===t));if(n){D(Yn,!1),await oi(_(Y),n.id);return}let r=await W(`/api/dms`,{method:`POST`,body:JSON.stringify({workspace_id:_(Y),member_ids:[t]})});ns(r.conversation),D(Yn,!1),await oi(_(Y),r.conversation.id)}function os(){Tr&&clearTimeout(Tr),Tr=void 0,D(wr,null)}function ss(e,t){os(),D(wr,{conversation:e,restoreRoute:t,title:Le(e,_(G)?.id)}),Tr=setTimeout(()=>{D(wr,null),Tr=void 0},8e3)}async function cs(){let e=_(wr);if(e){os();try{let t=await W(`/api/dms/${e.conversation.id}/open`,{method:`POST`});ns(t.conversation),e.restoreRoute&&await oi(e.conversation.workspace_id,t.conversation.id),D(fn,`direct message restored`)}catch(e){D(fn,e instanceof Error?e.message:`Could not restore direct message`)}}}async function ls(e){if(!e)return;let t=_(q).find(t=>t.id===e),n=_(Z)===e;if(await W(`/api/dms/${e}`,{method:`DELETE`}),D(q,_(q).filter(t=>t.id!==e)),t&&ss(t,n),n){si();let e=_(K)[0]?.id||``;D(Z,``),D(X,e),e&&mi(_(Y),e),await oi(_(Y),e),await Li()}}function us(){if(xr+=1,yn?.close(),yn=null,D(hn,!1),!_(Y))return;let e=_(Y);yn=He({workspaceID:e,onEvent:fs,onOpen:async(t,n)=>{await ds(e,t,_n===e,n),t()&&(_n=e,e===_(Y)&&_(fn)===gn&&D(fn,`ready`),gn=``)},onError:t=>{e===_(Y)&&(gn=t instanceof Error?t.message:`Could not process realtime event`,D(fn,gn))},onStatusChange:e=>{D(hn,e)}})}async function ds(e,t=()=>!0,n=!0,r=!0){let i=++xr;if(!e||e!==_(Y)||!t())return;let a=_(Q)?.id||``,o=_(ct)?.kind===`bot`?_(ct).id:``;if(D(rr,[]),D(ar,[]),!r){await Promise.all([Oi(e),ki(e,!0)]);return}if(Ne.clear(),await Promise.all([$r(),Ci(!1,!1,!1),ts(e),Ei(e),Oi(e),ki(e,!0),wi(e)]),!(i!==xr||e!==_(Y)||!t())){if(_(X)&&!_(K).some(e=>e.id===_(X))&&D(X,``),_(Z)&&!_(q).some(e=>e.id===_(Z))&&D(Z,``),!_(X)&&!_(Z)){let t=ci(e);if(t){let n=_(q).some(e=>e.id===t);D(Z,n?t:``),D(X,n?``:t),n||mi(e,t),await oi(e,t,!0)}}if(!(i!==xr||e!==_(Y)||!t())&&(await Li(n),!(i!==xr||e!==_(Y)||!t())&&(await Ls(),!(i!==xr||e!==_(Y)||!t())&&(a&&_(Q)?.id===a&&await No(a,_(Q)),o&&_(ct)?.id===o)))){let e=bs(o);D(ct,e&&!e.deleted_at?e:null)}}}async function fs(e){if((e.type===`pin.added`||e.type===`pin.removed`)&&e.channel_id===_(X)&&!_(Z)){await Ls();return}if(e.type===`typing.started`||e.type===`typing.stopped`){_s(e);return}if(e.type===`agent.progress`){vs(e);return}if(e.type===`channel.read`||e.type===`dm.read`){hs(e);return}if(e.type===`bot_command.updated`){e.workspace_id===_(Y)&&ki(e.workspace_id,!0).catch(t=>{e.workspace_id===_(Y)&&(D(fn,t instanceof Error?t.message:`Could not refresh bot commands`),us())});return}if(e.type===`bot.deleted`){e.workspace_id===_(Y)&&await ps(e);return}if(e.type===`bot.membership_removed`){e.workspace_id===_(Y)&&await ms(e);return}if((e.type===`channel.created`||e.type===`channel.updated`)&&e.workspace_id===_(Y)){await Ci(!1,!1,!1);return}if(e.type===`member.moderation_updated`&&e.workspace_id===_(Y)){let t=_(Z),n=e.payload.user_id===_(G)?.id;if(await $r(),await Ei(),await Ci(!1,n,n),n){if(await ts(),t&&(_(q).some(e=>e.id===t)?(D(Z,t),D(X,``)):D(Z,``)),!_(X)&&!_(Z)){Wi(``,Ui({messages:[],oldest_seq:0,newest_seq:0,has_older:!1,has_newer:!1}),`replace`);return}await Li()}return}if(e.workspace_id===_(Y)&&e.payload.topic_id&&!_(Ve).some(t=>t.id===e.payload.topic_id)&&await wi(e.workspace_id),La(e))return;(e.type===`message.updated`||e.type===`message.deleted`)&&_(vt).has(e.payload.message_id||``)&&await Ls();let t=(e.channel_id===_(X)||e.payload.direct_conversation_id===_(Z))&&!(e.type===`message.created`&&_(Qe)&&e.payload.topic_id!==_(Qe));if(t&&(e.type===`reaction.added`||e.type===`reaction.removed`)){Ne.applyEvent(e);return}if(ja(e,t),e.type===`message.created`&&!t&&(await Va(e)||gs(e)),t&&(e.type===`message.created`||e.type===`message.updated`||e.type===`message.deleted`)){let t=e.payload.nonce;if(e.type===`message.created`&&t&&ho.has(t))return;let n=fo();e.type===`message.created`&&!n?(Bn=Date.now()+1200,Yi($())):e.type===`message.created`?await oa():await Li(),e.type===`message.created`&&gs(e,n),e.type===`message.created`&&n&&(await uo(),ga({all:!0,seq:wa(e)}))}let n=e.payload.root_message_id||e.payload.message_id;n&&e.type===`thread.state_updated`&&Fo(n,e)?_(Q)?.id===n?await No(n,_(Q)):await Po(n):e.type!==`thread.reply_created`&&_(Q)&&n===_(Q).id&&await No(_(Q).id,_(Q))}async function ps(e){let t=e.payload.bot_user_id||``;if(!t)return;let n=e.payload.deleted_at||e.created_at,r=e.payload.former_handle||``,i=e=>e.id===t?{...e,handle:``,former_handle:r,deleted_at:n}:e;D(q,_(q).map(e=>({...e,members:e.members.map(i)}))),D(bt,_(bt).filter(e=>e.user.id!==t)),D(St,_(St).filter(e=>e.bot_user_id!==t)),D(Ct,_(Ct).filter(e=>e.bot.id!==t)),D(rr,_(rr).filter(e=>e.userID!==t)),_(Kt)&&D(Kt,{..._(Kt),results:_(Kt).results.map(e=>({...e,author:i(e.author)}))}),_(ct)?.id===t&&D(ct,null);let a=_(Q)?.id||``;await Promise.all([ts(),Ei(),Oi(),ki()]),Di(),await Li(),a&&await No(a)}async function ms(e){let t=e.payload.bot_user_id||``;t&&(D(bt,_(bt).filter(e=>e.user.id!==t)),D(St,_(St).filter(e=>e.bot_user_id!==t)),D(Ct,_(Ct).filter(e=>e.bot.id!==t)),_(ct)?.id===t&&D(ct,null),await Promise.all([ts(e.workspace_id),Ei(e.workspace_id),Oi(e.workspace_id),ki(e.workspace_id)]),Di(e.workspace_id))}function hs(e){let t=e.payload,n=typeof t.user_id==`string`?t.user_id:``;if(!n||n!==_(G)?.id)return;let r=e.seq??t.last_read_seq??t.seq,i=typeof r==`number`?r:Number(r)||0;if(e.type===`channel.read`){let n=typeof t.channel_id==`string`?t.channel_id:e.channel_id||``;if(!n)return;D(K,_(K).map(e=>{if(e.id!==n)return e;let t=Math.max(e.last_read_seq||0,i);return{...e,last_read_seq:t,unread_count:t>=(e.last_seq||0)?0:e.unread_count||0}}))}else{let e=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;if(!e)return;D(q,_(q).map(t=>{if(t.id!==e)return t;let n=Math.max(t.last_read_seq||0,i);return{...t,last_read_seq:n,unread_count:n>=(t.last_seq||0)?0:t.unread_count||0}}))}}function gs(e,t){let n=e.payload,r=typeof n.kind==`string`?n.kind:``;if(r===`agent_commentary`||r===`agent_tool`)return;let i=typeof n.author_id==`string`?n.author_id:``;if(i&&i===_(G)?.id||n.parent_message_id)return;let a=wa(e),{channelID:o,dmID:s}=Ta(e);if(o){let n=o===_(X)&&!_(Z),r=n&&!_(Qe)?t??fo():!1,i=_(K).find(e=>e.id===o),s=a>0?a:(i?.last_seq||0)+1;n&&!r&&(i?.unread_count||0)===0&&Ca(o,i?.last_read_seq||0,e.created_at),D(K,_(K).map(e=>{if(e.id!==o)return e;let t=Math.max(e.last_seq||0,s),i=n&&!r&&(e.unread_count||0)===0?Math.max(e.last_read_seq||0,s-1):e.last_read_seq||0,a=r?0:(e.unread_count||0)+1;return{...e,last_seq:t,last_read_seq:i,unread_count:a}}))}else if(s){let n=s===_(Z),r=n?t??fo():!1,i=_(q).find(e=>e.id===s),o=a>0?a:(i?.last_seq||0)+1;n&&!r&&(i?.unread_count||0)===0&&Ca(s,i?.last_read_seq||0,e.created_at),D(q,_(q).map(e=>{if(e.id!==s)return e;let t=Math.max(e.last_seq||0,o),i=n&&!r&&(e.unread_count||0)===0?Math.max(e.last_read_seq||0,o-1):e.last_read_seq||0,a=r?0:(e.unread_count||0)+1;return{...e,last_seq:t,last_read_seq:i,unread_count:a}}))}}function _s(e){let t=e.payload,n=typeof t.user_id==`string`?t.user_id:``;if(!n||n===_(G)?.id)return;let r=e.channel_id||(typeof t.channel_id==`string`?t.channel_id:``),i=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;if(!(_(X)&&r===_(X)||_(Z)&&i===_(Z)))return;if(e.type===`typing.stopped`){D(rr,_(rr).filter(e=>e.userID!==n));return}let a=bs(n),o=_(rr).filter(e=>e.userID!==n);o.push({userID:n,user:a,expiresAt:Date.now()+jn}),D(rr,o),xs()}function vs(e){let t=e.payload,n=e.channel_id||(typeof t.channel_id==`string`?t.channel_id:``),r=typeof t.direct_conversation_id==`string`?t.direct_conversation_id:``;if(!(_(X)&&n===_(X)||_(Z)&&r===_(Z)))return;let i=typeof t.turn_id==`string`?t.turn_id:``,a=typeof t.op==`string`?t.op:``;if(!i||!a)return;let o=typeof t.user_id==`string`?t.user_id:``,s=Na(o,i);if(a===`clear`){D(ar,_(ar).filter(e=>e.turnId===i?o&&e.userId?e.key!==s:!1:!0));return}let c=t.line,l=c&&typeof c.id==`string`?c.id:``;if(!l)return;let u=c&&typeof c.text==`string`?c.text:``,d=c&&typeof c.title==`string`?c.title:``,f=u||d,p=c&&typeof c.tool_name==`string`?c.tool_name:typeof c?.toolName==`string`?c.toolName:void 0,m=c&&typeof c.status==`string`?c.status:void 0,h=c&&typeof c.kind==`string`?c.kind:void 0,g=_(ar).find(e=>e.key===s),v=g?.lines.find(e=>e.id===l),y={id:l,kind:h??v?.kind??`lifecycle`,text:f||v?.text||``,toolName:p??v?.toolName,status:m??v?.status,finalized:a===`finalize`||(v?.finalized??!1)};if(!v&&!y.text&&!y.toolName)return;let b=Date.now()+Pn;if(!g)D(ar,[..._(ar),{key:s,turnId:i,userId:o,lines:[y],expiresAt:b}]);else{let e=g.lines.some(e=>e.id===l)?g.lines.map(e=>e.id===l?y:e):[...g.lines,y];D(ar,_(ar).map(t=>t.key===s?{...t,lines:e,expiresAt:b}:t))}ys()}function ys(){or||=window.setInterval(()=>{let e=Date.now(),t=_(ar).filter(t=>t.expiresAt>e);t.length!==_(ar).length&&D(ar,t),t.length===0&&or&&(window.clearInterval(or),or=void 0)},1e3)}function bs(e){if(_(G)?.id===e)return _(G);let t=_(xt).find(t=>t.id===e);if(t)return t;let n=_(J).find(t=>t.author?.id===e)?.author;if(n)return n;let r=_(qe).find(t=>t.author?.id===e)?.author;if(r)return r;if(_(Q)?.author?.id===e)return _(Q).author;let i=_(bt).find(t=>t.user.id===e)?.user;if(i)return i;for(let t of _(q)){let n=t.members.find(t=>t.id===e);if(n)return n}}function xs(){ir||=window.setInterval(()=>{let e=Date.now(),t=_(rr).filter(t=>t.expiresAt>e);t.length!==_(rr).length&&D(rr,t),t.length===0&&ir&&(window.clearInterval(ir),ir=void 0)},1e3)}function Ss(){_(Y)&&(!_(X)&&!_(Z)||Ut({workspaceID:_(Y),channelID:_(X)||void 0,directConversationID:_(Z)||void 0}))}function Cs(e){!e||e.deleted_at||(Jo(),D(kt,null),D(jt,``),D(Q,null),D(lt,!1),D(ct,e),(_(o)===`owner`||_(o)===`moderator`)&&!_(bt).some(t=>t.user.id===e.id)&&Ei())}function ws(e){if(e.key===`Escape`&&_(Qn)&&_($n)!==`thread`){e.preventDefault(),Bo();return}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),vo())}function Ts(e){if(e.key===`Escape`&&_(Qn)&&_($n)===`thread`){e.preventDefault(),Bo();return}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Io())}function Es(e,t){Ro()||D(Ot,{url:e,title:t})}function Ds(e){D(Mt,document.activeElement instanceof HTMLElement?document.activeElement:null),Nt=_(Q)?document.querySelector(`.thread-scroll`)?.scrollTop??null:null,D(jt,_(Wn)),D(kt,e),s().then(()=>{document.querySelector(`.artifact-viewer__actions > button:last-child`)?.focus()})}function Os(){let e=_(Mt),t=_(kt)?.id||``;D(kt,null),D(jt,``),D(Mt,null),s().then(()=>{if(Nt!==null){let e=document.querySelector(`.thread-scroll`);e&&(e.scrollTop=Nt)}if(Nt=null,e?.isConnected){e.focus({preventScroll:!0});return}(_(Q)?document.querySelector(`.thread`):document)?.querySelector(`[data-artifact-upload-id="${CSS.escape(t)}"]`)?.focus({preventScroll:!0})})}function ks(e,t){for(let e of Lt)e.inert=!1;if(Lt.clear(),!(!e||!_(Ft)||!t))for(let e of _(Ft).children)!(e instanceof HTMLElement)||e===t||e.inert||(e.inert=!0,Lt.add(e))}function As(e){if(!_(kt)||!_(Xn)||e.key!==`Tab`||!_(Pt))return;let t=Array.from(_(Pt).querySelectorAll(`a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])`)).filter(e=>!e.inert&&e.getClientRects().length>0);if(t.length===0){e.preventDefault(),_(Pt).focus();return}let n=t[0],r=t[t.length-1];e.shiftKey&&(document.activeElement===n||!_(Pt).contains(document.activeElement))?(e.preventDefault(),r.focus()):!e.shiftKey&&(document.activeElement===r||!_(Pt).contains(document.activeElement))&&(e.preventDefault(),n.focus())}function js(e){let t=e.target;t instanceof HTMLImageElement&&t.closest(`.markdown`)&&(e.preventDefault(),Es(Re(t),t.alt||`Image`))}function Ms(e){let t=_(Rt)&&!_(Rt).endsWith(` `)?` -`:``;D(Rt,`${_(Rt)}${t}${e}`)}function Ms(e,t=e){js(`${e}${e==="```"?` +`:``;D(Rt,`${_(Rt)}${t}${e}`)}function Ns(e,t=e){Ms(`${e}${e==="```"?` code -`:`text`}${t}`)}function Ns(e,t){js(`![${t}](${e})`),D(Zt,!1),D(on,``)}function Ps(){if(_(kt)){Ds();return}if(_(lt)){D(lt,!1);return}let e=_(Q)!==null,t=_(qt),n=$();Ie.cancel(n,`thread`),_($n)===`thread`&&zo(),D(Q,null),D(ct,null),D(nr,`message`),D(qe,[]),t&&qo(),(e||t)&&_(Y)&&n&&oi(_(Y),n)}function Fs(){if(_(Q)){Ps();return}_(be)&&Ps(),D(fn,`pick a message to open its thread`)}async function Is(e=_(X),t=_(Z)){let n=++yt;if(!e||t){D(mt,[]),D(_t,``),D(gt,!1);return}D(gt,!0),D(_t,``);try{let t=await W(`/api/channels/${e}/pins?limit=100`);if(n!==yt||e!==_(X)||_(Z))return;D(mt,t.messages)}catch(e){if(n!==yt)return;D(_t,e instanceof Error?e.message:`Could not load pinned messages`)}finally{n===yt&&D(gt,!1)}}async function Ls(e,t){let n=_(X);if(!n||_(Z))throw Error(`Pins are available in channels only`);t?await W(`/api/channels/${n}/pins/${e.id}`,{method:`DELETE`}):await W(`/api/channels/${n}/pins`,{method:`POST`,body:JSON.stringify({message_id:e.id})}),await Is(n,``)}async function Rs(){if(_(lt)){D(lt,!1);return}if(!_(X)||_(Z))return;let e=_(Q)!==null,t=_(qt),n=$();if(qo(),D(Q,null),D(it,null),D(ct,null),D(qe,[]),(e||t)&&_(Y)&&n){pt=!0,await oi(_(Y),n);return}D(lt,!0),Is()}async function zs(e){D(lt,!1),await Mo(e.thread_root_id,e.parent_message_id?void 0:e),_(Y)&&_(Q)?.route_id&&window.location.pathname!==ti(_(Y),_(Q).id)&&await oi(_(Y),_(Q).id)}function Bs(e){if(ks(e),!e.defaultPrevented){if(e.key===`Escape`){if(e.target instanceof Element&&e.target.closest(`[data-handles-escape]`)||_(Ot))return;if(Lo())Vs();else if(_(Yn)){e.preventDefault(),Hs();return}else if(_(kt)){e.preventDefault(),Ps();return}else if(_(qt)){e.preventDefault(),Ps();return}else if(_(xe)){e.preventDefault(),qo();return}else if(_(Qn)){e.preventDefault(),zo();return}else{e.preventDefault(),po();return}}if(_(Yn)&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.isComposing){let t=document.activeElement;if(!(t instanceof HTMLInputElement)&&!(t instanceof HTMLTextAreaElement)&&!(t instanceof HTMLSelectElement)&&!(t instanceof HTMLElement&&t.isContentEditable)){e.preventDefault();return}}It(e,{authRequired:_(pn),isModalOpen:()=>Lo()||_(Yn),messageInput:_(er),replyInput:_(tr),target:Ro})}}function Vs(){_(Dr)&&_(Er).has(_(Dr).id)||_(tn)||(D(Dr,null),D(Or,``),D(Ot,null),D(Qt,!1),D(en,!1),D(nn,``),D(rn,!1),D(an,!1))}function Hs(){D(Yn,!1)}function Us(){if(_(Xn)){D(Yn,!_(Yn));return}D(Jn,!_(Jn))}v(()=>(_(ze),_(Y)),()=>{D(i,_(ze).find(e=>e.id===_(Y)))}),v(()=>_(i),()=>{D(o,_(i)?.role||``)}),v(()=>_(o),()=>{D(p,_(o)===`owner`)}),v(()=>(_(ct),_(bt)),()=>{D(m,_(ct)?_(bt).find(e=>e.user.id===_(ct)?.id):void 0)}),v(()=>(_(K),_(X)),()=>{D(T,_(K).find(e=>e.id===_(X)))}),v(()=>(_(T),_(o)),()=>{D(E,!!_(T)&&(_(o)===`owner`||_(o)===`moderator`))}),v(()=>(_(Ve),_(X)),()=>{D(k,Mr(_(Ve),_(X)))}),v(()=>(_(k),_(Qe)),()=>{D(A,_(k).find(e=>e.id===_(Qe)))}),v(()=>(_(X),_(Z)),()=>{Pi(_(X),_(Z))}),v(()=>(_(q),_(Z)),()=>{D(j,_(q).find(e=>e.id===_(Z)))}),v(()=>_(j),()=>{D(P,_(j)?.can_send??!0)}),v(()=>(_(Z),_(X)),()=>{D(Wn,_(Z)||_(X)||``)}),v(()=>_(Wn),()=>{kr(_(Wn))}),v(()=>_(Wn),()=>{Ai(_(Wn))}),v(()=>(_(X),_(Ct),_(j)),()=>{D(F,_(X)?_(Ct):_(j)?_(Ct).filter(e=>_(j)?.members?.some(t=>t.id===e.bot.id)):[])}),v(()=>(_(Z),_(q),_(X),_(K)),()=>{D(te,_(Z)?_(q).find(e=>e.id===_(Z))||{}:_(X)&&_(K).find(e=>e.id===_(X))||{})}),v(()=>(_(Wn),_(te)),()=>{D(L,da(_(Wn),_(te)))}),v(()=>(_(fn),_(K),_(q)),()=>{D(oe,_(fn)===`ready`?_(K).reduce((e,t)=>e+(t.unread_count||0),0)+_(q).reduce((e,t)=>e+(t.unread_count||0),0):0)}),v(()=>_(oe),()=>{dt?.setUnreadCount(_(oe))}),v(()=>_(lr),()=>{dt&&_(lr)&&typeof window<`u`&&dt.setActiveRoute(`${window.location.pathname}${window.location.search}${window.location.hash}`)}),v(()=>(_(L),_(te)),()=>{D(ce,_(L)>0&&_(te).last_read_seq||0)}),v(()=>(_(L),_(Wn),_(ce),_(Cn)),()=>{D(U,_(L)>0&&to(_(Wn),_(ce),_(Cn)))}),v(()=>(_(L),_(Wn),_(ce),_(Cn)),()=>{D(ue,_(L)>0?no(_(Wn),_(ce),_(Cn)):``)}),v(()=>(_(J),_(cn),_(ln),_(sr)),()=>{D(ge,Et(_(J),{hideCommentary:_(cn),hideToolCalls:_(ln)},_(sr)))}),v(()=>_(ar),()=>{D(ve,_(ar).some(e=>e.lines.some(e=>!e.finalized)))}),v(()=>_(mt),()=>{D(vt,new Set(_(mt).map(e=>e.id)))}),v(()=>(_(ar),_(Ct)),()=>{D(ye,Fa(_(ar),_(Ct),ys))}),v(()=>(_(kt),_(jt),_(Wn)),()=>{_(kt)&&_(jt)&&_(jt)!==_(Wn)&&(D(kt,null),D(jt,``),D(Mt,null))}),v(()=>(_(lt),_(Q),_(ct),_(kt)),()=>{D(be,_(lt)||_(Q)!==null||_(ct)!==null||_(kt)!==null)}),v(()=>(_(Kt),_(qt)),()=>{D(xe,_(Kt)!==null&&!_(qt))}),v(()=>(_(Xn),_(kt),_(Pt)),()=>{Os(_(Xn)&&_(kt)!==null,_(Pt))}),v(()=>(_(J),_(q),_(G)),()=>{D(Se,Be(_(J),_(q),_(G)?.id||``))}),v(()=>(_(G),_(Se),_(xt),_(j)),()=>{D(Tt,Ye(_(G),_(Se),_(xt),_(j)))}),v(()=>(_(G),_(Z),_(X),_(Ue)),()=>{D(Dt,_(G)?.id&&(_(Z)||_(X)&&_(Ue)!==null&&_(Ue)!==`muted`)?_(G).id:``)}),v(()=>(_($n),_(Qn),_(J)),()=>{_($n)===`channel`&&_(Qn)&&!_(J).some(e=>e.id===_(Qn)?.id)&&zo()}),v(()=>(_($n),_(Qn),_(J)),()=>{_($n)===`dm`&&_(Qn)&&!_(J).some(e=>e.id===_(Qn)?.id)&&zo()}),v(()=>(_($n),_(Qn),_(Q),_(qe)),()=>{_($n)===`thread`&&_(Qn)&&_(Q)&&_(Qn).id!==_(Q).id&&!_(qe).some(e=>e.id===_(Qn)?.id)&&zo()}),v(()=>(_(fn),_(G),h(je()),h(Me()),_(lr)),()=>{_(fn)===`ready`&&_(G)&&ei(je(),Me())!==_(lr)&&_i(je(),Me())}),v(()=>(_(Zt),_(on)),()=>{D(Ce,_(Zt)?ht.filter(e=>{let t=_(on).trim().toLowerCase();return!t||e.title.toLowerCase().includes(t)||e.tags.some(e=>e.includes(t))}):[])}),y(),re();var Ws=a();r(`1oa2eo8`,e=>{var t=Ha();u(e,t)}),g(`keydown`,I,Bs,!0),g(`pointerdown`,I,function(...e){At?.apply(this,e)},!0);var Gs=M(Ws),Ks=e=>{var t=Wa(),r=M(t),i=e=>{var t=Ua();d(()=>R(t,`data-platform`,(h(dt),z(()=>dt.platform)))),u(e,t)};N(r,e=>{Ae&&dt&&e(i)});var a=C(r,2),o=B(a),s=C(B(o),4),l=C(s,2),f=B(l,!0);H(l),H(o),H(a),d(e=>{R(s,`href`,e),c(f,_(mn)||`Any GitHub account can join.`)},[()=>(h(de),z(()=>de(`/api/auth/github/start`)))]),n(`click`,s,Pr),u(e,t)},qs=e=>{var t=$a(),r=M(t);let a;var s=B(r),g=e=>{{let t=O(()=>_(T)?_(Ue):null),n=O(()=>(_(j),h(Le),_(G),_(T),h(rt),z(()=>_(j)?`@${Le(_(j),_(G)?.id)}`:_(T)?`#${rt(_(T))}`:void 0))),r=O(()=>(_(j),_(T),z(()=>_(j)?void 0:_(T)?.external_url))),a=O(()=>(_(T),z(()=>!!_(T)))),o=O(()=>(_(i),z(()=>_(i)?.name)));ya(e,{get channelNotifPreference(){return _(t)},get channelNotifSaving(){return _(Ge)},get pinnedOpen(){return _(lt)},get channelTitle(){return _(n)},get externalURL(){return _(r)},get pinsAvailable(){return _(a)},get channelSettingsAvailable(){return _(E)},get connected(){return _(hn)},get platform(){return h(dt),z(()=>dt.platform)},get searchQuery(){return _(Wt)},get sidebarCollapsed(){return _(Jn)},get mobileNavOpen(){return _(Yn)},get mobileNavigation(){return _(Xn)},get workspaceName(){return _(o)},onOpenChannelSettings:Gr,onOpenWorkspaceSettings:Wr,onResetSearch:qo,onSearch:()=>void Wo(),onSearchQuery:e=>D(Wt,e),onToggleSidebar:Us,onToggleChannelNotifications:()=>void Fi(),onPinnedItems:Rs})}};N(s,e=>{Ae&&dt&&e(g)});var v=C(s,2),y=B(v),x=e=>{var t=f(`×`);u(e,t)},S=e=>{var t=Ga();u(e,t)};N(y,e=>{_(Yn)?e(x):e(S,-1)}),H(v);var ee=C(v,2),te=e=>{var t=Ka();n(`click`,t,Hs),u(e,t)};N(ee,e=>{_(Yn)&&e(te)});var ne=C(ee,2);{let e=O(()=>Ae?`/app`:`/`);Zn(ne,{get workspaces(){return _(ze)},get homeHref(){return _(e)},get selectedWorkspaceID(){return _(Y)},get workspaceName(){return _(Bt)},get showWorkspaceCreate(){return _(qn)},hrefForWorkspace:e=>ti(e),onSelectWorkspace:e=>void Si(e),onToggleWorkspaceCreate:()=>D(qn,!_(qn)),onWorkspaceName:e=>D(Bt,e),onCreateWorkspace:()=>void xi()})}var I=C(ne,2);{let e=O(()=>(_(i),z(()=>_(i)?.name))),t=O(()=>(_(i),h(fe),z(()=>_(i)?.icon_url?fe(_(i).icon_url):``))),n=O(()=>!Ae),r=O(()=>(_(wr),z(()=>_(wr)?.title)));Cr(I,{get workspaceID(){return _(Y)},get workspaceName(){return _(e)},get workspaceIconURL(){return _(t)},get connected(){return _(hn)},get sidebarCollapsed(){return _(Jn)},get showHeader(){return _(n)},get channels(){return _(K)},get directConversations(){return _(q)},get recentPeople(){return _(Se)},get currentUser(){return _(G)},get selectedChannelID(){return _(X)},get selectedDirectID(){return _(Z)},get selectedProfile(){return _(ct)},onToggleCollapse:Us,hrefForChannel:e=>ti(_(Y),e),hrefForDirect:e=>ti(_(Y),e),onSelectChannel:e=>void Ni(e),onCreateChannel:()=>D(rn,!0),onSelectDirect:e=>void rs(e),onCreateDirect:()=>D(an,!0),onHideDirect:e=>void cs(e),get hiddenDirectTitle(){return _(r)},onUndoHideDirect:()=>void ss(),onOpenProfile:Ss,onOpenSettings:Ur,onOpenWorkspaceSettings:Wr})}var re=C(I,2),ie=B(re),V=e=>{{let t=O(()=>(_(i),z(()=>_(i)?.name))),n=O(()=>(_(G),z(()=>_(G)?.id))),r=O(()=>_(Q)!==null);Ma(e,{get selectedDirect(){return _(j)},get selectedChannel(){return _(T)},get workspaceName(){return _(t)},get currentUserID(){return _(n)},get searchQuery(){return _(Wt)},get threadOpen(){return _(r)},get pinnedOpen(){return _(lt)},get channelNotifPreference(){return _(Ue)},get channelNotifSaving(){return _(Ge)},get channelSettingsAvailable(){return _(E)},onSearchQuery:e=>D(Wt,e),onSearch:()=>void Wo(),onResetSearch:qo,onToggleThread:Fs,onToggleChannelNotifications:()=>void Fi(),onPinnedItems:Rs,onOpenChannelSettings:Gr})}};N(ie,e=>{Ae||e(V)});var oe=C(ie,2),le=e=>{var t=qa(),r=B(t),i=C(B(r)),a=B(i,!0);H(i),H(r);var o=C(r,2);H(t),d(()=>c(a,(_(A),z(()=>_(A).name)))),n(`click`,o,()=>void Hi(``)),u(e,t)};N(oe,e=>{_(A)&&e(le)});var de=C(oe,2);{let e=O(()=>_(Tn)!==`idle`),t=O(()=>(_(Q),z(()=>_(Q)?.id))),n=O(()=>(_(G),z(()=>_(G)?.id))),r=O(()=>(_(j),_(P),z(()=>!!(_(j)&&!_(P))))),i=O(()=>_(p)&&!_(Z));at(de,{get channelID(){return _(X)},get pinnedMessageIDs(){return _(vt)},onTogglePin:Ls,onCopyLink:ni,get messages(){return _(ge)},get selectedDirect(){return _(j)},get selectedChannel(){return _(T)},get mentionPeople(){return _(Tt)},get mentionAttentionUserID(){return _(Dt)},get restoreState(){return _(Un)},get viewKey(){return _(Hn)},get loading(){return _(Kn)},get unreadCount(){return _(L)},get unreadBoundarySeq(){return _(ce)},get unreadBoundaryLoaded(){return _(U)},get unreadSince(){return _(ue)},get hasOlder(){return _(Mn)},get hasNewer(){return _(Fn)},get loadingOlder(){return _(In)},get loadingNewer(){return _(Ln)},get prepending(){return _(e)},get selectedThreadID(){return _(t)},get currentUserID(){return _(n)},get reactionController(){return Ne},get reactionsDisabled(){return _(r)},get canDeleteAnyMessage(){return _(i)},get deletingMessageIDs(){return _(Er)},onListRef:e=>D(xn,e),onActivateMessageComposer:Ti,onInlineImagePointerUp:As,onOpenProfile:Ss,onReply:Io,onOpenThread:jo,onJumpToQuote:e=>void Bo(e),onOpenImage:Ts,onOpenArtifact:Es,onLoadOlder:ta,onLoadNewer:e=>na(e===`wheel`),onJumpToUnread:()=>void Vo(),onHistorySettled:ca,onReachedBottom:ga,onMarkRead:e=>{ga({all:!0,seq:e})},onRetry:To,onDiscard:Eo,onDeleteMessage:ko,get editController(){return Ie},get editScope(){return _(Wn)},onMessageEdited:Oo,get topics(){return _(Ve)},onSelectTopic:e=>void Hi(e)})}var W=C(de,2);Rn(W,{get turns(){return _(ar)}});var pe=C(W,2);{let e=O(()=>(_(G),z(()=>_(G)?.id)));Nn(pe,{get entries(){return _(rr)},get currentUserID(){return _(e)}})}var me=C(pe,2),he=B(me);{let e=O(()=>_(ve)&&_(Q)===null);ot(he,{get active(){return _(e)},get agentNames(){return _(ye)}})}var _e=C(he,2),we=e=>{var t=Ja();let r;var i=B(t),a=B(i,!0);H(i);var o=C(i,2),s=B(o,!0);H(o);var l=C(o,2);H(t),d(()=>{r=w(t,1,`composer-notice`,null,r,{"composer-notice--error":_(wt).kind===`error`}),c(a,(_(wt),z(()=>_(wt).kind===`ephemeral`?`Only visible to you`:`Command failed`))),c(s,(_(wt),z(()=>_(wt).text)))}),n(`click`,l,()=>D(wt,null)),u(e,t)};N(_e,e=>{_(wt)&&e(we)});var Te=C(_e,2),Ee=e=>{var t=Xa(),r=C(B(t),2),i=B(r);i.value=i.__value=``;var a=C(i);l(a,1,()=>_(k),e=>e.id,(e,t)=>{var n=Ya(),r=B(n,!0);H(n);var i={};d(()=>{c(r,(_(t),z(()=>_(t).name))),i!==(i=(_(t),z(()=>_(t).id)))&&(n.value=(n.__value=(_(t),z(()=>_(t).id)))??``)}),u(e,n)}),H(r);var o;b(r),H(t),d(()=>{o!==(o=_(Ze))&&(r.value=(r.__value=_(Ze))??``,se(r,_(Ze)))}),n(`change`,r,e=>D(Ze,e.currentTarget.value)),u(e,t)};N(Te,e=>{_(X),_(k),z(()=>_(X)&&_(k).length>0)&&e(Ee)});var De=C(Te,2);{let e=O(()=>(_(j),_(P),h(Le),_(G),_(T),h(rt),z(()=>_(j)&&!_(P)?`No active recipient`:_(j)?`Message ${Le(_(j),_(G)?.id)}`:_(T)?`Message #${rt(_(T))}`:`Pick a channel to start`))),t=O(()=>!!_(j)&&!_(P)),n=O(()=>_(Qn)&&_($n)===(_(Z)?`dm`:`channel`)?_(Qn):null),r=O(()=>_(X)?_(St):[]);Ke(De,{get value(){return _(Rt)},get placeholder(){return _(e)},ariaLabel:`Message body`,submitLabel:`Send`,get disabled(){return _(t)},get pendingUpload(){return _(Xt)},get replyTarget(){return _(n)},showUpload:!0,showToolbar:!0,get showGifPicker(){return _(Zt)},get gifQuery(){return _(on)},get filteredGifs(){return _(Ce)},get slashCommands(){return _(r)},get botCommands(){return _(F)},get mentionPeople(){return _(Tt)},onValue:e=>{let t=_(Rt);D(Rt,e),e.trim()&&e!==t?xs():e.trim()||Gt()},onSubmit:()=>void _o(),onKeydown:Cs,onFocus:Ti,onInputRef:e=>D(er,e),onUploadFile:$o,onRemoveUpload:()=>D(Xt,null),onClearReply:zo,onApplyMarkdownWrap:Ms,onAppendToComposer:js,onToggleGif:()=>D(Zt,!_(Zt)),onGifQuery:e=>D(on,e),onPickGif:Ns})}H(me),H(re);var Oe=C(re,2),ke=e=>{var t=Za();Dn(B(t),{get upload(){return _(kt)},onClose:Ds}),H(t),ae(t,e=>D(Pt,e),()=>_(Pt)),d(()=>{t.inert=_(Yn),R(t,`role`,_(Xn)?`dialog`:`complementary`),R(t,`aria-modal`,_(Xn)?`true`:void 0)}),u(e,t)};N(Oe,e=>{_(kt)&&e(ke)});var je=C(Oe,2),Me=e=>{{let t=O(()=>_(kt)!==null),n=O(()=>_(Yn)||_(kt)!==null);li(e,{get session(){return _(Kt)},get covered(){return _(t)},get inert(){return _(n)},contextFor:Jo,onClose:qo,onOpenResult:e=>void Yo(e),onLoadMore:()=>void Ko()})}},Pe=e=>{var t=Qa();let n;var r=B(t),a=e=>{Kr(e,{get messages(){return _(mt)},get loading(){return _(gt)},get error(){return _(_t)},get topics(){return _(Ve)},get mentionPeople(){return _(Tt)},get mentionAttentionUserID(){return _(Dt)},onClose:Ps,onOpenThread:e=>void zs(e),onOpenImage:Ts,onOpenArtifact:Es,onUnpin:e=>Ls(e,!0),onSelectTopic:e=>{D(lt,!1),Hi(e)}})},s=e=>{{let t=O(()=>_(Qn)&&_($n)===`thread`?_(Qn):null),n=O(()=>(_(j),_(P),z(()=>!!(_(j)&&!_(P))))),r=O(()=>_(qt)&&_(Kt)?()=>void Xo():void 0),i=O(()=>(_(G),z(()=>_(G)?.id))),a=O(()=>(_(j),_(P),z(()=>!!(_(j)&&!_(P))))),o=O(()=>_(p)&&!_(Z));st(e,{get root(){return _(Q)},get replies(){return _(qe)},get threadState(){return _(it)},get replyBody(){return _(zt)},get replyTarget(){return _(t)},get mentionPeople(){return _(Tt)},get mentionAttentionUserID(){return _(Dt)},get agentResponding(){return _(ve)},get respondingAgentNames(){return _(ye)},get replyDisabled(){return _(n)},onClose:Ps,get onBack(){return _(r)},onReplyBody:e=>D(zt,e),onSubmitReply:()=>void Fo(),onReplyKeydown:ws,onReplyFocus:()=>D(nr,`thread`),onReplyInputRef:e=>D(tr,e),get currentUserID(){return _(i)},get reactionController(){return Ne},get reactionsDisabled(){return _(a)},onSetReplyTarget:Io,onClearReply:zo,get canDeleteAnyMessage(){return _(o)},get deletingMessageIDs(){return _(Er)},onDeleteMessage:ko,get channelID(){return _(X)},get pinnedMessageIDs(){return _(vt)},onTogglePin:Ls,onCopyLink:ni,get editController(){return Ie},get editScope(){return _(Wn)},onMessageEdited:Oo,onActivateThreadComposer:()=>D(nr,`thread`),onInlineImagePointerUp:As,onJumpToQuote:e=>void Bo(e),onOpenImage:Ts,onOpenArtifact:Es})}},c=e=>{{let t=O(()=>(_(i),z(()=>_(i)?.name)));Ir(e,{get profile(){return _(ct)},get currentUser(){return _(G)},get workspaceName(){return _(t)},get currentUserRole(){return _(o)},get moderation(){return _(m)},onClose:Ps,onEdit:Ur,onMessage:e=>void is(e),onApprove:e=>void ji(e,{role:`member`,clear_timeout:!0,blocked:!1}),onTimeout:e=>void ji(e,{timeout_minutes:60}),onBlock:e=>void ji(e,{blocked:!0}),onUnblock:e=>void ji(e,{blocked:!1,clear_timeout:!0}),onSetStatus:()=>D(fn,`status messages are coming soon`)})}},l=e=>{sa(e,{})};N(r,e=>{_(lt)?e(a):_(Q)?e(s,1):_(ct)?e(c,2):e(l,-1)}),H(t),d(()=>{n=w(t,1,`thread`,null,n,{open:_(be),covered:_(kt)!==null}),t.inert=_(Yn)||_(kt)!==null,R(t,`aria-hidden`,_(kt)?`true`:void 0),R(t,`aria-label`,_(lt)?`Pinned messages pane`:_(ct)?`Profile pane`:`Thread pane`)}),u(e,t)};N(je,e=>{_(xe)&&_(Kt)?e(Me):e(Pe,-1)}),H(r),ae(r,e=>D(Ft,e),()=>_(Ft));var Fe=C(r,2),Re=e=>{{let t=O(()=>dt!=null);aa(e,{get user(){return _(G)},get workspaces(){return _(ze)},get initialSection(){return _($t)},get hideCommentary(){return _(cn)},get hideToolCalls(){return _(ln)},get userAlign(){return _(un)},get otherAlign(){return _(dn)},get isDesktop(){return _(t)},onUserUpdated:Jr,onHideCommentary:Br,onHideToolCalls:Vr,onUserAlign:Rr,onOtherAlign:zr,onBrowserNotificationsChanged:e=>D(sn,e),onClose:Vs})}};N(Fe,e=>{_(Qt)&&_(G)&&e(Re)});var Be=C(Fe,2),He=e=>{hi(e,{get channel(){return _(T)},get saving(){return _(tn)},get error(){return _(nn)},onClose:Vs,onArchivedChange:e=>void qr(e)})};N(Be,e=>{_(en)&&_(T)&&e(He)});var We=C(Be,2),J=e=>{Vn(e,{get channelName(){return _(Vt)},status:``,onChannelName:e=>D(Vt,e),onClose:Vs,onCreate:()=>void Mi()})};N(We,e=>{_(rn)&&e(J)});var Ye=C(We,2),Xe=e=>{{let t=O(()=>(_(G),z(()=>_(G)?.id)));Gn(e,{get people(){return _(Se)},get currentUserID(){return _(t)},get memberID(){return _(Ht)},onMemberID:e=>D(Ht,e),onClose:Vs,onStart:e=>void ns(e)})}};N(Ye,e=>{_(an)&&e(Xe)});var Qe=C(Ye,2),$e=e=>{{let t=O(()=>(_(Er),_(Dr),z(()=>_(Er).has(_(Dr).id))));An(e,{get message(){return _(Dr)},get deleting(){return _(t)},get error(){return _(Or)},onClose:Vs,onConfirm:()=>void Ao()})}};N(Qe,e=>{_(Dr)&&e($e)});var et=C(Qe,2),tt=e=>{Je(e,{get url(){return _(Ot),z(()=>_(Ot).url)},get title(){return _(Ot),z(()=>_(Ot).title)},onClose:Vs})};N(et,e=>{_(Ot)&&e(tt)}),d(()=>{a=w(r,1,`shell`,null,a,{"desktop-shell":Ae,"nav-open":_(Yn),"sidebar-collapsed":_(Jn),"thread-open":_(be)&&!_(xe),"search-open":_(xe),"artifact-open":_(kt)!==null}),R(r,`data-connected`,_(hn)),R(r,`data-app-ready`,_(hn)&&_(fn)===`ready`),R(v,`aria-expanded`,_(Yn)),re.inert=_(Yn)}),n(`click`,v,()=>D(Yn,!_(Yn))),u(e,t)};N(Gs,e=>{_(pn)?e(Ks):e(qs,-1)}),u(e,Ws),ee()}U([`click`,`change`]);export{Va as n,eo as t}; \ No newline at end of file +`:`text`}${t}`)}function Ps(e,t){Ms(`![${t}](${e})`),D(Zt,!1),D(on,``)}function Fs(){if(_(kt)){Os();return}if(_(lt)){D(lt,!1);return}let e=_(Q)!==null,t=_(qt),n=$();Ie.cancel(n,`thread`),_($n)===`thread`&&Bo(),D(Q,null),D(ct,null),D(nr,`message`),D(qe,[]),t&&Jo(),(e||t)&&_(Y)&&n&&oi(_(Y),n)}function Is(){if(_(Q)){Fs();return}_(be)&&Fs(),D(fn,`pick a message to open its thread`)}async function Ls(e=_(X),t=_(Z)){let n=++yt;if(!e||t){D(mt,[]),D(_t,``),D(gt,!1);return}D(gt,!0),D(_t,``);try{let t=await W(`/api/channels/${e}/pins?limit=100`);if(n!==yt||e!==_(X)||_(Z))return;D(mt,t.messages)}catch(e){if(n!==yt)return;D(_t,e instanceof Error?e.message:`Could not load pinned messages`)}finally{n===yt&&D(gt,!1)}}async function Rs(e,t){let n=_(X);if(!n||_(Z))throw Error(`Pins are available in channels only`);t?await W(`/api/channels/${n}/pins/${e.id}`,{method:`DELETE`}):await W(`/api/channels/${n}/pins`,{method:`POST`,body:JSON.stringify({message_id:e.id})}),await Ls(n,``)}async function zs(){if(_(lt)){D(lt,!1);return}if(!_(X)||_(Z))return;let e=_(Q)!==null,t=_(qt),n=$();if(Jo(),D(Q,null),D(it,null),D(ct,null),D(qe,[]),(e||t)&&_(Y)&&n){pt=!0,await oi(_(Y),n);return}D(lt,!0),Ls()}async function Bs(e){D(lt,!1),await No(e.thread_root_id,e.parent_message_id?void 0:e),_(Y)&&_(Q)?.route_id&&window.location.pathname!==ti(_(Y),_(Q).id)&&await oi(_(Y),_(Q).id)}function Vs(e){if(As(e),!e.defaultPrevented){if(e.key===`Escape`){if(e.target instanceof Element&&e.target.closest(`[data-handles-escape]`)||_(Ot))return;if(Ro())Hs();else if(_(Yn)){e.preventDefault(),Us();return}else if(_(kt)){e.preventDefault(),Fs();return}else if(_(qt)){e.preventDefault(),Fs();return}else if(_(xe)){e.preventDefault(),Jo();return}else if(_(Qn)){e.preventDefault(),Bo();return}else{e.preventDefault(),mo();return}}if(_(Yn)&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.isComposing){let t=document.activeElement;if(!(t instanceof HTMLInputElement)&&!(t instanceof HTMLTextAreaElement)&&!(t instanceof HTMLSelectElement)&&!(t instanceof HTMLElement&&t.isContentEditable)){e.preventDefault();return}}It(e,{authRequired:_(pn),isModalOpen:()=>Ro()||_(Yn),messageInput:_(er),replyInput:_(tr),target:zo})}}function Hs(){_(Dr)&&_(Er).has(_(Dr).id)||_(tn)||(D(Dr,null),D(Or,``),D(Ot,null),D(Qt,!1),D(en,!1),D(nn,``),D(rn,!1),D(an,!1))}function Us(){D(Yn,!1)}function Ws(){if(_(Xn)){D(Yn,!_(Yn));return}D(Jn,!_(Jn))}v(()=>(_(ze),_(Y)),()=>{D(i,_(ze).find(e=>e.id===_(Y)))}),v(()=>_(i),()=>{D(o,_(i)?.role||``)}),v(()=>_(o),()=>{D(p,_(o)===`owner`)}),v(()=>(_(ct),_(bt)),()=>{D(m,_(ct)?_(bt).find(e=>e.user.id===_(ct)?.id):void 0)}),v(()=>(_(K),_(X)),()=>{D(T,_(K).find(e=>e.id===_(X)))}),v(()=>(_(T),_(o)),()=>{D(E,!!_(T)&&(_(o)===`owner`||_(o)===`moderator`))}),v(()=>(_(Ve),_(X)),()=>{D(k,Mr(_(Ve),_(X)))}),v(()=>(_(k),_(Qe)),()=>{D(A,_(k).find(e=>e.id===_(Qe)))}),v(()=>(_(X),_(Z)),()=>{Pi(_(X),_(Z))}),v(()=>(_(q),_(Z)),()=>{D(j,_(q).find(e=>e.id===_(Z)))}),v(()=>_(j),()=>{D(P,_(j)?.can_send??!0)}),v(()=>(_(Z),_(X)),()=>{D(Wn,_(Z)||_(X)||``)}),v(()=>_(Wn),()=>{kr(_(Wn))}),v(()=>_(Wn),()=>{Ai(_(Wn))}),v(()=>(_(X),_(Ct),_(j)),()=>{D(F,_(X)?_(Ct):_(j)?_(Ct).filter(e=>_(j)?.members?.some(t=>t.id===e.bot.id)):[])}),v(()=>(_(Z),_(q),_(X),_(K)),()=>{D(te,_(Z)?_(q).find(e=>e.id===_(Z))||{}:_(X)&&_(K).find(e=>e.id===_(X))||{})}),v(()=>(_(Wn),_(te)),()=>{D(L,da(_(Wn),_(te)))}),v(()=>(_(fn),_(K),_(q)),()=>{D(oe,_(fn)===`ready`?_(K).reduce((e,t)=>e+(t.unread_count||0),0)+_(q).reduce((e,t)=>e+(t.unread_count||0),0):0)}),v(()=>_(oe),()=>{dt?.setUnreadCount(_(oe))}),v(()=>_(lr),()=>{dt&&_(lr)&&typeof window<`u`&&dt.setActiveRoute(`${window.location.pathname}${window.location.search}${window.location.hash}`)}),v(()=>(_(L),_(te)),()=>{D(ce,_(L)>0&&_(te).last_read_seq||0)}),v(()=>(_(L),_(Wn),_(ce),_(Cn)),()=>{D(U,_(L)>0&&no(_(Wn),_(ce),_(Cn)))}),v(()=>(_(L),_(Wn),_(ce),_(Cn)),()=>{D(ue,_(L)>0?ro(_(Wn),_(ce),_(Cn)):``)}),v(()=>(_(J),_(cn),_(ln),_(sr)),()=>{D(ge,Et(_(J),{hideCommentary:_(cn),hideToolCalls:_(ln)},_(sr)))}),v(()=>_(ar),()=>{D(ve,_(ar).some(e=>e.lines.some(e=>!e.finalized)))}),v(()=>_(mt),()=>{D(vt,new Set(_(mt).map(e=>e.id)))}),v(()=>(_(ar),_(Ct)),()=>{D(ye,Fa(_(ar),_(Ct),bs))}),v(()=>(_(kt),_(jt),_(Wn)),()=>{_(kt)&&_(jt)&&_(jt)!==_(Wn)&&(D(kt,null),D(jt,``),D(Mt,null))}),v(()=>(_(lt),_(Q),_(ct),_(kt)),()=>{D(be,_(lt)||_(Q)!==null||_(ct)!==null||_(kt)!==null)}),v(()=>(_(Kt),_(qt)),()=>{D(xe,_(Kt)!==null&&!_(qt))}),v(()=>(_(Xn),_(kt),_(Pt)),()=>{ks(_(Xn)&&_(kt)!==null,_(Pt))}),v(()=>(_(J),_(q),_(G)),()=>{D(Se,Be(_(J),_(q),_(G)?.id||``))}),v(()=>(_(G),_(Se),_(xt),_(j)),()=>{D(Tt,Ye(_(G),_(Se),_(xt),_(j)))}),v(()=>(_(G),_(Z),_(X),_(Ue)),()=>{D(Dt,_(G)?.id&&(_(Z)||_(X)&&_(Ue)!==null&&_(Ue)!==`muted`)?_(G).id:``)}),v(()=>(_($n),_(Qn),_(J)),()=>{_($n)===`channel`&&_(Qn)&&!_(J).some(e=>e.id===_(Qn)?.id)&&Bo()}),v(()=>(_($n),_(Qn),_(J)),()=>{_($n)===`dm`&&_(Qn)&&!_(J).some(e=>e.id===_(Qn)?.id)&&Bo()}),v(()=>(_($n),_(Qn),_(Q),_(qe)),()=>{_($n)===`thread`&&_(Qn)&&_(Q)&&_(Qn).id!==_(Q).id&&!_(qe).some(e=>e.id===_(Qn)?.id)&&Bo()}),v(()=>(_(fn),_(G),h(je()),h(Me()),_(lr)),()=>{_(fn)===`ready`&&_(G)&&ei(je(),Me())!==_(lr)&&_i(je(),Me())}),v(()=>(_(Zt),_(on)),()=>{D(Ce,_(Zt)?ht.filter(e=>{let t=_(on).trim().toLowerCase();return!t||e.title.toLowerCase().includes(t)||e.tags.some(e=>e.includes(t))}):[])}),y(),re();var Gs=a();r(`1oa2eo8`,e=>{var t=Ha();u(e,t)}),g(`keydown`,I,Vs,!0),g(`pointerdown`,I,function(...e){At?.apply(this,e)},!0);var Ks=M(Gs),qs=e=>{var t=Ga(),r=M(t),i=e=>{var t=Ua();d(()=>R(t,`data-platform`,(h(dt),z(()=>dt.platform)))),u(e,t)};N(r,e=>{Ae&&dt&&e(i)});var a=C(r,2),o=B(a),s=C(B(o),4),l=C(s,2),f=e=>{var t=Wa();d(e=>R(t,`href`,e),[()=>(h(de),z(()=>de(`/api/auth/openclaw/start`)))]),u(e,t)};N(l,e=>{dt||e(f)});var p=C(l,2),m=B(p,!0);H(p),H(o),H(a),d(e=>{R(s,`href`,e),c(m,_(mn)||`Any GitHub account can join.`)},[()=>(h(de),z(()=>de(`/api/auth/github/start`)))]),n(`click`,s,Pr),u(e,t)},Js=e=>{var t=eo(),r=M(t);let a;var s=B(r),g=e=>{{let t=O(()=>_(T)?_(Ue):null),n=O(()=>(_(j),h(Le),_(G),_(T),h(rt),z(()=>_(j)?`@${Le(_(j),_(G)?.id)}`:_(T)?`#${rt(_(T))}`:void 0))),r=O(()=>(_(j),_(T),z(()=>_(j)?void 0:_(T)?.external_url))),a=O(()=>(_(T),z(()=>!!_(T)))),o=O(()=>(_(i),z(()=>_(i)?.name)));ya(e,{get channelNotifPreference(){return _(t)},get channelNotifSaving(){return _(Ge)},get pinnedOpen(){return _(lt)},get channelTitle(){return _(n)},get externalURL(){return _(r)},get pinsAvailable(){return _(a)},get channelSettingsAvailable(){return _(E)},get connected(){return _(hn)},get platform(){return h(dt),z(()=>dt.platform)},get searchQuery(){return _(Wt)},get sidebarCollapsed(){return _(Jn)},get mobileNavOpen(){return _(Yn)},get mobileNavigation(){return _(Xn)},get workspaceName(){return _(o)},onOpenChannelSettings:Gr,onOpenWorkspaceSettings:Wr,onResetSearch:Jo,onSearch:()=>void Go(),onSearchQuery:e=>D(Wt,e),onToggleSidebar:Ws,onToggleChannelNotifications:()=>void Fi(),onPinnedItems:zs})}};N(s,e=>{Ae&&dt&&e(g)});var v=C(s,2),y=B(v),x=e=>{var t=f(`×`);u(e,t)},S=e=>{var t=Ka();u(e,t)};N(y,e=>{_(Yn)?e(x):e(S,-1)}),H(v);var ee=C(v,2),te=e=>{var t=qa();n(`click`,t,Us),u(e,t)};N(ee,e=>{_(Yn)&&e(te)});var ne=C(ee,2);{let e=O(()=>Ae?`/app`:`/`);Zn(ne,{get workspaces(){return _(ze)},get homeHref(){return _(e)},get selectedWorkspaceID(){return _(Y)},get workspaceName(){return _(Bt)},get showWorkspaceCreate(){return _(qn)},hrefForWorkspace:e=>ti(e),onSelectWorkspace:e=>void Si(e),onToggleWorkspaceCreate:()=>D(qn,!_(qn)),onWorkspaceName:e=>D(Bt,e),onCreateWorkspace:()=>void xi()})}var I=C(ne,2);{let e=O(()=>(_(i),z(()=>_(i)?.name))),t=O(()=>(_(i),h(fe),z(()=>_(i)?.icon_url?fe(_(i).icon_url):``))),n=O(()=>!Ae),r=O(()=>(_(wr),z(()=>_(wr)?.title)));Cr(I,{get workspaceID(){return _(Y)},get workspaceName(){return _(e)},get workspaceIconURL(){return _(t)},get connected(){return _(hn)},get sidebarCollapsed(){return _(Jn)},get showHeader(){return _(n)},get channels(){return _(K)},get directConversations(){return _(q)},get recentPeople(){return _(Se)},get currentUser(){return _(G)},get selectedChannelID(){return _(X)},get selectedDirectID(){return _(Z)},get selectedProfile(){return _(ct)},onToggleCollapse:Ws,hrefForChannel:e=>ti(_(Y),e),hrefForDirect:e=>ti(_(Y),e),onSelectChannel:e=>void Ni(e),onCreateChannel:()=>D(rn,!0),onSelectDirect:e=>void is(e),onCreateDirect:()=>D(an,!0),onHideDirect:e=>void ls(e),get hiddenDirectTitle(){return _(r)},onUndoHideDirect:()=>void cs(),onOpenProfile:Cs,onOpenSettings:Ur,onOpenWorkspaceSettings:Wr})}var re=C(I,2),ie=B(re),V=e=>{{let t=O(()=>(_(i),z(()=>_(i)?.name))),n=O(()=>(_(G),z(()=>_(G)?.id))),r=O(()=>_(Q)!==null);Ma(e,{get selectedDirect(){return _(j)},get selectedChannel(){return _(T)},get workspaceName(){return _(t)},get currentUserID(){return _(n)},get searchQuery(){return _(Wt)},get threadOpen(){return _(r)},get pinnedOpen(){return _(lt)},get channelNotifPreference(){return _(Ue)},get channelNotifSaving(){return _(Ge)},get channelSettingsAvailable(){return _(E)},onSearchQuery:e=>D(Wt,e),onSearch:()=>void Go(),onResetSearch:Jo,onToggleThread:Is,onToggleChannelNotifications:()=>void Fi(),onPinnedItems:zs,onOpenChannelSettings:Gr})}};N(ie,e=>{Ae||e(V)});var oe=C(ie,2),le=e=>{var t=Ja(),r=B(t),i=C(B(r)),a=B(i,!0);H(i),H(r);var o=C(r,2);H(t),d(()=>c(a,(_(A),z(()=>_(A).name)))),n(`click`,o,()=>void Hi(``)),u(e,t)};N(oe,e=>{_(A)&&e(le)});var de=C(oe,2);{let e=O(()=>_(Tn)!==`idle`),t=O(()=>(_(Q),z(()=>_(Q)?.id))),n=O(()=>(_(G),z(()=>_(G)?.id))),r=O(()=>(_(j),_(P),z(()=>!!(_(j)&&!_(P))))),i=O(()=>_(p)&&!_(Z));at(de,{get channelID(){return _(X)},get pinnedMessageIDs(){return _(vt)},onTogglePin:Rs,onCopyLink:ni,get messages(){return _(ge)},get selectedDirect(){return _(j)},get selectedChannel(){return _(T)},get mentionPeople(){return _(Tt)},get mentionAttentionUserID(){return _(Dt)},get restoreState(){return _(Un)},get viewKey(){return _(Hn)},get loading(){return _(Kn)},get unreadCount(){return _(L)},get unreadBoundarySeq(){return _(ce)},get unreadBoundaryLoaded(){return _(U)},get unreadSince(){return _(ue)},get hasOlder(){return _(Mn)},get hasNewer(){return _(Fn)},get loadingOlder(){return _(In)},get loadingNewer(){return _(Ln)},get prepending(){return _(e)},get selectedThreadID(){return _(t)},get currentUserID(){return _(n)},get reactionController(){return Ne},get reactionsDisabled(){return _(r)},get canDeleteAnyMessage(){return _(i)},get deletingMessageIDs(){return _(Er)},onListRef:e=>D(xn,e),onActivateMessageComposer:Ti,onInlineImagePointerUp:js,onOpenProfile:Cs,onReply:Lo,onOpenThread:Mo,onJumpToQuote:e=>void Vo(e),onOpenImage:Es,onOpenArtifact:Ds,onLoadOlder:ta,onLoadNewer:e=>na(e===`wheel`),onJumpToUnread:()=>void Ho(),onHistorySettled:ca,onReachedBottom:ga,onMarkRead:e=>{ga({all:!0,seq:e})},onRetry:Eo,onDiscard:Do,onDeleteMessage:Ao,get editController(){return Ie},get editScope(){return _(Wn)},onMessageEdited:ko,get topics(){return _(Ve)},onSelectTopic:e=>void Hi(e)})}var W=C(de,2);Rn(W,{get turns(){return _(ar)}});var pe=C(W,2);{let e=O(()=>(_(G),z(()=>_(G)?.id)));Nn(pe,{get entries(){return _(rr)},get currentUserID(){return _(e)}})}var me=C(pe,2),he=B(me);{let e=O(()=>_(ve)&&_(Q)===null);ot(he,{get active(){return _(e)},get agentNames(){return _(ye)}})}var _e=C(he,2),we=e=>{var t=Ya();let r;var i=B(t),a=B(i,!0);H(i);var o=C(i,2),s=B(o,!0);H(o);var l=C(o,2);H(t),d(()=>{r=w(t,1,`composer-notice`,null,r,{"composer-notice--error":_(wt).kind===`error`}),c(a,(_(wt),z(()=>_(wt).kind===`ephemeral`?`Only visible to you`:`Command failed`))),c(s,(_(wt),z(()=>_(wt).text)))}),n(`click`,l,()=>D(wt,null)),u(e,t)};N(_e,e=>{_(wt)&&e(we)});var Te=C(_e,2),Ee=e=>{var t=Za(),r=C(B(t),2),i=B(r);i.value=i.__value=``;var a=C(i);l(a,1,()=>_(k),e=>e.id,(e,t)=>{var n=Xa(),r=B(n,!0);H(n);var i={};d(()=>{c(r,(_(t),z(()=>_(t).name))),i!==(i=(_(t),z(()=>_(t).id)))&&(n.value=(n.__value=(_(t),z(()=>_(t).id)))??``)}),u(e,n)}),H(r);var o;b(r),H(t),d(()=>{o!==(o=_(Ze))&&(r.value=(r.__value=_(Ze))??``,se(r,_(Ze)))}),n(`change`,r,e=>D(Ze,e.currentTarget.value)),u(e,t)};N(Te,e=>{_(X),_(k),z(()=>_(X)&&_(k).length>0)&&e(Ee)});var De=C(Te,2);{let e=O(()=>(_(j),_(P),h(Le),_(G),_(T),h(rt),z(()=>_(j)&&!_(P)?`No active recipient`:_(j)?`Message ${Le(_(j),_(G)?.id)}`:_(T)?`Message #${rt(_(T))}`:`Pick a channel to start`))),t=O(()=>!!_(j)&&!_(P)),n=O(()=>_(Qn)&&_($n)===(_(Z)?`dm`:`channel`)?_(Qn):null),r=O(()=>_(X)?_(St):[]);Ke(De,{get value(){return _(Rt)},get placeholder(){return _(e)},ariaLabel:`Message body`,submitLabel:`Send`,get disabled(){return _(t)},get pendingUpload(){return _(Xt)},get replyTarget(){return _(n)},showUpload:!0,showToolbar:!0,get showGifPicker(){return _(Zt)},get gifQuery(){return _(on)},get filteredGifs(){return _(Ce)},get slashCommands(){return _(r)},get botCommands(){return _(F)},get mentionPeople(){return _(Tt)},onValue:e=>{let t=_(Rt);D(Rt,e),e.trim()&&e!==t?Ss():e.trim()||Gt()},onSubmit:()=>void vo(),onKeydown:ws,onFocus:Ti,onInputRef:e=>D(er,e),onUploadFile:es,onRemoveUpload:()=>D(Xt,null),onClearReply:Bo,onApplyMarkdownWrap:Ns,onAppendToComposer:Ms,onToggleGif:()=>D(Zt,!_(Zt)),onGifQuery:e=>D(on,e),onPickGif:Ps})}H(me),H(re);var Oe=C(re,2),ke=e=>{var t=Qa();Dn(B(t),{get upload(){return _(kt)},onClose:Os}),H(t),ae(t,e=>D(Pt,e),()=>_(Pt)),d(()=>{t.inert=_(Yn),R(t,`role`,_(Xn)?`dialog`:`complementary`),R(t,`aria-modal`,_(Xn)?`true`:void 0)}),u(e,t)};N(Oe,e=>{_(kt)&&e(ke)});var je=C(Oe,2),Me=e=>{{let t=O(()=>_(kt)!==null),n=O(()=>_(Yn)||_(kt)!==null);li(e,{get session(){return _(Kt)},get covered(){return _(t)},get inert(){return _(n)},contextFor:Yo,onClose:Jo,onOpenResult:e=>void Xo(e),onLoadMore:()=>void qo()})}},Pe=e=>{var t=$a();let n;var r=B(t),a=e=>{Kr(e,{get messages(){return _(mt)},get loading(){return _(gt)},get error(){return _(_t)},get topics(){return _(Ve)},get mentionPeople(){return _(Tt)},get mentionAttentionUserID(){return _(Dt)},onClose:Fs,onOpenThread:e=>void Bs(e),onOpenImage:Es,onOpenArtifact:Ds,onUnpin:e=>Rs(e,!0),onSelectTopic:e=>{D(lt,!1),Hi(e)}})},s=e=>{{let t=O(()=>_(Qn)&&_($n)===`thread`?_(Qn):null),n=O(()=>(_(j),_(P),z(()=>!!(_(j)&&!_(P))))),r=O(()=>_(qt)&&_(Kt)?()=>void Zo():void 0),i=O(()=>(_(G),z(()=>_(G)?.id))),a=O(()=>(_(j),_(P),z(()=>!!(_(j)&&!_(P))))),o=O(()=>_(p)&&!_(Z));st(e,{get root(){return _(Q)},get replies(){return _(qe)},get threadState(){return _(it)},get replyBody(){return _(zt)},get replyTarget(){return _(t)},get mentionPeople(){return _(Tt)},get mentionAttentionUserID(){return _(Dt)},get agentResponding(){return _(ve)},get respondingAgentNames(){return _(ye)},get replyDisabled(){return _(n)},onClose:Fs,get onBack(){return _(r)},onReplyBody:e=>D(zt,e),onSubmitReply:()=>void Io(),onReplyKeydown:Ts,onReplyFocus:()=>D(nr,`thread`),onReplyInputRef:e=>D(tr,e),get currentUserID(){return _(i)},get reactionController(){return Ne},get reactionsDisabled(){return _(a)},onSetReplyTarget:Lo,onClearReply:Bo,get canDeleteAnyMessage(){return _(o)},get deletingMessageIDs(){return _(Er)},onDeleteMessage:Ao,get channelID(){return _(X)},get pinnedMessageIDs(){return _(vt)},onTogglePin:Rs,onCopyLink:ni,get editController(){return Ie},get editScope(){return _(Wn)},onMessageEdited:ko,onActivateThreadComposer:()=>D(nr,`thread`),onInlineImagePointerUp:js,onJumpToQuote:e=>void Vo(e),onOpenImage:Es,onOpenArtifact:Ds})}},c=e=>{{let t=O(()=>(_(i),z(()=>_(i)?.name)));Ir(e,{get profile(){return _(ct)},get currentUser(){return _(G)},get workspaceName(){return _(t)},get currentUserRole(){return _(o)},get moderation(){return _(m)},onClose:Fs,onEdit:Ur,onMessage:e=>void as(e),onApprove:e=>void ji(e,{role:`member`,clear_timeout:!0,blocked:!1}),onTimeout:e=>void ji(e,{timeout_minutes:60}),onBlock:e=>void ji(e,{blocked:!0}),onUnblock:e=>void ji(e,{blocked:!1,clear_timeout:!0}),onSetStatus:()=>D(fn,`status messages are coming soon`)})}},l=e=>{sa(e,{})};N(r,e=>{_(lt)?e(a):_(Q)?e(s,1):_(ct)?e(c,2):e(l,-1)}),H(t),d(()=>{n=w(t,1,`thread`,null,n,{open:_(be),covered:_(kt)!==null}),t.inert=_(Yn)||_(kt)!==null,R(t,`aria-hidden`,_(kt)?`true`:void 0),R(t,`aria-label`,_(lt)?`Pinned messages pane`:_(ct)?`Profile pane`:`Thread pane`)}),u(e,t)};N(je,e=>{_(xe)&&_(Kt)?e(Me):e(Pe,-1)}),H(r),ae(r,e=>D(Ft,e),()=>_(Ft));var Fe=C(r,2),Re=e=>{{let t=O(()=>dt!=null);aa(e,{get user(){return _(G)},get workspaces(){return _(ze)},get initialSection(){return _($t)},get hideCommentary(){return _(cn)},get hideToolCalls(){return _(ln)},get userAlign(){return _(un)},get otherAlign(){return _(dn)},get isDesktop(){return _(t)},onUserUpdated:Jr,onHideCommentary:Br,onHideToolCalls:Vr,onUserAlign:Rr,onOtherAlign:zr,onBrowserNotificationsChanged:e=>D(sn,e),onClose:Hs})}};N(Fe,e=>{_(Qt)&&_(G)&&e(Re)});var Be=C(Fe,2),He=e=>{hi(e,{get channel(){return _(T)},get saving(){return _(tn)},get error(){return _(nn)},onClose:Hs,onArchivedChange:e=>void qr(e)})};N(Be,e=>{_(en)&&_(T)&&e(He)});var We=C(Be,2),J=e=>{Vn(e,{get channelName(){return _(Vt)},status:``,onChannelName:e=>D(Vt,e),onClose:Hs,onCreate:()=>void Mi()})};N(We,e=>{_(rn)&&e(J)});var Ye=C(We,2),Xe=e=>{{let t=O(()=>(_(G),z(()=>_(G)?.id)));Gn(e,{get people(){return _(Se)},get currentUserID(){return _(t)},get memberID(){return _(Ht)},onMemberID:e=>D(Ht,e),onClose:Hs,onStart:e=>void rs(e)})}};N(Ye,e=>{_(an)&&e(Xe)});var Qe=C(Ye,2),$e=e=>{{let t=O(()=>(_(Er),_(Dr),z(()=>_(Er).has(_(Dr).id))));An(e,{get message(){return _(Dr)},get deleting(){return _(t)},get error(){return _(Or)},onClose:Hs,onConfirm:()=>void jo()})}};N(Qe,e=>{_(Dr)&&e($e)});var et=C(Qe,2),tt=e=>{Je(e,{get url(){return _(Ot),z(()=>_(Ot).url)},get title(){return _(Ot),z(()=>_(Ot).title)},onClose:Hs})};N(et,e=>{_(Ot)&&e(tt)}),d(()=>{a=w(r,1,`shell`,null,a,{"desktop-shell":Ae,"nav-open":_(Yn),"sidebar-collapsed":_(Jn),"thread-open":_(be)&&!_(xe),"search-open":_(xe),"artifact-open":_(kt)!==null}),R(r,`data-connected`,_(hn)),R(r,`data-app-ready`,_(hn)&&_(fn)===`ready`),R(v,`aria-expanded`,_(Yn)),re.inert=_(Yn)}),n(`click`,v,()=>D(Yn,!_(Yn))),u(e,t)};N(Ks,e=>{_(pn)?e(qs):e(Js,-1)}),u(e,Gs),ee()}U([`click`,`change`]);export{Va as n,to as t}; \ No newline at end of file diff --git a/apps/api/internal/webassets/dist/_app/immutable/entry/app.YP60KM03.js b/apps/api/internal/webassets/dist/_app/immutable/entry/app.Bm7pRLHf.js similarity index 85% rename from apps/api/internal/webassets/dist/_app/immutable/entry/app.YP60KM03.js rename to apps/api/internal/webassets/dist/_app/immutable/entry/app.Bm7pRLHf.js index dd23709e6..c02e6b34a 100644 --- a/apps/api/internal/webassets/dist/_app/immutable/entry/app.YP60KM03.js +++ b/apps/api/internal/webassets/dist/_app/immutable/entry/app.Bm7pRLHf.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.BvTkNKKJ.js","../chunks/DK3Fl9T5.js","../chunks/uCPLfb5l.js","../chunks/Cid4Tjuh.js","../chunks/Dt-HX3Vu.js","../chunks/xihTtKlq.js","../chunks/D_03Opfq.js","../chunks/YwXLQysC.js","../chunks/2Ij-r2c7.js","../assets/0.BPKxG8WH.css","../nodes/1.eRJAyoGR.js","../chunks/Bw4aMcZr.js","../nodes/2.hL2ORrat.js","../chunks/Qo16U5GS.js","../chunks/OQjxVT6U.js","../nodes/3.IJX1qDGG.js","../chunks/HclGiUj8.js","../chunks/BdPWQrN9.js","../nodes/4.DbjehSYy.js","../chunks/ICuO3Jye.js","../chunks/dUztObX2.js","../assets/QuoteBlock.DGJuMNIX.css","../chunks/DlGnnCJo.js","../chunks/D8ODVW2D.js","../chunks/DAgc_K8U.js","../chunks/CSGZ0Ari.js","../assets/ThreadPanel.DFXp9CyT.css","../chunks/DhPJt53a.js","../chunks/CDrSvh7y.js","../assets/ChatApp.D0d8bGTy.css","../nodes/5.M_hYDheF.js","../nodes/6.D1H8DGKr.js","../nodes/7.Cc-p3ifK.js","../chunks/ZNN3wTZr.js","../nodes/8.CBnMfTbg.js","../nodes/9.CArNqBL1.js","../nodes/10.CQAk5lm0.js","../nodes/11.C-h6aeef.js","../nodes/12.BlH9ErfY.js","../assets/12.hzXFZBW8.css","../nodes/13.CXufI_Wt.js","../assets/13.ByCz7Du1.css"])))=>i.map(i=>d[i]); -import{$ as e,F as t,I as n,K as r,N as i,P as a,Q as o,R as s,T as c,W as l,_t as u,a as d,at as f,ct as p,et as m,ft as h,gt as g,i as _,it as v,j as y,lt as b,r as x,rt as S,s as C,xt as w}from"../chunks/uCPLfb5l.js";import{t as T}from"../chunks/HclGiUj8.js";import"../chunks/xihTtKlq.js";var E={},D=n(`
            `),O=n(` `,1);function k(n,_){u(_,!0);let T=d(_,`components`,23,()=>[]),E=d(_,`data_0`,3,null),k=d(_,`data_1`,3,null),A=d(_,`data_2`,3,null);m(()=>_.stores.page.set(_.page)),e(()=>{_.stores,_.page,_.constructors,T(),_.form,E(),k(),A(),_.stores.page.notify()});let j=b(!1),M=b(!1),N=b(null);x(()=>{let e=_.stores.page.subscribe(()=>{l(j)&&(p(M,!0),r().then(()=>{p(N,document.title||`untitled page`,!0)}))});return p(j,!0),e});let P=h(()=>_.constructors[2]);var F=O(),I=v(F),L=e=>{let n=h(()=>_.constructors[0]);var r=t(),i=v(r);c(i,()=>l(n),(e,n)=>{C(n(e,{get data(){return E()},get form(){return _.form},get params(){return _.page.params},children:(e,n)=>{var r=t(),i=v(r),o=e=>{let n=h(()=>_.constructors[1]);var r=t(),i=v(r);c(i,()=>l(n),(e,n)=>{C(n(e,{get data(){return k()},get form(){return _.form},get params(){return _.page.params},children:(e,n)=>{var r=t(),i=v(r);c(i,()=>l(P),(e,t)=>{C(t(e,{get data(){return A()},get form(){return _.form},get params(){return _.page.params}}),e=>T()[2]=e,()=>T()?.[2])}),a(e,r)},$$slots:{default:!0}}),e=>T()[1]=e,()=>T()?.[1])}),a(e,r)},s=e=>{let n=h(()=>_.constructors[1]);var r=t(),i=v(r);c(i,()=>l(n),(e,t)=>{C(t(e,{get data(){return k()},get form(){return _.form},get params(){return _.page.params}}),e=>T()[1]=e,()=>T()?.[1])}),a(e,r)};y(i,e=>{_.constructors[2]?e(o):e(s,-1)}),a(e,r)},$$slots:{default:!0}}),e=>T()[0]=e,()=>T()?.[0])}),a(e,r)},R=e=>{let n=h(()=>_.constructors[0]);var r=t(),i=v(r);c(i,()=>l(n),(e,t)=>{C(t(e,{get data(){return E()},get form(){return _.form},get params(){return _.page.params}}),e=>T()[0]=e,()=>T()?.[0])}),a(e,r)};y(I,e=>{_.constructors[1]?e(L):e(R,-1)});var z=f(I,2),B=e=>{var t=D(),n=S(t),r=e=>{var t=s();o(()=>i(t,l(N))),a(e,t)};y(n,e=>{l(M)&&e(r)}),w(t),a(e,t)};y(z,e=>{l(j)&&e(B)}),a(n,F),g()}var A=_(k),j=[()=>T(()=>import(`../nodes/0.BvTkNKKJ.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url),()=>T(()=>import(`../nodes/1.eRJAyoGR.js`),__vite__mapDeps([10,2,1,5,11,3,4]),import.meta.url),()=>T(()=>import(`../nodes/2.hL2ORrat.js`),__vite__mapDeps([12,1,2,3,4,5,6,8,11,13,14]),import.meta.url),()=>T(()=>import(`../nodes/3.IJX1qDGG.js`),__vite__mapDeps([15,1,2,16,5,17]),import.meta.url),()=>T(()=>import(`../nodes/4.DbjehSYy.js`),__vite__mapDeps([18,2,1,5,17,19,3,4,16,6,8,7,13,14,20,21,22,23,24,25,26,27,28,29]),import.meta.url),()=>T(()=>import(`../nodes/5.M_hYDheF.js`),__vite__mapDeps([30,2,1,5,19,3,4,16,6,8,7,13,14,17,20,21,22,23,24,25,26,27,28,29]),import.meta.url),()=>T(()=>import(`../nodes/6.D1H8DGKr.js`),__vite__mapDeps([31,1,4,13]),import.meta.url),()=>T(()=>import(`../nodes/7.Cc-p3ifK.js`),__vite__mapDeps([32,1,2,5,8,7,14,27,33]),import.meta.url),()=>T(()=>import(`../nodes/8.CBnMfTbg.js`),__vite__mapDeps([34,1,2,5,8,7,14,22,24,27,28,33]),import.meta.url),()=>T(()=>import(`../nodes/9.CArNqBL1.js`),__vite__mapDeps([35,1,2,5,24,28,8]),import.meta.url),()=>T(()=>import(`../nodes/10.CQAk5lm0.js`),__vite__mapDeps([36,1,2,3,4,5,6,8,14,28]),import.meta.url),()=>T(()=>import(`../nodes/11.C-h6aeef.js`),__vite__mapDeps([37,2,1,5,19,3,4,16,6,8,7,13,14,17,20,21,22,23,24,25,26,27,28,29]),import.meta.url),()=>T(()=>import(`../nodes/12.BlH9ErfY.js`),__vite__mapDeps([38,1,2,5,8,7,20,21,22,23,24,28,39]),import.meta.url),()=>T(()=>import(`../nodes/13.CXufI_Wt.js`),__vite__mapDeps([40,1,2,5,8,7,20,21,22,25,26,28,41]),import.meta.url)],M=[],N={"/":[3],"/app":[4],"/app/[workspaceID]":[5],"/app/[workspaceID]/(settings)/settings":[6,[2]],"/app/[workspaceID]/(settings)/settings/bots":[7,[2]],"/app/[workspaceID]/(settings)/settings/integrations":[8,[2]],"/app/[workspaceID]/(settings)/settings/members":[9,[2]],"/app/[workspaceID]/(settings)/settings/overview":[10,[2]],"/app/[workspaceID]/[targetID]":[11],"/embed/channel/[workspaceID]/[channelID]":[12],"/embed/thread/[workspaceID]/[messageID]":[13]},P={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},F=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.decode])),I=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.encode])),L=!1,R=(e,t)=>F[e](t),z=()=>T(()=>import(`../chunks/Bjy-W4x2.js`).then(e=>e.default),[],import.meta.url);export{R as decode,F as decoders,N as dictionary,I as encoders,z as get_error_template,L as hash,P as hooks,E as matchers,j as nodes,A as root,M as server_loads}; \ No newline at end of file +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.YhQK-6PD.js","../chunks/DK3Fl9T5.js","../chunks/uCPLfb5l.js","../chunks/Cid4Tjuh.js","../chunks/Dt-HX3Vu.js","../chunks/xihTtKlq.js","../chunks/D_03Opfq.js","../chunks/YwXLQysC.js","../chunks/2Ij-r2c7.js","../assets/0.C0ts6lYR.css","../nodes/1.eRJAyoGR.js","../chunks/Bw4aMcZr.js","../nodes/2.hL2ORrat.js","../chunks/Qo16U5GS.js","../chunks/OQjxVT6U.js","../nodes/3.DyYnkssh.js","../chunks/HclGiUj8.js","../chunks/BdPWQrN9.js","../nodes/4.CND-DbAl.js","../chunks/Du-A4cpj.js","../chunks/dUztObX2.js","../assets/QuoteBlock.DGJuMNIX.css","../chunks/DlGnnCJo.js","../chunks/D8ODVW2D.js","../chunks/DAgc_K8U.js","../chunks/CSGZ0Ari.js","../assets/ThreadPanel.DFXp9CyT.css","../chunks/DhPJt53a.js","../chunks/CDrSvh7y.js","../assets/ChatApp.D0d8bGTy.css","../nodes/5.ay8-jKHZ.js","../nodes/6.D1H8DGKr.js","../nodes/7.Cc-p3ifK.js","../chunks/ZNN3wTZr.js","../nodes/8.CBnMfTbg.js","../nodes/9.CArNqBL1.js","../nodes/10.CQAk5lm0.js","../nodes/11.GnuA6s9k.js","../nodes/12.BlH9ErfY.js","../assets/12.hzXFZBW8.css","../nodes/13.CXufI_Wt.js","../assets/13.ByCz7Du1.css"])))=>i.map(i=>d[i]); +import{$ as e,F as t,I as n,K as r,N as i,P as a,Q as o,R as s,T as c,W as l,_t as u,a as d,at as f,ct as p,et as m,ft as h,gt as g,i as _,it as v,j as y,lt as b,r as x,rt as S,s as C,xt as w}from"../chunks/uCPLfb5l.js";import{t as T}from"../chunks/HclGiUj8.js";import"../chunks/xihTtKlq.js";var E={},D=n(`
            `),O=n(` `,1);function k(n,_){u(_,!0);let T=d(_,`components`,23,()=>[]),E=d(_,`data_0`,3,null),k=d(_,`data_1`,3,null),A=d(_,`data_2`,3,null);m(()=>_.stores.page.set(_.page)),e(()=>{_.stores,_.page,_.constructors,T(),_.form,E(),k(),A(),_.stores.page.notify()});let j=b(!1),M=b(!1),N=b(null);x(()=>{let e=_.stores.page.subscribe(()=>{l(j)&&(p(M,!0),r().then(()=>{p(N,document.title||`untitled page`,!0)}))});return p(j,!0),e});let P=h(()=>_.constructors[2]);var F=O(),I=v(F),L=e=>{let n=h(()=>_.constructors[0]);var r=t(),i=v(r);c(i,()=>l(n),(e,n)=>{C(n(e,{get data(){return E()},get form(){return _.form},get params(){return _.page.params},children:(e,n)=>{var r=t(),i=v(r),o=e=>{let n=h(()=>_.constructors[1]);var r=t(),i=v(r);c(i,()=>l(n),(e,n)=>{C(n(e,{get data(){return k()},get form(){return _.form},get params(){return _.page.params},children:(e,n)=>{var r=t(),i=v(r);c(i,()=>l(P),(e,t)=>{C(t(e,{get data(){return A()},get form(){return _.form},get params(){return _.page.params}}),e=>T()[2]=e,()=>T()?.[2])}),a(e,r)},$$slots:{default:!0}}),e=>T()[1]=e,()=>T()?.[1])}),a(e,r)},s=e=>{let n=h(()=>_.constructors[1]);var r=t(),i=v(r);c(i,()=>l(n),(e,t)=>{C(t(e,{get data(){return k()},get form(){return _.form},get params(){return _.page.params}}),e=>T()[1]=e,()=>T()?.[1])}),a(e,r)};y(i,e=>{_.constructors[2]?e(o):e(s,-1)}),a(e,r)},$$slots:{default:!0}}),e=>T()[0]=e,()=>T()?.[0])}),a(e,r)},R=e=>{let n=h(()=>_.constructors[0]);var r=t(),i=v(r);c(i,()=>l(n),(e,t)=>{C(t(e,{get data(){return E()},get form(){return _.form},get params(){return _.page.params}}),e=>T()[0]=e,()=>T()?.[0])}),a(e,r)};y(I,e=>{_.constructors[1]?e(L):e(R,-1)});var z=f(I,2),B=e=>{var t=D(),n=S(t),r=e=>{var t=s();o(()=>i(t,l(N))),a(e,t)};y(n,e=>{l(M)&&e(r)}),w(t),a(e,t)};y(z,e=>{l(j)&&e(B)}),a(n,F),g()}var A=_(k),j=[()=>T(()=>import(`../nodes/0.YhQK-6PD.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url),()=>T(()=>import(`../nodes/1.eRJAyoGR.js`),__vite__mapDeps([10,2,1,5,11,3,4]),import.meta.url),()=>T(()=>import(`../nodes/2.hL2ORrat.js`),__vite__mapDeps([12,1,2,3,4,5,6,8,11,13,14]),import.meta.url),()=>T(()=>import(`../nodes/3.DyYnkssh.js`),__vite__mapDeps([15,1,2,16,5,17]),import.meta.url),()=>T(()=>import(`../nodes/4.CND-DbAl.js`),__vite__mapDeps([18,2,1,5,17,19,3,4,16,6,8,7,13,14,20,21,22,23,24,25,26,27,28,29]),import.meta.url),()=>T(()=>import(`../nodes/5.ay8-jKHZ.js`),__vite__mapDeps([30,2,1,5,19,3,4,16,6,8,7,13,14,17,20,21,22,23,24,25,26,27,28,29]),import.meta.url),()=>T(()=>import(`../nodes/6.D1H8DGKr.js`),__vite__mapDeps([31,1,4,13]),import.meta.url),()=>T(()=>import(`../nodes/7.Cc-p3ifK.js`),__vite__mapDeps([32,1,2,5,8,7,14,27,33]),import.meta.url),()=>T(()=>import(`../nodes/8.CBnMfTbg.js`),__vite__mapDeps([34,1,2,5,8,7,14,22,24,27,28,33]),import.meta.url),()=>T(()=>import(`../nodes/9.CArNqBL1.js`),__vite__mapDeps([35,1,2,5,24,28,8]),import.meta.url),()=>T(()=>import(`../nodes/10.CQAk5lm0.js`),__vite__mapDeps([36,1,2,3,4,5,6,8,14,28]),import.meta.url),()=>T(()=>import(`../nodes/11.GnuA6s9k.js`),__vite__mapDeps([37,2,1,5,19,3,4,16,6,8,7,13,14,17,20,21,22,23,24,25,26,27,28,29]),import.meta.url),()=>T(()=>import(`../nodes/12.BlH9ErfY.js`),__vite__mapDeps([38,1,2,5,8,7,20,21,22,23,24,28,39]),import.meta.url),()=>T(()=>import(`../nodes/13.CXufI_Wt.js`),__vite__mapDeps([40,1,2,5,8,7,20,21,22,25,26,28,41]),import.meta.url)],M=[],N={"/":[3],"/app":[4],"/app/[workspaceID]":[5],"/app/[workspaceID]/(settings)/settings":[6,[2]],"/app/[workspaceID]/(settings)/settings/bots":[7,[2]],"/app/[workspaceID]/(settings)/settings/integrations":[8,[2]],"/app/[workspaceID]/(settings)/settings/members":[9,[2]],"/app/[workspaceID]/(settings)/settings/overview":[10,[2]],"/app/[workspaceID]/[targetID]":[11],"/embed/channel/[workspaceID]/[channelID]":[12],"/embed/thread/[workspaceID]/[messageID]":[13]},P={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},F=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.decode])),I=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.encode])),L=!1,R=(e,t)=>F[e](t),z=()=>T(()=>import(`../chunks/Bjy-W4x2.js`).then(e=>e.default),[],import.meta.url);export{R as decode,F as decoders,N as dictionary,I as encoders,z as get_error_template,L as hash,P as hooks,E as matchers,j as nodes,A as root,M as server_loads}; \ No newline at end of file diff --git a/apps/api/internal/webassets/dist/_app/immutable/nodes/0.BvTkNKKJ.js b/apps/api/internal/webassets/dist/_app/immutable/nodes/0.YhQK-6PD.js similarity index 100% rename from apps/api/internal/webassets/dist/_app/immutable/nodes/0.BvTkNKKJ.js rename to apps/api/internal/webassets/dist/_app/immutable/nodes/0.YhQK-6PD.js diff --git a/apps/api/internal/webassets/dist/_app/immutable/nodes/11.C-h6aeef.js b/apps/api/internal/webassets/dist/_app/immutable/nodes/11.GnuA6s9k.js similarity index 77% rename from apps/api/internal/webassets/dist/_app/immutable/nodes/11.C-h6aeef.js rename to apps/api/internal/webassets/dist/_app/immutable/nodes/11.GnuA6s9k.js index beb1c4c3f..ec17b67ae 100644 --- a/apps/api/internal/webassets/dist/_app/immutable/nodes/11.C-h6aeef.js +++ b/apps/api/internal/webassets/dist/_app/immutable/nodes/11.GnuA6s9k.js @@ -1 +1 @@ -import{_t as e,gt as t}from"../chunks/uCPLfb5l.js";import"../chunks/xihTtKlq.js";import{t as n}from"../chunks/ICuO3Jye.js";function r(r,i){e(i,!0),n(r,{get routeWorkspaceID(){return i.params.workspaceID},get routeTargetID(){return i.params.targetID}}),t()}export{r as component}; \ No newline at end of file +import{_t as e,gt as t}from"../chunks/uCPLfb5l.js";import"../chunks/xihTtKlq.js";import{t as n}from"../chunks/Du-A4cpj.js";function r(r,i){e(i,!0),n(r,{get routeWorkspaceID(){return i.params.workspaceID},get routeTargetID(){return i.params.targetID}}),t()}export{r as component}; \ No newline at end of file diff --git a/apps/api/internal/webassets/dist/_app/immutable/nodes/3.IJX1qDGG.js b/apps/api/internal/webassets/dist/_app/immutable/nodes/3.DyYnkssh.js similarity index 90% rename from apps/api/internal/webassets/dist/_app/immutable/nodes/3.IJX1qDGG.js rename to apps/api/internal/webassets/dist/_app/immutable/nodes/3.DyYnkssh.js index 131be1fd3..f7464a7de 100644 --- a/apps/api/internal/webassets/dist/_app/immutable/nodes/3.IJX1qDGG.js +++ b/apps/api/internal/webassets/dist/_app/immutable/nodes/3.DyYnkssh.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/ICuO3Jye.js","../chunks/DK3Fl9T5.js","../chunks/uCPLfb5l.js","../chunks/Cid4Tjuh.js","../chunks/Dt-HX3Vu.js","../chunks/HclGiUj8.js","../chunks/xihTtKlq.js","../chunks/D_03Opfq.js","../chunks/2Ij-r2c7.js","../chunks/YwXLQysC.js","../chunks/Qo16U5GS.js","../chunks/OQjxVT6U.js","../chunks/BdPWQrN9.js","../chunks/dUztObX2.js","../assets/QuoteBlock.DGJuMNIX.css","../chunks/DlGnnCJo.js","../chunks/D8ODVW2D.js","../chunks/DAgc_K8U.js","../chunks/CSGZ0Ari.js","../assets/ThreadPanel.DFXp9CyT.css","../chunks/DhPJt53a.js","../chunks/CDrSvh7y.js","../assets/ChatApp.D0d8bGTy.css","../chunks/haqm5EXa.js","../assets/ProductSite.4q0lYJor.css"])))=>i.map(i=>d[i]); -import{t as e}from"../chunks/DK3Fl9T5.js";import{F as t,M as n,P as r,W as i,dt as a,it as o}from"../chunks/uCPLfb5l.js";import{t as s}from"../chunks/HclGiUj8.js";import"../chunks/xihTtKlq.js";import"../chunks/BdPWQrN9.js";var c=e({prerender:()=>!0});function l(e){let c=window.location.hostname.startsWith(`app.`)?s(()=>import(`../chunks/ICuO3Jye.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]),import.meta.url):s(()=>import(`../chunks/haqm5EXa.js`),__vite__mapDeps([23,2,1,6,12,24]),import.meta.url);var l=t(),u=o(l);n(u,()=>c,null,(e,t)=>{let n=a(()=>i(t).default);i(n)(e,{})}),r(e,l)}export{l as component,c as universal}; \ No newline at end of file +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/Du-A4cpj.js","../chunks/DK3Fl9T5.js","../chunks/uCPLfb5l.js","../chunks/Cid4Tjuh.js","../chunks/Dt-HX3Vu.js","../chunks/HclGiUj8.js","../chunks/xihTtKlq.js","../chunks/D_03Opfq.js","../chunks/2Ij-r2c7.js","../chunks/YwXLQysC.js","../chunks/Qo16U5GS.js","../chunks/OQjxVT6U.js","../chunks/BdPWQrN9.js","../chunks/dUztObX2.js","../assets/QuoteBlock.DGJuMNIX.css","../chunks/DlGnnCJo.js","../chunks/D8ODVW2D.js","../chunks/DAgc_K8U.js","../chunks/CSGZ0Ari.js","../assets/ThreadPanel.DFXp9CyT.css","../chunks/DhPJt53a.js","../chunks/CDrSvh7y.js","../assets/ChatApp.D0d8bGTy.css","../chunks/haqm5EXa.js","../assets/ProductSite.4q0lYJor.css"])))=>i.map(i=>d[i]); +import{t as e}from"../chunks/DK3Fl9T5.js";import{F as t,M as n,P as r,W as i,dt as a,it as o}from"../chunks/uCPLfb5l.js";import{t as s}from"../chunks/HclGiUj8.js";import"../chunks/xihTtKlq.js";import"../chunks/BdPWQrN9.js";var c=e({prerender:()=>!0});function l(e){let c=window.location.hostname.startsWith(`app.`)?s(()=>import(`../chunks/Du-A4cpj.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]),import.meta.url):s(()=>import(`../chunks/haqm5EXa.js`),__vite__mapDeps([23,2,1,6,12,24]),import.meta.url);var l=t(),u=o(l);n(u,()=>c,null,(e,t)=>{let n=a(()=>i(t).default);i(n)(e,{})}),r(e,l)}export{l as component,c as universal}; \ No newline at end of file diff --git a/apps/api/internal/webassets/dist/_app/immutable/nodes/4.DbjehSYy.js b/apps/api/internal/webassets/dist/_app/immutable/nodes/4.CND-DbAl.js similarity index 63% rename from apps/api/internal/webassets/dist/_app/immutable/nodes/4.DbjehSYy.js rename to apps/api/internal/webassets/dist/_app/immutable/nodes/4.CND-DbAl.js index 74ebc7e42..60cdcc914 100644 --- a/apps/api/internal/webassets/dist/_app/immutable/nodes/4.DbjehSYy.js +++ b/apps/api/internal/webassets/dist/_app/immutable/nodes/4.CND-DbAl.js @@ -1 +1 @@ -import"../chunks/uCPLfb5l.js";import"../chunks/xihTtKlq.js";import"../chunks/BdPWQrN9.js";import{t as e}from"../chunks/ICuO3Jye.js";function t(t){e(t,{})}export{t as component}; \ No newline at end of file +import"../chunks/uCPLfb5l.js";import"../chunks/xihTtKlq.js";import"../chunks/BdPWQrN9.js";import{t as e}from"../chunks/Du-A4cpj.js";function t(t){e(t,{})}export{t as component}; \ No newline at end of file diff --git a/apps/api/internal/webassets/dist/_app/immutable/nodes/5.M_hYDheF.js b/apps/api/internal/webassets/dist/_app/immutable/nodes/5.ay8-jKHZ.js similarity index 72% rename from apps/api/internal/webassets/dist/_app/immutable/nodes/5.M_hYDheF.js rename to apps/api/internal/webassets/dist/_app/immutable/nodes/5.ay8-jKHZ.js index d1cfd4fd7..07c301115 100644 --- a/apps/api/internal/webassets/dist/_app/immutable/nodes/5.M_hYDheF.js +++ b/apps/api/internal/webassets/dist/_app/immutable/nodes/5.ay8-jKHZ.js @@ -1 +1 @@ -import{_t as e,gt as t}from"../chunks/uCPLfb5l.js";import"../chunks/xihTtKlq.js";import{t as n}from"../chunks/ICuO3Jye.js";function r(r,i){e(i,!0),n(r,{get routeWorkspaceID(){return i.params.workspaceID}}),t()}export{r as component}; \ No newline at end of file +import{_t as e,gt as t}from"../chunks/uCPLfb5l.js";import"../chunks/xihTtKlq.js";import{t as n}from"../chunks/Du-A4cpj.js";function r(r,i){e(i,!0),n(r,{get routeWorkspaceID(){return i.params.workspaceID}}),t()}export{r as component}; \ No newline at end of file diff --git a/apps/api/internal/webassets/dist/index.html b/apps/api/internal/webassets/dist/index.html index c4d334ffc..4f5e454a4 100644 --- a/apps/api/internal/webassets/dist/index.html +++ b/apps/api/internal/webassets/dist/index.html @@ -103,17 +103,17 @@ - + - + - + - + @@ -128,7 +128,7 @@ Promise.all([ import("./_app/immutable/entry/start.CRNCrUAM.js"), - import("./_app/immutable/entry/app.YP60KM03.js") + import("./_app/immutable/entry/app.Bm7pRLHf.js") ]).then(([kit, app]) => { kit.start(app, element); }); diff --git a/apps/web/src/ChatApp.svelte b/apps/web/src/ChatApp.svelte index d4a8c20d0..e36eaa90b 100644 --- a/apps/web/src/ChatApp.svelte +++ b/apps/web/src/ChatApp.svelte @@ -4090,6 +4090,17 @@ Continue with GitHub + {#if !desktop} + + {/if}

            {desktopAuthStatus || "Any GitHub account can join."}

            diff --git a/apps/web/src/styles/layout.css b/apps/web/src/styles/layout.css index 9a5bb3fc3..c0687f38b 100644 --- a/apps/web/src/styles/layout.css +++ b/apps/web/src/styles/layout.css @@ -112,6 +112,30 @@ transform: translateY(-1px); } +.openclaw-login { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 10px; + min-height: 46px; + border-radius: 12px; + background: transparent; + color: var(--text-strong); + font-weight: 600; + text-decoration: none; + border: 1px solid var(--muted-2); + transition: + transform 80ms ease, + background 120ms ease, + border-color 120ms ease; +} + +.openclaw-login:hover { + background: color-mix(in srgb, var(--text-strong) 6%, transparent); + border-color: var(--muted); + transform: translateY(-1px); +} + .auth-foot { margin: 0; color: var(--muted-2); diff --git a/docs/deployment.md b/docs/deployment.md index 732dd8d05..685ca25bd 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -230,6 +230,25 @@ GitHub for `read:org` and only accepts active members of that org. See [features/auth.md](features/auth.md) and [features/moderation.md](features/moderation.md). +## OpenClaw ID sign-in + +If you want first-party OpenClaw ID (OIDC) login, set: + +```sh +CLICKCLACK_PUBLIC_URL=https://chat.example.com +OPENCLAW_ID_CLIENT_ID=... +OPENCLAW_ID_CLIENT_SECRET=... +# Optional issuer override (default https://id.openclaw.ai/api/auth): +# OPENCLAW_ID_ISSUER=https://id.openclaw.ai/api/auth +``` + +Register the redirect URI `/api/auth/openclaw/callback` with the +identity provider. On the hosted Cloudflare deployment, set the credentials as +Worker secrets (`wrangler secret put OPENCLAW_ID_CLIENT_ID` and +`wrangler secret put OPENCLAW_ID_CLIENT_SECRET`); the Worker passes them into +the container when present. See [features/auth.md](features/auth.md) for the +flow details. + `CLICKCLACK_PUBLIC_URL` is startup-validated as an exact origin. Non-loopback origins must use HTTPS and cannot contain a path, credentials, query, or fragment. GitHub OAuth credentials are rejected without it. @@ -285,6 +304,7 @@ If a deployment configures edge rate limiting, cover: - `GET /api/auth/github/start` - `GET /api/auth/github/desktop/start` - `POST /api/auth/github/desktop/consume` +- `GET /api/auth/openclaw/start` Use a client identity that is trustworthy for the complete deployment path and leave enough headroom for legitimate users behind shared networks. The Go diff --git a/docs/features/auth.md b/docs/features/auth.md index 106026feb..b8748f0a2 100644 --- a/docs/features/auth.md +++ b/docs/features/auth.md @@ -238,6 +238,49 @@ that scope, so team-only hosting should set `CLICKCLACK_GITHUB_ALLOWED_ORG`. Guest restrictions and moderator controls are documented in [moderation.md](moderation.md). +## OpenClaw ID (optional) + +OpenClaw ID is the first-party OIDC provider at `https://id.openclaw.ai` +(issuer `https://id.openclaw.ai/api/auth`). ClickClack is registered as a +confidential OAuth 2.1 client. Configure the server through the environment: + +```sh +OPENCLAW_ID_CLIENT_ID=... +OPENCLAW_ID_CLIENT_SECRET=... +# Optional issuer override for staging or tests: +# OPENCLAW_ID_ISSUER=https://id.openclaw.ai/api/auth +``` + +Without a client ID and client secret, `GET /api/auth/openclaw/start` returns +`501`. Both credentials must be configured together, and the flow requires +`CLICKCLACK_PUBLIC_URL`. + +Flow: + +1. `GET /api/auth/openclaw/start` reuses the GitHub OAuth transaction store: a + database-backed, ten-minute transaction, the same HTTP-only browser-binding + cookie, and a SHA-256 PKCE challenge, then redirects to + `/oauth2/authorize` with `scope=openid profile email`. +2. OpenClaw ID redirects back to `GET /api/auth/openclaw/callback?code&state`. +3. The handler atomically consumes the state only when the browser binding + matches, exchanges the code at `/oauth2/token` using + `client_secret_basic` plus the stored PKCE verifier, and reads the returned + `id_token`. The token arrives directly from the issuer over TLS on an + authenticated confidential-client exchange, so no local JWKS signature check + runs; issuer, audience, expiry, and a verified email claim are enforced. +4. The handler links or creates the user by lowercased email exactly like the + magic-link path (`GetOrCreateUserByEmail`), joins the default workspace, + creates a normal session, sets the configured session cookie, and redirects + to `/`. + +Accounts without a verified email (`email_verified`) are rejected with `403`. +There is no desktop handoff for OpenClaw ID yet; the web login shows the +button only in the browser. Register the exact redirect URI +`/api/auth/openclaw/callback` with the identity provider. + +When metrics are enabled, `clickclack_openclaw_id_oauth_events_total` exposes +the same bounded event categories as the GitHub counter. + ## Authorization Every store mutation that touches a workspace runs `requireMembership` (or the diff --git a/infra/cloudflare/worker.ts b/infra/cloudflare/worker.ts index d2d09e5cc..28fd57b5a 100644 --- a/infra/cloudflare/worker.ts +++ b/infra/cloudflare/worker.ts @@ -31,6 +31,9 @@ export class ClickClackContainer extends Container { ...optionalContainerEnv({ CLICKCLACK_GITHUB_ALLOWED_ORG: env.CLICKCLACK_GITHUB_ALLOWED_ORG, CLICKCLACK_GITHUB_MODERATOR_ORG: env.CLICKCLACK_GITHUB_MODERATOR_ORG, + OPENCLAW_ID_CLIENT_ID: env.OPENCLAW_ID_CLIENT_ID, + OPENCLAW_ID_CLIENT_SECRET: env.OPENCLAW_ID_CLIENT_SECRET, + OPENCLAW_ID_ISSUER: env.OPENCLAW_ID_ISSUER, }), }; } diff --git a/packages/protocol/openapi.yaml b/packages/protocol/openapi.yaml index e32831f10..685457d6a 100644 --- a/packages/protocol/openapi.yaml +++ b/packages/protocol/openapi.yaml @@ -193,6 +193,47 @@ paths: description: GitHub provider request failed "503": description: Desktop grant capacity exhausted or canonical callback origin unavailable + /api/auth/openclaw/start: + get: + operationId: startOpenClawIDOAuth + responses: + "302": + description: Redirect to OpenClaw ID OIDC authorization + "400": + description: Ambiguous OAuth browser-binding cookies + "429": + description: Deployment edge rate limit exceeded, when configured + "500": + description: OAuth browser binding, state, PKCE generation, or persistence failed + "501": + description: OpenClaw ID sign-in not configured + "503": + description: OAuth transaction capacity exhausted or canonical callback origin unavailable + /api/auth/openclaw/callback: + get: + operationId: finishOpenClawIDOAuth + parameters: + - name: code + in: query + schema: + type: string + - name: state + in: query + schema: + type: string + responses: + "302": + description: Browser session created and redirected to the web app + "400": + description: Invalid OAuth callback + "403": + description: OpenClaw ID token invalid or account email not verified + "500": + description: Identity, workspace, or session persistence failed + "502": + description: OpenClaw ID provider request failed + "503": + description: Canonical callback origin unavailable /api/me: get: operationId: getMe