@k2b/cloud 0.44.0 → 0.45.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.
Files changed (73) hide show
  1. package/package.json +6 -2
  2. package/src/access/GroupCoverage.tsx +20 -5
  3. package/src/access/PermissionEditor.tsx +11 -2
  4. package/src/access/PrincipalAvatar.tsx +30 -21
  5. package/src/access/messages.ts +4 -4
  6. package/src/account/EntitySearch.tsx +12 -0
  7. package/src/ai/dictation-runtime.ts +6 -2
  8. package/src/ai/executor.ts +9 -3
  9. package/src/ai/index.ts +1 -0
  10. package/src/ai/project-tool.ts +4 -4
  11. package/src/ai/projects-authorization.ts +53 -0
  12. package/src/ai/projects-routes.ts +56 -46
  13. package/src/ai/projects.ts +100 -79
  14. package/src/ai/recent-resources.ts +3 -3
  15. package/src/ai/routes.ts +30 -30
  16. package/src/ai/skill-tool.ts +4 -4
  17. package/src/ai/skills-routes.ts +27 -26
  18. package/src/ai/skills.ts +120 -81
  19. package/src/api/accounts-entities.ts +6 -3
  20. package/src/api/admin-ai-skills.ts +4 -1
  21. package/src/api/auth.ts +9 -2
  22. package/src/browser/session.ts +39 -0
  23. package/src/browser/shared-text-history-validation.ts +151 -0
  24. package/src/browser/shared-text-history.ts +464 -0
  25. package/src/browser/shared-text-offline-authorized.ts +29 -0
  26. package/src/browser/shared-text-offline.ts +351 -0
  27. package/src/browser/shared-text-provider.ts +714 -0
  28. package/src/browser/shared-text-table-contract.ts +150 -0
  29. package/src/browser/shared-text.ts +19 -0
  30. package/src/contracts/shared.ts +2 -1
  31. package/src/server/api/respond.ts +10 -2
  32. package/src/server/index.ts +1 -0
  33. package/src/server/services/access.ts +23 -10
  34. package/src/server/services/index.ts +1 -0
  35. package/src/services/accounts/app.ts +30 -13
  36. package/src/services/accounts/entities.ts +29 -16
  37. package/src/services/accounts/group-sql.ts +23 -0
  38. package/src/services/accounts/groups.ts +16 -13
  39. package/src/services/accounts/identities.ts +8 -1
  40. package/src/services/accounts/identity-reconciliation.ts +3 -1
  41. package/src/services/accounts/local-groups.ts +69 -4
  42. package/src/services/accounts/users.ts +38 -8
  43. package/src/services/mandates/index.ts +2 -2
  44. package/src/services/mandates/policy.ts +1 -0
  45. package/src/services/session/index.ts +12 -3
  46. package/src/shared/email-html.ts +1 -0
  47. package/src/shared/markdown/extensions/katex.ts +8 -1
  48. package/src/shared/markdown/extensions/tables.ts +14 -1
  49. package/src/shared/markdown/index.ts +22 -11
  50. package/src/shared-text/anchors.ts +29 -0
  51. package/src/shared-text/awareness.ts +87 -0
  52. package/src/shared-text/changes.ts +27 -0
  53. package/src/shared-text/documents.ts +428 -77
  54. package/src/shared-text/events.ts +12 -2
  55. package/src/shared-text/index.ts +16 -1
  56. package/src/shared-text/log.ts +24 -5
  57. package/src/shared-text/snapshots.ts +69 -23
  58. package/src/shared-text/structural-history.ts +377 -0
  59. package/src/shared-text/table-actions.ts +432 -0
  60. package/src/shared-text/types.ts +24 -5
  61. package/src/ssr/AppLaunchpadPanel.tsx +1 -1
  62. package/src/ssr/CloudShell.island.tsx +19 -3
  63. package/src/ssr/Layout.tsx +1 -1
  64. package/src/ssr/MobileProfileActions.tsx +2 -2
  65. package/src/ssr/ProfilePreferences.tsx +2 -1
  66. package/src/ssr/__snapshots__/Layout.unchanged.render.test.tsx.snap +3 -3
  67. package/src/ssr/admin-navigation.ts +1 -11
  68. package/src/ssr/app-launchpad.tsx +6 -1
  69. package/src/ssr/platform-messages.ts +2 -0
  70. package/src/ssr/profile-actions.ts +3 -6
  71. package/src/ssr/shell-data.tsx +1 -1
  72. package/src/workflows/language/expressions.ts +3 -2
  73. package/src/workflows/runtime/executor.ts +2 -1
