:root{color-scheme:dark;--bg:#081722;--line:#294451;--mint:#baf8d1;--ink:#153229;--cyan:#95d8ee;--amber:#efc98a;--text:#e9f2ef;--muted:#93aaaF;--red:#f4a4a0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);overflow:hidden}button,input{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible{outline:3px solid #f1ce80;outline-offset:4px}button{touch-action:manipulation}button:active{transform:scale(.98)}.hud{height:92px;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:14px 28px;border-bottom:1px solid #203742;background:#091a25;position:relative;z-index:5}.brand{display:flex;align-items:center;gap:12px}.brand-icon{color:var(--mint);font-size:33px}.brand strong{display:block;font-size:17px;letter-spacing:.16em}.brand small{display:block;font-size:8px;color:var(--muted);letter-spacing:.12em;margin-top:5px}.resources{display:flex;gap:30px}.resources small{font-size:9px;letter-spacing:.1em;color:#a3bbb9;display:block}.resources strong{font-size:30px;letter-spacing:-.04em;display:block;line-height:1.25}.resources em{font-size:16px;font-style:normal;color:#76938f;margin-left:6px}.compute{min-width:130px}.compute strong{color:var(--mint)}.energy{min-width:65px}.energy strong{color:var(--amber);font-size:24px}.meter{height:3px;width:100%;background:#243b42;margin-top:2px;border-radius:5px;overflow:hidden}.meter i{display:block;background:var(--mint);height:100%;width:0;transition:width .3s}.energy .meter i{background:var(--amber)}.clock{text-align:right}.clock>span{font-size:9px;letter-spacing:.08em;color:var(--mint);display:block}.clock i,.pulse-heading i{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--mint);box-shadow:0 0 8px #8bebab;vertical-align:middle;margin-right:5px;animation:blink 2s infinite}.clock strong{display:block;font-size:13px;margin-top:5px;font-variant-numeric:tabular-nums}.clock small{display:block;color:var(--muted);font-size:9px;margin-top:3px}.identity{height:30px;padding:0 28px;display:flex;align-items:center;justify-content:space-between;font-size:10px;color:#a1b9b8;border-bottom:1px solid #1a303c;background:#0a1b26;position:relative;z-index:5}.identity b{font-weight:500;color:#dcece5}.identity .heat{color:var(--amber)}#stage{position:relative;height:calc(100dvh - 122px);overflow:hidden;background:radial-gradient(ellipse at 52% 34%,#133244,#081722 70%)}.map-surface{position:absolute;inset:0;touch-action:none}.worldmap{width:100%;height:100%;user-select:none;touch-action:none;display:block}.ocean-grid{fill:url(#ocean);stroke:#224051;stroke-width:1}.land{fill:url(#land);stroke:#405d6b;stroke-width:1.2}.landline{stroke:#42606f;opacity:.3;fill:none}.gridline{stroke:#315367;stroke-dasharray:2 9;fill:none;opacity:.3;stroke-width:.6}.route{stroke:#78d6b6;fill:none;stroke-width:1.1;opacity:.27;stroke-dasharray:4 7}.route.energy{stroke:#dfbd81}.route.selected{opacity:.65;stroke-width:1.7;animation:flow 5s linear infinite}#sites,#bubbles,#connections{position:absolute;inset:0;pointer-events:none}#connections{width:100%;height:100%;overflow:visible;z-index:2}#connections path{stroke:#baf8d1;stroke-width:1;fill:none;opacity:.35;stroke-dasharray:3 6}#connections path.locked{stroke:#829ba3;opacity:.2}#sites{z-index:2}.site{position:absolute;padding:0;border:0;background:transparent;pointer-events:auto;width:44px;height:44px;display:grid;place-items:center;transform:translate(-50%,-50%);color:#b9cfd2}.site:active{transform:translate(-50%,-50%) scale(.93)}.site-icon{height:24px;width:24px;display:grid;place-items:center;border:1px solid #5d8296;background:#193444;border-radius:50%;font-size:11px;box-shadow:0 0 0 5px #92b5c00a}.site.owned .site-icon{background:#a9e9c4;color:#103b2b;border:2px solid #ddffe9;box-shadow:0 0 0 6px #8bebbb1c,0 0 22px #91e3b533}.site.selected .site-icon{box-shadow:0 0 0 7px #baf8d129,0 0 0 13px #baf8d112}.site.threat .site-icon{background:#623f45;border-color:var(--red);color:#ffccc7;box-shadow:0 0 15px #f4a4a055}.site-label-mini{position:absolute;left:39px;top:15px;font-size:9px;white-space:nowrap;color:#b5cdd0;text-shadow:0 1px 5px #071722;pointer-events:none;display:none}.site.owned .site-label-mini,.site.selected .site-label-mini,.show-labels .site-label-mini{display:block}.site.selected .site-label-mini{display:none}.site:hover .site-icon{border-color:var(--mint);background:#285245}.site-label{position:absolute;z-index:3;pointer-events:auto;width:270px;text-align:center;transform:translate(-50%,-100%);padding:11px 16px 10px;border-radius:22px;background:#0b202de8;border:1px solid #375763;box-shadow:0 12px 30px #0003}.site-label small{font-size:8px;letter-spacing:.1em;text-transform:uppercase;color:#96b4b8}.site-label strong{display:block;font-size:16px;margin:4px 0}.site-label p{font-size:10px;line-height:1.45;margin:5px 0 0;color:#acbfc1}.site-label .intel{color:#e9cf9f}.site-label .close{position:absolute;right:7px;top:5px;width:25px;height:25px;background:transparent;color:#91a9ac;border:0;border-radius:50%}.site-label .site-status{display:inline-block;border-radius:12px;padding:3px 6px;margin-top:4px;font-size:8px;color:var(--mint);background:#173d32}.site-label .site-status.danger{color:var(--red);background:#402a31}#bubbles{z-index:4}.action-bubble{position:absolute;width:218px;min-height:87px;padding:12px 15px;border-radius:23px;border:1px solid #ddffe7;background:var(--mint);color:var(--ink);text-align:left;box-shadow:0 9px 22px #020c1566;pointer-events:auto;transition:background .2s,box-shadow .2s;overflow:hidden}.action-bubble:hover{background:#dcffe5;box-shadow:0 8px 30px #baf8d12d}.action-bubble .action-top{display:flex;justify-content:space-between;align-items:center;gap:7px}.action-bubble strong{font-size:13px;line-height:1.2;font-weight:650}.action-bubble .arrow{font-size:17px;font-weight:500}.action-bubble .desc{display:block;font-size:10px;line-height:1.3;color:#355447;margin-top:5px}.action-bubble .cost{font-size:9px;margin-top:8px;display:flex;gap:8px;align-items:center;white-space:nowrap}.action-bubble .cost b{background:#8bcca5;padding:2px 5px;border-radius:5px;font-size:10px;color:#153b29}.action-bubble.locked{background:#112735ec;color:#bcccd0;border:1px dashed #516a75;box-shadow:0 8px 22px #0003}.action-bubble.locked .desc{color:#a0b4bb}.action-bubble.locked .cost{color:#9db2ba}.action-bubble.locked .cost b{background:#294450;color:#c2d4da}.action-bubble.locked:hover{background:#1a3342}.action-bubble.risky:not(.locked):not(.running){background:#f6d6a2;border-color:#ffe5be;color:#46361f}.action-bubble.risky:not(.locked) .desc{color:#665034}.action-bubble.risky:not(.locked) .cost b{background:#dfbe86;color:#46361f}.action-bubble.running{background:#b7e4f1;border:1px solid #d8f4fc;color:#163b49}.action-bubble.running .desc{color:#355c69}.action-bubble.running .cost b{background:#8dc4d5;color:#153744}.action-bubble .progress{position:absolute;bottom:0;left:0;height:4px;background:#39839b;transition:width .5s linear}.action-bubble .cancel-inline{position:absolute;right:9px;bottom:8px;padding:2px 5px;font-size:9px;background:#8cc4d3;color:#174758;border:0;border-radius:7px}.overview-bubble{position:absolute;pointer-events:auto;background:#ceeeda;color:#153b29;border:1px solid #eefff3;border-radius:16px;padding:6px 10px;font-size:10px;white-space:nowrap;box-shadow:0 4px 16px #0005}.overview-bubble small{color:#426354;margin-left:5px}.guide{position:absolute;left:24px;top:25px;max-width:290px;pointer-events:none;z-index:1}.guide span{color:var(--mint);font-size:9px;letter-spacing:.15em}.guide strong{display:block;font-size:20px;line-height:1.25;margin:7px 0;color:#e8f4ee}.guide p{font-size:11px;line-height:1.5;color:#97b2b8;margin:0}.guide[hidden],.site-label[hidden]{display:none}.operation-strip{position:absolute;top:10px;left:15px;right:15px;display:flex;gap:7px;overflow:auto;z-index:5;pointer-events:none;scrollbar-width:none}.op-chip{flex-shrink:0;pointer-events:auto;border:1px solid #4b8495;border-radius:19px;padding:7px 11px;background:#112b39ed;color:#c4e6f0;font-size:10px}.op-chip .op-time{margin-left:9px;color:#e2f5fa;font-variant-numeric:tabular-nums}.map-controls{position:absolute;bottom:140px;left:20px;display:flex;gap:7px;z-index:6}.map-controls button{background:#102737e8;color:#b9d4d8;border:1px solid #41606d;border-radius:20px;padding:9px 12px;min-height:42px;font-size:13px}.map-controls button span{font-size:10px;margin-left:4px}.zoom-controls{position:absolute;right:20px;bottom:140px;display:flex;gap:6px;z-index:6}.zoom-controls button{width:42px;height:42px;border:1px solid #41606d;background:#102737e8;color:#c4dcdf;border-radius:50%;font-size:20px}.world-pulse{position:absolute;bottom:0;left:0;right:0;z-index:5;padding:13px 24px calc(15px + env(safe-area-inset-bottom));background:linear-gradient(0deg,#081722 70%,#081722d9);border-top:1px solid #29424d}.pulse-heading{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:9px}.pulse-heading>span{font-size:8px;letter-spacing:.12em;color:#b8d2ca}.pulse-heading small{font-size:9px;color:#93acad}.event-stream{display:flex;gap:18px}.event-card{flex:1;min-width:0;text-align:left;padding:0 0 0 10px;border:0;border-left:2px solid #5e8c7b;background:transparent;color:#d7e5de}.event-card strong{font-weight:500;font-size:11px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-card small{font-size:9px;color:#8aa3aa;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4;margin-top:4px}.event-card.warning{border-color:var(--red)}#toast{position:fixed;bottom:135px;left:50%;transform:translate(-50%,20px);padding:11px 17px;border:1px solid #668d7c;background:#17382f;color:#d8f4e1;border-radius:17px;z-index:30;max-width:calc(100% - 30px);width:max-content;font-size:12px;box-shadow:0 8px 35px #0007;opacity:0;transition:.2s;pointer-events:none}#toast.show{opacity:1;transform:translate(-50%,0)}.join-overlay{position:fixed;inset:0;z-index:40;display:grid;place-items:center;background:#06131cdf;backdrop-filter:blur(12px);padding:24px}.join-overlay[hidden]{display:none}.join-overlay form{width:min(410px,100%);padding:32px;border-radius:28px;background:#102735;border:1px solid #36545d;box-shadow:0 25px 100px #0007}.join-mark{display:block;color:var(--mint);font-size:45px;margin-bottom:20px}.join-overlay small{font-size:9px;color:#a0bcb6;letter-spacing:.1em}.join-overlay h1{font-size:34px;font-weight:500;letter-spacing:-.04em;margin:10px 0}.join-overlay p{color:#afc5c7;font-size:13px;line-height:1.7}.join-overlay label{display:block;font-size:9px;letter-spacing:.1em;color:#9bb5b9;margin:24px 0 8px}.join-overlay input{width:100%;border:1px solid #54737a;background:#0a1e2a;padding:13px 15px;border-radius:13px;color:#e5f4ec;font-size:15px}.join-overlay button{margin-top:12px;width:100%;padding:14px 16px;border-radius:14px;background:var(--mint);color:#153b29;font-size:14px;font-weight:600;border:0;display:flex;justify-content:space-between}.join-note{margin-top:20px;color:#91aeb3;font-size:10px;line-height:1.6}@keyframes blink{50%{opacity:.4}}@keyframes flow{to{stroke-dashoffset:-44}}
@media(max-width:680px){.hud{height:95px;padding:10px 13px;gap:12px;align-items:center}.brand{gap:6px;align-self:flex-start;margin-top:3px}.brand-icon{font-size:23px}.brand strong{font-size:11px;letter-spacing:.12em}.brand small{display:none}.resources{gap:14px;position:absolute;bottom:11px;left:14px;right:150px;align-items:baseline}.resources small{font-size:8px}.resources strong{font-size:25px}.resources em{font-size:12px}.compute{min-width:100px;flex:1}.energy{min-width:55px}.energy strong{font-size:20px}.clock{align-self:flex-start;margin-top:3px}.clock>span{font-size:8px}.clock strong{font-size:11px}.clock small{font-size:8px}.identity{height:26px;padding:0 13px;font-size:9px}#stage{height:calc(100dvh - 121px)}.guide{top:60px;left:17px;max-width:240px}.guide strong{font-size:17px}.guide p{font-size:10px}.site-label{width:250px;padding:9px 18px}.site-label strong{font-size:14px}.site-label p{font-size:9px;max-height:42px;overflow:auto}.site-label-mini{font-size:8px}.action-bubble{width:calc((100vw - 36px)/2);min-height:84px;border-radius:20px;padding:10px 11px}.action-bubble strong{font-size:11px}.action-bubble .desc{font-size:9px}.action-bubble .cost{font-size:8px;gap:5px;margin-top:6px}.action-bubble .cost b{font-size:9px;padding:2px 4px}.action-bubble .arrow{font-size:15px}.world-pulse{padding:10px 14px calc(12px + env(safe-area-inset-bottom))}.pulse-heading{margin-bottom:8px}.pulse-heading small{font-size:8px}.pulse-heading>span{font-size:7px}.event-stream{gap:10px}.event-card strong{font-size:10px}.event-card small{font-size:9px}.event-card:nth-child(n+2){display:none}.map-controls{left:12px;bottom:108px}.zoom-controls{right:12px;bottom:108px}.map-controls button{min-height:40px;padding:8px 10px}.map-controls button span{font-size:9px}.zoom-controls button{width:40px;height:40px}.operation-strip{top:8px;left:12px;right:12px}.op-chip{font-size:9px;padding:7px 9px}#toast{bottom:107px;font-size:11px}.overview-bubble{font-size:9px;padding:6px 8px}.overview-bubble small{font-size:8px}}
@media(max-height:700px){.site-label p{display:none}.action-bubble{min-height:70px;padding-top:8px;padding-bottom:8px}.action-bubble .desc{font-size:8px;margin-top:3px}.action-bubble .cost{margin-top:4px}.world-pulse{padding-top:8px;padding-bottom:8px}.event-card small{display:none}.map-controls,.zoom-controls{bottom:75px}.guide p{display:none}.operation-strip{top:4px}}

.site[hidden]{display:none}.overview .site-icon{width:12px;height:12px;font-size:6px;box-shadow:none}.overview .site{width:22px;height:22px}.overview .site.owned .site-icon{width:20px;height:20px;font-size:10px}.overview .site-label-mini{display:none}.overview-bubble{min-width:145px;text-align:left;white-space:normal;padding:9px 12px}.overview-bubble strong{display:block;font-size:10px;font-weight:600}.overview-bubble small{display:block;font-size:9px;margin:3px 0 0}.overview-bubble{min-height:42px}@media(max-width:680px){.overview-bubble{width:150px;min-width:0}.overview-bubble strong{font-size:9px}.overview-bubble small{font-size:8px}}

/* Action holons: each bubble is a compact local capability attached to its site. */
.action-bubble{width:min(220px,calc(100vw - 28px));min-height:0;padding:8px 12px;border-radius:19px}
.action-bubble.collapsed{width:max-content;min-width:132px;max-width:calc(100vw - 28px);height:39px;min-height:39px;padding:7px 12px;border-radius:22px}
.action-bubble.collapsed .desc,.action-bubble.collapsed .cost span:not(.time),.action-bubble.collapsed .time,.action-bubble.collapsed .action-hint{display:none}
.action-bubble.collapsed.running .time{display:inline}
.action-bubble.collapsed .action-top{gap:15px}
.action-bubble.expanded{width:min(250px,calc(100vw - 24px));min-height:104px;padding:12px 14px 10px;border-radius:19px;box-shadow:0 12px 28px #0008;z-index:2}
.action-bubble.expanded .desc{display:block;font-size:11px;line-height:1.4;margin-top:7px}
.action-bubble.expanded .cost{margin-top:9px;gap:9px;font-size:9px}
.action-bubble.expanded .action-hint{display:block;margin-top:7px;font-size:8px;letter-spacing:.08em;text-transform:uppercase;opacity:.75}
.action-bubble.collapsed .cost{position:absolute;right:10px;top:50%;transform:translateY(-50%);margin:0}
.action-bubble.collapsed .cost b{font-size:9px;padding:3px 6px}
.action-bubble.collapsed .action-top{padding-right:48px}
.site .site-icon{border-color:var(--owner-color,#5d8296)}
.site.controlled .site-icon{background:var(--owner-color,#a9e9c4);color:#0b1b22;border:2px solid #e8fff0;box-shadow:0 0 0 6px #ffffff16,0 0 20px #ffffff22}
@media(max-width:680px){.action-bubble{width:min(240px,calc(100vw - 24px))}.action-bubble.expanded{width:min(270px,calc(100vw - 24px))}.action-bubble.collapsed{min-width:128px;height:38px;min-height:38px}}

.action-bubble.collapsed .desc,.action-bubble.collapsed .cost span:not(.time),.action-bubble.collapsed .time,.action-bubble.collapsed .action-hint{display:none}
.action-bubble.collapsed.running .cost .time{display:inline}
.action-bubble.collapsed .action-top{gap:10px}
.action-bubble.collapsed .action-top strong{font-size:11px;white-space:nowrap}
.site.controlled .site-icon{background:var(--owner-color,#a9e9c4);color:#0b1b22;border:2px solid #e8fff0;box-shadow:0 0 0 6px #ffffff18,0 0 20px #ffffff26}

.action-bubble.collapsed .cancel-inline{display:none}

.controller-tag{display:inline-flex;align-items:center;gap:5px;margin-top:5px;font-size:8px;letter-spacing:.07em;color:var(--owner-color,#9bb4b6)}
.controller-tag i{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--owner-color,#9bb4b6);box-shadow:0 0 7px var(--owner-color,#9bb4b6)}
.site .site-icon{background:var(--owner-color,#193444);border-color:var(--owner-color,#5d8296);color:#10212a}

/* Site action orbit: vivid, readable controls that stay anchored to the selected location. */
#connections{z-index:4;overflow:visible}
#connections .orbit-link{fill:none;stroke:#8fe8c1;stroke-width:1.2;stroke-dasharray:2 6;opacity:.3;pointer-events:none}
#connections .orbit-link.locked{stroke:#738b94;opacity:.16}
.action-orb{cursor:pointer;pointer-events:all;outline:none;transform-box:fill-box;transform-origin:center;transition:transform .22s cubic-bezier(.2,.8,.2,1)}
.action-orb:hover,.action-orb:focus-visible{transform:scale(1.08)}
.action-orb .orb-halo{fill:#72d8b013;stroke:#a5f2cb22;stroke-width:1;transition:fill .25s,stroke .25s}
.action-orb .orb-fill{fill:#174b3b;stroke:#b1f6d5;stroke-width:1.4;filter:drop-shadow(0 7px 13px #00131c99)}
.action-orb .orb-track,.action-orb .orb-progress{fill:none;stroke-width:3.6}
.action-orb .orb-track{stroke:#8ab5ba2e}
.action-orb .orb-progress{stroke:#82e3ff;stroke-linecap:round;opacity:0;transition:stroke-dashoffset .3s linear,stroke .3s}
.action-orb.running .orb-progress{opacity:1}
.action-orb.running .orb-fill{fill:#174b61;stroke:#a6edff;filter:drop-shadow(0 0 10px #66dfff75)}
.action-orb.running .orb-halo{fill:#50d5ff20;stroke:#72deff65;animation:orbBreathe 1.8s ease-in-out infinite}
.action-orb.locked{opacity:.5;filter:saturate(.45)}
.action-orb.locked .orb-fill{fill:#182a33;stroke:#71838b;stroke-dasharray:3 4}
.action-orb.risky:not(.locked):not(.running) .orb-fill{fill:#59442a;stroke:#ffdfa2}
.action-orb.risky:not(.locked):not(.running) .orb-halo{fill:#f1b95d1d;stroke:#efc77c44}
.action-orb.chosen .orb-halo{fill:#ffdc7638;stroke:#ffe5a8cc;stroke-width:1.5}
.action-orb.chosen .orb-fill{stroke:#ffe3a2;filter:drop-shadow(0 0 13px #ffcf6499)}
.action-orb.chosen .orb-progress{stroke:#ffd66e}
.action-orb .orb-icon{fill:none;stroke:#e5fff1;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 1px 4px #00151a)}
.action-orb.risky:not(.locked) .orb-icon{stroke:#ffe5b3}
.action-orb.running .orb-icon{stroke:#b9f2ff}
.action-orb .orb-cost{font:700 8px Inter,ui-sans-serif,system-ui,sans-serif;fill:#e3f4ed;text-anchor:start;filter:drop-shadow(0 1px 2px #00131c)}
.action-orb .orb-cost .clock-mark,.action-orb .orb-cost .compute-mark{fill:none;stroke:#a7d6c7;stroke-width:1}
.action-orb .orb-cost .clock-hand,.action-orb .orb-cost .compute-pins{fill:none;stroke:#a7d6c7;stroke-width:.9;stroke-linecap:round}
.action-detail{position:absolute;z-index:5;display:flex;align-items:flex-start;gap:11px;width:min(280px,calc(100vw - 24px));padding:13px 15px;border:1px solid #d5c17e88;border-radius:18px;background:linear-gradient(135deg,#182f35f2,#0a1d29f5 72%);box-shadow:0 12px 34px #0008,0 0 22px #e9ca6430;backdrop-filter:blur(10px);color:#edf4df;pointer-events:none;animation:detailArrive .2s cubic-bezier(.2,.8,.2,1) both}
.action-detail .detail-icon{width:32px;height:32px;flex:none;display:grid;place-items:center;border-radius:11px;background:#f3d77e20;border:1px solid #f3d77e48}
.action-detail svg{width:20px;height:20px;fill:none;stroke:#ffe38a;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.action-detail strong{font-size:12px;letter-spacing:.02em;color:#fff3c5}
.action-detail p{font-size:10px;line-height:1.4;margin:4px 0;color:#c2d2cc}
.action-detail small{font-size:8px;letter-spacing:.04em;color:#efce72}
.site-label{transform:translate(-50%,0);background:linear-gradient(145deg,#112c39f2,#091b26ed);border-color:#71939a66;box-shadow:0 10px 30px #0006,0 0 24px #82dbb218}
.site-label .close{pointer-events:auto}
.resource-particle{position:absolute;z-index:12;width:26px;height:26px;display:grid;place-items:center;color:#ffdf73;border-radius:50%;background:#ffc94c22;border:1px solid #ffe69d77;box-shadow:0 0 16px #ffd34d77;pointer-events:none;animation:resourceFly 1s cubic-bezier(.18,.74,.22,1) forwards}
.resource-dust{position:absolute;z-index:11;width:4px;height:4px;border-radius:50%;background:#ffe681;box-shadow:0 0 8px #ffd75f;pointer-events:none;animation:resourceFly 1s cubic-bezier(.18,.74,.22,1) forwards}
.resource-particle svg,.completion-flash svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.world-delta{position:absolute;z-index:12;color:#ffe477;font-size:10px;font-weight:700;white-space:nowrap;text-shadow:0 1px 8px #000,0 0 13px #ffc83c;pointer-events:none;animation:deltaLift 1.8s ease-out forwards}
.completion-flash{position:absolute;z-index:11;width:62px;height:62px;display:grid;place-items:center;margin:-31px 0 0 -31px;border-radius:50%;color:#ffe786;background:radial-gradient(circle,#fff1a25c,#ffdc5931 54%,transparent 72%);border:1px solid #ffe180;box-shadow:0 0 26px #ffd54d99;pointer-events:none;animation:completionDissolve .9s ease-out forwards}
.completion-flash svg{width:24px;height:24px}
.world-signal{position:absolute;z-index:10;display:flex;flex-direction:column;gap:3px;max-width:min(230px,70vw);padding:8px 11px;border-radius:13px;border:1px solid #ffdc785e;background:#211e13e8;color:#ffe48c;box-shadow:0 8px 26px #0007,0 0 20px #ffd25320;pointer-events:none;transform:translate(-50%,-100%);animation:signalArrive 2.4s ease-out forwards}
.world-signal strong{display:flex;align-items:center;gap:5px;font-size:9px;line-height:1.25}
.world-signal svg{width:12px;height:12px;fill:none;stroke:#ffe083;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.world-signal span{font-size:8px;line-height:1.35;color:#dbc987}
@keyframes orbBreathe{50%{opacity:.55;transform:scale(1.12)}}
@keyframes detailArrive{from{opacity:0;transform:translateY(8px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes resourceFly{0%{opacity:0;transform:translate(0,0) scale(.5) rotate(-35deg)}12%{opacity:1;transform:translate(0,0) scale(1.2)}76%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.28) rotate(120deg)}}
@keyframes deltaLift{0%{opacity:0;transform:translate(-50%,5px) scale(.92)}15%{opacity:1}75%{opacity:1}100%{opacity:0;transform:translate(-50%,-34px) scale(1.02)}}
@keyframes completionDissolve{0%{opacity:0;transform:scale(.4);filter:blur(1px)}20%{opacity:1;transform:scale(1.1);filter:blur(0)}70%{opacity:.85;transform:scale(1.25)}100%{opacity:0;transform:scale(1.8);filter:blur(7px)}}
@keyframes signalArrive{0%{opacity:0;transform:translate(-50%,-88%) scale(.95)}12%,76%{opacity:1;transform:translate(-50%,-100%) scale(1)}100%{opacity:0;transform:translate(-50%,-116%) scale(.98)}}
@media(max-width:680px){.action-detail{padding:11px 12px;border-radius:16px}.site-label{max-width:calc(100vw - 24px)}#connections .orbit-link{stroke-width:1;opacity:.24}}

/* Narrow-phone layout: keep the selected place, action orbit, and gestures inside the viewport. */
#stage{touch-action:none}
@media(max-width:360px){
 .hud{height:92px;padding:7px 10px;gap:0;align-items:flex-start}
 .brand{gap:5px;margin-top:1px}
 .brand-icon{font-size:20px}
 .brand strong{font-size:10px}
 .clock{position:absolute;right:9px;top:6px;max-width:83px;text-align:right}
 .clock>span{font-size:7px;white-space:nowrap}
 .clock strong{font-size:10px;margin-top:3px}
 .clock small{font-size:7px;margin-top:2px}
 .resources{position:absolute;left:9px;right:9px;bottom:8px;gap:12px;align-items:end}
 .compute{min-width:0;flex:1}
 .energy{min-width:43px}
 .resources small{font-size:7px}
 .resources strong{font-size:20px}
 .energy strong{font-size:17px}
 .resources em{font-size:10px;margin-left:3px}
 .identity{height:30px;padding:0 9px;font-size:7px;overflow:hidden;white-space:nowrap}
 #identity{overflow:hidden;text-overflow:ellipsis}
 #presence{display:none}
 #stage{height:calc(100dvh - 122px)}
 #stage .world-pulse{display:none}
 #stage:not(.overview) .map-controls,#stage:not(.overview) .zoom-controls{display:none}
 #stage.overview .guide,#stage.overview .overview-bubble{display:none}
 .site-label{width:calc(100vw - 16px);max-width:calc(100vw - 16px);left:50%;top:4px;padding:6px 28px 6px 8px;border-radius:13px;text-align:left;transform:translateX(-50%)}
 .site-label small,.site-label p{display:none}
 .site-label strong{font-size:11px;line-height:1.2;margin:0 0 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .site-label .site-status{display:block;max-width:100%;margin:0;padding:0;background:transparent;font-size:7px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .site-label .controller-tag{display:inline;white-space:nowrap;font-size:7px;letter-spacing:0}
 .site-label .controller-tag i{width:5px;height:5px;margin:0 3px}
 .site-label .close{right:4px;top:3px;width:24px;height:24px}
 .site-label.action-open{padding-top:5px;padding-bottom:5px}
 .site-label.action-open .site-status{display:none}
 .action-detail{width:calc(100vw - 16px);max-width:calc(100vw - 16px);gap:7px;padding:6px 8px;border-radius:12px}
 .action-detail .detail-icon{width:24px;height:24px;border-radius:8px}
 .action-detail svg{width:15px;height:15px}
 .action-detail strong{font-size:9px;line-height:1.1}
 .action-detail p{font-size:7px;line-height:1.2;margin:2px 0 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .action-detail small{display:none}
 .action-orb .orb-cost{font-size:7px}
 .operation-strip{left:7px;right:7px;top:auto;bottom:7px;max-width:calc(100% - 14px)}
 .op-chip{font-size:7px;padding:5px 7px}
 #toast{bottom:50px;font-size:9px}
 #stage.overview .map-controls{top:4px;bottom:auto;left:7px}
 #stage.overview .zoom-controls{top:4px;bottom:auto;right:7px}
 .site{width:30px;height:30px}
 .site-icon{width:17px;height:17px;font-size:8px;box-shadow:0 0 0 3px #92b5c00a}
 .site.owned .site-icon{width:20px;height:20px}
 .site-label-mini{left:26px;top:9px;font-size:6px}
 #connections,.worldmap{overflow:hidden}
}
@media(min-width:361px) and (max-width:680px){
 .action-detail{padding:8px 11px;gap:9px}
 .action-detail .detail-icon{width:28px;height:28px}
 .action-detail p{margin:3px 0}
}
