/* Floating photographic objects in a perspective-projected, orbitable space.
   Clip instead of a hidden scroll container: focusing an offscreen node must not shift the scene. */
#space-viewport{position:relative;isolation:isolate;background:#fff;border-top:1px solid #eee;border-bottom:1px solid #eee;height:calc(100dvh - 278px);min-height:620px;overflow:clip;touch-action:none;cursor:grab;outline:none}
#space-viewport:focus-visible{outline:1px solid #b4775a;outline-offset:3px}
#space-viewport.orbiting,#space-viewport.orbiting .space-node{cursor:grabbing}
#space-viewport canvas,.space-nodes{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
#space-viewport canvas{z-index:0}.space-nodes{z-index:1}
.space-node{position:absolute;left:0;top:0;width:124px;height:124px;padding:7px;border:0;border-radius:0;background:none;color:#333;transform-origin:center;pointer-events:auto;cursor:pointer;transition:opacity .18s;will-change:transform}
.space-node img{display:block;width:100%;height:100%;object-fit:contain;user-select:none;pointer-events:none;filter:grayscale(var(--grayscale,0)) blur(var(--depth-blur,0px)) drop-shadow(0 var(--image-shadow,4px) 5px #25252512);transition:filter .2s}
.space-node:hover img,.space-node:focus-visible img,.space-node.selected img{filter:grayscale(var(--grayscale,0)) blur(var(--depth-blur,0px)) drop-shadow(0 6px 6px #25252526)}
.space-node.unrelated{--grayscale:1}
.space-node.selected::before{content:'';position:absolute;inset:-28%;z-index:-1;border-radius:50%;background:radial-gradient(ellipse,rgba(255,255,255,.78) 12%,rgba(255,255,255,.4) 43%,rgba(255,255,255,0) 72%);filter:blur(9px);pointer-events:none}
.space-node:focus-visible{outline:1px solid #b4775a;outline-offset:3px}
.space-node-caption{position:absolute;left:50%;top:calc(100% + 4px);width:170px;text-align:center;transform:translateX(-50%) scale(var(--caption-scale,1));transform-origin:top center;line-height:1.25;pointer-events:none;opacity:0;transition:opacity .16s;text-shadow:0 0 5px #fff,0 0 5px #fff,0 1px 3px #fff}
.space-node-caption strong{font-size:10px;font-weight:500;display:block}.space-node-caption small{display:block;font-size:8px;color:#929292;margin-top:3px;font-variant-numeric:tabular-nums}
#space-viewport[data-layout=years] .space-node.near .space-node-caption{opacity:.85}.space-node.engaged .space-node-caption,.space-node:hover .space-node-caption,.space-node:focus-visible .space-node-caption{opacity:1}
.space-node.selected .space-node-caption strong{color:#b15c3e;font-weight:600}.space-missing{display:grid;place-items:center;height:100%;font-size:10px;color:#888}
.space-controls{position:absolute;z-index:5;top:18px;left:0;right:0;display:flex;flex-direction:column;gap:14px;pointer-events:none}
.space-control-row{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px}
.space-group-controls{width:100%;display:flex;justify-content:space-between;align-items:center;color:#989898;font-size:9px;background:#ffffffdd;pointer-events:auto}
.space-group-controls>span{letter-spacing:.25px}.space-spacing{display:flex;align-items:center;gap:9px;font-size:9px;white-space:nowrap}.space-spacing input[type=range]{width:105px;min-width:0;height:2px;margin:0;accent-color:#777;cursor:ew-resize}.space-spacing output{width:29px;text-align:right;font-size:8px;font-variant-numeric:tabular-nums}
.space-group-controls [data-space-overview]{font:inherit;color:#535353;padding:0;margin-left:12px;text-decoration:underline;text-underline-offset:3px}
.space-cluster-labels{position:absolute;inset:0;pointer-events:none;z-index:2}
.space-cluster-label{position:absolute;top:0;left:0;white-space:nowrap;text-align:center;font-size:10px;font-weight:500;letter-spacing:1.3px;text-transform:uppercase;color:#777;background:#ffffffdd;padding:4px 6px;transition:opacity .15s;will-change:transform;pointer-events:auto;cursor:pointer}
.space-cluster-label:hover{color:#b15c3e}.space-cluster-label:focus-visible{outline:1px solid #b15c3e;outline-offset:3px}
.space-cluster-label small{font-size:8px;font-weight:400;letter-spacing:0;margin-left:7px;color:#a7a7a7}.space-cluster-label:after{content:'';display:block;width:22px;height:1px;background:#d6d6d6;margin:7px auto -8px}
#space-viewport[data-layout=clusters] .space-node{width:144px;height:144px}
.space-mode-label{font-size:8px;letter-spacing:1.5px;color:#999;background:#fff;padding:6px 0}
.space-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center;pointer-events:auto}
.space-actions button{font:inherit;font-size:10px;line-height:1.2;border:1px solid #e5e5e5;border-radius:20px;background:#fff;color:#777;padding:8px 11px;cursor:pointer;white-space:nowrap}
.space-actions button:hover{color:#222;border-color:#bbb}.space-actions button[aria-pressed=true]{background:#252525;color:#fff;border-color:#252525}.space-actions button:disabled{opacity:.38;cursor:default}
.space-layout-switch{display:flex;padding:2px;border:1px solid #e7e7e7;border-radius:22px;background:#fafafa}
.space-layout-switch button{border:0;background:transparent;padding:6px 11px}.space-layout-switch button[aria-pressed=true]{background:#fff;color:#242424;box-shadow:0 1px 3px #00000012}
.space-bottom{position:absolute;z-index:5;bottom:13px;left:0;right:0;display:flex;align-items:end;justify-content:space-between;gap:12px;pointer-events:none}
.space-instructions{background:#ffffffdd;padding:7px 0}.space-instructions>div{font-size:8px;color:#9b9b9b;letter-spacing:1.4px}.space-count{color:#555;font-weight:500}.space-instructions p{font-size:10px;color:#959595;margin:7px 0 0;line-height:1.6}.space-touch-hint{display:none}
.space-camera{display:flex;align-items:center;gap:10px;pointer-events:auto}.space-camera .zoom-controls{background:#fff}.space-camera output{min-width:40px;text-align:center;font-size:10px;color:#888}
.space-compass{width:56px;height:56px;overflow:visible}.space-compass line{stroke-width:1;stroke:#aaa}.space-compass line:first-child{stroke:#b47b60}.space-compass line:nth-child(3){stroke:#8a9ba5}.space-compass text{font:7px Arial;fill:#999;text-anchor:middle}
.space-empty{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(85%,400px);text-align:center;z-index:3;cursor:auto}.space-empty>span{font-size:40px;color:#ccc}.space-empty h2{font-size:21px;font-weight:500}.space-empty p{font-size:12px;color:#888;line-height:1.6}
@media(max-width:1150px){.space-controls{align-items:flex-start}.space-mode-label{display:none}.space-actions{width:100%;justify-content:center}.space-instructions p{font-size:9px}}
@media(max-width:800px){#space-viewport{min-height:560px;height:calc(100dvh - 258px)}.space-controls{top:14px}.space-node-caption strong{font-size:11px}.space-instructions p{max-width:230px}.space-compass{display:none}.space-desktop-hint{display:none}.space-instructions .space-touch-hint{display:block}.view-toolbar{gap:8px}.view-switch button{font-size:10px;padding:8px 10px}}
@media(max-width:480px){#space-viewport{min-height:530px}.space-actions{gap:5px}.space-actions button{font-size:9px;padding:7px 9px}.space-layout-switch button{padding:5px 8px}.space-bottom{bottom:12px;gap:8px}.space-instructions p{max-width:165px;font-size:8px}.space-instructions>div{font-size:7px}.space-camera .zoom-controls button{width:25px}.space-camera output{min-width:33px}.view-switch button{padding:7px}.view-switch button span{display:none}.view-toolbar .result-summary{font-size:8px}.space-controls [data-space-reset]{display:none}.space-cluster-label{font-size:8px;letter-spacing:.65px}.space-group-controls{font-size:8px}.space-spacing{gap:6px;font-size:8px}.space-spacing input[type=range]{width:75px}}
@media(prefers-reduced-motion:reduce){.space-node,.space-node-caption,.space-node img{transition:none}}
/* A focused object stays in the graph; the research panel opens on demand. */
#space-viewport[data-focused=true]>.space-controls:not(.space-selection){display:none}
.space-selection{top:17px;gap:13px;align-items:stretch;background:transparent;padding-bottom:18px;cursor:default}
.space-selection-header,.space-selection-title,.space-lineage-nav{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;pointer-events:auto}
.space-selection-header button{font-size:10px;padding:6px 0;color:#666}.space-selection-header>span{font-size:8px;letter-spacing:1.2px;text-transform:uppercase;color:#aaa}
.space-selection-header button:hover{color:#b15c3e}.space-selection-title strong{font-weight:500;font-size:20px;letter-spacing:-.5px}.space-selection-title>span{font-size:10px;color:#999;margin-right:auto}.space-selection-title button{font-size:9px;color:#888;text-decoration:underline;text-underline-offset:3px;padding:0}
.space-lineage-nav{position:absolute;z-index:6;width:240px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:12px;padding:0;border:0;color:#8c8c8c;pointer-events:auto;cursor:default}
.space-lineage-nav>div{display:flex;align-items:center;justify-content:space-between;gap:20px;width:180px;background:#ffffffed;border-radius:28px;padding:4px;box-shadow:0 3px 22px #00000006}
.space-lineage-nav button{display:grid;place-items:center;width:42px;height:42px;border:1px solid #e5e1dd;border-radius:50%;background:#fff;color:#333;font-size:21px;transition:background .18s,border-color .18s}
.space-lineage-nav button:hover{background:#f6f4f2;border-color:#b99d8c}
.space-lineage-nav output{min-width:36px;text-align:center;font-size:11px;letter-spacing:1px;font-variant-numeric:tabular-nums}
.space-lineage-nav>span{font-size:9px;background:#ffffffd9;padding:4px 7px;border-radius:4px;white-space:nowrap}
.space-node.lineage-version .space-node-caption{top:calc(100% + 6px);bottom:auto;transform-origin:top center;opacity:1}
.space-node.lineage-version .space-node-caption strong{font-size:11px}.space-node.lineage-version .space-node-caption small{font-size:8px}
@media(max-width:480px){.space-selection-header>span{font-size:7px;letter-spacing:.6px}.space-selection-title{gap:9px}.space-selection-title strong{font-size:18px}.space-selection-title>span{font-size:9px}.space-selection-title button{font-size:8px}.space-lineage-nav{font-size:8px;gap:8px}.space-lineage-nav>div{gap:6px}.space-selection{gap:10px}}
.space-node-caption[data-relation]:not([data-relation=""]):after{content:attr(data-relation);display:block;font-size:8px;color:#b07860;margin-top:4px;white-space:nowrap}


.space-lineage-nav select{width:250px;max-width:calc(100vw - 32px);padding:8px 10px;border:1px solid #e5e1dd;border-radius:7px;background:#fff;font-size:11px;color:#444;text-overflow:ellipsis}
/* Models expand inside the existing graph, around its original object. */
#space-viewport[data-lineage]:not([data-lineage=""]) .space-node-caption{opacity:0;top:calc(100% + 6px);bottom:auto}
#space-viewport[data-lineage]:not([data-lineage=""]) .space-node.engaged .space-node-caption,#space-viewport[data-lineage]:not([data-lineage=""]) .space-node:hover .space-node-caption,#space-viewport[data-lineage]:not([data-lineage=""]) .space-node:focus-visible .space-node-caption{opacity:1}
.space-lineage-nav{top:auto!important;left:50%!important;bottom:82px;width:auto;max-width:calc(100% - 32px);display:grid;grid-template-columns:150px 260px;gap:7px 16px;background:#ffffffed;border:1px solid #eee9e5;padding:8px 10px;border-radius:12px;box-shadow:0 8px 25px #00000005}
.space-lineage-nav>div{width:150px;gap:9px;padding:0;box-shadow:none;background:transparent}
.space-lineage-nav button{width:31px;height:31px;font-size:17px}.space-lineage-nav button:disabled{opacity:.25;cursor:default}
.space-lineage-nav output{font-size:9px;letter-spacing:.4px;min-width:50px}
.space-lineage-nav select{width:260px;padding:8px 10px;font-size:11px}
.space-lineage-nav>span{grid-column:1/-1;text-align:center;background:transparent;padding:0;font-size:9px;color:#999}
@media(max-width:600px){
 body:has(#space-viewport[data-lineage]:not([data-lineage=""])) .result-summary{display:none}
 .space-lineage-nav{bottom:77px;grid-template-columns:106px minmax(0,1fr);gap:7px 10px;width:calc(100% - 32px);padding:6px 8px}.space-lineage-nav>div{width:106px;gap:4px}.space-lineage-nav output{min-width:34px;font-size:8px}.space-lineage-nav select{width:100%;font-size:10px}.space-lineage-nav button{width:27px;height:27px;font-size:15px}.space-lineage-nav>span{font-size:8px}
 #space-viewport[data-lineage]:not([data-lineage=""]) .space-selection-title{flex-wrap:wrap;gap:6px 12px}#space-viewport[data-lineage]:not([data-lineage=""]) .space-selection-title strong{font-size:20px;max-width:80%}
}

/* Depth blur tracks rotation directly; captions and controls remain crisp. */
#space-viewport[data-lineage]:not([data-lineage=""]) .space-node.lineage-version img{transition:none}

/* Company dots replace repetitive spokes without moving the graph. */
.space-company-context{display:flex;align-items:center;flex-wrap:wrap;gap:8px;pointer-events:auto;width:fit-content;max-width:100%;font-size:10px;color:#7d7975}
.space-company-label{font-size:9px;margin-right:2px;color:#999}
.space-company-context button{display:flex;align-items:center;gap:9px;border:1px solid #e8ded5;border-radius:20px;padding:6px 10px;background:#fff;color:#66594f;cursor:pointer;font:inherit;line-height:1.3}
.space-company-context button:before,.space-node.company-peer .space-node-caption strong:before{content:'';display:inline-block;width:5px;height:5px;flex:none;border-radius:50%;background:#b48660;vertical-align:middle}
.space-node.company-peer .space-node-caption strong:before{margin-right:5px;box-shadow:0 0 0 2px #fff}
#space-viewport[data-focused=true] .space-node.company-peer:not(:hover):not(:focus-visible) .space-node-caption{opacity:0}
.space-company-action{color:#999;font-size:9px;padding-left:8px;border-left:1px solid #eee5dd}
.space-company-context button:hover,.space-company-context button[aria-pressed=true]{border-color:#c5a68c;background:#faf6f2}
.space-company-context button:focus-visible{outline:2px solid #b48660;outline-offset:3px}
@media(max-width:600px){.space-company-context{gap:6px;font-size:9px}.space-company-label{font-size:8px}.space-company-context button{padding:5px 8px;gap:6px}.space-company-action{font-size:8px;padding-left:6px}}
