:root{--sky-ink: 218 228 242;--sky-dim: 150 166 190;--sky-glow: 255 214 152;--sky-deep: 10 16 28;--sky-cool: 120 178 216;--ink: rgb(var(--sky-ink));--dim: rgba(var(--sky-dim) / .95);--faint: rgba(var(--sky-dim) / .7);--glow: rgb(var(--sky-glow));--cool: rgb(var(--sky-cool));--panel: rgba(var(--sky-deep) / .34);--hairline: rgba(var(--sky-ink) / .16);--hairline-soft: rgba(var(--sky-ink) / .08);--lift: 255 206 122;--sink: 122 164 208;--mono: "Spline Sans Mono", ui-monospace, "SF Mono", Menlo, monospace;--serif: "Fraunces", "Iowan Old Style", Georgia, serif;--sans: "Karla", system-ui, -apple-system, sans-serif;--gutter: clamp(16px, 2.4vw, 34px);--ease: cubic-bezier(.22, .61, .36, 1);--ease-soft: cubic-bezier(.4, 0, .2, 1)}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;overflow:hidden;background:#05070d;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;overscroll-behavior:none;touch-action:none}#app{position:fixed;inset:0}#app canvas{display:block;width:100%;height:100%}.layer{position:fixed;inset:0;pointer-events:none;z-index:10}.layer.interactive{pointer-events:auto}.tnum{font-variant-numeric:tabular-nums}#boot{position:fixed;inset:0;z-index:100;display:grid;place-items:center;background:radial-gradient(ellipse at 50% 62%,#12203a,#070b14 58%,#04060b);transition:opacity 1.1s var(--ease-soft),visibility 1.1s}#boot.gone{opacity:0;visibility:hidden}.boot-inner{text-align:center;width:min(84vw,380px)}.boot-mark{width:120px;height:60px;opacity:.9}.boot-mark .bm-path{fill:none;stroke:rgba(var(--sky-glow) / .55);stroke-width:1.4;stroke-linecap:round;stroke-dasharray:240;stroke-dashoffset:240;animation:draw 2.6s var(--ease) forwards}.boot-mark .bm-wing{fill:rgb(var(--sky-glow));animation:rise 3.4s var(--ease-soft) infinite}@keyframes draw{to{stroke-dashoffset:0}}@keyframes rise{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.boot-title{font-family:var(--serif);font-weight:300;font-size:clamp(46px,11vw,68px);line-height:1;letter-spacing:.012em;margin:10px 0 0;color:rgb(var(--sky-ink))}.boot-sub{font-family:var(--mono);font-size:11px;letter-spacing:.42em;text-transform:uppercase;color:rgba(var(--sky-glow) / .72);margin:10px 0 30px;padding-left:.42em}.boot-bar{height:1px;background:rgba(var(--sky-ink) / .14);overflow:hidden}.boot-bar i{display:block;height:100%;width:0%;background:rgb(var(--sky-glow));transition:width .5s var(--ease)}.boot-note{font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;color:rgba(var(--sky-dim) / .6);margin:14px 0 0;min-height:1.4em}#title{display:grid;align-content:center;padding:0 var(--gutter);background:linear-gradient(100deg,rgba(var(--sky-deep) / .72),rgba(var(--sky-deep) / .34) 42%,rgba(var(--sky-deep) / 0) 74%);transition:opacity .9s var(--ease-soft)}#title.hidden{opacity:0;pointer-events:none}.title-block{max-width:560px;margin-left:clamp(0px,5vw,90px)}.title-eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.4em;text-transform:uppercase;color:rgba(var(--sky-glow) / .8);margin:0 0 14px}.title-word{font-family:var(--serif);font-weight:300;font-size:clamp(64px,15vw,148px);line-height:.86;letter-spacing:-.012em;margin:0;color:rgb(var(--sky-ink))}.title-word em{font-style:italic;font-weight:300;color:rgba(var(--sky-glow) / .95)}.title-tag{font-family:var(--serif);font-style:italic;font-weight:300;font-size:clamp(17px,2.2vw,22px);line-height:1.5;color:rgba(var(--sky-ink) / .78);max-width:34ch;margin:22px 0 0}.title-seed{display:flex;align-items:baseline;gap:12px;margin:30px 0 0;font-family:var(--mono);font-size:12px;letter-spacing:.14em;color:var(--faint)}.title-seed b{color:rgb(var(--sky-ink));font-weight:500;letter-spacing:.22em;font-size:14px}.title-seed button{font:inherit;letter-spacing:.14em;background:none;border:0;border-bottom:1px solid var(--hairline);color:var(--dim);padding:2px 0;cursor:pointer;transition:color .25s,border-color .25s}.title-seed button:hover{color:var(--glow);border-color:rgba(var(--sky-glow) / .6)}.title-actions{display:flex;flex-wrap:wrap;gap:10px;margin:34px 0 0}.btn{font-family:var(--mono);font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:rgb(var(--sky-ink));background:rgba(var(--sky-deep) / .4);border:1px solid var(--hairline);padding:13px 22px;cursor:pointer;transition:background .3s var(--ease),border-color .3s,color .3s,transform .3s var(--ease);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px)}.btn:hover{background:rgba(var(--sky-glow) / .14);border-color:rgba(var(--sky-glow) / .65);color:rgb(var(--sky-glow))}.btn:active{transform:translateY(1px)}.btn.primary{background:rgba(var(--sky-glow) / .9);border-color:rgba(var(--sky-glow) / .9);color:rgb(var(--sky-deep));font-weight:500}.btn.primary:hover{background:rgb(var(--sky-glow));color:rgb(var(--sky-deep))}.btn.ghost{background:none}.title-foot{position:absolute;left:var(--gutter);right:var(--gutter);bottom:var(--gutter);display:flex;justify-content:space-between;gap:20px;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;color:var(--faint);text-transform:uppercase}#hud{font-family:var(--mono);transition:opacity .7s var(--ease-soft);text-shadow:0 1px 2px rgba(0,0,0,.8),0 0 10px rgba(0,0,0,.65),0 0 30px rgba(0,0,0,.45)}#hud:before,#hud:after{content:"";position:absolute;left:0;right:0;height:190px;pointer-events:none}#hud:before{top:0;background:linear-gradient(to bottom,rgba(6,10,18,.55),rgba(6,10,18,.16) 55%,transparent)}#hud:after{bottom:0;background:linear-gradient(to top,rgba(6,10,18,.62),rgba(6,10,18,.2) 55%,transparent)}#hud.hidden{opacity:0}#hud.dim{opacity:.34}.hud-corner{position:absolute;display:grid;gap:3px}.hud-tl{top:var(--gutter);left:var(--gutter)}.hud-tr{top:var(--gutter);right:var(--gutter);justify-items:end;text-align:right}.hud-bl{bottom:var(--gutter);left:var(--gutter)}.hud-br{bottom:var(--gutter);right:var(--gutter);justify-items:end;text-align:right}.readout-label{font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--dim)}.readout-value{font-size:clamp(26px,3.4vw,40px);font-weight:300;line-height:.98;letter-spacing:-.01em;color:rgb(var(--sky-ink))}.readout-value small{font-size:.36em;letter-spacing:.2em;color:var(--faint);margin-left:5px;font-weight:400}.readout-sub{font-size:11.5px;letter-spacing:.12em;color:var(--dim)}.vario{position:absolute;left:var(--gutter);top:50%;transform:translateY(-50%);width:46px;height:min(46vh,330px);display:grid;grid-template-columns:13px 1fr;gap:8px;align-items:stretch}.vario-scale{position:relative;border-left:1px solid var(--hairline)}.vario-scale i{position:absolute;left:0;width:6px;height:1px;background:var(--hairline)}.vario-scale i.major{width:11px;background:rgba(var(--sky-ink) / .3)}.vario-scale i.zero{width:15px;background:rgba(var(--sky-ink) / .55)}.vario-bar{position:relative;overflow:visible}.vario-fill{position:absolute;left:0;width:3px;background:var(--vario-color, rgb(var(--lift)));transition:background-color .5s var(--ease-soft);box-shadow:0 0 12px 0 var(--vario-color, rgb(var(--lift)))}.vario-needle{position:absolute;left:-3px;width:15px;height:1px;background:rgb(var(--sky-ink))}.vario-num{position:absolute;left:20px;font-size:12px;letter-spacing:.06em;transform:translateY(-50%);white-space:nowrap;color:rgb(var(--sky-ink))}.vario-kind{position:absolute;left:20px;bottom:-22px;font-size:11.5px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--vario-color, var(--dim));white-space:nowrap;transition:color .5s var(--ease-soft)}.speedbar{position:relative;width:128px;height:3px;background:rgba(var(--sky-ink) / .12);margin-top:8px}.speedbar i{position:absolute;top:0;left:0;height:100%;background:rgba(var(--sky-ink) / .6)}.speedbar b{position:absolute;top:-4px;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid rgb(var(--sky-glow));transform:translate(-4px);transition:left .35s var(--ease-soft)}.speedbar.stall{background:rgba(var(--lift) / .35);animation:pulse .9s infinite}@keyframes pulse{50%{opacity:.45}}.wing{position:absolute;left:50%;bottom:var(--gutter);transform:translate(-50%);display:grid;justify-items:center;gap:6px}.wing-track{position:relative;width:132px;height:2px;background:rgba(var(--sky-ink) / .14)}.wing-track i{position:absolute;top:-3px;left:50%;width:8px;height:8px;margin-left:-4px;background:rgb(var(--sky-ink));transition:left .16s var(--ease-soft),background-color .3s}.wing-track u{position:absolute;top:-5px;width:1px;height:12px;background:var(--hairline)}.wing-caption{font-size:10px;letter-spacing:.26em;text-transform:uppercase;color:var(--dim)}.wing-labels{display:flex;justify-content:space-between;width:148px;font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--dim)}.wing-labels span.on{color:rgb(var(--sky-glow))}.flock{display:flex;align-items:center;gap:7px}.flock svg{width:15px;height:9px;overflow:visible}.flock svg path{fill:rgba(var(--sky-ink) / .8)}.banner{position:absolute;left:0;right:0;bottom:17vh;text-align:center;pointer-events:none}.banner-phase{font-family:var(--mono);font-size:10px;letter-spacing:.42em;text-transform:uppercase;color:rgba(var(--sky-glow) / .9);margin:0 0 8px;padding-left:.42em}.banner-line{font-family:var(--serif);text-shadow:0 2px 22px rgba(0,0,0,.85),0 0 60px rgba(0,0,0,.6);font-style:italic;font-weight:300;font-size:clamp(19px,2.6vw,27px);color:rgba(var(--sky-ink) / .94);margin:0;text-shadow:0 2px 30px rgba(0,0,0,.55)}.banner{opacity:0;transform:translateY(10px);transition:opacity 1.2s var(--ease-soft),transform 1.2s var(--ease)}.banner.show{opacity:1;transform:translateY(0)}.note{position:absolute;left:50%;top:12vh;transform:translate(-50%,-8px);font-family:var(--mono);font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:rgb(var(--sky-glow));opacity:0;transition:opacity .6s var(--ease-soft),transform .6s var(--ease);white-space:nowrap}.note.show{opacity:1;transform:translate(-50%)}.compass{position:absolute;left:50%;top:var(--gutter);transform:translate(-50%);width:min(46vw,400px);height:20px;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 18%,#000 82%,transparent);mask-image:linear-gradient(90deg,transparent,#000 18%,#000 82%,transparent)}.compass-tape{position:absolute;top:0;height:100%;white-space:nowrap}.compass-tick{position:absolute;top:0;transform:translate(-50%);font-size:10.5px;letter-spacing:.14em;color:var(--dim);text-align:center}.compass-tick.card{color:rgba(var(--sky-ink) / .8);font-size:10.5px}.compass-tick i{display:block;width:1px;height:5px;background:currentColor;margin:2px auto 0;opacity:.6}.compass-wind{position:absolute;top:1px;transform:translate(-50%);color:rgba(var(--sky-glow) / .9);font-size:11px}.compass-centre{position:absolute;left:50%;top:0;width:1px;height:9px;background:rgb(var(--sky-ink));transform:translate(-50%)}#summary{display:grid;place-items:center;padding:var(--gutter);background:rgba(var(--sky-deep) / .86);backdrop-filter:blur(18px) saturate(.85);-webkit-backdrop-filter:blur(18px) saturate(.85);opacity:0;transition:opacity 1.4s var(--ease-soft);overflow-y:auto}#summary.show{opacity:1}.sum-card{width:min(94vw,860px)}.sum-head{display:flex;align-items:baseline;justify-content:space-between;gap:20px;flex-wrap:wrap}.sum-title{font-family:var(--serif);font-weight:300;font-size:clamp(30px,5vw,48px);line-height:1;margin:0;color:rgb(var(--sky-ink))}.sum-seed{font-family:var(--mono);font-size:11px;letter-spacing:.28em;color:rgba(var(--sky-glow) / .85);text-transform:uppercase}.sum-map{width:100%;aspect-ratio:16 / 7;margin:22px 0 0;border:1px solid var(--hairline-soft);background:rgba(var(--sky-deep) / .5);display:block}.sum-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:1px;margin:1px 0 0;background:var(--hairline-soft);border:1px solid var(--hairline-soft);border-top:0}.sum-stat{background:rgba(var(--sky-deep) / .55);padding:14px 15px}.sum-stat dt{font-family:var(--mono);font-size:9px;letter-spacing:.24em;text-transform:uppercase;color:var(--faint);margin:0 0 5px}.sum-stat dd{font-family:var(--mono);font-size:21px;font-weight:300;color:rgb(var(--sky-ink));margin:0}.sum-stat dd small{font-size:.5em;letter-spacing:.16em;color:var(--faint);margin-left:3px}.sum-stat.hero dd{color:rgb(var(--sky-glow))}.sum-sources{margin:20px 0 0}.sum-sources h3{font-family:var(--mono);font-size:9.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--faint);margin:0 0 10px;font-weight:400}.sum-bar{display:flex;height:5px;overflow:hidden}.sum-bar span{height:100%;transition:width .9s var(--ease)}.sum-legend{display:flex;flex-wrap:wrap;gap:6px 18px;margin:11px 0 0;font-family:var(--mono);font-size:10px;letter-spacing:.13em;color:var(--dim)}.sum-legend b{display:inline-block;width:7px;height:7px;margin-right:6px;vertical-align:0}.sum-verdict{font-family:var(--serif);font-style:italic;font-weight:300;font-size:clamp(17px,2.3vw,22px);line-height:1.55;color:rgba(var(--sky-ink) / .9);margin:26px 0 0;max-width:52ch}.sum-actions{display:flex;flex-wrap:wrap;gap:10px;margin:28px 0 0}.log-list{margin:20px 0 0;border-top:1px solid var(--hairline-soft)}.log-row{display:grid;grid-template-columns:1fr auto auto auto;gap:14px;align-items:baseline;padding:10px 2px;border-bottom:1px solid var(--hairline-soft);font-family:var(--mono);font-size:11.5px;letter-spacing:.08em;color:var(--dim)}.log-row b{color:rgb(var(--sky-ink));font-weight:500;letter-spacing:.2em}.log-row .badge{color:rgb(var(--sky-glow));font-size:9.5px;letter-spacing:.2em}.log-empty{font-family:var(--mono);font-size:11px;color:var(--faint);padding:18px 0;letter-spacing:.12em}.stick{position:absolute;width:96px;height:96px;margin:-48px 0 0 -48px;border:1px solid rgba(var(--sky-ink) / .2);border-radius:50%;opacity:0;transition:opacity .22s}.stick.on{opacity:1}.stick i{position:absolute;left:50%;top:50%;width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;background:rgba(var(--sky-ink) / .22);border:1px solid rgba(var(--sky-ink) / .4)}.wing-pads{position:absolute;left:0;right:0;bottom:calc(var(--gutter) + 78px);display:flex;justify-content:space-between;padding:0 var(--gutter);pointer-events:none}.wing-pad{pointer-events:auto;-webkit-tap-highlight-color:transparent;touch-action:none;user-select:none;display:grid;gap:2px;justify-items:center;min-width:104px;padding:14px 18px;border:1px solid var(--hairline);border-radius:3px;background:rgba(var(--sky-deep) / .5);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:rgb(var(--sky-ink));font-family:var(--mono);transition:background .14s,border-color .14s,transform .14s}.wing-pad b{font-size:12.5px;font-weight:500;letter-spacing:.24em}.wing-pad i{font-style:normal;font-size:9.5px;letter-spacing:.14em;color:var(--faint)}.wing-pad.on{background:rgba(var(--sky-glow) / .85);border-color:rgb(var(--sky-glow));color:rgb(var(--sky-deep));transform:translateY(1px)}.wing-pad.on i{color:rgba(var(--sky-deep) / .75)}.touch-btns{position:absolute;right:var(--gutter);bottom:calc(var(--gutter) + 74px);display:grid;gap:9px}.touch-btn{width:46px;height:46px;border-radius:50%;border:1px solid var(--hairline);background:rgba(var(--sky-deep) / .42);color:rgba(var(--sky-ink) / .85);font-family:var(--mono);font-size:11px;letter-spacing:.1em;display:grid;place-items:center;cursor:pointer}.keys{display:grid;grid-template-columns:auto 1fr;gap:5px 14px;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:var(--dim);margin:26px 0 0;max-width:380px}.keys kbd{font:inherit;color:rgb(var(--sky-ink));border:1px solid var(--hairline);padding:2px 7px;white-space:nowrap}.keys span{color:var(--faint)}.perf{position:absolute;left:var(--gutter);bottom:calc(var(--gutter) + 96px);font-family:var(--mono);font-size:10px;line-height:1.5;letter-spacing:.08em;color:var(--faint);white-space:pre}.wash{position:fixed;inset:0;z-index:50;pointer-events:none;background:rgb(var(--sky-deep));opacity:0;transition:opacity 1.6s var(--ease-soft)}.wash.on{opacity:1}@media (max-width: 700px){:root{--gutter: 14px}.wing-pad{min-width:92px;padding:12px 14px}.wing{bottom:calc(var(--gutter) + 96px)}.wing-labels{display:none}.wing-track{width:108px}.vario{height:34vh;width:38px}.compass{width:68vw}.readout-value{font-size:25px}.title-block{margin-left:0}.keys{display:none}.sum-grid{grid-template-columns:repeat(2,1fr)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.12s!important}}