@@ -22,7 +22,7 @@ exports[`opt-out regular HTML is unchanged 1`] = `
22
22
  <script>!function(){var e=document.documentElement;if(e.hasAttribute("data-theme-fixed"))return;var m=matchMedia("(prefers-color-scheme: dark)");function r(n,s){var v;document.cookie.split(";").forEach(function(p){p=p.trim();var i=p.indexOf("=");if(i>0&&p.slice(0,i)===n){var t=p.slice(i+1);try{t=decodeURIComponent(t)}catch(e){}if(t==="light"||t==="dark"||s&&t==="system")v=t}});return v}function a(){var s=m.matches?"dark":"light";if(r("color-scheme")!==s)document.cookie="color-scheme="+s+"; path=/; max-age=31536000; SameSite=Lax"+(location.protocol==="https:"?"; Secure":"");var p=r("theme",true)||"system";e.classList.remove("light","dark");e.classList.add(p==="system"?s:p)}a();m.addEventListener("change",function(){a();window.dispatchEvent(new Event("cloud:theme-preference"))})}();</script>
23
23
  </head>
24
24
  <body class="k2b-ui" data-k2b-app-workspace-controller="global">
25
- <div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;panel&quot;,&quot;workspace&quot;,&quot;pageTrail&quot;,&quot;focus&quot;,&quot;help&quot;,&quot;commands&quot;,&quot;push&quot;,&quot;announcements&quot;,&quot;banners&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:10,&quot;i&quot;:1,&quot;p&quot;:{&quot;k&quot;:[&quot;appId&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;unchanged&quot;}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:10,&quot;i&quot;:2,&quot;p&quot;:{&quot;k&quot;:[&quot;searchResources&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;currentPath&quot;,&quot;panelOpen&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;rail&quot;},{&quot;t&quot;:1,&quot;s&quot;:&quot;/app/unchanged?mode=regular&quot;},{&quot;t&quot;:2,&quot;s&quot;:3}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;panelOpen&quot;,&quot;authenticated&quot;,&quot;title&quot;,&quot;launchpad&quot;,&quot;breadcrumbs&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;header&quot;},{&quot;t&quot;:2,&quot;s&quot;:3},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:1,&quot;s&quot;:&quot;Unchanged&quot;},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 md:overflow-auto md:[scrollbar-gutter:stable]">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
25
+ <div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;panel&quot;,&quot;workspace&quot;,&quot;pageTrail&quot;,&quot;focus&quot;,&quot;help&quot;,&quot;commands&quot;,&quot;push&quot;,&quot;announcements&quot;,&quot;banners&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:10,&quot;i&quot;:1,&quot;p&quot;:{&quot;k&quot;:[&quot;appId&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;unchanged&quot;}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:10,&quot;i&quot;:2,&quot;p&quot;:{&quot;k&quot;:[&quot;searchResources&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"userId":"11111111-1111-4111-8111-111111111111","name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;currentPath&quot;,&quot;panelOpen&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;rail&quot;},{&quot;t&quot;:1,&quot;s&quot;:&quot;/app/unchanged?mode=regular&quot;},{&quot;t&quot;:2,&quot;s&quot;:3}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;panelOpen&quot;,&quot;authenticated&quot;,&quot;title&quot;,&quot;launchpad&quot;,&quot;breadcrumbs&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;header&quot;},{&quot;t&quot;:2,&quot;s&quot;:3},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:1,&quot;s&quot;:&quot;Unchanged&quot;},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 md:overflow-auto md:[scrollbar-gutter:stable]">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
26
26
  </body>
27
27
  <style>solid-client,solid-island{display:contents}</style>
28
28
  <script type="module" data-ssr-assets="/_ssr/0">const p="/_ssr/0";document.querySelectorAll('solid-island,solid-client').forEach(e=>import(p+'/'+e.dataset.id+'.js'));</script>
@@ -52,7 +52,7 @@ exports[`opt-out fullPage HTML is unchanged 1`] = `
52
52
  <script>!function(){var e=document.documentElement;if(e.hasAttribute("data-theme-fixed"))return;var m=matchMedia("(prefers-color-scheme: dark)");function r(n,s){var v;document.cookie.split(";").forEach(function(p){p=p.trim();var i=p.indexOf("=");if(i>0&&p.slice(0,i)===n){var t=p.slice(i+1);try{t=decodeURIComponent(t)}catch(e){}if(t==="light"||t==="dark"||s&&t==="system")v=t}});return v}function a(){var s=m.matches?"dark":"light";if(r("color-scheme")!==s)document.cookie="color-scheme="+s+"; path=/; max-age=31536000; SameSite=Lax"+(location.protocol==="https:"?"; Secure":"");var p=r("theme",true)||"system";e.classList.remove("light","dark");e.classList.add(p==="system"?s:p)}a();m.addEventListener("change",function(){a();window.dispatchEvent(new Event("cloud:theme-preference"))})}();</script>
