@ai-ecoverse/slicc-spectrum 1.107.2 → 1.108.0

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,15 @@ 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 refusedEntry = "This entry was refused. Remove it and add it again here.";
53849
+ var urlSecret = "This URL contains a secret. Remove it, turn on Uses a token, and paste the token when you connect.";
53850
+ var sentence2 = (text4) => text4.charAt(0).toUpperCase() + text4.slice(1);
53851
+ function serverRefusal(edit) {
53852
+ if (edit.code === "url-secret") return { field: "url", message: urlSecret };
53853
+ return { field: "form", message: sentence2(edit.reason) };
53854
+ }
53855
+ var serverName = /^[A-Za-z0-9_-]+$/;
53833
53856
  function draft(option) {
53834
53857
  return {
53835
53858
  id: option.id,
@@ -53874,6 +53897,7 @@ function words(message, word2) {
53874
53897
  return new RegExp(`\\b${word2.replace(/[^a-z0-9 ]/gi, "\\$&")}\\b`, "i").test(message);
53875
53898
  }
53876
53899
  var popup = (account) => account.group === "mcp" && account.auth === "oauth";
53900
+ var signsIn = (account) => account.group !== "mcp" || !(account.auth === "local" || account.state === "disabled" || account.state === "refused");
53877
53901
  var dual = (account) => account.auth === "oauth" && account.secret === "api-key";
53878
53902
  var signInMethod = (account) => dual(account) ? { method: "sign-in" } : void 0;
53879
53903
  var start = (options2, value) => options2.some((option) => option.value === value) ? value : options2[0]?.value ?? "";
@@ -53902,7 +53926,13 @@ var SliccSettings = class extends ThemedElement {
53902
53926
  query: { state: true },
53903
53927
  filled: { state: true },
53904
53928
  developing: { state: true },
53905
- developerError: { state: true }
53929
+ developerError: { state: true },
53930
+ serverOpen: { state: true },
53931
+ serverBusy: { state: true },
53932
+ serverProblem: { state: true },
53933
+ serverToken: { state: true },
53934
+ refusals: { state: true },
53935
+ removing: { state: true }
53906
53936
  };
53907
53937
  #waits = new SignInWaits(() => this.requestUpdate());
53908
53938
  #copies = new SignInCopies(() => this.requestUpdate());
@@ -53912,6 +53942,7 @@ var SliccSettings = class extends ThemedElement {
53912
53942
  #wanted = null;
53913
53943
  #developerPort;
53914
53944
  #call = 0;
53945
+ #refusalCall = 0;
53915
53946
  #scroll = new ViewScroll(this, "settings:scroll", { scroller: () => this, rows: "[data-id]" });
53916
53947
  constructor() {
53917
53948
  super();
@@ -53926,6 +53957,12 @@ var SliccSettings = class extends ThemedElement {
53926
53957
  this.filled = /* @__PURE__ */ new Set();
53927
53958
  this.developing = false;
53928
53959
  this.developerError = null;
53960
+ this.serverOpen = false;
53961
+ this.serverBusy = false;
53962
+ this.serverProblem = null;
53963
+ this.serverToken = false;
53964
+ this.refusals = {};
53965
+ this.removing = /* @__PURE__ */ new Set();
53929
53966
  }
53930
53967
  static styles = [
53931
53968
  fieldStyles,
@@ -54089,6 +54126,9 @@ var SliccSettings = class extends ThemedElement {
54089
54126
  align-items: center;
54090
54127
  gap: var(--swc-spacing-75);
54091
54128
  }
54129
+ [data-group='mcp'] .actions {
54130
+ justify-content: flex-end;
54131
+ }
54092
54132
  .notes {
54093
54133
  grid-column: 1 / -1;
54094
54134
  display: grid;
@@ -54109,6 +54149,16 @@ var SliccSettings = class extends ThemedElement {
54109
54149
  flex: none;
54110
54150
  margin-block-start: var(--swc-spacing-50);
54111
54151
  }
54152
+ .server {
54153
+ display: grid;
54154
+ gap: var(--swc-spacing-200);
54155
+ max-width: 420px;
54156
+ margin-block-start: var(--swc-spacing-300);
54157
+ }
54158
+ .entry {
54159
+ display: grid;
54160
+ gap: var(--swc-spacing-75);
54161
+ }
54112
54162
  .other-way {
54113
54163
  justify-self: start;
54114
54164
  padding: 0;
@@ -54287,6 +54337,9 @@ var SliccSettings = class extends ThemedElement {
54287
54337
  update();
54288
54338
  };
54289
54339
  queueMicrotask(() => settleModels(model));
54340
+ this.removing = /* @__PURE__ */ new Set();
54341
+ this.refusals = {};
54342
+ void this.#readRefusals(model);
54290
54343
  if (model.updates !== this.#developerPort) {
54291
54344
  this.#developerPort = model.updates;
54292
54345
  this.#call += 1;
@@ -54299,7 +54352,11 @@ var SliccSettings = class extends ThemedElement {
54299
54352
  ...super.subscribe(model),
54300
54353
  ...developer && model.updates ? [model.updates.on("items", update)] : [],
54301
54354
  model.settings.on("settings", settle3),
54302
- model.settings.on("accounts", settle3),
54355
+ model.settings.on("accounts", () => {
54356
+ this.#settleRemoved(model);
54357
+ void this.#readRefusals(model);
54358
+ settle3();
54359
+ }),
54303
54360
  model.settings.on("providers", update),
54304
54361
  ...model.vault ? [model.vault.on("status", update), model.vault.on("list", update)] : []
54305
54362
  ];
@@ -54671,7 +54728,7 @@ var SliccSettings = class extends ThemedElement {
54671
54728
  #moved(account) {
54672
54729
  const url = this.#mcpUrl(account);
54673
54730
  const old = registrations2()[serverOf(account)] ?? this.#pinned(account);
54674
- return url && old && old !== url ? url : null;
54731
+ return signsIn(account) && url && old && old !== url ? url : null;
54675
54732
  }
54676
54733
  async #reconnectMcp(account, url) {
54677
54734
  const model = this.model;
@@ -54935,12 +54992,14 @@ var SliccSettings = class extends ThemedElement {
54935
54992
  const accounts = this.model?.settings.accounts() ?? [];
54936
54993
  if (accounts.some((account) => this.#signingIn(account))) return "signing in";
54937
54994
  if (this.entering !== null) return "a key is being entered";
54995
+ if (this.serverOpen) return "a server is being added";
54938
54996
  return this.picking ? "a provider is being added" : null;
54939
54997
  }
54940
54998
  #signingIn(account) {
54941
54999
  return account.status === "signing-in" || account.auth !== "api-key" && account.status !== "connected" && this.entering !== account.id && this.pending.has(account.id);
54942
55000
  }
54943
55001
  #action(account) {
55002
+ if (!signsIn(account)) return A;
54944
55003
  if (this.#signingIn(account) && this.model?.settings.cancel) {
54945
55004
  return b`<swc-button
54946
55005
  size="m"
@@ -54957,6 +55016,7 @@ var SliccSettings = class extends ThemedElement {
54957
55016
  data-action="disconnect"
54958
55017
  accessible-label=${`Disconnect ${account.provider}`}
54959
55018
  ?pending=${this.pending.has(account.id)}
55019
+ ?disabled=${this.removing.has(account.id)}
54960
55020
  @click=${() => this.#disconnect(account)}
54961
55021
  >Disconnect</swc-button>`;
54962
55022
  }
@@ -54970,16 +55030,19 @@ var SliccSettings = class extends ThemedElement {
54970
55030
  data-action="connect"
54971
55031
  accessible-label=${signs ? `Sign in to ${account.provider}` : `${label} ${account.provider}`}
54972
55032
  ?pending=${busy}
54973
- ?disabled=${entering || !!account.blocked}
55033
+ ?disabled=${entering || !!account.blocked || this.removing.has(account.id)}
54974
55034
  @click=${() => this.#start(account)}
54975
55035
  >${label}</swc-button>`;
54976
55036
  }
54977
55037
  #status(account) {
55038
+ if (this.removing.has(account.id)) return "removing";
54978
55039
  if (this.#signingIn(account)) return "signing-in";
54979
55040
  if (account.status === "connected" && account.blocked) return "unreachable";
54980
55041
  if (account.status === "expired" && account.auth === "api-key") return "rejected";
54981
- if (popup(account) && account.status === "disconnected") return "needs-sign-in";
54982
55042
  if (popup(account) && account.status === "expired") return "sign-in-expired";
55043
+ const server = account.state && serverStatus[account.state];
55044
+ if (server) return server;
55045
+ if (popup(account) && account.status === "disconnected") return "needs-sign-in";
54983
55046
  return account.status;
54984
55047
  }
54985
55048
  #account(account) {
@@ -54992,7 +55055,7 @@ var SliccSettings = class extends ThemedElement {
54992
55055
  </div>` : A;
54993
55056
  return b`<div class="account" data-id=${account.id}>
54994
55057
  <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>
55058
+ <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
55059
  <swc-status-light class="state" variant=${variant}>${label}</swc-status-light>
54997
55060
  ${this.#actions(account)}
54998
55061
  </div>
@@ -55000,6 +55063,11 @@ var SliccSettings = class extends ThemedElement {
55000
55063
  ${this.#movedNote(account)}
55001
55064
  ${this.adding?.id === account.id ? A : b`${this.#key(account)}${this.#otherKey(account)}${failure2}`}`;
55002
55065
  }
55066
+ #refusedNote(account) {
55067
+ if (account.state !== "refused") return A;
55068
+ const reason = this.refusals[serverOf(account)]?.reason;
55069
+ return b`<span data-refusal>${account.identity ? " \xB7 " : ""}${reason ? sentence2(reason) : refusedEntry}</span>`;
55070
+ }
55003
55071
  #otherKey(account) {
55004
55072
  if (this.entering !== account.id) return A;
55005
55073
  const other = this.#otherWay(account);
@@ -55007,35 +55075,41 @@ var SliccSettings = class extends ThemedElement {
55007
55075
  }
55008
55076
  #actions(account) {
55009
55077
  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);
55078
+ const removable = this.#removable(account);
55079
+ if (!moved2 && !removable) return this.#action(account);
55080
+ return b`<div class="actions">${moved2 ? this.#reconnect(account, moved2) : A}${this.#action(account)}${removable ? this.#removeButton(account) : A}</div>`;
55081
+ }
55082
+ #reconnect(account, url) {
55083
+ return b`<swc-button
55084
+ size="m"
55085
+ variant="accent"
55086
+ data-action="reconnect-mcp"
55087
+ accessible-label=${`Reconnect ${account.provider}`}
55088
+ ?pending=${this.pending.has(account.id)}
55089
+ ?disabled=${this.removing.has(account.id)}
55090
+ @click=${() => this.#reconnectMcp(account, url)}
55091
+ >Reconnect</swc-button>`;
55022
55092
  }
55023
55093
  #removable(account) {
55024
- return !!this.#offered() && !!this.model?.settings.remove && account.group !== "mcp";
55094
+ const settings = this.model?.settings;
55095
+ if (account.group === "mcp") return !!settings?.removeServer;
55096
+ return !!this.#offered() && !!settings?.remove;
55025
55097
  }
55026
55098
  #removeButton(account) {
55027
55099
  const id = `remove-${account.id}`;
55028
55100
  const label = `Remove ${account.provider}`;
55101
+ const server = account.group === "mcp";
55102
+ const removing = this.removing.has(account.id);
55029
55103
  return b`<swc-action-button
55030
55104
  id=${id}
55031
55105
  size="m"
55032
55106
  quiet
55033
- data-action="remove-account"
55107
+ data-action=${server ? "remove-server" : "remove-account"}
55034
55108
  accessible-label=${label}
55035
- ?disabled=${this.pending.has(account.id)}
55036
- @click=${() => this.#remove(account)}
55109
+ ?disabled=${this.pending.has(account.id) || removing}
55110
+ @click=${() => server ? this.#removeServer(account) : this.#remove(account)}
55037
55111
  ><swc-icon-delete slot="icon"></swc-icon-delete></swc-action-button
55038
- ><swc-tooltip for=${id} placement="top">${label}</swc-tooltip>`;
55112
+ >${removing ? A : b`<swc-tooltip for=${id} placement="top">${label}</swc-tooltip>`}`;
55039
55113
  }
55040
55114
  async #closeTip(id) {
55041
55115
  const tip = this.renderRoot.querySelector(
@@ -55071,6 +55145,187 @@ var SliccSettings = class extends ThemedElement {
55071
55145
  this.focusOn("[data-action=add-provider]");
55072
55146
  for (const field of account.fields ?? []) this.#bases.delete(`${account.id} ${field.name}`);
55073
55147
  }
55148
+ #heldRecords(account, vault) {
55149
+ const server = serverOf(account);
55150
+ const name = recordName(account);
55151
+ return (vault.list()?.secrets ?? []).filter(
55152
+ (secret) => secret.kind === "mcp" && secret.state !== "removed" && (secret.server === server || secret.name === name)
55153
+ ).map((secret) => secret.name);
55154
+ }
55155
+ #serverRecords(account, vault) {
55156
+ const token = account.auth === "api-key" ? [recordName(account)] : [];
55157
+ const names2 = /* @__PURE__ */ new Set([...token, ...this.#heldRecords(account, vault)]);
55158
+ return [...names2].map((name) => [name, "mcp"]);
55159
+ }
55160
+ #removeServerBody(account) {
55161
+ const vault = this.model?.vault;
55162
+ if (!vault?.remove || !this.#heldRecords(account, vault).length) return serverGone;
55163
+ const held2 = account.auth === "oauth" ? "sign-in" : "token";
55164
+ return `Its ${held2} is deleted from the vault. ${serverGone}`;
55165
+ }
55166
+ async #clearServer(model, account) {
55167
+ const vault = model.vault;
55168
+ const server = serverOf(account);
55169
+ const records = vault?.remove ? this.#serverRecords(account, vault) : [];
55170
+ const held2 = !!vault?.remove && this.#heldRecords(account, vault).length > 0;
55171
+ const pinned = !!this.#pinned(account);
55172
+ const url = registrations2()[server] ?? (held2 && !pinned && this.#mcpUrl(account));
55173
+ for (const [name, kind] of records) await gone2(vault, name, kind);
55174
+ if (url) await vault?.endpoints?.({ remove: { mcp: [{ server, url }] } });
55175
+ register(server, void 0);
55176
+ }
55177
+ #markRemoving(id, on2) {
55178
+ const rest = [...this.removing].filter((candidate) => candidate !== id);
55179
+ this.removing = new Set(on2 ? [...rest, id] : rest);
55180
+ }
55181
+ async #readRefusals(model) {
55182
+ const call = ++this.#refusalCall;
55183
+ const refused3 = model.settings.accounts().some((account) => account.state === "refused");
55184
+ if (!(refused3 && model.settings.refusals)) {
55185
+ this.refusals = {};
55186
+ return;
55187
+ }
55188
+ const refusals = await model.settings.refusals().catch(() => ({}));
55189
+ if (call === this.#refusalCall && this.model === model) this.refusals = refusals;
55190
+ }
55191
+ #settleRemoved(model) {
55192
+ const listed2 = new Set(model.settings.accounts().map((account) => account.id));
55193
+ const left = [...this.removing].filter((id) => listed2.has(id));
55194
+ if (left.length !== this.removing.size) this.removing = new Set(left);
55195
+ }
55196
+ async #removeServer(account) {
55197
+ const model = this.model;
55198
+ const { id } = account;
55199
+ const title2 = `Remove ${account.provider}?`;
55200
+ const body2 = this.#removeServerBody(account);
55201
+ if (!await confirm({ title: title2, body: body2, action: "Remove" })) return;
55202
+ if (this.model !== model) return;
55203
+ clearValues(this.renderRoot);
55204
+ if (this.entering === id) this.entering = null;
55205
+ await this.#closeTip(`remove-${id}`);
55206
+ this.#markRemoving(id, true);
55207
+ this.failure = null;
55208
+ const refused3 = (message) => {
55209
+ this.#markRemoving(id, false);
55210
+ if (this.model === model) this.failure = { id, message };
55211
+ };
55212
+ try {
55213
+ await this.#clearServer(model, account);
55214
+ const edit = await model.settings.removeServer?.(id);
55215
+ if (!edit.ok) refused3(sentence2(edit.reason));
55216
+ else if (this.model === model) this.focusOn("[data-action=add-server]");
55217
+ } catch (error) {
55218
+ refused3(failureText(error));
55219
+ }
55220
+ }
55221
+ #openServerForm() {
55222
+ this.serverProblem = null;
55223
+ this.serverToken = false;
55224
+ this.serverOpen = true;
55225
+ void this.updateComplete.then(() => this.focusOn("[data-server-field=name]"));
55226
+ }
55227
+ #closeServerForm() {
55228
+ this.serverProblem = null;
55229
+ this.serverOpen = false;
55230
+ void this.updateComplete.then(() => this.focusOn("[data-action=add-server]"));
55231
+ }
55232
+ #checkServer(name, url) {
55233
+ if (!name) return { field: "name", message: "Name can\u2019t be empty" };
55234
+ if (!serverName.test(name))
55235
+ return { field: "name", message: "Use only letters, digits, _ and - in the name." };
55236
+ if (!url) return { field: "url", message: "URL can\u2019t be empty" };
55237
+ if (!this.#baseOf(url)) return { field: "url", message: "The URL must use https://." };
55238
+ return null;
55239
+ }
55240
+ #submitServer(event2) {
55241
+ event2.preventDefault();
55242
+ if (this.serverBusy) return;
55243
+ const form = event2.currentTarget;
55244
+ const text4 = (field) => form.querySelector(`[data-server-field=${field}]`)?.value.trim();
55245
+ const name = text4("name");
55246
+ const url = text4("url");
55247
+ const problem = this.#checkServer(name, url);
55248
+ this.serverProblem = problem;
55249
+ if (problem) {
55250
+ this.focusOn(`[data-server-field=${problem.field}]`);
55251
+ return;
55252
+ }
55253
+ void this.#addServer(name, this.serverToken ? { url, token: true } : { url });
55254
+ }
55255
+ async #addServer(name, entry) {
55256
+ const model = this.model;
55257
+ this.serverBusy = true;
55258
+ try {
55259
+ const edit = await model.settings.addServer?.(name, entry);
55260
+ if (this.model !== model) return;
55261
+ if (edit.ok) this.#closeServerForm();
55262
+ else this.#refuseServer(serverRefusal(edit));
55263
+ } catch (error) {
55264
+ if (this.model === model) this.serverProblem = { field: "form", message: failureText(error) };
55265
+ } finally {
55266
+ this.serverBusy = false;
55267
+ }
55268
+ }
55269
+ #refuseServer(problem) {
55270
+ this.serverProblem = problem;
55271
+ if (problem.field !== "form") this.focusOn(`[data-server-field=${problem.field}]`);
55272
+ }
55273
+ #serverNote(field) {
55274
+ if (this.serverProblem?.field !== field) return A;
55275
+ return b`<div class="problem" id=${`server-${field}-problem`} role="alert" data-problem=${field}>
55276
+ <swc-icon-alert-triangle size="s" aria-hidden="true"></swc-icon-alert-triangle>
55277
+ <span>${this.serverProblem.message}</span>
55278
+ </div>`;
55279
+ }
55280
+ #serverInput(field, type, help2) {
55281
+ const invalid = this.serverProblem?.field === field;
55282
+ const problem = invalid ? `server-${field}-problem ` : "";
55283
+ return b`<input
55284
+ type=${type}
55285
+ autocomplete="off"
55286
+ spellcheck="false"
55287
+ data-server-field=${field}
55288
+ aria-required="true"
55289
+ aria-invalid=${invalid ? "true" : A}
55290
+ aria-describedby=${`${problem}${help2}`}
55291
+ />`;
55292
+ }
55293
+ #serverForm() {
55294
+ return b`<form class="server" data-form="add-server" novalidate @submit=${(event2) => this.#submitServer(event2)} @keydown=${(event2) => this.#submitOnEnter(event2)}>
55295
+ <div class="entry">
55296
+ <label class="field"><span>Name</span>${this.#serverInput("name", "text", "server-name-help")}</label>
55297
+ <p class="hint" id="server-name-help">Letters, digits, _ and -</p>
55298
+ ${this.#serverNote("name")}
55299
+ </div>
55300
+ <div class="entry">
55301
+ <label class="field"><span>URL</span>${this.#serverInput("url", "url", "server-url-help")}</label>
55302
+ <p class="hint" id="server-url-help">The server’s https:// address</p>
55303
+ ${this.#serverNote("url")}
55304
+ </div>
55305
+ <div class="entry">
55306
+ <sp-switch data-server-field="token" @change=${(event2) => {
55307
+ this.serverToken = this.#checked(event2);
55308
+ }}>Uses a token</sp-switch>
55309
+ ${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}
55310
+ </div>
55311
+ ${this.#serverNote("form")}
55312
+ <div class="buttons">
55313
+ <swc-button size="m" variant="accent" data-action="save" ?pending=${this.serverBusy} @click=${(event2) => this.#send(event2)}>Add</swc-button>
55314
+ <swc-button size="m" variant="secondary" data-action="cancel" ?disabled=${this.serverBusy} @click=${() => this.#closeServerForm()}>Cancel</swc-button>
55315
+ </div>
55316
+ </form>`;
55317
+ }
55318
+ #serverList(servers) {
55319
+ const add = !!this.model?.settings.addServer;
55320
+ if (!(servers.length || add)) return A;
55321
+ return b`<h2>MCP servers</h2>
55322
+ <div class="accounts" data-group="mcp">${c(
55323
+ servers,
55324
+ (account) => account.id,
55325
+ (account) => this.#account(account)
55326
+ )}</div>
55327
+ ${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}`;
55328
+ }
55074
55329
  #notice(row, size4 = "long") {
55075
55330
  const needs = row.blocked;
55076
55331
  if (needs !== "cors-free-transport") return A;
@@ -55375,15 +55630,14 @@ var SliccSettings = class extends ThemedElement {
55375
55630
  </div>
55376
55631
  <h2 data-section="accounts">Accounts</h2>
55377
55632
  ${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}
55633
+ ${this.#serverList(servers)}
55380
55634
  ${this.model?.vault ? b`<slicc-secrets .model=${this.model}></slicc-secrets>` : A}
55381
55635
  </div>`;
55382
55636
  }
55383
55637
  };
55384
55638
 
55385
55639
  // 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';
55640
+ 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
55641
 
55388
55642
  // src/app/sprinkle-tokens.ts
55389
55643
  var reference = /--swc-[\w-]+/g;
@@ -58289,12 +58543,16 @@ function findLeaf(candiateNode, last) {
58289
58543
  if (candiateNode instanceof BranchNode) return findLeaf(candiateNode.children[last ? candiateNode.children.length - 1 : 0], last);
58290
58544
  throw new Error("invalid node");
58291
58545
  }
58546
+ function childSizing(node2, index2, size4, scale = 1) {
58547
+ const cachedVisibleSize = node2.getChildCachedVisibleSize(index2);
58548
+ return cachedVisibleSize === void 0 ? size4 : Sizing.Invisible(Math.round(cachedVisibleSize * scale));
58549
+ }
58292
58550
  function cloneNode(node2, size4, orthogonalSize) {
58293
58551
  if (node2 instanceof BranchNode) {
58294
58552
  const result = new BranchNode(node2.orientation, node2.proportionalLayout, node2.styles, size4, orthogonalSize, node2.disabled, node2.margin);
58295
58553
  for (let i25 = node2.children.length - 1; i25 >= 0; i25--) {
58296
58554
  const child = node2.children[i25];
58297
- result.addChild(cloneNode(child, child.size, child.orthogonalSize), child.size, 0, true);
58555
+ result.addChild(cloneNode(child, child.size, child.orthogonalSize), childSizing(node2, i25, child.size), 0, true);
58298
58556
  }
58299
58557
  return result;
58300
58558
  } else return new LeafNode(node2.view, node2.orientation, orthogonalSize);
@@ -58303,13 +58561,14 @@ function flipNode(node2, size4, orthogonalSize) {
58303
58561
  if (node2 instanceof BranchNode) {
58304
58562
  const result = new BranchNode(orthogonal(node2.orientation), node2.proportionalLayout, node2.styles, size4, orthogonalSize, node2.disabled, node2.margin);
58305
58563
  let totalSize = 0;
58564
+ const cachedSizeScale = node2.size === 0 ? 1 : size4 / node2.size;
58306
58565
  for (let i25 = node2.children.length - 1; i25 >= 0; i25--) {
58307
58566
  const child = node2.children[i25];
58308
58567
  const childSize = child instanceof BranchNode ? child.orthogonalSize : child.size;
58309
58568
  let newSize = node2.size === 0 ? 0 : Math.round(size4 * childSize / node2.size);
58310
58569
  totalSize += newSize;
58311
58570
  if (i25 === 0) newSize += size4 - totalSize;
58312
- result.addChild(flipNode(child, orthogonalSize, newSize), newSize, 0, true);
58571
+ result.addChild(flipNode(child, orthogonalSize, newSize), childSizing(node2, i25, newSize, cachedSizeScale), 0, true);
58313
58572
  }
58314
58573
  return result;
58315
58574
  } else return new LeafNode(node2.view, orthogonal(node2.orientation), orthogonalSize);
@@ -58764,7 +59023,8 @@ var Gridview = class {
58764
59023
  sizes.splice(parentIndex, 1, ...sibling.children.map((c28) => c28.size));
58765
59024
  for (let i25 = 0; i25 < sibling.children.length; i25++) {
58766
59025
  const child = sibling.children[i25];
58767
- grandParent.addChild(child, child.size, parentIndex + i25);
59026
+ const childSize = childSizing(sibling, i25, child.size);
59027
+ grandParent.addChild(child, !isSiblingVisible && typeof childSize === "number" ? Sizing.Invisible(childSize) : childSize, parentIndex + i25);
58768
59028
  }
58769
59029
  while (sibling.children.length > 0) sibling.removeChild(0);
58770
59030
  } else {
@@ -61159,6 +61419,9 @@ var ContentContainer = class extends CompositeDisposable {
61159
61419
  get element() {
61160
61420
  return this._element;
61161
61421
  }
61422
+ get dimensions() {
61423
+ return this._dimensions;
61424
+ }
61162
61425
  constructor(accessor, group) {
61163
61426
  var _this$accessor$resolv, _this$accessor, _this$accessor$resolv2, _this$accessor2, _this$accessor$onDidO, _this$accessor$onDidO2, _this$accessor3;
61164
61427
  super();
@@ -61169,12 +61432,14 @@ var ContentContainer = class extends CompositeDisposable {
61169
61432
  this.onDidFocus = this._onDidFocus.event;
61170
61433
  this._onDidBlur = new Emitter2();
61171
61434
  this.onDidBlur = this._onDidBlur.event;
61435
+ this._onDidDimensionsChange = new Emitter2();
61436
+ this.onDidDimensionsChange = this._onDidDimensionsChange.event;
61172
61437
  this._element = document.createElement("div");
61173
61438
  this._element.className = "dv-content-container";
61174
61439
  this._element.tabIndex = -1;
61175
61440
  this._element.id = nextContentId();
61176
61441
  this._element.setAttribute("role", "tabpanel");
61177
- this.addDisposables(this._onDidFocus, this._onDidBlur);
61442
+ this.addDisposables(this._onDidFocus, this._onDidBlur, this._onDidDimensionsChange);
61178
61443
  const getOverrideTarget = () => {
61179
61444
  var _group$dropTargetCont;
61180
61445
  return (_group$dropTargetCont = group.dropTargetContainer) === null || _group$dropTargetCont === void 0 ? void 0 : _group$dropTargetCont.model;
@@ -61284,7 +61549,14 @@ var ContentContainer = class extends CompositeDisposable {
61284
61549
  if (this.panel === panel) return;
61285
61550
  this.renderPanel(panel);
61286
61551
  }
61287
- layout(_width, _height) {
61552
+ layout(width, height) {
61553
+ var _this$_dimensions;
61554
+ if (((_this$_dimensions = this._dimensions) === null || _this$_dimensions === void 0 ? void 0 : _this$_dimensions.width) === width && this._dimensions.height === height) return;
61555
+ this._dimensions = {
61556
+ width,
61557
+ height
61558
+ };
61559
+ this._onDidDimensionsChange.fire(this._dimensions);
61288
61560
  }
61289
61561
  closePanel() {
61290
61562
  if (this.panel) {
@@ -65635,7 +65907,6 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
65635
65907
  return (_this$_headerPosition = this._headerPosition) !== null && _this$_headerPosition !== void 0 ? _this$_headerPosition : "top";
65636
65908
  }
65637
65909
  set headerPosition(value) {
65638
- var _this$_activePanel;
65639
65910
  this._headerPosition = value;
65640
65911
  this.invalidateHeaderSize();
65641
65912
  removeClasses(this.container, "dv-groupview-header-top", "dv-groupview-header-bottom", "dv-groupview-header-left", "dv-groupview-header-right");
@@ -65645,10 +65916,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
65645
65916
  this._headerDirection = direction;
65646
65917
  this.tabsContainer.direction = direction;
65647
65918
  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
- }
65919
+ if (this.panels.length > 0) this.layoutContent();
65652
65920
  this.updateHeaderActions();
65653
65921
  if (previousDirection !== void 0 && previousDirection !== direction) {
65654
65922
  var _this$groupPanel;
@@ -66152,10 +66420,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66152
66420
  this.panels.forEach((panel) => {
66153
66421
  this.rerender(panel);
66154
66422
  });
66155
- if (this._activePanel) {
66156
- const { width, height } = this.contentDimensions();
66157
- this._activePanel.layout(width, height);
66158
- }
66423
+ if (this.panels.length > 0) this.layoutContent();
66159
66424
  }
66160
66425
  get renderContainer() {
66161
66426
  var _this$_overwriteRende;
@@ -66202,10 +66467,10 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66202
66467
  return this.tabsContainer.indexOf(panel.id);
66203
66468
  }
66204
66469
  toJSON() {
66205
- var _this$_activePanel2;
66470
+ var _this$_activePanel;
66206
66471
  const result = {
66207
66472
  views: this.tabsContainer.panels,
66208
- activeView: (_this$_activePanel2 = this._activePanel) === null || _this$_activePanel2 === void 0 ? void 0 : _this$_activePanel2.id,
66473
+ activeView: (_this$_activePanel = this._activePanel) === null || _this$_activePanel === void 0 ? void 0 : _this$_activePanel.id,
66209
66474
  id: this.id
66210
66475
  };
66211
66476
  if (this.locked !== false) result.locked = this.locked;
@@ -66245,8 +66510,8 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66245
66510
  update(_params) {
66246
66511
  }
66247
66512
  focus() {
66248
- var _this$_activePanel3;
66249
- (_this$_activePanel3 = this._activePanel) === null || _this$_activePanel3 === void 0 || _this$_activePanel3.focus();
66513
+ var _this$_activePanel2;
66514
+ (_this$_activePanel2 = this._activePanel) === null || _this$_activePanel2 === void 0 || _this$_activePanel2.focus();
66250
66515
  }
66251
66516
  openPanel(panel, options2 = {}) {
66252
66517
  if (typeof options2.index !== "number" || options2.index > this.panels.length) options2.index = this.panels.length;
@@ -66304,12 +66569,24 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66304
66569
  this.updateContainer();
66305
66570
  }
66306
66571
  layout(width, height) {
66307
- var _this$_activePanel4;
66308
66572
  this._width = width;
66309
66573
  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);
66574
+ this.layoutContent();
66575
+ }
66576
+ /**
66577
+ * Apply the current content box (group box minus header extent) to the
66578
+ * content container and the active panel. Every path that can change that
66579
+ * box goes through here so the container's recorded dimensions, which size
66580
+ * overlay-rendered panels, never lag the active panel's. Callers other
66581
+ * than `layout()` skip it for a group with no panels: there is nothing to
66582
+ * size, and measuring the header of a group that is not in the document
66583
+ * yet (the constructor sets `headerPosition`) would cache a zero extent.
66584
+ */
66585
+ layoutContent() {
66586
+ var _this$_activePanel3;
66587
+ const { width, height } = this.contentDimensions();
66588
+ this.contentContainer.layout(width, height);
66589
+ if ((_this$_activePanel3 = this._activePanel) === null || _this$_activePanel3 === void 0 ? void 0 : _this$_activePanel3.layout) this._activePanel.layout(width, height);
66313
66590
  }
66314
66591
  /**
66315
66592
  * Re-run the group's layout with its current dimensions. Used to propagate a
@@ -66402,8 +66679,7 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66402
66679
  this.tabsContainer.setActivePanel(panel);
66403
66680
  this.contentContainer.setLabelledBy(this.tabsContainer.getTabId(panel.id));
66404
66681
  this.contentContainer.openPanel(panel);
66405
- const { width, height } = this.contentDimensions();
66406
- panel.layout(width, height);
66682
+ this.layoutContent();
66407
66683
  this.updateMru(panel);
66408
66684
  this.contentContainer.refreshFocusState();
66409
66685
  this._onDidActivePanelChange.fire({
@@ -66415,8 +66691,8 @@ var DockviewGroupPanelModel = class extends CompositeDisposable {
66415
66691
  }
66416
66692
  /** Label the group region with its active panel's title (the WAI-ARIA region name). */
66417
66693
  updateAccessibleLabel() {
66418
- var _this$_activePanel5;
66419
- const title2 = (_this$_activePanel5 = this._activePanel) === null || _this$_activePanel5 === void 0 ? void 0 : _this$_activePanel5.title;
66694
+ var _this$_activePanel4;
66695
+ const title2 = (_this$_activePanel4 = this._activePanel) === null || _this$_activePanel4 === void 0 ? void 0 : _this$_activePanel4.title;
66420
66696
  if (title2) this.container.setAttribute("aria-label", title2);
66421
66697
  else this.container.removeAttribute("aria-label");
66422
66698
  }
@@ -69149,6 +69425,10 @@ function createFocusableElement() {
69149
69425
  element2.tabIndex = -1;
69150
69426
  return element2;
69151
69427
  }
69428
+ function setPixels(style2, property, value) {
69429
+ const next = `${value}px`;
69430
+ if (style2[property] !== next) style2[property] = next;
69431
+ }
69152
69432
  var OverlayRenderContainer = class extends CompositeDisposable {
69153
69433
  constructor(element2, accessor) {
69154
69434
  super();
@@ -69238,6 +69518,14 @@ var OverlayRenderContainer = class extends CompositeDisposable {
69238
69518
  const generation = mapEntry.generation;
69239
69519
  const focusContainer = mapEntry.element;
69240
69520
  const contentElement = panel.view.content.element;
69521
+ const applySize = (size4) => {
69522
+ if (!size4 || size4.width <= 0 || size4.height <= 0) return;
69523
+ const entry = this.map[panel.api.id];
69524
+ if (!entry || entry.forceVisible || entry.positioned && panel.api.isVisible) return;
69525
+ setPixels(focusContainer.style, "width", size4.width);
69526
+ setPixels(focusContainer.style, "height", size4.height);
69527
+ };
69528
+ applySize(referenceContainer.dimensions);
69241
69529
  if (contentElement.parentElement !== focusContainer) focusContainer.appendChild(contentElement);
69242
69530
  if (focusContainer.parentElement !== this.element) this.element.appendChild(focusContainer);
69243
69531
  const resize = () => {
@@ -69268,10 +69556,10 @@ var OverlayRenderContainer = class extends CompositeDisposable {
69268
69556
  }
69269
69557
  entry.retainPreviousGeometry = false;
69270
69558
  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`;
69559
+ setPixels(focusContainer.style, "left", left);
69560
+ setPixels(focusContainer.style, "top", top);
69561
+ setPixels(focusContainer.style, "width", width);
69562
+ setPixels(focusContainer.style, "height", height);
69275
69563
  if (panel.api.isVisible || forceVisible) {
69276
69564
  focusContainer.style.visibility = "";
69277
69565
  focusContainer.style.pointerEvents = "";
@@ -69366,6 +69654,9 @@ var OverlayRenderContainer = class extends CompositeDisposable {
69366
69654
  if (!panel.api.isVisible) return;
69367
69655
  resize();
69368
69656
  }),
69657
+ referenceContainer.onDidDimensionsChange((size4) => {
69658
+ applySize(size4);
69659
+ }),
69369
69660
  panel.api.onDidLocationChange(() => {
69370
69661
  correctLayerPosition();
69371
69662
  })
@@ -83260,7 +83551,7 @@ lit-html/static.js:
83260
83551
  dockview-core/dist/package/main.esm.mjs:
83261
83552
  (**
83262
83553
  * dockview-core
83263
- * @version 8.6.0
83554
+ * @version 8.6.1
83264
83555
  * @link https://github.com/dockview/dockview
83265
83556
  * @license MIT
83266
83557
  *)