@codeyam-editor/codeyam-editor 0.1.5 → 0.1.6
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/npm/cli.js +5 -1
- package/npm/cloud.js +1884 -210
- package/npm/codesign-plan.js +68 -0
- package/npm/empty-project-dir.js +92 -7
- package/npm/fleet-add-failure.js +252 -0
- package/npm/fleet-asset-version.js +37 -0
- package/npm/fleet-auth-health.js +143 -5
- package/npm/fleet-build-data.js +60 -5
- package/npm/fleet-cleanup.js +114 -9
- package/npm/fleet-destroy-safety.js +230 -13
- package/npm/fleet-early-roster.js +87 -0
- package/npm/fleet-effect-poll.js +110 -0
- package/npm/fleet-env.js +86 -0
- package/npm/fleet-ghcr-secret.js +129 -0
- package/npm/fleet-git-maintenance.js +142 -0
- package/npm/fleet-host-op-limiter.js +68 -0
- package/npm/fleet-iap-token.js +165 -0
- package/npm/fleet-live-status.js +40 -8
- package/npm/fleet-memory.js +245 -9
- package/npm/fleet-plans.js +98 -4
- package/npm/fleet-pool.js +75 -16
- package/npm/fleet-prewarm.js +87 -11
- package/npm/fleet-project-drift.js +58 -0
- package/npm/fleet-public-url.js +234 -0
- package/npm/fleet-queue.js +58 -1
- package/npm/fleet-reachability-debounce.js +69 -0
- package/npm/fleet-reachability.js +80 -0
- package/npm/fleet-reset.js +32 -0
- package/npm/fleet-running-plan.js +85 -0
- package/npm/fleet-session-token-cache.js +65 -0
- package/npm/fleet-setup-steps.js +19 -12
- package/npm/fleet-status-refs.js +96 -0
- package/npm/fleet-strand.js +39 -8
- package/npm/fleet-stuck-status.js +13 -7
- package/npm/fleet-vm-access.js +170 -0
- package/npm/fleet-vm-probe-target.js +282 -0
- package/npm/fleet-vm-readiness.js +136 -3
- package/npm/google-ingress.js +15 -0
- package/npm/ingress-invoke.js +478 -0
- package/npm/launch-config.js +182 -6
- package/npm/scenario-check.js +282 -10
- package/npm/scenario-handlers.js +85 -27
- package/npm/scenario-interactivity.js +145 -6
- package/npm/scenario-issues.js +13 -1
- package/npm/scenario-mocks.js +129 -26
- package/npm/scenario-playwright.js +286 -12
- package/npm/script-drift.js +72 -1
- package/npm/utils.js +37 -3
- package/package.json +5 -5
- package/ui/dist/assets/{ContainerInspector-D7VZkkaj.js → ContainerInspector-DgM0pTAx.js} +1 -1
- package/ui/dist/assets/EditorShell-B7Q06uJ_.js +252 -0
- package/ui/dist/assets/EditorShell-DP5UY20G.css +1 -0
- package/ui/dist/assets/{Markdown-BoLHHFXH.js → Markdown-Chgdf3PW.js} +1 -1
- package/ui/dist/assets/ProjectLauncherScreen-BRrEr8Ng.js +1 -0
- package/ui/dist/assets/ScenarioDataPanel-BeQfa28g.js +9 -0
- package/ui/dist/assets/{ScenarioDataPanel-DYP7pi_n.css → ScenarioDataPanel-C1LukYI6.css} +1 -1
- package/ui/dist/assets/{ScenarioDataPanelFullPage-CBLTGC4-.js → ScenarioDataPanelFullPage-BLqRCxQX.js} +1 -1
- package/ui/dist/assets/ScenarioRenderer-CIAxfHPh.js +21 -0
- package/ui/dist/assets/{StepsSimulator-BFldWyoX.js → StepsSimulator-CymGgfbu.js} +1 -1
- package/ui/dist/assets/index-BygCiJSb.css +1 -0
- package/ui/dist/assets/{index-QsOiOG9x.js → index-DCHqRrwO.js} +4 -4
- package/ui/dist/assets/{markdown-v0F0UEt3.js → markdown-C9tbsVHX.js} +1 -1
- package/ui/dist/assets/react-nrLBr15I.js +28 -0
- package/ui/dist/assets/{useEvents-DHkLJZR4.js → useEvents-S3Qk1Y_d.js} +1 -1
- package/ui/dist/assets/useServerIdentity-B7rI0u3O.js +1 -0
- package/ui/dist/index.html +4 -4
- package/ui/dist/open-source/codeyam-counter.png +0 -0
- package/ui/dist/open-source/el-carot.png +0 -0
- package/ui/dist/open-source/tabcommand.png +0 -0
- package/ui/dist/assets/EditorShell-DHhIaotd.css +0 -1
- package/ui/dist/assets/EditorShell-r-796N_W.js +0 -191
- package/ui/dist/assets/ProjectLauncherScreen-Ck-XWkQN.js +0 -1
- package/ui/dist/assets/ScenarioDataPanel-B9iDSUpA.js +0 -5
- package/ui/dist/assets/ScenarioRenderer-BhLfT-nX.js +0 -21
- package/ui/dist/assets/index-CIXZkwfB.css +0 -1
- package/ui/dist/assets/react-CSS0HapR.js +0 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.fact-fresh{display:inline-flex;align-items:center;margin-left:.4em;padding:.05em .45em;border-radius:999px;font-size:.72em;font-weight:600;letter-spacing:.01em;line-height:1.5;white-space:nowrap;color:#5b6472;background:#636e7d1a;cursor:help;vertical-align:middle}.fact-fresh.stale{color:#9a5b00;background:#d68a0029}.home-landing,.learn-screen,.hosting-screen,.lib-group,.lib-row{--bg: var(--surface-page);--panel: var(--surface-panel);--panel-2: var(--surface-card);--panel-3: var(--surface-raised);--line: var(--line-subtle);--line-2: var(--line-hair);--text: var(--text-strong);--text-2: var(--text-body);--text-3: var(--text-faint);--text-4: var(--text-subtle);--lime: var(--lime-300);--lime-dim: var(--lime-400);--blue: var(--blue-300);--green: var(--green-300);--amber: var(--amber-300);--mono: "IBM Plex Mono", monospace;--sans: "IBM Plex Sans", sans-serif;font-family:var(--sans);color:var(--text);-webkit-font-smoothing:antialiased}.home-landing *,.learn-screen *,.hosting-screen *,.lib-group *,.lib-row *{box-sizing:border-box}@keyframes home-spin{to{transform:rotate(360deg)}}@keyframes home-pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes home-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.home-landing{padding:30px 10% 50px}.home-landing .hello{font-size:13px;color:var(--text-3);margin-bottom:5px}.home-landing .project{font-size:27px;font-weight:700;letter-spacing:-.02em;margin-bottom:24px;line-height:1.15}.home-landing .seclabel{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-4);margin:0 2px 14px}.home-landing .pnopreview{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#ffffff09;color:var(--text-4);font-size:12px;font-family:var(--mono)}.home-landing .exdoor{border:.5px solid var(--line);border-radius:18px;background:var(--panel-2);overflow:hidden;margin-bottom:15px}.home-landing .exhead{display:flex;align-items:center;gap:12px;padding:20px 22px 0;width:100%;text-align:left;background:none;border:0;font:inherit;color:inherit;cursor:pointer}.home-landing .exhead:hover .dname{text-decoration:underline}.home-landing .exhead .dic{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:21px;flex-shrink:0;background:var(--blue-soft);color:var(--blue-300)}.home-landing .exhead .grow{flex:1;min-width:0}.home-landing .exhead .dname{font-size:16.5px;font-weight:600}.home-landing .exhead .ddesc{font-size:13px;color:var(--text-3);margin-top:2px}.home-landing .exhead .open{font-size:12.5px;font-weight:600;color:var(--blue);cursor:pointer;display:flex;align-items:center;gap:5px;white-space:nowrap;background:none;border:none;font-family:inherit}.home-landing .exhead .open:hover{text-decoration:underline}.home-landing .rail{display:flex;gap:13px;padding:18px 22px 22px;overflow-x:auto}.home-landing .rail::-webkit-scrollbar{height:7px}.home-landing .rail::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:4px}.home-landing .pcard{flex-shrink:0;width:158px;cursor:pointer;background:none;border:none;padding:0;text-align:left;font-family:inherit;color:inherit}.home-landing .pthumb{width:158px;height:108px;border-radius:10px;border:.5px solid var(--line-2);overflow:hidden;position:relative;transition:.15s}.home-landing .pcard:hover .pthumb{border-color:var(--blue);transform:translateY(-3px)}.home-landing .pshot{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain;background:#141414}.home-landing .pcount{position:absolute;bottom:7px;right:7px;font-size:9px;color:var(--text-2);background:#000000a6;border-radius:5px;padding:2px 7px}.home-landing .pname{font-size:13px;font-weight:600;margin-top:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.home-landing .allcard{flex-shrink:0;width:90px;display:flex;align-items:center}.home-landing .alltile{width:90px;height:108px;border-radius:10px;border:.5px dashed var(--line-2);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:var(--text-3);cursor:pointer;transition:.15s;background:none;font-family:inherit}.home-landing .alltile:hover{border-color:var(--blue);color:var(--blue)}.home-landing .alltile .n{font-size:18px;font-weight:700}.home-landing .alltile .l{font-size:10px}.home-landing .railempty{font-size:13px;color:var(--text-3);padding:4px 0 8px}.home-landing .ic-plan{background:var(--lime-soft);color:var(--lime-300)}.home-landing .ic-learn{background:var(--amber-soft);color:var(--amber-300)}.home-landing .doorrows{display:flex;flex-direction:column;gap:10px}.home-landing .doorrows .exdoor{margin-bottom:0}.home-landing .drow{display:flex;align-items:center;gap:14px;border:.5px solid var(--line);border-radius:14px;padding:15px 18px;background:var(--panel-2);cursor:pointer;transition:.18s;width:100%;text-align:left;font-family:inherit;color:var(--text)}.home-landing .drow:hover{border-color:var(--line-2);background:var(--panel-3);transform:translateY(-1px)}.home-landing .drow .dic{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:19px;flex-shrink:0;background:var(--panel-3)}.home-landing .drow .dmain{flex:1;min-width:0}.home-landing .drow .dname{font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px}.home-landing .drow .ddesc{font-size:12.5px;color:var(--text-3);line-height:1.45;margin-top:2px}.home-landing .drow .ddesc b{color:var(--text);font-weight:600}.home-landing .drow .dright{display:flex;align-items:center;gap:13px;flex-shrink:0}.home-landing .drow .dmeta{font-size:11.5px;color:var(--text-3);text-align:right;white-space:nowrap;line-height:1.4}.home-landing .drow .dmeta .stat{font-weight:600;color:var(--text);display:block}.home-landing .drow .arr{color:var(--text-4);font-size:16px;transition:.15s}.home-landing .drow:hover .arr{color:var(--text-2);transform:translate(3px)}.home-landing .drow.building{border-color:#9bd35a66;background:#9bd35a0d}.home-landing .drow.building .dspin{width:40px;height:40px;border-radius:11px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--green-soft)}.home-landing .drow.building .dspin:after{content:"";width:20px;height:20px;border-radius:50%;border:2.5px solid var(--green);border-top-color:transparent;animation:home-spin 1s linear infinite}.home-landing .drow.building .bstep{display:flex;align-items:center;gap:7px;margin-top:6px;font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums}.home-landing .drow.building .bflow{font-weight:600;font-variant-numeric:normal;padding:1px 7px;border-radius:6px;background:var(--green-soft);color:var(--green-300)}.home-landing .drow.building.attn .bflow{background:var(--amber-soft, rgba(224, 178, 74, .16));color:var(--amber-300)}.home-landing .drow .bbar{height:5px;background:var(--panel-3);border-radius:3px;margin-top:9px;overflow:hidden;max-width:360px}.home-landing .drow .bbar>div{height:100%;background:var(--green);border-radius:3px;transition:width .6s ease}.home-landing .drow .livedot{width:7px;height:7px;border-radius:50%;background:var(--green);display:inline-block;animation:home-pulse 1.4s ease-in-out infinite}.home-landing .drow.building.attn{border-color:#e0b24a66;background:#e0b24a0f}.home-landing .drow.building.attn .dspin{background:var(--amber-soft, rgba(224, 178, 74, .16))}.home-landing .drow.building.attn .dspin:after{border-color:var(--amber-300);border-top-color:transparent;animation:none}.home-landing .drow .livedot.warn{background:var(--amber-300)}.home-landing .drow.ready .dic.ic-ready{color:var(--blue-300)}.home-landing .cta-pill{display:inline-flex;align-items:center;white-space:nowrap;font-size:12.5px;font-weight:600;padding:8px 14px;border-radius:9px;background:var(--action-bg);color:var(--action-fg)}.home-landing .drow.ready:hover .cta-pill{filter:brightness(1.05)}.home-landing .drow.quiet{background:transparent}.home-landing .drow.quiet .dic{background:var(--panel-2);opacity:.85}.home-landing .drow.quiet .dname{color:var(--text-2)}.home-landing .drow .lines{display:inline-flex;gap:4px;margin-top:5px;justify-content:flex-end}.home-landing .drow .ln{width:16px;height:4px;border-radius:2px;background:var(--line-2)}.home-landing .drow .ln.done{background:var(--green)}.home-landing .bstatus-foot{display:flex;align-items:center;justify-content:flex-end;gap:13px;flex-wrap:wrap;padding:2px 4px 0}.home-landing .bstatus-reset{font-family:inherit;font-size:11.5px;font-weight:600;padding:6px 12px;border-radius:9px;border:.5px solid var(--amber-300);background:transparent;color:var(--amber-300);cursor:pointer;transition:.15s;white-space:nowrap}.home-landing .bstatus-reset:hover{background:#e0b24a1a}.home-landing .crumbs,.learn-screen .crumbs,.hosting-screen .crumbs{font-size:13px;color:var(--text-3);margin-bottom:20px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.home-landing .crumbs a,.learn-screen .crumbs a,.hosting-screen .crumbs a{color:var(--text-3);text-decoration:none;cursor:pointer;white-space:nowrap;background:none;border:none;font:inherit;padding:0}.home-landing .crumbs a:hover,.learn-screen .crumbs a:hover,.hosting-screen .crumbs a:hover{color:var(--text-2)}.home-landing .crumbs .sep,.learn-screen .crumbs .sep,.hosting-screen .crumbs .sep{color:var(--text-4)}.home-landing .crumbs b,.learn-screen .crumbs b,.hosting-screen .crumbs b{color:var(--text);white-space:nowrap}.home-landing .crumbs .back,.learn-screen .crumbs .back,.hosting-screen .crumbs .back{display:inline-flex;align-items:center;gap:5px;color:var(--text-2);cursor:pointer;font-weight:500;margin-right:6px;background:none;border:none;font:inherit;padding:0}.home-landing .crumbs .back:hover,.learn-screen .crumbs .back:hover,.hosting-screen .crumbs .back:hover{color:var(--text)}.learn-screen{padding:26px 40px 40px}.learn-screen .h{font-size:23px;font-weight:700;letter-spacing:-.01em}.learn-screen .hsub{font-size:14px;color:var(--text-3);line-height:1.6;max-width:680px;margin:8px 0 24px}.learn-screen .tlist{display:flex;flex-direction:column;gap:10px}.learn-screen .trow{display:flex;align-items:center;gap:14px;border:.5px solid var(--line);border-radius:13px;padding:15px 17px;background:var(--panel-2);cursor:pointer;transition:.15s;width:100%;text-align:left;color:var(--text);font-family:inherit}.learn-screen .trow:hover{border-color:var(--line-2);background:var(--panel-3);transform:translateY(-1px)}.learn-screen .trow .tic{width:42px;height:42px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:21px;flex-shrink:0;background:var(--panel-3);color:var(--text-2)}.learn-screen .trow.next .tic{color:var(--amber)}.learn-screen .trow .tbody{flex:1;min-width:0}.learn-screen .trow .tn{font-size:15.5px;font-weight:600;color:var(--text)}.learn-screen .trow .td{font-size:12.5px;color:var(--text-3);margin-top:2px}.learn-screen .trow .tt{font-size:11px;font-weight:600;color:var(--text-3);white-space:nowrap;border:.5px solid var(--line-2);border-radius:8px;padding:3px 9px}.learn-screen .trow.done .tt{color:var(--green);border-color:#9bd35a4d}.learn-screen .trow.next .tt{color:var(--amber);border-color:#ef9f2759;background:#ef9f2712}.learn-screen .trow .arrow{margin-left:auto;color:var(--text-4);font-size:18px;transition:.15s}.learn-screen .trow:hover .arrow{color:var(--text-2);transform:translate(3px)}.learn-screen .trow.soon .tn{color:var(--text-2)}.learn-screen .trow.soon .td{color:var(--text-4)}.learn-screen .trow-group{display:flex;flex-direction:column;gap:6px}.learn-screen .detected-services{display:flex;flex-direction:column;gap:6px;margin:0 4px 0 22px}.learn-screen .detected-service{display:flex;align-items:center;gap:10px;border:.5px solid var(--line-2);border-radius:10px;padding:9px 13px;background:var(--panel);font-size:12.5px}.learn-screen .detected-service .ds-tag{font-family:var(--mono);font-size:10.5px;font-weight:600;color:var(--blue);border:.5px solid rgba(110,168,254,.35);background:var(--blue-soft);border-radius:7px;padding:2px 7px;white-space:nowrap}.learn-screen .detected-service .ds-name{font-weight:600;color:var(--text)}.learn-screen .detected-service .ds-why{color:var(--text-3);font-family:var(--mono);font-size:11.5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.learn-screen .detected-service .ds-key-set{margin-left:auto;flex-shrink:0;font-family:var(--mono);font-size:10.5px;font-weight:600;color:var(--green, #8bd450);border:.5px solid rgba(139,212,80,.35);border-radius:7px;padding:2px 7px;white-space:nowrap}.learn-screen .detected-service .ds-add-key{margin-left:auto;flex-shrink:0;font-family:inherit;font-size:11.5px;font-weight:600;color:#161616;background:var(--accent, #d7ff63);border:none;border-radius:8px;padding:3px 10px;cursor:pointer;transition:.15s}.learn-screen .detected-service .ds-add-key:hover{filter:brightness(1.05)}.learn-screen .detected-service .ds-dismiss{margin-left:auto;flex-shrink:0;font-family:inherit;font-size:11.5px;color:var(--text-3);background:transparent;border:.5px solid var(--line-2);border-radius:8px;padding:3px 10px;cursor:pointer;transition:.15s}.learn-screen .detected-service .ds-dismiss:hover{color:var(--text);border-color:var(--line);background:var(--panel-3)}.hosting-screen{padding:26px 40px 40px}.hosting-screen .htitle{display:flex;align-items:center;gap:15px;margin-bottom:24px}.hosting-screen .htitle>div{min-width:0}.hosting-screen .htitle .hic{width:54px;height:54px;border-radius:15px;background:linear-gradient(160deg,#1d1d1d,#141414);border:.5px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:26px;flex-shrink:0;color:var(--amber)}.hosting-screen .htitle .h{font-size:25px;font-weight:700;letter-spacing:-.02em}.hosting-screen .htitle .hmeta{font-size:13px;color:var(--text-3);margin-top:3px;font-family:var(--mono)}.hosting-screen .lead{font-size:15px;color:var(--text-2);line-height:1.6;max-width:680px;margin-bottom:8px}.hosting-screen .lead b{color:var(--text);font-weight:600}.hosting-screen .lead.dim{font-size:14px;color:var(--text-3);margin-bottom:26px}.hosting-screen .seclabel{font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);margin:0 2px 13px}.hosting-screen .journey{position:relative;border:.5px solid var(--line);border-radius:18px;background:linear-gradient(150deg,#161616,#0f0f0f);padding:30px 34px 26px;margin-bottom:26px;overflow:hidden}.hosting-screen .jrow{display:flex;align-items:flex-start;justify-content:center;position:relative;z-index:1}.hosting-screen .jcol{display:flex;flex-direction:column;align-items:center;gap:9px;width:170px;text-align:center}.hosting-screen .jtile{width:62px;height:62px;border-radius:16px;background:var(--panel-3);border:.5px solid var(--line-2);display:flex;align-items:center;justify-content:center;font-size:30px}.hosting-screen .jtile.lime{background:#c7f04a1f;border-color:#c7f04a66;box-shadow:0 0 0 4px #c7f04a0f}.hosting-screen .jlbl{font-size:14px;font-weight:600;color:var(--text)}.hosting-screen .jsub{font-size:12px;color:var(--text-3);line-height:1.4}.hosting-screen .jconn{flex:1;max-width:96px;display:flex;align-items:center;justify-content:center;color:var(--text-4);font-size:18px;padding-top:22px;position:relative}.hosting-screen .jconn:before{content:"";position:absolute;top:31px;left:-6px;right:-6px;height:2px;background:repeating-linear-gradient(90deg,var(--line-2) 0 5px,transparent 5px 11px)}.hosting-screen .jconn span{position:relative;z-index:1;background:#121212;padding:0 6px}.hosting-screen .jpacket{position:absolute;top:25px;width:9px;height:9px;border-radius:50%;background:var(--lime);box-shadow:0 0 10px 2px #c7f04a99;z-index:2;left:0;animation:hs-jtravel 3.6s cubic-bezier(.6,0,.4,1) infinite}@keyframes hs-jtravel{0%{left:14%;opacity:0}12%{opacity:1}88%{opacity:1}to{left:86%;opacity:0}}.home-landing .crumbs,.home-landing .hello,.home-landing .project,.home-landing .seclabel,.home-landing .drow,.home-landing .exdoor{width:100%;max-width:2200px;margin-left:auto;margin-right:auto}@media(prefers-reduced-motion:reduce){.hosting-screen .jpacket{animation:none;left:50%;opacity:.7}.home-landing .drow.building .dspin:after,.hosting-screen .deploy-spin:after,.hosting-screen .dep-step.active .dot:after{animation:none}.home-landing .drow .bbar>div{transition:none}.home-landing .drow .livedot{animation:none}}.wired-provider{border:.5px solid rgba(199,240,74,.45);border-radius:12px;background:linear-gradient(150deg,#c7f04a12,#c7f04a03);padding:12px 15px;margin:0 0 16px;display:flex;flex-direction:column;gap:4px}.wired-provider-title{font-size:14px;color:var(--text-1)}.wired-provider-detail{font-size:13px;color:var(--text-2);line-height:1.5}.hosting-screen .hosting-detected{border:.5px solid rgba(199,240,74,.45);border-radius:14px;background:linear-gradient(150deg,#c7f04a12,#c7f04a03);padding:14px 16px;margin-bottom:18px;display:flex;flex-direction:column;gap:6px}.hosting-screen .hosting-detected-title{font-size:14px;font-weight:600;color:var(--text-1)}.hosting-screen .hosting-detected-detail{font-size:13px;color:var(--text-2);line-height:1.55}.hosting-screen .hosting-detected-detail code{font-family:var(--mono, monospace);font-size:12px;background:var(--panel-3, rgba(255, 255, 255, .05));padding:1px 5px;border-radius:5px}.hosting-screen .provcard{display:flex;gap:18px;border:.5px solid var(--line-2);border-radius:16px;background:var(--panel-2);padding:20px 22px;transition:.15s}.hosting-screen .provcard.best{border-color:#c7f04a73;background:linear-gradient(150deg,#c7f04a0d,#c7f04a03)}.hosting-screen .pv-logo{width:50px;height:50px;border-radius:13px;background:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 2px 10px #0006}.hosting-screen .provbody{flex:1;min-width:0}.hosting-screen .provtop{display:flex;align-items:center;gap:10px;margin-bottom:5px;flex-wrap:wrap}.hosting-screen .provname{font-size:18px;font-weight:700}.hosting-screen .bestfit{font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#0a0a0a;background:var(--lime);border-radius:6px;padding:3px 9px;white-space:nowrap;flex-shrink:0}.hosting-screen .provdesc{font-size:13.5px;color:var(--text-2);line-height:1.55;margin-bottom:14px;max-width:560px}.hosting-screen .reasons{display:flex;flex-direction:column;gap:9px;margin-bottom:15px}.hosting-screen .reason{display:flex;align-items:flex-start;gap:10px;font-size:13.5px;color:var(--text-2);line-height:1.45}.hosting-screen .reason b{color:var(--text);font-weight:600}.hosting-screen .reason svg{margin-top:2px;flex-shrink:0}.hosting-screen .chips{display:flex;gap:8px;flex-wrap:wrap}.hosting-screen .chip{font-size:11.5px;font-weight:500;color:var(--text-2);background:var(--panel-3);border:.5px solid var(--line);border-radius:8px;padding:5px 11px}.hosting-screen .alt-toggle{display:inline-flex;align-items:center;gap:7px;margin-top:15px;font-size:13px;font-weight:600;color:var(--text-3);background:none;border:none;cursor:pointer;transition:.15s;font-family:inherit}.hosting-screen .alt-toggle:hover{color:var(--text)}.hosting-screen .alt-toggle .chev{transition:transform .2s;font-size:11px}.hosting-screen .alts{display:flex;flex-direction:column;gap:10px;margin-top:14px;animation:home-fade .25s ease}.hosting-screen .altcard{display:flex;align-items:center;gap:14px;border:.5px solid var(--line);border-radius:13px;background:var(--panel-2);padding:14px 16px;transition:.15s}.hosting-screen .altcard:hover{border-color:var(--line-2);background:var(--panel-3)}.hosting-screen .altmark{width:42px;height:42px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:800;font-size:18px;color:#fff;font-family:var(--mono)}.hosting-screen .altbody{flex:1;min-width:0}.hosting-screen .altname{font-size:14.5px;font-weight:600}.hosting-screen .altdesc{font-size:12.5px;color:var(--text-3);line-height:1.45;margin-top:2px}.hosting-screen .altpick{font-size:12.5px;font-weight:600;color:var(--text-2);background:none;border:.5px solid var(--line-2);border-radius:9px;padding:8px 14px;cursor:pointer;white-space:nowrap;transition:.15s;font-family:inherit}.hosting-screen .altpick:hover{color:var(--text);border-color:var(--text-3)}.hosting-screen .faq{margin-top:14px;border:.5px solid var(--line);border-radius:14px;background:var(--panel-2);overflow:hidden}.hosting-screen .faqitem{border-bottom:.5px solid var(--line)}.hosting-screen .faqitem:last-child{border-bottom:none}.hosting-screen .faqq{width:100%;text-align:left;display:flex;align-items:center;gap:12px;padding:15px 18px;background:none;border:none;color:var(--text);font-size:14px;font-weight:600;cursor:pointer;font-family:inherit}.hosting-screen .faqq .chev{margin-left:auto;color:var(--text-4);transition:transform .2s;font-size:12px}.hosting-screen .faqq.open .chev{transform:rotate(180deg)}.hosting-screen .faqa{font-size:13.5px;color:var(--text-3);line-height:1.6;padding:0 18px 16px;max-width:640px}.setup-topic .faq{margin-top:22px;border:none;border-top:.5px solid var(--line);border-radius:0;background:transparent}.setup-topic .seclabel{margin-top:40px;color:var(--text-4)}.setup-topic .faqq{color:var(--text-2);font-weight:500;font-size:13.5px;padding:13px 4px}.setup-topic .faqa{padding:0 4px 14px}.hosting-screen .setup-ill{position:relative;border:.5px solid var(--line);border-radius:18px;background:linear-gradient(180deg,rgba(255,255,255,.02),transparent);padding:30px 28px;margin-top:2px;overflow:hidden}.hosting-screen .setup-ill .ill-cap{margin-top:18px;text-align:center;font-size:12.5px;color:var(--text-3)}.hosting-screen .ill-split{display:flex;align-items:stretch;gap:16px}.hosting-screen .isplit{flex:1;border:.5px solid var(--line);border-radius:14px;padding:16px 18px;background:#ffffff03}.hosting-screen .isplit.after{border-color:#c7f04a59;background:#c7f04a0d}.hosting-screen .isplit-tag{font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);margin-bottom:12px}.hosting-screen .isplit.after .isplit-tag{color:#c7f04a}.hosting-screen .isplit-row{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--text-2);padding:6px 0}.hosting-screen .isplit-row .mk{width:18px;text-align:center;color:var(--text-4)}.hosting-screen .isplit.after .isplit-row .mk{color:#c7f04a}.hosting-screen .isplit-arrow{align-self:center;color:var(--text-4);font-size:18px}.hosting-screen .ill-stack{display:flex;flex-direction:column;gap:10px;max-width:540px;margin:0 auto}.hosting-screen .istack-row{display:flex;align-items:center;gap:14px;border:.5px solid var(--line);border-radius:12px;padding:12px 16px;background:#ffffff03}.hosting-screen .istack-row.lime{border-color:#c7f04a66;background:#c7f04a0f}.hosting-screen .istack-emoji{font-size:22px;width:28px;text-align:center}.hosting-screen .istack-lbl{font-weight:600;font-size:14px;color:var(--text)}.hosting-screen .istack-sub{font-size:12.5px;color:var(--text-3);margin-left:auto}.hosting-screen .ill-orbit{display:flex;align-items:center;justify-content:center;gap:34px;flex-wrap:wrap}.hosting-screen .iorbit-center{display:flex;flex-direction:column;align-items:center;gap:10px}.hosting-screen .iorbit-tile{width:76px;height:76px;border-radius:18px;display:flex;align-items:center;justify-content:center;font-size:34px;background:#c7f04a1f;border:.5px solid rgba(199,240,74,.4);box-shadow:0 0 0 5px #c7f04a0d}.hosting-screen .iorbit-lbl{font-size:14px;font-weight:600;color:var(--text)}.hosting-screen .iorbit-sats{display:flex;flex-direction:column;gap:10px}.hosting-screen .iorbit-sat{display:flex;align-items:center;gap:10px;border:.5px solid var(--line);border-radius:999px;padding:8px 16px 8px 12px;font-size:13px;color:var(--text-2);background:#ffffff03}.hosting-screen .ill-bars{display:flex;align-items:flex-end;justify-content:center;gap:18px;height:148px}.hosting-screen .ibar{width:46px;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:8px}.hosting-screen .ibar-fill{width:100%;border-radius:7px 7px 3px 3px;background:#ffffff14;min-height:8px}.hosting-screen .ibar.lime .ibar-fill{background:#c7f04a8c}.hosting-screen .ibar-lbl{font-size:11px;color:var(--text-3);text-align:center}.hosting-screen .ill-emblem{display:flex;flex-direction:column;align-items:center;gap:18px;text-align:center}.hosting-screen .iemblem-tile{width:88px;height:88px;border-radius:22px;display:flex;align-items:center;justify-content:center;font-size:42px;background:#c7f04a1f;border:.5px solid rgba(199,240,74,.4);box-shadow:0 0 0 6px #c7f04a0d}.hosting-screen .iemblem-chips{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}.hosting-screen .iemblem-chip{border:.5px solid var(--line);border-radius:999px;padding:7px 14px;font-size:12.5px;color:var(--text-2);background:#ffffff03}.hosting-screen .ill-channels{display:flex;flex-direction:column;gap:18px;max-width:560px;margin:0 auto}.hosting-screen .ichan{display:flex;align-items:center;gap:16px}.hosting-screen .ichan-lbl{width:92px;font-size:13px;font-weight:600;color:var(--text-2);text-align:right}.hosting-screen .ichan-track{flex:1;display:flex;align-items:center;gap:10px}.hosting-screen .ichan-dot{width:12px;height:12px;border-radius:50%;background:var(--line)}.hosting-screen .ichan.on .ichan-lbl{color:#c7f04a}.hosting-screen .ichan.on .ichan-dot{background:#c7f04a99}.hosting-screen .ichan-line{flex:1;height:.5px;background:var(--line)}.hosting-screen .ask{margin-top:26px}.hosting-screen .askrow{display:flex;gap:10px;align-items:stretch}.hosting-screen .askrow input{flex:1;font-family:inherit;font-size:14px;color:var(--text);background:var(--panel-2);border:.5px solid var(--line-2);border-radius:12px;padding:14px 16px;outline:none;transition:.15s}.hosting-screen .askrow input::placeholder{color:var(--text-4)}.hosting-screen .askrow input:focus{border-color:var(--blue)}.hosting-screen .askrow button{width:50px;border-radius:12px;background:var(--panel-3);border:.5px solid var(--line-2);color:var(--text-2);font-size:17px;cursor:pointer;transition:.15s}.hosting-screen .askrow button:hover{background:#252525;color:var(--text)}.hosting-screen .asknote{font-size:11.5px;color:var(--text-4);margin-top:9px;display:flex;align-items:center;gap:6px}.hosting-screen .askans{display:flex;gap:11px;margin-top:14px;border:.5px solid rgba(133,183,235,.25);background:#85b7eb0f;border-radius:13px;padding:14px 16px;animation:home-fade .25s ease}.hosting-screen .askav{font-family:var(--mono);font-size:12px;font-weight:700;color:var(--lime);flex-shrink:0;width:26px;height:26px;border-radius:8px;background:#000;display:flex;align-items:center;justify-content:center}.hosting-screen .askans .at{font-size:13.5px;color:var(--text-2);line-height:1.6}.hosting-screen .setup-extlink{display:inline-flex;align-items:center;gap:8px;margin-top:10px;padding:9px 14px;border-radius:10px;font-size:13.5px;font-weight:600;text-decoration:none;color:var(--blue);background:var(--panel-2);border:.5px solid var(--line-2);transition:.15s}.hosting-screen .setup-extlink:hover{background:var(--panel-3);border-color:var(--blue)}.hosting-screen .setup-extlink-glyph{font-size:13px;opacity:.85}.hosting-screen .setup-note{margin-top:14px;padding:14px 16px;border:.5px solid var(--line-2);background:var(--panel-2);border-radius:13px;font-size:13.5px;line-height:1.6;color:var(--text-2)}.hosting-screen .setup-note p{margin:0}.hosting-screen .setup-note p+p{margin-top:10px}.hosting-screen .setup-note b{color:var(--text)}.hosting-screen .setup-note-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}.hosting-screen .setup-note-links .setup-extlink{margin-top:6px}.hosting-screen .cta-wrap{margin-top:28px}.hosting-screen .cta{width:100%;display:flex;align-items:center;justify-content:center;gap:10px;font-size:16px;font-weight:700;color:var(--action-fg);background:var(--action-bg);border:none;border-radius:14px;padding:18px;cursor:pointer;transition:.15s;font-family:inherit}.hosting-screen .cta:hover{background:#d4f76a;transform:translateY(-1px)}.hosting-screen .cta .ce{font-size:18px}.hosting-screen .cta-note{font-size:12.5px;color:var(--text-4);text-align:center;margin-top:13px;display:flex;align-items:center;justify-content:center;gap:6px}.hosting-screen .cta-done,.run-locally-screen .cta-done{display:flex;align-items:center;gap:12px;width:100%;border:.5px solid rgba(155,211,90,.4);background:#9bd35a0f;border-radius:14px;padding:16px 18px}.hosting-screen .cta-done-check,.run-locally-screen .cta-done-check{display:inline-flex;align-items:center;gap:10px;font-size:15px;font-weight:700;color:var(--green)}.hosting-screen .cta-done-check .ce,.run-locally-screen .cta-done-check .ce{font-size:18px}.hosting-screen .cta-done-actions,.run-locally-screen .cta-done-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.hosting-screen .cta-done .lf-back,.run-locally-screen .cta-done .lf-back{font-size:13.5px;font-weight:600;color:#0a0a0a;background:var(--lime);border:none;border-radius:11px;padding:11px 18px;cursor:pointer;transition:.15s;white-space:nowrap;font-family:inherit}.hosting-screen .cta-done .lf-back:hover,.run-locally-screen .cta-done .lf-back:hover{background:#d4f76a}.hosting-screen .cta-revert,.run-locally-screen .cta-revert,.hosting-screen .live-foot .lf-revert{font-size:13px;font-weight:600;color:var(--text-4);background:transparent;border:none;border-radius:11px;padding:11px 12px;cursor:pointer;transition:.15s;white-space:nowrap;font-family:inherit}.hosting-screen .cta-revert:hover,.run-locally-screen .cta-revert:hover,.hosting-screen .live-foot .lf-revert:hover{color:var(--text-1);background:#7f7f7f1f}.hosting-screen .reason-foot{font-size:12.5px;line-height:1.5;color:var(--text-4);margin:12px 0 0;padding-top:11px;border-top:1px solid var(--border-1, rgba(255, 255, 255, .07))}.hosting-screen .flowbar{display:flex;align-items:center;gap:8px;margin-bottom:26px;font-size:12px;font-family:var(--mono)}.hosting-screen .flowbar .fstep{display:flex;align-items:center;gap:7px;color:var(--text-4);white-space:nowrap}.hosting-screen .flowbar .fstep .fn{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--line-2);display:flex;align-items:center;justify-content:center;font-size:10.5px;color:var(--text-4)}.hosting-screen .flowbar .fstep.done .fn{background:var(--green);border-color:var(--green);color:#0a0a0a}.hosting-screen .flowbar .fstep.active{color:var(--text)}.hosting-screen .flowbar .fstep.active .fn{border-color:var(--lime);color:var(--lime)}.hosting-screen .flowbar .fsep{flex:1;max-width:38px;height:1px;background:var(--line-2)}.hosting-screen .panel{border:.5px solid var(--line);border-radius:18px;background:var(--panel-2);padding:26px 28px}.hosting-screen .panel .ph{font-size:19px;font-weight:700;letter-spacing:-.01em;margin-bottom:6px;display:flex;align-items:center;gap:10px}.hosting-screen .panel .psub{font-size:14px;color:var(--text-3);line-height:1.55;margin-bottom:22px;max-width:600px}.hosting-screen .connect-box{border:.5px solid var(--line-2);border-radius:14px;background:var(--panel-3);padding:22px;margin-bottom:18px}.hosting-screen .connect-box .cbtitle{display:flex;align-items:center;gap:12px;margin-bottom:18px}.hosting-screen .connect-box .cbtitle .pv-logo{width:42px;height:42px}.hosting-screen .connect-box .cbt{font-size:15px;font-weight:600}.hosting-screen .connect-box .cbd{font-size:12.5px;color:var(--text-3);margin-top:2px}.hosting-screen .grant{display:flex;flex-direction:column;gap:11px;margin-bottom:20px}.hosting-screen .grantrow{display:flex;align-items:flex-start;gap:10px;font-size:13px;color:var(--text-2);line-height:1.4}.hosting-screen .grantrow svg{margin-top:2px;flex-shrink:0}.hosting-screen .grantrow b{color:var(--text);font-weight:600}.hosting-screen .auth-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:10px;font-size:14.5px;font-weight:700;color:#fff;background:#000;border:.5px solid var(--line-2);border-radius:12px;padding:14px;cursor:pointer;transition:.15s;font-family:inherit}.hosting-screen .auth-btn:hover{background:#111;border-color:var(--text-4)}.hosting-screen .auth-row{display:flex;gap:11px;margin-top:11px}.hosting-screen .auth-ghost{flex:1;font-size:13px;font-weight:600;color:var(--text-3);background:none;border:.5px solid var(--line-2);border-radius:11px;padding:12px;cursor:pointer;transition:.15s;font-family:inherit}.hosting-screen .auth-ghost:hover{color:var(--text);border-color:var(--text-3)}.hosting-screen .reassure{font-size:12.5px;color:var(--text-4);line-height:1.55;margin-top:18px;display:flex;align-items:flex-start;gap:7px}.hosting-screen .deploy-head{display:flex;align-items:center;gap:14px;margin-bottom:20px}.hosting-screen .deploy-spin{width:46px;height:46px;border-radius:13px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--green-soft)}.hosting-screen .deploy-spin:after{content:"";width:23px;height:23px;border-radius:50%;border:2.5px solid var(--green);border-top-color:transparent;animation:home-spin 1s linear infinite}.hosting-screen .deploy-t{font-size:17px;font-weight:700}.hosting-screen .deploy-d{font-size:13px;color:var(--text-3);margin-top:2px}.hosting-screen .dep-bar{height:6px;background:var(--panel-3);border-radius:4px;overflow:hidden;margin-bottom:22px}.hosting-screen .dep-bar>div{height:100%;background:var(--green);border-radius:4px;transition:width .5s ease}.hosting-screen .dep-steps{display:flex;flex-direction:column;gap:2px}.hosting-screen .dep-step{display:flex;align-items:flex-start;gap:13px;padding:9px 0;position:relative}.hosting-screen .dep-step .dot{width:21px;height:21px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;z-index:1;background:var(--panel-3);border:1.5px solid var(--line-2)}.hosting-screen .dep-step:not(:last-child):before{content:"";position:absolute;left:10px;top:26px;bottom:-7px;width:1px;background:var(--line-2)}.hosting-screen .dep-step.done .dot{background:var(--green);border-color:var(--green)}.hosting-screen .dep-step.done:not(:last-child):before{background:#9bd35a66}.hosting-screen .dep-step.active .dot{border:none;background:transparent}.hosting-screen .dep-step.active .dot:after{content:"";width:19px;height:19px;border-radius:50%;border:2px solid var(--green);border-top-color:transparent;animation:home-spin 1s linear infinite}.hosting-screen .dep-step .sl{font-size:14px;color:var(--text-4);line-height:1.4;padding-top:1px}.hosting-screen .dep-step.done .sl{color:var(--text-3)}.hosting-screen .dep-step.active .sl{color:var(--text);font-weight:600}.hosting-screen .live-hero{text-align:center;padding:6px 0 22px}.hosting-screen .live-hero .lh-em{font-size:42px}.hosting-screen .live-hero .lh-t{font-size:23px;font-weight:800;letter-spacing:-.02em;margin-top:10px}.hosting-screen .live-hero .lh-d{font-size:14px;color:var(--text-3);margin-top:7px}.hosting-screen .url-card{display:flex;align-items:center;gap:14px;border:.5px solid rgba(155,211,90,.35);background:#9bd35a0d;border-radius:14px;padding:16px 18px;margin-bottom:14px}.hosting-screen .url-card .ucglobe{font-size:22px}.hosting-screen .url-card .uc-l{font-size:11px;color:var(--text-4);text-transform:uppercase;letter-spacing:.07em;font-weight:700}.hosting-screen .url-card .uc-u{font-family:var(--mono);font-size:15px;color:var(--text);margin-top:3px;white-space:nowrap}.hosting-screen .url-card .uc-actions{margin-left:auto;display:flex;gap:9px;flex-shrink:0}.hosting-screen .btn-copy,.hosting-screen .btn-visit{font-size:13px;font-weight:600;border-radius:10px;padding:10px 15px;cursor:pointer;transition:.15s;white-space:nowrap;border:.5px solid var(--line-2);font-family:inherit}.hosting-screen .btn-copy{color:var(--text-2);background:var(--panel-3)}.hosting-screen .btn-copy:hover{color:var(--text)}.hosting-screen .btn-visit{color:#0a0a0a;background:var(--lime);border-color:var(--lime)}.hosting-screen .btn-visit:hover{background:#d4f76a}.hosting-screen .domain-row{display:flex;align-items:center;gap:13px;border:.5px solid var(--line);border-radius:13px;background:var(--panel-2);padding:15px 17px;margin-bottom:14px}.hosting-screen .domain-row .dre{font-size:19px}.hosting-screen .domain-row .drt{font-size:13.5px;font-weight:600}.hosting-screen .domain-row .drd{font-size:12px;color:var(--text-3);margin-top:1px}.hosting-screen .domain-row .drbtn{margin-left:auto;font-size:12.5px;font-weight:600;color:var(--blue);background:#85b7eb1a;border:.5px solid rgba(133,183,235,.25);border-radius:9px;padding:8px 14px;cursor:pointer;transition:.15s;font-family:inherit}.hosting-screen .domain-row .drbtn:hover{background:#85b7eb29;color:var(--text)}.hosting-screen .live-foot{display:flex;align-items:center;gap:12px;margin-top:20px}.hosting-screen .live-foot .done-pill{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--green);white-space:nowrap}.hosting-screen .live-foot .lf-back{margin-left:auto;font-size:13.5px;font-weight:600;color:#0a0a0a;background:var(--lime);border:none;border-radius:11px;padding:11px 18px;cursor:pointer;transition:.15s;white-space:nowrap;font-family:inherit}.hosting-screen .live-foot .lf-back:hover{background:#d4f76a}.hosting-screen .conn-card{display:flex;align-items:center;gap:16px;border:.5px solid rgba(155,211,90,.4);background:#9bd35a0f;border-radius:16px;padding:16px 18px;margin-bottom:28px}.hosting-screen .conn-card .pv-logo{width:44px;height:44px}.hosting-screen .conn-body{flex:1;min-width:0}.hosting-screen .conn-top{display:flex;align-items:center;gap:11px}.hosting-screen .conn-name{font-size:16px;font-weight:700}.hosting-screen .conn-live{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--green);font-family:var(--mono)}.hosting-screen .conn-live .lbdot{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px #9bd35a2e}.hosting-screen .conn-acct{font-size:12.5px;color:var(--text-3);margin-top:3px}.hosting-screen .conn-acct b{color:var(--text-2);font-weight:600;font-family:var(--mono)}.hosting-screen .conn-disc{font-size:12.5px;font-weight:600;color:var(--text-3);background:none;border:.5px solid var(--line-2);border-radius:9px;padding:9px 14px;cursor:pointer;white-space:nowrap;transition:.15s;font-family:inherit}.hosting-screen .conn-disc:hover{color:#e98b8b;border-color:#e98b8b66}.hosting-screen .dep-card{border:.5px solid var(--line);border-radius:14px;background:var(--panel-2);overflow:hidden}.hosting-screen .depc-row{display:flex;align-items:center;gap:13px;padding:16px 18px}.hosting-screen .depc-dot{width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px #9bd35a29;flex-shrink:0}.hosting-screen .depc-main{flex:1;min-width:0}.hosting-screen .depc-t{font-size:14px;font-weight:600}.hosting-screen .depc-d{font-size:12.5px;color:var(--text-3);margin-top:2px}.hosting-screen .depc-btn{font-size:12.5px;font-weight:600;color:var(--text-2);background:var(--panel-3);border:.5px solid var(--line-2);border-radius:9px;padding:9px 15px;cursor:pointer;white-space:nowrap;transition:.15s;font-family:inherit}.hosting-screen .depc-btn:hover{color:var(--text);border-color:var(--text-3)}.hosting-screen .live-banner{display:flex;align-items:center;gap:14px;border:.5px solid rgba(155,211,90,.4);background:#9bd35a0f;border-radius:16px;padding:18px 20px;margin-bottom:24px}.hosting-screen .live-banner .lbdot{width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px #9bd35a2e;flex-shrink:0}.hosting-screen .live-banner .lbt{font-size:14.5px;font-weight:600}.hosting-screen .live-banner .lbu{font-family:var(--mono);font-size:12.5px;color:var(--green);margin-top:2px}.hosting-screen .live-banner .lbview{margin-left:auto;font-size:12.5px;font-weight:600;color:var(--green);background:#9bd35a1f;border:.5px solid rgba(155,211,90,.3);border-radius:9px;padding:8px 14px;cursor:pointer;text-decoration:none;font-family:inherit}.run-locally-screen .seclabel{font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);margin:0 2px 11px}.run-locally-screen .rl-loading{color:var(--text-3);font-size:14px;padding:18px 2px}.run-locally-screen .setup-ai-assist{margin-bottom:24px}.run-locally-screen .rl-sec{margin-bottom:26px}.run-locally-screen .rl-prereqs,.run-locally-screen .rl-notes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.run-locally-screen .rl-prereq{display:flex;flex-direction:column;gap:3px;border:.5px solid var(--line);border-radius:11px;background:var(--panel-2);padding:12px 15px}.run-locally-screen .rl-prereq-label{font-size:13.5px;font-weight:600;color:var(--text)}.run-locally-screen .rl-prereq-detail{font-size:12.5px;color:var(--text-3);line-height:1.5}.run-locally-screen .rl-load-steps{margin:0;padding:14px 16px 14px 38px;border:.5px solid var(--line);border-radius:11px;background:var(--panel-2);list-style:decimal outside;display:flex;flex-direction:column;gap:9px}.run-locally-screen .rl-load-step{font-size:13px;color:var(--text-2);line-height:1.55;padding-left:4px}.run-locally-screen .rl-load-step::marker{color:var(--text-4);font-weight:700}.run-locally-screen .rl-load-target{margin-top:10px;display:flex;flex-direction:column;gap:6px}.run-locally-screen .rl-load-target-label{font-size:12px;font-weight:600;color:var(--text-3)}.run-locally-screen .rl-cmd,.libraries-screen .rl-cmd,.lib-row .rl-cmd{display:flex;align-items:center;gap:10px;border:.5px solid var(--line);border-radius:11px;background:var(--panel-3);padding:11px 12px 11px 15px}.run-locally-screen .rl-cmd-text,.libraries-screen .rl-cmd-text,.lib-row .rl-cmd-text{flex:1;font-family:var(--mono);font-size:13px;color:var(--lime);overflow-x:auto;white-space:pre}.run-locally-screen .rl-copy,.libraries-screen .rl-copy,.lib-row .rl-copy{flex-shrink:0;font-size:11.5px;font-weight:600;color:var(--text-2);background:var(--panel);border:.5px solid var(--line);border-radius:8px;padding:6px 12px;cursor:pointer;font-family:inherit;transition:.15s}.run-locally-screen .rl-copy:hover,.libraries-screen .rl-copy:hover,.lib-row .rl-copy:hover{color:var(--text);border-color:var(--line-2)}.run-locally-screen .rl-reachable{font-size:13.5px;color:var(--text-2);line-height:1.6}.run-locally-screen .rl-url{color:var(--blue);text-decoration:none;font-family:var(--mono);font-size:13px}.run-locally-screen .rl-url:hover{text-decoration:underline}.run-locally-screen .rl-note{font-size:12.5px;color:var(--text-3);line-height:1.55}.run-locally-screen .cta-wrap{margin-top:28px}.run-locally-screen .cta{width:100%;display:flex;align-items:center;justify-content:center;gap:10px;font-size:15px;font-weight:700;color:var(--action-fg);background:var(--action-bg);border:none;border-radius:14px;padding:16px;cursor:pointer;transition:.15s;font-family:inherit}.run-locally-screen .cta:hover{background:#d4f76a;transform:translateY(-1px)}.learn-screen .setup-libraries-section{margin-top:26px}.learn-screen .setup-libraries-section .seclabel{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--text-2);margin-bottom:10px}.libraries-screen .lib-loading,.libraries-screen .lib-empty-body{font-size:13.5px;color:var(--text-2);line-height:1.6}.libraries-screen .lib-empty{border:.5px solid var(--line);border-radius:12px;background:var(--panel-3);padding:22px;margin-top:8px}.libraries-screen .lib-empty-title{font-size:15px;font-weight:600;color:var(--text);margin-bottom:6px}.libraries-screen .lib-searchbar{margin:4px 0 16px}.libraries-screen .lib-search{width:100%;box-sizing:border-box;font-size:13.5px;font-family:inherit;color:var(--text);background:var(--panel-3);border:.5px solid var(--line);border-radius:10px;padding:10px 14px}.libraries-screen .lib-search:focus{outline:none;border-color:var(--line-2)}.libraries-screen .lib-groups{display:flex;flex-direction:column;gap:12px}.lib-group{border:.5px solid var(--line);border-radius:12px;background:var(--panel-2);overflow:hidden}.lib-group-head{display:flex;align-items:center;gap:10px;width:100%;padding:13px 15px;background:transparent;border:none;cursor:pointer;font-family:inherit;text-align:left}.lib-group-head:hover{background:var(--panel-3)}.lib-group-icon{display:inline-flex;color:var(--text-2)}.lib-group-title{font-size:14px;font-weight:600;color:var(--text)}.lib-group-count{font-size:12px;color:var(--text-2)}.lib-group-path{flex:1;font-family:var(--mono);font-size:11.5px;color:var(--text-3, var(--text-2));text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lib-group-chevron{font-size:12px;color:var(--text-2)}.lib-rows{display:flex;flex-direction:column;border-top:.5px solid var(--line)}.lib-row{display:flex;flex-direction:column;gap:8px;padding:14px 16px}.lib-row+.lib-row{border-top:.5px solid var(--line)}.lib-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.lib-name{font-size:14px;font-weight:600;color:var(--text);font-family:var(--mono)}.lib-version{font-size:12px;font-family:var(--mono);color:var(--text-2)}.lib-kind{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:2px 7px;border-radius:6px;background:var(--panel-3);color:var(--text-2);border:.5px solid var(--line)}.lib-kind.dev{color:#c9a227}.lib-outdated{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:2px 7px;border-radius:6px;background:#d6606029;color:#d66060;border:.5px solid rgba(214,96,96,.4)}.lib-desc{font-size:13px;color:var(--text);line-height:1.55}.lib-desc.muted{color:var(--text-2);font-style:italic}.lib-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--text-2)}.lib-tag{padding:2px 8px;border-radius:6px;background:var(--panel-3);border:.5px solid var(--line)}.lib-docs{color:var(--lime);text-decoration:none}.lib-docs:hover{text-decoration:underline}.learn-screen .setup-addrow{margin-top:22px;padding:16px 18px;border:.5px dashed var(--line-2);border-radius:13px;background:var(--panel-2);display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.learn-screen .setup-addrow-copy{font-size:13px;color:var(--text-3);line-height:1.5;max-width:420px}.learn-screen .setup-addrow-btns{display:flex;gap:10px;flex-shrink:0}.learn-screen .setup-addbtn{font-family:inherit;font-size:13px;font-weight:600;color:var(--text);background:var(--panel-3);border:.5px solid var(--line-2);border-radius:9px;padding:9px 14px;cursor:pointer;transition:.15s;white-space:nowrap}.learn-screen .setup-addbtn:hover{border-color:var(--blue);transform:translateY(-1px)}.learn-screen .setup-addbtn-ask{color:var(--blue);background:var(--blue-soft);border-color:var(--blue-300)}.learn-screen .atf-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:40}.learn-screen .atf-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:41;width:min(440px,calc(100vw - 48px));background:var(--panel);border:.5px solid var(--line-2);border-radius:16px;padding:24px;box-shadow:0 18px 48px #0006}.learn-screen .atf-title{font-size:17px;font-weight:700;color:var(--text)}.learn-screen .atf-lead{font-size:13px;color:var(--text-3);line-height:1.55;margin:8px 0 18px}.learn-screen .atf-field{display:block;margin-bottom:14px}.learn-screen .atf-label{display:block;font-size:12px;font-weight:600;color:var(--text-2);margin-bottom:6px}.learn-screen .atf-optional{font-weight:400;color:var(--text-4)}.learn-screen .atf-input{width:100%;box-sizing:border-box;font-family:inherit;font-size:14px;color:var(--text);background:var(--panel-2);border:.5px solid var(--line-2);border-radius:9px;padding:10px 12px;transition:.15s}.learn-screen .atf-input:focus{outline:none;border-color:var(--blue)}.learn-screen .atf-textarea{resize:vertical;min-height:44px;line-height:1.5}.learn-screen .atf-error{font-size:12.5px;color:var(--amber);margin:-4px 0 12px}.learn-screen .atf-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}.learn-screen .atf-btn{font-family:inherit;font-size:13px;font-weight:600;border-radius:9px;padding:9px 16px;cursor:pointer;transition:.15s;border:.5px solid var(--line-2)}.learn-screen .atf-btn:disabled{opacity:.5;cursor:default}.learn-screen .atf-btn-ghost{color:var(--text-2);background:transparent}.learn-screen .atf-btn-ghost:hover:not(:disabled){background:var(--panel-3)}.learn-screen .atf-btn-primary{color:var(--action-fg);background:var(--action-bg);border-color:transparent}.learn-screen .atf-btn-primary:hover:not(:disabled){transform:translateY(-1px)}.hosting-screen .real-token-label{display:block;font-size:12px;font-weight:600;color:var(--text-2);margin:14px 0 6px}.hosting-screen .real-token-input{width:100%;box-sizing:border-box;padding:10px 12px;font-size:14px;font-family:inherit;color:var(--text-1);background:var(--panel-2);border:1px solid var(--border-1);border-radius:8px;margin-bottom:14px}.hosting-screen .real-token-input:focus{outline:none;border-color:var(--blue-300)}.hosting-screen .auth-btn:disabled{opacity:.5;cursor:not-allowed}.hosting-screen .real-error{background:color-mix(in srgb,var(--red, #e5484d) 12%,transparent);border:1px solid color-mix(in srgb,var(--red, #e5484d) 40%,transparent);border-radius:10px;padding:14px 16px;margin-bottom:16px}.hosting-screen .real-error-title{font-weight:600;color:var(--red, #e5484d);margin-bottom:4px}.hosting-screen .real-error-msg{font-size:13px;color:var(--text-2);word-break:break-word}.hosting-screen .dep-bar-indeterminate{width:40%;height:100%;background:var(--green);border-radius:4px;animation:real-provision-slide 1.1s ease-in-out infinite}@keyframes real-provision-slide{0%{transform:translate(-100%)}to{transform:translate(250%)}}.concept-term-wrap{position:relative;display:inline}.concept-term{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;text-decoration:underline dotted;text-underline-offset:2px;text-decoration-color:var(--accent, #6b8afd)}.concept-term:hover,.concept-term[aria-expanded=true]{color:var(--accent, #6b8afd)}.concept-popover{position:fixed;z-index:1000;display:block;width:300px;max-width:min(300px,80vw);padding:12px 14px;background:var(--surface, #1b1f2a);border:1px solid var(--border, #2c3242);border-radius:10px;box-shadow:0 8px 28px #00000059;text-align:left;white-space:normal;cursor:default}.concept-popover-term{display:block;font-weight:600;font-size:14px;color:var(--text-primary, #e8ebf2)}.concept-popover-cat{display:inline-block;margin:2px 0 6px;font-size:11px;letter-spacing:.02em;text-transform:uppercase;color:var(--text-tertiary, #8a92a6)}.concept-popover-body{display:block}.learn-screen .concepts-nudge{margin:0 0 18px;padding:12px 14px;font-size:13px;line-height:1.6;color:var(--text-secondary, #b6bdcc);background:var(--surface-muted, rgba(107, 138, 253, .08));border:1px solid var(--border, #2c3242);border-radius:10px}.learn-screen .concepts-nudge-link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0;font:inherit;color:var(--accent, #6b8afd);cursor:pointer;text-decoration:underline}.setup-screen{--bg: var(--surface-page);--panel-2: var(--surface-card);--panel-3: var(--surface-raised);--inset: #0d0d0d;--line: var(--line-subtle);--line-2: var(--line-hair);--text: var(--text-strong);--text-2: var(--text-body);--text-3: var(--text-faint);--text-4: var(--text-subtle);--lime: var(--lime-300);--green: var(--green-300);--blue: var(--blue-300);--amber: var(--amber-300);--indigo: var(--indigo-300);--mono: "IBM Plex Mono", monospace;--sans: "IBM Plex Sans", sans-serif;--accent: var(--blue-300);--accent-soft: var(--blue-soft);background:var(--bg);font-family:var(--sans);color:var(--text);-webkit-font-smoothing:antialiased;padding:18px 28px 50px}.setup-screen.accent-blue{--accent: var(--blue-300);--accent-soft: var(--blue-soft)}.setup-screen.accent-amber{--accent: var(--amber-300);--accent-soft: var(--amber-soft)}.setup-screen.accent-green{--accent: var(--green-300);--accent-soft: var(--green-soft)}.setup-screen.accent-indigo{--accent: var(--indigo-300);--accent-soft: var(--indigo-soft)}.setup-screen *,.setup-screen *:before,.setup-screen *:after{box-sizing:border-box}.setup-screen .su-wrap{max-width:760px;margin:0 auto}.setup-screen .su-crumbs{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text-3);max-width:760px;margin:0 auto 18px}.setup-screen .su-crumbs .back,.setup-screen .su-crumbs button{background:none;border:none;cursor:pointer;color:var(--text-3);font:inherit;padding:0}.setup-screen .su-crumbs button:hover{color:var(--text-2)}.setup-screen .su-crumbs .sep{color:var(--text-4)}.setup-screen .su-crumbs b{color:var(--text-2);font-weight:600}.setup-screen .su-shead{display:flex;align-items:flex-start;gap:15px;margin-bottom:20px}.setup-screen .su-badge{width:48px;height:48px;border-radius:13px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent)}.setup-screen .su-title{font-size:22px;font-weight:700;letter-spacing:-.02em;display:flex;align-items:center;gap:11px}.setup-screen .su-chip{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;border-radius:6px;padding:3px 8px;transform:translateY(-2px);display:inline-flex;align-items:center;gap:5px}.setup-screen .su-chip.notset{color:var(--text-3);background:var(--panel-3);border:.5px solid var(--line-2)}.setup-screen .su-chip.connected{color:var(--green);background:var(--green-soft);border:.5px solid color-mix(in srgb,var(--green) 30%,transparent)}.setup-screen .su-via{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-3);font-family:var(--mono);margin-top:4px}.setup-screen .su-via b{color:var(--accent);font-weight:600}.setup-screen .su-lead{font-size:13.5px;color:var(--text-3);line-height:1.5;margin-top:9px}.setup-screen .su-explain{border:.5px solid var(--line);border-radius:16px;background:var(--panel-2);padding:20px 22px;margin-bottom:18px}.setup-screen .su-eh{font-size:14.5px;font-weight:700;letter-spacing:-.01em;display:flex;align-items:center;gap:9px}.setup-screen .su-q{width:22px;height:22px;border-radius:7px;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:13px;flex-shrink:0}.setup-screen .su-lede{font-size:13px;color:var(--text-2);line-height:1.55;margin-top:11px}.setup-screen .su-lede b{color:var(--text);font-weight:600}.setup-screen .su-erows{display:flex;flex-direction:column;gap:2px;margin-top:16px}.setup-screen .su-erow{display:flex;align-items:flex-start;gap:13px;padding:12px 0;border-top:.5px solid var(--line)}.setup-screen .su-en{width:30px;height:30px;border-radius:9px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--panel-3);color:var(--accent)}.setup-screen .su-et{flex:1}.setup-screen .su-et b{font-size:13.5px;font-weight:600}.setup-screen .su-et span{display:block;font-size:12.5px;color:var(--text-3);line-height:1.5;margin-top:2px}.setup-screen .su-et span em{color:var(--text-2);font-style:normal;font-weight:500}.setup-screen .su-why{margin-top:16px;border:.5px solid var(--line);border-radius:13px;background:var(--inset);padding:15px 16px}.setup-screen .su-wh{font-size:12px;font-weight:700;color:var(--text-2);display:flex;align-items:center;gap:8px;margin-bottom:12px}.setup-screen .su-wh svg{color:var(--accent)}.setup-screen .su-whyrow{display:flex;align-items:flex-start;gap:11px}.setup-screen .su-whyrow+.su-whyrow{margin-top:10px}.setup-screen .su-wc{width:18px;height:18px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px}.setup-screen .su-whyrow p{font-size:12.5px;color:var(--text-2);line-height:1.5}.setup-screen .su-whyrow p b{color:var(--text);font-weight:600}.setup-screen .su-connect{border:.5px solid color-mix(in srgb,var(--connect, var(--lime)) 30%,transparent);border-radius:16px;background:linear-gradient(135deg,color-mix(in srgb,var(--connect, var(--lime)) 7%,transparent),color-mix(in srgb,var(--connect, var(--lime)) 1.5%,transparent));padding:20px 22px;margin-bottom:13px}.setup-screen .su-ct{font-size:14.5px;font-weight:700}.setup-screen .su-cd{font-size:12.5px;color:var(--text-3);line-height:1.5;margin-top:5px}.setup-screen .su-cbtn{display:inline-flex;align-items:center;gap:10px;background:var(--connect, var(--lime));color:var(--bg);font-family:var(--sans);font-size:13.5px;font-weight:700;border:none;border-radius:11px;padding:13px 20px;cursor:pointer;transition:.15s;margin-top:16px}.setup-screen .su-cbtn:hover:not(:disabled){filter:brightness(1.08);transform:translateY(-1px)}.setup-screen .su-cbtn:disabled{cursor:default;opacity:.85}.setup-screen .su-reassure{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:14px}.setup-screen .su-reassure span{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;color:var(--text-3)}.setup-screen .su-reassure span svg{color:var(--connect, var(--lime));flex-shrink:0}.setup-screen .su-alt-toggle{display:inline-flex;align-items:center;gap:7px;margin:0 2px 14px;font-family:var(--sans);font-size:12.5px;font-weight:600;color:var(--text-3);background:none;border:none;cursor:pointer;transition:.15s}.setup-screen .su-alt-toggle:hover{color:var(--text-2)}.setup-screen .su-chev{transition:transform .2s;font-size:11px;line-height:1}.setup-screen .su-chev.open{transform:rotate(180deg)}.setup-screen .su-alts{display:flex;flex-direction:column;gap:9px;margin-bottom:22px}.setup-screen .su-altrow{display:flex;align-items:center;gap:13px;border:.5px solid var(--line);border-radius:12px;background:var(--panel-2);padding:12px 14px}.setup-screen .su-altmark{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:800;font-size:16px;color:#fff;font-family:var(--mono)}.setup-screen .su-altbody{flex:1;min-width:0}.setup-screen .su-altname{font-size:13.5px;font-weight:600}.setup-screen .su-altdesc{font-size:12px;color:var(--text-3);line-height:1.45;margin-top:2px}.setup-screen .su-altfact{display:flex;align-items:center;flex-wrap:wrap;font-size:12px;font-weight:600;color:var(--text-2);margin-top:4px}.setup-screen .su-altpick{font-family:var(--sans);font-size:12px;font-weight:600;color:var(--text-2);background:none;border:.5px solid var(--line-2);border-radius:9px;padding:8px 13px;cursor:pointer;white-space:nowrap;transition:.15s}.setup-screen .su-altpick:hover{color:var(--text);border-color:var(--text-3)}.setup-screen .su-altpick.picked{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 50%,transparent)}.setup-screen .su-uplabel{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-4);margin:0 2px 12px}.setup-screen .su-locked{display:flex;flex-direction:column;gap:9px}.setup-screen .su-lrow{display:flex;align-items:center;gap:13px;border:.5px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--panel-2) 50%,transparent);padding:13px 15px;opacity:.62}.setup-screen .su-ln{width:30px;height:30px;border-radius:9px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--panel-3);color:var(--text-4)}.setup-screen .su-lt b{font-size:13.5px;font-weight:600;color:var(--text-2)}.setup-screen .su-lt span{display:block;font-size:12px;color:var(--text-4);line-height:1.45;margin-top:2px}.setup-screen .su-lk{margin-left:auto;color:var(--text-4);flex-shrink:0;display:flex}.setup-screen .su-statusbar,.setup-screen .su-remember,.setup-screen .su-modebar{display:flex;align-items:center;gap:11px;margin:20px 0 24px;padding:11px 14px;border:.5px solid var(--line);border-radius:12px;background:var(--panel-2)}.setup-screen .su-statusbar{border-color:color-mix(in srgb,var(--green) 28%,transparent);background:linear-gradient(120deg,color-mix(in srgb,var(--green) 6%,transparent),transparent 70%)}.setup-screen .su-remember{background:linear-gradient(120deg,color-mix(in srgb,var(--green) 6%,transparent),transparent 70%)}.setup-screen .su-widget-ic{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--green-soft);color:var(--green)}.setup-screen .su-modebar .su-widget-ic{background:var(--amber-soft);color:var(--amber)}.setup-screen .su-widget-body{flex:1;min-width:0}.setup-screen .su-widget-body b{font-size:13px;font-weight:600}.setup-screen .su-widget-body span{display:block;font-size:11.5px;color:var(--text-3);margin-top:1px}.setup-screen .su-widget-body code{font-family:var(--mono);color:var(--green)}.setup-screen .su-rdot{width:8px;height:8px;border-radius:50%;background:var(--green);flex-shrink:0;box-shadow:0 0 0 4px color-mix(in srgb,var(--green) 12%,transparent)}.setup-screen .su-ago{margin-left:auto;flex-shrink:0;font-family:var(--mono);font-size:10.5px;color:var(--text-4);white-space:nowrap}.setup-screen .su-chg{font-size:12px;color:var(--text-3);cursor:pointer;background:none;border:.5px solid var(--line-2);border-radius:8px;padding:7px 12px;font-family:var(--sans);flex-shrink:0}.setup-screen .su-chg:hover{color:var(--text);border-color:var(--text-3)}.setup-screen .su-seg{display:inline-flex;background:var(--inset);border:.5px solid var(--line);border-radius:10px;padding:3px;gap:3px;flex-shrink:0}.setup-screen .su-seg button{font-family:var(--sans);font-size:12px;font-weight:600;color:var(--text-3);background:none;border:none;cursor:pointer;padding:7px 13px;border-radius:7px;transition:.15s}.setup-screen .su-seg button.on{background:var(--panel-3);color:var(--text);box-shadow:inset 0 0 0 .5px var(--line-2)}.setup-screen .su-seg button.on.live{color:var(--green)}.setup-screen .su-seclabel{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-4);margin:0 2px 13px}.setup-screen .su-steps{position:relative;padding-left:6px}.setup-screen .su-step{position:relative;display:flex;gap:16px;padding-bottom:22px}.setup-screen .su-step:last-child{padding-bottom:0}.setup-screen .su-rail{position:relative;flex-shrink:0;display:flex;flex-direction:column;align-items:center}.setup-screen .su-node{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:12px;font-weight:700;flex-shrink:0;z-index:1}.setup-screen .su-node.done{background:var(--lime);color:var(--bg)}.setup-screen .su-node.todo{background:var(--panel-3);color:var(--text-2);border:.5px solid var(--line-2)}.setup-screen .su-line{flex:1;width:1.5px;background:var(--line-2);margin:4px 0}.setup-screen .su-step:last-child .su-line{display:none}.setup-screen .su-scon{flex:1;min-width:0;padding-top:3px}.setup-screen .su-stitle{font-size:14.5px;font-weight:600;display:flex;align-items:center;gap:9px}.setup-screen .su-pill{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;padding:2px 7px;border-radius:6px;color:var(--green);background:var(--green-soft)}.setup-screen .su-sdesc{font-size:12.5px;color:var(--text-3);line-height:1.5;margin-top:5px}.setup-screen .su-methods{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.setup-screen .su-mchip{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:500;color:var(--text-2);background:var(--panel-2);border:.5px solid var(--line);border-radius:10px;padding:9px 12px;cursor:pointer;transition:.15s;font-family:var(--sans)}.setup-screen .su-mchip:hover{border-color:var(--line-2)}.setup-screen .su-mchip .su-ck{width:16px;height:16px;border-radius:5px;border:1.5px solid var(--line-2);display:flex;align-items:center;justify-content:center;flex-shrink:0}.setup-screen .su-mchip .su-ck svg{opacity:0}.setup-screen .su-mchip.on{border-color:color-mix(in srgb,var(--accent) 50%,transparent);background:color-mix(in srgb,var(--accent) 8%,transparent);color:var(--text)}.setup-screen .su-mchip.on .su-ck{background:var(--accent);border-color:var(--accent);color:var(--bg)}.setup-screen .su-mchip.on .su-ck svg{opacity:1}.setup-screen .su-acct{display:flex;align-items:center;gap:11px;margin-top:11px;border:.5px solid var(--line);border-radius:11px;background:var(--panel-2);padding:11px 13px}.setup-screen .su-av{width:30px;height:30px;border-radius:8px;background:var(--accent);color:var(--bg);font-weight:700;font-size:13px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:var(--mono)}.setup-screen .su-ainfo{flex:1;min-width:0}.setup-screen .su-ainfo b{font-size:13px;font-weight:600}.setup-screen .su-ainfo span{display:block;font-size:11.5px;color:var(--text-3);font-family:var(--mono);margin-top:1px}.setup-screen .su-field{margin-top:11px;border:.5px solid var(--line);border-radius:11px;background:var(--panel-2);padding:13px 14px;font-size:13.5px;color:var(--text);line-height:1.55}.setup-screen .su-edit{float:right;font-size:12px;color:var(--blue);cursor:pointer;margin-left:12px}.setup-screen .su-field b{font-weight:600}.setup-screen .su-examples{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}.setup-screen .su-ex{font-size:11.5px;color:var(--text-3);background:var(--bg);border:.5px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer;transition:.15s;font-family:var(--sans)}.setup-screen .su-ex:hover{border-color:var(--line-2);color:var(--text-2)}.setup-screen .su-ex.added{border-color:color-mix(in srgb,var(--blue) 50%,transparent);color:var(--blue)}.setup-screen .su-plus{color:var(--blue);margin-right:5px;font-weight:600}.setup-screen .su-builds{margin-top:12px;display:flex;flex-direction:column;gap:8px}.setup-screen .su-bitem{display:flex;align-items:flex-start;gap:11px;border:.5px solid var(--line);border-radius:11px;background:var(--panel-2);padding:12px 14px}.setup-screen .su-bx{width:22px;height:22px;border-radius:7px;background:var(--lime-soft);color:var(--lime);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px}.setup-screen .su-bmain{flex:1;min-width:0}.setup-screen .su-bmain b{font-size:13.5px;font-weight:600}.setup-screen .su-bmain span{display:block;font-size:12px;color:var(--text-3);line-height:1.45;margin-top:2px}.setup-screen .su-where{margin-left:auto;flex-shrink:0;font-family:var(--mono);font-size:10.5px;color:var(--text-4);border:.5px solid var(--line);border-radius:6px;padding:3px 7px;white-space:nowrap;align-self:center}.setup-screen .su-learn{border:.5px solid var(--line);border-radius:14px;background:var(--panel-2);padding:15px 16px;margin-bottom:24px}.setup-screen .su-lhd{display:flex;align-items:center;gap:9px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--amber);margin-bottom:9px}.setup-screen .su-learn p{font-size:13px;color:var(--text-2);line-height:1.55}.setup-screen .su-learn p+p{margin-top:8px}.setup-screen .su-learn b{color:var(--text);font-weight:600}.setup-screen .su-note{display:flex;gap:11px;margin-top:16px;border:.5px solid color-mix(in srgb,var(--note-accent, var(--blue)) 28%,transparent);background:linear-gradient(120deg,color-mix(in srgb,var(--note-accent, var(--blue)) 6%,transparent),transparent 70%);border-radius:12px;padding:13px 15px}.setup-screen .su-note svg{color:var(--note-accent, var(--blue));flex-shrink:0;margin-top:1px}.setup-screen .su-note p{font-size:12.5px;color:var(--text-2);line-height:1.5}.setup-screen .su-note p b{color:var(--note-accent, var(--blue))}.setup-screen .su-foot{display:flex;align-items:center;gap:14px;margin-top:24px;padding-top:20px;border-top:.5px solid var(--line)}.setup-screen .su-cta{display:inline-flex;align-items:center;gap:9px;background:var(--lime);color:var(--bg);font-family:var(--sans);font-size:13.5px;font-weight:700;border:none;border-radius:11px;padding:13px 19px;cursor:pointer;transition:.15s;white-space:nowrap}.setup-screen .su-cta:hover:not(:disabled){filter:brightness(1.06);transform:translateY(-1px)}.setup-screen .su-cta:disabled{cursor:default}.setup-screen .su-ar{font-size:16px;margin-top:-1px}.setup-screen .su-fnote{font-size:12px;color:var(--text-3);line-height:1.45}.setup-screen .su-fnote b{color:var(--text-2)}@keyframes su-spin{to{transform:rotate(360deg)}}.setup-screen .su-spin{animation:su-spin .8s linear infinite}.concepts-glossary .concept-search{width:100%;box-sizing:border-box;margin:4px 0 16px;padding:10px 12px;font:inherit;font-size:14px;color:var(--text-primary, #e8ebf2);background:var(--surface, #1b1f2a);border:1px solid var(--border, #2c3242);border-radius:10px}.concepts-glossary .concept-search:focus{outline:none;border-color:var(--accent, #6b8afd)}.concepts-glossary .concept-row{display:block}.concepts-glossary .concept-row .trow{width:100%}.concepts-glossary .concept-row-body{padding:0 16px 14px;margin-top:-4px}.concepts-glossary .concept-empty{padding:24px 4px;color:var(--text-tertiary, #8a92a6);font-size:14px}.xsvc{display:flex;flex-direction:column;min-height:100%;background:transparent;color:var(--text-body, #aaaaaa);font-family:IBM Plex Sans,system-ui,sans-serif}.xsvc-scroll{flex:1;overflow-y:auto;padding:26px 10% 40px}.xsvc-crumbs{margin-bottom:14px}.xsvc-back{background:none;border:0;padding:0;cursor:pointer;font:inherit;font-size:12.5px;color:var(--text-faint, #6b6b6b)}.xsvc-back:hover{color:var(--text-body, #aaaaaa)}.xsvc-head{display:block}.xsvc-head h1{font-size:26px;font-weight:700;color:var(--text-strong, #f2f2f2);letter-spacing:-.02em;margin:0}.xsvc-sub{font-size:13.5px;color:var(--text-faint, #6b6b6b);margin:7px 0 0;max-width:54ch}.xsvc-headbtn{font:inherit;font-size:12.5px;font-weight:600;color:var(--text-body, #aaaaaa);background:var(--surface-raised, #1c1c1c);border:.5px solid var(--line-subtle, rgba(255, 255, 255, .08));border-radius:9px;padding:9px 14px;cursor:pointer;white-space:nowrap}.xsvc-headbtn:hover{border-color:var(--line-hair, rgba(255, 255, 255, .12));color:var(--text-strong, #f2f2f2)}.xsvc-groups{margin-top:26px}.xsvc-group{margin-bottom:24px}.xsvc-group-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:11px}.xsvc-seclabel{font-family:IBM Plex Mono,ui-monospace,monospace;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-subtle, #4a4a4a)}.xsvc-seccount{font-size:11.5px;color:var(--text-subtle, #4a4a4a);font-variant-numeric:tabular-nums}.xsvc-rows{display:flex;flex-direction:column;gap:9px}.xsvc-row{display:flex;align-items:center;gap:14px;border:.5px solid var(--line-subtle, rgba(255, 255, 255, .08));border-radius:14px;padding:14px 16px;background:var(--surface-card, #161616);transition:.16s;cursor:pointer}.xsvc-row:hover{border-color:var(--line-hair, rgba(255, 255, 255, .12));background:var(--surface-raised, #1c1c1c);transform:translateY(-1px)}.xsvc-row.attn{border-color:#ef9f2766;background:linear-gradient(150deg,#ef9f270f,#ef9f2703)}.xsvc-tile{width:40px;height:40px;border-radius:11px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:13px;font-weight:600}.xsvc-tile.t-lime{background:var(--lime-soft, rgba(199, 240, 74, .15));color:var(--lime-300, #c7f04a)}.xsvc-tile.t-blue{background:var(--blue-soft, rgba(133, 183, 235, .13));color:var(--blue-300, #85b7eb)}.xsvc-tile.t-green{background:var(--green-soft, rgba(155, 211, 90, .13));color:var(--green-300, #9bd35a)}.xsvc-tile.t-amber{background:var(--amber-soft, rgba(239, 159, 39, .13));color:var(--amber-300, #ef9f27)}.xsvc-tile.t-indigo{background:var(--indigo-soft, rgba(139, 133, 255, .13));color:var(--indigo-300, #8b85ff)}.xsvc-rmain{min-width:0;flex:1}.xsvc-rname{font-size:14.5px;font-weight:600;color:var(--text-strong, #f2f2f2);display:flex;align-items:center;gap:9px;flex-wrap:wrap}.xsvc-rdesc{font-size:12.5px;color:var(--text-faint, #6b6b6b);margin-top:3px}.xsvc-rright{display:flex;align-items:center;gap:16px;flex-shrink:0}.xsvc-rmeta{text-align:right;line-height:1.3}.xsvc-rmeta .big{font-size:13px;font-weight:600;color:var(--text-strong, #f2f2f2);font-variant-numeric:tabular-nums}.xsvc-rmeta .lil{font-size:11px;color:var(--text-faint, #6b6b6b);margin-top:2px}.xsvc-arr{color:var(--text-subtle, #4a4a4a);font-size:15px;transition:.16s}.xsvc-row:hover .xsvc-arr{color:var(--text-body, #aaaaaa);transform:translate(2px)}.xsvc-tag{font-family:IBM Plex Mono,ui-monospace,monospace;font-size:10px;font-weight:500;padding:2.5px 7px;border-radius:6px;text-transform:uppercase}.xsvc-tag.set{background:var(--green-soft, rgba(155, 211, 90, .13));color:var(--green-300, #9bd35a)}.xsvc-tag.env{background:var(--lime-soft, rgba(199, 240, 74, .15));color:var(--lime-300, #c7f04a);text-transform:none}.xsvc-tag.miss{background:var(--amber-soft, rgba(239, 159, 39, .13));color:var(--amber-300, #ef9f27)}.xsvc-addkey{font:inherit;font-size:11.5px;font-weight:600;color:#0a0a0a;background:var(--amber-300, #ef9f27);border:0;border-radius:8px;padding:6px 11px;cursor:pointer}.xsvc-empty-wrap{margin-top:30px;display:flex;justify-content:center}.xsvc-empty-card{width:100%;max-width:700px;text-align:center;padding:42px 34px 28px;border:.5px solid var(--line-subtle, rgba(255, 255, 255, .08));border-radius:20px;background:radial-gradient(120% 120% at 50% -10%,rgba(199,240,74,.05),transparent 60%),var(--surface-panel, #111111)}.xsvc-empty-mark{width:52px;height:52px;border-radius:14px;margin:0 auto 18px;display:flex;align-items:center;justify-content:center;background:var(--lime-soft, rgba(199, 240, 74, .15));color:var(--lime-300, #c7f04a)}.xsvc-empty-card h2{font-size:20px;font-weight:700;color:var(--text-strong, #f2f2f2);margin:0 0 10px}.xsvc-empty-card p{font-size:13.5px;color:var(--text-body, #aaaaaa);margin:0 auto;max-width:50ch}.xsvc-chat-hero{margin-top:26px;text-align:left}.xsvc-lead{font-family:IBM Plex Mono,ui-monospace,monospace;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--lime-300, #c7f04a);display:flex;align-items:center;gap:7px;margin-bottom:11px}.xsvc-composer{display:flex;align-items:center;gap:10px;width:100%;font:inherit;text-align:left;cursor:pointer;background:var(--surface-card, #161616);border:.5px solid var(--line-hair, rgba(255, 255, 255, .12));border-radius:13px;padding:11px 12px 11px 15px}.xsvc-composer:hover{border-color:var(--lime-300, #c7f04a)}.xsvc-composer .ph{flex:1;font-size:13.5px;color:var(--text-faint, #6b6b6b)}.xsvc-composer .send{width:32px;height:32px;border-radius:9px;background:var(--lime-300, #c7f04a);color:#0a0a0a;display:flex;align-items:center;justify-content:center;flex-shrink:0}.xsvc-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:13px}.xsvc-chip{font:inherit;font-size:12px;color:var(--text-body, #aaaaaa);background:var(--surface-raised, #1c1c1c);border:.5px solid var(--line-subtle, rgba(255, 255, 255, .08));border-radius:999px;padding:7px 13px;cursor:pointer}.xsvc-chip:hover{border-color:var(--line-hair, rgba(255, 255, 255, .12));color:var(--text-strong, #f2f2f2)}.xsvc-chip .g{color:var(--lime-300, #c7f04a);font-family:IBM Plex Mono,ui-monospace,monospace;margin-right:5px}.xsvc-bottombar{flex-shrink:0;border-top:.5px solid var(--line-subtle, rgba(255, 255, 255, .08));background:linear-gradient(180deg,rgba(199,240,74,.02),transparent),var(--surface-panel, #111111);padding:12px clamp(18px,6%,64px) 14px}.xsvc-bb-sugg{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:10px}.xsvc-bb-sugg .xsvc-chip{font-size:11.5px}.xsvc-bb-composer{display:flex;align-items:center;gap:11px;width:100%;font:inherit;text-align:left;cursor:pointer;background:var(--surface-card, #161616);border:.5px solid var(--line-hair, rgba(255, 255, 255, .12));border-radius:12px;padding:10px 11px 10px 15px}.xsvc-bb-composer:hover{border-color:var(--lime-300, #c7f04a)}.xsvc-bb-composer .ai{width:24px;height:24px;border-radius:7px;background:var(--lime-soft, rgba(199, 240, 74, .15));color:var(--lime-300, #c7f04a);display:flex;align-items:center;justify-content:center;flex-shrink:0}.xsvc-bb-composer .ph{flex:1;font-size:13.5px;color:var(--text-faint, #6b6b6b)}.xsvc-bb-composer .send{width:30px;height:30px;border-radius:9px;background:var(--lime-300, #c7f04a);color:#0a0a0a;display:flex;align-items:center;justify-content:center;flex-shrink:0}.xsvc-connected{position:relative;display:flex;flex-direction:column;min-height:100%;height:100%}.xsvc-connected>.xsvc{flex:1}.xsvc-chatdock{position:absolute;left:0;right:0;bottom:0;z-index:20;background:var(--surface-page, #0a0a0a);border-top:.5px solid var(--line-hair, rgba(255, 255, 255, .12));padding:10px 10% 16px;box-shadow:0 -18px 40px #0000008c}.xsvc-chatdock-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-family:IBM Plex Sans,system-ui,sans-serif;font-size:12.5px;color:var(--text-faint, #6b6b6b)}.xsvc-chatdock-close{background:none;border:0;padding:4px 6px;cursor:pointer;font:inherit;color:var(--text-faint, #6b6b6b)}.xsvc-chatdock-close:hover{color:var(--text-body, #aaaaaa)}.xsvc-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:16px}.xsvc-sortlbl{font-size:12px;color:var(--text-faint, #6b6b6b)}.xsvc-seg{display:inline-flex;border:.5px solid var(--line-hair, rgba(255, 255, 255, .12));border-radius:9px;overflow:hidden}.xsvc-seg button{font:inherit;font-size:12.5px;padding:5px 14px;background:transparent;color:var(--text-faint, #6b6b6b);border:0;cursor:pointer}.xsvc-seg button:hover{color:var(--text-body, #aaaaaa)}.xsvc-seg button.on{background:var(--lime-soft, rgba(199, 240, 74, .15));color:var(--lime-300, #c7f04a)}.xsvc-tile svg{display:block}.xsvc-rowwrap{border-radius:14px}.xsvc-arr.down{color:var(--lime-300, #c7f04a)}.xsvc-detail{padding:12px 16px 14px 70px;border:.5px solid var(--line-subtle, rgba(255, 255, 255, .08));border-top:0;border-radius:0 0 14px 14px;background:var(--surface-card, #161616);display:flex;flex-direction:column;gap:8px}.xsvc-detrow{display:flex;align-items:center;gap:12px;font-size:12.5px}.xsvc-detlabel{min-width:92px;color:var(--text-faint, #6b6b6b)}.xsvc-detval{color:var(--text-body, #aaaaaa)}.xsvc-detval.mono,.xsvc-keyval .mono{font-family:IBM Plex Mono,ui-monospace,monospace;color:var(--lime-300, #c7f04a);font-size:12px;letter-spacing:.02em}.xsvc-keyval{display:inline-flex;align-items:center;gap:10px;font:inherit;background:var(--surface-page, #0a0a0a);border:.5px solid var(--line-hair, rgba(255, 255, 255, .12));border-radius:8px;padding:5px 10px;cursor:pointer}.xsvc-keyval:hover{border-color:var(--lime-300, #c7f04a)}.xsvc-keyval .eye{display:flex;color:var(--text-faint, #6b6b6b)}.xsvc-keyval:hover .eye{color:var(--lime-300, #c7f04a)}.xsvc-titlerow{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}.xsvc-count{font-size:13px;color:var(--text-faint, #6b6b6b);font-variant-numeric:tabular-nums}.xsvc-cinput{flex:1;min-width:0;font:inherit;font-size:13.5px;color:var(--text-strong, #f2f2f2);background:transparent;border:0;outline:none}.xsvc-cinput::placeholder{color:var(--text-faint, #6b6b6b)}.xsvc-composer .send,.xsvc-bb-composer .send{border:0;cursor:pointer}.xsvc-composer,.xsvc-bb-composer{cursor:text}.hosting-screen .sd-callout{display:flex;gap:12px;padding:13px 15px;border-radius:11px;background:var(--surface-card);border:1px solid var(--line-subtle);border-left-width:3px;margin:14px 0}.hosting-screen .sd-callout.cost{border-left-color:var(--amber-300)}.hosting-screen .sd-callout.wait{border-left-color:var(--blue-300)}.hosting-screen .sd-callout.size{border-left-color:var(--lime-400)}.hosting-screen .sd-callout-ic{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:7px;background:var(--surface-raised);font-size:14px;font-weight:700}.hosting-screen .sd-callout-t{font-size:14px;font-weight:600;margin-bottom:2px}.hosting-screen .sd-callout-b{font-size:13.5px;line-height:1.55;color:var(--text-body)}.hosting-screen .sd-store{display:flex;gap:13px;padding:15px;border-radius:12px;background:var(--surface-card);border:1px solid var(--line-subtle);margin-bottom:12px}.hosting-screen .sd-store-mark{flex:none;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:10px;font-size:20px;color:#fff}.hosting-screen .sd-store.ios .sd-store-mark{background:linear-gradient(140deg,#555,#111)}.hosting-screen .sd-store.android .sd-store-mark{background:linear-gradient(140deg,#3ddc84,#14a05a)}.hosting-screen .sd-store-top{display:flex;align-items:center;gap:10px;margin-bottom:4px}.hosting-screen .sd-store-name{font-size:15px;font-weight:600}.hosting-screen .sd-store-badge{font-size:11.5px;padding:2px 8px;border-radius:999px;background:var(--surface-raised);color:var(--text-body);border:1px solid var(--line-subtle)}.hosting-screen .sd-store-desc{font-size:13.5px;line-height:1.55;color:var(--text-body)}.hosting-screen .sd-store-enroll{display:inline-flex;align-items:center;margin-top:10px;padding:6px 12px;border-radius:8px;font-size:13px;font-weight:600;text-decoration:none;color:var(--accent-strong, #2563eb);background:var(--surface-raised);border:1px solid var(--line-subtle)}.hosting-screen .sd-store-enroll:hover{text-decoration:underline}.hosting-screen .sd-checks{display:flex;flex-direction:column;gap:9px;margin:6px 0}.hosting-screen .sd-check{display:flex;gap:9px;font-size:14px;line-height:1.5;color:var(--text-body)}.hosting-screen .sd-check svg{flex:none;margin-top:3px}.hosting-screen .sd-check b{color:var(--text-strong)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as r,M as a,r as c}from"./markdown-
|
|
1
|
+
import{j as r,M as a,r as c}from"./markdown-C9tbsVHX.js";const l={color:"var(--text-secondary)",fontSize:"var(--text-sm, 14px)",lineHeight:1.6},s={...l,fontSize:"var(--text-xs, 12px)",lineHeight:1.5};function m({children:i,variant:d="default"}){const o=d==="compact",t=o?"0.375rem":"0.5rem";return r.jsx("div",{className:"markdown-content",style:o?s:l,children:r.jsx(a,{remarkPlugins:[c],components:{h1:({children:e})=>r.jsx("h1",{style:{fontSize:o?"1rem":"1.125rem",fontWeight:600,color:"var(--text-primary)",margin:`${t} 0`},children:e}),h2:({children:e})=>r.jsx("h2",{style:{fontSize:o?"0.875rem":"1rem",fontWeight:600,color:"var(--text-primary)",margin:`${t} 0`},children:e}),h3:({children:e})=>r.jsx("h3",{style:{fontSize:o?"0.8125rem":"0.875rem",fontWeight:600,color:"var(--text-primary)",margin:`${t} 0`},children:e}),p:({children:e})=>r.jsx("p",{style:{margin:`${t} 0`},children:e}),ul:({children:e})=>r.jsx("ul",{style:{margin:`${t} 0`,paddingLeft:"1.25rem",listStyleType:"disc"},children:e}),ol:({children:e})=>r.jsx("ol",{style:{margin:`${t} 0`,paddingLeft:"1.25rem",listStyleType:"decimal"},children:e}),li:({children:e})=>r.jsx("li",{style:{marginBottom:"0.125rem"},children:e}),code:({className:e,children:n})=>(e==null?void 0:e.includes("language-"))?r.jsx("code",{className:e,style:{fontFamily:"'IBM Plex Mono', monospace",fontSize:"0.8125rem"},children:n}):r.jsx("code",{style:{fontFamily:"'IBM Plex Mono', monospace",fontSize:"0.85em",background:"var(--bg-input)",padding:"0.1em 0.35em",borderRadius:"3px",color:"var(--accent-orange)"},children:n}),pre:({children:e})=>r.jsx("pre",{style:{background:"var(--bg-input)",borderRadius:"6px",padding:o?"0.5rem":"0.75rem",margin:`${t} 0`,overflowX:"auto",fontSize:"0.8125rem",lineHeight:1.5,border:"1px solid var(--border-subtle)"},children:e}),a:({href:e,children:n})=>r.jsx("a",{href:e,style:{color:"var(--accent-blue)",textDecoration:"underline",textUnderlineOffset:"2px"},target:"_blank",rel:"noopener noreferrer",children:n}),strong:({children:e})=>r.jsx("strong",{style:{fontWeight:600,color:"var(--text-primary)"},children:e}),blockquote:({children:e})=>r.jsx("blockquote",{style:{borderLeft:"3px solid var(--accent-blue)",paddingLeft:"0.75rem",margin:`${t} 0`,color:"var(--text-muted)",fontStyle:"italic"},children:e}),table:({children:e})=>r.jsx("div",{style:{overflowX:"auto",margin:`${t} 0`},children:r.jsx("table",{style:{borderCollapse:"collapse",width:"100%",fontSize:"0.8125rem"},children:e})}),th:({children:e})=>r.jsx("th",{style:{borderBottom:"2px solid var(--border-default)",padding:"0.375rem 0.5rem",textAlign:"left",fontWeight:600,color:"var(--text-primary)"},children:e}),td:({children:e})=>r.jsx("td",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"0.375rem 0.5rem"},children:e})},children:i})})}const p=Object.freeze(Object.defineProperty({__proto__:null,Markdown:m},Symbol.toStringTag,{value:"Module"}));export{m as M,p as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e}from"./markdown-C9tbsVHX.js";import{b as o}from"./react-nrLBr15I.js";import{u as se}from"./useServerIdentity-B7rI0u3O.js";function ce(t){return t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function le(t){if(!t)return{base:null,sep:"/"};const r=t.lastIndexOf("/"),a=t.lastIndexOf("\\"),n=Math.max(r,a);if(n<0)return{base:null,sep:"/"};const c=n===a?"\\":"/";return{base:t.slice(0,n),sep:c}}function B({suggestedNewProjectPath:t,creating:r=!1,createError:a=null,onCreate:n,onClose:c}){const[i,x]=o.useState(""),[l,f]=o.useState(""),j=o.useRef(!1),{base:y,sep:m}=le(t),p=y?`${y}${m}`:"",w=`${p}${ce(i)}`,g=j.current?l:w;o.useEffect(()=>{const b=S=>{S.key==="Escape"&&!r&&c()};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[r,c]);const h=b=>{j.current=!0,f(b)},N=()=>{const b=i.trim(),S=g.trim();b.length>0&&S.length>0&&!r&&n(S,b)},P=i.trim().length>0&&!r;return e.jsx("div",{role:"presentation",onClick:()=>{r||c()},className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 px-6 backdrop-blur-sm",children:e.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"Create your first project",onClick:b=>b.stopPropagation(),className:"w-full max-w-md rounded-xl border border-[var(--border-default)] bg-[var(--bg-elevated,#141414)] p-6 text-[var(--text-primary)] shadow-2xl",children:[e.jsx("h2",{className:"text-lg font-semibold text-[var(--text-primary)]",children:"Create your first project"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--text-muted)]",children:"Name your project and choose where it lives. CodeYam will scaffold it and walk you through the rest."}),e.jsxs("label",{className:"mt-5 block text-xs font-medium text-[var(--text-secondary)]",children:["Project name",e.jsx("input",{type:"text",autoFocus:!0,value:i,onChange:b=>x(b.target.value),onKeyDown:b=>{b.key==="Enter"&&N()},placeholder:"My First App","aria-label":"Project name",className:"mt-1 w-full rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-3 py-2 text-sm font-normal text-[var(--text-primary)] placeholder:text-[var(--text-dim)] focus:border-[var(--accent-active)] focus:outline-none"})]}),e.jsxs("label",{className:"mt-4 block text-xs font-medium text-[var(--text-secondary)]",children:["Location",e.jsx("input",{type:"text",value:g,onChange:b=>h(b.target.value),onKeyDown:b=>{b.key==="Enter"&&N()},placeholder:p||"/path/to/new/project","aria-label":"Project location",className:"mt-1 w-full rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-3 py-2 font-mono text-sm font-normal text-[var(--text-primary)] placeholder:text-[var(--text-dim)] focus:border-[var(--accent-active)] focus:outline-none"})]}),a&&e.jsx("div",{className:"mt-3 whitespace-pre-line text-xs text-[var(--accent-red)]",children:a}),e.jsxs("div",{className:"mt-6 flex items-center justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:c,disabled:r,className:"rounded border border-[var(--border-default)] px-4 py-2 text-sm text-[var(--text-secondary)] transition hover:text-[var(--text-primary)] disabled:cursor-not-allowed disabled:opacity-50",children:"Cancel"}),e.jsx("button",{type:"button",onClick:N,disabled:!P,className:"rounded bg-[var(--accent-active)] px-4 py-2 text-sm font-semibold text-[var(--bg-deep)] transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40",children:r?"Creating…":"Create Project"})]})]})})}const fe=Object.freeze(Object.defineProperty({__proto__:null,CreateProjectModal:B},Symbol.toStringTag,{value:"Module"}));function R({projects:t,onClone:r,cloningRepoUrl:a=null,cloneError:n=null,defaultOpen:c=!1}){const[i,x]=o.useState(c),l=i||a!==null||n!==null;return e.jsxs("div",{className:"mt-6",children:[e.jsxs("button",{type:"button",onClick:()=>x(f=>!f),"aria-expanded":l,className:"flex w-full items-center justify-between rounded-lg border border-[var(--border-default)] bg-[var(--bg-card)] px-4 py-3 text-left transition hover:border-[var(--accent-active)]",children:[e.jsx("span",{className:"text-sm font-medium text-[var(--text-primary)]",children:"Open Source Projects"}),e.jsx("span",{className:"text-xs text-[var(--text-dim)]",children:l?"▾":"▸"})]}),l&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-2 px-1 text-xs text-[var(--text-muted)]",children:"Clone one of codeyam's showcase apps and open it in the editor — nothing to configure."}),e.jsx("ul",{className:"mt-2 flex flex-col gap-3",children:t.map(f=>e.jsx(I,{project:f,busy:a===f.repoUrl,onClone:r},f.slug))}),n&&e.jsx("div",{className:"mt-3 whitespace-pre-line rounded-lg border border-[var(--accent-red)]/40 bg-[var(--bg-card)] px-4 py-3 font-mono text-xs text-[var(--accent-red)]",children:n})]})]})}function I({project:t,busy:r,onClone:a}){const{name:n,description:c,repoUrl:i,thumbnail:x}=t;return e.jsxs("li",{className:"flex items-center justify-between gap-4 rounded-lg border border-[var(--border-default)] bg-[var(--bg-card)] px-4 py-3",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx($,{src:x,name:n,size:"h-24 w-20"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate font-medium text-[var(--text-primary)]",children:n}),e.jsx("div",{className:"mt-1 text-xs text-[var(--text-muted)]",children:c})]})]}),e.jsx("button",{type:"button",disabled:r,onClick:()=>a(i),className:"shrink-0 rounded bg-[var(--accent-active)] px-3 py-1.5 text-sm font-medium text-[var(--bg-deep)] transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40",children:r?"Cloning…":"Clone & Open"})]})}const he=Object.freeze(Object.defineProperty({__proto__:null,OpenSourceProjectRow:I,OpenSourceProjectsSection:R},Symbol.toStringTag,{value:"Module"})),ie=[{slug:"tabcommand",name:"TabCommand",description:"A Chrome extension dashboard to control your browser (React + Vite, Manifest V3).",repoUrl:"https://github.com/codeyam-ai/tabcommand",thumbnail:"/open-source/tabcommand.png",thumbnailSource:{repo:"tabcommand",scenario:"home-grouped",dimension:"desktop"}},{slug:"codeyam-counter",name:"CodeYam Counter",description:"A native SwiftUI iOS counter app with a shared AppCore SwiftPM library.",repoUrl:"https://github.com/codeyam-ai/codeyam-counter",thumbnail:"/open-source/codeyam-counter.png",thumbnailSource:{repo:"codeyam-counter",scenario:"counter-active-count",dimension:"iphone-16"}},{slug:"el-carot",name:"El Carot",description:"AI-powered tarot readings through a one-of-a-kind deck (Next.js + Prisma + Anthropic API).",repoUrl:"https://github.com/codeyam-ai/el-carot",thumbnail:"/open-source/el-carot.png",thumbnailSource:{repo:"el-carot",scenario:"landing-english",dimension:"mobile"}}];function U(t){const r=t.filter(n=>n.isCurrent),a=t.filter(n=>!n.isCurrent);return[...r,...a]}function z({projects:t,loading:r=!1,error:a=null,openError:n=null,busyPath:c=null,onOpen:i,onStop:x,onScan:l,scanning:f=!1,scanResult:j=null,scanError:y=null,onCreate:m,creating:p=!1,createError:w=null,suggestedNewProjectPath:g=null,bootstrapping:h=!1,onClone:N,cloningRepoUrl:P=null,cloneError:b=null}){const[S,_]=o.useState(!1),{version:k}=se(),F=!r&&!a&&t.length===0,E=!!m&&!(F&&m);return e.jsxs("div",{className:"flex min-h-screen flex-col items-center bg-[var(--bg-deep)] px-6 py-16 text-[var(--text-primary)]",children:[e.jsxs("div",{className:"w-full max-w-2xl",children:[e.jsx(J,{}),E&&m&&e.jsx(D,{onCreate:m,creating:p,createError:w,suggestedNewProjectPath:g}),l&&e.jsx(K,{onScan:l,scanning:f,scanResult:j,scanError:y}),h&&e.jsx(Y,{}),n&&e.jsx(X,{message:n}),r?e.jsx(G,{}):a?e.jsx(Q,{message:a}):t.length===0?e.jsx(Z,{onScan:l,scanning:f,onCreateFirst:m?()=>_(!0):void 0}):e.jsx("ul",{className:"flex flex-col gap-3",children:U(t).map(O=>e.jsx(H,{project:O,busy:c===O.path,onOpen:i,onStop:x},O.path))}),N&&e.jsx(R,{projects:ie,onClone:N,cloningRepoUrl:P,cloneError:b,defaultOpen:t.length===0}),k&&e.jsxs("div",{"data-testid":"launcher-version",className:"mt-8 text-center text-xs text-[var(--text-dim)]",children:["codeyam-editor v",k]})]}),S&&m&&e.jsx(B,{suggestedNewProjectPath:g,creating:p,createError:w,onCreate:m,onClose:()=>_(!1)})]})}function H({project:t,busy:r,onOpen:a,onStop:n}){const{name:c,path:i,exists:x,running:l,controlPort:f,tests:j,thumbnailUrl:y,isCurrent:m,protected:p}=t;return e.jsxs("li",{className:`flex items-center justify-between gap-4 rounded-lg border bg-[var(--bg-card)] px-4 py-3 ${m?"border-[var(--accent-active)]":"border-[var(--border-default)]"} ${x?"":"opacity-60"}`,children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx($,{src:x&&!p?y:null,name:c}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"truncate font-medium text-[var(--text-primary)]",children:c}),m&&e.jsx(W,{}),l&&e.jsx(q,{controlPort:f})]}),e.jsx("div",{className:"truncate text-xs text-[var(--text-dim)]",title:i,children:i}),p?e.jsx("div",{className:"mt-1 text-xs text-[var(--text-dim)]",children:"OS-protected location — not scanned in the background"}):x?e.jsx(de,{tests:j}):e.jsx("div",{className:"mt-1 text-xs text-[var(--accent-orange)]",children:"Folder missing — moved or deleted"})]})]}),e.jsx(V,{path:i,exists:x,running:l,busy:r,isCurrent:m,onOpen:a,onStop:n})]})}function J(){return e.jsxs("header",{className:"mb-8",children:[e.jsx("h1",{className:"text-2xl font-semibold text-[var(--text-primary)]",children:"Your projects"}),e.jsx("p",{className:"mt-1 text-sm text-[var(--text-muted)]",children:"Pick a project to open in the editor, or stop one that's running."})]})}function D({onCreate:t,creating:r=!1,createError:a=null,suggestedNewProjectPath:n=null,defaultOpen:c=!1}){const[i,x]=o.useState(c),[l,f]=o.useState(""),[j,y]=o.useState(""),m=o.useRef(!1);o.useEffect(()=>{m.current||n&&l===""&&f(n)},[n,l]);const p=h=>{m.current=!0,f(h)};if(!(i||r||a!==null))return e.jsx("div",{className:"mb-3",children:e.jsx("button",{type:"button",onClick:()=>x(!0),className:"text-sm text-[var(--text-secondary)] underline-offset-2 transition hover:text-[var(--text-primary)] hover:underline",children:"+ New project…"})});const g=()=>{const h=l.trim();h.length>0&&!r&&t(h,j.trim())};return e.jsxs("div",{className:"mb-3 rounded-lg border border-[var(--border-default)] bg-[var(--bg-card)] px-4 py-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"text",value:l,onChange:h=>p(h.target.value),onKeyDown:h=>{h.key==="Enter"&&g()},placeholder:"/path/to/new/project","aria-label":"Folder for the new project",className:"min-w-0 flex-1 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-3 py-1.5 text-sm text-[var(--text-primary)] placeholder:text-[var(--text-dim)] focus:border-[var(--accent-active)] focus:outline-none"}),e.jsx("button",{type:"button",disabled:r||l.trim().length===0,onClick:g,className:"shrink-0 rounded bg-[var(--accent-active)] px-3 py-1.5 text-sm font-medium text-[var(--bg-deep)] transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40",children:r?"Creating…":"Create"})]}),e.jsx("input",{type:"text",value:j,onChange:h=>y(h.target.value),onKeyDown:h=>{h.key==="Enter"&&g()},placeholder:"Project name (optional)","aria-label":"Project name (optional)",className:"mt-2 w-full rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-3 py-1.5 text-sm text-[var(--text-primary)] placeholder:text-[var(--text-dim)] focus:border-[var(--accent-active)] focus:outline-none"}),a&&e.jsx("div",{className:"mt-2 whitespace-pre-line text-xs text-[var(--accent-red)]",children:a})]})}function K({onScan:t,scanning:r=!1,scanResult:a=null,scanError:n=null}){const[c,i]=o.useState(!1),[x,l]=o.useState(""),[f,j]=o.useState(!0);if(!(c||r||a!==null||n!==null))return e.jsx("div",{className:"mb-6",children:e.jsx("button",{type:"button",onClick:()=>i(!0),className:"text-sm text-[var(--text-secondary)] underline-offset-2 transition hover:text-[var(--text-primary)] hover:underline",children:"+ Add projects from a folder…"})});const m=()=>{const p=x.trim();p.length>0&&!r&&t(p,f)};return e.jsxs("div",{className:"mb-6 rounded-lg border border-[var(--border-default)] bg-[var(--bg-card)] px-4 py-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"text",value:x,onChange:p=>l(p.target.value),onKeyDown:p=>{p.key==="Enter"&&m()},placeholder:"/path/to/your/workspace","aria-label":"Folder to scan for projects",className:"min-w-0 flex-1 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-3 py-1.5 text-sm text-[var(--text-primary)] placeholder:text-[var(--text-dim)] focus:border-[var(--accent-active)] focus:outline-none"}),e.jsx("button",{type:"button",disabled:r||x.trim().length===0,onClick:m,className:"shrink-0 rounded bg-[var(--accent-active)] px-3 py-1.5 text-sm font-medium text-[var(--bg-deep)] transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40",children:r?"Scanning…":"Scan"})]}),e.jsxs("label",{className:"mt-2 flex items-center gap-2 text-xs text-[var(--text-muted)]",children:[e.jsx("input",{type:"checkbox",checked:f,onChange:p=>j(p.target.checked)}),"Remember this folder and re-scan it next time"]}),n&&e.jsx("div",{className:"mt-2 text-xs text-[var(--accent-red)]",children:n}),a&&!n&&e.jsxs("div",{className:"mt-2 text-xs text-[var(--accent-green)]",children:["Found ",a.found," project",a.found===1?"":"s",", ",a.added," new"]}),(a==null?void 0:a.note)&&!n&&e.jsx("div",{className:"mt-1 text-xs text-[var(--text-dim)]",children:a.note})]})}function Y(){return e.jsx("div",{className:"mb-6 rounded-lg border border-[var(--border-default)] bg-[var(--bg-card)] px-4 py-3 text-sm text-[var(--text-muted)]",children:"Looking for your projects…"})}function V({path:t,exists:r,running:a,busy:n,isCurrent:c=!1,onOpen:i,onStop:x}){const l=n?"Opening…":c?"Open this project":a?"Reopen":"Open";return e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[a&&r&&e.jsx("button",{type:"button",disabled:n,onClick:()=>x(t),className:"rounded border border-[var(--border-default)] px-3 py-1.5 text-sm text-[var(--text-secondary)] transition hover:border-[var(--accent-red)] hover:text-[var(--accent-red)] disabled:cursor-not-allowed disabled:opacity-50",children:n?"Stopping…":"Stop"}),e.jsx("button",{type:"button",disabled:!r||n,onClick:()=>i(t),className:"rounded bg-[var(--accent-active)] px-3 py-1.5 text-sm font-medium text-[var(--bg-deep)] transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40",children:l})]})}function W(){return e.jsx("span",{className:"inline-flex items-center rounded-full bg-[var(--accent-active)]/15 px-2 py-0.5 text-xs font-medium text-[var(--accent-active)]",children:"Current"})}function $({src:t,name:r,size:a="h-12 w-16"}){const[n,c]=o.useState(!1);o.useEffect(()=>{c(!1)},[t]);const i=!!t&&!n;return e.jsx("div",{className:`flex ${a} shrink-0 items-center justify-center overflow-hidden rounded border border-[var(--border-subtle)] bg-[var(--bg-surface)]`,children:i?e.jsx("img",{src:t??void 0,alt:`${r} preview`,className:"max-h-full max-w-full object-contain",onError:()=>c(!0)}):e.jsx("div",{className:"flex h-full w-full items-center justify-center text-[10px] text-[var(--text-dim)]",children:"no preview"})})}function de({tests:t}){return!t||t.total===0?e.jsx("div",{className:"mt-1 text-xs text-[var(--text-dim)]",children:"No tests yet"}):e.jsxs("div",{className:"mt-1 flex items-center gap-2 text-xs",children:[e.jsxs("span",{className:"text-[var(--text-muted)]",children:[t.total," tests"]}),t.passed>0&&e.jsxs("span",{className:"text-[var(--accent-green)]",children:[t.passed," passed"]}),t.failed>0&&e.jsxs("span",{className:"text-[var(--accent-red)]",children:[t.failed," failed"]})]})}function q({controlPort:t}){return e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-[var(--accent-green)]/15 px-2 py-0.5 text-xs text-[var(--accent-green)]",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-[var(--accent-green)]"}),"running",t?` · :${t}`:""]})}function G(){return e.jsx("div",{className:"rounded-lg border border-[var(--border-default)] bg-[var(--bg-card)] px-4 py-6 text-sm text-[var(--text-muted)]",children:"Loading projects…"})}function Q({message:t}){return e.jsxs("div",{className:"whitespace-pre-line rounded-lg border border-[var(--accent-red)]/40 bg-[var(--bg-card)] px-4 py-6 text-sm text-[var(--accent-red)]",children:["Couldn't load projects: ",t]})}function X({message:t}){return e.jsx("div",{className:"mb-3 whitespace-pre-line rounded-lg border border-[var(--accent-red)]/40 bg-[var(--bg-card)] px-4 py-3 font-mono text-xs text-[var(--accent-red)]",children:t})}function Z({onScan:t,scanning:r=!1,onCreateFirst:a}={}){return a?e.jsxs("div",{className:"flex flex-col items-center rounded-lg border border-[var(--border-default)] bg-[var(--bg-card)] px-6 py-16 text-center",children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:"Create Your First Project"}),e.jsx("p",{className:"mt-2 max-w-sm text-sm text-[var(--text-muted)]",children:"CodeYam will walk you through creating your first project. You just need an idea to get started"}),e.jsx("button",{type:"button",onClick:a,className:"mt-6 rounded bg-[var(--accent-active)] px-5 py-2.5 text-sm font-semibold text-[var(--bg-deep)] transition hover:opacity-90",children:"Create Project"})]}):e.jsx("div",{className:"rounded-lg border border-dashed border-[var(--border-default)] bg-[var(--bg-card)] px-4 py-10 text-center",children:e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:t?e.jsxs(e.Fragment,{children:["No projects yet."," ",r?"Scanning for projects…":"Add a folder above to scan for projects already on disk, or run"," ",!r&&e.jsx("code",{className:"rounded bg-[var(--bg-input)] px-1.5 py-0.5 text-xs text-[var(--text-secondary)]",children:"codeyam-editor init"}),!r&&" in a project folder."]}):e.jsxs(e.Fragment,{children:["No projects yet. Run"," ",e.jsx("code",{className:"rounded bg-[var(--bg-input)] px-1.5 py-0.5 text-xs text-[var(--text-secondary)]",children:"codeyam-editor init"})," ","in a project folder to get started."]})})})}const ve=Object.freeze(Object.defineProperty({__proto__:null,CurrentBadge:W,ProjectBootstrapBanner:Y,ProjectCreateForm:D,ProjectLauncher:z,ProjectLauncherEmpty:Z,ProjectLauncherError:Q,ProjectLauncherHeader:J,ProjectLauncherLoading:G,ProjectOpenError:X,ProjectRow:H,ProjectRowActions:V,ProjectScanForm:K,RunningBadge:q,Thumbnail:$,sortCurrentFirst:U},Symbol.toStringTag,{value:"Module"})),ue=3e3,L=305e3;async function A(t,r,a){const n=new AbortController,c=setTimeout(()=>n.abort(),a);try{return await fetch(t,{...r,signal:n.signal})}finally{clearTimeout(c)}}function M(t,r){return t instanceof DOMException&&t.name==="AbortError"?"Opening timed out — the project may not be responding.":t instanceof Error?t.message:r}function xe(){const[t,r]=o.useState(null),[a,n]=o.useState(null),[c,i]=o.useState(null),[x,l]=o.useState(null),[f,j]=o.useState(!1),[y,m]=o.useState(null),[p,w]=o.useState(null),[g,h]=o.useState(!1),[N,P]=o.useState(null),[b,S]=o.useState(!1),[_,k]=o.useState(null),[F,E]=o.useState(null),[O,ee]=o.useState(null),C=o.useCallback(async()=>{try{const d=await fetch("/api/projects");if(!d.ok)throw new Error(`HTTP ${d.status}`);const s=await d.json();r(Array.isArray(s.projects)?s.projects:[]),ee(typeof s.suggestedNewProjectPath=="string"?s.suggestedNewProjectPath:null),n(null)}catch(d){n(d instanceof Error?d.message:"Failed to load projects")}},[]),T=o.useCallback(async()=>{try{const d=await fetch("/api/projects/scan-status");if(!d.ok)return;const u=!!(await d.json()).running;S(v=>(v&&!u&&C(),u))}catch{}},[C]);o.useEffect(()=>{C(),T();const d=setInterval(()=>{document.visibilityState==="visible"&&(C(),T())},ue),s=()=>{document.visibilityState==="visible"&&(C(),T())};return document.addEventListener("visibilitychange",s),()=>{clearInterval(d),document.removeEventListener("visibilitychange",s)}},[C,T]);const te=o.useCallback(async(d,s)=>{j(!0),w(null),m(null);try{const u=await fetch("/api/projects/scan",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({root:d,remember:s})}),v=await u.json().catch(()=>({}));if(!u.ok)throw new Error(typeof v.error=="string"?v.error:`HTTP ${u.status}`);r(Array.isArray(v.projects)?v.projects:[]),m({found:v.found??0,added:v.added??0,note:typeof v.note=="string"?v.note:void 0})}catch(u){w(u instanceof Error?u.message:"Scan failed")}finally{j(!1)}},[]),re=o.useCallback(async(d,s)=>{h(!0),P(null);try{const u=await A("/api/projects/create",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s?{path:d,name:s}:{path:d})},L),v=await u.json().catch(()=>({}));if(!u.ok)throw new Error(typeof v.error=="string"?v.error:`HTTP ${u.status}`);if(typeof v.url=="string"){window.location.href=v.url;return}throw new Error("create did not return a url")}catch(u){P(M(u,"Failed to create project")),h(!1)}},[]),ae=o.useCallback(async d=>{k(d),E(null);try{const s=await A("/api/projects/clone",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({repoUrl:d})},L),u=await s.json().catch(()=>({}));if(!s.ok)throw new Error(typeof u.error=="string"?u.error:`HTTP ${s.status}`);if(typeof u.url=="string"){window.location.href=u.url;return}throw new Error("clone did not return a url")}catch(s){E(M(s,"Failed to clone project")),k(null)}},[]),ne=o.useCallback(async d=>{l(d),i(null);try{const s=await A("/api/projects/open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:d})},L),u=await s.json().catch(()=>({}));if(!s.ok)throw new Error(typeof u.error=="string"?u.error:`HTTP ${s.status}`);const{url:v}=u;if(typeof v=="string"){window.location.href=v;return}throw new Error("open did not return a url")}catch(s){i(M(s,"Failed to open project")),l(null)}},[]),oe=o.useCallback(async d=>{l(d);try{const s=await fetch("/api/projects/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:d})});if(!s.ok)throw new Error(`HTTP ${s.status}`);await C()}catch(s){n(s instanceof Error?s.message:"Failed to stop project")}finally{l(null)}},[C]);return e.jsx(z,{projects:t??[],loading:t===null&&a===null,error:a,openError:c,busyPath:x,onOpen:ne,onStop:oe,onScan:te,scanning:f,scanResult:y,scanError:p,onCreate:re,creating:g,createError:N,suggestedNewProjectPath:O,bootstrapping:b,onClone:ae,cloningRepoUrl:_,cloneError:F})}const je=Object.freeze(Object.defineProperty({__proto__:null,ProjectLauncherScreen:xe},Symbol.toStringTag,{value:"Module"}));export{B as C,I as O,xe as P,q as R,$ as T,je as _,R as a,X as b,Z as c,Q as d,G as e,J as f,W as g,Y as h,D as i,K as j,V as k,H as l,z as m,ve as n,he as o,fe as p};
|