53
53
  </head>
54
54
  <body class="k2b-ui" data-k2b-app-workspace-controller="global">
55
- <div class="cloud-app-canvas relative flex w-full h-dvh overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-full-page="true" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;panel&quot;,&quot;workspace&quot;,&quot;pageTrail&quot;,&quot;focus&quot;,&quot;help&quot;,&quot;commands&quot;,&quot;push&quot;,&quot;announcements&quot;,&quot;banners&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:10,&quot;i&quot;:1,&quot;p&quot;:{&quot;k&quot;:[&quot;appId&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;unchanged&quot;}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:10,&quot;i&quot;:2,&quot;p&quot;:{&quot;k&quot;:[&quot;searchResources&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;currentPath&quot;,&quot;panelOpen&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;rail&quot;},{&quot;t&quot;:1,&quot;s&quot;:&quot;/app/unchanged?mode=fullPage&quot;},{&quot;t&quot;:2,&quot;s&quot;:3}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;panelOpen&quot;,&quot;authenticated&quot;,&quot;title&quot;,&quot;launchpad&quot;,&quot;breadcrumbs&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;header&quot;},{&quot;t&quot;:2,&quot;s&quot;:3},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:1,&quot;s&quot;:&quot;Unchanged&quot;},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
55
+ <div class="cloud-app-canvas relative flex w-full h-dvh overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-full-page="true" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;panel&quot;,&quot;workspace&quot;,&quot;pageTrail&quot;,&quot;focus&quot;,&quot;help&quot;,&quot;commands&quot;,&quot;push&quot;,&quot;announcements&quot;,&quot;banners&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:10,&quot;i&quot;:1,&quot;p&quot;:{&quot;k&quot;:[&quot;appId&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;unchanged&quot;}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:10,&quot;i&quot;:2,&quot;p&quot;:{&quot;k&quot;:[&quot;searchResources&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"userId":"11111111-1111-4111-8111-111111111111","name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;currentPath&quot;,&quot;panelOpen&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;rail&quot;},{&quot;t&quot;:1,&quot;s&quot;:&quot;/app/unchanged?mode=fullPage&quot;},{&quot;t&quot;:2,&quot;s&quot;:3}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;panelOpen&quot;,&quot;authenticated&quot;,&quot;title&quot;,&quot;launchpad&quot;,&quot;breadcrumbs&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;header&quot;},{&quot;t&quot;:2,&quot;s&quot;:3},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:1,&quot;s&quot;:&quot;Unchanged&quot;},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
56
56
  </body>
57
57
  <style>solid-client,solid-island{display:contents}</style>
58
58
  <script type="module" data-ssr-assets="/_ssr/0">const p="/_ssr/0";document.querySelectorAll('solid-island,solid-client').forEach(e=>import(p+'/'+e.dataset.id+'.js'));</script>
