@samyx/preview-stacks-ui 0.25.2 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{ActionButton.vue_vue_type_script_setup_true_lang-D5wrEmB2.js → ActionButton.vue_vue_type_script_setup_true_lang-B0qf7_XI.js} +2 -2
- package/dist/assets/{ActionButton.vue_vue_type_script_setup_true_lang-D5wrEmB2.js.map → ActionButton.vue_vue_type_script_setup_true_lang-B0qf7_XI.js.map} +1 -1
- package/dist/assets/{AxesTab-DPb0krkI.js → AxesTab-BxVd_LDI.js} +2 -2
- package/dist/assets/{AxesTab-DPb0krkI.js.map → AxesTab-BxVd_LDI.js.map} +1 -1
- package/dist/assets/{ConfigTab-DLhjDiis.js → ConfigTab-DSHTlGAK.js} +2 -2
- package/dist/assets/{ConfigTab-DLhjDiis.js.map → ConfigTab-DSHTlGAK.js.map} +1 -1
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-R1IfGYYT.js +2 -0
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-R1IfGYYT.js.map +1 -0
- package/dist/assets/DangerTab-BZ5e4YGe.js +2 -0
- package/dist/assets/DangerTab-BZ5e4YGe.js.map +1 -0
- package/dist/assets/{DashboardView-DxZUkxRF.js → DashboardView-TYfDe8IH.js} +2 -2
- package/dist/assets/{DashboardView-DxZUkxRF.js.map → DashboardView-TYfDe8IH.js.map} +1 -1
- package/dist/assets/DeploymentDetailView-RSDMb2tC.js +2 -0
- package/dist/assets/DeploymentDetailView-RSDMb2tC.js.map +1 -0
- package/dist/assets/DeploymentsView-DYAPYBih.js +2 -0
- package/dist/assets/DeploymentsView-DYAPYBih.js.map +1 -0
- package/dist/assets/{EquivalentCommand-C45BzkNz.js → EquivalentCommand-GFG6rkn5.js} +3 -3
- package/dist/assets/{EquivalentCommand-C45BzkNz.js.map → EquivalentCommand-GFG6rkn5.js.map} +1 -1
- package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js → ErrorNote.vue_vue_type_script_setup_true_lang-DNaY6OBe.js} +2 -2
- package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js.map → ErrorNote.vue_vue_type_script_setup_true_lang-DNaY6OBe.js.map} +1 -1
- package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-DEjnzS2A.js +2 -0
- package/dist/assets/{HelpModal.vue_vue_type_script_setup_true_lang-BSOuxyyP.js.map → HelpModal.vue_vue_type_script_setup_true_lang-DEjnzS2A.js.map} +1 -1
- package/dist/assets/JobDetailView-DvFGqRQj.js +2 -0
- package/dist/assets/{JobDetailView-HFOJln2b.js.map → JobDetailView-DvFGqRQj.js.map} +1 -1
- package/dist/assets/{JobsView-dWw_uNGE.js → JobsView-C-rxx15K.js} +2 -2
- package/dist/assets/{JobsView-dWw_uNGE.js.map → JobsView-C-rxx15K.js.map} +1 -1
- package/dist/assets/{LogViewer.vue_vue_type_script_setup_true_lang-5r84oNls.js → LogViewer.vue_vue_type_script_setup_true_lang-6CJlo0ox.js} +3 -3
- package/dist/assets/{LogViewer.vue_vue_type_script_setup_true_lang-5r84oNls.js.map → LogViewer.vue_vue_type_script_setup_true_lang-6CJlo0ox.js.map} +1 -1
- package/dist/assets/LoginView-CAXL0Xhr.js +2 -0
- package/dist/assets/LoginView-CAXL0Xhr.js.map +1 -0
- package/dist/assets/LoginView-Djedwklv.css +1 -0
- package/dist/assets/LogsTab-Bzz4JBQM.js +6 -0
- package/dist/assets/LogsTab-Bzz4JBQM.js.map +1 -0
- package/dist/assets/{NotFoundView-jZIc0wDm.js → NotFoundView-BRn9Jn4H.js} +2 -2
- package/dist/assets/{NotFoundView-jZIc0wDm.js.map → NotFoundView-BRn9Jn4H.js.map} +1 -1
- package/dist/assets/{NotifiersView-DJu-c-a6.js → NotifiersView-Bd13G-1b.js} +2 -2
- package/dist/assets/{NotifiersView-DJu-c-a6.js.map → NotifiersView-Bd13G-1b.js.map} +1 -1
- package/dist/assets/OverviewTab-Ae5-H5DV.js +2 -0
- package/dist/assets/OverviewTab-Ae5-H5DV.js.map +1 -0
- package/dist/assets/PublicLogsView-BAe90EbI.css +1 -0
- package/dist/assets/PublicLogsView-DvCE0GT1.js +4 -0
- package/dist/assets/PublicLogsView-DvCE0GT1.js.map +1 -0
- package/dist/assets/{RefreshButton.vue_vue_type_script_setup_true_lang-CXCY3Vlc.js → RefreshButton.vue_vue_type_script_setup_true_lang-DpeOKN8U.js} +2 -2
- package/dist/assets/{RefreshButton.vue_vue_type_script_setup_true_lang-CXCY3Vlc.js.map → RefreshButton.vue_vue_type_script_setup_true_lang-DpeOKN8U.js.map} +1 -1
- package/dist/assets/RegistriesView-ZRRfxVTX.js +2 -0
- package/dist/assets/{RegistriesView-BeiFx468.js.map → RegistriesView-ZRRfxVTX.js.map} +1 -1
- package/dist/assets/{RelativeTime.vue_vue_type_script_setup_true_lang-BGissyps.js → RelativeTime.vue_vue_type_script_setup_true_lang-Dm9XnXF7.js} +2 -2
- package/dist/assets/{RelativeTime.vue_vue_type_script_setup_true_lang-BGissyps.js.map → RelativeTime.vue_vue_type_script_setup_true_lang-Dm9XnXF7.js.map} +1 -1
- package/dist/assets/{RequiresTab-Bb3_lYqC.js → RequiresTab-CLfNJHOh.js} +2 -2
- package/dist/assets/{RequiresTab-Bb3_lYqC.js.map → RequiresTab-CLfNJHOh.js.map} +1 -1
- package/dist/assets/{RoutingView-y8L_ex2z.js → RoutingView-BCsr0bjm.js} +3 -3
- package/dist/assets/{RoutingView-y8L_ex2z.js.map → RoutingView-BCsr0bjm.js.map} +1 -1
- package/dist/assets/RuntimeTab-CeJS5wuv.js +2 -0
- package/dist/assets/RuntimeTab-CeJS5wuv.js.map +1 -0
- package/dist/assets/SelectMenu.vue_vue_type_script_setup_true_lang-BLfPhhAj.js +2 -0
- package/dist/assets/{SelectMenu.vue_vue_type_script_setup_true_lang-D8NGgBfa.js.map → SelectMenu.vue_vue_type_script_setup_true_lang-BLfPhhAj.js.map} +1 -1
- package/dist/assets/{SettingsView-C-xJVgVw.js → SettingsView-Bo-SQP0q.js} +2 -2
- package/dist/assets/{SettingsView-C-xJVgVw.js.map → SettingsView-Bo-SQP0q.js.map} +1 -1
- package/dist/assets/{SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js → SkeletonList.vue_vue_type_script_setup_true_lang-DjfNq2KM.js} +2 -2
- package/dist/assets/{SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js.map → SkeletonList.vue_vue_type_script_setup_true_lang-DjfNq2KM.js.map} +1 -1
- package/dist/assets/SpecDetailView-C68gpDhO.js +2 -0
- package/dist/assets/{SpecDetailView-CGQZS7NU.js.map → SpecDetailView-C68gpDhO.js.map} +1 -1
- package/dist/assets/{SpecsView-D9mKql2j.js → SpecsView-mr3zSd-0.js} +2 -2
- package/dist/assets/{SpecsView-D9mKql2j.js.map → SpecsView-mr3zSd-0.js.map} +1 -1
- package/dist/assets/SsoView-D2yf-noE.js +2 -0
- package/dist/assets/SsoView-D2yf-noE.js.map +1 -0
- package/dist/assets/{StateBadge.vue_vue_type_script_setup_true_lang-BgbZLzlL.js → StateBadge.vue_vue_type_script_setup_true_lang-BqldkWlT.js} +2 -2
- package/dist/assets/{StateBadge.vue_vue_type_script_setup_true_lang-BgbZLzlL.js.map → StateBadge.vue_vue_type_script_setup_true_lang-BqldkWlT.js.map} +1 -1
- package/dist/assets/{SubmitView-DuGtFMgF.js → SubmitView-Cdxo6Chq.js} +5 -5
- package/dist/assets/{SubmitView-DuGtFMgF.js.map → SubmitView-Cdxo6Chq.js.map} +1 -1
- package/dist/assets/SwarmView-DVKI5lNe.js +2 -0
- package/dist/assets/SwarmView-DVKI5lNe.js.map +1 -0
- package/dist/assets/Teleport-BUn4ayOo.js +4 -0
- package/dist/assets/{Teleport-DfE2iP8c.js.map → Teleport-BUn4ayOo.js.map} +1 -1
- package/dist/assets/TerminalTab-BRumgZMI.js +3 -0
- package/dist/assets/{TerminalTab-D5ncE4Cv.js.map → TerminalTab-BRumgZMI.js.map} +1 -1
- package/dist/assets/{UsersView-BxU2ho4N.js → UsersView-B7C2Bc3R.js} +2 -2
- package/dist/assets/{UsersView-BxU2ho4N.js.map → UsersView-B7C2Bc3R.js.map} +1 -1
- package/dist/assets/{VarEditor.vue_vue_type_script_setup_true_lang-SKwJUsNC.js → VarEditor.vue_vue_type_script_setup_true_lang-CyOlKVt5.js} +2 -2
- package/dist/assets/{VarEditor.vue_vue_type_script_setup_true_lang-SKwJUsNC.js.map → VarEditor.vue_vue_type_script_setup_true_lang-CyOlKVt5.js.map} +1 -1
- package/dist/assets/{VariablesView-BnW2I-92.js → VariablesView-UCBhNd_o.js} +2 -2
- package/dist/assets/{VariablesView-BnW2I-92.js.map → VariablesView-UCBhNd_o.js.map} +1 -1
- package/dist/assets/index-9Ra4jfL4.js +149 -0
- package/dist/assets/index-9Ra4jfL4.js.map +1 -0
- package/dist/assets/index-B_k9b7xG.css +1 -0
- package/dist/assets/useDeployment-DFOIiXrd.js +2 -0
- package/dist/assets/useDeployment-DFOIiXrd.js.map +1 -0
- package/dist/assets/useFormat-DIlTY5Dl.js +2 -0
- package/dist/assets/useFormat-DIlTY5Dl.js.map +1 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-HglPeTkY.js +0 -2
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-HglPeTkY.js.map +0 -1
- package/dist/assets/DangerTab-BLDIlbN5.js +0 -2
- package/dist/assets/DangerTab-BLDIlbN5.js.map +0 -1
- package/dist/assets/DeploymentDetailView-CEg8sA5I.js +0 -2
- package/dist/assets/DeploymentDetailView-CEg8sA5I.js.map +0 -1
- package/dist/assets/DeploymentsView-BfhwFiiQ.js +0 -2
- package/dist/assets/DeploymentsView-BfhwFiiQ.js.map +0 -1
- package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-BSOuxyyP.js +0 -2
- package/dist/assets/JobDetailView-HFOJln2b.js +0 -2
- package/dist/assets/LoginView-0vIrAhlr.js +0 -2
- package/dist/assets/LoginView-0vIrAhlr.js.map +0 -1
- package/dist/assets/LoginView-BFIG7vGw.css +0 -1
- package/dist/assets/LogsTab-CFlgBsW3.js +0 -6
- package/dist/assets/LogsTab-CFlgBsW3.js.map +0 -1
- package/dist/assets/OverviewTab-DlJt0MIg.js +0 -2
- package/dist/assets/OverviewTab-DlJt0MIg.js.map +0 -1
- package/dist/assets/RegistriesView-BeiFx468.js +0 -2
- package/dist/assets/RuntimeTab-DWZ5eFho.js +0 -2
- package/dist/assets/RuntimeTab-DWZ5eFho.js.map +0 -1
- package/dist/assets/SelectMenu.vue_vue_type_script_setup_true_lang-D8NGgBfa.js +0 -2
- package/dist/assets/SpecDetailView-CGQZS7NU.js +0 -2
- package/dist/assets/Teleport-DfE2iP8c.js +0 -4
- package/dist/assets/TerminalTab-D5ncE4Cv.js +0 -3
- package/dist/assets/index-DVMQBHXF.js +0 -139
- package/dist/assets/index-DVMQBHXF.js.map +0 -1
- package/dist/assets/index-lyuEu6lW.css +0 -1
- package/dist/assets/useDeployment-DGzBsXE-.js +0 -2
- package/dist/assets/useDeployment-DGzBsXE-.js.map +0 -1
- package/dist/assets/useFormat-DVXTfIS-.js +0 -2
- package/dist/assets/useFormat-DVXTfIS-.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root,:root[data-theme=dark]{color-scheme:dark;--bg: #0e1116;--bg-grad: radial-gradient(1100px 620px at 12% -12%, rgba(64, 106, 168, .22) 0%, transparent 70%), radial-gradient(900px 520px at 108% 8%, rgba(96, 76, 168, .13) 0%, transparent 68%);--panel: #171b22;--panel-2: #1e232c;--sunk: #11141a;--line: #2b323d;--line-soft: #21262f;--fg: #eef2f8;--fg-dim: #a4afbe;--fg-mute: #78838f;--accent: #4a9dff;--accent-soft: rgba(74, 157, 255, .18);--ok: #35d17e;--ok-soft: rgba(53, 209, 126, .17);--fail: #ff6159;--fail-soft: rgba(255, 97, 89, .17);--leak: #ffa62b;--leak-soft: rgba(255, 166, 43, .18);--neutral: #95a2b3;--neutral-soft: rgba(149, 162, 179, .16);--hairline: inset 0 1px 0 rgba(255, 255, 255, .055);--hairline-strong: inset 0 1px 0 rgba(255, 255, 255, .09);--elev-1: 0 1px 2px rgba(5, 8, 14, .5);--elev-2: 0 1px 2px rgba(5, 8, 14, .45), 0 6px 16px -4px rgba(5, 8, 14, .5);--elev-3: 0 1px 2px rgba(5, 8, 14, .5), 0 12px 32px -8px rgba(5, 8, 14, .62);--elev-4: 0 2px 4px rgba(5, 8, 14, .5), 0 24px 64px -12px rgba(5, 8, 14, .72);--shadow: var(--elev-2);--hover: rgba(255, 255, 255, .04);--hover-strong: rgba(255, 255, 255, .07);--press: rgba(0, 0, 0, .18);--skel: linear-gradient(90deg, #1c212a 0%, #262d38 50%, #1c212a 100%)}@media(prefers-color-scheme:light){:root:not([data-theme=dark]){color-scheme:light;--bg: #f5f6f8;--bg-grad: radial-gradient(1100px 620px at 12% -12%, rgba(31, 111, 235, .07) 0%, transparent 70%), radial-gradient(900px 520px at 108% 8%, rgba(120, 80, 220, .045) 0%, transparent 68%);--panel: #ffffff;--panel-2: #f4f6f9;--sunk: #eef1f5;--line: #dfe3e9;--line-soft: #eaedf1;--fg: #14181e;--fg-dim: #57616f;--fg-mute: #7d8794;--accent: #1f6feb;--accent-soft: rgba(31, 111, 235, .1);--ok: #1a7f37;--ok-soft: rgba(26, 127, 55, .1);--fail: #cf222e;--fail-soft: rgba(207, 34, 46, .1);--leak: #9a6700;--leak-soft: rgba(154, 103, 0, .12);--neutral: #656d76;--neutral-soft: rgba(101, 109, 118, .1);--hairline: inset 0 1px 0 rgba(255, 255, 255, .9);--hairline-strong: inset 0 1px 0 rgba(255, 255, 255, 1);--elev-1: 0 1px 1px rgba(16, 24, 40, .05);--elev-2: 0 1px 2px rgba(16, 24, 40, .06), 0 4px 12px -2px rgba(16, 24, 40, .07);--elev-3: 0 1px 2px rgba(16, 24, 40, .07), 0 10px 28px -6px rgba(16, 24, 40, .1);--elev-4: 0 2px 4px rgba(16, 24, 40, .07), 0 22px 56px -10px rgba(16, 24, 40, .14);--shadow: var(--elev-2);--hover: rgba(16, 24, 40, .035);--hover-strong: rgba(16, 24, 40, .06);--press: rgba(16, 24, 40, .07);--skel: linear-gradient(90deg, #e9edf2 0%, #f6f8fa 50%, #e9edf2 100%)}}:root[data-theme=light]{color-scheme:light;--bg: #f5f6f8;--bg-grad: radial-gradient(1100px 620px at 12% -12%, rgba(31, 111, 235, .07) 0%, transparent 70%), radial-gradient(900px 520px at 108% 8%, rgba(120, 80, 220, .045) 0%, transparent 68%);--panel: #ffffff;--panel-2: #f4f6f9;--sunk: #eef1f5;--line: #dfe3e9;--line-soft: #eaedf1;--fg: #14181e;--fg-dim: #57616f;--fg-mute: #7d8794;--accent: #1f6feb;--accent-soft: rgba(31, 111, 235, .1);--ok: #1a7f37;--ok-soft: rgba(26, 127, 55, .1);--fail: #cf222e;--fail-soft: rgba(207, 34, 46, .1);--leak: #9a6700;--leak-soft: rgba(154, 103, 0, .12);--neutral: #656d76;--neutral-soft: rgba(101, 109, 118, .1);--hairline: inset 0 1px 0 rgba(255, 255, 255, .9);--hairline-strong: inset 0 1px 0 rgba(255, 255, 255, 1);--elev-1: 0 1px 1px rgba(16, 24, 40, .05);--elev-2: 0 1px 2px rgba(16, 24, 40, .06), 0 4px 12px -2px rgba(16, 24, 40, .07);--elev-3: 0 1px 2px rgba(16, 24, 40, .07), 0 10px 28px -6px rgba(16, 24, 40, .1);--elev-4: 0 2px 4px rgba(16, 24, 40, .07), 0 22px 56px -10px rgba(16, 24, 40, .14);--shadow: var(--elev-2);--hover: rgba(16, 24, 40, .035);--hover-strong: rgba(16, 24, 40, .06);--press: rgba(16, 24, 40, .07);--skel: linear-gradient(90deg, #e9edf2 0%, #f6f8fa 50%, #e9edf2 100%)}:root{--t-xs: 12px;--t-sm: 13.5px;--t-md: 15px;--t-lg: 17px;--t-xl: 22px;--t-2xl: 28px;--t-3xl: 36px;--track-display: -.022em;--track-title: -.014em;--track-body: -.003em;--track-caps: .075em;--lh-tight: 1.15;--lh-body: 1.55;--sans: -apple-system, BlinkMacSystemFont, "Inter var", Inter, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, "Liberation Mono", monospace;--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 24px;--s6: 32px;--s7: 48px;--r0: 6px;--r1: 9px;--r2: 13px;--r3: 16px;--r4: 20px;--r-full: 999px;--control-h: 34px;--control-h-sm: 28px;--rail: 216px;--gap-shell: 12px;--measure: 1240px;--ring: 0 0 0 2px var(--bg), 0 0 0 4px color-mix(in srgb, var(--accent) 62%, transparent);--dur-fast: .11s;--dur: .17s;--dur-slow: .28s;--ease: cubic-bezier(.2, .7, .3, 1);--ease-spring: cubic-bezier(.22, 1.4, .36, 1);--stagger-step: 26ms}@media(prefers-reduced-motion:reduce){:root:not([data-motion=full]){--dur-fast: 0ms;--dur: 0ms;--dur-slow: 0ms;--stagger-step: 0ms}:root:not([data-motion=full]) *,:root:not([data-motion=full]) *:before,:root:not([data-motion=full]) *:after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}:root:not([data-motion=full])::view-transition-old(root),:root:not([data-motion=full])::view-transition-new(root){animation:none!important}}:root[data-motion=none]{--dur-fast: 0ms;--dur: 0ms;--dur-slow: 0ms;--stagger-step: 0ms}:root[data-motion=none] *,:root[data-motion=none] *:before,:root[data-motion=none] *:after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}:root[data-motion=none]::view-transition-old(root),:root[data-motion=none]::view-transition-new(root){animation:none!important}*,*:before,*:after{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:var(--bg);background-image:var(--bg-grad);background-attachment:fixed;color:var(--fg);font:var(--t-md) / var(--lh-body) var(--sans);letter-spacing:var(--track-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-variant-numeric:tabular-nums;font-feature-settings:"cv05" 1;overflow-x:hidden}h1,h2,h3,p,ul,figure{margin:0}ul{padding:0;list-style:none}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code,.mono{font-family:var(--mono);font-size:.92em}:focus-visible{outline:none;box-shadow:var(--ring);border-radius:var(--r1)}a:focus-visible{border-radius:var(--r0)}.skip{position:absolute;left:-9999px;top:0;z-index:100;padding:var(--s2) var(--s3);background:var(--panel);border:1px solid var(--line);border-radius:var(--r1)}.skip:focus{left:var(--s3);top:var(--s3)}.shell{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);min-height:100%;padding:var(--gap-shell);gap:var(--gap-shell)}.shell.no-rail{grid-template-columns:minmax(0,1fr)}.shell.no-rail .view{max-width:none;min-height:100dvh;display:grid;place-items:center;padding:var(--s5)}.rail{border:1px solid var(--line);border-radius:var(--r4);background:color-mix(in srgb,var(--panel) 82%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:var(--s4) var(--s3);position:sticky;top:var(--gap-shell);height:calc(100vh - var(--gap-shell) * 2);display:flex;flex-direction:column;gap:var(--s4);box-shadow:var(--shadow)}.brand{display:flex;align-items:center;gap:var(--s2);font-size:var(--t-lg);font-weight:650;letter-spacing:-.01em;color:var(--fg)}.brand:hover{text-decoration:none}.brand svg{color:var(--accent)}.rail nav{display:flex;flex-direction:column;gap:2px}.navlink{display:flex;align-items:center;gap:var(--s3);padding:var(--s2) var(--s3);border-radius:var(--r1);color:var(--fg-dim);font-weight:500;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.navlink:hover{background:var(--panel-2);color:var(--fg);text-decoration:none}.navlink.router-link-active{background:var(--accent-soft);color:var(--accent)}.navlink svg{flex:none}.navlink .count{margin-left:auto;font:600 var(--t-xs) / 1 var(--sans);font-variant-numeric:tabular-nums;color:var(--fg-mute);background:var(--panel-2);padding:3px 6px;border-radius:var(--r-full)}.rail .foot{margin-top:auto;font-size:var(--t-xs);color:var(--fg-mute);display:grid;gap:var(--s1);word-break:break-all}.rail .foot .foot-who{color:var(--fg-dim);font-weight:550;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view{min-width:0;padding:var(--s3) var(--s4) var(--s7);max-width:none}@media(max-width:800px){.shell{grid-template-columns:minmax(0,1fr);padding:var(--gap-shell) var(--s2) 0}.rail{position:fixed;inset:auto var(--s2) calc(var(--s2) + env(safe-area-inset-bottom)) var(--s2);height:auto;flex-direction:row;align-items:center;gap:var(--s1);padding:var(--s2);background:color-mix(in srgb,var(--panel) 94%,transparent);z-index:20}.rail .brand,.rail .foot{display:none}.rail nav{flex-direction:row;flex:1;justify-content:space-around}.navlink{flex-direction:column;gap:2px;font-size:var(--t-xs);padding:var(--s1) var(--s2);min-width:56px;align-items:center}.navlink .count{display:none}.view{padding:var(--s4) var(--s4) calc(84px + env(safe-area-inset-bottom))}}.page-head{display:flex;align-items:center;gap:var(--s3);flex-wrap:wrap;margin-bottom:var(--s5)}.page-head h1{font-size:var(--t-2xl);font-weight:640;letter-spacing:var(--track-display);line-height:var(--lh-tight)}.page-head .sub{color:var(--fg-dim);font-size:var(--t-sm);margin-top:2px}.grow{flex:1}h2.section{font-size:var(--t-xs);text-transform:uppercase;letter-spacing:var(--track-caps);color:var(--fg-dim);font-weight:620}h3{font-size:var(--t-md);font-weight:600}.dim{color:var(--fg-dim)}.mute{color:var(--fg-mute)}.nowrap{white-space:nowrap}.break{word-break:break-all}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r3);padding:var(--s4) var(--s4) var(--s5);margin-bottom:var(--s4);min-width:0;container-type:inline-size;box-shadow:var(--hairline),var(--elev-2)}.panel.flush{padding:0;overflow:hidden}.panel>.phead{display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap;margin-bottom:var(--s3)}.panel.flush>.phead{padding:var(--s4) var(--s4) 0}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--s4);align-items:start}.row{display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap}button,.btn{font:530 var(--t-sm) / 1 var(--sans);letter-spacing:var(--track-body);color:var(--fg);background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r1);padding:var(--s2) var(--s3);min-height:var(--control-h);cursor:pointer;display:inline-flex;align-items:center;gap:var(--s2);position:relative;overflow:hidden;box-shadow:var(--hairline),var(--elev-1);transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}button:hover:not(:disabled),.btn:hover:not(:disabled){border-color:color-mix(in srgb,var(--fg-mute) 60%,var(--line));background:color-mix(in srgb,var(--hover) 100%,var(--panel-2));text-decoration:none}button:active:not(:disabled){transform:translateY(1px);box-shadow:inset 0 2px 4px var(--press)}button:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}button.primary{background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 88%,#fff) 0%,var(--accent) 100%);border-color:color-mix(in srgb,var(--accent) 75%,#000);color:#fff;box-shadow:var(--hairline-strong),var(--elev-2),0 0 color-mix(in srgb,var(--accent) 40%,transparent)}button.primary:hover:not(:disabled){background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 78%,#fff),color-mix(in srgb,var(--accent) 94%,#fff));border-color:color-mix(in srgb,var(--accent) 75%,#000);box-shadow:var(--hairline-strong),var(--elev-2),0 0 18px -2px color-mix(in srgb,var(--accent) 45%,transparent)}button.danger{background:var(--fail-soft);border-color:color-mix(in srgb,var(--fail) 45%,transparent);color:var(--fail)}button.danger:hover:not(:disabled){background:color-mix(in srgb,var(--fail) 26%,transparent);border-color:color-mix(in srgb,var(--fail) 62%,transparent)}button.ghost{background:transparent;box-shadow:none}button.ghost:hover:not(:disabled){background:var(--hover)}button.sm,.btn.sm{min-height:var(--control-h-sm);padding:var(--s1) var(--s2);font-size:var(--t-xs)}button.armed{background:var(--fail-soft);border-color:color-mix(in srgb,var(--fail) 70%,transparent);color:var(--fail);font-weight:600}button .progress{position:absolute;inset:auto 0 0 0;height:2px;background:currentColor;opacity:.65;animation:indeterminate 1.1s var(--ease) infinite;transform-origin:left}input[type=text],input[type=password],input[type=search],input[type=url],input[type=email],input[type=number],textarea,select{font:var(--t-sm) / 1.5 var(--sans);letter-spacing:var(--track-body);color:var(--fg);background:var(--sunk);border:1px solid var(--line);border-radius:var(--r1);padding:var(--s2) var(--s3);min-height:32px;width:100%;min-width:0;box-shadow:inset 0 1px 2px var(--press);transition:border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}input[type=text]:hover,input[type=password]:hover,input[type=search]:hover,input[type=url]:hover,input[type=email]:hover,input[type=number]:hover,textarea:hover,select:hover{border-color:color-mix(in srgb,var(--fg-mute) 55%,var(--line))}input[type=text]:focus,input[type=password]:focus,input[type=search]:focus,input[type=url]:focus,input[type=email]:focus,input[type=number]:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:inset 0 1px 2px var(--press),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}textarea{font-family:var(--mono);font-size:var(--t-sm);line-height:1.55;resize:vertical;white-space:pre;overflow-wrap:normal;overflow-x:auto}input::placeholder,textarea::placeholder{color:var(--fg-mute)}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px var(--sunk) inset;-webkit-text-fill-color:var(--fg);caret-color:var(--fg);transition:background-color 9999s ease-out}label{font-size:var(--t-sm);color:var(--fg-dim)}.field{display:grid;gap:var(--s2);min-width:0}.field+.field,.field+.hint,.hint+.field{margin-top:var(--s4)}.row>.field+.field,.row>.field+.hint,.row>.hint+.field,.phead>.field+.field,.phead>.field+.hint,.phead>.hint+.field{margin-top:0}.field.inline{display:flex;align-items:center;gap:var(--s2);margin-top:0}.field.inline>label{color:var(--fg-mute);font-size:var(--t-xs);white-space:nowrap}.phead>button,.phead>.btn,.phead>input,.phead>select,.phead>.check,.phead>.field>input,.phead>.field>select{min-height:var(--control-h)}.row.wrap>.field,.row>.field{align-self:stretch}.check{display:inline-flex;align-items:center;gap:var(--s2);cursor:pointer;color:var(--fg)}.check input{width:auto;min-height:0;accent-color:var(--accent)}.kv{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;gap:var(--s2);margin-bottom:var(--s2);align-items:center;max-width:640px}.kv.head{font-size:var(--t-xs);color:var(--fg-mute);text-transform:uppercase;letter-spacing:.06em}@media(max-width:560px){.kv{grid-template-columns:minmax(0,1fr) auto}.kv.head{display:none}}.badge{display:inline-flex;align-items:center;gap:5px;font:500 var(--t-xs) / 1 var(--sans);padding:4px 8px;border-radius:var(--r-full);background:var(--neutral-soft);color:var(--fg-dim);border:1px solid transparent;white-space:nowrap}.badge.ok{background:var(--ok-soft);color:var(--ok)}.badge.failed,.badge.fail{background:var(--fail-soft);color:var(--fail)}.badge.leaked,.badge.warn{background:var(--leak-soft);color:var(--leak)}.badge.running,.badge.busy,.badge.info{background:var(--accent-soft);color:var(--accent)}.badge.unknown{background:var(--neutral-soft);color:var(--neutral)}.badge.shared{background:var(--leak-soft);color:var(--leak)}.badge.isolated{background:var(--accent-soft);color:var(--accent)}.badge.off{opacity:.38}.badge .dot{width:6px;height:6px;border-radius:var(--r-full);background:currentColor}.badge.running .dot,.dot.pulse{animation:pulse 1.6s var(--ease) infinite}.banner{border:1px solid var(--line);border-left-width:3px;border-radius:var(--r2);padding:var(--s3) var(--s4);margin:var(--s3) 0;background:var(--panel-2);font-size:var(--t-sm)}.banner b{color:var(--fg)}.banner p{margin-top:var(--s2);color:var(--fg-dim)}.banner.ok{border-left-color:var(--ok);background:var(--ok-soft)}.banner.failed{border-left-color:var(--fail);background:var(--fail-soft)}.banner.leaked,.banner.warn{border-left-color:var(--leak);background:var(--leak-soft)}.banner.info{border-left-color:var(--accent);background:var(--accent-soft)}.banner.plain{border-left-color:var(--fg-mute)}.hint{font-size:var(--t-sm);color:var(--fg-mute);margin-top:var(--s3)}.hint code,.banner code{background:var(--sunk);padding:1px 5px;border-radius:var(--r0)}table{width:100%;border-collapse:collapse;font-size:var(--t-sm)}th{text-align:left;font:620 var(--t-xs) / 1 var(--sans);text-transform:uppercase;letter-spacing:var(--track-caps);color:var(--fg-mute);padding:var(--s2) var(--s3);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1;background:var(--panel);white-space:nowrap}td{padding:var(--s2) var(--s3);border-bottom:1px solid var(--line-soft);vertical-align:middle}tbody tr{transition:background var(--dur-fast) var(--ease)}tbody tr:hover{background:var(--hover)}tbody tr:last-child td{border-bottom:none}td.name{font-weight:600;word-break:break-all}@container (max-width: 460px){table.cards,table.cards tbody,table.cards tr,table.cards td{display:block;width:100%}table.cards thead{display:none}table.cards tr{border:1px solid var(--line);border-radius:var(--r2);padding:var(--s2) var(--s3);margin-bottom:var(--s2);background:var(--panel-2)}table.cards td{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s3);border:0;padding:var(--s1) 0;text-align:right}table.cards td:before{content:attr(data-label);font:600 var(--t-xs) / 1.6 var(--sans);text-transform:uppercase;letter-spacing:.06em;color:var(--fg-mute);text-align:left;flex:none}table.cards td[colspan]{text-align:left}table.cards td[colspan]:before,table.cards td[data-label=""]:before{content:""}table.cards td[data-label=""]{justify-content:flex-end}}@container (min-width: 461px){.panel>table,.table-scroll{display:block;max-width:100%;overflow-x:auto}.panel>table>thead,.panel>table>tbody{display:table;width:100%;table-layout:auto}}.row-actions{text-align:end;white-space:nowrap}.row-actions>*+*{margin-inline-start:var(--s1)}.logs-split{display:grid;grid-template-columns:232px minmax(0,1fr);gap:var(--s4);align-items:start}@container (max-width: 720px){.logs-split{grid-template-columns:minmax(0,1fr)}.clist{max-height:220px}}.clist{display:flex;flex-direction:column;gap:2px;max-height:60vh;overflow-y:auto;padding-inline-end:var(--s1)}.clist-item{display:grid;gap:2px;text-align:start;justify-items:start;padding:var(--s2) var(--s3);min-height:0;background:transparent;border:1px solid transparent;box-shadow:none;width:100%}.clist-item:hover:not(:disabled){background:var(--hover);border-color:var(--line-soft)}.clist-item.on{background:var(--panel-2);border-color:var(--line);box-shadow:var(--hairline)}.clist-name{display:inline-flex;align-items:center;gap:var(--s2);font-weight:560}.clist-sub{font-size:var(--t-xs);color:var(--fg-mute);max-width:100%;overflow:hidden;text-overflow:ellipsis}.clist-state{font-size:var(--t-xs)}.logs-main{min-width:0}.lv-time{flex:none;color:var(--fg-mute);font-variant-numeric:tabular-nums;white-space:nowrap}.panel.banner-panel{border-color:color-mix(in srgb,var(--warn) 40%,var(--line));background:color-mix(in srgb,var(--warn) 8%,var(--panel))}.kvlist{display:grid;gap:1px;background:var(--line-soft);border-radius:var(--r2);overflow:hidden}.kvlist>li{display:flex;gap:var(--s3);padding:var(--s3);background:var(--panel);align-items:baseline;flex-wrap:wrap}.kvlist>li>.k{flex:none;width:128px;color:var(--fg-dim);font-size:var(--t-sm)}.kvlist>li>.v{flex:1;min-width:0;word-break:break-word}@media(max-width:480px){.kvlist>li>.k{width:100%}}pre.raw,pre.log{font-family:var(--mono);font-size:var(--t-sm);line-height:1.6;background:var(--sunk);border:1px solid var(--line);border-radius:var(--r2);padding:var(--s3);margin:var(--s3) 0 0;overflow:auto;white-space:pre}pre.raw{color:var(--fail);max-height:420px}pre.code{font-family:var(--mono);font-size:var(--t-sm);line-height:1.6;background:var(--sunk);border:1px solid var(--line);border-radius:var(--r2);padding:var(--s3);margin:0;max-height:520px;overflow:auto;white-space:pre;color:var(--fg-dim)}pre.log{max-height:460px;color:var(--fg-dim)}pre.log .t{color:var(--fg-mute)}pre.log .lv-error{color:var(--fail)}pre.log .lv-warn{color:var(--leak)}pre.log .lv-info{color:var(--fg)}pre.log mark{background:var(--leak-soft);color:var(--leak)}.masked{color:var(--fg-mute);letter-spacing:.12em}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s2)}@container (min-width: 680px){.stats{grid-template-columns:repeat(6,1fr)}}.stat{background:var(--panel-2);border:1px solid var(--line-soft);border-radius:var(--r2);padding:var(--s3);box-shadow:var(--hairline);min-width:0}.stat .v{font:600 var(--t-2xl) / 1.1 var(--sans);letter-spacing:var(--track-display);font-variant-numeric:tabular-nums}.stat[data-zero=true] .v{color:var(--fg-mute);font-weight:500}.stat .k{font-size:var(--t-xs);color:var(--fg-mute);text-transform:uppercase;letter-spacing:.04em;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat.unknown .v{color:var(--neutral)}.stat.busy .v{color:var(--accent)}.stat.leak .v{color:var(--leak)}.tabs{display:flex;gap:var(--s1);border-bottom:1px solid var(--line);margin-bottom:var(--s4);overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs a{padding:var(--s2) var(--s3);color:var(--fg-dim);font-size:var(--t-sm);font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;transition:color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.tabs a:hover{color:var(--fg);text-decoration:none}.tabs a.router-link-active{color:var(--fg);border-bottom-color:var(--accent)}.steps{display:grid;gap:1px;background:var(--line-soft);border-radius:var(--r2);overflow:hidden}.step{display:grid;grid-template-columns:24px minmax(0,1fr);gap:var(--s3);padding:var(--s3);background:var(--panel);align-items:start}.step .mark{font:600 var(--t-lg) / 1.2 var(--sans);text-align:center}.step .who{font-weight:550;word-break:break-all}.step .msg{font-size:var(--t-sm);color:var(--fg-dim);word-break:break-word}.s-ok{color:var(--ok)}.s-failed{color:var(--fail)}.s-leaked{color:var(--leak)}.s-unverifiable{color:var(--neutral)}.skel{background:var(--skel);background-size:200% 100%;border-radius:var(--r1);height:14px;animation:shimmer 1.3s linear infinite}.skel+.skel{margin-top:var(--s2)}.skel.tall{height:44px}.skel.w60{width:60%}.skel.w40{width:40%}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}@keyframes indeterminate{0%{transform:scaleX(0)}50%{transform:scaleX(.7)}to{transform:scaleX(0);transform-origin:right}}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes land{0%{transform:scale(.985);opacity:.4}60%{transform:scale(1.004)}to{transform:none;opacity:1}}.stagger>*{animation:rise var(--dur) var(--ease) backwards;animation-delay:calc(var(--i, 0) * var(--stagger-step))}.land{animation:land var(--dur-slow) var(--ease)}.view-enter-active,.view-leave-active{transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease)}.view-enter-from{opacity:0;transform:translateY(6px)}.view-leave-to{opacity:0;transform:translateY(-4px)}.toasts{position:fixed;right:var(--s4);bottom:var(--s4);z-index:50;display:grid;gap:var(--s2);width:min(360px,calc(100vw - var(--s5)))}@media(max-width:800px){.toasts{bottom:calc(84px + env(safe-area-inset-bottom))}}.toast{display:flex;gap:var(--s3);align-items:flex-start;background:var(--panel);border:1px solid var(--line);border-radius:var(--r2);padding:var(--s3) var(--s3) var(--s3) var(--s2);box-shadow:var(--hairline),var(--elev-4);font-size:var(--t-sm);position:relative}.toast:before{content:"";flex:none;width:8px;height:8px;margin:6px 0 0 var(--s2);border-radius:var(--r-full);background:var(--neutral);box-shadow:0 0 0 3px var(--neutral-soft)}.toast.ok:before{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}.toast.error:before{background:var(--fail);box-shadow:0 0 0 3px var(--fail-soft)}.toast.warn:before{background:var(--leak);box-shadow:0 0 0 3px var(--leak-soft)}.toast.info:before{background:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.toast .x{margin-left:auto;background:none;border:0;min-height:0;padding:2px 6px;color:var(--fg-mute)}.toast-enter-active,.toast-leave-active{transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease)}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(12px)}.toast-move{transition:transform var(--dur) var(--ease)}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:60;display:grid;place-items:center;padding:var(--s4)}.sheet{background:var(--panel);border:1px solid var(--line);border-radius:var(--r3);box-shadow:var(--shadow);padding:var(--s5);width:min(460px,100%);max-height:80vh;overflow:auto}.sheet dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--s2) var(--s4);margin:var(--s4) 0 0;align-items:baseline}.sheet dt{text-align:right}.sheet dd{margin:0;color:var(--fg-dim);font-size:var(--t-sm)}kbd{font:500 var(--t-xs) / 1 var(--mono);background:var(--sunk);border:1px solid var(--line);border-bottom-width:2px;border-radius:var(--r0);padding:4px 6px;color:var(--fg)}.fade-enter-active,.fade-leave-active{transition:opacity var(--dur) var(--ease)}.fade-enter-from,.fade-leave-to{opacity:0}.hint-wrap{position:relative;display:inline-flex;vertical-align:middle;margin-inline-start:var(--s1)}.hint-btn{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;min-height:0;padding:0;border:0;border-radius:var(--r-full);background:none;color:var(--fg-mute);cursor:pointer;transition:color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}.hint-btn:hover,.hint-btn.on{color:var(--accent);background:var(--accent-soft)}.hint-bub{position:absolute;z-index:40;width:max-content;max-width:min(300px,74vw);padding:var(--s2) var(--s3);background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r2);box-shadow:var(--shadow);color:var(--fg-dim);font:400 var(--t-sm) / 1.5 var(--sans);text-transform:none;letter-spacing:normal;white-space:normal;text-align:start;pointer-events:none}.hint-bub.below{top:calc(100% + 6px)}.hint-bub.above{bottom:calc(100% + 6px)}.hint-bub.to-start{inset-inline-start:-2px}.hint-bub.to-end{inset-inline-end:-2px}.hint-bub code{color:var(--fg)}.hint-enter-active,.hint-leave-active{transition:opacity var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.hint-enter-from,.hint-leave-to{opacity:0}.hint-bub.below.hint-enter-from,.hint-bub.below.hint-leave-to{transform:translateY(-3px)}.hint-bub.above.hint-enter-from,.hint-bub.above.hint-leave-to{transform:translateY(3px)}.palette-scrim{align-items:flex-start;padding-top:12vh}.palette{width:min(620px,calc(100vw - var(--s5)));background:var(--panel);border:1px solid var(--line);border-radius:var(--r3);box-shadow:var(--hairline-strong),var(--elev-4);overflow:hidden;display:flex;flex-direction:column;max-height:min(60vh,560px)}.palette-q{display:flex;align-items:center;gap:var(--s3);padding:var(--s3) var(--s4);border-bottom:1px solid var(--line-soft);color:var(--fg-mute)}.palette-q input{flex:1;background:none;border:none;box-shadow:none;padding:0;min-height:26px;font-size:var(--t-lg);letter-spacing:var(--track-title);color:var(--fg)}.palette-q input:focus{outline:none;border:none;box-shadow:none}.palette-list{overflow-y:auto;padding:var(--s2);min-height:0}.palette-group{font-size:var(--t-xs);text-transform:uppercase;letter-spacing:var(--track-caps);color:var(--fg-mute);padding:var(--s3) var(--s2) var(--s1)}.palette-row{display:flex;align-items:center;gap:var(--s3);width:100%;text-align:left;background:none;border:none;box-shadow:none;border-radius:var(--r1);padding:var(--s2) var(--s3);min-height:34px;color:var(--fg)}.palette-row[data-on=true]{background:var(--accent-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 32%,transparent)}.palette-label{font-weight:520}.palette-hint{margin-left:auto;color:var(--fg-mute);font-size:var(--t-xs);font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:45%}.palette-empty{color:var(--fg-mute);padding:var(--s5) var(--s3);text-align:center;font-size:var(--t-sm)}.palette-foot{display:flex;gap:var(--s4);align-items:center;padding:var(--s2) var(--s4);border-top:1px solid var(--line-soft);background:var(--panel-2);color:var(--fg-mute);font-size:var(--t-xs)}kbd{font:500 11px / 1 var(--mono);color:var(--fg-dim);background:var(--sunk);border:1px solid var(--line);border-radius:var(--r0);padding:3px 5px;margin-right:3px}.fade-enter-active .palette{animation:palette-in var(--dur-slow) var(--ease-spring)}@keyframes palette-in{0%{opacity:0;transform:translateY(-10px) scale(.98)}to{opacity:1;transform:none}}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--dur);animation-timing-function:var(--ease)}::view-transition-old(root){animation-name:vt-out}::view-transition-new(root){animation-name:vt-in}@keyframes vt-out{to{opacity:0}}@keyframes vt-in{0%{opacity:0;transform:translateY(4px)}}.searchbox{display:flex;align-items:center;gap:var(--s2);flex:1;min-width:180px;padding-inline:var(--s3);background:var(--sunk);border:1px solid var(--line);border-radius:var(--r1);box-shadow:inset 0 1px 2px var(--press);color:var(--fg-mute);min-height:34px;transition:border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}.searchbox:focus-within{border-color:var(--accent);box-shadow:inset 0 1px 2px var(--press),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}.searchbox input{border:none;background:none;box-shadow:none;padding:0;min-height:0}.searchbox input:focus{outline:none;border:none;box-shadow:none}.searchbox input::-webkit-search-cancel-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.compact{width:auto;min-height:34px;padding-inline-end:var(--s5)}.phead>.check{min-height:34px}.field>.selm-trigger,.selm-trigger{max-width:340px;width:100%}.selm-trigger{display:inline-flex;align-items:center;gap:var(--s2);justify-content:space-between;min-height:34px;padding:0 var(--s2) 0 var(--s3);background:var(--sunk);border:1px solid var(--line);border-radius:var(--r1);box-shadow:inset 0 1px 2px var(--press);font:var(--t-sm) / 1 var(--sans);color:var(--fg);cursor:pointer}.selm-trigger:hover:not(:disabled){border-color:color-mix(in srgb,var(--fg-mute) 55%,var(--line))}.selm-trigger[data-state=open]{border-color:var(--accent);box-shadow:inset 0 1px 2px var(--press),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}.selm-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selm-caret{flex:none;color:var(--fg-mute);transition:transform var(--dur-fast) var(--ease)}.selm-trigger[data-state=open] .selm-caret{transform:rotate(180deg)}.selm-list{z-index:61;padding:var(--s1);max-height:280px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:var(--r2);box-shadow:var(--hairline-strong),var(--elev-4);min-width:var(--reka-select-trigger-width);animation:palette-in var(--dur) var(--ease-spring)}.selm-opt{display:flex;align-items:center;gap:var(--s2);padding:var(--s2);min-height:30px;border-radius:calc(var(--r1) - 2px);font-size:var(--t-sm);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none}.selm-opt[data-highlighted]{background:var(--accent-soft);outline:none}.selm-opt[data-disabled]{opacity:.45;cursor:not-allowed}.selm-hint{color:var(--fg-mute);font-size:var(--t-xs);margin-inline-start:auto}.selm-tick{margin-inline-start:auto;color:var(--accent);display:inline-flex}.selm-hint+.selm-tick{margin-inline-start:var(--s2)}input[type=checkbox],input[type=radio]{-moz-appearance:none;appearance:none;-webkit-appearance:none;flex:none;width:17px;height:17px;margin:0;border:1px solid color-mix(in srgb,var(--fg-mute) 60%,var(--line));background:var(--sunk);box-shadow:inset 0 1px 2px var(--press);cursor:pointer;display:grid;place-content:center;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}input[type=checkbox]{border-radius:var(--r0)}input[type=radio]{border-radius:var(--r-full)}input[type=checkbox]:hover:not(:disabled),input[type=radio]:hover:not(:disabled){border-color:var(--accent)}input[type=checkbox]:before,input[type=radio]:before{content:"";transform:scale(0);transition:transform var(--dur-fast) var(--ease-spring)}input[type=checkbox]:before{width:11px;height:11px;background:#fff;clip-path:polygon(14% 47%,0 61%,40% 100%,100% 22%,85% 9%,39% 71%)}input[type=radio]:before{width:7px;height:7px;border-radius:var(--r-full);background:#fff}input[type=checkbox]:checked,input[type=radio]:checked{background:var(--accent);border-color:var(--accent)}input[type=checkbox]:checked:before,input[type=radio]:checked:before{transform:scale(1)}input[type=checkbox]:disabled,input[type=radio]:disabled{opacity:.45;cursor:not-allowed}.helpq{display:inline-grid;place-items:center;width:18px;height:18px;padding:0;min-height:0;border-radius:var(--r-full);border:1px solid var(--line);background:var(--panel-2);box-shadow:none;color:var(--fg-mute);cursor:pointer;vertical-align:middle}.helpq:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.help-scrim{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:70}.help-modal{position:fixed;z-index:71;top:50%;left:50%;transform:translate(-50%,-50%);width:min(620px,calc(100vw - var(--s5)));max-height:min(80vh,720px);display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:var(--r3);box-shadow:var(--hairline-strong),var(--elev-4);animation:help-in var(--dur-slow) var(--ease-spring)}@keyframes help-in{0%{opacity:0;transform:translate(-50%,-46%) scale(.97)}}.help-head{display:flex;align-items:center;gap:var(--s3);padding:var(--s4) var(--s4) var(--s3);border-bottom:1px solid var(--line-soft)}.help-title{font-size:var(--t-lg);font-weight:620;letter-spacing:var(--track-title);margin:0;flex:1}.help-body{padding:var(--s4);overflow-y:auto;color:var(--fg-dim);font-size:var(--t-sm);line-height:var(--lh-body)}.help-body>*+*{margin-top:var(--s3)}.help-body b,.help-body strong{color:var(--fg)}.check-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:var(--s2) var(--s4);margin-top:var(--s2)}.check-grid .check{min-height:26px}.settings-form .field input,.settings-form input[type=url],.settings-form input[type=password],.settings-form input[type=text]{max-width:560px}.settings-form .hint,.settings-form .mute.hint{max-width:640px}.lv{border:1px solid var(--line);border-radius:var(--r2);background:var(--sunk);overflow:hidden}.lv-bar{display:flex;align-items:center;gap:var(--s2);padding:var(--s2) var(--s3);border-bottom:1px solid var(--line-soft);font-size:var(--t-xs);color:var(--fg-mute)}.lv-box{max-height:520px;overflow-y:auto;padding:var(--s2) 0 var(--s3);font:var(--t-sm) / 1.6 var(--mono);overscroll-behavior:contain}.lv-empty{color:var(--fg-mute);padding:var(--s4) var(--s3);font-family:var(--sans)}.lv-row{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 var(--s3);padding:1px var(--s3);content-visibility:auto;contain-intrinsic-block-size:auto 22px}.lv-row:hover{background:var(--hover)}.lv-gutter{white-space:nowrap;color:var(--fg-mute);-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums}.lv-msg{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--fg-dim)}.lv-row.error .lv-msg{color:var(--fail)}.lv-row.warn .lv-msg{color:var(--leak)}.lv-row.ok .lv-msg{color:var(--ok)}.lv-row.svc-0 .lv-gutter{color:#7aa2f7}.lv-row.svc-1 .lv-gutter{color:#9ece6a}.lv-row.svc-2 .lv-gutter{color:#e0af68}.lv-row.svc-3 .lv-gutter{color:#bb9af7}.lv-row.svc-4 .lv-gutter{color:#7dcfff}.lv-row.svc-5 .lv-gutter{color:#f7768e}.lv-sep{display:flex;align-items:center;gap:var(--s3);padding:var(--s2) var(--s3);color:var(--fg-mute);font-family:var(--sans);font-size:var(--t-xs)}.lv-sep:before,.lv-sep:after{content:"";flex:1;border-top:1px solid var(--line-soft)}.refresh-icon{display:inline-block;line-height:1}.refresh-icon.spin{animation:refresh-spin .9s linear infinite}@keyframes refresh-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.refresh-icon.spin{animation:none}}:root[data-motion=none] .refresh-icon.spin{animation:none}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{U as n,C as i,A as d,B as l,N as p,V as c}from"./index-DVMQBHXF.js";import{w as u,r as y}from"./useVars-VN9gYdR6.js";const e=n({id:"",detail:null,error:"",loading:!1,vars:[]}),f=i(()=>p(e.vars)),k=i(()=>c(e.id)),b=i(()=>{var a;return((a=e.detail)==null?void 0:a.kind)==="shared"}),h=i(()=>{var a;return(((a=e.detail)==null?void 0:a.axes)??[]).filter(s=>!s.verifiable).map(s=>s.name)});async function t(){const a=e.id;e.loading=!0;const s=await d.get(`/api/deployments/${encodeURIComponent(a)}${f.value}`);if(e.id!==a)return;if(e.loading=!1,!s.ok){e.detail=null,e.error=l(s,`GET /api/deployments/${a}`);return}e.error="";const r=s.body;e.detail={id:r.id??a,kind:r.kind==="shared"?"shared":"isolated",createdAt:r.createdAt,updatedAt:r.updatedAt,stack:typeof r.stack=="string"?r.stack:"",busy:r.busy??null,compose:r.compose?{file:r.compose.file??"?",profiles:r.compose.profiles??[],overlays:r.compose.overlays??[]}:null,requires:Array.isArray(r.requires)?r.requires:[],axes:(Array.isArray(r.axes)?r.axes:[]).map(o=>({name:o.name,hooks:Array.isArray(o.hooks)?o.hooks:[],verifiable:o.verifiable??(Array.isArray(o.hooks)&&o.hooks.includes("assert_gone"))})),env:Array.isArray(r.env)?r.env:[]}}function g(a){e.id===a&&(e.detail||e.error)||(e.id=a,e.detail=null,e.error="",e.vars=y(a),t())}function m(){u(e.id,e.vars)}function x(){m(),t()}export{x as a,e as d,b as i,t as l,g as o,m as p,k as r,h as u,f as v};
|
|
2
|
-
//# sourceMappingURL=useDeployment-DGzBsXE-.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDeployment-DGzBsXE-.js","sources":["../../src/composables/useDeployment.ts"],"sourcesContent":["/**\n * The deployment currently open in the detail view.\n *\n * A module singleton rather than provide/inject, because the six tabs are CHILD ROUTES: they are\n * siblings of each other and are mounted and unmounted independently, so passing the loaded\n * deployment down as a prop would mean re-fetching it on every tab change. Switching tabs must not\n * re-fetch or blank the panel — only opening a DIFFERENT deployment does.\n *\n * `vars` here are REQUEST-TIME variables, sent as `?query` on every route that resolves this\n * deployment. See `useVars.ts` for why they matter and what they can get wrong.\n */\n\nimport { computed, reactive } from 'vue';\nimport { api, problem, query } from '../api/client';\nimport type { Deployment, VarPair } from '../api/types';\nimport { readVars, writeVars } from './useVars';\nimport { rowFor } from './useControlPlane';\n\nexport const dep = reactive({\n id: '',\n detail: null as Deployment | null,\n /** The resolve failure, verbatim. It is a 400 that NAMES the missing variable. */\n error: '',\n loading: false,\n vars: [] as VarPair[],\n});\n\nexport const varsQuery = computed(() => query(dep.vars));\n\n/** The list row, which is the only place the server exposes stored `vars` and `specName` today. */\nexport const row = computed(() => rowFor(dep.id));\n\nexport const isShared = computed(() => dep.detail?.kind === 'shared');\n\nexport const unverifiableAxes = computed(() =>\n (dep.detail?.axes ?? []).filter((a) => !a.verifiable).map((a) => a.name),\n);\n\nexport async function loadDetail(): Promise<void> {\n const id = dep.id;\n dep.loading = true;\n const r = await api.get<Deployment>(`/api/deployments/${encodeURIComponent(id)}${varsQuery.value}`);\n // Navigated to another deployment while this was in flight: drop the answer rather than render\n // one deployment's spec under another's id.\n if (dep.id !== id) return;\n dep.loading = false;\n\n if (!r.ok) {\n dep.detail = null;\n dep.error = problem(r, `GET /api/deployments/${id}`);\n return;\n }\n dep.error = '';\n const b = r.body;\n dep.detail = {\n id: b.id ?? id,\n kind: b.kind === 'shared' ? 'shared' : 'isolated',\n createdAt: b.createdAt,\n updatedAt: b.updatedAt,\n stack: typeof b.stack === 'string' ? b.stack : '',\n busy: b.busy ?? null,\n compose: b.compose\n ? {\n file: b.compose.file ?? '?',\n profiles: b.compose.profiles ?? [],\n overlays: b.compose.overlays ?? [],\n }\n : null,\n requires: Array.isArray(b.requires) ? b.requires : [],\n axes: (Array.isArray(b.axes) ? b.axes : []).map((a) => ({\n name: a.name,\n hooks: Array.isArray(a.hooks) ? a.hooks : [],\n // Derive it if an older build omits the field. Defaulting to `false` would claim an axis is\n // unverifiable when it may define a perfectly good `assert_gone`.\n verifiable: a.verifiable ?? (Array.isArray(a.hooks) && a.hooks.includes('assert_gone')),\n })),\n env: Array.isArray(b.env) ? b.env : [],\n };\n}\n\n/** Point the singleton at a deployment. Resets everything a stale id could leak into the new one. */\nexport function openDeployment(id: string): void {\n if (dep.id === id && (dep.detail || dep.error)) return; // a tab change, not a navigation\n dep.id = id;\n dep.detail = null;\n dep.error = '';\n dep.vars = readVars(id);\n void loadDetail();\n}\n\nexport function persistVars(): void {\n writeVars(dep.id, dep.vars);\n}\n\nexport function applyVars(): void {\n persistVars();\n void loadDetail();\n}\n"],"names":["dep","reactive","varsQuery","computed","query","row","rowFor","isShared","_a","unverifiableAxes","a","loadDetail","id","r","api","problem","b","openDeployment","readVars","persistVars","writeVars","applyVars"],"mappings":"4HAkBO,MAAMA,EAAMC,EAAS,CAC1B,GAAI,GACJ,OAAQ,KAER,MAAO,GACP,QAAS,GACT,KAAM,CAAA,CACR,CAAC,EAEYC,EAAYC,EAAS,IAAMC,EAAMJ,EAAI,IAAI,CAAC,EAG1CK,EAAMF,EAAS,IAAMG,EAAON,EAAI,EAAE,CAAC,EAEnCO,EAAWJ,EAAS,IAAA,OAAM,QAAAK,EAAAR,EAAI,SAAJ,YAAAQ,EAAY,QAAS,SAAQ,EAEvDC,EAAmBN,EAAS,IAAA,OACtC,SAAAK,EAAAR,EAAI,SAAJ,YAAAQ,EAAY,OAAQ,CAAA,GAAI,OAAQE,GAAM,CAACA,EAAE,UAAU,EAAE,IAAKA,GAAMA,EAAE,IAAI,EACzE,EAEA,eAAsBC,GAA4B,CAChD,MAAMC,EAAKZ,EAAI,GACfA,EAAI,QAAU,GACd,MAAMa,EAAI,MAAMC,EAAI,IAAgB,oBAAoB,mBAAmBF,CAAE,CAAC,GAAGV,EAAU,KAAK,EAAE,EAGlG,GAAIF,EAAI,KAAOY,EAAI,OAGnB,GAFAZ,EAAI,QAAU,GAEV,CAACa,EAAE,GAAI,CACTb,EAAI,OAAS,KACbA,EAAI,MAAQe,EAAQF,EAAG,wBAAwBD,CAAE,EAAE,EACnD,MACF,CACAZ,EAAI,MAAQ,GACZ,MAAMgB,EAAIH,EAAE,KACZb,EAAI,OAAS,CACX,GAAIgB,EAAE,IAAMJ,EACZ,KAAMI,EAAE,OAAS,SAAW,SAAW,WACvC,UAAWA,EAAE,UACb,UAAWA,EAAE,UACb,MAAO,OAAOA,EAAE,OAAU,SAAWA,EAAE,MAAQ,GAC/C,KAAMA,EAAE,MAAQ,KAChB,QAASA,EAAE,QACP,CACE,KAAMA,EAAE,QAAQ,MAAQ,IACxB,SAAUA,EAAE,QAAQ,UAAY,CAAA,EAChC,SAAUA,EAAE,QAAQ,UAAY,CAAA,CAAC,EAEnC,KACJ,SAAU,MAAM,QAAQA,EAAE,QAAQ,EAAIA,EAAE,SAAW,CAAA,EACnD,MAAO,MAAM,QAAQA,EAAE,IAAI,EAAIA,EAAE,KAAO,CAAA,GAAI,IAAKN,IAAO,CACtD,KAAMA,EAAE,KACR,MAAO,MAAM,QAAQA,EAAE,KAAK,EAAIA,EAAE,MAAQ,CAAA,EAG1C,WAAYA,EAAE,aAAe,MAAM,QAAQA,EAAE,KAAK,GAAKA,EAAE,MAAM,SAAS,aAAa,EAAA,EACrF,EACF,IAAK,MAAM,QAAQM,EAAE,GAAG,EAAIA,EAAE,IAAM,CAAA,CAAC,CAEzC,CAGO,SAASC,EAAeL,EAAkB,CAC3CZ,EAAI,KAAOY,IAAOZ,EAAI,QAAUA,EAAI,SACxCA,EAAI,GAAKY,EACTZ,EAAI,OAAS,KACbA,EAAI,MAAQ,GACZA,EAAI,KAAOkB,EAASN,CAAE,EACjBD,EAAA,EACP,CAEO,SAASQ,GAAoB,CAClCC,EAAUpB,EAAI,GAAIA,EAAI,IAAI,CAC5B,CAEO,SAASqB,GAAkB,CAChCF,EAAA,EACKR,EAAA,CACP"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function a(t){return t?new Date(t).toLocaleString("sv"):"—"}function u(t,n){if(!t)return"—";const r=Math.max(0,Math.round(((n??Date.now())-t)/1e3)),o=r<60?`${r}s`:`${Math.floor(r/60)}m${String(r%60).padStart(2,"0")}s`;return n?o:`${o}…`}function s(t){if(!t)return"—";const n=Math.max(0,Math.round((Date.now()-t)/1e3));if(n<45)return"just now";const r=Math.round(n/60);if(r<60)return`${r}m ago`;const o=Math.round(r/60);return o<24?`${o}h ago`:`${Math.round(o/24)}d ago`}const e={up:"Deploy",down:"Tear down",verify:"Verify"};function c(t){return t?e[t]??t:"—"}function i(t){if(!t)return"—";const n=t.replace(/[-_]+/g," ");return n.charAt(0).toUpperCase()+n.slice(1)}export{c as a,s as b,a as c,i as s,u as t};
|
|
2
|
-
//# sourceMappingURL=useFormat-DVXTfIS-.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFormat-DVXTfIS-.js","sources":["../../src/composables/useFormat.ts"],"sourcesContent":["/**\n * Formatting shared across views. All times are the VIEWER's local time, with no zone marker,\n * because everything on the page — log lines, job stamps, deployment timestamps — comes from the\n * same clock and mixing a rendered zone into one of them is how two timestamps stop comparing.\n */\n\n/** ISO 8601 shaped and sortable: `2026-07-28 05:17:00`. `sv` is the locale that renders it. */\nexport function stamp(ms: number | undefined): string {\n return ms ? new Date(ms).toLocaleString('sv') : '—';\n}\n\n/** Just the clock, for a log line where the date is the same for every row. */\nexport function hhmmss(ms: number | undefined): string {\n return ms ? new Date(ms).toTimeString().slice(0, 8) : '--:--:--';\n}\n\n/** `12s` / `3m07s`. A running job gets an ellipsis so a stale number cannot read as a final one. */\nexport function took(startedAt: number | undefined, endedAt?: number): string {\n if (!startedAt) return '—';\n const s = Math.max(0, Math.round(((endedAt ?? Date.now()) - startedAt) / 1000));\n const text = s < 60 ? `${s}s` : `${Math.floor(s / 60)}m${String(s % 60).padStart(2, '0')}s`;\n return endedAt ? text : `${text}…`;\n}\n\n/** `2 minutes ago`, for an activity feed where the exact second is noise. */\nexport function ago(ms: number | undefined): string {\n if (!ms) return '—';\n const s = Math.max(0, Math.round((Date.now() - ms) / 1000));\n if (s < 45) return 'just now';\n const m = Math.round(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.round(m / 60);\n if (h < 24) return `${h}h ago`;\n return `${Math.round(h / 24)}d ago`;\n}\n\n/**\n * The user-facing name of an action.\n *\n * The API's verbs (`up`, `down`, `verify`) are the CLI's and the spec's vocabulary, and they stay in\n * both. But a BUTTON should say what it does, so the same mapping is used everywhere a person reads\n * an action — buttons, the job list, a job's own heading — rather than only on the buttons, which\n * would leave someone clicking \"Tear down\" and then reading about a job called `down`.\n */\nconst ACTION_LABELS: Record<string, string> = {\n up: 'Deploy',\n down: 'Tear down',\n verify: 'Verify',\n};\n\nexport function actionLabel(action: string | undefined): string {\n if (!action) return '—';\n return ACTION_LABELS[action] ?? action;\n}\n\n/**\n * An API enum, rendered for a person: `isolated` → `Isolated`, `start-failed` → `Start failed`.\n *\n * ONE helper rather than capitalising at each render site, because the two halves have to stay\n * apart: the VALUE stays lowercase everywhere it is compared, stored, sent or put in a class name,\n * and only the rendered text changes. Capitalising in place — `state === 'Running'` — is how a badge\n * starts looking right and a comparison silently stops matching.\n *\n * Sentence case, not Title Case: `Start failed`, not `Start Failed`. Title Case on a status reads\n * like a proper noun, and these are descriptions.\n *\n * Identifiers are NOT sentences and must never come through here — a stack name, container name,\n * deployment id, file name, env var or hostname is a literal, and capitalising one produces a value\n * that does not exist.\n */\nexport function sentence(value: string | null | undefined): string {\n if (!value) return '—';\n const words = value.replace(/[-_]+/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n"],"names":["stamp","ms","took","startedAt","endedAt","s","text","ago","m","h","ACTION_LABELS","actionLabel","action","sentence","value","words"],"mappings":"AAOO,SAASA,EAAMC,EAAgC,CACpD,OAAOA,EAAK,IAAI,KAAKA,CAAE,EAAE,eAAe,IAAI,EAAI,GAClD,CAQO,SAASC,EAAKC,EAA+BC,EAA0B,CAC5E,GAAI,CAACD,EAAW,MAAO,IACvB,MAAME,EAAI,KAAK,IAAI,EAAG,KAAK,QAAQD,GAAW,KAAK,IAAA,GAASD,GAAa,GAAI,CAAC,EACxEG,EAAOD,EAAI,GAAK,GAAGA,CAAC,IAAM,GAAG,KAAK,MAAMA,EAAI,EAAE,CAAC,IAAI,OAAOA,EAAI,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,IACxF,OAAOD,EAAUE,EAAO,GAAGA,CAAI,GACjC,CAGO,SAASC,EAAIN,EAAgC,CAClD,GAAI,CAACA,EAAI,MAAO,IAChB,MAAMI,EAAI,KAAK,IAAI,EAAG,KAAK,OAAO,KAAK,IAAA,EAAQJ,GAAM,GAAI,CAAC,EAC1D,GAAII,EAAI,GAAI,MAAO,WACnB,MAAMG,EAAI,KAAK,MAAMH,EAAI,EAAE,EAC3B,GAAIG,EAAI,GAAI,MAAO,GAAGA,CAAC,QACvB,MAAMC,EAAI,KAAK,MAAMD,EAAI,EAAE,EAC3B,OAAIC,EAAI,GAAW,GAAGA,CAAC,QAChB,GAAG,KAAK,MAAMA,EAAI,EAAE,CAAC,OAC9B,CAUA,MAAMC,EAAwC,CAC5C,GAAI,SACJ,KAAM,YACN,OAAQ,QACV,EAEO,SAASC,EAAYC,EAAoC,CAC9D,OAAKA,EACEF,EAAcE,CAAM,GAAKA,EADZ,GAEtB,CAiBO,SAASC,EAASC,EAA0C,CACjE,GAAI,CAACA,EAAO,MAAO,IACnB,MAAMC,EAAQD,EAAM,QAAQ,SAAU,GAAG,EACzC,OAAOC,EAAM,OAAO,CAAC,EAAE,cAAgBA,EAAM,MAAM,CAAC,CACtD"}
|