Files
oikos/web/dist/assets/KnowledgeBase-lo1lsvmk.css
dtoro d4d99a7473
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled
feat: Phase 1 — extract the client (web SPA + desktop) to dtoro/oikos-web
Problem: the hexagonal refactor churns the backend tree for nine more
phases; the UI delivery stack (web/ SPA, cmd/desktop Wails wrapper,
compose/web image) must move to its own repo first so doc/layout
rewrites land once on a backend-only tree.

Change:
- New repo git.hubris.network/dtoro/oikos-web (v0.33.0): web/, desktop/
  (updateURL repointed to oikos-web releases), compose/, own CI (web +
  desktop jobs), own deploy script (CI-green gate, TOCTOU guard,
  version-tagged images, prune-to-3), own webhook receiver on :9798 +
  launchd unit, own compose project publishing the same 8091:80.
- Cutover executed on mac-mini in order: oikos stack's web service
  stopped+removed, oikos-web project brought up on 8091; outer Caddy
  untouched (targets the published port) — serving + Authentik flow +
  /wails 404 quirk verified post-cutover.
- Stripped from oikos: web/, cmd/desktop/, compose/web/, desktop CI
  workflow, ci.yml web job, Makefile ui/desktop/desktop-package/install
  targets, the compose web service, oikos-web from deploy.sh's fallback
  prune list; wails + go-keyring dropped from go.mod, vendor synced.
- README / CONTRIBUTING / AGENTS.md / .agents dev+operations docs now
  point at the new repo; mbse + mascot design docs carry a path note.

Risk: production SPA serving depends on the new pipeline now; rollback
is versioned-image re-up of the old web service from a pre-split
checkout (port 8091). Desktop builds installed before the split still
check dtoro/oikos releases — one manual reinstall, noted in the
oikos-web release notes.

Verification: go vet, make test (race), make generate-check, golangci
(no new findings; baseline down 400→365); post-cutover curls —
localhost:8091 200, /wails/runtime.js 404, outer Caddy 302 Authentik.
2026-08-15 22:27:52 +02:00

2 lines
6.2 KiB
CSS

