.flight{position:relative;width:100%;height:100svh;min-height:32rem;overflow:hidden;background:radial-gradient(125% 95% at 50% 34%,#101830,#0b1020 52%,#070b14);touch-action:none;-moz-user-select:none;user-select:none;-webkit-user-select:none}.flight canvas{position:absolute;inset:0;width:100%;height:100%;display:block}.flight-links{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}html.js .flight-links{opacity:0;transition:opacity .9s}html.js .flight.is-sky .flight-links{opacity:1}.flight-links line{stroke:var(--accent);stroke-opacity:.13;stroke-width:1;transition:stroke-opacity .25s}.flight-links line.soft{stroke-opacity:.07;stroke-dasharray:3 7}.flight-links line.lit{stroke-opacity:.62}.perch{position:absolute;left:0;right:0;bottom:clamp(3.4rem,9vh,5.5rem);display:grid;gap:.7rem;justify-items:center;text-align:center;padding:0 1.2rem;pointer-events:none;transition:opacity .7s;z-index:3}.perch-name{font-size:clamp(1.45rem,4.6vw,2.35rem);font-weight:600;letter-spacing:.03em;margin:0;color:var(--fg)}.perch-tag{color:var(--muted);font-size:clamp(.87rem,2.4vw,1rem);margin:0;max-width:26rem;line-height:1.55}.perch-hint{font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;color:#5b6784;margin:.4rem 0 0;transition:opacity .8s}.perch-release{pointer-events:auto;font:inherit;font-size:.78rem;font-weight:600;color:var(--fg);background:#ffffff0d;border:1px solid var(--line);border-radius:999px;padding:.5rem 1.05rem;cursor:pointer;opacity:0;transform:translateY(6px);transition:opacity .6s,transform .6s,background .2s}.perch-release.show{opacity:1;transform:none}.perch-release:hover{background:#ffffff1c}.flight-nodes{position:absolute;inset:0;z-index:4}.flight-node{position:absolute;transform:translate(-50%,-50%);display:grid;justify-items:center;gap:.3rem;width:-moz-max-content;width:max-content;max-width:min(15rem,40vw);padding:.4rem;text-align:center}.fn-kind{font-size:.58rem;letter-spacing:.15em;text-transform:uppercase;color:#7d8aa8;text-shadow:0 1px 3px rgba(7,11,20,.95),0 0 10px rgba(7,11,20,.9);transition:color .25s}.fn-title{font-size:.79rem;line-height:1.35;color:#9aa7c5;text-shadow:0 1px 3px rgba(7,11,20,.95),0 0 10px rgba(7,11,20,.92),0 0 20px rgba(7,11,20,.75);transition:color .25s,text-shadow .25s}.fn-meta{font-size:.6rem;letter-spacing:.06em;color:#5f6c8a;opacity:0;transition:opacity .25s;text-shadow:0 1px 3px rgba(7,11,20,.95)}.flight-node:hover .fn-title,.flight-node:focus-visible .fn-title{color:var(--fg);text-shadow:0 1px 3px rgba(7,11,20,.95),0 0 10px rgba(7,11,20,.92),0 0 22px var(--accent)}.flight-node:hover .fn-meta,.flight-node:focus-visible .fn-meta{opacity:1}.flight-node:hover .fn-kind{color:#8493b3}.flight-node:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:8px}.flight-node.is-app .fn-title{font-family:Cinzel,Georgia,serif;font-size:clamp(1rem,2.8vw,1.3rem);color:var(--fg);letter-spacing:.03em}.flight-node.is-app .fn-kind{color:var(--accent)}.flight-mark{position:absolute;z-index:6;left:clamp(.9rem,3vw,1.5rem);bottom:clamp(.9rem,3vw,1.5rem);display:flex;align-items:center;gap:.5rem;font:inherit;font-size:.8rem;color:var(--muted);background:#0b102099;border:1px solid var(--line);border-radius:999px;padding:.42rem .85rem .42rem .55rem;cursor:pointer;transition:opacity .7s,color .2s,background .2s}.flight-mark:hover{color:var(--fg);background:#ffffff14}.flight-scroll{position:absolute;z-index:6;right:clamp(.9rem,3vw,1.5rem);bottom:clamp(.9rem,3vw,1.5rem);color:#5f6c8a;padding:.5rem;border-radius:999px;transition:color .2s,background .2s}.flight-scroll:hover{color:var(--fg);background:#ffffff0f}.flight canvas,.flight-links,.perch,.flight-mark{display:none}html.js .flight canvas,html.js .flight-links,html.js .perch,html.js .flight-mark{display:block}html.js .perch{display:grid}html.js .flight-mark{display:flex;opacity:0;pointer-events:none}html.js .flight-mark.live{opacity:1;pointer-events:auto}.flight-nodes{position:static;display:flex;flex-wrap:wrap;gap:1.25rem;justify-content:center;align-content:center;height:100%;padding:3.5rem 1.25rem}.flight-nodes .flight-node{position:static;transform:none;max-width:14rem}html.js .flight-nodes{position:absolute;inset:0;display:block;padding:0;opacity:0;transition:opacity .9s;pointer-events:none}html.js .flight-nodes.live{opacity:1;pointer-events:auto}html.js .flight-nodes .flight-node{position:absolute;transform:translate(-50%,-50%);max-width:min(15rem,40vw)}@media (prefers-reduced-motion:reduce){.perch-release,.flight-node,.fn-meta,.flight-links line{transition:none}}
