#ecosystem .eco-track{height:4px;margin-top:10px;border-radius:999px;background:var(--line);overflow:hidden}#ecosystem .eco-fill{height:100%;width:0;border-radius:999px;background:var(--signal);box-shadow:0 0 12px var(--signal-line);transition:width 1s cubic-bezier(.2,.7,.2,1) .3s}#ecosystem.in-view .eco-fill{width:var(--pct)}#ecosystem .eco-dot-hollow{width:7px;height:7px;border-radius:999px;flex:none;border:1px solid var(--fg-faint);background:transparent}#ecosystem .eco-flow{position:relative}#ecosystem .eco-svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}#ecosystem .eco-svg path{fill:none;stroke-width:1.5}#ecosystem #eco-trunk,#ecosystem .eco-branch-live{stroke:var(--signal-line);stroke-dasharray:var(--len, 0);stroke-dashoffset:var(--len, 0);transition:stroke-dashoffset 1.1s cubic-bezier(.2,.7,.2,1);transition-delay:calc(var(--i, 0) * 90ms)}#ecosystem .eco-branch-planned{stroke:var(--line-strong);stroke-dasharray:4 6;opacity:0;transition:opacity .8s ease;transition-delay:calc(var(--i, 0) * 90ms)}#ecosystem.in-view #eco-trunk,#ecosystem.in-view .eco-branch-live{stroke-dashoffset:0}#ecosystem.in-view .eco-branch-planned{opacity:1}#ecosystem .eco-svg path[data-hover]{stroke:var(--signal)}#ecosystem .eco-pulse{fill:var(--signal);filter:drop-shadow(0 0 6px var(--signal))}#ecosystem .eco-grid{display:grid;grid-template-columns:1fr 120px 1fr;row-gap:22px;position:relative;z-index:1}#ecosystem .eco-node{display:flex;flex-direction:column;align-items:flex-start;gap:8px;text-align:left;cursor:pointer;font-family:var(--font-body);color:var(--fg);background:linear-gradient(180deg,var(--bg-elev) 0%,var(--bg) 130%);border:1px solid var(--line);border-radius:var(--radius-sm);padding:16px 20px;max-width:340px;width:100%;opacity:0;transform:translateY(14px);transition:opacity .6s ease,transform .6s cubic-bezier(.2,.7,.2,1),border-color .2s ease,box-shadow .2s ease;transition-delay:calc(var(--i, 0) * 70ms),calc(var(--i, 0) * 70ms),0s,0s}#ecosystem.in-view .eco-node{opacity:1;transform:none}#ecosystem .eco-node:hover{transform:translateY(-2px);border-color:var(--signal-line);box-shadow:0 0 40px -18px var(--signal-line)}#ecosystem .eco-hub,#ecosystem .eco-self{grid-column:1 / -1;justify-self:center;align-items:center;text-align:center;border-color:var(--signal-line)}#ecosystem .eco-self{background:radial-gradient(300px 120px at 50% 0%,var(--signal-dim),transparent 70%),var(--bg-elev)}#ecosystem .eco-name{font-size:1.05rem;font-weight:600;letter-spacing:-.01em}#ecosystem .eco-hub .eco-name{font-size:1.5rem}#ecosystem .eco-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}#ecosystem .eco-rival{font-size:.62rem;padding:3px 8px}#ecosystem .eco-left{grid-column:1;justify-self:end}#ecosystem .eco-right{grid-column:3;justify-self:start}#ecosystem .eco-planned{border-style:dashed}#ecosystem .eco-planned .eco-name,#ecosystem .eco-planned .dim{color:var(--fg-faint)}#ecosystem .eco-label{grid-column:1 / -1;justify-self:center;z-index:1;font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;color:var(--fg-faint);background:var(--bg);padding:4px 14px;border:1px solid var(--line);border-radius:999px;margin:10px 0}#eco-dialog{background:var(--bg-elev-2);color:var(--fg);border:1px solid var(--line-strong);border-radius:var(--radius);padding:32px;max-width:460px;width:calc(100% - 48px)}#eco-dialog::backdrop{background:#0a0b0db3;backdrop-filter:blur(4px)}#eco-dialog .eco-chip-live{border-color:var(--signal-line);color:var(--signal)}@media(max-width:720px){#ecosystem .eco-grid{grid-template-columns:1fr;padding-left:44px}#ecosystem .eco-node,#ecosystem .eco-left,#ecosystem .eco-right{grid-column:1;justify-self:stretch;max-width:none}#ecosystem .eco-hub,#ecosystem .eco-self{align-items:flex-start;text-align:left}#ecosystem .eco-label{justify-self:start}}@media(prefers-reduced-motion:reduce){#ecosystem .eco-node,#ecosystem .eco-svg path,#ecosystem .eco-fill{opacity:1!important;transform:none!important;transition:none!important}#ecosystem #eco-trunk,#ecosystem .eco-branch-live{stroke-dashoffset:0!important}#ecosystem.in-view .eco-fill,#ecosystem .eco-fill{width:var(--pct)}}