@@ -82,7 +82,7 @@ exports[`opt-out fullWidth HTML is unchanged 1`] = `
82
82
  <script>!function(){var e=document.documentElement;if(e.hasAttribute("data-theme-fixed"))return;var m=matchMedia("(prefers-color-scheme: dark)");function r(n,s){var v;document.cookie.split(";").forEach(function(p){p=p.trim();var i=p.indexOf("=");if(i>0&&p.slice(0,i)===n){var t=p.slice(i+1);try{t=decodeURIComponent(t)}catch(e){}if(t==="light"||t==="dark"||s&&t==="system")v=t}});return v}function a(){var s=m.matches?"dark":"light";if(r("color-scheme")!==s)document.cookie="color-scheme="+s+"; path=/; max-age=31536000; SameSite=Lax"+(location.protocol==="https:"?"; Secure":"");var p=r("theme",true)||"system";e.classList.remove("light","dark");e.classList.add(p==="system"?s:p)}a();m.addEventListener("change",function(){a();window.dispatchEvent(new Event("cloud:theme-preference"))})}();</script>
83
83
  </head>
84
84
  <body class="k2b-ui" data-k2b-app-workspace-controller="global">
85
- <div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;panel&quot;,&quot;workspace&quot;,&quot;pageTrail&quot;,&quot;focus&quot;,&quot;help&quot;,&quot;commands&quot;,&quot;push&quot;,&quot;announcements&quot;,&quot;banners&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:10,&quot;i&quot;:1,&quot;p&quot;:{&quot;k&quot;:[&quot;appId&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;unchanged&quot;}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:10,&quot;i&quot;:2,&quot;p&quot;:{&quot;k&quot;:[&quot;searchResources&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;currentPath&quot;,&quot;panelOpen&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;rail&quot;},{&quot;t&quot;:1,&quot;s&quot;:&quot;/app/unchanged?mode=fullWidth&quot;},{&quot;t&quot;:2,&quot;s&quot;:3}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;panelOpen&quot;,&quot;authenticated&quot;,&quot;title&quot;,&quot;launchpad&quot;,&quot;breadcrumbs&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;header&quot;},{&quot;t&quot;:2,&quot;s&quot;:3},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:1,&quot;s&quot;:&quot;Unchanged&quot;},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
85
+ <div class="cloud-app-canvas relative flex w-full min-h-dvh md:h-dvh md:overflow-hidden" style="" data-app-id="unchanged" data-app-base="/app/unchanged" data-layout-authenticated="true"><solid-island data-id="da36a5b84abc" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;panel&quot;,&quot;workspace&quot;,&quot;pageTrail&quot;,&quot;focus&quot;,&quot;help&quot;,&quot;commands&quot;,&quot;push&quot;,&quot;announcements&quot;,&quot;banners&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:10,&quot;i&quot;:1,&quot;p&quot;:{&quot;k&quot;:[&quot;appId&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;unchanged&quot;}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:10,&quot;i&quot;:2,&quot;p&quot;:{&quot;k&quot;:[&quot;searchResources&quot;],&quot;v&quot;:[{&quot;t&quot;:2,&quot;s&quot;:2}]},&quot;o&quot;:0},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="ShellRuntime.island.tsx"></solid-island><script id="cloud-shell-data" type="application/json">{"panel":{"providers":[{"id":"unchanged","label":"Panel","icon":"ti ti-box","href":"/app/unchanged/panel","appName":"Unchanged","consent":true}],"provider":"unchanged","context":{"v":1,"seq":0,"pageId":"11111111-1111-4111-8111-111111111111","app":"unchanged"}},"platform":"other","apps":[{"iconClass":"ti ti-box","defaultVisible":true,"id":"unchanged","label":"Unchanged","href":"/app/unchanged","match":"/app/unchanged","description":"Snapshot fixture"}],"rail":{"revision":0,"visibility":{},"shortcuts":[]},"home":"/app/dashboard","profile":{"userId":"11111111-1111-4111-8111-111111111111","name":"Mia Muster"},"legalLinks":[{"label":"Profile","href":"/me","icon":"ti ti-user-circle"}],"theme":"system","searchLinks":{},"appId":"unchanged"}</script><aside class="layout-rail hidden w-14 shrink-0 flex-col md:flex"><div class="layout-rail-logo flex h-[2.875rem] shrink-0 items-center justify-center"><a href="/" aria-label="Home"><img src="/branding/logo" alt="Logo" class="h-5 w-5"></a></div><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;currentPath&quot;,&quot;panelOpen&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;rail&quot;},{&quot;t&quot;:1,&quot;s&quot;:&quot;/app/unchanged?mode=fullWidth&quot;},{&quot;t&quot;:2,&quot;s&quot;:3}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><nav class="layout-rail-navigation flex min-h-0 flex-1 flex-col items-center gap-1" aria-label="Apps"><button type="button" class="rail-item " data-cloud-shell-focus-toggle="hide" aria-label="Hide sidebar" ><i class="ti ti-layout-sidebar-left-collapse text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100000000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Hide sidebar (⌘/Ctrl+\\)</span><div style="flex:0 1 auto;scrollbar-width:none;scrollbar-gutter:auto;overflow-x:hidden" data-cloud-rail-apps="true" data-scroll-fade-axis="vertical" data-orientation="vertical" data-scroll-fade-mode="both" class="k2b-scroll-area flex w-full flex-col items-center gap-1 " ><a href="/app/unchanged" class="rail-item relative shrink-0 rail-item-active" aria-label="Unchanged" aria-current="page" style=""><i class="ti ti-box text-xl" aria-hidden="true"></i><span class="sr-only">Unchanged</span></a><span id="k2b-tooltip-00010000102010" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Unchanged</span></div><button type="button" class="rail-item shrink-0 " data-cloud-launchpad="true" aria-label="Open apps" ><i class="ti ti-grid-dots text-xl" aria-hidden="true"></i></button><span id="k2b-tooltip-000100002000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Open apps</span><div class="mt-auto shrink-0 flex flex-col items-center gap-1"><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open global search" ><i class="ti ti-search text-xl"></i></button><span id="k2b-tooltip-000100004000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Search (⌘/Ctrl+K)</span><button type="button" class="rail-item text-blue-500 hover:bg-blue-500/10 hover:text-blue-600 dark:text-blue-400 dark:hover:bg-blue-500/15 dark:hover:text-blue-300 " aria-label="Open help" ><i class="ti ti-help-circle text-xl"></i></button><span id="k2b-tooltip-000100005000" role="tooltip" popover="manual" class="k2b-tooltip" data-instant="true">Help (Shift+/)</span><div class="layout-profile-preferences"><button type="button" class="layout-profile-preferences__link" aria-label="Profile and preferences"><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div class="layout-profile-preferences__panel dropdown-menu-surface"><button type="button" class="menu-item" aria-label="Appearance: Automatic. Switches to Light."><i class="ti ti-device-laptop" aria-hidden="true"></i><span>Automatic</span></button><button type="button" class="menu-item"><i class="ti ti-language" aria-hidden="true"></i><span>Deutsch</span></button><a href="/me" class="menu-item"><i class="ti ti-user-circle" aria-hidden="true"></i><span>Profile settings</span></a><button type="button" class="menu-item"><i class="ti ti-logout" aria-hidden="true"></i><span>Sign out</span></button></div><span class="k2b-dropdown layout-profile-preferences__dropdown"><button aria-controls="k2b-dropdown-00010000610" aria-expanded="false" aria-haspopup="menu" aria-label="Profile and preferences" type="button" class="k2b-dropdown__trigger layout-profile-preferences__dropdown-trigger " ><span class="k2b-avatar " data-size="sm" data-tint="1" style="" role="img" aria-label="Mia Muster avatar">MM</span></button><div id="k2b-dropdown-00010000610" popover="auto" role="menu" aria-label="Profile and preferences" class="k2b-dropdown__menu " style="--k2b-dropdown-width:14rem" data-width="fixed" data-variant="default" data-position="right-start"><button type="button" role="menuitem" aria-label="Appearance: Automatic. Switches to Light." tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-device-laptop" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Automatic</span></span></button><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-language" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Deutsch</span></span></button><a href="/me" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-user-circle" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Profile settings</span></span></a><button type="button" role="menuitem" tabindex="-1" class="k2b-dropdown__item "><i class="ti ti-logout" aria-hidden="true"></i><span class="k2b-dropdown__copy"><span>Sign out</span></span></button></div></span><span class="sr-only" aria-live="polite"></span></div></div></nav></solid-island></aside><div class="cloud-shell-show"><button data-cloud-shell-focus-toggle="show" title="Show sidebar (⌘/Ctrl+\\)" aria-label="Show sidebar" type="button" class="k2b-button k2b-icon-button " data-size="lg" data-variant="secondary" ><span class="k2b-button__label"><i class="ti ti-layout-sidebar-left-expand text-xl" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010100100" role="tooltip" popover="manual" class="k2b-tooltip">Show sidebar (⌘/Ctrl+\\)</span></div><div class="cloud-shell-reveal" data-cloud-shell-reveal aria-hidden="true"></div><div class="layout-shell-content flex min-h-0 min-w-0 flex-1 flex-col" data-cloud-app-area><header class="layout-header paper flex min-h-[2.875rem] shrink-0 items-center px-2 py-1.5 md:px-3 md:py-2 md:hidden" style="box-shadow:var(--ui-shadow-surface)"><solid-island data-id="0deacd2f60ab" data-props="{&quot;t&quot;:{&quot;t&quot;:10,&quot;i&quot;:0,&quot;p&quot;:{&quot;k&quot;:[&quot;slot&quot;,&quot;panelOpen&quot;,&quot;authenticated&quot;,&quot;title&quot;,&quot;launchpad&quot;,&quot;breadcrumbs&quot;],&quot;v&quot;:[{&quot;t&quot;:1,&quot;s&quot;:&quot;header&quot;},{&quot;t&quot;:2,&quot;s&quot;:3},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:1,&quot;s&quot;:&quot;Unchanged&quot;},{&quot;t&quot;:2,&quot;s&quot;:2},{&quot;t&quot;:2,&quot;s&quot;:1}]},&quot;o&quot;:0},&quot;f&quot;:127,&quot;m&quot;:[]}" data-file="CloudShell.island.tsx"><div class="ml-2 flex min-w-0 flex-1 items-center"><div class="flex min-w-0 items-center lg:hidden"><span class="layout-header-title truncate font-semibold">Unchanged</span><button type="button" class="layout-header-title-menu" aria-haspopup="dialog"><span class="truncate font-semibold">Unchanged</span><span class="sr-only">, Menu</span><i class="ti ti-chevron-down" aria-hidden="true"></i></button></div></div><div class="flex shrink-0 items-center gap-1"><div class="flex items-center gap-1 lg:hidden"><button title="Search (⌘/Ctrl+K)" aria-label="Open global search" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-search text-base"></i></span></button><span id="k2b-tooltip-00010200100100" role="tooltip" popover="manual" class="k2b-tooltip">Search (⌘/Ctrl+K)</span><button title="Help (Shift+/)" aria-label="Open help" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-help-circle text-base"></i></span></button><span id="k2b-tooltip-00010200200100" role="tooltip" popover="manual" class="k2b-tooltip">Help (Shift+/)</span><button title="Open apps" aria-label="Open apps" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-grid-dots text-lg"></i></span></button><span id="k2b-tooltip-00010200300100" role="tooltip" popover="manual" class="k2b-tooltip">Open apps</span></div></div></solid-island></header><script type="application/json" data-k2b-page-trail>{"title":"Unchanged page","ancestors":[]}</script><div class="layout-page-head" data-trail="title"><div class="k2b-page-title " data-depth="0" data-fallback="" data-k2b-server=""><div class="k2b-page-title__copy"><p data-hk="00010501040" class="k2b-page-title__title " ><span class="k2b-page-title__text">Unchanged page</span></p></div></div></div><main class="layout-content-main min-h-0 min-w-0 flex-1 flex flex-col">Page content</main></div><aside class="cloud-panel" id="cloud-panel" data-cloud-panel aria-label="Panel" data-state="closed" data-provider="unchanged" data-app-name="Unchanged" data-provider-consent="true" data-context-allowed="false"><div role="separator" tabindex="0" class="k2b-resize-separator cloud-panel__resize" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="36" aria-valuenow="26" aria-label="Resize panel" aria-controls="cloud-panel" data-orientation="vertical" data-resize-edge="start"><span aria-hidden="true"></span></div><div class="cloud-panel__card"><button type="button" class="cloud-panel__grabber" data-cloud-panel-grow aria-label="Enlarge panel"><span aria-hidden="true"></span></button><div class="cloud-panel__head"><h2 class="cloud-panel__title"><i class="ti ti-box" aria-hidden="true"></i><span>Panel</span></h2><span class="cloud-panel__menu" data-cloud-panel-menu style="visibility:visible"><button aria-haspopup="menu" aria-expanded="false" title="Panel menu" aria-label="Panel menu" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-dots" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010610100" role="tooltip" popover="manual" class="k2b-tooltip">Panel menu</span></span><button data-cloud-panel-close="" title="Close panel (Ctrl+J)" aria-label="Close panel" type="button" class="k2b-button k2b-icon-button " data-size="md" data-variant="ghost" ><span class="k2b-button__label"><i class="ti ti-x" aria-hidden="true"></i></span></button><span id="k2b-tooltip-00010620100" role="tooltip" popover="manual" class="k2b-tooltip">Close panel (Ctrl+J)</span></div><div class="cloud-panel__body" id="cloud-panel-body"><article data-cloud-panel-consent="" role="region" tabindex="-1" aria-labelledby="cloud-panel-consent-title" class="k2b-notice-card cloud-panel__consent " data-tone="neutral"><div class="k2b-notice-card__content"><div class="k2b-notice-card__head"><p class="k2b-notice-card__title"><span id="cloud-panel-consent-title" data-cloud-panel-consent-title>May Unchanged see where you are?</span></p></div><p class="k2b-notice-card__description"><span data-cloud-panel-consent-body>Unchanged only learns which place you are at. It can read only what you may read yourself. You can change this in the ⋯ menu at any time.</span></p><div class="k2b-notice-card__body "><div class="cloud-panel__consent-actions"><button data-cloud-panel-consent-answer="allow" type="button" class="k2b-button " data-size="sm" data-variant="primary" ><span class="k2b-button__label">Allow</span></button><button data-cloud-panel-consent-answer="deny" type="button" class="k2b-button " data-size="sm" data-variant="secondary" ><span class="k2b-button__label">Don't share</span></button></div><p class="cloud-panel__consent-error" data-cloud-panel-consent-error role="status"></p></div></div></article><div class="cloud-panel__skeleton" aria-hidden="true"><span></span><span></span><span></span></div><div class="cloud-panel__fallback"><div data-hk="000106400" class="k2b-placeholder " data-align="center" data-state="error" data-surface="none" data-variant="panel" role="alert" ><span class="k2b-placeholder__icon"><i class="ti ti-alert-circle" aria-hidden="true"></i></span><p class="k2b-placeholder__title">The panel did not load</p><div class="k2b-placeholder__description">Panel is not responding.</div><div class="k2b-placeholder__action"><button data-cloud-panel-retry="" type="button" class="k2b-button " data-size="md" data-variant="primary" ><span class="k2b-button__label">Try again</span></button></div></div></div><div class="cloud-panel__shield" aria-hidden="true"></div><div class="cloud-panel__closing" aria-hidden="true"><span><i class="ti ti-x"></i>Release to close the panel</span></div></div></div><div role="status" class="k2b-sr-only" data-cloud-panel-status></div></aside><div class="cloud-tab-bar"><div class="cloud-tab-bar__row"><nav class="k2b-tab-bar" aria-label="Apps" data-variant="floating"><ul><li><a href="/" data-tab="home" data-k2b-title="Home"><i class="ti ti-home" aria-hidden="true"></i><span class="k2b-truncate-fade">Home</span></a></li><li><a href="/app/unchanged" aria-current="page" data-tab="unchanged" data-k2b-title="Unchanged"><i class="ti ti-box" aria-hidden="true"></i><span class="k2b-truncate-fade">Unchanged</span></a></li></ul></nav></div></div><div data-print-fallback><p>This view does not print well.</p><p>Open the item you want to print, or use the app's export.</p></div></div>
86
86
  </body>
87
87
  <style>solid-client,solid-island{display:contents}</style>
88
88
  <script type="module" data-ssr-assets="/_ssr/0">const p="/_ssr/0";document.querySelectorAll('solid-island,solid-client').forEach(e=>import(p+'/'+e.dataset.id+'.js'));</script>
@@ -17,7 +17,6 @@ export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][]
17
17
  { href: "/admin/settings?tab=storage", icon: "ti-database", label: t.storage },
18
18
  { href: "/admin/outgoing-mail", icon: "ti-mail", label: t.outgoingMail },
19
19
  { href: "/admin/settings?tab=email-templates", icon: "ti-template", label: t.emailTemplates },
20
- { href: "/admin/settings?tab=security", icon: "ti-shield-lock", label: t.security },
21
20
  ];
22
21
  // Areas show as one entry each. The AI area belongs to Core; Observability exists when an app contributes it.
23
22
  const contributedApps = apps
@@ -50,6 +49,7 @@ export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][]
50
49
  );
51
50
  const areaLinks: AdminLink[] = [
52
51
  { href: "/admin/base", icon: "ti-adjustments", label: t.baseSettings },
52
+ { href: "/admin/signin", icon: "ti-shield-lock", label: t.signinSecurity },
53
53
  { href: "/admin/ai", icon: "ti-sparkles", label: t.ai },
54
54
  ...(observabilityPaths.length > 0
55
55
  ? [
@@ -79,16 +79,6 @@ export const buildAdminGroups = (apps: readonly RuntimeContext["apps"][number][]
79
79
  ...contributedApps.flatMap(({ groups }) =>
80
80
  groups.filter((group) => group.section === undefined).map(({ label, links }) => ({ label, links })),
81
81
  ),
82
- {
83
- label: t.userManagement,
84
- links: [
85
- { href: "/admin/settings?tab=user", icon: "ti-login", label: t.accountSignIn },
86
- { href: "/admin/settings?tab=registration", icon: "ti-user-plus", label: t.accountRegistration },
87
- { href: "/admin/settings?tab=linux", icon: "ti-terminal-2", label: t.linuxAccess },
88
- { href: "/admin/settings?tab=account-operations", icon: "ti-tool", label: t.accountOperations },
89
- { href: "/admin/settings?tab=freeipa", icon: "ti-building-fortress", label: "FreeIPA" },
90
- ],
91
- },
92
82
  { label: t.settings, links: settingsLinks },
93
83
  ...(appLinks.length > 0 ? [{ label: t.appAdmin, links: appLinks }] : []),
94
84
  ];
@@ -23,7 +23,12 @@ const readEmbeddedContext = (): AppLaunchpadContext | undefined => {
23
23
  return {
24
24
  apps: data.apps,
25
25
  profile: data.profile
26
- ? { name: data.profile.name, theme: data.theme, ...(data.profile.appHref === "/me/app" ? { appHref: data.profile.appHref } : {}) }
26
+ ? {
27
+ userId: data.profile.userId,
28
+ name: data.profile.name,
29
+ theme: data.theme,
30
+ ...(data.profile.appHref === "/me/app" ? { appHref: data.profile.appHref } : {}),
31
+ }
27
32
  : undefined,
28
33
  legalLinks: data.legalLinks,
29
34
  };
@@ -44,6 +44,7 @@ export const platformMessages = i18n.define({
44
44
  ai: "AI",
45
45
  observability: "Observability",
46
46
  baseSettings: "Base settings",
47
+ signinSecurity: "Sign-in & security",
47
48
  cloudAreas: "Cloud",
48
49
  settings: "Settings",
49
50
  appAdmin: "App administration",
@@ -150,6 +151,7 @@ export const platformMessages = i18n.define({
150
151
  ai: "KI",
151
152
  observability: "Observability",
152
153
  baseSettings: "Grundeinstellungen",
154
+ signinSecurity: "Anmeldung & Sicherheit",
153
155
  cloudAreas: "Cloud",
154
156
  settings: "Einstellungen",
155
157
  appAdmin: "App-Administration",
@@ -5,7 +5,7 @@ import type { CloudThemePreference } from "../shared/theme";
5
5
  import { createPreferenceController } from "./preference-controller";
6
6
 
7
7
  /** `appHref` is set while the installation offers the mobile app; the item then leads to `/me/app`. */
8
- export function createProfileActions(initialTheme: CloudThemePreference, appHref?: string) {
8
+ export function createProfileActions(initialTheme: CloudThemePreference, appHref?: string, userId?: string) {
9
9
  const locale = useLocale();
10
10
  const preferences = createPreferenceController(initialTheme, locale);
11
11
  const [signingOut, setSigningOut] = createSignal(false);
@@ -13,16 +13,13 @@ export function createProfileActions(initialTheme: CloudThemePreference, appHref
13
13
  if (signingOut()) return;
14
14
  setSigningOut(true);
15
15
  // The API client and the push client load with the first sign-out, not with every page.
16
- const loaded = await importOnDemand(() => Promise.all([import("../browser/notifications"), import("../clients/core")]));
16
+ const loaded = await importOnDemand(() => import("../browser/session"));
17
17
  if (!loaded) {
18
18
  setSigningOut(false);
19
19
  return;
20
20
  }
21
- const [{ browserNotificationClient }, { apiClient }] = loaded;
22
21
  try {
23
- await browserNotificationClient.disable().catch(() => undefined);
24
- const response = await apiClient.auth.logout.$post();
25
- if (!response.ok) throw new Error(preferences.messages().signOutFailed);
22
+ await loaded.signOutBrowserSession(userId, preferences.messages().signOutFailed);
26
23
  window.location.href = "/auth/login";
27
24
  } catch {
28
25
  toast.error(preferences.messages().signOutFailed);
@@ -20,7 +20,7 @@ export type ShellData = {
20
20
  home?: string;
21
21
  legalLinks: AppLaunchpadLegalLink[];
22
22
  /** Signed-in pages: the person, for the profile menu and the phone menu's profile actions. */
23
- profile?: { name: string; avatarSrc?: string; appHref?: string };
23
+ profile?: { userId?: string; name: string; avatarSrc?: string; appHref?: string };
24
24
  theme: CloudThemePreference;
25
25
  /** The current app's accent, for the Help dialog and the phone menu, which open outside the app canvas. */
26
26
  accent?: string;
@@ -1,5 +1,6 @@
1
- const EXACT_EXPRESSION = /^\$\{\{\s*([^{}]+?)\s*\}\}$/;
2
- const EMBEDDED_EXPRESSION = /\$\{\{\s*([^{}]+?)\s*\}\}/g;
1
+ // Callers trim the captured text; no `\s*` around the group keeps matching linear.
2
+ const EXACT_EXPRESSION = /^\$\{\{([^{}]+)\}\}$/;
3
+ const EMBEDDED_EXPRESSION = /\$\{\{([^{}]+)\}\}/g;
3
4
  const REFERENCE = /^[A-Za-z_][A-Za-z0-9_]*(?:\.[^{}]+)?$/;
4
5
 
5
6
  export type WorkflowValueExpression = { kind: "now" } | { kind: "reference"; reference: string };
@@ -32,7 +32,8 @@ import type {
32
32
 
33
33
  export const DEFAULT_MAX_LOOP_ITEMS = 100;
34
34
 
35
- const EXACT_EXPRESSION = /^\$\{\{\s*([^{}]+?)\s*\}\}$/;
35
+ // Callers trim the captured text; no `\s*` around the group keeps matching linear.
36
+ const EXACT_EXPRESSION = /^\$\{\{([^{}]+)\}\}$/;
36
37
 
37
38
  class RuntimeVariableScope implements WorkflowVariableScope {
38
39
  readonly #values = new Map<string, WorkflowJsonValue>();