@ai-ecoverse/slicc-spectrum 1.107.2 → 1.108.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/slicc-ui.js CHANGED
@@ -51747,7 +51747,7 @@ var SliccDiffPanel = class extends ThemedElement {
51747
51747
  // src/app/lucide.ts
51748
51748
  var library = null;
51749
51749
  function load2() {
51750
- library ??= import("./chunk-AI3R2QZY.js");
51750
+ library ??= import("./chunk-FPDH5YML.js");
51751
51751
  return library;
51752
51752
  }
51753
51753
  function pascal(name) {
@@ -53808,7 +53808,21 @@ var accountStatus = {
53808
53808
  rejected: ["notice", "Rejected"],
53809
53809
  "needs-sign-in": ["neutral", "Needs sign-in"],
53810
53810
  "sign-in-expired": ["notice", "Sign-in expired"],
53811
- unreachable: ["notice", "Unreachable"]
53811
+ unreachable: ["notice", "Unreachable"],
53812
+ connecting: ["info", "Connecting\u2026"],
53813
+ "needs-token": ["neutral", "Needs a token"],
53814
+ failed: ["negative", "Couldn\u2019t connect"],
53815
+ disabled: ["neutral", "Disabled"],
53816
+ refused: ["negative", "Refused"],
53817
+ removing: ["info", "Removing\u2026"]
53818
+ };
53819
+ var serverStatus = {
53820
+ connecting: "connecting",
53821
+ "needs-secret": "needs-token",
53822
+ "needs-auth": "needs-sign-in",
53823
+ failed: "failed",
53824
+ disabled: "disabled",
53825
+ refused: "refused"
53812
53826
  };
53813
53827
  var authHints = {
53814
53828
  "api-key": "API key",
@@ -53830,6 +53844,25 @@ var removeBodies = {
53830
53844
  oauth: "Its sign-in is deleted from the vault. Models from it stop working.",
53831
53845
  local: "Models from it stop working."
53832
53846
  };
53847
+ var serverGone = "Agents can\u2019t use it any more.";
53848
+ var serversFailure = "mcp";
53849
+ function serverLeft(account, left) {
53850
+ const url = left.some(([part2]) => part2 === "url");
53851
+ const record = left.some(([part2]) => part2 === "record");
53852
+ const held2 = account.auth === "oauth" ? "sign-in" : "token";
53853
+ const locked = left.some(([, error]) => isVaultFailure(error) && error.code === "EACCES");
53854
+ const what = !url ? `its ${held2} stayed in the vault` : record ? `its ${held2} and URL stayed in the vault` : "the vault kept its URL";
53855
+ const next = url ? locked ? "Unlock the vault, then add the server and remove it again." : "Add the server and remove it again." : locked ? "Unlock the vault, then remove it under Secrets." : "Open Secrets to remove it.";
53856
+ return `${account.provider} is removed, but ${what}. ${next}`;
53857
+ }
53858
+ var refusedEntry = "This entry was refused. Remove it and add it again here.";
53859
+ var urlSecret = "This URL contains a secret. Remove it, turn on Uses a token, and paste the token when you connect.";
53860
+ var sentence2 = (text4) => text4.charAt(0).toUpperCase() + text4.slice(1);
53861
+ function serverRefusal(edit) {
53862
+ if (edit.code === "url-secret") return { field: "url", message: urlSecret };
53863
+ return { field: "form", message: sentence2(edit.reason) };
53864
+ }
53865
+ var serverName = /^[A-Za-z0-9_-]+$/;
53833
53866
  function draft(option) {
53834
53867
  return {
53835
53868
  id: option.id,
@@ -53874,6 +53907,7 @@ function words(message, word2) {
53874
53907
  return new RegExp(`\\b${word2.replace(/[^a-z0-9 ]/gi, "\\$&")}\\b`, "i").test(message);
53875
53908
  }
53876
53909
  var popup = (account) => account.group === "mcp" && account.auth === "oauth";
53910
+ var signsIn = (account) => account.group !== "mcp" || !(account.auth === "local" || account.state === "disabled" || account.state === "refused");
53877
53911
  var dual = (account) => account.auth === "oauth" && account.secret === "api-key";
53878
53912
  var signInMethod = (account) => dual(account) ? { method: "sign-in" } : void 0;
53879
53913
  var start = (options2, value) => options2.some((option) => option.value === value) ? value : options2[0]?.value ?? "";
@@ -53902,7 +53936,13 @@ var SliccSettings = class extends ThemedElement {
53902
53936
  query: { state: true },
53903
53937
  filled: { state: true },
53904
53938
  developing: { state: true },
53905
- developerError: { state: true }
53939
+ developerError: { state: true },
53940
+ serverOpen: { state: true },
53941
+ serverBusy: { state: true },
53942
+ serverProblem: { state: true },
53943
+ serverToken: { state: true },
53944
+ refusals: { state: true },
53945
+ removing: { state: true }
53906
53946
  };
53907
53947
  #waits = new SignInWaits(() => this.requestUpdate());
53908
53948
  #copies = new SignInCopies(() => this.requestUpdate());
@@ -53912,6 +53952,7 @@ var SliccSettings = class extends ThemedElement {
53912
53952
  #wanted = null;
53913
53953
  #developerPort;
53914
53954
  #call = 0;
53955
+ #refusalCall = 0;
53915
53956
  #scroll = new ViewScroll(this, "settings:scroll", { scroller: () => this, rows: "[data-id]" });
53916
53957
  constructor() {
53917
53958
  super();
@@ -53926,6 +53967,12 @@ var SliccSettings = class extends ThemedElement {
53926
53967
  this.filled = /* @__PURE__ */ new Set();
53927
53968
  this.developing = false;
53928
53969
  this.developerError = null;
53970
+ this.serverOpen = false;
53971
+ this.serverBusy = false;
53972
+ this.serverProblem = null;
53973
+ this.serverToken = false;
53974
+ this.refusals = {};
53975
+ this.removing = /* @__PURE__ */ new Set();
53929
53976
  }
53930
53977
  static styles = [
53931
53978
  fieldStyles,
@@ -54089,6 +54136,9 @@ var SliccSettings = class extends ThemedElement {
54089
54136
  align-items: center;
54090
54137
  gap: var(--swc-spacing-75);
54091
54138
  }
54139
+ [data-group='mcp'] .actions {
54140
+ justify-content: flex-end;
54141
+ }
54092
54142
  .notes {
54093
54143
  grid-column: 1 / -1;
54094
54144
  display: grid;
@@ -54109,6 +54159,16 @@ var SliccSettings = class extends ThemedElement {
54109
54159
  flex: none;
54110
54160
  margin-block-start: var(--swc-spacing-50);
54111
54161
  }
54162
+ .server {
54163
+ display: grid;
54164
+ gap: var(--swc-spacing-200);
54165
+ max-width: 420px;
54166
+ margin-block-start: var(--swc-spacing-300);
54167
+ }
54168
+ .entry {
54169
+ display: grid;
54170
+ gap: var(--swc-spacing-75);
54171
+ }
54112
54172
  .other-way {
54113
54173
  justify-self: start;
54114
54174
  padding: 0;
@@ -54287,6 +54347,10 @@ var SliccSettings = class extends ThemedElement {
54287
54347
  update();
54288
54348
  };
54289
54349
  queueMicrotask(() => settleModels(model));
54350
+ this.removing = /* @__PURE__ */ new Set();
54351
+ this.refusals = {};
54352
+ if (this.failure?.id === serversFailure) this.failure = null;
54353
+ void this.#readRefusals(model);
54290
54354
  if (model.updates !== this.#developerPort) {
54291
54355
  this.#developerPort = model.updates;
54292
54356
  this.#call += 1;
@@ -54299,7 +54363,11 @@ var SliccSettings = class extends ThemedElement {
54299
54363
  ...super.subscribe(model),
54300
54364
  ...developer && model.updates ? [model.updates.on("items", update)] : [],
54301
54365
  model.settings.on("settings", settle3),
54302
- model.settings.on("accounts", settle3),
54366
+ model.settings.on("accounts", () => {
54367
+ this.#settleRemoved(model);
54368
+ void this.#readRefusals(model);
54369
+ settle3();
54370
+ }),
54303
54371
  model.settings.on("providers", update),
54304
54372
  ...model.vault ? [model.vault.on("status", update), model.vault.on("list", update)] : []
54305
54373
  ];
@@ -54671,7 +54739,7 @@ var SliccSettings = class extends ThemedElement {
54671
54739
  #moved(account) {
54672
54740
  const url = this.#mcpUrl(account);
54673
54741
  const old = registrations2()[serverOf(account)] ?? this.#pinned(account);
54674
- return url && old && old !== url ? url : null;
54742
+ return signsIn(account) && url && old && old !== url ? url : null;
54675
54743
  }
54676
54744
  async #reconnectMcp(account, url) {
54677
54745
  const model = this.model;
@@ -54935,12 +55003,14 @@ var SliccSettings = class extends ThemedElement {
54935
55003
  const accounts = this.model?.settings.accounts() ?? [];
54936
55004
  if (accounts.some((account) => this.#signingIn(account))) return "signing in";
54937
55005
  if (this.entering !== null) return "a key is being entered";
55006
+ if (this.serverOpen) return "a server is being added";
54938
55007
  return this.picking ? "a provider is being added" : null;
54939
55008
  }
54940
55009
  #signingIn(account) {
54941
55010
  return account.status === "signing-in" || account.auth !== "api-key" && account.status !== "connected" && this.entering !== account.id && this.pending.has(account.id);
54942
55011
  }
54943
55012
  #action(account) {
55013
+ if (!signsIn(account)) return A;
54944
55014
  if (this.#signingIn(account) && this.model?.settings.cancel) {
54945
55015
  return b`<swc-button
54946
55016
  size="m"
@@ -54957,6 +55027,7 @@ var SliccSettings = class extends ThemedElement {
54957
55027
  data-action="disconnect"
54958
55028
  accessible-label=${`Disconnect ${account.provider}`}
54959
55029
  ?pending=${this.pending.has(account.id)}
55030
+ ?disabled=${this.removing.has(account.id)}
54960
55031
  @click=${() => this.#disconnect(account)}
54961
55032
  >Disconnect</swc-button>`;
54962
55033
  }
@@ -54970,16 +55041,19 @@ var SliccSettings = class extends ThemedElement {
54970
55041
  data-action="connect"
54971
55042
  accessible-label=${signs ? `Sign in to ${account.provider}` : `${label} ${account.provider}`}
54972
55043
  ?pending=${busy}
54973
- ?disabled=${entering || !!account.blocked}
55044
+ ?disabled=${entering || !!account.blocked || this.removing.has(account.id)}
54974
55045
  @click=${() => this.#start(account)}
54975
55046
  >${label}</swc-button>`;
54976
55047
  }
54977
55048
  #status(account) {
55049
+ if (this.removing.has(account.id)) return "removing";
54978
55050
  if (this.#signingIn(account)) return "signing-in";
54979
55051
  if (account.status === "connected" && account.blocked) return "unreachable";
54980
55052
  if (account.status === "expired" && account.auth === "api-key") return "rejected";
54981
- if (popup(account) && account.status === "disconnected") return "needs-sign-in";
54982
55053
  if (popup(account) && account.status === "expired") return "sign-in-expired";
55054
+ const server = account.state && serverStatus[account.state];
55055
+ if (server) return server;
55056
+ if (popup(account) && account.status === "disconnected") return "needs-sign-in";
54983
55057
  return account.status;
54984
55058
  }
54985
55059
  #account(account) {
@@ -54992,7 +55066,7 @@ var SliccSettings = class extends ThemedElement {
54992
55066
  </div>` : A;
54993
55067
  return b`<div class="account" data-id=${account.id}>
54994
55068
  <span class="provider">${account.provider}</span>
54995
- <span class="identity">${account.identity}${this.#inVault(account) ? b`<span class="kept" data-store="vault">${account.identity ? " \xB7 " : ""}${kept2(account)}</span>` : A}</span>
55069
+ <span class="identity">${account.identity}${this.#inVault(account) ? b`<span class="kept" data-store="vault">${account.identity ? " \xB7 " : ""}${kept2(account)}</span>` : A}${this.#refusedNote(account)}</span>
54996
55070
  <swc-status-light class="state" variant=${variant}>${label}</swc-status-light>
54997
55071
  ${this.#actions(account)}
54998
55072
  </div>
@@ -55000,6 +55074,11 @@ var SliccSettings = class extends ThemedElement {
55000
55074
  ${this.#movedNote(account)}
55001
55075
  ${this.adding?.id === account.id ? A : b`${this.#key(account)}${this.#otherKey(account)}${failure2}`}`;
55002
55076
  }
55077
+ #refusedNote(account) {
55078
+ if (account.state !== "refused") return A;
55079
+ const reason = this.refusals[serverOf(account)]?.reason;
55080
+ return b`<span data-refusal>${account.identity ? " \xB7 " : ""}${reason ? sentence2(reason) : refusedEntry}</span>`;
55081
+ }
55003
55082
  #otherKey(account) {
55004
55083
  if (this.entering !== account.id) return A;
55005
55084
  const other = this.#otherWay(account);
@@ -55007,35 +55086,41 @@ var SliccSettings = class extends ThemedElement {
55007
55086
  }
55008
55087
  #actions(account) {
55009
55088
  const moved2 = account.status === "connected" ? this.#moved(account) : null;
55010
- if (moved2)
55011
- return b`<div class="actions"><swc-button
55012
- size="m"
55013
- variant="accent"
55014
- data-action="reconnect-mcp"
55015
- accessible-label=${`Reconnect ${account.provider}`}
55016
- ?pending=${this.pending.has(account.id)}
55017
- @click=${() => this.#reconnectMcp(account, moved2)}
55018
- >Reconnect</swc-button>${this.#action(account)}</div>`;
55019
- if (this.#removable(account))
55020
- return b`<div class="actions">${this.#action(account)}${this.#removeButton(account)}</div>`;
55021
- return this.#action(account);
55089
+ const removable = this.#removable(account);
55090
+ if (!moved2 && !removable) return this.#action(account);
55091
+ return b`<div class="actions">${moved2 ? this.#reconnect(account, moved2) : A}${this.#action(account)}${removable ? this.#removeButton(account) : A}</div>`;
55092
+ }
55093
+ #reconnect(account, url) {
55094
+ return b`<swc-button
55095
+ size="m"
55096
+ variant="accent"
55097
+ data-action="reconnect-mcp"
55098
+ accessible-label=${`Reconnect ${account.provider}`}
55099
+ ?pending=${this.pending.has(account.id)}
55100
+ ?disabled=${this.removing.has(account.id)}
55101
+ @click=${() => this.#reconnectMcp(account, url)}
55102
+ >Reconnect</swc-button>`;
55022
55103
  }
55023
55104
  #removable(account) {
55024
- return !!this.#offered() && !!this.model?.settings.remove && account.group !== "mcp";
55105
+ const settings = this.model?.settings;
55106
+ if (account.group === "mcp") return !!settings?.removeServer;
55107
+ return !!this.#offered() && !!settings?.remove;
55025
55108
  }
55026
55109
  #removeButton(account) {
55027
55110
  const id = `remove-${account.id}`;
55028
55111
  const label = `Remove ${account.provider}`;
55112
+ const server = account.group === "mcp";
55113
+ const removing = this.removing.has(account.id);
55029
55114
  return b`<swc-action-button
55030
55115
  id=${id}
55031
55116
  size="m"
55032
55117
  quiet
55033
- data-action="remove-account"
55118
+ data-action=${server ? "remove-server" : "remove-account"}
55034
55119
  accessible-label=${label}
55035
- ?disabled=${this.pending.has(account.id)}
55036
- @click=${() => this.#remove(account)}
55120
+ ?disabled=${this.pending.has(account.id) || removing}
55121
+ @click=${() => server ? this.#removeServer(account) : this.#remove(account)}
55037
55122
  ><swc-icon-delete slot="icon"></swc-icon-delete></swc-action-button
55038
- ><swc-tooltip for=${id} placement="top">${label}</swc-tooltip>`;
55123
+ >${removing ? A : b`<swc-tooltip for=${id} placement="top">${label}</swc-tooltip>`}`;
55039
55124
  }
55040
55125
  async #closeTip(id) {
55041
55126
  const tip = this.renderRoot.querySelector(
@@ -55071,6 +55156,201 @@ var SliccSettings = class extends ThemedElement {
55071
55156
  this.focusOn("[data-action=add-provider]");
55072
55157
  for (const field of account.fields ?? []) this.#bases.delete(`${account.id} ${field.name}`);
55073
55158
  }
55159
+ #heldRecords(account, vault) {
55160
+ const server = serverOf(account);
55161
+ const name = recordName(account);
55162
+ return (vault.list()?.secrets ?? []).filter(
55163
+ (secret) => secret.kind === "mcp" && secret.state !== "removed" && (secret.server === server || secret.name === name)
55164
+ ).map((secret) => secret.name);
55165
+ }
55166
+ #serverRecords(account, vault) {
55167
+ const token = account.auth === "api-key" ? [recordName(account)] : [];
55168
+ const names2 = /* @__PURE__ */ new Set([...token, ...this.#heldRecords(account, vault)]);
55169
+ return [...names2].map((name) => [name, "mcp"]);
55170
+ }
55171
+ #removeServerBody(account) {
55172
+ const vault = this.model?.vault;
55173
+ if (!vault?.remove || !this.#heldRecords(account, vault).length) return serverGone;
55174
+ const held2 = account.auth === "oauth" ? "sign-in" : "token";
55175
+ return `Its ${held2} is deleted from the vault. ${serverGone}`;
55176
+ }
55177
+ #serverClear(model, account) {
55178
+ const vault = model.vault;
55179
+ const server = serverOf(account);
55180
+ const records = vault?.remove ? this.#serverRecords(account, vault) : [];
55181
+ const held2 = !!vault?.remove && this.#heldRecords(account, vault).length > 0;
55182
+ const pinned = !!this.#pinned(account);
55183
+ const url = registrations2()[server] ?? (held2 && !pinned && this.#mcpUrl(account));
55184
+ return async () => {
55185
+ const left = [];
55186
+ for (const [name, kind] of records)
55187
+ await gone2(vault, name, kind).catch((error) => left.push(["record", error]));
55188
+ try {
55189
+ if (url) await vault?.endpoints?.({ remove: { mcp: [{ server, url }] } });
55190
+ register(server, void 0);
55191
+ } catch (error) {
55192
+ register(server, url);
55193
+ left.push(["url", error]);
55194
+ }
55195
+ return left;
55196
+ };
55197
+ }
55198
+ #markRemoving(id, on2) {
55199
+ const rest = [...this.removing].filter((candidate) => candidate !== id);
55200
+ this.removing = new Set(on2 ? [...rest, id] : rest);
55201
+ }
55202
+ async #readRefusals(model) {
55203
+ const call = ++this.#refusalCall;
55204
+ const refused3 = model.settings.accounts().some((account) => account.state === "refused");
55205
+ if (!(refused3 && model.settings.refusals)) {
55206
+ this.refusals = {};
55207
+ return;
55208
+ }
55209
+ const refusals = await model.settings.refusals().catch(() => ({}));
55210
+ if (call === this.#refusalCall && this.model === model) this.refusals = refusals;
55211
+ }
55212
+ #settleRemoved(model) {
55213
+ const listed2 = new Set(model.settings.accounts().map((account) => account.id));
55214
+ const left = [...this.removing].filter((id) => listed2.has(id));
55215
+ if (left.length !== this.removing.size) this.removing = new Set(left);
55216
+ }
55217
+ async #removeServer(account) {
55218
+ const model = this.model;
55219
+ const { id } = account;
55220
+ const title2 = `Remove ${account.provider}?`;
55221
+ const body2 = this.#removeServerBody(account);
55222
+ if (!await confirm({ title: title2, body: body2, action: "Remove" })) return;
55223
+ if (this.model !== model) return;
55224
+ clearValues(this.renderRoot);
55225
+ if (this.entering === id) this.entering = null;
55226
+ await this.#closeTip(`remove-${id}`);
55227
+ this.#markRemoving(id, true);
55228
+ this.failure = null;
55229
+ const refused3 = (message) => {
55230
+ this.#markRemoving(id, false);
55231
+ if (this.model === model) this.failure = { id, message };
55232
+ };
55233
+ try {
55234
+ const clear2 = this.#serverClear(model, account);
55235
+ const edit = await model.settings.removeServer?.(id);
55236
+ if (!edit.ok) return refused3(sentence2(edit.reason));
55237
+ const left = await clear2();
55238
+ if (this.model !== model) return;
55239
+ if (left.length) this.failure = { id: serversFailure, message: serverLeft(account, left) };
55240
+ this.focusOn("[data-action=add-server]");
55241
+ } catch (error) {
55242
+ refused3(failureText(error));
55243
+ }
55244
+ }
55245
+ #openServerForm() {
55246
+ this.serverProblem = null;
55247
+ this.serverToken = false;
55248
+ this.serverOpen = true;
55249
+ void this.updateComplete.then(() => this.focusOn("[data-server-field=name]"));
55250
+ }
55251
+ #closeServerForm() {
55252
+ this.serverProblem = null;
55253
+ this.serverOpen = false;
55254
+ void this.updateComplete.then(() => this.focusOn("[data-action=add-server]"));
55255
+ }
55256
+ #checkServer(name, url) {
55257
+ if (!name) return { field: "name", message: "Name can\u2019t be empty" };
55258
+ if (!serverName.test(name))
55259
+ return { field: "name", message: "Use only letters, digits, _ and - in the name." };
55260
+ if (!url) return { field: "url", message: "URL can\u2019t be empty" };
55261
+ if (!this.#baseOf(url)) return { field: "url", message: "The URL must use https://." };
55262
+ return null;
55263
+ }
55264
+ #submitServer(event2) {
55265
+ event2.preventDefault();
55266
+ if (this.serverBusy) return;
55267
+ const form = event2.currentTarget;
55268
+ const text4 = (field) => form.querySelector(`[data-server-field=${field}]`)?.value.trim();
55269
+ const name = text4("name");
55270
+ const url = text4("url");
55271
+ const problem = this.#checkServer(name, url);
55272
+ this.serverProblem = problem;
55273
+ if (problem) {
55274
+ this.focusOn(`[data-server-field=${problem.field}]`);
55275
+ return;
55276
+ }
55277
+ void this.#addServer(name, this.serverToken ? { url, token: true } : { url });
55278
+ }
55279
+ async #addServer(name, entry) {
55280
+ const model = this.model;
55281
+ this.serverBusy = true;
55282
+ try {
55283
+ const edit = await model.settings.addServer?.(name, entry);
55284
+ if (this.model !== model) return;
55285
+ if (edit.ok) this.#closeServerForm();
55286
+ else this.#refuseServer(serverRefusal(edit));
55287
+ } catch (error) {
55288
+ if (this.model === model) this.serverProblem = { field: "form", message: failureText(error) };
55289
+ } finally {
55290
+ this.serverBusy = false;
55291
+ }
55292
+ }
55293
+ #refuseServer(problem) {
55294
+ this.serverProblem = problem;
55295
+ if (problem.field !== "form") this.focusOn(`[data-server-field=${problem.field}]`);
55296
+ }
55297
+ #serverNote(field) {
55298
+ if (this.serverProblem?.field !== field) return A;
55299
+ return b`<div class="problem" id=${`server-${field}-problem`} role="alert" data-problem=${field}>
55300
+ <swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle>
55301
+ <span>${this.serverProblem.message}</span>
55302
+ </div>`;
55303
+ }
55304
+ #serverInput(field, type, help2) {
55305
+ const invalid = this.serverProblem?.field === field;
55306
+ const problem = invalid ? `server-${field}-problem ` : "";
55307
+ return b`<input
55308
+ type=${type}
55309
+ autocomplete="off"
55310
+ spellcheck="false"
55311
+ data-server-field=${field}
55312
+ aria-required="true"
55313
+ aria-invalid=${invalid ? "true" : A}
55314
+ aria-describedby=${`${problem}${help2}`}
55315
+ />`;
55316
+ }
55317
+ #serverForm() {
55318
+ return b`<form class="server" data-form="add-server" novalidate @submit=${(event2) => this.#submitServer(event2)} @keydown=${(event2) => this.#submitOnEnter(event2)}>
55319
+ <div class="entry">
55320
+ <label class="field"><span>Name</span>${this.#serverInput("name", "text", "server-name-help")}</label>
55321
+ <p class="hint" id="server-name-help">Letters, digits, _ and -</p>
55322
+ ${this.#serverNote("name")}
55323
+ </div>
55324
+ <div class="entry">
55325
+ <label class="field"><span>URL</span>${this.#serverInput("url", "url", "server-url-help")}</label>
55326
+ <p class="hint" id="server-url-help">The server’s https:// address</p>
55327
+ ${this.#serverNote("url")}
55328
+ </div>
55329
+ <div class="entry">
55330
+ <sp-switch data-server-field="token" @change=${(event2) => {
55331
+ this.serverToken = this.#checked(event2);
55332
+ }}>Uses a token</sp-switch>
55333
+ ${this.serverToken ? b`<p class="hint" data-token-help>You paste the token when you connect the server. It stays in the vault.</p>` : A}
55334
+ </div>
55335
+ ${this.#serverNote("form")}
55336
+ <div class="buttons">
55337
+ <swc-button size="m" variant="accent" data-action="save" ?pending=${this.serverBusy} @click=${(event2) => this.#send(event2)}>Add</swc-button>
55338
+ <swc-button size="m" variant="secondary" data-action="cancel" ?disabled=${this.serverBusy} @click=${() => this.#closeServerForm()}>Cancel</swc-button>
55339
+ </div>
55340
+ </form>`;
55341
+ }
55342
+ #serverList(servers) {
55343
+ const add = !!this.model?.settings.addServer;
55344
+ const failed2 = this.failure?.id === serversFailure;
55345
+ if (!(servers.length || add || failed2)) return A;
55346
+ return b`<h2>MCP servers</h2>
55347
+ <div class="accounts" data-group="mcp">${c(
55348
+ servers,
55349
+ (account) => account.id,
55350
+ (account) => this.#account(account)
55351
+ )}${failed2 ? b`<div class="failure" role="alert" data-failure="servers"><swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle><span>${this.failure?.message}</span></div>` : A}</div>
55352
+ ${add && this.serverOpen ? this.#serverForm() : add ? b`<div class="add"><swc-action-button size="m" quiet data-action="add-server" @click=${() => this.#openServerForm()}><swc-icon-add slot="icon"></swc-icon-add>Add server</swc-action-button></div>` : A}`;
55353
+ }
55074
55354
  #notice(row, size4 = "long") {
55075
55355
  const needs = row.blocked;
55076
55356
  if (needs !== "cors-free-transport") return A;
@@ -55375,15 +55655,14 @@ var SliccSettings = class extends ThemedElement {
55375
55655
  </div>
55376
55656
  <h2 data-section="accounts">Accounts</h2>
55377
55657
  ${this.#providerList(providers)}
55378
- ${servers.length ? b`<h2>MCP servers</h2>
55379
- <div class="accounts" data-group="mcp">${servers.map((account) => this.#account(account))}</div>` : A}
55658
+ ${this.#serverList(servers)}
55380
55659
  ${this.model?.vault ? b`<slicc-secrets .model=${this.model}></slicc-secrets>` : A}
55381
55660
  </div>`;
55382
55661
  }
55383
55662
  };
55384
55663
 
55385
55664
  // src/app/sprinkle-theme.css
55386
- var sprinkle_theme_default = ':root {\n --s2-gray-25: var(--swc-gray-25);\n --s2-gray-50: var(--swc-gray-50);\n --s2-gray-75: var(--swc-gray-75);\n --s2-gray-100: var(--swc-gray-100);\n --s2-gray-200: var(--swc-gray-200);\n --s2-gray-300: var(--swc-gray-300);\n --s2-gray-400: var(--swc-gray-400);\n --s2-gray-500: var(--swc-gray-500);\n --s2-gray-600: var(--swc-gray-600);\n --s2-gray-700: var(--swc-gray-700);\n --s2-gray-800: var(--swc-gray-800);\n --s2-gray-900: var(--swc-gray-900);\n --s2-gray-1000: var(--swc-gray-1000);\n\n --s2-bg-base: var(--swc-background-base-color);\n --s2-bg-layer-1: var(--swc-background-layer-1-color);\n --s2-bg-layer-2: var(--swc-background-layer-2-color);\n --s2-bg-elevated: var(--swc-background-elevated-color);\n --s2-bg-sunken: var(--swc-background-pasteboard-color);\n\n --s2-content-default: var(--swc-neutral-content-color-default);\n --s2-content-secondary: var(--swc-neutral-subdued-content-color-default);\n --s2-content-tertiary: var(--swc-gray-600);\n --s2-content-disabled: var(--swc-disabled-content-color);\n --s2-content-accent: var(--swc-accent-content-color-default);\n --s2-content-negative: var(--swc-negative-content-color-default);\n --s2-content-positive: var(--swc-positive-color-900);\n --s2-content-notice: var(--swc-notice-color-900);\n --s2-content-informative: var(--swc-informative-color-900);\n\n --slicc-cone: #ef7000;\n --slicc-scoop-blue: #3562ff;\n --slicc-scoop-purple: #a962e8;\n --slicc-scoop-teal: #2db9be;\n --slicc-accent: #15d675;\n\n --s2-accent: var(--swc-accent-background-color-default);\n --s2-accent-hover: var(--swc-accent-background-color-hover);\n --s2-accent-down: var(--swc-accent-background-color-down);\n\n --s2-negative: var(--swc-negative-background-color-default);\n --s2-positive: var(--swc-positive-background-color-default);\n --s2-informative: var(--swc-informative-background-color-default);\n --s2-notice: var(--swc-notice-background-color-default);\n\n --s2-border-default: var(--swc-gray-300);\n --s2-border-subtle: var(--swc-gray-200);\n --s2-border-focus: var(--swc-focus-indicator-color);\n\n --s2-font-family:\n adobe-clean-spectrum-vf, "Adobe Clean Spectrum VF", adobe-clean, "Adobe Clean",\n var(--swc-sans-font-family-stack);\n --s2-font-mono: var(--swc-code-font-family-stack);\n\n --s2-font-size-50: var(--swc-font-size-50);\n --s2-font-size-75: var(--swc-font-size-75);\n --s2-font-size-100: var(--swc-font-size-100);\n --s2-font-size-200: var(--swc-font-size-200);\n --s2-font-size-300: var(--swc-font-size-300);\n --s2-font-size-400: var(--swc-font-size-400);\n --s2-font-size-500: var(--swc-font-size-500);\n --s2-font-size-600: var(--swc-font-size-600);\n\n --s2-line-height-50: var(--swc-line-height-font-size-50);\n --s2-line-height-75: var(--swc-line-height-font-size-75);\n --s2-line-height-100: var(--swc-line-height-font-size-100);\n --s2-line-height-200: var(--swc-line-height-font-size-200);\n --s2-line-height-300: var(--swc-line-height-font-size-300);\n\n --s2-spacing-50: var(--swc-spacing-75);\n --s2-spacing-75: var(--swc-spacing-85);\n --s2-spacing-100: var(--swc-spacing-100);\n --s2-spacing-200: var(--swc-spacing-200);\n --s2-spacing-300: var(--swc-spacing-300);\n --s2-spacing-400: var(--swc-spacing-400);\n --s2-spacing-500: var(--swc-spacing-500);\n --s2-spacing-600: var(--swc-spacing-600);\n\n --s2-radius-s: var(--swc-corner-radius-small-default);\n --s2-radius-default: var(--swc-corner-radius-medium-default);\n --s2-radius-l: var(--swc-corner-radius-large-default);\n --s2-radius-xl: var(--swc-corner-radius-extra-large-default);\n --s2-radius-pill: 9999px;\n\n --s2-shadow-elevated: var(--swc-drop-shadow-elevated);\n --s2-shadow-container: var(--swc-drop-shadow-emphasized);\n\n --s2-transition-default: var(--swc-animation-duration-100) var(--swc-animation-ease-in-out);\n\n --s2-header-height: var(--swc-component-height-400);\n\n --uxc-yellow-subtle-bg: var(--swc-yellow-subtle-background-color-default);\n --uxc-yellow-subtle-text: var(--swc-yellow-1000);\n --uxc-purple-subtle-bg: var(--swc-purple-subtle-background-color-default);\n --uxc-purple-subtle-text: var(--swc-purple-1000);\n --uxc-cyan-subtle-bg: var(--swc-cyan-subtle-background-color-default);\n --uxc-cyan-subtle-text: var(--swc-cyan-1000);\n --uxc-magenta-subtle-bg: var(--swc-magenta-subtle-background-color-default);\n --uxc-magenta-subtle-text: var(--swc-magenta-1000);\n --uxc-indigo-subtle-bg: var(--swc-indigo-subtle-background-color-default);\n --uxc-indigo-subtle-text: var(--swc-indigo-1000);\n --uxc-gray-subtle-bg: var(--swc-gray-subtle-background-color-default);\n --uxc-gray-subtle-text: var(--swc-neutral-content-color-default);\n --uxc-positive-subtle-bg: var(--swc-positive-subtle-background-color-default);\n --uxc-positive-subtle-text: var(--swc-positive-color-1000);\n --uxc-notice-subtle-bg: var(--swc-notice-subtle-background-color-default);\n --uxc-notice-subtle-text: var(--swc-notice-color-1000);\n --uxc-negative-subtle-bg: var(--swc-negative-subtle-background-color-default);\n --uxc-negative-subtle-text: var(--swc-negative-color-1000);\n --uxc-accent-subtle-bg: var(--swc-accent-subtle-background-color-default);\n --uxc-accent-subtle-text: var(--swc-accent-color-1000);\n --uxc-neutral-subtle-bg: var(--swc-neutral-subtle-background-color-default);\n\n --uxc-positive-text: var(--s2-content-positive);\n --uxc-notice-text: var(--s2-content-notice);\n --uxc-negative-text: var(--s2-content-negative);\n --uxc-informative-text: var(--s2-content-informative);\n --uxc-accent-text: var(--s2-content-accent);\n\n --uxc-nav-rail-width: 58px;\n --uxc-thread-header-height: var(--swc-component-height-400);\n --uxc-content-max-width: 800px;\n\n --slicc-warm-bg: color-mix(in oklch, var(--s2-gray-50) 94%, var(--slicc-cone) 6%);\n --slicc-brand-gradient: linear-gradient(\n 90deg,\n var(--slicc-cone) 0%,\n var(--slicc-scoop-blue) 50%,\n var(--slicc-scoop-purple) 100%\n );\n}\n\n:where(:root) {\n color-scheme: dark;\n}\n:where(:root.theme-light, :root:has(body[data-theme="light"])) {\n color-scheme: light;\n}\n\n.theme-light .tok-keyword,\n:root:where(:has(body[data-theme="light"])) .tok-keyword {\n color: var(--swc-purple-1000);\n}\n.theme-light .tok-string,\n:root:where(:has(body[data-theme="light"])) .tok-string {\n color: var(--swc-green-1000);\n}\n.theme-light .tok-number,\n:root:where(:has(body[data-theme="light"])) .tok-number {\n color: var(--swc-orange-1000);\n}\n.theme-light .tok-comment,\n:root:where(:has(body[data-theme="light"])) .tok-comment {\n color: var(--s2-content-secondary);\n}\n.theme-light .tok-punct,\n:root:where(:has(body[data-theme="light"])) .tok-punct {\n color: var(--swc-blue-1000);\n}\n.theme-light .tok-fn,\n:root:where(:has(body[data-theme="light"])) .tok-fn {\n color: var(--swc-cyan-1000);\n}\n\n.theme-light .s2-tooltip,\n:root:where(:has(body[data-theme="light"])) .s2-tooltip {\n background: var(--s2-gray-900);\n color: var(--s2-gray-25);\n}\n\n.theme-light ::-webkit-scrollbar-thumb,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb {\n background: var(--s2-gray-300);\n}\n.theme-light ::-webkit-scrollbar-thumb:hover,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb:hover {\n background: var(--s2-gray-400);\n}\n\n.sprinkle-content {\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-heading {\n font-size: var(--s2-font-size-300);\n font-weight: 700;\n color: var(--s2-gray-900);\n margin: 0 0 var(--s2-spacing-100);\n line-height: 1.3;\n letter-spacing: 0;\n}\n.sprinkle-heading--m {\n font-size: var(--s2-font-size-200);\n}\n.sprinkle-heading--s {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-label {\n font-size: var(--s2-font-size-75);\n font-weight: 600;\n color: var(--s2-gray-600);\n line-height: 1.3;\n margin: 0;\n}\n.sprinkle-body {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-content-default);\n line-height: 1.5;\n}\n.sprinkle-detail {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n line-height: 1.3;\n}\n\n.sprinkle-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n stroke-width: 2;\n vertical-align: middle;\n}\n.sprinkle-icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.sprinkle-icon--xs {\n width: 12px;\n height: 12px;\n}\n.sprinkle-icon--s {\n width: 14px;\n height: 14px;\n}\n.sprinkle-icon--m {\n width: 16px;\n height: 16px;\n}\n.sprinkle-icon--l {\n width: 20px;\n height: 20px;\n}\n.sprinkle-icon--xl {\n width: 24px;\n height: var(--swc-component-height-75);\n}\n\n.sprinkle-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--s2-spacing-75);\n height: var(--swc-component-height-100);\n padding: 0 var(--s2-spacing-300);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n background: var(--s2-gray-50);\n color: var(--s2-gray-800);\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n font-family: var(--s2-font-family);\n cursor: default;\n box-shadow: var(--s2-shadow-container);\n transition:\n background var(--s2-transition-default),\n border-color var(--s2-transition-default),\n transform var(--s2-transition-default);\n}\n.sprinkle-btn:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn:active {\n transform: scale(0.98);\n}\n.sprinkle-btn:disabled,\n.sprinkle-btn[disabled] {\n opacity: 0.4;\n pointer-events: none;\n}\n\n.sprinkle-btn--primary {\n background: var(--s2-accent);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--primary:hover {\n background: var(--s2-accent-hover);\n}\n.sprinkle-btn--primary:active {\n background: var(--s2-accent-down);\n transform: scale(0.98);\n}\n\n.sprinkle-btn--secondary {\n background: var(--s2-gray-50);\n border-color: var(--s2-gray-200);\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--secondary:hover {\n background: var(--s2-gray-100);\n}\n\n.sprinkle-btn--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--negative:hover {\n background: var(--swc-negative-background-color-hover);\n}\n\n.sprinkle-btn--quiet {\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--quiet:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn-group {\n display: inline-flex;\n gap: var(--s2-spacing-100);\n}\n\n.sprinkle-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n border-radius: var(--s2-radius-default);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n line-height: var(--s2-line-height-75);\n white-space: nowrap;\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n}\n\n.sprinkle-badge--positive {\n background: var(--s2-positive);\n color: var(--swc-white);\n}\n.sprinkle-badge--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n}\n.sprinkle-badge--notice {\n background: var(--s2-notice);\n color: var(--swc-black);\n}\n.sprinkle-badge--informative {\n background: var(--s2-informative);\n color: var(--swc-white);\n}\n.sprinkle-badge--accent {\n background: var(--s2-accent);\n color: var(--swc-white);\n}\n\n.sprinkle-badge--subtle {\n background: var(--uxc-neutral-subtle-bg);\n color: var(--s2-gray-700);\n}\n.sprinkle-badge--subtle.sprinkle-badge--positive {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--negative {\n background: var(--uxc-negative-subtle-bg);\n color: var(--uxc-negative-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--notice {\n background: var(--uxc-notice-subtle-bg);\n color: var(--uxc-notice-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--informative {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--accent {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n\n.sprinkle-badge--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-badge--purple {\n background: var(--uxc-purple-subtle-bg);\n color: var(--uxc-purple-subtle-text);\n}\n.sprinkle-badge--cyan {\n background: var(--uxc-cyan-subtle-bg);\n color: var(--uxc-cyan-subtle-text);\n}\n.sprinkle-badge--magenta {\n background: var(--uxc-magenta-subtle-bg);\n color: var(--uxc-magenta-subtle-text);\n}\n.sprinkle-badge--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n.sprinkle-badge--gray {\n background: var(--uxc-gray-subtle-bg);\n color: var(--uxc-gray-subtle-text);\n}\n\n.sprinkle-badge--outline {\n background: transparent;\n color: var(--s2-content-secondary);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--s2-border-default);\n}\n.sprinkle-badge--outline.sprinkle-badge--positive {\n color: var(--s2-content-positive);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-positive-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--negative {\n color: var(--s2-content-negative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-negative-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--notice {\n color: var(--s2-content-notice);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-notice-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--informative {\n color: var(--s2-content-informative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-informative-visual-color);\n}\n\n.sprinkle-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-pill);\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n background: var(--s2-bg-layer-1);\n cursor: default;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-chip:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-chip svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n}\n\n.sprinkle-status-light {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-status-light::before {\n content: "";\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--s2-content-tertiary);\n flex-shrink: 0;\n}\n.sprinkle-status-light--positive::before {\n background: var(--swc-positive-visual-color);\n}\n.sprinkle-status-light--negative::before {\n background: var(--swc-negative-visual-color);\n}\n.sprinkle-status-light--notice::before {\n background: var(--swc-notice-visual-color);\n}\n.sprinkle-status-light--informative::before {\n background: var(--swc-informative-visual-color);\n}\n\n.sprinkle-status-light--m {\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-600);\n}\n.sprinkle-status-light--m::before {\n width: 10px;\n height: 10px;\n}\n\n.sprinkle-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-400);\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n\n.sprinkle-stat-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n text-align: center;\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-stat-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n.sprinkle-stat-card .value {\n font-size: var(--s2-font-size-500);\n font-weight: 700;\n color: var(--s2-content-default);\n line-height: 1.2;\n}\n.sprinkle-stat-card .label {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n margin-top: var(--s2-spacing-50);\n}\n\n.sprinkle-action-card {\n display: flex;\n flex-direction: column;\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n overflow: hidden;\n box-shadow: var(--s2-shadow-container);\n}\n.sprinkle-action-card__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n font-weight: 700;\n font-size: var(--s2-font-size-200);\n line-height: 1.3;\n color: var(--s2-gray-900);\n}\n.sprinkle-action-card__header .sprinkle-badge {\n margin-left: auto;\n}\n.sprinkle-action-card__title-group {\n display: flex;\n flex-direction: column;\n gap: var(--swc-spacing-50);\n min-width: 0;\n}\n\n.sprinkle-action-card__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n flex-shrink: 0;\n}\n.sprinkle-action-card__icon--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-action-card__icon--blue {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-action-card__icon--green {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-action-card__icon--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n\n.sprinkle-action-card__meta {\n font-size: var(--s2-font-size-75);\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n\n.sprinkle-action-card__header-actions {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n margin-left: auto;\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n}\n.sprinkle-action-card__header-actions a {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n color: var(--s2-gray-800);\n text-decoration: none;\n}\n.sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-400) var(--s2-spacing-300);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n line-height: 1.5;\n}\n.sprinkle-action-card__actions {\n display: flex;\n gap: var(--s2-spacing-100);\n justify-content: flex-end;\n padding: var(--s2-spacing-200) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-200);\n}\n\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ),\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ):hover {\n background: transparent;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.sprinkle-list-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-100);\n min-height: var(--swc-component-height-400);\n}\n.sprinkle-list-item__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-200);\n flex-shrink: 0;\n background: var(--s2-gray-75);\n}\n.sprinkle-list-item__content {\n flex: 1;\n min-width: 0;\n}\n.sprinkle-list-item__title {\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n color: var(--s2-gray-900);\n line-height: 1.3;\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n}\n.sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-gray-600);\n line-height: 1.5;\n margin-top: var(--swc-spacing-50);\n}\n.sprinkle-list-item__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex-shrink: 0;\n}\n\n.sprinkle-table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--s2-font-size-100);\n border: var(--swc-border-width-100) solid var(--s2-gray-100);\n border-radius: var(--s2-radius-default);\n overflow: hidden;\n}\n.sprinkle-table th {\n text-align: left;\n padding: var(--s2-spacing-75) var(--s2-spacing-300);\n background: transparent;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-gray-700);\n font-weight: 700;\n font-size: var(--s2-font-size-100);\n line-height: 1.3;\n height: var(--swc-component-height-100);\n box-sizing: border-box;\n}\n.sprinkle-table td {\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-content-default);\n font-size: var(--s2-font-size-100);\n line-height: 1.5;\n box-sizing: border-box;\n}\n.sprinkle-table tr:last-child td {\n border-bottom: none;\n}\n.sprinkle-table tr:hover td {\n background: var(--s2-gray-50);\n}\n\n.sprinkle-task-group {\n background: var(--s2-gray-50);\n border-radius: var(--s2-radius-default);\n padding: var(--s2-spacing-300);\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-task-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.sprinkle-task-group__title {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-gray-1000);\n}\n.sprinkle-task-group__title svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n}\n.sprinkle-task-group__meta {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n font-size: var(--s2-font-size-75);\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n height: var(--swc-component-height-75);\n padding-left: var(--s2-spacing-50);\n font-size: var(--s2-font-size-100);\n line-height: var(--s2-line-height-100);\n}\n.sprinkle-task-item--done {\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item--pending {\n color: var(--s2-gray-800);\n}\n.sprinkle-task-item__check {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: 50%;\n border: var(--swc-border-width-200) solid var(--s2-gray-400);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sprinkle-task-item--done .sprinkle-task-item__check {\n background: var(--s2-positive);\n border-color: var(--s2-positive);\n}\n.sprinkle-task-item--done .sprinkle-task-item__check::after {\n content: "";\n width: 8px;\n height: 5px;\n border-left: var(--swc-border-width-200) solid var(--swc-white);\n border-bottom: var(--swc-border-width-200) solid var(--swc-white);\n transform: rotate(-45deg) translateY(-1px);\n}\n\n.sprinkle-progress-bar {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_bar-color: var(--swc-accent-visual-color);\n}\n.sprinkle-progress-bar--positive {\n --_bar-color: var(--swc-positive-visual-color);\n}\n.sprinkle-progress-bar--negative {\n --_bar-color: var(--swc-negative-visual-color);\n}\n.sprinkle-progress-bar--notice {\n --_bar-color: var(--swc-notice-visual-color);\n}\n.sprinkle-progress-bar--informative {\n --_bar-color: var(--swc-informative-visual-color);\n}\n.sprinkle-progress-bar__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-progress-bar__header .label {\n font-weight: 400;\n}\n.sprinkle-progress-bar__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-progress-bar__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-progress-bar__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n\n.sprinkle-progress-bar__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-meter {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_meter-color: var(--swc-informative-visual-color);\n}\n.sprinkle-meter--positive {\n --_meter-color: var(--swc-positive-visual-color);\n}\n.sprinkle-meter--notice {\n --_meter-color: var(--swc-notice-visual-color);\n}\n.sprinkle-meter--negative {\n --_meter-color: var(--swc-negative-visual-color);\n}\n.sprinkle-meter__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-meter__header .label {\n font-weight: 400;\n}\n.sprinkle-meter__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-meter__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-meter__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-kv-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.sprinkle-kv-list li {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-kv-list li:last-child {\n border-bottom: none;\n}\n.sprinkle-kv-list .key {\n color: var(--s2-gray-600);\n font-weight: 400;\n}\n.sprinkle-kv-list .value {\n color: var(--s2-content-default);\n font-weight: 700;\n}\ndl.sprinkle-kv-list {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0;\n font-size: var(--s2-font-size-75);\n}\ndl.sprinkle-kv-list dt,\ndl.sprinkle-kv-list dd {\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: 0;\n}\ndl.sprinkle-kv-list dt {\n color: var(--s2-gray-600);\n font-weight: 400;\n padding-right: var(--s2-spacing-300);\n}\ndl.sprinkle-kv-list dd {\n color: var(--s2-content-default);\n font-weight: 700;\n text-align: right;\n}\ndl.sprinkle-kv-list dt:last-of-type,\ndl.sprinkle-kv-list dd:last-of-type {\n border-bottom: none;\n}\n\n.sprinkle-text-field {\n width: 100%;\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-family: var(--s2-font-family);\n color: var(--s2-content-default);\n background: var(--s2-bg-layer-1);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-default);\n transition: border-color var(--s2-transition-default);\n box-sizing: border-box;\n}\n.sprinkle-text-field::placeholder {\n color: var(--s2-content-secondary);\n}\n.sprinkle-text-field:hover {\n border-color: var(--s2-gray-700);\n}\n.sprinkle-text-field:focus {\n border-color: var(--s2-gray-800);\n}\n\n.sprinkle-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: var(--s2-spacing-200);\n}\n.sprinkle-stack {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-200);\n}\n.sprinkle-row {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n}\n\n.sprinkle-divider {\n border: none;\n border-top: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: var(--s2-spacing-200) 0;\n}\n.sprinkle-divider--medium {\n border-top-width: var(--swc-border-width-200);\n border-top-color: var(--s2-border-default);\n margin: var(--s2-spacing-300) 0;\n}\n\n.sprinkle-empty-state {\n text-align: center;\n padding: var(--s2-spacing-500) var(--s2-spacing-300);\n color: var(--s2-content-tertiary);\n font-size: var(--s2-font-size-100);\n}\n\n.sprinkle-toolbar {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n min-height: var(--swc-component-height-200);\n flex-shrink: 0;\n}\n.sprinkle-toolbar__start {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-toolbar__center {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex: 1;\n justify-content: center;\n}\n.sprinkle-toolbar__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n margin-left: auto;\n}\n\n.sprinkle-tabs {\n display: flex;\n gap: 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n flex-shrink: 0;\n overflow-x: auto;\n}\n.sprinkle-tabs__tab {\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-weight: 500;\n color: var(--s2-gray-600);\n background: none;\n border: none;\n border-bottom: var(--swc-border-width-200) solid transparent;\n cursor: default;\n white-space: nowrap;\n transition:\n color var(--s2-transition-default),\n border-color var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-tabs__tab:hover {\n color: var(--s2-gray-800);\n}\n.sprinkle-tabs__tab--active {\n color: var(--s2-gray-900);\n border-bottom-color: var(--s2-gray-900);\n font-weight: 700;\n}\n.sprinkle-tabs__panel {\n display: none;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n.sprinkle-tabs__panel--active {\n display: flex;\n flex-direction: column;\n}\n\n.sprinkle-sidebar {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n overflow-y: auto;\n border-right: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n padding: var(--s2-spacing-200) 0;\n}\n.sprinkle-sidebar__nav-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n cursor: default;\n border-radius: 0;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-sidebar__nav-item:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-sidebar__nav-item--active {\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n font-weight: 600;\n}\n.sprinkle-sidebar__nav-label {\n padding: var(--s2-spacing-200) var(--s2-spacing-200) var(--s2-spacing-50);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n color: var(--s2-gray-600);\n}\n.sprinkle-sidebar__main {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-dialog {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.sprinkle-dialog[hidden] {\n display: none;\n}\n.sprinkle-dialog__backdrop {\n position: absolute;\n inset: 0;\n background: var(--swc-overlay-color);\n opacity: var(--swc-overlay-opacity-light);\n}\n.sprinkle-dialog__content {\n position: relative;\n background: var(--s2-gray-25);\n border-radius: var(--s2-radius-xl);\n box-shadow: var(--s2-shadow-elevated);\n padding: var(--s2-spacing-400);\n max-width: min(560px, calc(100% - 32px));\n max-height: calc(100% - 64px);\n overflow-y: auto;\n min-width: 280px;\n}\n.sprinkle-dialog__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--s2-spacing-300);\n}\n.sprinkle-dialog__title {\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-content-default);\n}\n.sprinkle-dialog__close {\n width: var(--swc-component-height-100);\n height: var(--swc-component-height-100);\n border-radius: var(--s2-radius-pill);\n border: none;\n background: none;\n color: var(--s2-gray-600);\n cursor: default;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n transition: background var(--s2-transition-default);\n}\n.sprinkle-dialog__close:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-dialog__footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--s2-spacing-100);\n margin-top: var(--s2-spacing-300);\n}\n\n.sprinkle-collapsible__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n cursor: default;\n font-size: var(--s2-font-size-100);\n font-weight: 600;\n color: var(--s2-content-default);\n background: none;\n border: none;\n width: 100%;\n text-align: left;\n border-radius: var(--s2-radius-default);\n transition: background var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-collapsible__header:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-collapsible__chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n transition: transform var(--swc-animation-duration-200) var(--swc-animation-ease-in-out);\n flex-shrink: 0;\n}\n.sprinkle-collapsible__chevron::before {\n content: "";\n width: var(--s2-spacing-75);\n height: var(--s2-spacing-75);\n border-right: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n border-bottom: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n transform: translateX(calc(-1 * var(--swc-spacing-50))) rotate(-45deg);\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__chevron {\n transform: rotate(90deg);\n}\n.sprinkle-collapsible__body {\n display: none;\n padding: var(--s2-spacing-100) var(--s2-spacing-200) var(--s2-spacing-200)\n calc(var(--s2-spacing-200) + 16px + var(--s2-spacing-100));\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__body {\n display: block;\n}\n\n.sprinkle-split {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-split > * {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n}\n.sprinkle-split > :not(:last-child) {\n border-right: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n.sprinkle-split--vertical {\n flex-direction: column;\n}\n.sprinkle-split--vertical > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n\n.sprinkle-canvas {\n position: relative;\n width: 100%;\n overflow: hidden;\n border-radius: var(--s2-radius-l);\n background: var(--s2-bg-layer-1);\n}\n.sprinkle-canvas--16x9 {\n aspect-ratio: 16 / 9;\n}\n.sprinkle-canvas--4x3 {\n aspect-ratio: 4 / 3;\n}\n.sprinkle-canvas--1x1 {\n aspect-ratio: 1 / 1;\n}\n.sprinkle-canvas svg,\n.sprinkle-canvas canvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.sprinkle-density-compact .sprinkle-content {\n padding: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-heading {\n font-size: var(--s2-font-size-100);\n margin-bottom: var(--s2-spacing-50);\n}\n.sprinkle-density-compact .sprinkle-heading--m {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-body {\n font-size: var(--s2-font-size-75);\n line-height: 1.4;\n}\n.sprinkle-density-compact .sprinkle-detail {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-table th {\n padding: var(--s2-spacing-50) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n height: var(--swc-component-height-75);\n}\n.sprinkle-density-compact .sprinkle-table td {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-btn {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: 0 var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-badge {\n font-size: var(--s2-font-size-75);\n padding: var(--swc-spacing-50) var(--s2-spacing-75);\n}\n.sprinkle-density-compact .sprinkle-card {\n padding: var(--s2-spacing-200);\n}\n.sprinkle-density-compact .sprinkle-list-item {\n padding: var(--s2-spacing-100) var(--s2-spacing-300);\n min-height: var(--swc-component-height-200);\n gap: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__icon {\n width: var(--swc-component-height-75);\n height: var(--swc-component-height-75);\n min-width: var(--swc-component-height-75);\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__title {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-sidebar__nav-item {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-text-field {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-tabs__tab {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-kv-list li {\n padding: var(--s2-spacing-75) 0;\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-chip {\n padding: var(--swc-spacing-50) var(--s2-spacing-100);\n font-size: var(--s2-font-size-75);\n}\n\n.sprinkle-density-spacious .sprinkle-content {\n padding: var(--s2-spacing-400);\n}\n.sprinkle-density-spacious .sprinkle-heading {\n font-size: var(--s2-font-size-500);\n margin-bottom: var(--s2-spacing-200);\n}\n.sprinkle-density-spacious .sprinkle-heading--m {\n font-size: var(--s2-font-size-300);\n}\n.sprinkle-density-spacious .sprinkle-body {\n font-size: var(--s2-font-size-200);\n line-height: 1.65;\n}\n.sprinkle-density-spacious .sprinkle-card {\n padding: var(--s2-spacing-500);\n}\n.sprinkle-density-spacious .sprinkle-btn {\n height: var(--swc-component-height-200);\n padding: 0 var(--swc-spacing-350);\n}\n.sprinkle-density-spacious .sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-500) var(--s2-spacing-400);\n font-size: var(--s2-font-size-200);\n}\n\n:is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n):focus-visible {\n outline: var(--swc-focus-indicator-thickness) solid var(--s2-border-focus);\n outline-offset: var(--swc-focus-ring-gap);\n}\n\n@media (forced-colors: active) {\n :is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n ):focus-visible {\n outline-color: Highlight;\n }\n}\n\n.sprinkle-panel {\n container-type: inline-size;\n}\n\n@container (max-width: 400px) {\n .sprinkle-sidebar {\n flex-direction: column;\n }\n .sprinkle-sidebar__nav {\n width: 100%;\n min-width: 0;\n max-height: 200px;\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-grid {\n grid-template-columns: 1fr;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) {\n flex-direction: column;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-toolbar {\n flex-wrap: wrap;\n }\n}\n\n@container (min-width: 600px) {\n .sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n }\n .sprinkle-grid {\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n}\n';
55665
+ var sprinkle_theme_default = ':root {\n --s2-gray-25: var(--swc-gray-25);\n --s2-gray-50: var(--swc-gray-50);\n --s2-gray-75: var(--swc-gray-75);\n --s2-gray-100: var(--swc-gray-100);\n --s2-gray-200: var(--swc-gray-200);\n --s2-gray-300: var(--swc-gray-300);\n --s2-gray-400: var(--swc-gray-400);\n --s2-gray-500: var(--swc-gray-500);\n --s2-gray-600: var(--swc-gray-600);\n --s2-gray-700: var(--swc-gray-700);\n --s2-gray-800: var(--swc-gray-800);\n --s2-gray-900: var(--swc-gray-900);\n --s2-gray-1000: var(--swc-gray-1000);\n\n --s2-bg-base: var(--swc-background-base-color);\n --s2-bg-layer-1: var(--swc-background-layer-1-color);\n --s2-bg-layer-2: var(--swc-background-layer-2-color);\n --s2-bg-elevated: var(--swc-background-elevated-color);\n --s2-bg-sunken: var(--swc-background-pasteboard-color);\n\n --s2-content-default: var(--swc-neutral-content-color-default);\n --s2-content-secondary: var(--swc-neutral-subdued-content-color-default);\n --s2-content-tertiary: var(--swc-gray-600);\n --s2-content-disabled: var(--swc-disabled-content-color);\n --s2-content-accent: var(--swc-accent-content-color-default);\n --s2-content-negative: var(--swc-negative-content-color-default);\n --s2-content-positive: var(--swc-positive-color-900);\n --s2-content-notice: var(--swc-notice-color-900);\n --s2-content-informative: var(--swc-informative-color-900);\n\n --slicc-cone: #ef7000;\n --slicc-scoop-blue: #3562ff;\n --slicc-scoop-purple: #a962e8;\n --slicc-scoop-teal: #2db9be;\n --slicc-accent: #15d675;\n\n --s2-accent: var(--swc-accent-background-color-default);\n --s2-accent-hover: var(--swc-accent-background-color-hover);\n --s2-accent-down: var(--swc-accent-background-color-down);\n\n --s2-negative: var(--swc-negative-background-color-default);\n --s2-positive: var(--swc-positive-background-color-default);\n --s2-informative: var(--swc-informative-background-color-default);\n --s2-notice: var(--swc-notice-background-color-default);\n\n --s2-border-default: var(--swc-gray-300);\n --s2-border-subtle: var(--swc-gray-200);\n --s2-border-focus: var(--swc-focus-indicator-color);\n\n --s2-font-family:\n adobe-clean-spectrum-vf, "Adobe Clean Spectrum VF", adobe-clean, "Adobe Clean",\n var(--swc-sans-font-family-stack);\n --s2-font-mono: var(--swc-code-font-family-stack);\n\n --s2-font-size-50: var(--swc-font-size-50);\n --s2-font-size-75: var(--swc-font-size-75);\n --s2-font-size-100: var(--swc-font-size-100);\n --s2-font-size-200: var(--swc-font-size-200);\n --s2-font-size-300: var(--swc-font-size-300);\n --s2-font-size-400: var(--swc-font-size-400);\n --s2-font-size-500: var(--swc-font-size-500);\n --s2-font-size-600: var(--swc-font-size-600);\n\n --s2-line-height-50: var(--swc-line-height-font-size-50);\n --s2-line-height-75: var(--swc-line-height-font-size-75);\n --s2-line-height-100: var(--swc-line-height-font-size-100);\n --s2-line-height-200: var(--swc-line-height-font-size-200);\n --s2-line-height-300: var(--swc-line-height-font-size-300);\n\n --s2-spacing-50: var(--swc-spacing-75);\n --s2-spacing-75: var(--swc-spacing-85);\n --s2-spacing-100: var(--swc-spacing-100);\n --s2-spacing-200: var(--swc-spacing-200);\n --s2-spacing-300: var(--swc-spacing-300);\n --s2-spacing-400: var(--swc-spacing-400);\n --s2-spacing-500: var(--swc-spacing-500);\n --s2-spacing-600: var(--swc-spacing-600);\n\n --s2-radius-s: var(--swc-corner-radius-small-default);\n --s2-radius-default: var(--swc-corner-radius-medium-default);\n --s2-radius-l: var(--swc-corner-radius-large-default);\n --s2-radius-xl: var(--swc-corner-radius-extra-large-default);\n --s2-radius-pill: 9999px;\n\n --s2-shadow-elevated: var(--swc-drop-shadow-elevated);\n --s2-shadow-container: var(--swc-drop-shadow-emphasized);\n\n --s2-transition-default: var(--swc-animation-duration-100) var(--swc-animation-ease-in-out);\n\n --s2-header-height: var(--swc-component-height-400);\n\n --uxc-yellow-subtle-bg: var(--swc-yellow-subtle-background-color-default);\n --uxc-yellow-subtle-text: var(--swc-yellow-1000);\n --uxc-purple-subtle-bg: var(--swc-purple-subtle-background-color-default);\n --uxc-purple-subtle-text: var(--swc-purple-1000);\n --uxc-cyan-subtle-bg: var(--swc-cyan-subtle-background-color-default);\n --uxc-cyan-subtle-text: var(--swc-cyan-1000);\n --uxc-magenta-subtle-bg: var(--swc-magenta-subtle-background-color-default);\n --uxc-magenta-subtle-text: var(--swc-magenta-1000);\n --uxc-indigo-subtle-bg: var(--swc-indigo-subtle-background-color-default);\n --uxc-indigo-subtle-text: var(--swc-indigo-1000);\n --uxc-gray-subtle-bg: var(--swc-gray-subtle-background-color-default);\n --uxc-gray-subtle-text: var(--swc-neutral-content-color-default);\n --uxc-positive-subtle-bg: var(--swc-positive-subtle-background-color-default);\n --uxc-positive-subtle-text: var(--swc-positive-color-1000);\n --uxc-notice-subtle-bg: var(--swc-notice-subtle-background-color-default);\n --uxc-notice-subtle-text: var(--swc-notice-color-1000);\n --uxc-negative-subtle-bg: var(--swc-negative-subtle-background-color-default);\n --uxc-negative-subtle-text: var(--swc-negative-color-1000);\n --uxc-accent-subtle-bg: var(--swc-accent-subtle-background-color-default);\n --uxc-accent-subtle-text: var(--swc-accent-color-1000);\n --uxc-neutral-subtle-bg: var(--swc-neutral-subtle-background-color-default);\n\n --uxc-positive-text: var(--s2-content-positive);\n --uxc-notice-text: var(--s2-content-notice);\n --uxc-negative-text: var(--s2-content-negative);\n --uxc-informative-text: var(--s2-content-informative);\n --uxc-accent-text: var(--s2-content-accent);\n\n --uxc-nav-rail-width: 58px;\n --uxc-thread-header-height: var(--swc-component-height-400);\n --uxc-content-max-width: 800px;\n\n --slicc-warm-bg: color-mix(in oklch, var(--s2-gray-50) 94%, var(--slicc-cone) 6%);\n --slicc-brand-gradient: linear-gradient(\n 90deg,\n var(--slicc-cone) 0%,\n var(--slicc-scoop-blue) 50%,\n var(--slicc-scoop-purple) 100%\n );\n}\n\n:where(:root) {\n color-scheme: dark;\n}\n:where(:root.theme-light, :root:has(body[data-theme="light"])) {\n color-scheme: light;\n}\n\n.theme-light .tok-keyword,\n:root:where(:has(body[data-theme="light"])) .tok-keyword {\n color: var(--swc-purple-1000);\n}\n.theme-light .tok-string,\n:root:where(:has(body[data-theme="light"])) .tok-string {\n color: var(--swc-green-1000);\n}\n.theme-light .tok-number,\n:root:where(:has(body[data-theme="light"])) .tok-number {\n color: var(--swc-orange-1000);\n}\n.theme-light .tok-comment,\n:root:where(:has(body[data-theme="light"])) .tok-comment {\n color: var(--s2-content-secondary);\n}\n.theme-light .tok-punct,\n:root:where(:has(body[data-theme="light"])) .tok-punct {\n color: var(--swc-blue-1000);\n}\n.theme-light .tok-fn,\n:root:where(:has(body[data-theme="light"])) .tok-fn {\n color: var(--swc-cyan-1000);\n}\n\n.theme-light .s2-tooltip,\n:root:where(:has(body[data-theme="light"])) .s2-tooltip {\n background: var(--s2-gray-900);\n color: var(--s2-gray-25);\n}\n\n.theme-light ::-webkit-scrollbar-thumb,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb {\n background: var(--s2-gray-300);\n}\n.theme-light ::-webkit-scrollbar-thumb:hover,\n:root:where(:has(body[data-theme="light"])) ::-webkit-scrollbar-thumb:hover {\n background: var(--s2-gray-400);\n}\n\n.sprinkle-content {\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-heading {\n font-size: var(--s2-font-size-300);\n font-weight: 700;\n color: var(--s2-gray-900);\n margin: 0 0 var(--s2-spacing-100);\n line-height: 1.3;\n letter-spacing: 0;\n}\n.sprinkle-heading--m {\n font-size: var(--s2-font-size-200);\n}\n.sprinkle-heading--s {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-label {\n font-size: var(--s2-font-size-75);\n font-weight: 600;\n color: var(--s2-gray-600);\n line-height: 1.3;\n margin: 0;\n}\n.sprinkle-body {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-content-default);\n line-height: 1.5;\n}\n.sprinkle-detail {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n line-height: 1.3;\n}\n\n.sprinkle-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n stroke-width: 2;\n vertical-align: middle;\n}\n.sprinkle-icon svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.sprinkle-icon--xs {\n width: 12px;\n height: 12px;\n}\n.sprinkle-icon--s {\n width: 14px;\n height: 14px;\n}\n.sprinkle-icon--m {\n width: 16px;\n height: 16px;\n}\n.sprinkle-icon--l {\n width: 20px;\n height: 20px;\n}\n.sprinkle-icon--xl {\n width: 24px;\n height: var(--swc-component-height-75);\n}\n\n.sprinkle-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--s2-spacing-75);\n height: var(--swc-component-height-100);\n padding: 0 var(--s2-spacing-300);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n background: var(--s2-gray-50);\n color: var(--s2-gray-800);\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n font-family: var(--s2-font-family);\n cursor: default;\n box-shadow: var(--s2-shadow-container);\n transition:\n background var(--s2-transition-default),\n border-color var(--s2-transition-default),\n transform var(--s2-transition-default);\n}\n.sprinkle-btn:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn:active {\n transform: scale(0.98);\n}\n.sprinkle-btn:disabled,\n.sprinkle-btn[disabled] {\n opacity: 0.4;\n pointer-events: none;\n}\n\n.sprinkle-btn--primary {\n background: var(--s2-accent);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--primary:hover {\n background: var(--s2-accent-hover);\n}\n.sprinkle-btn--primary:active {\n background: var(--s2-accent-down);\n transform: scale(0.98);\n}\n\n.sprinkle-btn--secondary {\n background: var(--s2-gray-50);\n border-color: var(--s2-gray-200);\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--secondary:hover {\n background: var(--s2-gray-100);\n}\n\n.sprinkle-btn--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n border-color: transparent;\n border-radius: var(--s2-radius-pill);\n box-shadow: none;\n}\n.sprinkle-btn--negative:hover {\n background: var(--swc-negative-background-color-hover);\n}\n\n.sprinkle-btn--quiet {\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n color: var(--s2-gray-800);\n}\n.sprinkle-btn--quiet:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-btn-group {\n display: inline-flex;\n gap: var(--s2-spacing-100);\n}\n\n.sprinkle-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n border-radius: var(--s2-radius-default);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n line-height: var(--s2-line-height-75);\n white-space: nowrap;\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n}\n\n.sprinkle-badge--positive {\n background: var(--s2-positive);\n color: var(--swc-white);\n}\n.sprinkle-badge--negative {\n background: var(--s2-negative);\n color: var(--swc-white);\n}\n.sprinkle-badge--notice {\n background: var(--s2-notice);\n color: var(--swc-black);\n}\n.sprinkle-badge--informative {\n background: var(--s2-informative);\n color: var(--swc-white);\n}\n.sprinkle-badge--accent {\n background: var(--s2-accent);\n color: var(--swc-white);\n}\n\n.sprinkle-badge--subtle {\n background: var(--uxc-neutral-subtle-bg);\n color: var(--s2-gray-700);\n}\n.sprinkle-badge--subtle.sprinkle-badge--positive {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--negative {\n background: var(--uxc-negative-subtle-bg);\n color: var(--uxc-negative-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--notice {\n background: var(--uxc-notice-subtle-bg);\n color: var(--uxc-notice-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--informative {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-badge--subtle.sprinkle-badge--accent {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n\n.sprinkle-badge--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-badge--purple {\n background: var(--uxc-purple-subtle-bg);\n color: var(--uxc-purple-subtle-text);\n}\n.sprinkle-badge--cyan {\n background: var(--uxc-cyan-subtle-bg);\n color: var(--uxc-cyan-subtle-text);\n}\n.sprinkle-badge--magenta {\n background: var(--uxc-magenta-subtle-bg);\n color: var(--uxc-magenta-subtle-text);\n}\n.sprinkle-badge--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n.sprinkle-badge--gray {\n background: var(--uxc-gray-subtle-bg);\n color: var(--uxc-gray-subtle-text);\n}\n\n.sprinkle-badge--outline {\n background: transparent;\n color: var(--s2-content-secondary);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--s2-border-default);\n}\n.sprinkle-badge--outline.sprinkle-badge--positive {\n color: var(--s2-content-positive);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-positive-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--negative {\n color: var(--s2-content-negative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-negative-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--notice {\n color: var(--s2-content-notice);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-notice-visual-color);\n}\n.sprinkle-badge--outline.sprinkle-badge--informative {\n color: var(--s2-content-informative);\n box-shadow: inset 0 0 0 var(--swc-border-width-100) var(--swc-informative-visual-color);\n}\n\n.sprinkle-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-pill);\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n background: var(--s2-bg-layer-1);\n cursor: default;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-chip:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-chip svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n}\n\n.sprinkle-status-light {\n display: inline-flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-status-light::before {\n content: "";\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--s2-content-tertiary);\n flex-shrink: 0;\n}\n.sprinkle-status-light--positive::before {\n background: var(--swc-positive-visual-color);\n}\n.sprinkle-status-light--negative::before {\n background: var(--swc-negative-visual-color);\n}\n.sprinkle-status-light--notice::before {\n background: var(--swc-notice-visual-color);\n}\n.sprinkle-status-light--informative::before {\n background: var(--swc-informative-visual-color);\n}\n\n.sprinkle-status-light--m {\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-600);\n}\n.sprinkle-status-light--m::before {\n width: 10px;\n height: 10px;\n}\n\n.sprinkle-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-400);\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n\n.sprinkle-stat-card {\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-300);\n border-radius: var(--s2-radius-xl);\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n text-align: center;\n box-shadow: var(--s2-shadow-container);\n transition: box-shadow var(--s2-transition-default);\n}\n.sprinkle-stat-card:hover {\n box-shadow: var(--s2-shadow-elevated);\n}\n.sprinkle-stat-card .value {\n font-size: var(--s2-font-size-500);\n font-weight: 700;\n color: var(--s2-content-default);\n line-height: 1.2;\n}\n.sprinkle-stat-card .label {\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-600);\n margin-top: var(--s2-spacing-50);\n}\n\n.sprinkle-action-card {\n display: flex;\n flex-direction: column;\n background: var(--s2-gray-25);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-xl);\n overflow: hidden;\n box-shadow: var(--s2-shadow-container);\n}\n.sprinkle-action-card__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n font-weight: 700;\n font-size: var(--s2-font-size-200);\n line-height: 1.3;\n color: var(--s2-gray-900);\n}\n.sprinkle-action-card__header .sprinkle-badge {\n margin-left: auto;\n}\n.sprinkle-action-card__title-group {\n display: flex;\n flex-direction: column;\n gap: var(--swc-spacing-50);\n min-width: 0;\n}\n\n.sprinkle-action-card__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n flex-shrink: 0;\n}\n.sprinkle-action-card__icon--yellow {\n background: var(--uxc-yellow-subtle-bg);\n color: var(--uxc-yellow-subtle-text);\n}\n.sprinkle-action-card__icon--blue {\n background: var(--uxc-accent-subtle-bg);\n color: var(--uxc-accent-subtle-text);\n}\n.sprinkle-action-card__icon--green {\n background: var(--uxc-positive-subtle-bg);\n color: var(--uxc-positive-subtle-text);\n}\n.sprinkle-action-card__icon--indigo {\n background: var(--uxc-indigo-subtle-bg);\n color: var(--uxc-indigo-subtle-text);\n}\n\n.sprinkle-action-card__meta {\n font-size: var(--s2-font-size-75);\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n\n.sprinkle-action-card__header-actions {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n margin-left: auto;\n font-size: var(--s2-font-size-75);\n font-weight: 500;\n color: var(--s2-gray-800);\n}\n.sprinkle-action-card__header-actions a {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-50);\n color: var(--s2-gray-800);\n text-decoration: none;\n}\n.sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-400) var(--s2-spacing-300);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n line-height: 1.5;\n}\n.sprinkle-action-card__actions {\n display: flex;\n gap: var(--s2-spacing-100);\n justify-content: flex-end;\n padding: var(--s2-spacing-200) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-200);\n}\n\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ),\nbody\n > :is(.sprinkle-card, .sprinkle-stat-card, .sprinkle-action-card):not(\n :has(~ :not(script, style, template)),\n :not(script, style, template) ~ *\n ):hover {\n background: transparent;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n\n.sprinkle-list-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n padding: var(--s2-spacing-300) var(--s2-spacing-400);\n border-top: var(--swc-border-width-100) solid var(--s2-gray-100);\n min-height: var(--swc-component-height-400);\n}\n.sprinkle-list-item__icon {\n width: var(--swc-component-height-200);\n height: var(--swc-component-height-200);\n min-width: var(--swc-component-height-200);\n border-radius: var(--s2-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-200);\n flex-shrink: 0;\n background: var(--s2-gray-75);\n}\n.sprinkle-list-item__content {\n flex: 1;\n min-width: 0;\n}\n.sprinkle-list-item__title {\n font-size: var(--s2-font-size-100);\n font-weight: 700;\n color: var(--s2-gray-900);\n line-height: 1.3;\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-75);\n}\n.sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-100);\n font-weight: 400;\n color: var(--s2-gray-600);\n line-height: 1.5;\n margin-top: var(--swc-spacing-50);\n}\n.sprinkle-list-item__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex-shrink: 0;\n}\n\n.sprinkle-table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--s2-font-size-100);\n border: var(--swc-border-width-100) solid var(--s2-gray-100);\n border-radius: var(--s2-radius-default);\n overflow: hidden;\n}\n.sprinkle-table th {\n text-align: left;\n padding: var(--s2-spacing-75) var(--s2-spacing-300);\n background: transparent;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-gray-700);\n font-weight: 700;\n font-size: var(--s2-font-size-100);\n line-height: 1.3;\n height: var(--swc-component-height-100);\n box-sizing: border-box;\n}\n.sprinkle-table td {\n padding: var(--s2-spacing-200) var(--s2-spacing-300);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-100);\n color: var(--s2-content-default);\n font-size: var(--s2-font-size-100);\n line-height: 1.5;\n box-sizing: border-box;\n}\n.sprinkle-density-compact .sprinkle-table th {\n padding: var(--s2-spacing-50) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n height: var(--swc-component-height-75);\n}\n.sprinkle-density-compact .sprinkle-table td {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-table tr:last-child td {\n border-bottom: none;\n}\n.sprinkle-table tr:hover td {\n background: var(--s2-gray-50);\n}\n\n.sprinkle-task-group {\n background: var(--s2-gray-50);\n border-radius: var(--s2-radius-default);\n padding: var(--s2-spacing-300);\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-task-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.sprinkle-task-group__title {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-gray-1000);\n}\n.sprinkle-task-group__title svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n}\n.sprinkle-task-group__meta {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-300);\n font-size: var(--s2-font-size-75);\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n height: var(--swc-component-height-75);\n padding-left: var(--s2-spacing-50);\n font-size: var(--s2-font-size-100);\n line-height: var(--s2-line-height-100);\n}\n.sprinkle-task-item--done {\n color: var(--s2-gray-600);\n}\n.sprinkle-task-item--pending {\n color: var(--s2-gray-800);\n}\n.sprinkle-task-item__check {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: 50%;\n border: var(--swc-border-width-200) solid var(--s2-gray-400);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sprinkle-task-item--done .sprinkle-task-item__check {\n background: var(--s2-positive);\n border-color: var(--s2-positive);\n}\n.sprinkle-task-item--done .sprinkle-task-item__check::after {\n content: "";\n width: 8px;\n height: 5px;\n border-left: var(--swc-border-width-200) solid var(--swc-white);\n border-bottom: var(--swc-border-width-200) solid var(--swc-white);\n transform: rotate(-45deg) translateY(-1px);\n}\n\n.sprinkle-progress-bar {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_bar-color: var(--swc-accent-visual-color);\n}\n.sprinkle-progress-bar--positive {\n --_bar-color: var(--swc-positive-visual-color);\n}\n.sprinkle-progress-bar--negative {\n --_bar-color: var(--swc-negative-visual-color);\n}\n.sprinkle-progress-bar--notice {\n --_bar-color: var(--swc-notice-visual-color);\n}\n.sprinkle-progress-bar--informative {\n --_bar-color: var(--swc-informative-visual-color);\n}\n.sprinkle-progress-bar__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-progress-bar__header .label {\n font-weight: 400;\n}\n.sprinkle-progress-bar__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-progress-bar__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-progress-bar__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n\n.sprinkle-progress-bar__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-meter {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-75);\n --_meter-color: var(--swc-informative-visual-color);\n}\n.sprinkle-meter--positive {\n --_meter-color: var(--swc-positive-visual-color);\n}\n.sprinkle-meter--notice {\n --_meter-color: var(--swc-notice-visual-color);\n}\n.sprinkle-meter--negative {\n --_meter-color: var(--swc-negative-visual-color);\n}\n.sprinkle-meter__header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: var(--s2-font-size-75);\n color: var(--s2-content-default);\n}\n.sprinkle-meter__header .label {\n font-weight: 400;\n}\n.sprinkle-meter__header .value {\n font-weight: 400;\n color: var(--s2-gray-600);\n}\n.sprinkle-meter__track {\n height: var(--swc-progress-bar-thickness-small);\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n position: relative;\n}\n.sprinkle-meter__track .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter__track:has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_bar-color, var(--s2-accent)));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) {\n height: var(--swc-progress-bar-thickness-small);\n width: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--s2-gray-200);\n overflow: hidden;\n flex-direction: row;\n position: relative;\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)) > .fill {\n height: 100%;\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track))::after {\n content: "";\n position: absolute;\n inset: 0;\n right: auto;\n width: var(--progress, var(--value, 0%));\n border-radius: var(--s2-radius-pill);\n background: var(--fill-color, var(--_meter-color));\n transition: width var(--swc-animation-duration-600) var(--swc-animation-ease-in-out);\n}\n.sprinkle-meter:not(:has(.sprinkle-meter__track)):has(> .fill)::after {\n display: none;\n}\n\n.sprinkle-kv-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.sprinkle-kv-list li {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-kv-list li:last-child {\n border-bottom: none;\n}\n.sprinkle-kv-list .key {\n color: var(--s2-gray-600);\n font-weight: 400;\n}\n.sprinkle-kv-list .value {\n color: var(--s2-content-default);\n font-weight: 700;\n}\ndl.sprinkle-kv-list {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0;\n font-size: var(--s2-font-size-75);\n}\ndl.sprinkle-kv-list dt,\ndl.sprinkle-kv-list dd {\n padding: var(--s2-spacing-100) 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: 0;\n}\ndl.sprinkle-kv-list dt {\n color: var(--s2-gray-600);\n font-weight: 400;\n padding-right: var(--s2-spacing-300);\n}\ndl.sprinkle-kv-list dd {\n color: var(--s2-content-default);\n font-weight: 700;\n text-align: right;\n}\ndl.sprinkle-kv-list dt:last-of-type,\ndl.sprinkle-kv-list dd:last-of-type {\n border-bottom: none;\n}\n\n.sprinkle-text-field {\n width: 100%;\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-family: var(--s2-font-family);\n color: var(--s2-content-default);\n background: var(--s2-bg-layer-1);\n border: var(--swc-border-width-100) solid var(--s2-gray-200);\n border-radius: var(--s2-radius-default);\n transition: border-color var(--s2-transition-default);\n box-sizing: border-box;\n}\n.sprinkle-text-field::placeholder {\n color: var(--s2-content-secondary);\n}\n.sprinkle-text-field:hover {\n border-color: var(--s2-gray-700);\n}\n.sprinkle-text-field:focus {\n border-color: var(--s2-gray-800);\n}\n\n.sprinkle-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: var(--s2-spacing-200);\n}\n.sprinkle-stack {\n display: flex;\n flex-direction: column;\n gap: var(--s2-spacing-200);\n}\n.sprinkle-row {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-200);\n}\n\n.sprinkle-divider {\n border: none;\n border-top: var(--swc-border-width-100) solid var(--s2-border-subtle);\n margin: var(--s2-spacing-200) 0;\n}\n.sprinkle-divider--medium {\n border-top-width: var(--swc-border-width-200);\n border-top-color: var(--s2-border-default);\n margin: var(--s2-spacing-300) 0;\n}\n\n.sprinkle-empty-state {\n text-align: center;\n padding: var(--s2-spacing-500) var(--s2-spacing-300);\n color: var(--s2-content-tertiary);\n font-size: var(--s2-font-size-100);\n}\n\n.sprinkle-toolbar {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n min-height: var(--swc-component-height-200);\n flex-shrink: 0;\n}\n.sprinkle-toolbar__start {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n}\n.sprinkle-toolbar__center {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n flex: 1;\n justify-content: center;\n}\n.sprinkle-toolbar__end {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n margin-left: auto;\n}\n\n.sprinkle-tabs {\n display: flex;\n gap: 0;\n border-bottom: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n flex-shrink: 0;\n overflow-x: auto;\n}\n.sprinkle-tabs__tab {\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n font-weight: 500;\n color: var(--s2-gray-600);\n background: none;\n border: none;\n border-bottom: var(--swc-border-width-200) solid transparent;\n cursor: default;\n white-space: nowrap;\n transition:\n color var(--s2-transition-default),\n border-color var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-tabs__tab:hover {\n color: var(--s2-gray-800);\n}\n.sprinkle-tabs__tab--active {\n color: var(--s2-gray-900);\n border-bottom-color: var(--s2-gray-900);\n font-weight: 700;\n}\n.sprinkle-tabs__panel {\n display: none;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n.sprinkle-tabs__panel--active {\n display: flex;\n flex-direction: column;\n}\n\n.sprinkle-sidebar {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n overflow-y: auto;\n border-right: var(--swc-border-width-100) solid var(--s2-gray-200);\n background: var(--s2-gray-50);\n padding: var(--s2-spacing-200) 0;\n}\n.sprinkle-sidebar__nav-item {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n font-size: var(--s2-font-size-100);\n color: var(--s2-gray-700);\n cursor: default;\n border-radius: 0;\n transition: background var(--s2-transition-default);\n}\n.sprinkle-sidebar__nav-item:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-sidebar__nav-item--active {\n background: var(--s2-gray-800);\n color: var(--s2-gray-25);\n font-weight: 600;\n}\n.sprinkle-sidebar__nav-label {\n padding: var(--s2-spacing-200) var(--s2-spacing-200) var(--s2-spacing-50);\n font-size: var(--s2-font-size-75);\n font-weight: 700;\n color: var(--s2-gray-600);\n}\n.sprinkle-sidebar__main {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: var(--s2-spacing-200);\n}\n\n.sprinkle-dialog {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.sprinkle-dialog[hidden] {\n display: none;\n}\n.sprinkle-dialog__backdrop {\n position: absolute;\n inset: 0;\n background: var(--swc-overlay-color);\n opacity: var(--swc-overlay-opacity-light);\n}\n.sprinkle-dialog__content {\n position: relative;\n background: var(--s2-gray-25);\n border-radius: var(--s2-radius-xl);\n box-shadow: var(--s2-shadow-elevated);\n padding: var(--s2-spacing-400);\n max-width: min(560px, calc(100% - 32px));\n max-height: calc(100% - 64px);\n overflow-y: auto;\n min-width: 280px;\n}\n.sprinkle-dialog__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--s2-spacing-300);\n}\n.sprinkle-dialog__title {\n font-size: var(--s2-font-size-200);\n font-weight: 700;\n color: var(--s2-content-default);\n}\n.sprinkle-dialog__close {\n width: var(--swc-component-height-100);\n height: var(--swc-component-height-100);\n border-radius: var(--s2-radius-pill);\n border: none;\n background: none;\n color: var(--s2-gray-600);\n cursor: default;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--s2-font-size-300);\n transition: background var(--s2-transition-default);\n}\n.sprinkle-dialog__close:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-dialog__footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--s2-spacing-100);\n margin-top: var(--s2-spacing-300);\n}\n\n.sprinkle-collapsible__header {\n display: flex;\n align-items: center;\n gap: var(--s2-spacing-100);\n padding: var(--s2-spacing-100) var(--s2-spacing-200);\n cursor: default;\n font-size: var(--s2-font-size-100);\n font-weight: 600;\n color: var(--s2-content-default);\n background: none;\n border: none;\n width: 100%;\n text-align: left;\n border-radius: var(--s2-radius-default);\n transition: background var(--s2-transition-default);\n font-family: var(--s2-font-family);\n}\n.sprinkle-collapsible__header:hover {\n background: var(--s2-gray-100);\n}\n.sprinkle-collapsible__chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n transition: transform var(--swc-animation-duration-200) var(--swc-animation-ease-in-out);\n flex-shrink: 0;\n}\n.sprinkle-collapsible__chevron::before {\n content: "";\n width: var(--s2-spacing-75);\n height: var(--s2-spacing-75);\n border-right: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n border-bottom: var(--swc-border-width-200) solid var(--s2-content-tertiary);\n transform: translateX(calc(-1 * var(--swc-spacing-50))) rotate(-45deg);\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__chevron {\n transform: rotate(90deg);\n}\n.sprinkle-collapsible__body {\n display: none;\n padding: var(--s2-spacing-100) var(--s2-spacing-200) var(--s2-spacing-200)\n calc(var(--s2-spacing-200) + 16px + var(--s2-spacing-100));\n}\n.sprinkle-collapsible--open .sprinkle-collapsible__body {\n display: block;\n}\n\n.sprinkle-split {\n display: flex;\n gap: 0;\n min-height: 0;\n flex: 1;\n}\n.sprinkle-split > * {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n}\n.sprinkle-split > :not(:last-child) {\n border-right: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n.sprinkle-split--vertical {\n flex-direction: column;\n}\n.sprinkle-split--vertical > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n}\n\n.sprinkle-canvas {\n position: relative;\n width: 100%;\n overflow: hidden;\n border-radius: var(--s2-radius-l);\n background: var(--s2-bg-layer-1);\n}\n.sprinkle-canvas--16x9 {\n aspect-ratio: 16 / 9;\n}\n.sprinkle-canvas--4x3 {\n aspect-ratio: 4 / 3;\n}\n.sprinkle-canvas--1x1 {\n aspect-ratio: 1 / 1;\n}\n.sprinkle-canvas svg,\n.sprinkle-canvas canvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.sprinkle-density-compact .sprinkle-content {\n padding: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-heading {\n font-size: var(--s2-font-size-100);\n margin-bottom: var(--s2-spacing-50);\n}\n.sprinkle-density-compact .sprinkle-heading--m {\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-body {\n font-size: var(--s2-font-size-75);\n line-height: 1.4;\n}\n.sprinkle-density-compact .sprinkle-detail {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-btn {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: 0 var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-badge {\n font-size: var(--s2-font-size-75);\n padding: var(--swc-spacing-50) var(--s2-spacing-75);\n}\n.sprinkle-density-compact .sprinkle-card {\n padding: var(--s2-spacing-200);\n}\n.sprinkle-density-compact .sprinkle-list-item {\n padding: var(--s2-spacing-100) var(--s2-spacing-300);\n min-height: var(--swc-component-height-200);\n gap: var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__icon {\n width: var(--swc-component-height-75);\n height: var(--swc-component-height-75);\n min-width: var(--swc-component-height-75);\n font-size: var(--s2-font-size-100);\n}\n.sprinkle-density-compact .sprinkle-list-item__title {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-list-item__subtitle {\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-sidebar__nav-item {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-text-field {\n height: var(--swc-component-height-75);\n font-size: var(--s2-font-size-75);\n padding: var(--s2-spacing-50) var(--s2-spacing-100);\n}\n.sprinkle-density-compact .sprinkle-tabs__tab {\n padding: var(--s2-spacing-75) var(--s2-spacing-200);\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-kv-list li {\n padding: var(--s2-spacing-75) 0;\n font-size: var(--s2-font-size-75);\n}\n.sprinkle-density-compact .sprinkle-chip {\n padding: var(--swc-spacing-50) var(--s2-spacing-100);\n font-size: var(--s2-font-size-75);\n}\n\n.sprinkle-density-spacious .sprinkle-content {\n padding: var(--s2-spacing-400);\n}\n.sprinkle-density-spacious .sprinkle-heading {\n font-size: var(--s2-font-size-500);\n margin-bottom: var(--s2-spacing-200);\n}\n.sprinkle-density-spacious .sprinkle-heading--m {\n font-size: var(--s2-font-size-300);\n}\n.sprinkle-density-spacious .sprinkle-body {\n font-size: var(--s2-font-size-200);\n line-height: 1.65;\n}\n.sprinkle-density-spacious .sprinkle-card {\n padding: var(--s2-spacing-500);\n}\n.sprinkle-density-spacious .sprinkle-btn {\n height: var(--swc-component-height-200);\n padding: 0 var(--swc-spacing-350);\n}\n.sprinkle-density-spacious .sprinkle-action-card__body {\n padding: 0 var(--s2-spacing-500) var(--s2-spacing-400);\n font-size: var(--s2-font-size-200);\n}\n\n:is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n):focus-visible {\n outline: var(--swc-focus-indicator-thickness) solid var(--s2-border-focus);\n outline-offset: var(--swc-focus-ring-gap);\n}\n\n@media (forced-colors: active) {\n :is(\n .sprinkle-btn,\n .sprinkle-chip,\n .sprinkle-text-field,\n .sprinkle-tabs__tab,\n .sprinkle-sidebar__nav-item,\n .sprinkle-dialog__close,\n .sprinkle-collapsible__header,\n .sprinkle-action-card__header-actions a\n ):focus-visible {\n outline-color: Highlight;\n }\n}\n\n.sprinkle-panel {\n container-type: inline-size;\n}\n\n@container (max-width: 400px) {\n .sprinkle-sidebar {\n flex-direction: column;\n }\n .sprinkle-sidebar__nav {\n width: 100%;\n min-width: 0;\n max-height: 200px;\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-grid {\n grid-template-columns: 1fr;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) {\n flex-direction: column;\n }\n .sprinkle-split:not(.sprinkle-split--vertical) > :not(:last-child) {\n border-right: none;\n border-bottom: var(--swc-border-width-100) solid var(--s2-border-default);\n }\n .sprinkle-toolbar {\n flex-wrap: wrap;\n }\n}\n\n@container (min-width: 600px) {\n .sprinkle-sidebar__nav {\n width: 240px;\n min-width: 240px;\n }\n .sprinkle-grid {\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n}\n';
55387
55666
 
55388
55667
  // src/app/sprinkle-tokens.ts
55389
55668
  var reference = /--swc-[\w-]+/g;
@@ -58289,12 +58568,16 @@ function findLeaf(candiateNode, last) {
58289
58568
  if (candiateNode instanceof BranchNode) return findLeaf(candiateNode.children[last ? candiateNode.children.length - 1 : 0], last);
58290
58569
  throw new Error("invalid node");
58291
58570
  }
58571
+ function childSizing(node2, index2, size4, scale = 1) {
58572
+ const cachedVisibleSize = node2.getChildCachedVisibleSize(index2);
58573
+ return cachedVisibleSize === void 0 ? size4 : Sizing.Invisible(Math.round(cachedVisibleSize * scale));
58574
+ }
58292
58575
  function cloneNode(node2, size4, orthogonalSize) {
58293
58576
  if (node2 instanceof BranchNode) {
58294
58577
  const result = new BranchNode(node2.orientation, node2.proportionalLayout, node2.styles, size4, orthogonalSize, node2.disabled, node2.margin);
58295
58578
  for (let i25 = node2.children.length - 1; i25 >= 0; i25--) {
58296
58579
  const child = node2.children[i25];
58297
- result.addChild(cloneNode(child, child.size, child.orthogonalSize), child.size, 0, true);
58580
+ result.addChild(cloneNode(child, child.size, child.orthogonalSize), childSizing(node2, i25, child.size), 0, true);
58298
58581
  }
58299
58582
  return result;
58300
58583
  } else return new LeafNode(node2.view, node2.orientation, orthogonalSize);
@@ -58303,13 +58586,14 @@ function flipNode(node2, size4, orthogonalSize) {
58303
58586
  if (node2 instanceof BranchNode) {
58304
58587
  const result = new BranchNode(orthogonal(node2.orientation), node2.proportionalLayout, node2.styles, size4, orthogonalSize, node2.disabled, node2.margin);
58305
58588
  let totalSize = 0;
58589
+ const cachedSizeScale = node2.size === 0 ? 1 : size4 / node2.size;
58306
58590
  for (let i25 = node2.children.length - 1; i25 >= 0; i25--) {
58307
58591
  const child = node2.children[i25];
58308
58592
  const childSize = child instanceof BranchNode ? child.orthogonalSize : child.size;
58309
58593
  let newSize = node2.size === 0 ? 0 : Math.round(size4 * childSize / node2.size);
58310
58594
  totalSize += newSize;
58311
58595
  if (i25 === 0) newSize += size4 - totalSize;
58312
- result.addChild(flipNode(child, orthogonalSize, newSize), newSize, 0, true);
58596
+ result.addChild(flipNode(child, orthogonalSize, newSize), childSizing(node2, i25, newSize, cachedSizeScale), 0, true);
58313
58597
  }
58314
58598
  return result;
58315
58599
  } else return new LeafNode(node2.view, orthogonal(node2.orientation), orthogonalSize);
@@ -58764,7 +59048,8 @@ var Gridview = class {
58764
59048
  sizes.splice(parentIndex, 1, ...sibling.children.map((c28) => c28.size));
58765
59049
  for (let i25 = 0; i25 < sibling.children.length; i25++) {
58766
59050
  const child = sibling.children[i25];
58767
- grandParent.addChild(child, child.size, parentIndex + i25);
59051
+ const childSize = childSizing(sibling, i25, child.size);
59052
+ grandParent.addChild(child, !isSiblingVisible && typeof childSize === "number" ? Sizing.Invisible(childSize) : childSize, parentIndex + i25);
58768
59053
  }
58769
59054
  while (sibling.children.length > 0) sibling.removeChild(0);
58770
59055
  } else {
@@ -61159,6 +61444,9 @@ var ContentContainer = class extends CompositeDisposable {
61159
61444
  get element() {
61160
61445
  return this._element;
61161
61446
  }
61447
+ get dimensions() {
61448
+ return this._dimensions;
61449
+ }
61162
61450
  constructor(accessor, group) {
61163
61451
  var _this$accessor$resolv, _this$accessor, _this$accessor$resolv2, _this$accessor2, _this$accessor$onDidO, _this$accessor$onDidO2, _this$accessor3;
61164
61452
  super();
@@ -61169,12 +61457,14 @@ var ContentContainer = class extends CompositeDisposable {
61169
61457
  this.onDidFocus = this._onDidFocus.event;
61170
61458
  this._onDidBlur = new Emitter2();
61171
61459
  this.onDidBlur = this._onDidBlur.event;
61460
+ this._onDidDimensionsChange = new Emitter2();
61461
+ this.onDidDimensionsChange = this._onDidDimensionsChange.event;
61172
61462
  this._element = document.createElement("div");
61173
61463
  this._element.className = "dv-content-container";
61174
61464
  this._element.tabIndex = -1;
61175
61465
  this._element.id = nextContentId();
61176
61466
  this._element.setAttribute("role", "tabpanel");
61177
- this.addDisposables(this._onDidFocus, this._onDidBlur);
61467
+ this.addDisposables(this._onDidFocus, this._onDidBlur, this._onDidDimensionsChange);
61178
61468
  const getOverrideTarget = () => {
61179
61469
  var _group$dropTargetCont;
61180
61470
  return (_group$dropTargetCont = group.dropTargetContainer) === null || _group$dropTargetCont === void 0 ? void 0 : _group$dropTargetCont.model;
@@ -61284,7 +61574,14 @@ var ContentContainer = class extends CompositeDisposable {
61284
61574
  if (this.panel === panel) return;
61285
61575
  this.renderPanel(panel);
61286
61576
  }
61287
- layout(_width, _height) {
61577
+ layout(width, height) {
61578
+ var _this$_dimensions;
61579
+ if (((_this$_dimensions = this._dimensions) === null || _this$_dimensions === void 0 ? void 0 : _this$_dimensions.width) === width && this._dimensions.height === height) return;
61580
+ this._dimensions = {
61581
+ width,
61582
+ height
61583
+ };
61584
+ this._onDidDimensionsChange.fire(this._dimensions);
61288
61585
  }
61289
61586
  closePanel() {
61290
61587
  if (this.panel) {
@@ -65635,7 +65932,6 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
65635
65932
  return (_this$_headerPosition = this._headerPosition) !== null && _this$_headerPosition !== void 0 ? _this$_headerPosition : "top";
65636
65933
  }
65637
65934
  set headerPosition(value) {
65638
- var _this$_activePanel;
65639
65935
  this._headerPosition = value;
65640
65936
  this.invalidateHeaderSize();
65641
65937
  removeClasses(this.container, "dv-groupview-header-top", "dv-groupview-header-bottom", "dv-groupview-header-left", "dv-groupview-header-right");
@@ -65645,10 +65941,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
65645
65941
  this._headerDirection = direction;
65646
65942
  this.tabsContainer.direction = direction;
65647
65943
  this.header.direction = direction;
65648
- if ((_this$_activePanel = this._activePanel) === null || _this$_activePanel === void 0 ? void 0 : _this$_activePanel.layout) {
65649
- const { width, height } = this.contentDimensions();
65650
- this._activePanel.layout(width, height);
65651
- }
65944
+ if (this.panels.length > 0) this.layoutContent();
65652
65945
  this.updateHeaderActions();
65653
65946
  if (previousDirection !== void 0 && previousDirection !== direction) {
65654
65947
  var _this$groupPanel;
@@ -66152,10 +66445,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66152
66445
  this.panels.forEach((panel) => {
66153
66446
  this.rerender(panel);
66154
66447
  });
66155
- if (this._activePanel) {
66156
- const { width, height } = this.contentDimensions();
66157
- this._activePanel.layout(width, height);
66158
- }
66448
+ if (this.panels.length > 0) this.layoutContent();
66159
66449
  }
66160
66450
  get renderContainer() {
66161
66451
  var _this$_overwriteRende;
@@ -66202,10 +66492,10 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66202
66492
  return this.tabsContainer.indexOf(panel.id);
66203
66493
  }
66204
66494
  toJSON() {
66205
- var _this$_activePanel2;
66495
+ var _this$_activePanel;
66206
66496
  const result = {
66207
66497
  views: this.tabsContainer.panels,
66208
- activeView: (_this$_activePanel2 = this._activePanel) === null || _this$_activePanel2 === void 0 ? void 0 : _this$_activePanel2.id,
66498
+ activeView: (_this$_activePanel = this._activePanel) === null || _this$_activePanel === void 0 ? void 0 : _this$_activePanel.id,
66209
66499
  id: this.id
66210
66500
  };
66211
66501
  if (this.locked !== false) result.locked = this.locked;
@@ -66245,8 +66535,8 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66245
66535
  update(_params) {
66246
66536
  }
66247
66537
  focus() {
66248
- var _this$_activePanel3;
66249
- (_this$_activePanel3 = this._activePanel) === null || _this$_activePanel3 === void 0 || _this$_activePanel3.focus();
66538
+ var _this$_activePanel2;
66539
+ (_this$_activePanel2 = this._activePanel) === null || _this$_activePanel2 === void 0 || _this$_activePanel2.focus();
66250
66540
  }
66251
66541
  openPanel(panel, options2 = {}) {
66252
66542
  if (typeof options2.index !== "number" || options2.index > this.panels.length) options2.index = this.panels.length;
@@ -66304,12 +66594,24 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66304
66594
  this.updateContainer();
66305
66595
  }
66306
66596
  layout(width, height) {
66307
- var _this$_activePanel4;
66308
66597
  this._width = width;
66309
66598
  this._height = height;
66310
- const { width: contentWidth, height: contentHeight } = this.contentDimensions();
66311
- this.contentContainer.layout(contentWidth, contentHeight);
66312
- if ((_this$_activePanel4 = this._activePanel) === null || _this$_activePanel4 === void 0 ? void 0 : _this$_activePanel4.layout) this._activePanel.layout(contentWidth, contentHeight);
66599
+ this.layoutContent();
66600
+ }
66601
+ /**
66602
+ * Apply the current content box (group box minus header extent) to the
66603
+ * content container and the active panel. Every path that can change that
66604
+ * box goes through here so the container's recorded dimensions, which size
66605
+ * overlay-rendered panels, never lag the active panel's. Callers other
66606
+ * than `layout()` skip it for a group with no panels: there is nothing to
66607
+ * size, and measuring the header of a group that is not in the document
66608
+ * yet (the constructor sets `headerPosition`) would cache a zero extent.
66609
+ */
66610
+ layoutContent() {
66611
+ var _this$_activePanel3;
66612
+ const { width, height } = this.contentDimensions();
66613
+ this.contentContainer.layout(width, height);
66614
+ if ((_this$_activePanel3 = this._activePanel) === null || _this$_activePanel3 === void 0 ? void 0 : _this$_activePanel3.layout) this._activePanel.layout(width, height);
66313
66615
  }
66314
66616
  /**
66315
66617
  * Re-run the group's layout with its current dimensions. Used to propagate a
@@ -66402,8 +66704,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66402
66704
  this.tabsContainer.setActivePanel(panel);
66403
66705
  this.contentContainer.setLabelledBy(this.tabsContainer.getTabId(panel.id));
66404
66706
  this.contentContainer.openPanel(panel);
66405
- const { width, height } = this.contentDimensions();
66406
- panel.layout(width, height);
66707
+ this.layoutContent();
66407
66708
  this.updateMru(panel);
66408
66709
  this.contentContainer.refreshFocusState();
66409
66710
  this._onDidActivePanelChange.fire({
@@ -66415,8 +66716,8 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66415
66716
  }
66416
66717
  /** Label the group region with its active panel's title (the WAI-ARIA region name). */
66417
66718
  updateAccessibleLabel() {
66418
- var _this$_activePanel5;
66419
- const title2 = (_this$_activePanel5 = this._activePanel) === null || _this$_activePanel5 === void 0 ? void 0 : _this$_activePanel5.title;
66719
+ var _this$_activePanel4;
66720
+ const title2 = (_this$_activePanel4 = this._activePanel) === null || _this$_activePanel4 === void 0 ? void 0 : _this$_activePanel4.title;
66420
66721
  if (title2) this.container.setAttribute("aria-label", title2);
66421
66722
  else this.container.removeAttribute("aria-label");
66422
66723
  }
@@ -69149,6 +69450,10 @@ function createFocusableElement() {
69149
69450
  element2.tabIndex = -1;
69150
69451
  return element2;
69151
69452
  }
69453
+ function setPixels(style2, property, value) {
69454
+ const next = `${value}px`;
69455
+ if (style2[property] !== next) style2[property] = next;
69456
+ }
69152
69457
  var OverlayRenderContainer = class extends CompositeDisposable {
69153
69458
  constructor(element2, accessor) {
69154
69459
  super();
@@ -69238,6 +69543,14 @@ var OverlayRenderContainer = class extends CompositeDisposable {
69238
69543
  const generation = mapEntry.generation;
69239
69544
  const focusContainer = mapEntry.element;
69240
69545
  const contentElement = panel.view.content.element;
69546
+ const applySize = (size4) => {
69547
+ if (!size4 || size4.width <= 0 || size4.height <= 0) return;
69548
+ const entry = this.map[panel.api.id];
69549
+ if (!entry || entry.forceVisible || entry.positioned && panel.api.isVisible) return;
69550
+ setPixels(focusContainer.style, "width", size4.width);
69551
+ setPixels(focusContainer.style, "height", size4.height);
69552
+ };
69553
+ applySize(referenceContainer.dimensions);
69241
69554
  if (contentElement.parentElement !== focusContainer) focusContainer.appendChild(contentElement);
69242
69555
  if (focusContainer.parentElement !== this.element) this.element.appendChild(focusContainer);
69243
69556
  const resize = () => {
@@ -69268,10 +69581,10 @@ var OverlayRenderContainer = class extends CompositeDisposable {
69268
69581
  }
69269
69582
  entry.retainPreviousGeometry = false;
69270
69583
  entry.positioned = true;
69271
- focusContainer.style.left = `${left}px`;
69272
- focusContainer.style.top = `${top}px`;
69273
- focusContainer.style.width = `${width}px`;
69274
- focusContainer.style.height = `${height}px`;
69584
+ setPixels(focusContainer.style, "left", left);
69585
+ setPixels(focusContainer.style, "top", top);
69586
+ setPixels(focusContainer.style, "width", width);
69587
+ setPixels(focusContainer.style, "height", height);
69275
69588
  if (panel.api.isVisible || forceVisible) {
69276
69589
  focusContainer.style.visibility = "";
69277
69590
  focusContainer.style.pointerEvents = "";
@@ -69366,6 +69679,9 @@ var OverlayRenderContainer = class extends CompositeDisposable {
69366
69679
  if (!panel.api.isVisible) return;
69367
69680
  resize();
69368
69681
  }),
69682
+ referenceContainer.onDidDimensionsChange((size4) => {
69683
+ applySize(size4);
69684
+ }),
69369
69685
  panel.api.onDidLocationChange(() => {
69370
69686
  correctLayerPosition();
69371
69687
  })
@@ -83260,7 +83576,7 @@ lit-html/static.js:
83260
83576
  dockview-core/dist/package/main.esm.mjs:
83261
83577
  (**
83262
83578
  * dockview-core
83263
- * @version 8.6.0
83579
+ * @version 8.6.1
83264
83580
  * @link https://github.com/dockview/dockview
83265
83581
  * @license MIT
83266
83582
  *)