.stage.svelte-ywuw22{background-image:radial-gradient(circle at 1px 1px,var(--border) 1px,transparent 0);background-size:26px 26px}.reset-layer.svelte-ywuw22{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;width:100%;height:100%;padding:0;background:transparent;border:0;cursor:default}.lane-head.svelte-ywuw22{position:absolute;top:0;padding:8px 0 6px 4px;font-size:10.5px;font-weight:500;letter-spacing:.9px;text-transform:uppercase;color:var(--muted-foreground)}.lane-head.svelte-ywuw22 b:where(.svelte-ywuw22){font-weight:500;color:var(--foreground);font-variant-numeric:tabular-nums}.edge.svelte-ywuw22{fill:none;stroke:var(--border);stroke-width:1.4;opacity:.6;transition:opacity .16s,stroke .16s}.edge.dep.svelte-ywuw22{stroke-dasharray:4 3}.edge.dim.svelte-ywuw22{opacity:.08}.edge.hl.svelte-ywuw22{stroke:var(--primary);stroke-width:2;opacity:.95;stroke-dasharray:5 4;animation:svelte-ywuw22-dash 1s linear infinite}@keyframes svelte-ywuw22-dash{to{stroke-dashoffset:-18}}.node.svelte-ywuw22{position:absolute;z-index:2;display:flex;flex-direction:column;justify-content:center;gap:2px;padding:6px 10px 6px 13px;text-align:left;background:var(--card);border:1px solid var(--border);border-radius:9px;overflow:hidden;cursor:pointer;transition:opacity .16s,border-color .14s,transform .12s,box-shadow .14s}.node.svelte-ywuw22:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--nc)}.node.svelte-ywuw22 .nm:where(.svelte-ywuw22){font-size:12.5px;font-weight:500;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--foreground)}.node.svelte-ywuw22 .meta:where(.svelte-ywuw22){font-family:var(--font-mono);font-size:10px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted-foreground)}.node.svc.svelte-ywuw22 .nm:where(.svelte-ywuw22){font-size:13px}.node.svelte-ywuw22 .badge:where(.svelte-ywuw22){position:absolute;top:5px;right:6px;color:var(--muted-foreground);display:flex}.node.svelte-ywuw22:hover{border-color:var(--primary);transform:translateY(-1px)}.node.dim.svelte-ywuw22{opacity:.24}.node.hl.svelte-ywuw22{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}.node.sel.svelte-ywuw22{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary)}.node.is-open.svelte-ywuw22{border-color:var(--primary)}.node.pulse.svelte-ywuw22:before{animation:svelte-ywuw22-pulse 1.8s ease-in-out infinite}@keyframes svelte-ywuw22-pulse{0%,to{opacity:1}50%{opacity:.4}}.chip.svelte-ywuw22{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;font-size:12px;font-weight:500;border:1px solid var(--border);border-radius:0;background:transparent;color:var(--muted-foreground);cursor:pointer;transition:color .12s,border-color .12s,background .12s}.chip.svelte-ywuw22:hover{border-color:var(--primary)}.chip.on.svelte-ywuw22{color:var(--background);background:var(--foreground);border-color:var(--foreground)}.chip.on.svelte-ywuw22 b:where(.svelte-ywuw22){color:var(--background)}.chip.svelte-ywuw22 .dot:where(.svelte-ywuw22){width:8px;height:8px;border-radius:50%}.chip.svelte-ywuw22 b:where(.svelte-ywuw22){font-weight:500;color:var(--foreground);font-variant-numeric:tabular-nums}.panel.svelte-ywuw22{width:300px;font-size:13px}.legend-h.svelte-ywuw22{margin:0 0 8px;font-family:var(--font-sans);font-size:11px;font-weight:500;letter-spacing:.8px;text-transform:uppercase;color:var(--muted-foreground)}.legend-row.svelte-ywuw22{display:flex;align-items:center;gap:9px;padding:4px 0;color:var(--muted-foreground);font-size:12.5px}.legend-row.svelte-ywuw22 .sw:where(.svelte-ywuw22){width:12px;height:12px;border-radius:3px}.lane-swatch.svelte-ywuw22{position:relative;width:20px;height:14px;border-radius:4px;border:1px solid var(--border);background:var(--card)}.lane-swatch.svelte-ywuw22:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;border-radius:4px 0 0 4px;background:var(--muted-foreground)}.sep.svelte-ywuw22{height:1px;background:var(--border);margin:14px 0}.hint.svelte-ywuw22{color:var(--muted-foreground);font-size:12px;line-height:1.6}.det-kind.svelte-ywuw22{font-family:var(--font-mono);font-size:11px;color:var(--muted-foreground);word-break:break-all}.det-name.svelte-ywuw22{font-family:var(--font-sans);font-size:17px;font-weight:500;margin:2px 0 8px}.det-health.svelte-ywuw22{display:inline-flex;align-items:center;gap:7px;padding:3px 10px;font-size:12.5px;font-weight:500;border-radius:999px;color:var(--hc);background:color-mix(in oklab,var(--hc) 14%,transparent)}.det-health.svelte-ywuw22 .d:where(.svelte-ywuw22){width:8px;height:8px;border-radius:50%;background:var(--hc)}.blast.svelte-ywuw22{margin:14px 0;padding:12px 14px;border:1px solid var(--border);border-radius:10px;background:var(--secondary)}.blast.svelte-ywuw22 .n:where(.svelte-ywuw22){font-size:25px;font-weight:500;line-height:1;font-variant-numeric:tabular-nums}.blast.svelte-ywuw22 .n.warn:where(.svelte-ywuw22){color:#f85149}.blast.svelte-ywuw22 .lbl:where(.svelte-ywuw22){margin-top:4px;font-size:12px;color:var(--muted-foreground)}.det-sec.svelte-ywuw22{margin-top:14px}.det-sec.svelte-ywuw22 h4:where(.svelte-ywuw22){margin:0 0 6px;font-family:var(--font-sans);font-size:11px;font-weight:500;letter-spacing:.7px;text-transform:uppercase;color:var(--muted-foreground)}.row.svelte-ywuw22{display:flex;gap:8px;padding:3px 0;font-size:12.5px}.row.svelte-ywuw22 .k:where(.svelte-ywuw22){min-width:66px;color:var(--muted-foreground)}.row.svelte-ywuw22 .v:where(.svelte-ywuw22){font-family:var(--font-mono);font-size:11.5px;color:var(--foreground);word-break:break-word}.link.svelte-ywuw22{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;border-radius:7px;background:transparent;cursor:pointer;text-align:left}.link.svelte-ywuw22:hover{background:var(--secondary)}.link.svelte-ywuw22 .d:where(.svelte-ywuw22){width:8px;height:8px;border-radius:50%;flex:none}.link.svelte-ywuw22 .t:where(.svelte-ywuw22){font-size:12.5px;color:var(--foreground)}.link.svelte-ywuw22 .sub:where(.svelte-ywuw22){margin-left:auto;font-family:var(--font-mono);font-size:10.5px;color:var(--muted-foreground)}@media(prefers-reduced-motion:reduce){.edge.hl.svelte-ywuw22{animation:none}.node.pulse.svelte-ywuw22:before{animation:none}.node.svelte-ywuw22,.edge.svelte-ywuw22{transition:none}}