@ghostlygawd/hangar 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +101 -0
- package/LICENSE +202 -0
- package/README.md +86 -0
- package/bin/hangar.js +156 -0
- package/lib/doctor.js +68 -0
- package/lib/git.js +96 -0
- package/lib/launch.js +81 -0
- package/lib/limits.js +55 -0
- package/lib/paths.js +40 -0
- package/lib/profiles.js +58 -0
- package/lib/spaces.js +155 -0
- package/lib/store.js +48 -0
- package/lib/sysinfo.js +78 -0
- package/lib/transcripts.js +266 -0
- package/package.json +56 -0
- package/server/bus.js +60 -0
- package/server/gate.js +50 -0
- package/server/index.js +67 -0
- package/server/routes.js +166 -0
- package/web/dist/assets/index-D593hYue.js +49 -0
- package/web/dist/assets/index-Dv9Rj8Ur.css +1 -0
- package/web/dist/index.html +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--ink-0: #08090C;--ink-1: #0E1014;--ink-2: #14161C;--ink-3: #1A1D25;--ink-4: #21242E;--line: #23262F;--line-soft: #1B1E26;--line-strong: #2E323D;--tx-hi: #F3F5F8;--tx-mid: #A4A9B6;--tx-lo: #6B7180;--tx-dim: #4A4F5C;--accent: #4F7CFF;--accent-hi: #6E92FF;--accent-press: #3D67E6;--accent-glow: rgba(79, 124, 255, .28);--live: #34D399;--live-dim: rgba(52, 211, 153, .14);--wait: #F5B544;--wait-dim: rgba(245, 181, 68, .13);--open: #7FA6FF;--idle: #6B7180;--ended: #5A6072;--danger: #F26D6D;--add: #34D399;--radius: 13px;--radius-sm: 9px;--radius-pill: 999px;--shadow-card: 0 1px 0 rgba(255, 255, 255, .02) inset, 0 12px 32px -18px rgba(0, 0, 0, .9);--shadow-pop: 0 18px 50px -20px rgba(0, 0, 0, .95);--font-ui: "Inter", -apple-system, "Segoe UI", system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", "Consolas", monospace;--t-title: 17px;--t-name: 14.5px;--t-body: 13.5px;--t-sec: 12.5px;--t-label: 11px;--ease: cubic-bezier(.22, .61, .36, 1);--t-fast: .14s;--t-base: .18s;--side-w: 248px}.num,.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition-duration:.01ms!important}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:radial-gradient(1200px 600px at 78% -8%,rgba(79,124,255,.06),transparent 60%),var(--ink-1);color:var(--tx-hi);font-family:var(--font-ui);font-size:var(--t-body);line-height:1.45;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--accent-glow)}:focus-visible{outline:2px solid color-mix(in srgb,var(--tx-hi) 65%,transparent);outline-offset:2px;border-radius:var(--radius-sm)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:6px;border:2px solid var(--ink-1)}::-webkit-scrollbar-track{background:transparent}svg.ic,.ic{display:block}.ic{width:18px;height:18px}.ic-sm{width:14px;height:14px}.ic-lg{width:22px;height:22px}.app{display:grid;grid-template-columns:var(--side-w) 1fr;min-height:100vh}.side{background:linear-gradient(180deg,var(--ink-1),var(--ink-0));border-right:1px solid var(--line-soft);padding:22px 16px;display:flex;flex-direction:column;gap:26px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:11px;padding:4px 8px}.brand-mark{width:34px;height:34px;border-radius:9px;background:linear-gradient(150deg,#20242e,#101218);border:1px solid var(--line-strong);display:grid;place-items:center;color:var(--accent-hi);box-shadow:var(--shadow-card);flex:none}.brand-name{font-weight:600;font-size:15px;letter-spacing:-.01em}.brand-sub{font-size:11px;color:var(--tx-lo);font-weight:450;letter-spacing:.02em}.nav{display:flex;flex-direction:column;gap:2px}.nav-label{font-size:10.5px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--tx-dim);padding:0 10px 8px}.nav-item{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:var(--radius-sm);color:var(--tx-mid);font-weight:500;font-size:13.5px;cursor:pointer;text-align:left;width:100%;background:none;font-family:inherit;border:1px solid transparent;transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}.nav-item:hover{background:var(--ink-2);color:var(--tx-hi)}.nav-item.active{background:var(--ink-3);color:var(--tx-hi);border-color:var(--line)}.nav-item.active .ic{color:var(--accent-hi)}.nav-item .badge{margin-left:auto;font-size:11px;color:var(--tx-lo);background:var(--ink-4);border-radius:var(--radius-pill);padding:1px 8px;font-weight:600}.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:10px}.acct{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--ink-2)}.acct-dot{width:26px;height:26px;border-radius:7px;flex:none;background:linear-gradient(140deg,#2a2f3b,#15181f);border:1px solid var(--line-strong);display:grid;place-items:center;color:var(--tx-mid)}.acct-name{font-size:12.5px;font-weight:550}.acct-meta{font-size:11px;color:var(--tx-lo)}.main{min-width:0;display:flex;flex-direction:column}.main-scroll{flex:1;overflow-y:auto;padding:26px 30px 80px}.topbar{display:flex;align-items:center;gap:16px;padding:18px 30px;border-bottom:1px solid var(--line-soft);position:sticky;top:0;z-index:5;background:#0e1014d1;backdrop-filter:blur(14px) saturate(1.2)}.topbar h1{font-size:var(--t-title);font-weight:600;letter-spacing:-.015em;margin:0}.topbar .crumb,.topbar .sub{font-size:12.5px;color:var(--tx-lo);font-weight:450}.topbar .right{margin-left:auto;display:flex;gap:10px;align-items:center}.search{margin-left:auto;display:flex;align-items:center;gap:9px;background:var(--ink-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 13px;color:var(--tx-lo);min-width:200px}.search input{background:none;border:none;outline:none;color:var(--tx-hi);font:inherit;font-size:13px;width:100%}.search input::placeholder{color:var(--tx-dim)}.content{padding:26px 30px 60px}.repo-head{display:flex;align-items:center;gap:14px;margin-bottom:18px}.repo-icon{width:38px;height:38px;border-radius:10px;flex:none;background:linear-gradient(150deg,#1b1f28,#121419);border:1px solid var(--line-strong);display:grid;place-items:center;color:var(--tx-mid)}.repo-title{display:flex;flex-direction:column;gap:2px;min-width:0}.repo-title .name{font-size:16px;font-weight:600;letter-spacing:-.01em;display:flex;align-items:center;gap:9px}.repo-title .path{font-size:12px;color:var(--tx-lo);display:flex;align-items:center;gap:6px;font-family:var(--font-mono)}.repo-actions{margin-left:auto;display:flex;align-items:center;gap:10px}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:linear-gradient(180deg,var(--accent-hi),var(--accent));color:#fff;font-weight:600;font-size:13.5px;font-family:inherit;border:1px solid var(--accent-press);border-radius:var(--radius-sm);padding:9px 15px;cursor:pointer;box-shadow:0 1px #ffffff29 inset,0 8px 22px -10px var(--accent-glow);transition:transform var(--t-fast) var(--ease),box-shadow var(--t-base) var(--ease),filter var(--t-base) var(--ease)}.btn-primary:hover{filter:brightness(1.06);box-shadow:0 1px #fff3 inset,0 12px 30px -10px var(--accent-glow)}.btn-primary:active{transform:translateY(1px)}.btn-primary:disabled{opacity:.5;cursor:not-allowed;filter:none;transform:none}.btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--ink-2);color:var(--tx-mid);font-weight:550;font-size:13.5px;font-family:inherit;border:1px solid var(--line);border-radius:var(--radius-sm);padding:9px 13px;cursor:pointer;transition:background var(--t-base) var(--ease),color var(--t-base) var(--ease),border-color var(--t-base) var(--ease)}.btn-ghost:hover{background:var(--ink-3);color:var(--tx-hi);border-color:var(--line-strong)}.btn-ghost:disabled{opacity:.5;cursor:not-allowed}.btn-ghost.danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,var(--line))}.btn-ghost.danger:hover{background:color-mix(in srgb,var(--danger) 12%,transparent)}.btn-icon{width:38px;height:38px;flex:none;display:grid;place-items:center;background:var(--ink-3);color:var(--tx-mid);border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}.btn-icon:hover{background:var(--ink-4);color:var(--tx-hi);border-color:var(--line-strong)}.btn-launch{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:linear-gradient(180deg,var(--accent-hi),var(--accent));color:#fff;font-weight:600;font-size:13px;font-family:inherit;border:1px solid var(--accent-press);border-radius:var(--radius-sm);padding:9px 12px;cursor:pointer;box-shadow:0 1px #ffffff29 inset,0 8px 20px -12px var(--accent-glow);transition:filter var(--t-fast) var(--ease),transform var(--t-fast) var(--ease)}.btn-launch:hover{filter:brightness(1.07)}.btn-launch:active{transform:translateY(1px)}.btn-launch.muted{background:var(--ink-3);color:var(--tx-hi);border-color:var(--line-strong);box-shadow:none}.btn-reopen{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--ink-3);color:var(--tx-mid);font-weight:600;font-size:13px;font-family:inherit;border:1px solid var(--line);border-radius:var(--radius-sm);padding:9px 12px;cursor:pointer;transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}.btn-reopen:hover{background:var(--ink-4);color:var(--tx-hi)}.input{background:var(--ink-1);color:var(--tx-hi);border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:8px 11px;font:inherit;font-size:var(--t-sec);transition:border-color var(--t-fast) var(--ease);min-width:0}.input:focus{border-color:var(--tx-mid);outline:none}.input::placeholder{color:var(--tx-dim)}select.input{appearance:none;padding-right:26px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%236B7180' fill='none' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center}.chip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:550;color:var(--tx-mid);background:var(--ink-2);border:1px solid var(--line);border-radius:var(--radius-pill);padding:4px 10px;white-space:nowrap}.chip .ic-sm{color:var(--tx-lo)}.chip.live{color:var(--live);background:var(--live-dim);border-color:#34d39947}.chip.wait{color:var(--wait);background:var(--wait-dim);border-color:#f5b54447}.chip.open{color:var(--open);background:#7fa6ff1f;border-color:#7fa6ff4d}.chip.danger{color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,transparent);border-color:color-mix(in srgb,var(--danger) 40%,transparent)}.kbd{font-family:var(--font-mono);font-size:10.5px;color:var(--tx-dim);border:1px solid var(--line);border-radius:5px;padding:0 5px;line-height:16px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(296px,1fr));gap:16px}.card{position:relative;background:linear-gradient(180deg,var(--ink-2),#111319);border:1px solid var(--line);border-radius:var(--radius);padding:17px 17px 15px;box-shadow:var(--shadow-card);display:flex;flex-direction:column;gap:14px;min-height:196px;transition:border-color var(--t-base) var(--ease),transform var(--t-base) var(--ease),box-shadow var(--t-base) var(--ease)}.card:hover{border-color:var(--line-strong);transform:translateY(-2px);box-shadow:var(--shadow-pop)}.card:before{content:"";position:absolute;left:0;top:14px;bottom:14px;width:3px;border-radius:0 3px 3px 0;background:var(--line-strong);opacity:.9}.card.is-live:before{background:var(--live);box-shadow:0 0 14px -2px #34d39980}.card.is-waiting:before{background:var(--wait)}.card.is-opening:before{background:var(--open)}.card.is-idle:before{background:var(--line-strong)}.card.is-ended:before{background:var(--ended);opacity:.5}.card-top{display:flex;align-items:flex-start;gap:11px}.space-name{font-size:var(--t-name);font-weight:600;letter-spacing:-.01em;line-height:1.25}.space-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--tx-lo);margin-top:3px;font-weight:450}.space-sub .ic-sm{color:var(--tx-dim)}.profile-tag{color:var(--tx-mid);font-weight:500}.card-body{display:flex;flex-direction:column;gap:12px;margin-top:auto}.card-foot{display:flex;align-items:center;gap:9px;padding-top:4px}.status{margin-left:auto;flex:none;display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:600;letter-spacing:.005em;padding:5px 10px 5px 8px;border-radius:var(--radius-pill);border:1px solid var(--line);background:var(--ink-3);color:var(--tx-mid);white-space:nowrap}.dot{width:7px;height:7px;border-radius:50%;flex:none;background:var(--tx-lo)}.status.live{color:var(--live);background:var(--live-dim);border-color:#34d39947}.status.live .dot{background:var(--live);animation:pulse 2.2s var(--ease) infinite}.status.waiting{color:var(--wait);background:var(--wait-dim);border-color:#f5b54447}.status.waiting .dot{background:var(--wait);animation:blink 1.3s steps(2,start) infinite}.status.opening{color:var(--open);background:#7fa6ff1f;border-color:#7fa6ff4d}.status.idle{color:var(--idle)}.status.idle .dot{background:var(--idle);box-shadow:0 0 0 2px #6b71802e}.status.ended{color:var(--ended)}.status.ended .dot{background:var(--ended)}.spin{animation:spin .9s linear infinite;transform-origin:center}.readout{display:flex;flex-direction:column;gap:7px}.readout-row{display:flex;align-items:center;justify-content:space-between;font-size:11.5px;color:var(--tx-lo)}.readout-row .lab{display:flex;align-items:center;gap:6px;font-weight:500}.readout-row .lab .ic-sm{color:var(--tx-dim)}.readout-row .val{color:var(--tx-mid);font-weight:550;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.readout-row .val b{color:var(--tx-hi);font-weight:600}.meter{height:5px;border-radius:3px;background:var(--ink-4);overflow:hidden;border:1px solid var(--line-soft)}.meter>i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--live),#58E0AE)}.meter.warn>i{background:linear-gradient(90deg,var(--wait),#FFCB6B)}.meter.hot>i{background:linear-gradient(90deg,var(--danger),color-mix(in srgb,var(--danger) 55%,#fff))}.diffstat{display:inline-flex;align-items:center;gap:10px;font-size:12px;font-weight:550;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.diffstat .plus,.diffstat .add{color:var(--add)}.diffstat .minus,.diffstat .del{color:var(--danger)}.diffstat .files{color:var(--tx-lo);display:inline-flex;align-items:center;gap:5px}.diffbar{display:inline-flex;gap:2px;margin-left:2px}.diffbar span{width:6px;height:6px;border-radius:1.5px;background:var(--ink-4)}.diffbar span.a{background:var(--add)}.diffbar span.d{background:var(--danger)}.lifecycle{display:flex;flex-direction:column;gap:8px}.life-steps{display:flex;align-items:center;gap:6px}.life-steps .step{flex:1;height:3px;border-radius:2px;background:var(--ink-4);overflow:hidden;position:relative}.life-steps .step.done{background:var(--open)}.life-steps .step.wdone{background:var(--wait)}.life-steps .step.active:after{content:"";position:absolute;inset:0;border-radius:2px;background:linear-gradient(90deg,transparent,var(--open),transparent);animation:slide 1.4s var(--ease) infinite}.life-steps .step.active.wait:after{background:linear-gradient(90deg,transparent,var(--wait),transparent)}.life-note{font-size:11.5px;color:var(--tx-mid);display:flex;align-items:center;gap:7px}.life-note .ic-sm{color:var(--open)}.life-note.wait .ic-sm{color:var(--wait)}.idle-hint{font-size:11.5px;color:var(--tx-lo);line-height:1.5;background:var(--ink-1);border:1px dashed var(--line-strong);border-radius:var(--radius-sm);padding:9px 11px;display:flex;align-items:flex-start;gap:8px}.idle-hint .ic-sm{color:var(--wait);margin-top:1px;flex:none}.idle-hint b{color:var(--tx-mid);font-weight:600}.ended-meta{font-size:11.5px;color:var(--tx-lo);display:flex;align-items:center;gap:14px}.ended-meta .k b{color:var(--tx-mid);font-weight:600}.card-new{border:1px dashed var(--line-strong);background:transparent;align-items:center;justify-content:center;text-align:center;cursor:pointer;gap:10px;color:var(--tx-lo);transition:border-color var(--t-base) var(--ease),color var(--t-base) var(--ease),background var(--t-base) var(--ease),transform var(--t-base) var(--ease)}.card-new:hover{border-color:var(--accent);color:var(--tx-hi);background:#4f7cff0a;transform:translateY(-2px)}.card-new .plus-badge{width:42px;height:42px;border-radius:11px;display:grid;place-items:center;background:var(--ink-2);border:1px solid var(--line-strong);color:var(--accent-hi)}.card-new .nt{font-weight:600;font-size:14px;color:var(--tx-hi)}.card-new .ns{font-size:11.5px}.onboard{margin:30px 0 6px;border:1px solid var(--line);border-radius:var(--radius);background:radial-gradient(700px 220px at 12% 0%,rgba(79,124,255,.07),transparent 70%),linear-gradient(180deg,var(--ink-2),var(--ink-1));padding:22px 24px;display:flex;gap:26px;align-items:center;flex-wrap:wrap}.onboard-lead{flex:1;min-width:280px}.onboard h2{font-size:16px;font-weight:600;margin:0 0 4px;letter-spacing:-.01em}.onboard p{font-size:13px;color:var(--tx-mid);margin:0 0 14px;max-width:460px;line-height:1.55}.onboard-side{display:flex;flex-direction:column;gap:12px;align-items:stretch;min-width:230px}.steps{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.stepchip{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:550;color:var(--tx-mid);background:var(--ink-2);border:1px solid var(--line);border-radius:var(--radius-pill);padding:6px 12px 6px 8px}.stepchip .n{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:10.5px;font-weight:700;background:var(--ink-4);color:var(--tx-lo);border:1px solid var(--line-strong)}.stepchip.on{color:var(--tx-hi);border-color:var(--line-strong)}.stepchip.on .n{background:var(--accent);color:#fff;border-color:var(--accent-press)}.trust{display:flex;align-items:flex-start;gap:10px;background:var(--wait-dim);border:1px solid rgba(245,181,68,.26);border-radius:var(--radius-sm);padding:11px 13px;font-size:12px;color:#f4d9a6;line-height:1.5}.trust .ic{color:var(--wait);flex:none;margin-top:1px}.trust b{color:#fcebc8;font-weight:600}.empty{border:1px dashed var(--line-strong);border-radius:var(--radius);padding:42px 24px;text-align:center;color:var(--tx-mid)}.empty h3{margin:0 0 6px;color:var(--tx-hi);font-size:16px;font-weight:600}.empty p{margin:0 0 16px;font-size:var(--t-sec)}.section-cap{display:flex;align-items:center;gap:10px;margin:34px 0 14px}.section-cap h3{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--tx-lo);margin:0}.section-cap .rule{flex:1;height:1px;background:var(--line-soft)}.section-cap .note{font-size:11.5px;color:var(--tx-lo)}.skeleton{background:linear-gradient(100deg,var(--ink-2) 40%,var(--ink-3) 50%,var(--ink-2) 60%);background-size:200% 100%;animation:shimmer 1.4s infinite linear;border-radius:var(--radius);min-height:72px;border:1px solid var(--line-soft)}.banner{display:flex;align-items:center;gap:10px;border:1px solid color-mix(in srgb,var(--danger) 35%,transparent);background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger);border-radius:var(--radius-sm);padding:9px 14px;font-size:var(--t-sec);white-space:pre-wrap}.banner .ic,.banner .ic-sm{flex:none}.banner .btn-ghost,.banner .grow+button{margin-left:auto}.banner .grow{flex:1}.banner.reconnecting{color:var(--wait);background:var(--wait-dim);border-color:#f5b5444d}.banner.offline{color:var(--danger);background:color-mix(in srgb,var(--danger) 14%,transparent);border-color:color-mix(in srgb,var(--danger) 42%,transparent)}.banner.ok{color:var(--live);background:var(--live-dim);border-color:#34d3994d}.app-banner{border-radius:0;border-left:none;border-right:none;border-top:none;padding:9px 30px}.overlay{position:fixed;inset:0;background:#04060a9e;backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;z-index:50;animation:fade .15s var(--ease)}.dialog{background:var(--ink-2);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow-pop);padding:22px;width:min(440px,92vw);animation:rise .18s var(--ease)}.dialog h3{margin:0 0 8px;font-size:16px;font-weight:600}.dialog p{color:var(--tx-mid);font-size:var(--t-sec);margin:0 0 16px;white-space:pre-wrap}.dialog .actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}@keyframes pulse{0%{box-shadow:0 0 #34d39973}70%{box-shadow:0 0 0 6px #34d39900}to{box-shadow:0 0 #34d39900}}@keyframes blink{0%,to{opacity:1}50%{opacity:.35}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes slide{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes shimmer{to{background-position:-200% 0}}@keyframes fade{0%{opacity:0}}@keyframes rise{0%{opacity:0;transform:translateY(8px) scale(.98)}}.tabbar{display:none}@media(max-width:720px){.app{grid-template-columns:1fr}.side{display:none}.main-scroll{padding:18px 14px 88px}.content{padding:18px 16px 88px}.topbar{padding:14px 16px}.topbar h1{font-size:16px}.search{display:none}.grid{grid-template-columns:1fr}.repo-head{flex-wrap:wrap}.repo-actions{width:100%;margin-left:0}.repo-actions .btn-primary{flex:1}.app-banner{padding:9px 16px}.tabbar{display:flex;position:fixed;bottom:0;left:0;right:0;z-index:40;background:color-mix(in srgb,var(--ink-0) 92%,transparent);backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:8px 6px calc(8px + env(safe-area-inset-bottom))}.tabbar .nav-item{flex:1;flex-direction:column;gap:4px;padding:4px 0;font-size:10px;align-items:center;justify-content:center;background:none;border:none;color:var(--tx-lo)}.tabbar .nav-item:hover{background:none;color:var(--tx-mid)}.tabbar .nav-item.active{background:none;color:var(--accent-hi)}.tabbar .nav-item.active .ic{color:var(--accent-hi)}.tabbar .nav-item .badge,.tabbar .nav-item .kbd{display:none}}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
|
6
|
+
<meta name="theme-color" content="#0E1014" />
|
|
7
|
+
<meta name="description" content="Hangar — a cockpit for parallel Claude Code on Windows: isolated worktree spaces, real interactive sessions, multi-account, zero-token observability." />
|
|
8
|
+
<meta name="color-scheme" content="dark" />
|
|
9
|
+
<title>Hangar — parallel Claude Code</title>
|
|
10
|
+
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234F7CFF' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 21h18'/%3E%3Cpath d='M5 21V8l7-5 7 5v13'/%3E%3Cpath d='M9 21v-6h6v6'/%3E%3C/svg%3E" />
|
|
11
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
12
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
13
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;450;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-D593hYue.js"></script>
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Dv9Rj8Ur.css">
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="root"></div>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|