droidsembly 0.0.0-stage → 0.4.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.it.md +184 -0
- package/README.md +184 -3
- package/bin/cubefarm.js +297 -0
- package/bin/distribution.d.ts +3 -0
- package/bin/distribution.js +48 -0
- package/dist/THIRD_PARTY_LICENSES.txt +2542 -0
- package/dist/assets/AccessibilitySettings-DSmFk9JC.js +30 -0
- package/dist/assets/AccessibilitySettings-HrzBDUTN.css +1 -0
- package/dist/assets/AppViewer-alNn4TBB.js +5 -0
- package/dist/assets/Balloon-UTs7npGo.js +1 -0
- package/dist/assets/Batched-BOgjreKO.js +45 -0
- package/dist/assets/Birds-BA2HM-AD.js +1 -0
- package/dist/assets/Blimp-CTykuz6B.js +1 -0
- package/dist/assets/BufferGeometryUtils-BsmWvcA2.js +1 -0
- package/dist/assets/Duck-DH63jUrP.js +1 -0
- package/dist/assets/Effects-CNyhhFkE.js +65 -0
- package/dist/assets/Fireworks-CJfDJOeb.js +33 -0
- package/dist/assets/Helicopter-CW_SP7xP.js +1 -0
- package/dist/assets/Hurricane-9WqZGyZg.js +33 -0
- package/dist/assets/Kaiju-SpSi_jBg.js +1 -0
- package/dist/assets/Meteors-DvjhLfbF.js +1 -0
- package/dist/assets/MissionConsole-BEP5CdC8.js +1 -0
- package/dist/assets/Office-BBnd6tyn.js +563 -0
- package/dist/assets/Office-DMOP02gg.css +1 -0
- package/dist/assets/PhotoPanel-DehErnsv.js +1 -0
- package/dist/assets/PhotoPanel-v4ANHBsO.css +1 -0
- package/dist/assets/PhotoScene-Ce-dzToM.js +115 -0
- package/dist/assets/Plane-0nfvzL_c.js +1 -0
- package/dist/assets/Pocket-CBoyL0ra.js +2 -0
- package/dist/assets/Rainbow-CdcWsmW8.js +28 -0
- package/dist/assets/Roof-mkMKniSZ.js +34 -0
- package/dist/assets/Shell-BmnZn4UL.js +13 -0
- package/dist/assets/Skywriting-06dZPAfg.js +1 -0
- package/dist/assets/TerminalView-BrP-ENHg.css +1 -0
- package/dist/assets/TerminalView-wlhSixSH.js +17 -0
- package/dist/assets/ToyWorld-Cuu9aW-K.js +1 -0
- package/dist/assets/Ufo-iHaoe5t1.js +1 -0
- package/dist/assets/Whale-DZg88zIX.js +1 -0
- package/dist/assets/all-CYErCTCA.js +11 -0
- package/dist/assets/billboardLayout-DSKGXPIM.js +1 -0
- package/dist/assets/bloomMarks-DariC6lY.js +4231 -0
- package/dist/assets/cheerRules-CZGSrxOB.js +1 -0
- package/dist/assets/cityLayout-7ckfe3wf.js +1 -0
- package/dist/assets/director-CrzFgnoP.js +1 -0
- package/dist/assets/dogState-DiOvoobI.js +1 -0
- package/dist/assets/doors-BHKj8tkO.js +1 -0
- package/dist/assets/gallery-ColCPQQE.js +1 -0
- package/dist/assets/gate-BplJKcLG.js +2 -0
- package/dist/assets/index-B6qvKFYN.js +10 -0
- package/dist/assets/index-COpmc42S.css +1 -0
- package/dist/assets/instantReplay-DGiLgvkQ.js +1 -0
- package/dist/assets/interact-0qw7BGhL.js +1 -0
- package/dist/assets/jsx-runtime-BFUkm7bt.js +1 -0
- package/dist/assets/jukeboxSongs-CjbAzAeb.js +1 -0
- package/dist/assets/kit-C6ByUQ-Y.js +2 -0
- package/dist/assets/mic-B316hcCe.js +1 -0
- package/dist/assets/news-CrPol-gz.js +1 -0
- package/dist/assets/paint.worker-D95XJ3xX.js +1 -0
- package/dist/assets/photoMode-CYxQfgUF.js +1 -0
- package/dist/assets/pipeline-BOTOZ69L.js +1215 -0
- package/dist/assets/rapier-CXAOW8OC.js +1 -0
- package/dist/assets/rig-wAyl3G1G.js +1 -0
- package/dist/assets/speechLanguage-BtfdhZNI.js +1 -0
- package/dist/assets/store-FA83kfnc.js +5 -0
- package/dist/assets/useDayTime-0XsqM14Q.js +1 -0
- package/dist/assets/useGraphics-Cif18p7Q.js +1 -0
- package/dist/assets/voiceMessages-DtNmUazr.js +1 -0
- package/dist/assets/weatherState-ExG1doW-.js +1 -0
- package/dist/icons/Sora-OFL.txt +93 -0
- package/dist/icons/apple-touch-icon.png +0 -0
- package/dist/icons/badge-96.png +0 -0
- package/dist/icons/badge.svg +1 -0
- package/dist/icons/droid-antenna.svg +29 -0
- package/dist/icons/droid-eyes.svg +29 -0
- package/dist/icons/droid-shell.svg +29 -0
- package/dist/icons/droid-spark.svg +29 -0
- package/dist/icons/droid-wire.svg +29 -0
- package/dist/icons/favicon-16.png +0 -0
- package/dist/icons/favicon-32.png +0 -0
- package/dist/icons/favicon.svg +1 -0
- package/dist/icons/icon-192.png +0 -0
- package/dist/icons/icon-512.png +0 -0
- package/dist/icons/icon-maskable-512.png +0 -0
- package/dist/icons/icon.svg +29 -0
- package/dist/icons/logo-dark.svg +29 -0
- package/dist/icons/logo-light.svg +29 -0
- package/dist/icons/sora-400.ttf +0 -0
- package/dist/icons/sora-700.ttf +0 -0
- package/dist/index.html +26 -0
- package/dist/manifest.webmanifest +19 -0
- package/dist/third-party-licenses.json +1106 -0
- package/dist-server/browser-init.js +24 -0
- package/dist-server/index.js +20049 -0
- package/dist-server/index.js.map +7 -0
- package/dist-server/ptyHost.js +234 -0
- package/dist-server/ptyHost.js.map +7 -0
- package/package.json +98 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--ink:#1f1d2b;--paper:#fffdf6;--muted:#62667b;--good:#2dc653;--bad:#ef476f;--warn:#ffb703;--accent:#ff8a5b;--popup-paper:#faf8f5;--popup-petrol:#17485c;--popup-cyan:#65d8ef;--popup-soft:#dceef2;--font:Fredoka, "Segoe UI", system-ui, sans-serif;--mono:"JetBrains Mono", Consolas, monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;font-family:var(--font);color:var(--ink);background:#bfe3ff;margin:0;overflow:hidden}canvas{display:block}a{color:#3a56d4}kbd{border:2px solid var(--ink);min-width:1.6em;font-family:var(--font);text-align:center;background:#fff;border-bottom-width:4px;border-radius:6px;margin:0 .1em;padding:0 .4em;font-size:.85em;font-weight:600;line-height:1.5;display:inline-block}code{font-family:var(--mono);background:#0000000f;border-radius:5px;padding:1px 5px;font-size:.85em}.muted{color:var(--muted)}.small{font-size:.85rem}.spacer{flex:1}.grow{flex:1;min-width:0}.nowrap{white-space:nowrap}.btn{font-family:var(--font);border:2.5px solid var(--ink);color:var(--ink);box-shadow:0 3px 0 var(--ink);cursor:pointer;white-space:nowrap;background:#fff;border-radius:12px;padding:8px 14px;font-size:.95rem;font-weight:600;transition:transform 60ms,box-shadow 60ms}.btn:hover:not(:disabled){box-shadow:0 4px 0 var(--ink);transform:translateY(-1px)}.btn:active:not(:disabled){box-shadow:0 1px 0 var(--ink);transform:translateY(2px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-good{background:#80ed99}.btn-bad{background:#ff8fa3}.btn-ghost{box-shadow:none;background:0 0;border-color:#1f1d2b59}.btn-small{box-shadow:0 2px 0 var(--ink);border-width:2px;border-radius:9px;padding:4px 10px;font-size:.82rem}.btn-ghost.btn-small{box-shadow:none}.btn-big{background:var(--accent);color:#fff;text-shadow:0 2px #0003;box-shadow:0 5px 0 var(--ink);border-radius:18px;padding:14px 32px;font-size:1.3rem}a.btn{text-decoration:none;display:inline-block}input,textarea,select{font-family:var(--font);color:var(--ink);background:#fff;border:2px solid #1f1d2b40;border-radius:10px;outline:none;width:100%;padding:8px 10px;font-size:.95rem}input:focus,textarea:focus,select:focus{border-color:var(--accent)}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--accent)}input[type=color]{width:42px;height:34px;padding:2px}textarea{resize:vertical}textarea.msg-box{resize:none;flex:1;min-width:0;max-height:calc(8.1em + 20px);line-height:1.35;overflow-y:auto}input.inline{background:0 0;border-color:#0000;padding:4px 6px}input.inline:hover,input.inline:focus{background:#fff;border-color:#1f1d2b40}.row{align-items:center;gap:8px;margin:6px 0;display:flex}.row.wrap{flex-wrap:wrap}.toggle{cursor:pointer;align-items:center;gap:6px;font-size:.92rem;display:inline-flex}.toggle.block{align-items:flex-start;margin:8px 0;display:flex}.pill,.chip{border:2px solid var(--ink);background:#fff;border-radius:999px;align-items:center;gap:4px;padding:3px 10px;font-size:.8rem;font-weight:600;display:inline-flex}.chip{color:var(--ink);border-width:1.5px;padding:1px 8px;font-size:.72rem;text-decoration:none}.chip-good,.pill-ok{background:#b9fbc0}.pill-bad{background:#ffc2d1}.pill-demo{background:#ffd166}.pill-photo{font-family:var(--font);color:var(--ink);cursor:pointer}.pill-photo kbd{border-bottom-width:2px;font-size:.7rem}.pill-photo-rec{background:#e63946;border-radius:50%;width:8px;height:8px}.dot{border:2px solid var(--ink);border-radius:50%;width:12px;height:12px;display:inline-block}.agent-chip{align-items:center;gap:5px;font-size:.85rem;font-weight:600;display:inline-flex}.status{border:2px solid var(--ink);text-transform:uppercase;letter-spacing:.03em;border-radius:999px;padding:1px 9px;font-size:.75rem;font-weight:600;display:inline-block}.status-idle{background:var(--st-idle,#e9ecef)}.status-preparing{background:var(--st-preparing,#ffe066)}.status-working{background:var(--st-working,#74c0fc)}.status-done{background:var(--st-done,#8ce99a)}.status-error{background:var(--st-error,#ffa8a8)}.status-stopped{background:var(--st-stopped,#dee2e6)}.status-installing{background:var(--st-installing,#ffe066)}.status-starting{background:var(--st-starting,#ffe066)}.status-running{background:var(--st-running,#8ce99a)}.status-unconfigured{background:var(--st-unconfigured,#e9ecef)}.hud{pointer-events:none;z-index:10;position:fixed;inset:0}.hud>*{pointer-events:auto}.hud-floor{background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);border-radius:18px;align-items:center;gap:12px;max-width:min(520px,100vw - 32px);padding:8px 16px 8px 8px;display:flex;position:absolute;top:16px;left:16px}.floor-num{background:var(--accent);border:3px solid var(--ink);color:#fff;text-shadow:0 2px #00000040;border-radius:12px;flex:none;place-items:center;width:46px;height:46px;font-size:1.5rem;font-weight:700;display:grid}.floor-name{text-overflow:ellipsis;white-space:nowrap;font-size:1.1rem;font-weight:700;overflow:hidden}.floor-sub{color:var(--muted);font-size:.85rem}.hud-status{flex-wrap:wrap;justify-content:flex-end;gap:6px;max-width:50vw;display:flex;position:absolute;top:16px;right:16px}.hud-banner{border:3px solid var(--ink);background:#ffe066;border-radius:14px;max-width:90vw;padding:8px 16px;font-weight:600;position:absolute;top:84px;left:50%;transform:translate(-50%)}.office-chip{max-width:min(420px,100vw - 32px);font-family:var(--font);color:var(--ink);border:2px solid var(--ink);box-shadow:0 3px 0 var(--ink);cursor:pointer;text-align:left;background:#ffe8a3;border-radius:999px;padding:5px 12px;font-size:.8rem;font-weight:600;position:absolute;top:100px;left:16px}.office-chip:hover{transform:translateY(-1px)}.office-chip:focus-visible{outline:3px solid var(--accent,#ff8a5b);outline-offset:2px}.crosshair{border:2px solid var(--ink);pointer-events:none;background:#fff;border-radius:50%;width:8px;height:8px;margin:-4px 0 0 -4px;transition:transform .15s;position:absolute;top:50%;left:50%}.crosshair-hot{background:var(--accent);transform:scale(1.8)}.hud-hint{background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);white-space:nowrap;pointer-events:none;border-radius:14px;padding:8px 16px;font-size:1.05rem;font-weight:600;position:absolute;bottom:22%;left:50%;transform:translate(-50%)}.aim-cards{pointer-events:none;flex-direction:column;gap:8px;width:min(280px,100vw - 32px);display:flex;position:absolute;top:max(22%,160px);left:16px}@media (width<=700px){.aim-cards{width:auto;top:auto;bottom:16px;right:16px}}.agent-card{background:var(--paper);border:3px solid var(--ink);border-left:8px solid var(--who,var(--ink));box-shadow:0 4px 0 var(--ink);pointer-events:none;border-radius:14px;flex-direction:column;gap:5px;padding:10px 12px;font-size:.85rem;animation:.15s ease-out fadein;display:flex}.ac-head{align-items:center;gap:8px;display:flex}.ac-dot{border:2px solid var(--ink);background:var(--who,var(--accent));border-radius:50%;flex:none;width:12px;height:12px}.ac-who{flex-direction:column;flex:auto;min-width:0;line-height:1.15;display:flex}.ac-name{font-size:1rem;font-weight:700}.ac-title,.ac-foot{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;overflow:hidden}.ac-time{flex:none;font-size:.78rem;font-weight:600}.ac-on{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.ac-now{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.ac-detail{font-family:var(--mono);font-size:.78rem;font-weight:500}.ac-steps{font-family:var(--mono);border-top:2px dashed #1f1d2b26;margin:0;padding:4px 0 0;font-size:.74rem;list-style:none}.ac-steps li{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hud-held{font-size:.95rem;bottom:calc(22% - 56px)}.roof-scope{pointer-events:none;background:radial-gradient(circle,#0000 0 41vmin,#060812e0 43.5vmin,#05060c 47vmin);position:absolute;inset:0}.roof-scope:after{content:"";border-radius:50%;width:84vmin;height:84vmin;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:inset 0 0 0 2px #ffffff24,inset 0 0 50px 12px #00000080}.roof-scope-reticle{background:linear-gradient(#fff9,#fff9) 50%/1px 100% no-repeat,linear-gradient(#fff9,#fff9) 50%/100% 1px no-repeat;width:26px;height:26px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.roof-scope-hint{bottom:5%}.charge{border:2px solid var(--ink);background:var(--paper);opacity:0;pointer-events:none;border-radius:6px;width:56px;height:9px;margin-left:-28px;transition:opacity .1s;position:absolute;top:calc(50% + 14px);left:50%;overflow:hidden}.charge-on{opacity:1}.charge-fill{transform-origin:0;background:#ffd166;height:100%;transform:scaleX(0)}.charge-full .charge-fill{background:#ff8a5b}.hud-pong{background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);pointer-events:none;border-radius:14px;flex-direction:column;align-items:center;gap:4px;max-width:calc(100vw - 32px);padding:8px 18px;display:flex;position:absolute;top:16px;left:50%;transform:translate(-50%)}.hud-pong-score{white-space:nowrap;align-items:baseline;gap:10px;font-weight:600;display:flex}.hud-pong-score b{font-variant-numeric:tabular-nums;font-size:1.6rem}.hud-pong-score i{opacity:.5;font-style:normal}.hud-pong-serving:after{content:" 🏓"}.hud-pong-status{opacity:.8;text-align:center;font-size:.9rem;font-weight:600}.hud-pong-keys{padding:6px 12px;font-size:.85rem;bottom:64px}.hud-ammo{background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);pointer-events:none;border-radius:14px;flex-direction:column;align-items:flex-end;gap:4px;padding:8px 14px;font-weight:700;display:flex;position:absolute;bottom:72px;right:16px}.hud-ammo-count{font-variant-numeric:tabular-nums;font-size:1.15rem}.hud-ammo-empty .hud-ammo-count{color:#ef476f}.hud-ammo-note{opacity:.75;font-size:.8rem;font-weight:600}.hud-ammo-bar{border:2px solid var(--ink);border-radius:6px;width:100%;min-width:110px;height:8px;overflow:hidden}.hud-ammo-fill{transform-origin:0;background:#ffd166;height:100%;transform:scaleX(0)}.hud-resume{color:#fff;text-shadow:0 2px 0 var(--ink), 0 0 6px var(--ink);pointer-events:none;font-weight:600;position:absolute;top:calc(50% + 26px);left:50%;transform:translate(-50%)}.cam-btn{font-family:var(--font);color:var(--ink);border:2px solid var(--ink);box-shadow:0 2px 0 var(--ink);cursor:pointer;background:#fff;border-radius:12px;flex:none;align-items:center;gap:6px;margin-left:4px;padding:4px 8px;font-size:.85rem;font-weight:600;display:flex}.cam-btn:hover{background:#fff3e6}.cam-btn kbd{font-size:.7rem}.cam-bar{background:var(--paper);border:3px solid var(--ink);max-width:calc(100vw - 32px);box-shadow:0 4px 0 var(--ink);border-radius:18px;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:8px 12px;display:flex;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.cam-bar kbd{font-size:.75rem}.cam-title{margin-right:4px;font-weight:700}.cam-tip{color:#fff;text-align:center;max-width:calc(100vw - 32px);text-shadow:0 2px 0 var(--ink), 0 0 6px var(--ink);pointer-events:none;padding:4px 12px;font-size:.9rem;font-weight:600;position:absolute;bottom:84px;left:50%;transform:translate(-50%)}.cam-follow{background:var(--paper);border:3px solid var(--ink);max-width:calc(100vw - 32px);box-shadow:0 4px 0 var(--ink);border-radius:16px;align-items:center;gap:10px;padding:6px 8px 6px 14px;font-weight:600;display:flex;position:absolute;top:84px;left:50%;transform:translate(-50%)}.cam-reticle{pointer-events:none}.workers{background:var(--paper);border:3px solid var(--ink);width:min(360px,100vw - 32px);max-height:calc(100vh - 180px);box-shadow:0 4px 0 var(--ink);border-radius:18px;flex-direction:column;display:flex;position:absolute;top:60px;right:16px;overflow:hidden}.workers-closed{width:auto}.wk-head{font-family:var(--font);letter-spacing:.08em;text-transform:uppercase;color:var(--ink);cursor:pointer;text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 14px;font-size:.8rem;font-weight:600;display:flex}.wk-head b{color:#1e9e45}.wk-chevron{color:var(--muted);letter-spacing:0;text-transform:none}.wk-list{padding:0 6px 6px;overflow-y:auto}.wk-empty{color:var(--muted);padding:4px 10px 8px;font-size:.85rem}.wk-row{width:100%;font-family:var(--font);color:var(--ink);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px;padding:5px 8px 5px 26px;display:grid}.wk-row:hover{background:#1f1d2b0f}.wk-dot{border:2px solid var(--ink);border-radius:50%;width:12px;height:12px}.wk-main{flex-direction:column;min-width:0;display:flex}.wk-name{white-space:nowrap;text-overflow:ellipsis;font-size:.95rem;font-weight:600;overflow:hidden}.wk-task{color:var(--muted);margin-left:6px;font-size:.78rem;font-weight:500}.wk-line{gap:6px;min-width:0;display:flex}.wk-last{min-width:0;font-family:var(--mono);color:var(--muted);white-space:nowrap;text-overflow:ellipsis;flex:auto;font-size:.72rem;overflow:hidden}.wk-last-text{font-family:var(--font);color:var(--ink);font-size:.8rem}.wk-last-thinking{font-style:italic}.wk-last-error{color:var(--bad)}.wk-ago{color:var(--muted);flex:none;font-size:.72rem}.wk-group+.wk-group{margin-top:4px}.wk-group-head{width:100%;font-family:var(--font);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:10px;align-items:center;gap:8px;padding:6px 8px 2px;font-size:.75rem;font-weight:600;display:flex}.wk-group-head:hover{color:var(--ink)}.wk-group-arrow{width:10px}.wk-swatch{border:2px solid var(--ink);border-radius:4px;flex:none;width:12px;height:12px}.wk-group-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ink);overflow:hidden}.wk-group-count{color:var(--ink);background:#1f1d2b14;border-radius:999px;margin-left:auto;padding:0 7px}@media (width<=700px){.workers{display:none}}.hud-help{pointer-events:none;background:#fffdf6d9;border-radius:12px;padding:6px 10px;font-size:.85rem;position:absolute;bottom:14px;left:16px}.stats{z-index:60;font:10px/1.2 var(--mono);color:#7cffb2;white-space:nowrap;pointer-events:none;background:#15151fcc;border-bottom-right-radius:8px;padding:1px 8px;position:fixed;top:0;left:0}.fade{opacity:0;pointer-events:none;background:#15151f;place-items:center;transition:opacity .6s;display:grid;position:absolute;inset:0}.fade-in{opacity:1}.fade-label{color:#7cffb2;font-size:3rem;font-weight:700}.toasts{z-index:40;flex-direction:column;align-items:flex-end;gap:8px;max-width:min(420px,100vw - 32px);display:flex;position:absolute;bottom:16px;right:16px}.toast{background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);cursor:pointer;border-radius:14px;padding:10px 14px;font-weight:500;animation:.25s ease-out pop}.toast-success{background:var(--popup-soft)}.toast-error{background:var(--popup-petrol);color:var(--popup-paper)}@keyframes pop{0%{opacity:0;transform:translateY(12px)scale(.95)}}.start{--accent:#65d8ef;--paper:#faf8f5;z-index:50;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:radial-gradient(at 20% 10%,#65d8ef59,#0000 55%),linear-gradient(145deg,#17485cf0,#202b38f0);place-items:center;padding:16px;display:grid;position:fixed;inset:0}.start-card{background:var(--paper);text-align:center;border:4px solid #17485c;border-radius:28px;width:min(640px,100%);max-height:calc(100vh - 32px);padding:28px 32px;overflow:auto;box-shadow:0 8px #202b38,0 0 0 1px #65d8ef}.start .btn-big,.wizard .wizard-nav .btn-good{white-space:normal;overflow-wrap:anywhere;background:var(--accent);max-width:100%;color:var(--ink);text-shadow:none}@keyframes spin{to{transform:rotate(360deg)}}.start h1{color:#17485c;margin:6px 0 4px;font-size:2.6rem}.start-tag{color:var(--muted);margin:0 0 16px;font-size:1.1rem}.start-list{text-align:left;gap:8px;margin:0 0 22px;padding:0;list-style:none;display:grid}.start-meta{color:var(--muted);flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;margin-top:16px;display:flex}.overlay{z-index:30;background:#15151f59;place-items:center;padding:16px;animation:.15s ease-out fadein;display:grid;position:fixed;inset:0}@keyframes fadein{0%{opacity:0}}.panel{background:var(--paper);border:4px solid var(--ink);width:min(640px,100%);max-height:calc(100vh - 32px);box-shadow:0 8px 0 var(--ink);border-radius:24px;flex-direction:column;animation:.2s ease-out pop;display:flex;overflow:hidden}.panel-wide{width:min(1320px,100%);height:calc(100vh - 32px)}.panel-head{background:var(--accent);border-bottom:4px solid var(--ink);align-items:center;gap:10px;padding:12px 16px;display:flex}.panel-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;margin:0;font-size:1.25rem;font-weight:700;overflow:hidden}.panel-title a{color:var(--ink)}.panel-x{border:3px solid var(--ink);cursor:pointer;background:#fff;border-radius:12px;flex:none;width:36px;height:36px;font-weight:700}.panel-body{flex-direction:column;flex:1;min-height:0;padding:16px;display:flex;overflow:auto}:is(.panel,.confirm,.doc,.phone){--paper:var(--popup-paper)}.panel-body{--accent:var(--popup-cyan)}.panel>.panel-head{background:var(--popup-petrol);color:var(--popup-paper)}.panel .panel-title a{color:var(--popup-cyan)}.panel .office-badge,.panel :is(.repo-row:hover,.voice-row:hover,.voice-row-on){background:var(--popup-soft)}.help h3{margin:14px 0 4px}.help p{margin:0;line-height:1.55}.mouse-settings{border:2px solid var(--ink);background:#fff8ef;border-radius:12px;flex-direction:column;gap:8px;margin-top:10px;padding:10px 12px;display:flex}.mouse-sens{align-items:center;gap:10px;font-size:.92rem;display:flex}.mouse-sens input[type=range]{max-width:260px;accent-color:var(--accent,#ff8a5b);flex:1}.mouse-sens b{font-variant-numeric:tabular-nums;min-width:3.4em}.day-settings{border:2px solid var(--ink);background:#fff8ef;border-radius:12px;flex-wrap:wrap;align-items:center;gap:8px 18px;margin-top:10px;padding:10px 12px;font-size:.92rem;display:flex}.day-settings input[type=radio]{accent-color:var(--accent,#ff8a5b)}.controls h3{margin:14px 0 6px}.controls-table{grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:4px 10px;display:grid}.controls-row{display:contents}.controls-name{font-size:.92rem}.controls-slot{align-items:center;gap:2px;min-width:96px;display:flex}.key-btn{min-width:70px;font-family:var(--font);color:var(--ink);border:2px solid var(--ink);box-shadow:0 2px 0 var(--ink);cursor:pointer;background:#fff;border-radius:8px;padding:3px 10px;font-size:.85rem;font-weight:700}.key-btn:hover{background:#fff3e6}.key-btn-empty{color:var(--muted);box-shadow:none;border-style:dashed}.key-btn-wait{background:#ffe066;animation:.25s ease-out pop}.key-btn-clash{border-color:var(--bad);background:#ffd6de}.key-clear{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:.8rem}.controls-note{margin:10px 0 0;font-size:.9rem;font-weight:600}.controls-clash{color:#9d0208;border:2px solid var(--bad);background:#ffe3e3;border-radius:10px;margin:10px 0 0;padding:8px 10px;font-size:.9rem;font-weight:600}.controls-reset{margin-top:14px}.pad-status{font-size:.92rem;font-weight:600}.pad-map{margin:0;line-height:1.5}.sound{gap:10px 18px}.sound-volume{flex:200px;align-items:center;gap:8px;max-width:340px;display:flex}.sound-volume input[type=range]{accent-color:var(--accent);background:0 0;border:0;flex:1;padding:0}.sound-pct{text-align:right;font-variant-numeric:tabular-nums;min-width:3.2em}.sound-groups{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:6px 18px;margin-top:8px;display:grid}.sound-group-name{min-width:5.2em}.elevator{flex-direction:column;gap:10px;display:flex}.floor-btn{text-align:left;border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);cursor:pointer;font-family:var(--font);background:#fff;border-radius:16px;grid-template-rows:auto auto;grid-template-columns:54px 1fr;align-items:center;column-gap:12px;padding:10px;display:grid}.floor-btn:hover{transform:translateY(-1px)}.floor-btn-here{outline:3px dashed var(--accent);outline-offset:3px;background:#fff4e6}.floor-btn-num{border:3px solid var(--ink);background:var(--accent);color:#fff;text-shadow:0 2px #00000040;border-radius:50%;grid-row:span 2;place-items:center;width:54px;height:54px;font-size:1.5rem;font-weight:700;display:grid}.floor-btn-name{text-overflow:ellipsis;white-space:nowrap;font-size:1.1rem;font-weight:700;overflow:hidden}.floor-btn-meta{color:var(--muted);font-size:.85rem}.term-title{align-items:center;gap:10px;display:flex}.avatar{border:3px solid var(--ink);color:#fff;text-shadow:0 1px #0000004d;border-radius:50%;flex:none;place-items:center;width:34px;height:34px;font-weight:700;display:grid}.term-meta{flex-wrap:wrap;align-items:center;gap:6px 14px;margin-bottom:10px;font-size:.92rem;display:flex}.term-error{word-break:break-word;background:#ffe3e3;border:2px solid #ff8787;border-radius:10px;margin-bottom:8px;padding:6px 10px;font-size:.88rem}.term-split{flex:1;grid-template-columns:1fr;gap:12px;min-height:0;display:grid}.term-split-2{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}.term{color:#e8e8f2;border:3px solid var(--ink);font-family:var(--mono);background:#1b1b29;border-radius:14px;min-height:200px;padding:12px 14px;font-size:13px;line-height:1.5;overflow:auto}.term-line{white-space:pre-wrap;word-break:break-word}.term-tool{color:#8be9fd}.term-result{color:#8d8da8}.term-system{color:#bd93f9}.term-error.term-line,.term-line.term-error{color:#ff6b6b;font-size:inherit;background:0 0;border:none;margin:0;padding:0}.term-manager{color:#ffb86c;font-weight:600}.term-done{color:#50fa7b;font-weight:600}.term-thinking{color:#f1fa8c;font-style:italic}.term-spin{color:#ff9e64;animation:1.4s ease-in-out infinite blink}.live-term{border:3px solid var(--ink);background:#1b1b29;border-radius:14px;flex-direction:column;min-width:0;min-height:200px;display:flex;overflow:hidden}.live-term-screen{flex:1;min-width:0;min-height:0;overflow:hidden}.live-term-screen .xterm{box-sizing:border-box;height:100%;padding:8px 4px 4px 10px}.live-term-foot{color:#8d8da8;border-top:1px solid #2c2c42;align-items:center;gap:8px;padding:4px 12px 6px;font-size:.78rem;display:flex}.live-dot{background:#55566e;border-radius:50%;flex:none;width:8px;height:8px}.live-dot-on{background:#50fa7b;box-shadow:0 0 6px #50fa7b}@keyframes blink{50%{opacity:.55}}.browser{flex-direction:column;gap:6px;min-height:0;display:flex}.browser-bar{border:3px solid var(--ink);text-overflow:ellipsis;white-space:nowrap;background:#e9ecf2;border-bottom:none;border-radius:14px 14px 0 0;padding:6px 12px;font-size:.85rem;overflow:hidden}.browser-view{border:3px solid var(--ink);background:#fff;border-radius:0 0 14px 14px;flex:1;min-height:0;margin-top:-6px;overflow:auto}.browser-view img{width:100%;display:block}.term-input{align-items:flex-end;gap:8px;margin-top:12px;display:flex}.term-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.term-actions select{width:auto;max-width:420px}.kanban-toolbar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.issue-form{background:#fff;border:3px dashed #1f1d2b4d;border-radius:16px;flex-direction:column;gap:8px;margin-bottom:12px;padding:12px;display:flex}.issue-form .row select{flex:1}.kanban{flex:1;grid-template-columns:repeat(4,minmax(220px,1fr));gap:12px;min-height:0;display:grid;overflow-x:auto}.kcol{border:3px solid var(--ink);background:#f4f1ea;border-radius:18px;flex-direction:column;min-height:0;display:flex;overflow:hidden}.kcol-head{border-bottom:3px solid var(--ink);padding:10px 12px;font-weight:700}.kcol-backlog .kcol-head{background:#ffd166}.kcol-progress .kcol-head{background:#4cc9f0}.kcol-review .kcol-head{background:#80ed99}.kcol-qa .kcol-head{background:#ff9f68}.kanban-5{grid-template-columns:repeat(5,minmax(210px,1fr))}.kcol-merged .kcol-head{background:#c77dff}.count{border:2px solid var(--ink);text-align:center;background:#fff;border-radius:999px;min-width:24px;padding:0 6px;font-size:.8rem;display:inline-block}.kcol-body{flex-direction:column;gap:8px;padding:10px;display:flex;overflow:auto}.kempty{padding:8px}.kcard{border:2.5px solid var(--ink);background:#fff;border-radius:12px;padding:8px 10px;box-shadow:0 3px #1f1d2bcc}.kcard-warn{background:var(--tone-warn,#fff3d6)}.kcard-bad{background:var(--tone-bad,#ffe0e6)}.kcard-good{background:var(--tone-good,#e3fbe7)}.kcard-title{font-size:.92rem;font-weight:500;line-height:1.35}.kcard-title a{font-weight:700}.kcard-foot{align-items:center;gap:6px;margin-top:6px;display:flex}.kcard-foot select{width:auto;margin-left:auto;padding:3px 6px;font-size:.82rem}.kcard-foot-wrap{flex-wrap:wrap}.cardview{width:min(600px,100%)}.cardview .panel-body{gap:12px}.cardview-tags{flex-wrap:wrap;gap:6px;display:flex}.cardview-tags .pill{font-size:.82rem}.cardview-warn{background:#ffe8b8}.cardview-bad{background:#ffc2d1}.cardview-good{background:#b9fbc0}.cardview-label{background:#eef1f7}.cardview-who{align-items:center;gap:8px;font-weight:600;display:flex}.cardview-h{margin:0 0 4px;font-size:1rem}.cardview-body{border:2.5px solid var(--ink);background:#fff;border-radius:12px;padding:10px 12px;font-size:.92rem;box-shadow:0 3px #1f1d2bcc}.cardview-pr{gap:10px;display:grid}.cardview-section{background:#fff;border:2px solid #d4d8e3;border-radius:12px;padding:10px 12px}.cardview-summary{font-size:.9rem}.cardview-checks{gap:3px;margin:6px 0 0;padding:0;font-size:.86rem;list-style:none;display:grid}.cardview-check b{width:1.2em;display:inline-block}.cardview-check-pass b{color:var(--good)}.cardview-check-fail b,.cardview-bad-text{color:var(--bad)}.cardview-foot{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.panel-app{width:100%;max-width:1600px}.panel-app .panel-body{padding:12px 16px}.app-title{align-items:center;gap:10px;min-width:0;display:flex}.app-title-name,.app-title-ref{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.app-title-name{flex:0 auto}.app-title-ref{color:var(--ink);opacity:.75;flex:0 2 auto;font-weight:500}.app-title .status{flex:none}.app-toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}.app-ref{flex:0 auto;width:260px;min-width:0;padding:5px 8px;font-size:.88rem}.seg{border:2px solid var(--ink);box-shadow:0 2px 0 var(--ink);border-radius:9px;display:inline-flex;overflow:hidden}.seg-btn{font-family:var(--font);color:var(--ink);cursor:pointer;white-space:nowrap;background:#fff;border:0;padding:4px 10px;font-size:.82rem;font-weight:600}.seg-btn+.seg-btn{border-left:2px solid var(--ink)}.seg-btn.seg-on{background:var(--accent)}.seg-btn:focus-visible{outline-offset:-3px;outline:3px solid #3a56d4}.app-stage{border:3px solid var(--ink);background:repeating-linear-gradient(45deg,#efeadf 0 12px,#f6f2e9 12px 24px);border-radius:14px;flex:1;justify-content:center;min-height:280px;display:flex;position:relative;overflow:hidden}.app-frame{background:#fff;border:0;width:100%;height:100%;display:block}.app-stage-phone .app-frame{border-left:3px solid var(--ink);border-right:3px solid var(--ink);width:396px;max-width:100%}.app-frame-hint{border:2.5px solid var(--ink);width:min(560px,100% - 24px);box-shadow:0 3px 0 var(--ink);background:#fff3d6;border-radius:12px;padding:10px 14px;font-size:.9rem;line-height:1.4;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.app-foot{margin:8px 0 0;line-height:1.4}.app-state{text-align:center;background:#fff;border:3px dashed #1f1d2b4d;border-radius:14px;flex-direction:column;flex:1;align-items:center;gap:10px;min-height:0;padding:24px 16px;display:flex;overflow:auto}.app-state h3{margin:0}.app-state p{max-width:560px;margin:0}.app-state-left{text-align:left;align-items:stretch}.app-state-left p{max-width:none}.app-state-icon{font-size:2.6rem;line-height:1}.app-spin{animation:2.4s linear infinite spin}.app-steps{text-align:left;color:var(--muted);margin:0;padding:0;font-weight:500;list-style:none}.app-steps li{padding:2px 0}.app-step-done{color:#1b873a}.app-step-now{color:var(--ink);font-weight:700}.app-log{text-align:left;white-space:pre-wrap;word-break:break-word;width:100%;max-width:900px;min-height:0;max-height:320px;margin:0;font-size:12px}.app-state-left .app-log{flex:0 auto;max-width:none}.app-settings{width:min(640px,100%)}.preview-form{flex-direction:column;gap:2px;display:flex}.preview-form input,.preview-form textarea{font-family:var(--mono);font-size:.85rem}.preview-form p{margin:2px 0 4px}.preview-details summary{cursor:pointer;font-weight:600}.preview-details summary code{word-break:break-all;font-weight:400}.preview-details[open] summary{margin-bottom:6px}.preview-details .status{font-size:.68rem}.channels{scrollbar-width:thin;gap:6px;padding:2px 2px 8px;display:flex;overflow-x:auto}.channel{max-width:360px;font-family:var(--font);border:2px solid var(--ink);color:var(--ink);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:#fff;border-radius:999px;flex:none;align-items:center;gap:6px;padding:4px 12px;font-size:.82rem;font-weight:600;display:inline-flex;overflow:hidden}.channel-on{background:var(--accent);box-shadow:0 2px 0 var(--ink)}.channel:focus-visible{outline-offset:1px;outline:3px solid #3a56d4}.channels-empty{white-space:nowrap;align-self:center}.led{border:1.5px solid var(--ink);background:#dee2e6;border-radius:50%;flex:none;width:10px;height:10px}.led-live{background:#2dc653}.led-busy{background:#ffd166}.led-bad{background:#ef476f}.btn.btn-on{background:var(--accent)}.app-body{flex:1;gap:12px;min-height:0;display:flex}.app-main{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.app-state-compact{padding:16px 10px}.app-state-compact h3{font-size:1rem}.compare{flex-direction:column;flex:1;gap:8px;min-height:0;display:flex}.compare-bar{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.compare-path{flex:220px;align-items:center;gap:6px;max-width:420px;display:inline-flex}.compare-path input{min-width:0;font-family:var(--mono);flex:1;padding:4px 8px;font-size:.85rem}.compare-sides{flex:1;grid-template-columns:1fr 1fr;gap:10px;min-height:0;display:grid}.compare-side{flex-direction:column;gap:4px;min-width:0;min-height:0;display:flex}.compare-side .app-stage,.compare-side .app-state{flex:1}.compare-label{white-space:nowrap;align-items:center;gap:8px;min-width:0;font-size:.85rem;display:flex;overflow:hidden}.compare-synced{color:#1b873a;margin-left:auto;font-weight:600}.qa-side{border:3px solid var(--ink);background:#fff;border-radius:14px;flex-direction:column;flex:0 0 300px;gap:8px;min-height:0;padding:12px 14px;display:flex;overflow:auto}.qa-side-title{margin:0;font-size:.95rem;line-height:1.35}.qa-side-meta,.qa-side-status{flex-wrap:wrap;align-items:center;gap:6px 12px;display:flex}.qa-failed{margin:0;padding-left:4px;list-style:none}.qa-badge{border:2px solid var(--ink);background:#e9ecef;border-radius:999px;padding:1px 9px;font-size:.78rem;font-weight:700}.qa-badge-passed{background:#8ce99a}.qa-badge-failed,.qa-badge-needs-human{background:#ffa8a8}.qa-badge-testing,.qa-badge-fixing{background:#ffe066}.qa-summary{font-size:.88rem}.qa-checks{flex-direction:column;gap:6px;margin:0;padding:0;font-size:.86rem;list-style:none;display:flex}.qa-check{align-items:flex-start;gap:8px;line-height:1.35;display:flex}.qa-check-fail b{color:#c92a2a}.qa-shots{grid-template-columns:1fr 1fr;gap:8px;display:grid}.qa-shot{color:var(--ink);flex-direction:column;gap:2px;min-width:0;text-decoration:none;display:flex}.qa-shot img{aspect-ratio:16/10;object-fit:cover;object-position:top left;border:2px solid var(--ink);background:#f1f3f5;border-radius:8px;width:100%}.qa-shot span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (width<=900px){.app-body{flex-direction:column}.qa-side{flex:none;max-height:40%}.compare-sides{grid-template-rows:1fr 1fr;grid-template-columns:1fr}}@media (width<=520px){.panel-app .panel-body{padding:10px}.app-ref{flex:100%;max-width:none}.app-toolbar .spacer,.app-title-ref{display:none}}.tabs{flex-wrap:wrap;gap:6px;margin-bottom:12px;display:flex}.tab{font-family:var(--font);border:2.5px solid var(--ink);cursor:pointer;background:#fff;border-radius:12px;padding:8px 14px;font-size:.95rem;font-weight:600}.tab-on{background:var(--accent);color:var(--ink);box-shadow:0 3px 0 var(--ink)}.tab-body{flex:1;min-height:0;overflow:auto}.tab-grid{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:start;gap:16px;display:grid}@media (width<=900px){.tab-grid{grid-template-columns:1fr}.kanban,.kanban-5{grid-template-columns:repeat(5,250px)}.term-split-2{grid-template-rows:minmax(200px,1fr) auto;grid-template-columns:1fr}}.section{margin:0 0 10px}.card{border:3px solid var(--ink);background:#fff;border-radius:18px;flex-direction:column;gap:6px;margin-bottom:12px;padding:12px 14px;display:flex}.card h3{margin:0 0 4px}.floor-card{border-left:12px solid var(--accent)}.floor-badge{background:var(--accent);border:2.5px solid var(--ink);color:#fff;text-shadow:0 1px #00000040;border-radius:10px;flex:none;place-items:center;width:36px;height:36px;font-weight:700;display:grid}.office-card{border-left:12px solid var(--ink)}.office-badge{text-shadow:none;background:#fff3c4}.office-card .grow{min-width:190px}.office-state{overflow-wrap:anywhere;font-weight:600}.office-state-ok{color:#1b873a}.office-state-busy{color:#9a5b00}.office-state-bad{color:#c0223b}.office-actions{flex:none;gap:6px;margin-left:auto;display:flex}.repo-list{border:2px solid #1f1d2b1f;border-radius:12px;flex-direction:column;gap:4px;max-height:260px;padding:6px;display:flex;overflow:auto}.repo-list.tall{max-height:520px}.repo-row{border-radius:10px;justify-content:space-between;align-items:center;gap:10px;padding:6px 8px;display:flex}.repo-row:hover{background:#fff4e6}.repo-row select{width:auto}.repo-row-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.links{font-size:.85rem}.team{border-collapse:collapse;width:100%}.team td{vertical-align:middle;border-top:1.5px solid #1f1d2b14;padding:4px 6px}.team select{width:auto;padding:4px 6px}.field{flex-direction:column;gap:4px;margin:6px 0;font-size:.9rem;font-weight:600;display:flex}.voice-clips,.listen-settings{border-top:1px dashed var(--muted);margin-top:10px;padding-top:8px}.listen-settings{flex-direction:column;gap:6px;display:flex}.listen-settings h4,.listen-settings p{margin:0}.voice-list{border:2px solid #1f1d2b1f;border-radius:12px;flex-direction:column;gap:2px;max-height:300px;padding:6px;display:flex;position:relative;overflow:auto}.voice-group{color:var(--muted);margin:4px 8px 0;font-size:.8rem;font-weight:600}.voice-row{border:2px solid #0000;border-radius:10px;align-items:center;gap:8px;padding:4px 8px;display:flex}.voice-row:hover{background:#fff4e6}.voice-row-on{border-color:var(--accent);background:#fff4e6}.voice-row:focus-within{outline:3px solid var(--accent);outline-offset:-1px}.voice-row .toggle{align-items:flex-start;min-width:0}.voice-row .toggle input{margin-top:4px}.voice-labels{display:block}.wizard{text-align:left;width:min(680px,100%)}.wizard h1,.wizard .start-tag,.wizard h2,.wizard-icon{text-align:center}.wizard h2{color:#17485c;margin:4px 0 6px;font-size:1.9rem}.wizard-icon{font-size:3rem;line-height:1.1}.wizard .btn-big{margin:0 auto;display:block}.wizard-steps{justify-content:center;gap:8px;margin-bottom:10px;display:flex}.wizard-dot{border:2px solid var(--ink);background:#fff;border-radius:50%;width:12px;height:12px}.wizard-dot-done{background:#80ed99}.wizard-dot-on{background:var(--accent);transform:scale(1.25)}.wizard-nav{align-items:center;gap:10px;margin-top:18px;display:flex}.wizard-done{text-align:center;padding:10px 0}.wizard-done p{margin:6px 0}.ceo-setup{align-items:center;gap:18px;display:flex}.ceo-portrait{flex:none;width:120px;height:120px}.ceo-setup>.grow{min-width:0}@media (width<=540px){.start-card{padding:22px 18px}.ceo-setup{flex-direction:column}.ceo-setup>.grow{width:100%}}.swatch{border:2.5px solid var(--ink);cursor:pointer;border-radius:50%;width:24px;height:24px;padding:0}.swatch-on{box-shadow:0 0 0 3px #fff, 0 0 0 5px var(--ink)}.picker{flex-direction:column;gap:8px;display:flex}.picker-tabs{flex-wrap:wrap;gap:6px;display:flex}.picker-tab{font-family:var(--font);border:2.5px solid var(--ink);cursor:pointer;white-space:nowrap;background:#fff;border-radius:12px;flex:1;padding:8px 10px;font-size:.88rem;font-weight:600}.picker-tab-on{background:var(--accent);color:var(--ink);box-shadow:0 3px 0 var(--ink)}.picker-mode{flex-direction:column;gap:6px;display:flex}.picker-mode .row{margin:0}.folder-list{max-height:240px}.chip-warn{background:#fff3bf}.tour{z-index:45;background:var(--paper);border:3px solid var(--ink);border-left:10px solid var(--accent);width:min(390px,100vw - 32px);box-shadow:0 5px 0 var(--ink);border-radius:18px;padding:10px 14px;animation:.25s ease-out pop;position:fixed;bottom:16px;left:16px}.tour-cheer{border-left-color:var(--popup-petrol);background:var(--popup-soft)}.tour-head{align-items:center;display:flex}.tour-count{color:var(--muted);font-size:.78rem;font-weight:700}.tour-title{margin:2px 0 4px;font-size:1.1rem;font-weight:700}.tour-body{font-size:.9rem;line-height:1.5}.tour-nav{align-items:center;margin-top:8px;display:flex}.ceo-term{flex:none;height:340px}.analysis-reply{margin-bottom:12px}.analysis-terminal{min-width:0}.analysis-terminal>summary{cursor:pointer;margin-bottom:8px}.setup-toggle{flex:none}.setup-toggle-on{background:var(--ink);color:#fff}.setup-wrap{flex:none}.setup-wrap+.term-split{min-height:260px}.agent-setup h3{margin:0}.setup-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:0 14px;display:grid}.look-editor{border:2px solid #1f1d2b26;border-radius:12px;margin:8px 0;padding:6px 12px 10px}.look-editor legend{padding:0 6px;font-weight:700}.look-body{flex-wrap:wrap;align-items:flex-start;gap:14px;display:flex}.look-preview{border:2px solid var(--ink);background:radial-gradient(circle at 50% 40%,#fff7e6,#f4d9b8);border-radius:12px;flex:none;overflow:hidden}.look-fields{flex:1;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:0 12px;min-width:260px;display:grid}.swatches{flex-wrap:wrap;gap:6px;padding:3px;display:flex}.look-fields .swatch{width:20px;height:20px}.prompt-preview{margin:8px 0 4px}.prompt-preview summary{cursor:pointer;font-weight:600}.prompt-preview p{margin:4px 0}.prompt-text{max-height:320px;font-family:var(--mono);font-variant-ligatures:none;white-space:pre-wrap;overflow-wrap:anywhere;background:#f6f4ec;border:1px solid #1f1d2b26;border-radius:8px;margin:6px 0;padding:8px 10px;font-size:.75rem;line-height:1.45;overflow:auto}.confirm-overlay{z-index:60;background:#15151f73;place-items:center;padding:16px;animation:.12s ease-out fadein;display:grid;position:fixed;inset:0}.confirm{background:var(--paper);border:4px solid var(--ink);width:min(440px,100%);box-shadow:0 8px 0 var(--ink);text-align:center;border-radius:24px;padding:20px 22px 14px;animation:.18s ease-out pop}.confirm-danger,.confirm-warn,.confirm-good{border-top:12px solid var(--popup-petrol)}.confirm-icon{font-size:2.4rem;line-height:1}.confirm h3{margin:8px 0 6px;font-size:1.25rem}.confirm-body{color:#4a4e69;margin-bottom:4px;line-height:1.5}.confirm-actions{flex-wrap:wrap;justify-content:center;gap:10px;margin-top:14px;display:flex}.confirm-keys{margin-top:10px}.btn-warn{background:#ffd166}.badge{background:var(--bad);color:#fff;border:2px solid var(--ink);border-radius:999px;place-items:center;min-width:20px;height:20px;padding:0 6px;font-size:.72rem;font-weight:700;line-height:1;display:inline-grid}.toasts{bottom:88px}.phone-btn{font-family:var(--font);color:var(--ink);background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);cursor:pointer;border-radius:18px;align-items:center;gap:8px;padding:6px 14px 6px 8px;font-size:.9rem;font-weight:600;display:flex;position:absolute;bottom:16px;right:16px}.phone-btn:hover{transform:translateY(-1px)}.phone-btn-icon{font-size:1.7rem;line-height:1;display:inline-block}.phone-btn-ring .phone-btn-icon{animation:2.4s ease-in-out infinite ring}@keyframes ring{0%,72%,to{transform:rotate(0)}76%{transform:rotate(-16deg)}80%{transform:rotate(14deg)}84%{transform:rotate(-10deg)}88%{transform:rotate(8deg)}}.phone-btn-badge{position:absolute;top:-8px;left:26px}.voice-speaking{background:var(--paper);border:2px solid var(--ink);cursor:pointer;border-radius:50%;width:30px;height:30px;padding:0;font-size:.95rem;line-height:1;animation:1.2s ease-out infinite voice-pulse;position:absolute;bottom:48px;right:8px;box-shadow:0 0 #ff8a5bb3}@keyframes voice-pulse{to{box-shadow:0 0 0 10px #ff8a5b00}}.phone-overlay{background:#15151f47;place-items:end;padding:16px 24px}.phone{--accent:#65d8ef;--paper:#faf8f5;border:4px solid var(--ink);width:min(400px,100%);height:min(760px,100vh - 32px);box-shadow:0 10px 0 var(--ink), inset 0 0 0 3px #3b3f5c;background:#202b38;border-radius:38px;flex-direction:column;padding:10px 10px 8px;animation:.22s ease-out slideup;display:flex}@keyframes slideup{0%{opacity:0;transform:translateY(40px)}}.phone-status{color:#e9e9f5;justify-content:space-between;align-items:center;padding:2px 16px 8px;font-size:.8rem;font-weight:600;display:flex}.phone-notch{background:#15151f;border-radius:999px;width:90px;height:18px}.phone-screen{background:var(--paper);border-radius:26px 26px 12px 12px;flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.phone-tabs{gap:4px;padding:8px 4px 2px;display:flex}.phone-tab{color:#b8bbd6;font-family:var(--font);cursor:pointer;background:0 0;border:none;border-radius:14px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:6px 4px;font-size:.78rem;font-weight:600;display:flex}.phone-tab-on{color:#fff;background:#17485c;box-shadow:inset 0 -2px #65d8ef}.phone-tab-icon{font-size:1.3rem;position:relative}.badge-dot{min-width:18px;height:18px;font-size:.65rem;position:absolute;top:-6px;right:-14px}.phone-hint{text-align:center;color:#8e92b3;padding-top:4px;font-size:.72rem}.phone-hint kbd{color:var(--ink);font-size:.7rem}.phone-scroll{flex:1;padding:12px;overflow:auto}.phone-h{align-items:center;gap:6px;margin:10px 2px 8px;font-size:1rem;display:flex}.phone-h:first-child{margin-top:0}.phone-empty{padding:10px 6px;line-height:1.5}.linkish{color:#3a56d4;font-family:var(--font);cursor:pointer;text-align:left;background:0 0;border:none;padding:0;font-weight:600}.phone-chat{--accent:#65d8ef;--paper:#faf8f5;flex-direction:column;flex:1;min-height:0;display:flex}.chat-head{background:#dceef2;border-bottom:2px solid #1f1d2b14;align-items:center;gap:10px;padding:10px 12px;display:flex}.presence-busy{color:#d9480f;font-weight:600}.chat-log{background:#edf2f4;flex-direction:column;flex:1;gap:8px;padding:10px;display:flex;overflow:auto}.bubble-row{display:flex}.bubble-row-me{justify-content:flex-end}.bubble{border:2px solid var(--ink);border-radius:16px;max-width:86%;padding:8px 11px 5px;font-size:.9rem;line-height:1.4}.bubble-them{background:var(--paper);border-bottom-left-radius:4px}.bubble-me{background:#c4eef5;border-bottom-right-radius:4px}.bubble-me .bubble-time{color:#4d5163}.bubble-from{color:var(--muted);font-size:.72rem;font-weight:700}.bubble-text{white-space:pre-wrap;overflow-wrap:anywhere}.bubble:has(.md pre,.md-table){width:86%}.md{overflow-wrap:anywhere;min-width:0}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md p,.md ul,.md ol,.md pre,.md blockquote,.md .md-table{margin:0 0 .55em}.md ul,.md ol{padding-left:1.3em}.md li>ul,.md li>ol{margin:.15em 0 .2em}.md li+li{margin-top:.15em}.md li>p{margin:0}.md h1,.md h2,.md h3,.md h4,.md h5,.md h6{margin:.7em 0 .3em;font-size:1em;line-height:1.25}.md h1{font-size:1.15em}.md h2{font-size:1.08em}.md h5,.md h6{color:var(--muted)}.md a{color:#3a56d4;overflow-wrap:anywhere;font-weight:600}.md a:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:3px}.md-deadlink{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.md code{font-family:var(--mono);background:#1f1d2b14;border-radius:5px;padding:.1em .3em;font-size:.86em}.md pre,.md-table{contain:inline-size;overflow-x:auto}.md pre{background:#1f1d2b14;border-radius:8px;padding:7px 9px;line-height:1.35}.md pre code{white-space:pre;overflow-wrap:normal;background:0 0;padding:0}.md blockquote{color:#4a4e69;border-left:3px solid #1f1d2b40;padding:0 0 0 9px}.md hr{border:none;border-top:1.5px solid #1f1d2b26;margin:.6em 0}.md table{border-collapse:collapse;font-size:.9em}.md th,.md td{text-align:left;overflow-wrap:normal;border:1px solid #1f1d2b33;padding:3px 7px}.md th{background:#1f1d2b0f}.md td code{white-space:nowrap}.md input[type=checkbox]{vertical-align:middle;margin:0 4px 0 0}.md li:has(>input[type=checkbox]){margin-left:-1.1em;list-style:none}.bubble-time{color:var(--muted);justify-content:flex-end;align-items:center;gap:6px;margin-top:2px;font-size:.65rem;display:flex}.bubble-play{border:2px solid var(--ink);width:22px;height:22px;color:var(--ink);cursor:pointer;background:#fff;border-radius:50%;padding:0;font-size:.6rem;line-height:1}.bubble-play:hover:not(:disabled),.bubble-play-on{background:#ffe9a8}.bubble-play:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.bubble-play:disabled{opacity:.35;cursor:not-allowed}.bubble-office{text-align:center;color:#4a4e69;background:#1f1d2b12;border-radius:999px;align-self:center;max-width:92%;padding:3px 10px;font-size:.76rem}.bubble-typing{gap:4px;padding:10px 12px;display:flex}.bubble-typing span{background:var(--muted);border-radius:50%;width:7px;height:7px;animation:1.2s infinite typing}.bubble-typing span:nth-child(2){animation-delay:.15s}.bubble-typing span:nth-child(3){animation-delay:.3s}@keyframes typing{0%,60%,to{opacity:.5;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}.quick{background:#fff;gap:6px;padding:6px 10px 0;display:flex;overflow-x:auto}.quick-chip{font-family:var(--font);cursor:pointer;background:#fff;border:1.5px solid #1f1d2b4d;border-radius:999px;flex:none;padding:4px 10px;font-size:.75rem;font-weight:600}.quick-chip:hover{border-color:var(--accent)}.chat-input{background:#fff;align-items:flex-end;gap:6px;padding:8px 10px 10px;display:flex}.phone-chat .chat-input .btn-good{background:var(--accent);color:var(--ink)}.phone-chat :is(.bubble-play:hover:not(:disabled),.bubble-play-on,.mic-btn:hover:not(:disabled)){background:#dceef2}.mic{flex:none;display:inline-flex;position:relative}.mic-btn{border:2px solid var(--ink);width:34px;height:34px;color:var(--ink);cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none;background:#fff;border-radius:50%;padding:0;font-size:1rem;line-height:1}.mic-btn:hover:not(:disabled){background:#ffe9a8}.mic-btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.mic-btn:disabled,.mic-cant{opacity:.4}.mic-btn:disabled{cursor:not-allowed}.mic-btn.mic-on,.mic-btn.mic-on:hover{background:#ffd3c2;animation:1.1s ease-out infinite voice-pulse;box-shadow:0 0 #ff8a5bb3}.mic-busy{cursor:progress}.mic-status{z-index:2;background:var(--ink);color:#fff;white-space:nowrap;pointer-events:none;border-radius:999px;padding:3px 9px;font-weight:600;position:absolute;bottom:calc(100% + 8px);right:0}.mic-status kbd{color:var(--ink)}.hands-free{border:2px solid var(--ink);color:var(--ink);font:inherit;cursor:pointer;background:#fff;border-radius:999px;flex:none;padding:3px 9px;font-size:.72rem;font-weight:600}.hands-free:hover{background:#ffe9a8}.hands-free-on{background:#c9f2d3}.resume{border:3px solid var(--ink);color:var(--ink);background:#fff;border-radius:16px;flex-direction:column;gap:6px;margin-bottom:10px;padding:10px 12px;display:flex}.bubble .resume{border-width:2px;margin:6px 0 2px}.resume-letgo{background:#fff4f2}.resume-hot{box-shadow:0 0 0 4px var(--accent)}.resume-done{opacity:.75}.resume-head{align-items:center;gap:10px;display:flex}.resume-name{font-size:1.05rem;font-weight:700}.resume-title{color:var(--muted);font-size:.85rem;font-weight:600}.resume-meta{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.resume-reason{border-left:3px solid #1f1d2b33;padding-left:9px;font-size:.88rem;line-height:1.45}.hire-setup{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px;display:grid}.hire-setup .field{min-width:0;margin:3px 0}.resume .hire-setup{background:#f6f3ec;border-radius:10px;padding:2px 8px 4px}.resume .hire-setup .field{font-size:.8rem}.resume .hire-setup input,.resume .hire-setup select{padding:5px 7px;font-size:.85rem}.doc .hire-setup input,.doc .hire-setup select{background:#ffffffd9}.tiles{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.tile{border:2.5px solid var(--ink);text-align:center;background:#fff;border-radius:14px;padding:8px}.tile-value{white-space:nowrap;font-size:1.15rem;font-weight:700}.tile-label{color:var(--muted);font-size:.7rem;font-weight:600}.report{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.report li{background:#fff;border:2px solid #1f1d2b1f;border-radius:12px;align-items:flex-start;gap:8px;padding:7px 10px;font-size:.86rem;line-height:1.4;display:flex}.report li.report-good{background:#e7fbe9;border-color:#80ed99}.report li.report-warn{background:#fff4d6;border-color:#ffd166}.proj{border:2.5px solid var(--ink);border-left:10px solid var(--accent);background:#fff;border-radius:14px;margin-bottom:8px;padding:6px 10px 8px}.proj .row{margin:2px 0}.proj .floor-badge{width:30px;height:30px}.proj-name{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.proj-sum{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.proj-stats{flex-wrap:wrap;gap:10px;font-weight:600;display:flex}.proj-ready{color:#1b873a}@media (width<=520px){.phone-overlay{place-items:center;padding:8px}.phone-btn-label{display:none}}.interview-overlay{background:#15151f38}.doc{background-color:var(--popup-paper);border:3px solid var(--ink);border-top:10px solid var(--popup-petrol);width:min(560px,100%);max-height:calc(100vh - 32px);box-shadow:0 8px 0 var(--ink), 10px 18px 0 #0000001f;background-image:repeating-linear-gradient(#0000 0 27px,#17485c12 27px 28px);border-radius:6px;padding:18px 26px;animation:.18s ease-out pop;position:relative;overflow-y:auto}.doc-letgo{border-top-color:var(--popup-petrol);background-color:var(--popup-paper)}.doc-head{border-bottom:2px solid var(--ink);letter-spacing:.1em;text-transform:uppercase;color:#4a4e69;justify-content:space-between;gap:12px;margin-bottom:12px;padding-bottom:6px;font-size:.75rem;font-weight:700;display:flex}.doc-who{align-items:center;gap:12px;margin-bottom:12px;display:flex}.doc-title{margin:0;font-size:1.4rem}.doc-fields{grid-template-columns:max-content 1fr;gap:4px 16px;margin:0 0 6px;font-size:.92rem;display:grid}.doc-fields dt{color:var(--muted);font-weight:600}.doc-fields dd{overflow-wrap:anywhere;min-width:0;margin:0;font-weight:600}.doc-h{letter-spacing:.1em;text-transform:uppercase;color:#4a4e69;border-bottom:1px dashed #1f1d2b4d;margin:14px 0 6px;padding-bottom:3px;font-size:.75rem}.doc-pitch{font-size:.95rem;font-style:italic;line-height:1.5}.doc-sign{text-align:right;color:var(--muted);font-size:.85rem}.doc-tip{margin:4px 0 0}.doc-note{background:#ffffffd9}.doc-actions{align-items:center;gap:10px;margin-top:14px;display:flex}.doc-stamp{letter-spacing:.12em;text-transform:uppercase;opacity:.8;pointer-events:none;border:4px solid;border-radius:8px;padding:2px 12px;font-size:1.3rem;font-weight:700;position:absolute;top:62px;right:64px;transform:rotate(-12deg)}.doc-stamp-good{color:#1b873a}.doc-stamp-bad{color:#c1121f}@media (width<=520px){.doc{padding:14px 16px}.doc-stamp{right:16px}}.phone-nudge{border:2.5px solid var(--ink);color:var(--ink);background:#d8f3dc;border-radius:14px;flex:none;align-items:center;gap:8px;margin:10px 10px 0;padding:8px 10px;font-size:.88rem;font-weight:600;display:flex}.hud-chips{flex-direction:column;align-items:flex-start;gap:6px;display:flex;position:absolute;top:100px;left:16px}.hud-chips .office-chip{position:static}.hud-chips .usage-chip{max-width:min(600px,100vw - 32px)}.usage-chip-pacing{background:#ffd6a5}.usage-chip-paused{background:#ffc2d1}.doctor-chip{background:#d9d2ff}.usage-card{border-left:12px solid var(--good)}.usage-card.usage-warn{border-left-color:var(--warn)}.usage-card.usage-bad{border-left-color:var(--bad)}.usage-pill-good{background:#b9fbc0}.usage-pill-warn{background:#ffe8a3}.usage-pill-bad{background:#ffc2d1}.usage-gauge{border:2px solid var(--ink);background:#eef0f6;border-radius:999px;height:14px;overflow:hidden}.usage-gauge>div{height:100%}.ops-card-hot{box-shadow:0 0 0 4px var(--bad);animation:1.2s ease-in-out 3 ops-hot}@keyframes ops-hot{50%{box-shadow:0 0 0 9px #ef476f59}}.alarm-card b{overflow-wrap:anywhere}.ops-table-wrap{overflow-x:auto}.ops-table{border-collapse:collapse;width:100%;font-size:.85rem}.ops-table th,.ops-table td{text-align:right;white-space:nowrap;border-bottom:1.5px solid #e6e3d8;padding:5px 8px}.ops-table tbody th{text-align:left;color:var(--muted);font-weight:600}.ops-col{border-top:5px solid var(--accent)}.ops-table td:last-child,.ops-table thead th:last-child{font-weight:700}.app-loading{color:var(--muted);place-items:center;font-weight:600;display:grid;position:fixed;inset:0}.start-meta{flex-wrap:wrap}.start-pocket{font-size:.95rem}.pocket{--accent:#65d8ef;--paper:#faf8f5;background:#edf2f4;flex-direction:column;display:flex;position:fixed;inset:0;overflow:hidden}.pk-head{padding:8px 12px;padding-top:max(8px, env(safe-area-inset-top));border-bottom:3px solid var(--ink);background:#17485c;flex:none;align-items:center;gap:8px;display:flex}.pk-title{color:#faf8f5;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:1.1rem;overflow:hidden}.pk-dot{border:2px solid var(--ink);background:var(--bad);border-radius:50%;flex:none;width:10px;height:10px}.pk-dot-on{background:var(--good)}.pk-icon-btn{border:2.5px solid var(--ink);cursor:pointer;background:#fff;border-radius:12px;flex:none;width:40px;height:40px;font-size:1.1rem}.pk-main{overscroll-behavior:contain;flex:1;min-height:0;overflow:hidden auto}.pk-main-chat{flex-direction:column;display:flex;overflow:hidden}.pk-main-chat .phone-chat{background:var(--paper);width:100%;max-width:760px;margin:0 auto}.pk-page{flex-direction:column;gap:10px;min-width:0;max-width:760px;margin:0 auto;padding:12px 12px 24px;display:flex}.pk-tabs{padding:6px 4px;padding-bottom:max(6px, env(safe-area-inset-bottom));border-top:3px solid var(--ink);background:#202b38;flex:none;gap:2px;display:flex}.pk-tab{color:#b8bbd6;min-width:0;font-family:var(--font);cursor:pointer;background:0 0;border:none;border-radius:14px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:6px 2px;font-size:.72rem;font-weight:600;display:flex}.pk-tab-on{color:#fff;background:#17485c;box-shadow:inset 0 -3px #65d8ef}.pk-tab-icon{font-size:1.3rem;position:relative}.pk-tab-label{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.pk-card{border:3px solid var(--ink);min-width:0;box-shadow:0 3px 0 var(--ink);background:#fff;border-radius:16px;padding:10px 12px}.pk-banner{border:2.5px solid var(--ink);background:#fff3d6;border-radius:14px;padding:8px 12px;font-weight:500}.pk-banner-bad{background:#ffe0e6}.pk-callout{border:3px solid var(--ink);box-shadow:0 3px 0 var(--ink);font-family:var(--font);color:var(--ink);cursor:pointer;text-align:left;background:#ffe0e6;border-radius:16px;justify-content:space-between;gap:8px;padding:12px 14px;font-size:1rem;display:flex}.pk-ceo,.pk-floor-head,.pk-agent-head,.pk-pr-head{align-items:center;gap:10px;display:flex}.pk-pr-head{align-items:flex-start}.pk-pr-head .grow{overflow-wrap:anywhere}.pk-floor{border-left:10px solid var(--accent)}.pk-floor-name{font-size:1.05rem}.pk-ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pk-pipeline{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;margin:10px 0 8px;display:grid}.pk-stage{background:#f4f1ea;border:2px solid #1f1d2b26;border-radius:12px;flex-direction:column;align-items:center;min-width:0;padding:6px 2px;display:flex}.pk-stage-n{font-size:1.35rem;font-weight:700;line-height:1.1}.pk-stage-icon{vertical-align:2px;margin-right:3px;font-size:.8rem}.pk-stage-label{text-align:center;max-width:100%;font-size:.68rem;font-weight:600;line-height:1.15}.pk-stage-zero{opacity:.72}.pk-stage-hot{border-color:var(--bad);background:#ffe0e6}.pk-floor-foot{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.pk-wide{width:100%}.pk-center{text-align:center}.pk-chips{flex-wrap:wrap;gap:6px;display:flex}.pk-chip{border:2px solid var(--ink);max-width:100%;font-family:var(--font);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:#fff;border-radius:999px;padding:4px 10px;font-size:.82rem;font-weight:600;overflow:hidden}.pk-chip-on{background:var(--accent);color:var(--ink)}.pk-h{flex-wrap:wrap;align-items:center;gap:6px;margin:8px 2px 0;font-size:1rem;display:flex}.pk-section{flex-direction:column;gap:8px;scroll-margin-top:8px;display:flex}.pk-agent-bad{background:#fff5f7}.pk-actions{flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;display:flex}.pk-actions .btn{min-height:34px}.pk-assign{flex:160px;width:auto;min-width:0;padding:5px 8px;font-size:.85rem}.pk-msg{align-items:flex-end;gap:6px;margin-top:8px;display:flex}.pk-error{overflow-wrap:anywhere;margin-top:6px}.pk-pr-summary{overflow-wrap:anywhere;margin:6px 0 2px}.pk-empty{text-align:center;color:var(--muted);padding:24px 12px}.pocket .toasts{top:calc(66px + env(safe-area-inset-top));align-items:stretch;max-width:none;bottom:auto;left:12px;right:12px}.pocket .toast{-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:8px 12px;font-size:.85rem;display:-webkit-box;overflow:hidden}.pocket .quick{flex-wrap:wrap;overflow:visible}.pocket .md pre{white-space:pre-wrap;overflow-wrap:anywhere}.pocket .resume{margin:0}@media (width<=760px){.pocket .overlay{padding:0}.pocket .panel{width:100%;height:100%;max-height:100%;box-shadow:none;border:none;border-radius:0}.pocket .panel-head{padding-top:max(12px, env(safe-area-inset-top))}.pocket .panel-body{padding:12px}}.kanban-embedded{flex-direction:column;min-width:0;display:flex}.kanban-embedded-title{overflow-wrap:anywhere;margin:0 0 8px;font-size:1.05rem}.kanban-embedded .kanban,.kanban-embedded .kanban-5{grid-template-columns:minmax(0,1fr);overflow:visible}.kanban-embedded .kcol-body{overflow:visible}.kanban-embedded .kcard-title{overflow-wrap:anywhere}.notify-h{margin:14px 0 2px;font-size:.95rem}.notify-events .toggle.block{margin:4px 0}.notify-hook{border-top:2px dashed #1f1d2b26;padding:8px 0}.notify-hook p{margin:2px 0 6px}.notify-form{flex-direction:column;display:flex}.notify-ok{color:#1b873a;font-weight:600}.cloud-steps{margin:2px 0 8px;padding-left:20px}.cloud-steps li{margin:4px 0}.cloud-cmd{flex-wrap:wrap;align-items:center;gap:6px;margin:2px 0;display:inline-flex}.cloud-cmd code{overflow-wrap:anywhere}.cloud-badge{color:#2563c9;white-space:nowrap;background:#4d96ff29;border-radius:999px;padding:0 6px;font-size:.75rem;font-weight:700;display:inline-block}.sign-in-note{color:#1f1d2b;background:#fff3bf;border:2px solid #f0b429;border-radius:10px;align-items:center;gap:10px;margin-bottom:8px;padding:8px 10px;font-size:.88rem;display:flex}.sign-in-chip{color:#1f1d2b;background:#fff3bf;border-color:#f0b429}.ac-sign-in,.pk-sign-in{color:#1f1d2b;background:#fff3bf;border-radius:8px;padding:2px 8px;font-weight:600}.pk-sign-in{margin-top:6px}.vs-row{color:var(--ink);border-radius:12px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:5px 8px 5px 26px;display:grid}.vs-head{cursor:default}.vs-me{text-overflow:ellipsis;white-space:nowrap;text-transform:none;letter-spacing:0;min-width:0;font-weight:500;overflow:hidden}.vs-follow{white-space:nowrap}.vs-follow.vs-on{background:var(--ink);color:var(--paper)}.emote-wheel{z-index:30;width:0;height:0;position:absolute;top:50%;left:50%}.emote-hub{color:#fff;text-align:center;pointer-events:none;background:#141622d1;border-radius:999px;width:104px;padding:6px 8px;font-size:.8rem;font-weight:600;position:absolute;transform:translate(-50%,-50%)}.emote-slice{border:3px solid var(--ink);background:var(--paper);width:64px;height:64px;box-shadow:0 3px 0 var(--ink);cursor:pointer;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;transition:background 80ms,scale 80ms;display:flex;position:absolute;top:-32px;left:-32px}.emote-slice.emote-on{background:var(--accent);scale:1.15}.emote-emoji{font-size:1.7rem;line-height:1}.emote-slice kbd{padding:0 4px;font-size:.6rem}.my-emote{background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);pointer-events:none;border-radius:999px;padding:6px 16px;font-size:1.6rem;font-weight:600;animation:.25s ease-out my-emote-pop;position:absolute;bottom:30%;left:50%;transform:translate(-50%)}.my-emote span{vertical-align:middle;font-size:.95rem}@keyframes my-emote-pop{0%{scale:.4}70%{scale:1.12}}.coin-pill{font-family:var(--font);color:var(--ink);cursor:pointer;background:#ffe8a3;position:relative}.coin-gain{color:#9a6b00;text-shadow:0 1px #fff;pointer-events:none;margin-top:2px;font-weight:700;animation:1.8s ease-out forwards coin-gain;position:absolute;top:100%;right:-4px}@keyframes coin-gain{0%{opacity:0;transform:translateY(6px)scale(.8)}15%{opacity:1;transform:translateY(0)scale(1.15)}to{opacity:0;transform:translateY(-10px)scale(1)}}.catalogue-floors .tab{align-items:center;gap:6px;display:inline-flex}.catalogue-floors .floor-badge{border-radius:7px;width:24px;height:24px;font-size:.8rem}.catalogue-purse{align-items:center;gap:12px;margin-bottom:12px;display:flex}.catalogue-coins{flex:none;font-size:1.6rem}.catalogue-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;margin-bottom:10px;display:grid}.catalogue-item{border:2.5px solid var(--ink);background:#fff;border-radius:14px;flex-direction:column;gap:4px;padding:10px;display:flex}.catalogue-item .btn{align-self:flex-start;margin-top:auto}.catalogue.cyan-panel .catalogue-item .btn-good{background:var(--accent);color:var(--ink)}.catalogue-off{background:#f5f3ee}.catalogue-icon{font-size:1.9rem;line-height:1.1}.small-icon{font-size:1.3rem}.decor-list{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}.decor-row{border:2px solid #1f1d2b1f;border-radius:12px;align-items:center;gap:8px;padding:6px 8px;display:flex}.career-card{border:3px solid var(--ink);border-left:10px solid var(--accent);background:#fff;border-radius:16px;flex-direction:column;gap:10px;margin:0 0 10px;padding:12px 14px;display:flex}.career-head{align-items:flex-start;gap:12px;display:flex}.career-portrait{border:2.5px solid var(--ink);border-radius:16px;flex:none}.career-who{flex-direction:column;gap:3px;min-width:0;display:flex}.career-name{font-size:1.2rem;font-weight:700}.career-title{color:var(--muted);font-weight:600}.career-badges{flex-wrap:wrap;gap:4px;display:flex}.career-badge{border:1.5px solid var(--ink);border-radius:999px;padding:1px 8px;font-size:.75rem;font-weight:600}.career-star{background:#ffd43b}.career-known{font-style:italic}.career-stats{grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:6px;display:grid}.career-stat{background:#fff4e6;border-radius:10px;flex-direction:column;padding:4px 8px;display:flex}.career-stat b{font-size:1.05rem}.career-stat span{color:var(--muted);font-size:.72rem}.career-recent{flex-direction:column;gap:2px;display:flex}.career-pr{white-space:nowrap;text-overflow:ellipsis;font-size:.85rem;overflow:hidden}.career-peek .career-card{box-shadow:0 4px 0 var(--ink);margin:0;animation:.15s ease-out fadein}.career-compact{border-width:3px 3px 3px 8px;border-radius:14px;gap:6px;padding:8px 10px;font-size:.82rem}.career-compact .career-head{align-items:center;gap:8px}.career-compact .career-name{font-size:.95rem}.career-compact .career-title,.career-compact .career-known{font-size:.75rem}.career-compact .career-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}.career-compact .career-stat{border-radius:8px;padding:2px 5px}.career-compact .career-stat b{font-size:.88rem}.career-compact .career-stat span{font-size:.62rem;line-height:1.15}.career-compact .career-pr{font-size:.75rem}.team-stats-scroll{overflow-x:auto}.stats-table th{text-align:left;white-space:nowrap;padding:2px 4px;font-size:.78rem}.stats-table td.num{text-align:right;font-variant-numeric:tabular-nums}.sort-btn,.link-btn{font:inherit;cursor:pointer;color:var(--ink);background:0 0;border:none;padding:2px 0;font-weight:600}.link-btn{color:#3a56d4}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.toast:not(.toast-success):not(.toast-error),.tour:not(.tour-cheer){background:var(--popup-paper)}.tour{border-left-color:var(--popup-petrol)}:is(.panel,.confirm,.doc,.phone,.tour) :is(.btn-good,.btn-warn,.btn-big,.tab-on){background:var(--popup-cyan);color:var(--ink)}:is(.panel,.confirm,.doc,.phone) .btn-bad{background:var(--popup-petrol);color:var(--popup-paper)}.panel .panel-body :is(input[type=checkbox],input[type=radio],input[type=range]),:is(.confirm,.doc,.phone) :is(input[type=checkbox],input[type=radio],input[type=range]){accent-color:var(--popup-petrol)}:is(.panel,.confirm,.doc,.phone) :is(input,select,textarea):focus{border-color:var(--popup-petrol)}.panel :is(.mouse-settings,.day-settings){background:var(--popup-soft)}.confirm{max-height:calc(100dvh - 32px);overflow-y:auto}.confirm-actions .btn{white-space:normal;overflow-wrap:anywhere;max-width:100%}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline-offset:2px;outline:3px solid #3a56d4}:is(.panel,.confirm,.doc,.phone) :focus-visible{outline-color:var(--popup-petrol)}.panel:focus,.phone:focus,.confirm:focus{outline:none}.captions{z-index:70;width:min(860px,100vw - 32px);font-size:calc(1.15rem * var(--caption-scale,1));pointer-events:none;flex-direction:column;align-items:center;gap:6px;display:flex;position:fixed;bottom:84px;left:50%;transform:translate(-50%)}.caption{background:rgba(10, 10, 16, var(--caption-bg,.75));color:#fff;text-align:center;text-shadow:0 1px 2px #000,0 0 3px #000;border-radius:8px;max-width:100%;padding:.2em .6em;font-weight:600;line-height:1.35}.caption-alarm{color:#ffe066}.caption-speech b{color:#9bd8ff}.captions-preview{z-index:auto;background:linear-gradient(135deg,#bfe3ff,#fff3b0 50%,#5c677d);border-radius:12px;width:auto;padding:14px 10px;position:static;transform:none}.crosshair-dot{z-index:1;border-width:3px;width:12px;height:12px;margin:-6px 0 0 -6px;box-shadow:0 0 0 2px #fff}.a11y-grid{grid-template-columns:repeat(auto-fill,minmax(min(420px,100%),1fr))}.a11y-slider{flex-wrap:wrap;align-items:center;gap:10px;font-size:.92rem;display:flex}.a11y-slider>span{min-width:9em}.a11y-slider input[type=range]{min-width:120px;accent-color:var(--accent);border:0;flex:1;padding:0}.a11y-slider b{font-variant-numeric:tabular-nums;min-width:3.2em}.a11y-fieldset{border:2px solid #1f1d2b40;border-radius:12px;margin:4px 0;padding:4px 12px 8px}.a11y-fieldset legend{padding:0 4px;font-size:.9rem;font-weight:600}.a11y-fieldset .toggle.block{gap:8px;margin:4px 0}.a11y-hint{font-weight:400}.status-swatches{flex-wrap:wrap;gap:6px;margin:4px 0 0;padding:0;list-style:none;display:flex}.status-kind{border:2px solid var(--ink);white-space:nowrap;background:#fff;border-radius:999px;align-items:center;gap:5px;padding:2px 10px 2px 6px;font-size:.82rem;font-weight:600;display:inline-flex}.status-kind:before{content:"";border:2px solid var(--ink);background:var(--kind);border-radius:50%;width:12px;height:12px}.status-kind-idle{--kind:var(--kind-idle,#adb5bd)}.status-kind-waiting{--kind:var(--kind-waiting,#fab005)}.status-kind-busy{--kind:var(--kind-busy,#339af0)}.status-kind-ok{--kind:var(--kind-ok,#2dc653)}.status-kind-attention{--kind:var(--kind-attention,#ffb703)}.status-kind-bad{--kind:var(--kind-bad,#ef476f)}.floor-list{width:min(980px,100%)}.field-inline{align-items:center;gap:8px;font-size:.9rem;font-weight:600;display:inline-flex}.field-inline select{width:auto}.floor-summary{margin:4px 0 10px}.floor-table{border-collapse:collapse;width:100%;font-size:.92rem}.floor-table th,.floor-table td{text-align:left;vertical-align:middle;border-bottom:2px solid #1f1d2b1f;padding:6px 8px}.floor-table thead th{text-transform:uppercase;letter-spacing:.05em;font-size:.78rem}.floor-floors{margin:4px 0;padding-left:18px;line-height:1.8}.panel-head .muted,html[data-palette] :is(.kcard-good,.kcard-warn,.kcard-bad) .muted{color:inherit}.phone-links{flex-wrap:wrap;gap:6px;margin:10px 0 2px;display:flex}html[data-status-shapes] :is(.status-idle,.status-unconfigured,.status-stopped):before{content:"○ "}html[data-status-shapes] :is(.status-preparing,.status-installing,.status-starting):before{content:"⏳ "}html[data-status-shapes] .status-working:before{content:"▶ "}html[data-status-shapes] :is(.status-done,.status-running):before{content:"✓ "}html[data-status-shapes] .status-error:before{content:"✕ "}html[data-status-shapes] :is(.kcard-good,.kcard-warn,.kcard-bad){position:relative}html[data-status-shapes] :is(.kcard-good,.kcard-warn,.kcard-bad):after{border:2px solid var(--ink);width:22px;height:22px;color:var(--ink);background:#fff;border-radius:50%;place-items:center;font-size:.8rem;font-weight:700;line-height:1;display:grid;position:absolute;top:-9px;right:-7px}html[data-status-shapes] .kcard-good:after{content:"✓"}html[data-status-shapes] .kcard-warn:after{content:"!"}html[data-status-shapes] .kcard-bad:after{content:"✕"}html[data-status-shapes] .toast-success:before{content:"✓ ";font-weight:700}html[data-status-shapes] .toast-error:before{content:"✕ ";font-weight:700}html[data-reduce-motion] *,html[data-reduce-motion] :before,html[data-reduce-motion] :after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}html[data-reduce-motion] .fade{transition-duration:.6s!important}html[data-ui-scale] :is(.hud,.overlay,.confirm-overlay,.tour,.start,.pocket){zoom:var(--ui-scale,1)}html[data-ui-scale] .pocket .overlay{zoom:1}html[data-ui-scale] :is(.hud-floor,.office-chip,.toasts){max-width:min(420px, calc(100vw / var(--ui-scale) - 32px))}html[data-ui-scale] .hud-floor{max-width:min(520px, calc(100vw / var(--ui-scale) - 32px))}html[data-ui-scale] .hud-status{max-width:calc(50vw / var(--ui-scale))}html[data-ui-scale] .hud-banner{max-width:calc(90vw / var(--ui-scale))}html[data-ui-scale] .workers{width:min(360px, calc(100vw / var(--ui-scale) - 32px));max-height:calc(100vh / var(--ui-scale) - 180px)}html[data-ui-scale] .tour{width:min(390px, calc(100vw / var(--ui-scale) - 32px))}html[data-ui-scale] :is(.panel,.start-card){max-height:calc(100vh / var(--ui-scale) - 32px)}html[data-ui-scale] .panel-wide{height:calc(100vh / var(--ui-scale) - 32px)}html[data-ui-scale] .phone{height:min(760px, calc(100vh / var(--ui-scale) - 32px))}html[data-readable-font]{--font:Verdana, Tahoma, "Trebuchet MS", "Segoe UI", sans-serif}html[data-readable-font] :is(.hud,.overlay,.confirm-overlay,.tour,.start,.pocket,.captions){letter-spacing:.035em;word-spacing:.12em;line-height:1.55}html[data-readable-font] :is(em,i,.wk-last-thinking){font-style:normal}html[data-high-contrast]{--paper:#fff;--muted:#3d3f52}html[data-high-contrast] .overlay{background:#0a0a10b3}html[data-high-contrast] :is(.panel,.card,.kcard,.phone,.confirm,.toast,.hud-floor,.workers,.hud-hint){border-color:#000}html[data-high-contrast] :is(input,select,textarea,.btn-ghost){border-color:var(--ink)}html[data-high-contrast] :is(.hud-help,.chat-log,.phone-screen){background:#fff}html[data-high-contrast] .phone-hint{color:#fff}html[data-high-contrast] .wk-head b{color:#0b6b2a}html[data-high-contrast] .floor-num{color:var(--ink);text-shadow:none}html[data-high-contrast] .hud-resume{text-shadow:none;background:#0a0a10d9;border-radius:10px;padding:4px 12px}html[data-high-contrast] :is(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline-offset:2px;outline:3px solid #000;box-shadow:0 0 0 6px #ffe066}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Xi as e,hs as t,p as n}from"./store-FA83kfnc.js";import{i as r}from"./gate-BplJKcLG.js";import{g as i,l as a,n as o,t as s}from"./gallery-ColCPQQE.js";var c={ebml:440786851,segment:408125543,seekHead:290298740,info:357149030,duration:17545,tracks:374648427,trackEntry:174,trackNumber:215,trackType:131,cluster:524531317,timecode:231,simpleBlock:163,blockGroup:160,block:161,referenceBlock:251,cues:475249515,tags:307544935,chapters:272869232,attachments:423732329,void:236},l=new Set([c.seekHead,c.info,c.tracks,c.cluster,c.cues,c.tags,c.chapters,c.attachments]),u=new Set([c.seekHead,c.cues,c.tags,c.void]),d=Uint8Array.of(1,255,255,255,255,255,255,255);function f(e){return{pending:new Uint8Array,state:`top`,header:[],video:null,clusters:[],clusterLeft:-1,latest:0,failed:null,windowMs:e}}function p(e,t){if(t>=e.length)return null;let n=e[t],r=n&128?1:n&64?2:n&32?3:n&16?4:0;if(!r)throw Error(`bad element id`);if(t+r>e.length)return null;let i=0;for(let n=0;n<r;n++)i=i*256+e[t+n];return{id:i,len:r}}function m(e,t){if(t>=e.length)return null;let n=e[t],r=1,i=128;for(;r<=8&&!(n&i);)r++,i>>=1;if(r>8)throw Error(`bad size`);if(t+r>e.length)return null;let a=n&i-1,o=a===i-1;for(let n=1;n<r;n++)a=a*256+e[t+n],e[t+n]!==255&&(o=!1);return{value:o?-1:a,len:r}}function h(e,t){let n=p(e,t);if(!n)return null;let r=m(e,t+n.len);return r?{id:n.id,size:r.value,len:n.len+r.len}:null}function g(e,t,n){let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return r}function*_(e){let t=0;for(;t<e.length;){let n=h(e,t);if(!n||n.size<0)return;let r=t,i=t+n.len+n.size;if(i>e.length)return;yield{id:n.id,start:r,end:i,body:e.subarray(t+n.len,i)},t=i}}function v(e){let t=e<256?1:e<65536?2:e<16777216?3:4,n=new Uint8Array(t);for(let r=t-1,i=e;r>=0;r--,i=Math.floor(i/256))n[r]=i&255;return n}function y(e){let t=1;for(;t<8&&e>=2**(7*t)-1;)t++;let n=new Uint8Array(t),r=e;for(let e=t-1;e>=0;e--,r=Math.floor(r/256))n[e]=r&255;return n[0]|=128>>t-1,n}function b(e){let t=[],n=Math.max(0,Math.round(e));do t.unshift(n&255),n=Math.floor(n/256);while(n>0);return Uint8Array.from(t)}function x(e,...t){return S([v(e),y(t.reduce((e,t)=>e+t.length,0)),...t])}function S(e){let t=new Uint8Array(e.reduce((e,t)=>e+t.length,0)),n=0;for(let r of e)t.set(r,n),n+=r.length;return t}function C(e){for(let t of _(e)){if(t.id!==c.trackEntry)continue;let e=null,n=null;for(let r of _(t.body))r.id===c.trackNumber&&(e=g(r.body,0,r.body.length)),r.id===c.trackType&&(n=g(r.body,0,r.body.length));if(n===1&&e!==null)return e}return null}function w(e){let t=[];for(let n of _(e))n.id!==c.duration&&t.push(e.subarray(n.start,n.end));return x(c.info,...t)}function T(e){let t=m(e,0);if(!t||t.len+3>e.length)return null;let n=e[t.len]<<8|e[t.len+1];return{track:t.value,rel:n&32768?n-65536:n,key:!!(e[t.len+2]&128)}}function E(e){e.state=`segment`,e.clusterLeft=-1,O(e)}function D(e,t,n,r){let i=e.clusters[e.clusters.length-1];if(t===c.timecode){i.time=g(r,0,r.length),e.latest=Math.max(e.latest,i.time);return}i.parts.push(n.slice()),i.bytes+=n.length;let a=null;if(t===c.simpleBlock)a=T(r);else if(t===c.blockGroup){let e=!1;for(let t of _(r))t.id===c.block&&(a=T(t.body)),t.id===c.referenceBlock&&(e=!0);a&&(a.key=!e)}a&&(e.latest=Math.max(e.latest,i.time+a.rel),i.key===null&&a.track===e.video&&(i.key=a.key))}function O(e){let t=e.latest-e.windowMs,n=-1;for(let r=0;r<e.clusters.length-1;r++)e.clusters[r].key&&e.clusters[r].time<=t&&(n=r);if(n>0&&e.clusters.splice(0,n),e.clusters.length<2||e.latest-e.clusters[0].time<=e.windowMs*4)return;let r=-1;for(let t=0;t<e.clusters.length-1;t++)e.clusters[t].key&&(r=t);e.clusters.splice(0,r>0?r:e.clusters.length-1)}function k(e,t){if(e.failed)return;let n=e.pending.length?S([e.pending,t]):t,r=0;try{for(;;){let t=h(n,r);if(!t)break;if(e.state===`top`){if(t.id===c.segment){e.header.push(S([v(c.segment),d])),e.state=`segment`,r+=t.len;continue}if(t.size<0)throw Error(`unknown-size element before the segment`);if(r+t.len+t.size>n.length)break;t.id===c.ebml&&e.header.push(n.slice(r,r+t.len+t.size)),r+=t.len+t.size;continue}if(e.state===`cluster`&&(l.has(t.id)||e.clusterLeft===0)){E(e);continue}if(e.state===`segment`){if(t.id===c.cluster){e.clusters.push({time:0,key:null,parts:[],bytes:0}),e.state=`cluster`,e.clusterLeft=t.size,r+=t.len;continue}if(t.size<0)throw Error(`unknown-size element in the segment`);if(r+t.len+t.size>n.length)break;let i=n.subarray(r+t.len,r+t.len+t.size);!e.clusters.length&&!u.has(t.id)&&(t.id===c.tracks&&(e.video=C(i)),e.header.push(t.id===c.info?w(i):n.slice(r,r+t.len+t.size))),r+=t.len+t.size;continue}if(t.size<0)throw Error(`unknown-size element in a cluster`);let i=r+t.len+t.size;if(i>n.length)break;D(e,t.id,n.subarray(r,i),n.subarray(r+t.len,i)),e.clusterLeft>0&&(e.clusterLeft-=i-r),r=i}}catch(t){e.failed=t instanceof Error?t.message:String(t),e.clusters=[],e.pending=new Uint8Array;return}e.pending=n.slice(r),e.state===`cluster`&&e.clusterLeft===0?E(e):O(e)}function A(e){let t=e.clusters.find(e=>e.key);return t?e.latest-t.time:0}function j(e){return e.header.reduce((e,t)=>e+t.length,0)+e.clusters.reduce((e,t)=>e+t.bytes,0)+e.pending.length}function M(e,t){if(e.failed||!e.header.length)return null;let n=e.latest-t,r=-1;for(let t=0;t<e.clusters.length;t++){let i=e.clusters[t];i.key&&(r<0||i.time<=n)&&(r=t)}if(r<0)return null;let i=e.clusters[r].time,a=[...e.header];for(let t=r;t<e.clusters.length;t++){let n=e.clusters[t];n.parts.length&&a.push(v(c.cluster),d,x(c.timecode,b(n.time-i)),...n.parts)}return a}var N=15e3,P=null,F=null;function I(){if(typeof MediaRecorder>`u`)return null;for(let e of[`video/webm;codecs=vp8,opus`,`video/webm;codecs=vp9,opus`,`video/webm`])if(MediaRecorder.isTypeSupported(e))return e;return null}function L(){if(P)return;let t=r(),n=I();if(!t||typeof t.captureStream!=`function`||!n){F=`This browser can't record the office (it needs MediaRecorder with WebM).`;return}try{let r=t.captureStream(30);for(let t of e()?.getAudioTracks()??[])r.addTrack(t.clone());let i=new MediaRecorder(r,{mimeType:n,videoBitsPerSecond:4e6,audioBitsPerSecond:96e3,videoKeyFrameIntervalDuration:1e3}),a={recorder:i,stream:r,ring:f(N),queue:Promise.resolve(),flushed:[]};i.ondataavailable=e=>{let t=e.data;a.queue=a.queue.then(async()=>{t.size&&k(a.ring,new Uint8Array(await t.arrayBuffer()))}).then(()=>{for(let e of a.flushed.splice(0))e()})},i.onerror=()=>{F=`Instant replay stopped: the browser could not keep recording.`,R()},i.start(1e3),P=a,F=null}catch(e){F=`Instant replay could not start: ${e instanceof Error?e.message:String(e)}`}}function R(){let e=P;if(P=null,e){e.recorder.state!==`inactive`&&e.recorder.stop();for(let t of e.stream.getTracks())t.stop();for(let t of e.flushed.splice(0))t()}}function z(){return{running:!!P,seconds:P?Math.round(A(P.ring)/100)/10:0,bytes:P?j(P.ring):0,error:P?.ring.failed??F}}async function B(){let e=P,c=(e,r)=>t(n.getState().settings.language,e,r),l=n.getState().pushToast;if(!e)return l(`error`,c(F||`Instant replay is not running.`)),null;await new Promise(t=>{e.flushed.push(t),e.recorder.state===`recording`?e.recorder.requestData():t()});let u=M(e.ring,N);if(!u)return l(`info`,e.ring.failed?c(`Instant replay can’t read this browser’s recording ({error}).`,{error:e.ring.failed}):c(`Nothing to replay yet: give it a second.`)),null;let d=new Blob(u,{type:`video/webm`}),f=Math.min(A(e.ring),2e4)/1e3,p=a(o().label,new Date,`webm`),m=r(),h=s(d,{kind:`replay`,name:p,width:m?.width??0,height:m?.height??0,seconds:f});return i(h.url,p),l(`success`,c(`🎬 Saved the last {seconds} s as {name}`,{seconds:Math.round(f),name:p})),{name:p,bytes:d.size,seconds:f}}export{N as REPLAY_MS,z as replayState,B as saveReplay,L as startReplay,R as stopReplay};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,u as t}from"./jsx-runtime-BFUkm7bt.js";import{Bt as n,Ct as r,f as i,jt as a}from"./bloomMarks-DariC6lY.js";var o=t(e(),1),s={fillStyle:`#000000`,strokeStyle:`#000000`,font:`10px sans-serif`,textAlign:`start`,textBaseline:`alphabetic`,direction:`inherit`,lineWidth:1,lineCap:`butt`,lineJoin:`miter`,miterLimit:10,lineDashOffset:0,globalAlpha:1,globalCompositeOperation:`source-over`,shadowBlur:0,shadowColor:`rgba(0, 0, 0, 0)`,shadowOffsetX:0,shadowOffsetY:0,imageSmoothingEnabled:!0,imageSmoothingQuality:`low`,letterSpacing:`0px`,wordSpacing:`0px`,fontKerning:`auto`,textRendering:`auto`,filter:`none`},c=new Set(`fillRect.clearRect.strokeRect.fillText.strokeText.beginPath.closePath.moveTo.lineTo.arc.arcTo.ellipse.rect.roundRect.quadraticCurveTo.bezierCurveTo.fill.stroke.clip.save.restore.translate.rotate.scale.transform.setTransform.resetTransform.setLineDash.drawImage.reset`.split(`.`)),l=class extends Error{};function u(e,t,n,r){let i=[],a=[],o={...s},u=[],d=[],f=0,p={width:e,height:t},m=e=>{if(e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e)&&e.every(e=>typeof e==`number`))return[...e];if(e&&typeof e==`object`&&`g`in e&&typeof e.g==`number`)return{g:e.g};throw new l},h=e=>{if(e&&typeof e==`object`&&(typeof ImageBitmap>`u`||!(e instanceof ImageBitmap))&&!(`width`in e))throw new l;let t=a.indexOf(e);return t<0&&(t=a.push(e)-1),{img:t}},g=(e,t)=>{let n=f++;return i.push([`g`,n,e,t]),{g:n,addColorStop:(e,t)=>void i.push([`gs`,n,e,t])}},_={measureText:e=>(r.font=o.font,r.letterSpacing=o.letterSpacing,r.measureText(String(e))),createLinearGradient:(...e)=>g(`linear`,e),createRadialGradient:(...e)=>g(`radial`,e),getLineDash:()=>[...d],save:()=>{u.push({...o,lineDash:d}),i.push([`m`,`save`,[]])},restore:()=>{let e=u.pop();e&&(d=e.lineDash,o=e),i.push([`m`,`restore`,[]])},setLineDash:e=>{d=[...e],i.push([`m`,`setLineDash`,[m(e)]])},reset:()=>{o={...s},u.length=0,d=[],i.push([`m`,`reset`,[]])}},v=new Proxy({},{get(e,t){if(typeof t==`string`){if(t===`canvas`)return p;if(t in _)return _[t];if(c.has(t))return(...e)=>{if(t===`drawImage`)i.push([`m`,t,[h(e[0]),...e.slice(1).map(m)]]);else if((t===`fill`||t===`stroke`||t===`clip`)&&e[0]!==void 0&&typeof e[0]!=`string`)throw new l;else i.push([`m`,t,e.map(m)])};if(t in s)return o[t];throw new l}},set(e,t,n){if(typeof t!=`string`||!(t in s))throw new l;let r=m(n);return o[t]=n,i.push([`s`,t,r]),!0}});try{n(v)}catch(e){if(e instanceof l)return null;throw e}return{ops:i,images:a}}var d={mode:`main`,sent:0,painted:0,onMain:0,failed:0,workerMs:0,recordMs:0},f=new Map;typeof window<`u`&&!Object.getOwnPropertyDescriptor(window,`__swarmPaint`)&&Object.defineProperty(window,"__swarmPaint",{get:()=>({...d,textures:f.size,workerMs:Math.round(d.workerMs),recordMs:Math.round(d.recordMs)})});var p,m=!1,h=null,g=1;function _(){try{return typeof Worker>`u`||typeof OffscreenCanvas>`u`||typeof createImageBitmap>`u`||/[?&]paint=main\b/.test(location.search)?!1:!!new OffscreenCanvas(1,1).getContext(`2d`)}catch{return!1}}function v(){if(p===void 0&&(p=null,_()))try{let e=new Worker(new URL(`/assets/paint.worker-D95XJ3xX.js`,``+import.meta.url),{type:`module`});e.onmessage=e=>b(e.data),e.onerror=()=>{p=null,m=!1,d.mode=`main`;for(let e of[...f.values()])e.toMain()},p=e,d.mode=`starting`;let t=document.querySelector(`link[href*="fonts.googleapis.com/css"]`)?.href;y({type:`fonts`,css:t??``})}catch{p=null}}function y(e,t=[]){p?.postMessage(e,t)}function b(e){if(e.type===`fontsReady`){m=!0,d.mode=`worker`;return}let t=f.get(e.id);if(e.type===`failed`){d.failed++,t?.toMain();return}d.painted++,d.workerMs+=e.ms,t?t.show(e.bitmap):e.bitmap.close()}var x=class{w;h;texture;id=g++;canvas;mainOnly=!1;busy=!1;waiting=null;sentImages=[];last=null;constructor(e,t){this.w=e,this.h=t,this.canvas=document.createElement(`canvas`),this.canvas.width=e,this.canvas.height=t,this.texture=new a(this.canvas),this.texture.colorSpace=r,this.texture.anisotropy=8,v(),p?f.set(this.id,this):this.mainOnly=!0}paint(e){if(this.last=e,!this.mainOnly&&p&&m){let t=performance.now();h??=document.createElement(`canvas`).getContext(`2d`);let n=h?u(this.w,this.h,e,h):null;if(d.recordMs+=performance.now()-t,n){this.busy?this.waiting=n:this.send(n);return}this.mainOnly=!0,f.delete(this.id)}let t=this.canvas.getContext(`2d`);t.clearRect(0,0,this.w,this.h),e(t),this.showCanvas(),d.onMain++}async send(e){this.busy=!0,d.sent++;let t=e.images.length===this.sentImages.length&&e.images.every((e,t)=>e===this.sentImages[t]),n;if(!t){try{n=await Promise.all(e.images.map(e=>createImageBitmap(e)))}catch{return this.toMain()}this.sentImages=e.images}if(this.mainOnly||!p)return void n?.forEach(e=>e.close());y({type:`paint`,id:this.id,w:this.w,h:this.h,ops:e.ops,images:n},n??[])}show(e){if(this.busy=!1,this.mainOnly)return void e.close();let t=this.texture.image;this.texture.image=e,this.texture.flipY=!1,this.texture.needsUpdate=!0,t instanceof ImageBitmap&&t.close();let n=this.waiting;this.waiting=null,n&&this.send(n)}showCanvas(){let e=this.texture.image;this.texture.image=this.canvas,this.texture.flipY=!0,this.texture.needsUpdate=!0,e instanceof ImageBitmap&&e.close()}toMain(){this.mainOnly=!0,this.busy=!1,this.waiting=null,f.delete(this.id)&&y({type:`drop`,id:this.id}),this.last&&this.paint(this.last)}dispose(){f.delete(this.id)&&y({type:`drop`,id:this.id});let e=this.texture.image;e instanceof ImageBitmap&&e.close(),this.texture.dispose()}},S=new Map;function C(e,t=3.2,n){let r=(0,o.useRef)(null),i=e?`${e.id}|${e.label}`:``;return(0,o.useEffect)(()=>{let i=r.current;if(i&&e)return S.set(i,{...e,range:t,pick:n}),()=>{S.delete(i)}},[i,t,n]),r}function w(e,t,r,a,s){let c=(0,o.useMemo)(()=>new x(e,t),[e,t]),l=(0,o.useRef)(null),u=(0,o.useMemo)(()=>new n,[]),d=()=>{let e=s?.anchor.current;return!!e&&e.getWorldPosition(u).distanceTo(T)>s.range};return(0,o.useEffect)(()=>{c.texture.version>0&&d()?l.current=r:(l.current=null,c.paint(r));let e=!0;return document.fonts&&document.fonts.status!==`loaded`&&document.fonts.ready.then(()=>{e&&c.paint(r)}),()=>{e=!1}},[c,...a]),i(({camera:e})=>{T.copy(e.position),l.current&&!d()&&(c.paint(l.current),l.current=null)}),(0,o.useEffect)(()=>()=>c.dispose(),[c]),c.texture}var T=new n;export{x as i,w as n,C as r,S as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n)),u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function O(e,t){return D(e.type,t,e.props)}function k(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function A(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var j=/\/+/g;function M(e,t){return typeof e==`object`&&e&&e.key!=null?A(``+e.key):t.toString(36)}function N(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function P(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,P(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+M(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(j,`$&/`)+`/`),P(o,r,i,``,function(e){return e})):o!=null&&(k(o)&&(o=O(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(j,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u<e.length;u++)a=e[u],s=l+M(a,u),c+=P(a,r,i,s,o);else if(u=h(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+M(a,u++),c+=P(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return P(N(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function F(e,t,n){if(e==null)return e;var r=[],i=0;return P(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function I(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var L=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function R(e){var t=T.T,n={};n.types=t===null?null:t.types,T.T=n;try{var r=e(),i=T.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(w,L)}catch(e){L(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),T.T=t}}function z(e){var t=T.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else R(z.bind(null,e))}var B={map:F,forEach:function(e,t,n){F(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return F(e,function(){t++}),t},toArray:function(e){return F(e,function(e){return e})||[]},only:function(e){if(!k(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=B,e.Component=y,e.Fragment=r,e.Profiler=a,e.PureComponent=x,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=T,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return T.H.useMemoCache(e)}},e.addTransitionType=z,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=_({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!E.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return D(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)E.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return D(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=k,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:I}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=R,e.unstable_useCacheRefresh=function(){return T.H.useCacheRefresh()},e.use=function(e){return T.H.use(e)},e.useActionState=function(e,t,n){return T.H.useActionState(e,t,n)},e.useCallback=function(e,t){return T.H.useCallback(e,t)},e.useContext=function(e){return T.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return T.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return T.H.useEffect(e,t)},e.useEffectEvent=function(e){return T.H.useEffectEvent(e)},e.useId=function(){return T.H.useId()},e.useImperativeHandle=function(e,t,n){return T.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return T.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return T.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return T.H.useMemo(e,t)},e.useOptimistic=function(e,t){return T.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return T.H.useReducer(e,t,n)},e.useRef=function(e){return T.H.useRef(e)},e.useState=function(e){return T.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return T.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return T.H.useTransition()},e.version=`19.3.0`})),d=o(((e,t)=>{t.exports=u()})),f=l(d(),1),p=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},m=(e=>e?p(e):p),h=e=>e;function g(e,t=h){let n=f.useSyncExternalStore(e.subscribe,f.useCallback(()=>t(e.getState()),[e,t]),f.useCallback(()=>t(e.getInitialState()),[e,t]));return f.useDebugValue(n),n}var _=e=>{let t=m(e),n=e=>g(t,e);return Object.assign(n,t),n},v=(e=>e?_(e):_),y=null,b=()=>y??Date.now(),x=()=>y;function S(e){y=e}var C=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),w=o(((e,t)=>{t.exports=C()}));export{v as a,o as c,S as i,s as l,b as n,m as o,x as r,d as s,w as t,l as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{l as e}from"./jsx-runtime-BFUkm7bt.js";var t=e({HOLD:()=>i,HOLIDAY_SONGS:()=>b,REST:()=>r,SCALES:()=>n,SONGS:()=>y,STEPS_PER_BAR:()=>8,beatAt:()=>h,beatPulse:()=>_,chordTones:()=>u,compileSong:()=>f,degreeMidi:()=>o,firstSongFor:()=>j,formOf:()=>l,holidayTrack:()=>C,isFocusSong:()=>T,midiHz:()=>s,moodOf:()=>w,nextSong:()=>A,noteAge:()=>v,parseLine:()=>a,parseStation:()=>E,passMix:()=>g,stationOrder:()=>D,stationSongs:()=>k,stepAt:()=>m,stepTime:()=>p,trackFor:()=>S}),n={major:[0,2,4,5,7,9,11],minor:[0,2,3,5,7,8,10],dorian:[0,2,3,5,7,9,10],mixolydian:[0,2,4,5,7,9,10]},r=-1e3,i=-1001;function a(e){let t=[];for(let n of e.split(/\s+/))if(n&&n!==`|`){if(n===`.`)t.push(r);else if(n===`-`)t.push(i);else if(n===`x`)t.push(0);else{let e=/^([1-9])([',]*)$/.exec(n);if(!e)throw Error(`bad note "${n}"`);let r=Number(e[1])-1;for(let t of e[2])r+=t===`'`?7:-7;t.push(r)}}return t}function o(e,t,r){let i=n[t],a=Math.floor(r/i.length);return e+a*12+i[r-a*i.length]}var s=e=>440*2**((e-69)/12);function c(e,t){let n=1;for(;e[t+n]===i;)n++;return n}function l(e){let t=e.form??`A`;if(!/^[A-Z]+$/.test(t))throw Error(`${e.id}: bad form "${t}"`);return[...t]}var u=e=>e.ninths?[2,4,6,8]:e.sevenths?[0,2,4,6]:[0,2,4];function d(e,t){let n=t===`A`?e:e.sections?.[t];if(!n)throw Error(`${e.id}: no section ${t}`);let r=t===`A`?``:` in section ${t}`,i=n.chords.length*8,o=a(n.lead);if(o.length!==i)throw Error(`${e.id}: lead${r} has ${o.length} steps, not ${i}`);let s=n.drums??e.drums,c={bass:a(n.bass??e.bass),comp:a(n.comp??e.comp),kick:a(s.kick),snare:a(s.snare),hat:a(s.hat)};for(let[t,n]of Object.entries(c))if(n.length!==8)throw Error(`${e.id}: ${t}${r} has ${n.length} steps, not 8`);return{chords:n.chords,lead:o,...c}}function f(e){let t=l(e),n=new Map(t.map(t=>[t,d(e,t)])),r=u(e),i=[];for(let a of t){let{chords:t,lead:s,bass:l,comp:u,kick:d,snare:f,hat:p}=n.get(a),m={kick:d,snare:f,hat:p};for(let n=0;n<s.length;n++){let a=Math.floor(n/8),d=n%8,f=t[a]-1,p=[];if(s[n]>-1e3&&p.push({voice:`lead`,midi:o(e.root,e.scale,s[n]),steps:c(s,n)}),l[d]>-1e3&&p.push({voice:`bass`,midi:o(e.root-24,e.scale,f+l[d]),steps:c(l,d)}),u[d]>-1e3){let t=c(u,d);for(let n of r)p.push({voice:`chord`,midi:o(e.root-12,e.scale,f+n),steps:t})}for(let e of[`kick`,`snare`,`hat`])m[e][d]===0&&p.push({voice:e,midi:0,steps:1});i.push(p)}}let a=i.length,s=60/e.bpm/2,f=a*e.passes,p=Array.from({length:e.passes},(t,n)=>g(n,e.passes,e.arrangement));return{song:e,stepsPerPass:a,totalSteps:f,stepSec:s,duration:f*s,events:i,mixes:p}}function p(e,t){return(t+(t%2==1?e.song.swing:0))*e.stepSec}function m(e,t){let n=Math.max(0,Math.floor(t/e.stepSec));for(;p(e,n)<t;)n++;return n}var h=(e,t)=>Math.max(0,t)/(e.stepSec*2);function g(e,t,n=`breakdown`){if(n===`build`)return{lead:!0,kick:e>=1,hat:e>=1,snare:e>=2,lift:t>=3&&e===t-1};if(n===`sparse`)return{lead:e>=1,kick:!0,snare:!0,hat:!0,lift:!1};let r=t>=3&&e===Math.floor(t/2);return{lead:!r,kick:!0,snare:!r,hat:!0,lift:!1}}function _(e){let t=e-Math.floor(e),n=Math.max(0,1-t*3);return n*n}function v(e,t,n,r){let i=Math.floor(e),a=i-((i-t)%n+n)%n;if(a<0)return-1;let o=(e-a)/r;return o<1?o:-1}var y=[{id:`coffee-break-bossa`,title:`Coffee Break Bossa`,artist:`The Decaf Trio`,bpm:118,swing:0,root:65,scale:`major`,chords:[1,6,2,5,1,6,2,5],sevenths:!0,lead:`5 - 3 - . 5 3 - | 6 - 1' - . 6 5 - | 4 - 6 - . 4 2 - | 2 - 7, - 5, - . . | 5 - 3 - . 5 1' - | 1' - 6 - . 1' 3' - | 2' - 1' 6 - 4 6 - | 5 - - - . . . .`,bass:`1 - - 5, 1 - - 5,`,comp:`x . . x . . x .`,drums:{kick:`x . . x x . . x`,snare:`. . x . . x . .`,hat:`x x x x x x x x`},sound:{lead:`triangle`,bass:`triangle`,chord:`sine`},passes:5,color:`#ff9f68`},{id:`green-checks-groove`,title:`Green Checks Groove`,artist:`CI & the Pipelines`,bpm:104,swing:.12,root:64,scale:`dorian`,chords:[1,1,4,4,1,1,5,4],lead:`1 . 3 4 . 5 . 3 | . 7 . 5 3 . 1 . | 4 . 6 1' . 6 . 4 | . 3' . 1' 6 . 4 . | 1 . 3 4 . 5 . 3 | 7 . 5 . 3 4 3 1 | 5 . 7 2' . 7 . 5 | 4 . 6 . 3' - 1' .`,bass:`1 . 1' . 1 5 . 7,`,comp:`. x . . . x . x`,drums:{kick:`x . . x . . x .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`square`,bass:`triangle`,chord:`triangle`},passes:5,color:`#06d6a0`},{id:`merge-conflict-mambo`,title:`Merge Conflict Mambo`,artist:`Los Rebasers`,bpm:124,swing:0,root:69,scale:`minor`,chords:[1,4,5,1,1,4,5,1],lead:`5 . 5 . 1' - 7 6 | 4 - 6 . 4 . 3 2 | 5 . 7 . 2' - 7 5 | 1' - - . 5 . 3 . | 3' . 3' . 2' 1' 7 1' | 6 - 4 . 6 . 1' - | 7 - 5 . 7 2' - 7 | 1' - - - . . 5 .`,bass:`1 . . 5 . . 1' .`,comp:`x . x x . x . x`,drums:{kick:`x . . x . . . .`,snare:`x . . x . . x .`,hat:`x . x . x . x .`},sound:{lead:`square`,bass:`triangle`,chord:`triangle`},passes:5,color:`#ef476f`},{id:`stand-up-shuffle`,title:`Stand-up Shuffle`,artist:`Blocker & the Blockers`,bpm:112,swing:.3,root:67,scale:`mixolydian`,chords:[1,1,1,1,4,4,1,1,5,4,1,5],lead:`5 . 5 . 6 5 3 . | 1 - - . . . . . | 5 . 5 . 6 5 7 6 | 5 - - . . 3 4 . | 4 . 4 . 6 4 3 . | 1 - - . . . . . | 5 . 5 . 6 5 3 . | 1 - - . . 3 5 . | 6 . 6 . 5 4 2 . | 5 . 5 . 4 3 1 . | 3 - 2 1 - . . . | 2 - - . 5, - . .`,bass:`1 . 3 . 5 . 6 .`,comp:`. . x . . . x .`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`x . x . x . x .`},sound:{lead:`triangle`,bass:`triangle`,chord:`square`},passes:4,color:`#4cc9f0`},{id:`lo-fi-linting`,title:`Lo-fi Linting`,artist:`Semicolon Sleep`,bpm:78,swing:.2,root:72,scale:`major`,chords:[2,5,1,6,2,5,1,6],sevenths:!0,lead:`. . 4 - 3 - 2 - | 7, - - . . . 2 4 | 3 - - - . . 5 - | 1' - 7 - 6 - . . | . . 6 - 4 - 3 - | 2 - - . 4 - 5 - | 7 - - - 5 - 3 - | 1 - - - . . . .`,bass:`1 - - - . . 5, -`,comp:`x - - - - - - -`,drums:{kick:`x . . . . x x .`,snare:`. . x . . . x .`,hat:`. x . x . x . x`},sound:{lead:`sine`,bass:`triangle`,chord:`triangle`},passes:3,color:`#b8a1ff`,mood:`lofi`},{id:`deploy-on-a-friday`,title:`Deploy on a Friday`,artist:`The Hotfixes`,bpm:124,swing:0,root:69,scale:`minor`,chords:[1,6,7,5,1,6,7,5],lead:`1' . 1' . 7 1' . 3' | 1' - 6 - 1' - 3' - | 2' . 2' . 1' 2' . 4' | 5' - - . 2' - 7 - | 3' . 3' . 2' 1' . 5 | 6 - 1' - 3' - 1' - | 7 - 2' - 4' - 2' - | 5' - - - . . . .`,bass:`1 1' 1 1' 1 1' 1 1'`,comp:`. x . x . x . x`,drums:{kick:`x . x . x . x .`,snare:`. . x . . . x .`,hat:`. x . x . x . x`},sound:{lead:`square`,bass:`sawtooth`,chord:`triangle`},passes:5,color:`#ffd166`},{id:`going-up`,title:`Going Up (Elevator Mix)`,artist:`Floor Seven Strings`,bpm:92,swing:0,root:67,scale:`major`,chords:[1,6,4,5,1,6,2,5],sevenths:!0,lead:`3 - - 2 1 - 5, - | 6, - 1 - 3 - 5 - | 4 - 3 - 4 - 6 - | 5 - - - . . 4 3 | 3 - - 2 1 - 3 - | 5 - - 3 6 - 5 - | 4 - 3 - 2 - 1 - | 2 - - - . . . .`,bass:`1 - - - 5, - - -`,comp:`x - - - x - - -`,drums:{kick:`x . . . x . . .`,snare:`. . . . . . . .`,hat:`x . x . x . x .`},sound:{lead:`sine`,bass:`triangle`,chord:`sine`},passes:4,color:`#8ecae6`},{id:`rubber-duck-polka`,title:`Rubber Duck Polka`,artist:`Quack Overflow`,bpm:138,swing:0,root:70,scale:`major`,chords:[1,1,5,5,5,5,1,1],lead:`1 3 5 3 1' - 5 - | 3 - 5 - 1 - . . | 7, 2 5 2 7 - 5 - | 4 - 2 - 7, - . . | 5 4 2 4 5 - 7 - | 6 - 5 - 4 - 2 - | 1 3 5 1' 3' - 1' - | 1' - . 5 1' - . .`,bass:`1 . 5, . 1 . 5, .`,comp:`. x . x . x . x`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`. . . . . . . .`},sound:{lead:`square`,bass:`triangle`,chord:`triangle`},passes:6,color:`#ffbe0b`},{id:`ship-it`,title:`Ship It (Arena Version)`,artist:`Small PRs`,bpm:132,swing:0,root:64,scale:`major`,chords:[1,5,6,4,1,5,6,4],lead:`5 - 5 - 6 - 5 - | 2' - 1' - 7 - 5 - | 6 - 1' - 3' - 1' - | 1' - - - 6 - 4 - | 5 - 5 - 3' - 2' - | 2' - 1' - 7 - 2' - | 3' - 1' - 6 - 1' - | 1' - - - - - . .`,bass:`1 1 1 1 1 1 1 1`,comp:`x - - - x - - -`,drums:{kick:`x . . . x x . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`square`,bass:`triangle`,chord:`sawtooth`},passes:5,color:`#3a86ff`},{id:`refactor-rain`,title:`Refactor Rain`,artist:`Null & Void`,bpm:80,swing:.18,root:65,scale:`dorian`,chords:[1,4,1,4],ninths:!0,lead:`. . 5 - - 4 3 - | 4 - - - . . . . | . . 3 - 5 - 7 - | 6 - - 5 4 - . .`,bass:`1 - - . . 1 5, -`,comp:`x - - . . x - .`,drums:{kick:`x . . . . x x .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`keys`,bass:`triangle`,chord:`keys`},passes:3,color:`#7aa2c9`,mood:`lofi`,texture:{crackle:!0,warmth:2600,wobble:!0,softDrums:!0},sections:{B:{chords:[3,7,5,4],lead:`. 3 - 5 - 7 - . | 2' - - 1' 7 - . . | . . 5 - 7 - 2' - | 1' - - 7 6 - 4 -`}},form:`AABA`},{id:`hello-world-sunrise`,title:`Hello, World (Sunrise)`,artist:`The First Commit`,bpm:98,swing:0,root:67,scale:`major`,chords:[1,4,6,5],lead:`1 - 3 - 5 - 1' - | 6 - - - 4 - . . | 5 - 3 - 1 - 3 - | 2 - - - - - . .`,bass:`1 - 1 - 5, - 1 -`,comp:`x - x - x - x -`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`triangle`,bass:`triangle`,chord:`keys`},passes:4,color:`#ffb703`,mood:`uplifting`,sections:{B:{chords:[4,5,6,5],lead:`4 - 6 - 1' - 6 - | 5 - 7 - 2' - 7 - | 1' - - 7 6 - 5 - | 5 - - - - - . .`}},form:`AABB`,arrangement:`build`},{id:`stack-trace-study-session`,title:`Stack Trace Study Session`,artist:`The Breakpoints`,bpm:72,swing:.22,root:69,scale:`minor`,chords:[1,6,4,7],ninths:!0,lead:`5 - - - 3 - 1 - | . . 3 - 5 - 6 - | 4 - - - . . 2 3 | 5 - - - . . . .`,bass:`1 - . 5, 1 - . .`,comp:`x - - - . x - -`,drums:{kick:`x . . x . . x .`,snare:`. . x . . . x .`,hat:`. x . x . x . x`},sound:{lead:`keys`,bass:`triangle`,chord:`keys`},passes:3,color:`#c9a27a`,mood:`lofi`,texture:{crackle:!0,warmth:2400,wobble:!0,softDrums:!0},sections:{B:{chords:[4,7,3,6],lead:`. 6 - 5 4 - 3 - | 2 - - - 7, - . . | . . 3 - 5 - 1' - | 7 - - 6 5 - - .`}},form:`AABA`},{id:`deep-work`,title:`Deep Work (Do Not Disturb)`,artist:`Focus Mode`,bpm:64,swing:0,root:64,scale:`major`,chords:[1,4,6,4],sevenths:!0,lead:`. . 5 - - - - - | 6 - - - . . . . | . . 3 - - - 1 - | 2 - - - - - . .`,bass:`1 - - - - - - -`,comp:`x - - - - - - -`,drums:{kick:`. . . . . . . .`,snare:`. . . . . . . .`,hat:`. . . . . . . .`},sound:{lead:`keys`,bass:`sine`,chord:`pad`},passes:3,color:`#94d2bd`,mood:`ambient`,texture:{warmth:2200,wobble:!0},sections:{B:{chords:[2,5,1,1],lead:`. . 4 - - - 6 - | 5 - - - - - . . | . . 3 - - 2 1 - | 1 - - - - - - -`}},form:`AABA`,arrangement:`sparse`},{id:`async-afternoon`,title:`Async Afternoon`,artist:`The Promises`,bpm:84,swing:.15,root:70,scale:`major`,chords:[2,5,1,1],sevenths:!0,lead:`. . 4 - 6 - 1' - | 7 - - 6 - - 4 - | 3 - - - . . . . | . . 5 - 3 - 2 -`,bass:`1 - - 5, . 1 - .`,comp:`. . x - . . x -`,drums:{kick:`x . . . x x . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`keys`,bass:`triangle`,chord:`keys`},passes:3,color:`#e5989b`,mood:`lofi`,texture:{crackle:!0,warmth:2900,wobble:!0,softDrums:!0},sections:{B:{chords:[4,3,2,5],lead:`1' - - - 6 - 4 - | 5 - - - . 3 5 - | 6 - - 5 4 - . . | 2 - - - 5, - . .`}},form:`AABA`},{id:`it-compiles`,title:`It Compiles!`,artist:`Zero Warnings`,bpm:104,swing:0,root:65,scale:`major`,chords:[1,6,2,5],lead:`3 - 5 - 1' - - 7 | 6 - - - . . 5 6 | 4 - - 2 - 4 6 - | 5 - - - . . . .`,bass:`1 . 1 1 5, . 1 .`,comp:`x - . x - . x -`,drums:{kick:`x . . x x . . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`triangle`,bass:`triangle`,chord:`keys`},passes:4,color:`#90be6d`,mood:`uplifting`,sections:{B:{chords:[4,4,1,1,4,4,5,5],lead:`4 . 6 . 1' . 6 . | 1' - - - 2' - 1' - | 3' - - - 2' - 1' - | 5 - - - . . . . | 4 . 6 . 1' . 2' . | 3' - - 2' - - 1' - | 2' - - - 7 - 5 - | 2' - - - - - . .`}},form:`AAB`,arrangement:`build`},{id:`tabs-and-spaces`,title:`Tabs & Spaces`,artist:`Whitespace Club`,bpm:86,swing:.25,root:62,scale:`dorian`,chords:[1,4,1,4],ninths:!0,lead:`1' . 7 . 5 - . . | . . 4 - 5 - 6 - | 5 - - - 3 - 1 - | 2 - - - . . . .`,bass:`1 - . 5, - . 1 .`,comp:`x - . . x - . .`,drums:{kick:`x . . x . . x .`,snare:`. . x . . . x .`,hat:`x . x x x . x x`},sound:{lead:`keys`,bass:`triangle`,chord:`keys`},passes:3,color:`#83c5be`,mood:`lofi`,texture:{crackle:!0,warmth:2800,wobble:!0,softDrums:!0},sections:{B:{chords:[3,4,5,4],lead:`. . 3 - 5 - 7 - | 6 - - - 4 - 2 - | 5 - - 7 - 1' - . | 4 - - - . . 7, -`}},form:`AABA`},{id:`background-process`,title:`Background Process`,artist:`Daemon & the Threads`,bpm:70,swing:0,root:62,scale:`dorian`,chords:[1,4,1,4],sevenths:!0,lead:`5 - - - - - . . | . . . . 6 - 5 - | 3 - - - - - . . | . . 1 - 2 - - -`,bass:`1 - - - - - 5, -`,comp:`x - - - - - - -`,drums:{kick:`x . . . . . . .`,snare:`. . . . . . . .`,hat:`. . . . . . . .`},sound:{lead:`keys`,bass:`sine`,chord:`pad`},passes:3,color:`#a2d2ff`,mood:`ambient`,texture:{warmth:2e3,wobble:!0,softDrums:!0},sections:{B:{chords:[3,7,5,4],lead:`. . 3 - 5 - - - | 7 - - - - - . . | . . 1' - 7 - 5 - | 4 - - - - - - -`}},form:`AABA`,arrangement:`sparse`},{id:`pair-programming-by-the-window`,title:`Pair Programming by the Window`,artist:`Two Keyboards`,bpm:76,swing:.2,root:65,scale:`major`,chords:[4,3,2,1],sevenths:!0,lead:`. . 6 - 5 - 4 - | 3 - - - . . 5 - | 4 - - 3 2 - . . | 1 - - - . . . .`,bass:`1 - - - 5, - - .`,comp:`x - - - x - . .`,drums:{kick:`x . . . . . x .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`keys`,bass:`triangle`,chord:`keys`},passes:3,color:`#b5838d`,mood:`lofi`,texture:{crackle:!0,warmth:2500,wobble:!0,softDrums:!0},sections:{B:{chords:[6,2,5,1],lead:`. 1' - 7 6 - 5 - | 4 - - - 6 - 1' - | 7 - - - 5 - 2 - | 3 - - - . . . .`}},form:`AABA`},{id:`full-coverage`,title:`100% Coverage`,artist:`The Test Suite`,bpm:108,swing:0,root:64,scale:`major`,chords:[4,5,3,6],lead:`4 - 6 - 1' - 6 - | 5 - 7 - 2' - - . | 3 - 5 - 7 - 5 - | 6 - - - 1' - 3' -`,bass:`1 . 1 . 1 . 5, .`,comp:`x - - x - - x -`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`. x . x . x . x`},sound:{lead:`triangle`,bass:`triangle`,chord:`keys`},passes:4,color:`#f9c74f`,mood:`uplifting`,sections:{B:{chords:[2,5,1,1],lead:`2' - - 1' 6 - 4 - | 5 - - - 7 - 2' - | 3' - - - 2' - 1' - | 1' - - - - - . .`}},form:`AABA`,arrangement:`build`},{id:`late-night-code-review`,title:`Late Night Code Review`,artist:`LGTM`,bpm:70,swing:.2,root:67,scale:`minor`,chords:[1,4,7,3],ninths:!0,lead:`5 - - - . 4 3 - | 4 - - - . . . . | . . 2 - 4 - 6 - | 5 - - - 3 - . .`,bass:`1 - - - 1 . 5, .`,comp:`x - - - - - x -`,drums:{kick:`x . . . . x . .`,snare:`. . x . . . x .`,hat:`x . x . x . x x`},sound:{lead:`keys`,bass:`triangle`,chord:`keys`},passes:3,color:`#8d86c9`,mood:`lofi`,texture:{crackle:!0,warmth:2400,wobble:!0,softDrums:!0},sections:{B:{chords:[6,4,2,7],lead:`. . 3 - 5 - 7 - | 1' - - 7 6 - . . | . . 4 - 6 - 1' - | 6 - - - 4 - 2 -`}},form:`AABA`}],b=[{id:`haunted-hotfix`,title:`Haunted Hotfix`,artist:`The Flaky Phantoms`,bpm:108,swing:.18,root:62,scale:`minor`,chords:[1,1,6,5,1,1,4,5],lead:`1 . 3 . 5 . 6 5 | 4 - 3 - 2 . 1 . | 6, . 1 . 3 . 4 3 | 2 - 7, - 5, - . . | 1 . 3 . 5 . 1' 7 | 6 - 5 - 4 . 3 . | 4 . 6 . 1' . 6 4 | 5 - - - 5, - . .`,bass:`1 . 5, . 1 . 5, .`,comp:`. x . x . x . x`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`x . x . x . x .`},sound:{lead:`square`,bass:`triangle`,chord:`triangle`},passes:4,color:`#ff7b00`},{id:`monster-merge`,title:`Monster Merge`,artist:`Boo-lean Logic`,bpm:128,swing:0,root:69,scale:`minor`,chords:[1,7,6,5,1,7,6,5],lead:`1 1' 7 5 . 3 . 5 | 7 - 5 - 3 - 2 . | 6, 6 5 3 . 1 . 3 | 5 - 7, - 5, - . . | 1 1' 7 5 . 3 . 5 | 7 - 2' - 1' - 7 . | 6 . 5 . 4 . 3 . | 1 - - - . . 5, .`,bass:`1 . 1' . 1 . 1' .`,comp:`x . . x . . x .`,drums:{kick:`x . . x x . . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`square`,bass:`sawtooth`,chord:`triangle`},passes:4,color:`#9d4edd`},{id:`snowed-in-standup`,title:`Snowed-in Standup`,artist:`The Merry Mergers`,bpm:120,swing:.25,root:67,scale:`major`,chords:[1,4,1,5,1,4,5,1],lead:`3 . 3 . 5 - 3 . | 4 . 6 . 1' - 6 . | 5 . 3 . 1 . 3 5 | 2 - - . 5, - . . | 3 . 3 . 5 - 1' . | 6 . 4 . 6 - 1' 6 | 5 . 7, . 2 . 4 . | 3 - 1 - - . . .`,bass:`1 . 5, . 1 . 5, .`,comp:`. x . x . x . x`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`triangle`,bass:`triangle`,chord:`sine`},passes:4,color:`#e63946`},{id:`cocoa-and-code`,title:`Cocoa & Code`,artist:`Marshmallow Pipeline`,bpm:84,swing:.2,root:72,scale:`major`,chords:[4,3,2,1,4,3,2,5],sevenths:!0,lead:`. . 3 - 5 - 6 - | 5 - - . . 3 2 - | 1 - 2 - 3 - 5 - | 3 - - - . . . . | . . 3 - 5 - 1' - | 7 - 6 - 5 - . . | 4 - 3 - 2 - 6, - | 7, - - - . . . .`,bass:`1 - - - . . 5, -`,comp:`x - - - - - - -`,drums:{kick:`x . . . . x . .`,snare:`. . x . . . x .`,hat:`. x . x . x . x`},sound:{lead:`sine`,bass:`triangle`,chord:`keys`},passes:3,color:`#a47148`,mood:`lofi`,texture:{crackle:!0,warmth:2600,wobble:!0,softDrums:!0}},{id:`countdown-commit`,title:`Countdown Commit`,artist:`The Midnight Deploys`,bpm:128,swing:0,root:64,scale:`major`,chords:[1,5,6,4,1,5,4,5],lead:`1 . 1 . 3 . 5 . | 5 - 4 - 3 - 2 - | 1 . 1 . 3 . 6 . | 6 - 5 - 4 - . . | 5 . 5 . 1' . 7 6 | 5 - 7 - 2' - . . | 1' . 6 . 4 . 6 . | 5 - - - 1' - . .`,bass:`1 1 1 1 1 1 1 1`,comp:`x . x . x . x .`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`square`,bass:`triangle`,chord:`sawtooth`},passes:4,color:`#ffd23f`},{id:`pair-programming`,title:`Pair Programming (Love Song)`,artist:`The Rubber Ducks`,bpm:96,swing:.12,root:65,scale:`major`,chords:[1,6,2,5,1,6,4,5],sevenths:!0,lead:`5 - 3 - 1 - 3 - | 6 - - 5 3 - . . | 4 - 2 - 6, - 2 - | 5 - - - . . . . | 5 - 3 - 1' - 7 - | 6 - - 5 3 - 1 - | 4 - 6 - 1' - 6 - | 5 - - - . . 4 3`,bass:`1 - - 5, 1 - - 5,`,comp:`x . . x . . x .`,drums:{kick:`x . . x x . . .`,snare:`. . x . . . x .`,hat:`x . x . x . x .`},sound:{lead:`triangle`,bass:`triangle`,chord:`sine`},passes:4,color:`#ff4d6d`},{id:`egg-hunt-hop`,title:`Egg Hunt Hop`,artist:`Bunny & the Breakpoints`,bpm:132,swing:0,root:72,scale:`major`,chords:[1,1,4,1,5,4,1,5],lead:`1 3 5 3 1 . 5, . | 1 3 5 1' 5 - . . | 4 6 1' 6 4 . 2 . | 3 - 5 - 1 - . . | 2 4 5 7 5 . 4 . | 4 6 1' 6 4 . 3 . | 5 3 1 3 5 - 1' - | 7 - 5 - 2 - . .`,bass:`1 . 5, . 1 . 5, .`,comp:`. x . x . x . x`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`. . x . . . x .`},sound:{lead:`square`,bass:`triangle`,chord:`triangle`},passes:5,color:`#a0c4ff`},{id:`another-year-of-uptime`,title:`Another Year of Uptime`,artist:`The 99.9s`,bpm:116,swing:0,root:67,scale:`major`,chords:[1,4,5,1,6,4,5,1],lead:`5 . 5 . 6 . 5 . | 1' - 6 - 4 . . . | 5 . 7 . 2' . 7 . | 1' - - - . . 5 . | 6 . 1' . 3' . 1' . | 6 - 4 - 1' - 6 . | 5 . 7 . 2' - 7 5 | 1' - - - - . . .`,bass:`1 . 5, . 1 . 5, .`,comp:`x . . x . . x .`,drums:{kick:`x . . . x . . .`,snare:`. . x . . . x .`,hat:`x x x x x x x x`},sound:{lead:`square`,bass:`triangle`,chord:`triangle`},passes:4,color:`#ff5d8f`}],x=new Map;function S(e){let t=y[(e%y.length+y.length)%y.length],n=x.get(t.id);return n||(n=f(t),x.set(t.id,n)),n}function C(e,t){let n=e.map(e=>b.find(t=>t.id===e)).filter(e=>!!e);if(!n.length)return null;let r=n[(t%n.length+n.length)%n.length],i=x.get(r.id);return i||(i=f(r),x.set(r.id,i)),i}var w=e=>e.mood??`lively`,T=e=>w(e)===`lofi`||w(e)===`ambient`,E=e=>e===`focus`?`focus`:`all`;function D(e,t){let n=[],r=[];if(e.forEach((e,t)=>(T(e)?n:r).push(t)),t===`focus`)return n;let i=[],a=0,o=0;for(;a<n.length||o<r.length;)(a<n.length?(a+.5)/n.length:1/0)<(o<r.length?(o+.5)/r.length:1/0)?i.push(n[a++]):i.push(r[o++]);let s=Math.max(0,i.indexOf(0));return[...i.slice(s),...i.slice(0,s)]}var O={all:D(y,`all`),focus:D(y,`focus`)},k=e=>O[e];function A(e,t){let n=O[t];if(n.length===0)return e;let r=n.indexOf(e);if(r>=0)return n[(r+1)%n.length];let i=O.all,a=Math.max(0,i.indexOf(e));for(let e=1;e<=i.length;e++){let t=i[(a+e)%i.length];if(n.includes(t))return t}return n[0]}function j(e,t=`all`){if(t===`all`)return(e%y.length+y.length)%y.length;let n=O.focus;return n[(e%n.length+n.length)%n.length]}export{C as a,s as c,v as d,E as f,S as g,p as h,j as i,w as l,m,h as n,T as o,k as p,_ as r,t as s,y as t,A as u};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{bt as e,ct as t,i as n,j as r,rt as i,st as a}from"./bloomMarks-DariC6lY.js";import{ln as o}from"./Office-BBnd6tyn.js";var s=new r(new Uint8Array([110,190,255]),3,1,e);s.minFilter=t,s.magFilter=t,s.generateMipmaps=!1,s.needsUpdate=!0;var c=.4;function l(e){return e.onBeforeCompile=e=>{e.uniforms.uHaze=o.uHaze,e.uniforms.uHazeRange=o.uHazeRange,e.vertexShader=`varying float vHazeDist;\n${e.vertexShader.replace(`#include <project_vertex>`,`#include <project_vertex>
|
|
2
|
+
vHazeDist = length(mvPosition.xyz);`)}`,e.fragmentShader=`uniform vec3 uHaze;\nuniform vec2 uHazeRange;\nvarying float vHazeDist;\n${e.fragmentShader.replace(`#include <colorspace_fragment>`,`float hz = clamp((vHazeDist - uHazeRange.x) / (uHazeRange.y - uHazeRange.x), 0.0, 1.0);\n gl_FragColor.rgb = mix(gl_FragColor.rgb, uHaze, hz * (2.0 - hz) * ${c.toFixed(2)});\n #include <colorspace_fragment>`)}`},e}var u=new Map;function d(e,t={}){let n=`t|${e}|${t.emissive??``}|${t.emissiveIntensity??``}|${t.opacity??``}|${t.side??``}`,r=u.get(n);return r||(r=l(new a({color:e,gradientMap:s,fog:!1,emissive:t.emissive??`#000000`,emissiveIntensity:t.emissiveIntensity??1,transparent:t.opacity!==void 0&&t.opacity<1,opacity:t.opacity??1,side:t.side??0})),u.set(n,r)),r}function f(e,t={}){let r=`g|${e}|${t.opacity??``}|${+!!t.add}`,a=u.get(r);return a||(a=n(new i({color:e,fog:!1,toneMapped:!1,transparent:t.opacity!==void 0||!!t.add,opacity:t.opacity??1,depthWrite:!(t.opacity!==void 0||t.add),blending:t.add?2:1})),u.set(r,a)),a}var p=e=>Math.min(1,Math.max(0,e)),m=e=>{let t=p(e);return t*t*(3-2*t)},h=(e,t,n)=>e+(t-e)*n,g=(e,t,n)=>m((e-t)/(n-t)),_=(e,t,n=3)=>Math.min(p(e/n),p((t-e)/n)),v=e=>e===`west`?-1:1,y=e=>e+1.65;export{h as a,g as c,_ as i,d as l,y as n,v as o,f as r,m as s,p as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./jsx-runtime-BFUkm7bt.js";import{Fi as t,Ki as n,Mi as r,Ni as i,Pi as a,Ri as o,Vi as s,Zi as c,ha as l,hs as u,ms as d,p as f,wi as p,zi as ee}from"./store-FA83kfnc.js";import{c as te,u as ne}from"./index-B6qvKFYN.js";import{c as re,g as ie,h as ae,m as oe,t as se}from"./jukeboxSongs-CjbAzAeb.js";var m=[{id:`forward`,label:`Walk forward`,group:`Moving`,scope:`move`,keys:[`KeyW`,`ArrowUp`]},{id:`back`,label:`Walk back`,group:`Moving`,scope:`move`,keys:[`KeyS`,`ArrowDown`]},{id:`left`,label:`Step left`,group:`Moving`,scope:`move`,keys:[`KeyA`,`ArrowLeft`]},{id:`right`,label:`Step right`,group:`Moving`,scope:`move`,keys:[`KeyD`,`ArrowRight`]},{id:`run`,label:`Run (hold)`,group:`Moving`,scope:`move`,keys:[`ShiftLeft`,`ShiftRight`]},{id:`interact`,label:`Use, pick up, sip`,group:`Hands`,scope:`walk`,keys:[`KeyE`]},{id:`throw`,label:`Throw or fire (hold to charge)`,group:`Hands`,scope:`walk`,keys:[`KeyF`]},{id:`drop`,label:`Drop`,group:`Hands`,scope:`walk`,keys:[`KeyG`]},{id:`reload`,label:`Reload a blaster`,group:`Hands`,scope:`walk`,keys:[`KeyR`]},{id:`volumeDown`,label:`Jukebox softer`,group:`Hands`,scope:`walk`,keys:[`Minus`,`NumpadSubtract`]},{id:`volumeUp`,label:`Jukebox louder`,group:`Hands`,scope:`walk`,keys:[`Equal`,`NumpadAdd`]},{id:`phone`,label:`Phone`,group:`Office`,scope:`global`,keys:[`KeyP`]},{id:`help`,label:`Help`,group:`Office`,scope:`global`,keys:[`KeyH`]},{id:`mute`,label:`Mute`,group:`Office`,scope:`global`,keys:[`KeyM`]},{id:`workers`,label:`Who's working list`,group:`Office`,scope:`global`,keys:[`KeyL`]},{id:`overview`,label:`Overview (twice: the building)`,group:`Overview`,scope:`global`,keys:[`Tab`]},{id:`rotateLeft`,label:`Turn the overview left`,group:`Overview`,scope:`overview`,keys:[`KeyQ`]},{id:`rotateRight`,label:`Turn the overview right`,group:`Overview`,scope:`overview`,keys:[`KeyE`]},{id:`talk`,label:`Hold to talk (in a message box)`,group:`Office`,scope:`panel`,keys:[`KeyV`]},{id:`emote`,label:`Emote wheel (hold, point, let go)`,group:`Office`,scope:`walk`,keys:[`KeyT`]},{id:`ping`,label:`Ping where you aim (or middle-click)`,group:`Office`,scope:`walk`,keys:[`KeyX`]},{id:`photo`,label:`Photo mode`,group:`Office`,scope:`global`,keys:[`KeyK`]},{id:`saveReplay`,label:`Save the last 15 s (instant replay)`,group:`Office`,scope:`global`,keys:[`KeyI`]}],ce=m.map(e=>e.id),le=new Map(m.map(e=>[e.id,e])),ue=e=>le.get(e),de=()=>Object.fromEntries(m.map(e=>[e.id,[...e.keys]])),fe=new Set([`Escape`,`MetaLeft`,`MetaRight`,`OSLeft`,`OSRight`,`ContextMenu`,`F5`,`F11`,`F12`,`PrintScreen`]),pe=e=>typeof e==`string`&&/^[A-Za-z][A-Za-z0-9]{0,31}$/.test(e)&&!fe.has(e);function me(e,t){return e===t||e===`global`||t===`global`?!0:e===`panel`||t===`panel`?!1:e===`move`||t===`move`}function he(e,t,n){return m.filter(r=>n.includes(r.scope)&&e[r.id].includes(t)).map(e=>e.id)}var ge=(e,t,n)=>e[t].includes(n);function _e(e,t,n){let r=e[t];for(let e=0;e<r.length;e++)if(n.has(r[e]))return!0;return!1}var ve={ArrowUp:`↑`,ArrowDown:`↓`,ArrowLeft:`←`,ArrowRight:`→`,ShiftLeft:`Shift`,ShiftRight:`Shift`,ControlLeft:`Ctrl`,ControlRight:`Ctrl`,AltLeft:`Alt`,AltRight:`Alt`,Space:`Space`,Tab:`Tab`,Enter:`Enter`,NumpadEnter:`Num Enter`,Backspace:`Backspace`,CapsLock:`Caps Lock`,Minus:`−`,Equal:`+`,NumpadSubtract:`Num −`,NumpadAdd:`Num +`,NumpadMultiply:`Num *`,NumpadDivide:`Num /`,NumpadDecimal:`Num .`,BracketLeft:`[`,BracketRight:`]`,Semicolon:`;`,Quote:`'`,Comma:`,`,Period:`.`,Slash:`/`,Backslash:`\\`,Backquote:"`",IntlBackslash:`\\`,Insert:`Ins`,Delete:`Del`,Home:`Home`,End:`End`,PageUp:`PgUp`,PageDown:`PgDn`};function ye(e){let t=/^Key([A-Z])$/.exec(e);if(t)return t[1];let n=/^Digit(\d)$/.exec(e);if(n)return n[1];let r=/^Numpad(\d)$/.exec(e);return r?`Num ${r[1]}`:ve[e]??e}function be(e){let t=/^(Shift|Control|Alt)(Left|Right)$/.exec(e);return t?`${t[2]} ${ye(e)}`:ye(e)}function xe(e){let t=[];for(let n=0;n<m.length;n++)for(let r=n+1;r<m.length;r++){let i=m[n],a=m[r];if(me(i.scope,a.scope))for(let n of e[i.id])e[a.id].includes(n)&&t.push({code:n,actions:[i.id,a.id]})}return t}function Se(e,t,n,r){if(!pe(r)||n<0||n>=2)return null;let i=Object.fromEntries(ce.map(t=>[t,[...e[t]]])),a=i[t],o=a[n]??null;if(o===r)return{bindings:i,displaced:null};a.includes(r)&&a.splice(a.indexOf(r),1),n>=a.length?a.push(r):a[n]=r;let s=null,c=ue(t).scope;for(let e of m){if(e.id===t||!me(c,e.scope))continue;let n=i[e.id],a=n.indexOf(r);if(a<0)continue;let l=o&&!n.includes(o)&&!Ce(i,e.id,o)?o:null;l?n[a]=l:n.splice(a,1),s??={action:e.id,key:l}}return{bindings:i,displaced:s}}function Ce(e,t,n){let r=ue(t).scope;return m.some(i=>i.id!==t&&me(r,i.scope)&&e[i.id].includes(n))}function we(e,t,n){let r=Object.fromEntries(ce.map(t=>[t,[...e[t]]]));return r[t].splice(n,1),r}var Te=.25,Ee=()=>({bindings:de(),padSensitivity:1});function De(e){let t=Ee();if(!e||typeof e!=`object`)return t;let n=e;if(n.bindings&&typeof n.bindings==`object`){let e=n.bindings;for(let n of ce){let r=e[n];Array.isArray(r)&&r.every(pe)&&(t.bindings[n]=[...new Set(r)].slice(0,2))}}let r=n.padSensitivity;return typeof r==`number`&&Number.isFinite(r)&&(t.padSensitivity=Math.min(3,Math.max(Te,r))),t}var Oe=`cubefarm:controls`;function ke(){try{return De(JSON.parse(localStorage.getItem(Oe)??`null`))}catch{return Ee()}}var h=e(()=>ke());function Ae(e){h.setState(e);let{bindings:t,padSensitivity:n}=h.getState();try{localStorage.setItem(Oe,JSON.stringify({bindings:t,padSensitivity:n}))}catch{}}var g=()=>h.getState().bindings,je=(e,t)=>h.getState().bindings[e].includes(t);function Me(e,t,n){let r=Se(g(),e,t,n);return r&&Ae({bindings:r.bindings}),r}var Ne=(e,t)=>Ae({bindings:we(g(),e,t)}),Pe=e=>Ae({padSensitivity:Math.min(3,Math.max(Te,e))}),Fe=()=>Ae(Ee()),Ie=e=>e[0]?ye(e[0]):`—`,Le=e=>Ie(g()[e]),Re=e=>h(t=>Ie(t.bindings[e])),ze=5.3,Be=.5,Ve=.05,He=(e,t)=>-Math.log(1-Math.min(Math.max(t,0),.999))/e;function Ue(e,t){let n=[];for(let r=He(7,t());r<e;r+=He(7,t()))n.push({at:r,size:.12+.3*t(),len:6e-4+.0012*t()});for(let r=He(Be,t());r<e;r+=He(Be,t()))n.push({at:r,size:.6+.4*t(),len:.0018+.0025*t()});n.sort((e,t)=>e.at-t.at);let r=[];for(let e of n){let t=r[r.length-1];!t||e.at-t.at>=.015?r.push(e):e.size>t.size&&(r[r.length-1]=e)}return r.filter(t=>t.at+t.len<e)}function We(e,t,n){let r=0,i=0;for(let t=0;t<e.length;t++){let a=n()*2-1;i=.97*(i+a-r),r=a,e[t]=Ve*i}let a=Ue(e.length/t,n);for(let r of a){let i=Math.floor(r.at*t),a=Math.max(2,Math.round(r.len*t)),o=n()<.5?-1:1;for(let t=0;t<a&&i+t<e.length;t++)e[i+t]+=o*r.size*Math.exp(-4*t/a)*(t%2==0?1:-.6)}for(let t=0;t<e.length;t++)e[t]=Math.max(-1,Math.min(1,e[t]));return a}var Ge={hz:.45,depth:.0016,delay:.006},Ke=[{gain:.7,ref:1.5,rolloff:2,reach:14},{gain:1.2,ref:1.5,rolloff:1.6,reach:16},{gain:1.8,ref:2,rolloff:1.1,reach:20},{gain:2.4,ref:2.5,rolloff:.7,reach:26},{gain:3,ref:3,rolloff:.45,reach:34},{gain:3.6,ref:4,rolloff:.25,reach:46}],qe=Ke.length;function Je(e){let t=typeof e==`number`?e:typeof e==`string`&&e.trim()!==``?Number(e):NaN;return Number.isFinite(t)?Math.max(1,Math.min(qe,Math.round(t))):3}var _=e=>Ke[Je(e)-1];function Ye(e,t){let{ref:n,rolloff:r,reach:i}=_(e);return n/(n+r*(Math.min(Math.max(t,n),i)-n))}function Xe(e,t){return Math.max(0,Math.min(1,(_(e).reach-t)/3))}var Ze=10**(-10/20),Qe=.03,$e=.4,et=2.5,tt=e=>Math.min(Math.max(0,e),et),nt=50,rt=.2,it=.1,at=1.2,ot=.16,st=.075,ct={sine:1,triangle:.9,square:.4,sawtooth:.45,custom:.5},lt=5200,ut=.06,v=null,dt=0,ft=null,y={x:0,y:0,z:0},b=0,x=null,S=null,pt=null,C=null,w=null,T={nodes:0},mt=!1,E=null,D=3,ht={level:0,ducked:!1},O=null,k=0,A=0,gt=new Set;function _t(e,t,n){Tt(),v=e,dt=performance.now()+it*1e3,ft=n,y.x=t.x,y.y=t.y,y.z=t.z,b=0,E=null,pt=setInterval(At,nt),At()}function vt(e){e!==mt&&(mt=e,At())}function yt(e){let t=Je(e);t!==D&&(D=t,S&&(Lt(S.bus,ot*_(t).gain),Mt(S.panner)),At())}var bt=()=>A>0||O!==null&&O.currentTime<k;function xt(){A++,Ct(0);let e=!0;return()=>{e&&(e=!1,A--,O&&(k=Math.max(k,O.currentTime)),Ct(0))}}ee((e,t,n)=>{O=e,k=Math.max(k,t+tt(n-t)),Ct(t)});function St(e){return gt.add(e),wt(e,0),()=>void gt.delete(e)}function Ct(e){S&&wt(S.duck,e);for(let t of gt)wt(t,e)}function wt(e,t){let n=e.gain,r=e.context;try{let e=Math.max(r.currentTime,t);n.cancelScheduledValues(e),(A>0||O===r&&k>e)&&n.setTargetAtTime(Ze,e,Qe),A===0&&n.setTargetAtTime(1,O===r?Math.max(e,k):e,$e)}catch{}}function Tt(){pt&&clearInterval(pt),pt=null,v=null,ft=null,x=null,It(S),S=null}function Et(){return v?(performance.now()-dt)/1e3:null}var Dt=()=>v,Ot=()=>({chain:S?.nodes??0,notes:T.nodes,crackle:S?.crackle??!1});function kt(){return!v||mt||document.hidden?0:Xe(D,l(t(),y))}function At(){let e=v;if(!e)return;let n=(performance.now()-dt)/1e3;if(n>=e.duration+at){let e=ft;Tt(),e?.();return}let r=l(t(),y),a=!mt&&!document.hidden&&Xe(D,r)>0?i(`music`):null;if(!a){b=Math.max(b,oe(e,n)),It(S),S=null,(E!==!1||ht.level!==D)&&jt(e,!1);return}try{let t=a.context;(!S||S.bus.context!==t)&&(S=Nt(t,a),Ct(0));let i=o(y,r);Lt(S.edge,Xe(D,r)*(i?.gain??1));let s=Math.min(S.toneHz,i?.cutoff??1/0);s!==S.sentHz&&Rt(t,S.tone.frequency,S.sentHz=s,.15),(x===null||Math.abs(t.currentTime-n-x)>.1)&&(x=t.currentTime-n,b=Math.max(b,oe(e,n)));let c=b;for(;b<e.totalSteps&&ae(e,b)<=n+rt;b++)zt(t,S,e,b,ae(e,b)+x);(b>c&&E!==!0||E&&(ht.level!==D||ht.ducked!==bt()))&&jt(e,!0)}catch{}}function jt(e,t){E=t;let n=bt();ht={level:D,ducked:n};let r=D,i=s(`jukebox:${e.song.id}`,{group:`music`,pos:y,peak:st*_(r).gain*(n?Ze:1),played:t,falloff:e=>Ye(r,e)*Xe(r,e)});i.level=r,i.ducked=n,i.crackle=t&&S?.crackle===!0,o(y)&&(i.occluded=!0)}function Mt(e){let{ref:t,rolloff:n,reach:r}=_(D);e.refDistance=t,e.rolloffFactor=n,e.maxDistance=r}function Nt(e,t){It(S);let n=Pt(e,v.song,ot*_(D).gain),r=e.createGain(),i=e.createGain();i.gain.value=0;let a=p(e,y);Mt(a),n.tone.connect(r).connect(i).connect(a).connect(t);let o=n.tone.frequency.value;return{...n,nodes:n.nodes+3,toneHz:o,sentHz:o,duck:r,edge:i,panner:a}}function Pt(e,t,n){let r=t.texture,i=e.createGain();i.gain.value=n;let a=e.createBiquadFilter();a.type=`lowpass`,a.frequency.value=Math.min(lt,r?.warmth??lt),a.Q.value=.5,i.connect(a);let o={bus:i,keys:i,tone:a,sources:[],nodes:2,crackle:!1};if(r?.wobble){let t=e.createDelay(.05);t.delayTime.value=Ge.delay;let n=e.createOscillator();n.frequency.value=Ge.hz;let r=e.createGain();r.gain.value=Ge.depth,n.connect(r).connect(t.delayTime),t.connect(i),n.start(),o.keys=t,o.sources.push(n),o.nodes+=3}if(r?.crackle){let t=e.createBufferSource();t.buffer=Ft(e),t.loop=!0;let n=e.createGain();n.gain.value=ut,t.connect(n).connect(i),t.start(e.currentTime,Math.random()*ze),o.sources.push(t),o.nodes+=2,o.crackle=!0}return o}function Ft(e){return(!w||w.sampleRate!==e.sampleRate)&&(w=e.createBuffer(1,Math.round(e.sampleRate*ze),e.sampleRate),We(w.getChannelData(0),e.sampleRate,Math.random)),w}function It(e){e&&(Lt(e.bus,0),setTimeout(()=>{for(let t of e.sources)try{t.stop()}catch{}try{e.panner.disconnect()}catch{}},600))}function Lt(e,t){Rt(e.context,e.gain,Math.max(0,t),.05)}function Rt(e,t,n,r){try{let i=e.currentTime;t.cancelScheduledValues(i),t.setTargetAtTime(n,i,r)}catch{}}function zt(e,t,n,r,i){if(i<e.currentTime)return;let a=n.mixes[Math.floor(r/n.stepsPerPass)],{sound:o,texture:s}=n.song,c=t.bus,l=s?.softDrums===!0;for(let s of n.events[r%n.stepsPerPass]){let r=s.steps*n.stepSec;switch(s.voice){case`lead`:a.lead&&Bt(e,t,o.lead,s.midi,i,r,`lead`,1),a.lead&&a.lift&&Bt(e,t,o.lead,s.midi+12,i,r,`lead`,.2);break;case`bass`:Vt(e,c,o.bass,s.midi,i,r,.16,.008,.7);break;case`chord`:Bt(e,t,o.chord,s.midi,i,r,s.steps>=4?`long chord`:`chord`,1);break;case`kick`:a.kick&&(l?Gt:Wt)(e,c,i);break;case`snare`:a.snare&&(l?qt:Kt)(e,c,i);break;case`hat`:a.hat&&Jt(e,c,i,l?.03:.035,l?.022:.035,l?`bandpass`:`highpass`,l?5200:7500)}}}function Bt(e,t,n,r,i,a,o,s){let c=o===`lead`;n===`keys`?Ht(e,t.keys,r,i,a,(c?.09:.022)*s):n===`pad`?Ut(e,t.keys,r,i,a,(c?.08:.04)*s):c?Vt(e,t.bus,n,r,i,a,.13*s,.012,.55):Vt(e,t.bus,n,r,i,a,.045*s,o===`long chord`?.12:.015,.5)}function j(e,t,n){e.context instanceof AudioContext&&(n.nodes+=t,e.onended=()=>{n.nodes-=t})}function Vt(e,t,n,r,i,a,o,s,c,l=T){let u=e.createOscillator(),d=e.createGain();u.type=n,u.frequency.value=re(r);let f=o*ct[n],p=i+Math.max(s+.03,a*.92);d.gain.setValueAtTime(0,i),d.gain.linearRampToValueAtTime(f,i+s),d.gain.setTargetAtTime(f*c,i+s,.12),d.gain.setTargetAtTime(0,p,.03),u.connect(d).connect(t),u.start(i),u.stop(p+.2),j(u,2,l)}function Ht(e,t,n,r,i,a,o=T){let s=re(n),c=e.createOscillator(),l=e.createOscillator(),u=e.createGain(),d=e.createGain();c.frequency.value=s,l.frequency.value=s,u.gain.setValueAtTime(s*1.6,r),u.gain.setTargetAtTime(s*.2,r,.15);let f=r+Math.max(.1,i*.95);d.gain.setValueAtTime(0,r),d.gain.linearRampToValueAtTime(a,r+.005),d.gain.setTargetAtTime(a*.3,r+.005,.45),d.gain.setTargetAtTime(0,f,.09),l.connect(u).connect(c.frequency),c.connect(d).connect(t),c.start(r),l.start(r),c.stop(f+.5),l.stop(f+.5),j(c,4,o)}function Ut(e,t,n,r,i,a,o=T){let s=re(n),c=a/2,l=e.createGain(),u=e.createOscillator(),d=e.createOscillator();u.type=d.type=`triangle`,u.frequency.value=d.frequency.value=s,u.detune.value=-6,d.detune.value=6;let f=Math.min(1.4,i*.4),p=r+i,ee=Math.min(.7,i*.25);l.gain.setValueAtTime(0,r),l.gain.linearRampToValueAtTime(c,r+f),l.gain.setTargetAtTime(0,p,ee),u.connect(l),d.connect(l),l.connect(t),u.start(r),d.start(r),u.stop(p+ee*6),d.stop(p+ee*6),j(u,3,o)}function Wt(e,t,n){let r=e.createOscillator(),i=e.createGain();r.frequency.setValueAtTime(140,n),r.frequency.exponentialRampToValueAtTime(45,n+.12),i.gain.setValueAtTime(.3,n),i.gain.exponentialRampToValueAtTime(1e-4,n+.2),r.connect(i).connect(t),r.start(n),r.stop(n+.22),j(r,2,T)}function Gt(e,t,n){let r=e.createOscillator(),i=e.createGain();r.frequency.setValueAtTime(105,n),r.frequency.exponentialRampToValueAtTime(42,n+.16),i.gain.setValueAtTime(1e-4,n),i.gain.exponentialRampToValueAtTime(.16,n+.008),i.gain.exponentialRampToValueAtTime(1e-4,n+.3),r.connect(i).connect(t),r.start(n),r.stop(n+.32),j(r,2,T)}function Kt(e,t,n){Jt(e,t,n,.13,.13,`bandpass`,1800);let r=e.createOscillator(),i=e.createGain();r.type=`triangle`,r.frequency.setValueAtTime(190,n),r.frequency.exponentialRampToValueAtTime(130,n+.07),i.gain.setValueAtTime(.06,n),i.gain.exponentialRampToValueAtTime(1e-4,n+.08),r.connect(i).connect(t),r.start(n),r.stop(n+.1),j(r,2,T)}function qt(e,t,n){Jt(e,t,n,.16,.045,`bandpass`,2400);let r=e.createOscillator(),i=e.createGain();r.type=`triangle`,r.frequency.setValueAtTime(520,n),r.frequency.exponentialRampToValueAtTime(410,n+.03),i.gain.setValueAtTime(.05,n),i.gain.exponentialRampToValueAtTime(1e-4,n+.045),r.connect(i).connect(t),r.start(n),r.stop(n+.06),j(r,2,T)}function Jt(e,t,n,r,i,a,o){if(!C||C.sampleRate!==e.sampleRate){C=e.createBuffer(1,e.sampleRate,e.sampleRate);let t=C.getChannelData(0);for(let e=0;e<t.length;e++)t[e]=Math.random()*2-1}let s=e.createBufferSource();s.buffer=C;let c=e.createBiquadFilter();c.type=a,c.frequency.value=o,c.Q.value=.8;let l=e.createGain();l.gain.setValueAtTime(i,n),l.gain.exponentialRampToValueAtTime(1e-4,n+r),s.connect(c).connect(l).connect(t),s.start(n,Math.random()*.5),s.stop(n+r+.02),j(s,3,T)}typeof window<`u`&&!Object.getOwnPropertyDescriptor(window,`__swarmJukeboxPeak`)&&Object.defineProperty(window,"__swarmJukeboxPeak",{value:async(e,t=60)=>{let n=se.findIndex(t=>t.id===e);if(n<0||typeof OfflineAudioContext>`u`)return null;let r=ie(n),i=44100,a=Math.min(t,r.duration+at),o=new OfflineAudioContext(1,Math.ceil(i*a),i),s=Pt(o,r.song,ot);s.tone.connect(o.destination);for(let e=0;e<r.totalSteps&&ae(r,e)<a;e++)zt(o,s,r,e,ae(r,e));let c=(await o.startRendering()).getChannelData(0),l=0,u=0;for(let e of c)l=Math.max(l,Math.abs(e)),u+=e*e;return{id:e,seconds:a,peak:l,rms:Math.sqrt(u/c.length),limit:st}},enumerable:!1,configurable:!1});var Yt=6e4,Xt={"audio/webm":`webm`,"audio/ogg":`ogg`,"audio/mp4":`mp4`,"audio/mpeg":`mp3`,"audio/wav":`wav`,"audio/x-wav":`wav`},Zt=`That recording is too long to transcribe: keep it under 60 seconds.`;function Qt(e){let t=(e??``).split(`;`)[0].trim().toLowerCase();return t in Xt?t:``}function $t(e){return Qt(e.type)?e.bytes>0?e.bytes>5242880||Number.isFinite(e.ms)&&e.ms>63e3?{status:413,message:Zt}:null:{status:400,message:`The recording was empty.`}:{status:415,message:`The office can't transcribe ${e.type?`"${e.type.split(`;`)[0]}"`:`that`} audio: send WebM, Ogg, MP4, MP3 or WAV.`}}var en=e=>e.enabled&&e.phoneChat&&e.micFree&&!e.draft&&!e.muted,tn={kind:`waiting`};function nn(e,t){let n={state:e,effect:null};switch(t.type){case`reply-ended`:return e.kind===`waiting`&&en(t.room)?{state:{kind:`chime`,until:t.now+450},effect:`chime`}:n;case`tick`:return e.kind===`chime`?en(t.room)?t.now>=e.until?{state:{kind:`listening`},effect:`open`}:n:{state:tn,effect:null}:n;case`closed`:return{state:tn,effect:null}}}var rn=e=>!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey&&!e.isComposing,an=(e,t,n=[`KeyV`])=>n.includes(e.code)&&rn(e)&&t!==`field`;function on(e,t,n,r=[`KeyM`]){return e.key===`Escape`||r.includes(e.code)&&rn(e)&&(t||n===`none`)}var sn=1200,cn=8e3,ln=e=>({start:e,lastSpeech:null,levels:[],heard:0}),un=e=>e.levels.length?Math.min(...e.levels):0,dn=(e,t)=>({...e,lastSpeech:t});function fn(e,t,n){if(!Number.isFinite(t)||t<0)return e;let r=[...e.levels,t].slice(-60),i=e.heard>=6&&t>=Math.max(.02,un({...e,levels:r})*3);return{...e,levels:r,heard:e.heard+1,lastSpeech:i?n:e.lastSpeech}}function pn(e,t){return{silenceMs:e===`hold`&&!t?null:sn,noSpeechMs:e===`hold`?null:cn,maxMs:Yt}}var mn=(e,t)=>e===`handsfree`||t;function hn(e,t,n){return t-e.start>=n.maxMs?`too-long`:e.lastSpeech===null?n.noSpeechMs!==null&&t-e.start>=n.noSpeechMs?`no-speech`:`listening`:n.silenceMs!==null&&t-e.lastSpeech>=n.silenceMs?`done`:`listening`}function gn(e,t=!0){let n=e.replace(/[([](?:laughter|laughs|music|applause|noise|silence|inaudible|cough(?:ing)?|background noise|sound)[)\]]/gi,` `).replace(/\s+/g,` `).trim();return t?n.charAt(0).toUpperCase()+n.slice(1):n}function _n(e,t){let n=e.replace(/\s+$/,``),r=gn(t,!n||/[.!?]$/.test(n));return r?n?`${n} ${r}`:r:e}function vn(e){return{text:e.map(e=>e.transcript.trim()).filter(Boolean).join(` `),speaking:e.some(e=>!e.final&&e.transcript.trim())}}function yn(e,t){let n=bn(e);return n===null?null:u(t,n,{code:e})}function bn(e){switch(e){case`aborted`:case`no-speech`:case`AbortError`:return null;case`not-allowed`:case`service-not-allowed`:case`NotAllowedError`:case`SecurityError`:return`🎙️ The microphone is blocked for the office. Allow it from the icon at the left of the address bar to talk instead of type.`;case`audio-capture`:case`NotFoundError`:case`NotReadableError`:case`OverconstrainedError`:return`🎙️ No microphone is working here. Plug one in (or close what's using it), or keep typing.`;case`network`:return`🎙️ The browser's speech service couldn't be reached. Try again, or pick ElevenLabs in Settings → Voice.`;case`language-not-supported`:return`🎙️ The browser can't recognise your language. Pick ElevenLabs in Settings → Voice.`;case`startup-timeout`:return`🎙️ Speech recognition did not start. Check microphone permissions and try Chrome (verified). Some browsers, including Brave, may expose speech recognition without a working service. You can also type or use Windows + H on Windows.`;case`recording-startup-timeout`:return`🎙️ The microphone did not start. Check microphone permissions and the selected input device, then try again.`;default:return`🎙️ Listening stopped ({code}).`}}function xn(e,t,n,r){return u(r,Sn(e,t,n))}function Sn(e,t,n){return e===`browser`&&!t.recognition?`🎙️ This browser can't turn speech into text. Use Chrome, Edge or Safari, or pick ElevenLabs in Settings → Voice.`:e===`elevenlabs`&&!t.recorder?`🎙️ This browser can't record from a microphone, so ElevenLabs can't hear you. Use a current Chrome, Edge, Firefox or Safari.`:e===`elevenlabs`&&!n?`🎙️ Add your ElevenLabs API key in Settings → Voice to talk instead of type.`:``}var M=e(()=>({state:`idle`,mode:null,target:null,live:!1,chiming:!1})),N=new Map;function Cn(e){return N.delete(e.id),N.set(e.id,e),()=>{N.get(e.id)===e&&(N.delete(e.id),L?.target.id===e.id&&G(`gone`))}}var wn=!1,Tn=()=>{let e=window;return e.SpeechRecognition??e.webkitSpeechRecognition??null},En=()=>wn?ir:Tn();function Dn(){return{recognition:!!En(),recorder:typeof MediaRecorder<`u`&&!!navigator.mediaDevices?.getUserMedia}}var P=()=>f.getState().settings.listen??{provider:`off`,autoSend:!1,handsFree:!1},F=e=>yn(e,f.getState().settings.language);function I(){let{provider:e}=P();return e===`off`?``:xn(e,Dn(),f.getState().voiceKeySet,f.getState().settings.language)}var L=null,On=0,R=[],z=null,kn=``,An=``,B=!1,jn=!1,Mn=1e4,V=e=>M.setState(e);function Nn(e,t){let n=N.get(e);if(!n||L||n.disabled())return;let{provider:r}=P();if(r===`off`)return;let i=I();if(i)return void Bn(i,e);let a=++On,o={n:a,target:n,mode:t,provider:r,base:n.text(),transcript:``,ears:null,hearing:null,began:performance.now(),finishing:!1,release:Vn(),tick:setInterval(()=>Ln(a),100)};L=o,z={provider:r,mode:t,start:o.began,end:null,transcript:``,outcome:null},R.push(z),R.length>30&&R.splice(0,R.length-30),An=``,V({state:`listening`,mode:t,target:e,live:!1,chiming:!1}),r===`browser`?o.hearing=Hn(a):Wn(a)}function Pn(e){L?.target.id===e&&L.mode===`hold`&&(L.mode=`tap`,z&&(z.mode=`tap`),V({mode:`tap`}))}function Fn(e){L&&(!e||L.target.id===e)&&U()}function In(e,t=`stopped`){L&&(!e||L.target.id===e)&&G(t)}var H=e=>L?.n===e?L:null;function Ln(e){let t=H(e);if(!t||t.finishing)return;let n=performance.now();if(!t.ears){n-t.began>Mn&&K(e,F(t.provider===`browser`?`startup-timeout`:`recording-startup-timeout`));return}let r=hn(t.ears,n,pn(t.mode,P().autoSend));r===`no-speech`?G(`nothing`):r!==`listening`&&U()}function Rn(e){let t=H(e);!t||t.ears||t.finishing||(t.ears=ln(performance.now()),B=!0,V({live:!0}))}function zn(e,t,n){let r=H(e);r&&(r.ears||Rn(e),n&&r.ears&&(r.ears=dn(r.ears,performance.now())),r.transcript=t,z&&(z.transcript=t),kn=t,r.target.setText(_n(r.base,t)))}function U(){let e=L;if(!e||e.finishing)return;if(e.finishing=!0,!e.hearing)return W(e);e.hearing.stop();let t=e.n;setTimeout(()=>{H(t)&&e.provider===`browser`&&W(e)},2500)}function W(e){if(L!==e)return;let t=e.transcript.trim(),n=_n(e.base,t);t&&e.target.setText(n);let r=!!t&&mn(e.mode,P().autoSend)&&!e.target.disabled();q(t?r?`sent`:`filled`:`nothing`),r&&(e.target.setText(``),e.target.send(n))}function G(e){let t=L;t&&(t.hearing?.abort(),q(e===`nothing`?`nothing`:`stopped`))}function K(e,t){let n=H(e);if(n){if(!t){n.transcript?W(n):q(`nothing`);return}n.hearing?.abort(),An=t,q(`error`),f.getState().pushToast(`error`,t),V({state:`error`,target:n.target.id}),setTimeout(()=>M.getState().state===`error`&&!L&&V({state:`idle`,target:null}),3e3)}}function q(e){let t=L;t&&(L=null,clearInterval(t.tick),t.release?.(),t.release=null,z&&=(z.end=performance.now(),z.outcome=e,null),V({state:`idle`,mode:null,target:null,live:!1}),t.mode===`handsfree`&&(e!==`sent`&&a(!1),X({type:`closed`})))}function Bn(e,t){An=e,f.getState().pushToast(`info`,e),V({state:`error`,target:t}),setTimeout(()=>M.getState().state===`error`&&!L&&V({state:`idle`,target:null}),3e3)}function Vn(){let e=xt();n(!0);let t=typeof speechSynthesis<`u`?speechSynthesis:null,r=!!t?.speaking&&!t.paused;return r&&t.pause(),()=>{e(),n(!1),r&&t.resume()}}function Hn(e){let t=En();if(!t)return queueMicrotask(()=>K(e,I()||F(`audio-capture`))),null;let n=new t;n.lang=d(f.getState().settings.language),n.continuous=!0,n.interimResults=!0,n.onstart=()=>Rn(e),n.onresult=t=>{let{text:n,speaking:r}=vn(Array.from(t.results,e=>({transcript:e[0]?.transcript??``,final:e.isFinal})));zn(e,n,r)},n.onerror=t=>{K(e,F(t.error))},n.onend=()=>{let t=H(e);t&&W(t)};try{n.start()}catch{return queueMicrotask(()=>K(e,F(`audio-capture`))),null}return{stop:()=>n.stop(),abort:()=>{n.onstart=n.onresult=n.onerror=n.onend=null;try{n.abort()}catch{}}}}var Un=[`audio/webm;codecs=opus`,`audio/ogg;codecs=opus`,`audio/mp4`,`audio/webm`];async function Wn(e){let t;try{t=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}})}catch(t){return K(e,F(t?.name||`audio-capture`))}let n=()=>t.getTracks().forEach(e=>e.stop()),r=H(e);if(!r||r.finishing)return n();let i=Un.find(e=>MediaRecorder.isTypeSupported?.(e)),a;try{a=new MediaRecorder(t,i?{mimeType:i}:void 0)}catch{return n(),K(e,F(`audio-capture`))}let o=[],s=0,c=!1,l=Gn(t,t=>{let n=H(e);n?.ears&&(n.ears=fn(n.ears,t,performance.now()))});a.ondataavailable=e=>{o.push(e.data),s+=e.data.size,s>4980736&&U()},a.onstop=()=>{n(),l();let t=H(e);t&&!c&&Kn(t,new Blob(o,{type:a.mimeType||i||`audio/webm`}),performance.now()-(t.ears?.start??t.began))},r.hearing={stop:()=>a.state!==`inactive`&&a.stop(),abort:()=>{c=!0,a.state===`inactive`?n():a.stop()}},a.start(1e3),Rn(e)}function Gn(e,t){let n=null,r=null;try{n=new AudioContext,n.resume().catch(()=>void 0);let i=n.createAnalyser();i.fftSize=1024,n.createMediaStreamSource(e).connect(i);let a=new Float32Array(i.fftSize);r=setInterval(()=>{i.getFloatTimeDomainData(a);let e=0;for(let t of a)e+=t*t;t(Math.sqrt(e/a.length))},50)}catch{}return()=>{r&&clearInterval(r),n?.close().catch(()=>void 0)}}async function Kn(e,t,n){if(e.mode===`handsfree`&&e.ears?.lastSpeech==null)return q(`nothing`);let r=$t({bytes:t.size,ms:n,type:t.type});if(r)return K(e.n,`🎙️ ${r.message}`);V({state:`transcribing`,live:!1}),e.release?.(),e.release=null;try{let r=await fetch(`/api/voice/transcribe`,{method:`POST`,headers:{"Content-Type":t.type,"X-Clip-Ms":String(Math.round(n))},body:t}),i=await r.json().catch(()=>({}));if(!r.ok)throw Error(typeof i.error==`string`?i.error:`HTTP ${r.status}`);if(L!==e)return;e.transcript=typeof i.text==`string`?i.text:``,kn=e.transcript,z&&(z.transcript=e.transcript),W(e)}catch(t){L===e&&K(e.n,`🎙️ ${t.message}`)}}var J=tn,Y=null,qn=()=>[...N.values()].reverse().find(e=>e.kind===`phone`)??null;function Jn(){let e=f.getState(),t=P(),n=e.overlay,i=qn();return{enabled:t.handsFree&&t.provider!==`off`&&e.settings.voice.provider!==`off`&&!I()&&B,phoneChat:n?.kind===`phone`&&(n.tab??`chat`)===`chat`&&!!i&&!i.disabled()&&document.visibilityState===`visible`&&!ne(),micFree:!L,draft:!!i?.text().trim(),muted:r().muted}}function X(e){let t=nn(J,e);if(J=t.state,V({chiming:J.kind===`chime`}),Y&&J.kind!==`chime`&&(clearTimeout(Y),Y=null),t.effect===`chime`&&(a(!0),Y=setTimeout(()=>{Y=null,X({type:`tick`,now:performance.now(),room:Jn()})},Math.max(0,(J.kind===`chime`?J.until:0)-performance.now()))),t.effect===`open`){let e=qn();e&&Nn(e.id,`handsfree`),L||X({type:`closed`})}}function Yn(){let e=Jn();P().handsFree&&!B&&e.phoneChat&&!jn&&(jn=!0,f.getState().pushToast(`info`,`🎧 Hold 🎙️ once to let the office use your microphone, then hands-free can listen.`)),X({type:`reply-ended`,now:performance.now(),room:e})}function Xn(e){return I()||(f.getState().settings.voice.provider===`off`?`Hands-free needs ${e}'s voice: turn on Speak messages in Settings → Voice.`:``)}async function Zn(e,t){let n=e?Xn(t):``;if(n)return f.getState().pushToast(`info`,n);(!e||await Qn())&&await te.updateSettings({listen:{...P(),handsFree:e}}).catch(()=>void 0)}async function Qn(){if(B)return!0;try{return(await navigator.mediaDevices.getUserMedia({audio:!0})).getTracks().forEach(e=>e.stop()),B=!0,!0}catch(e){let t=F(e?.name||`audio-capture`);return t&&f.getState().pushToast(`error`,t),!1}}var Z=null,Q=!1;function $n(e){let t=e;if(t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.tagName===`SELECT`||t.isContentEditable)){let e=t,n=t.tagName!==`SELECT`&&e.form?[...N.values()].find(t=>t.form()===e.form)??null:null;return n&&!e.disabled&&!e.readOnly?{place:`mic-box`,target:n,box:e}:{place:`field`,target:null,box:null}}return{place:`none`,target:[...N.values()].reverse().find(e=>!e.disabled())??null,box:null}}function er(){let e=Z;if(!e)return;Z=null,clearTimeout(e.timer);let t=e.box;t&&document.activeElement===t&&(document.execCommand(`insertText`,!1,e.key)||(t.setRangeText(e.key,t.selectionStart??t.value.length,t.selectionEnd??t.value.length,`end`),t.dispatchEvent(new Event(`input`,{bubbles:!0}))))}function tr(e){let{talk:t,mute:n}=g(),r=t.includes(e.code);if(r&&e.repeat&&(Z||Q))return void e.preventDefault();Z&&!r&&er();let{place:i,target:a,box:o}=$n(e.target),s=L;if(s){on(e,s.mode===`handsfree`,i,n)&&(e.preventDefault(),e.stopImmediatePropagation(),G(`stopped`));return}if(J.kind===`chime`&&on(e,!0,i,n)){e.preventDefault(),e.stopImmediatePropagation(),X({type:`closed`});return}!e.repeat&&a&&an(e,i,t)&&!ne()&&P().provider!==`off`&&(e.preventDefault(),Z={target:a,key:e.key,box:o,timer:setTimeout(()=>{Z=null,Q=!0,Nn(a.id,`hold`)},300)})}function nr(e){g().talk.includes(e.code)&&(Z?er():Q&&(Q=!1,L?.mode===`hold`&&U()))}function rr(e){let t=L,n=e.target;t&&n?.form&&n.form===t.target.form()&&G(`stopped`)}if(typeof window<`u`){window.addEventListener(`keydown`,tr,!0),window.addEventListener(`keyup`,nr,!0),window.addEventListener(`input`,rr,!0),window.addEventListener(`blur`,()=>{Z&&=(clearTimeout(Z.timer),null),Q&&L?.mode===`hold`&&U(),Q=!1}),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&(In(),J.kind===`chime`&&X({type:`closed`}))});let e=r().muted;c(()=>{let t=r().muted;t&&!e&&L&&L.mode!==`hold`&&G(`stopped`),e=t}),navigator.permissions?.query({name:`microphone`}).then(e=>{B||=e.state===`granted`,e.addEventListener(`change`,()=>B=e.state===`granted`)}).catch(()=>void 0)}var $=null,ir=class{lang=``;continuous=!1;interimResults=!1;onstart=null;onresult=null;onerror=null;onend=null;phrases=[];start(){$=this,setTimeout(()=>this.onstart?.(),30)}stop(){this.end()}abort(){this.end()}end(){$===this&&($=null,setTimeout(()=>this.onend?.(),30))}say(e,t){this.phrases=[...this.phrases.filter(e=>e.isFinal),{isFinal:t,0:{transcript:e}}],this.onresult?.({results:this.phrases})}};window.__swarmMic={get state(){return M.getState().state},get mode(){return M.getState().mode},get live(){return M.getState().live},get provider(){return P().provider},get transcript(){return kn},get error(){return An},get supported(){return Dn()},get handsFree(){return J.kind},history:R,fake(e=!0){wn=e,e&&(B=!0)},say(e,t=!0){let n=L;return n?n.provider===`elevenlabs`?(n.ears&&=dn(n.ears,performance.now()),!0):$?($.say(e,!1),t&&$.say(e,!0),!0):!1:!1}};export{Ne as A,ue as B,vt as C,qe as D,Ze as E,Pe as F,ge as G,_e as H,h as I,ye as K,Re as L,Le as M,Fe as N,Je as O,Me as P,m as R,yt as S,Vt as T,be as U,he as V,xe as W,Ot as _,Dn as a,Ut as b,Yn as c,M as d,xn as f,bt as g,kt as h,Nn as i,je as j,g as k,Zn as l,xt as m,Xn as n,I as o,St as p,Pn as r,Cn as s,Fn as t,In as u,Et as v,Tt as w,_t as x,Dt as y,Te as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t,n=``){let r=[],i=new Date(t),a=new Date(i.getFullYear(),i.getMonth(),i.getDate()).getTime(),o=e.flatMap(e=>e.pulls.filter(e=>e.mergedAt&&Number.isFinite(Date.parse(e.mergedAt))).map(t=>({floor:e.floor,number:t.number,at:Date.parse(t.mergedAt)}))),s=o.filter(e=>t-e.at<864e5&&e.at<=t+6e4).sort((e,t)=>t.at-e.at)[0];s&&r.push(`PR #${s.number} merged! 🎉`);let c=e.map(e=>({floor:e.floor,n:o.filter(n=>n.floor===e.floor&&n.at>=a&&n.at<=t+6e4).length})).filter(e=>e.n>=2).sort((e,t)=>t.n-e.n)[0];c&&r.push(`Floor ${c.floor}: ${c.n} merges today`);let l=e.reduce((e,t)=>e+t.pulls.filter(e=>e.state===`OPEN`).length,0);return l>0&&r.push(`${l} PR${l===1?``:`s`} in flight 🚀`),r.push(`${n.trim()||`Droidsembly`} ♥ its team`),r}function t(t,n,r,i){let a=e(t,n,r),o=a.length>1?a.slice(0,-1):a;return o[Math.min(o.length-1,Math.floor(Math.max(0,i)*Math.min(o.length,2)))]}function n(e,t){return((e?e.split(`/`).pop()??e:t.trim()||`Droidsembly`).replace(/[^\p{L}\p{N} .!&+-]/gu,` `).replace(/[-_]+/g,` `).replace(/\s+/g,` `).trim()||`hello`).slice(0,14).toUpperCase()}export{n,t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){function e(e,t,n){let r=[],i=e=>e&&typeof e==`object`&&!Array.isArray(e)?`g`in e?r[e.g]:n[e.img]:e,a=e,o=e;for(let n of t)switch(n[0]){case`s`:a[n[1]]=i(n[2]);break;case`m`:o[n[1]](...n[2].map(i));break;case`g`:r[n[1]]=n[2]===`linear`?e.createLinearGradient(...n[3]):e.createRadialGradient(...n[3]);break;case`gs`:r[n[1]].addColorStop(n[2],n[3])}}let t=self,n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map;async function i(r,i,a,o,s){let c=performance.now(),l=`${i}x${a}`,u=n.get(l);u||(u=new OffscreenCanvas(i,a),n.set(l,u)),u.width=i,e(u.getContext(`2d`),o,s);let d=await createImageBitmap(u,{imageOrientation:`flipY`,premultiplyAlpha:`none`}),f={type:`painted`,id:r,bitmap:d,ms:performance.now()-c};t.postMessage(f,[d])}async function a(e){let n=e?await fetch(e).then(e=>e.ok?e.text():``):``,r=[];for(let e of n.match(/@font-face\s*{[^}]*}/g)??[]){let n=t=>RegExp(`${t}:\\s*([^;]+);`).exec(e)?.[1].trim(),i=n(`font-family`)?.replace(/['"]/g,``),a=n(`src`);if(!i||!a)continue;let o=new FontFace(i,a,{weight:n(`font-weight`)??`normal`,style:n(`font-style`)??`normal`,unicodeRange:n(`unicode-range`)??`U+0-10FFFF`});t.fonts.add(o),r.push(o.load())}await Promise.allSettled(r)}t.onmessage=e=>{let n=e.data;if(n.type===`drop`){r.delete(n.id);return}if(n.type===`fonts`){a(n.css).catch(()=>void 0).then(()=>{t.postMessage({type:`fontsReady`});for(let[e,t]of r)i(e,t.w,t.h,t.ops,t.images).catch(()=>void 0)});return}let o=n.images??r.get(n.id)?.images??[];r.set(n.id,{w:n.w,h:n.h,ops:n.ops,images:o}),i(n.id,n.w,n.h,n.ops,o).catch(e=>t.postMessage({type:`failed`,id:n.id,error:String(e)}))}})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./jsx-runtime-BFUkm7bt.js";import{Mt as t,Xi as n,g as r,p as i}from"./store-FA83kfnc.js";import{a,i as o,r as s,t as c,u as l}from"./gate-BplJKcLG.js";import{i as u,n as d}from"./useDayTime-0XsqM14Q.js";import{$n as f}from"./Office-BBnd6tyn.js";import{a as p,g as m,h,l as g,m as ee,n as _,o as v,s as te,t as y}from"./gallery-ColCPQQE.js";var b=[`none`,`warm`,`night`,`mono`,`polaroid`,`comic`],ne={none:`None`,warm:`Warm film`,night:`Cool night`,mono:`Black & white`,polaroid:`Polaroid`,comic:`Comic book`},x={saturation:1,contrast:1,gain:[1,1,1],lift:[0,0,0],vignette:0,grain:0,posterize:0,ink:0,frame:!1},S={none:x,warm:{...x,saturation:1.08,contrast:1.06,gain:[1.07,1,.84],lift:[.045,.025,0],vignette:.32,grain:.045},night:{...x,saturation:.82,contrast:1.12,gain:[.78,.9,1.12],lift:[0,.012,.045],vignette:.45,grain:.03},mono:{...x,saturation:0,contrast:1.18,vignette:.3,grain:.055},polaroid:{...x,saturation:.88,contrast:.94,gain:[1.04,1,.9],lift:[.07,.06,.05],vignette:.22,grain:.03,frame:!0},comic:{...x,saturation:1.4,contrast:1.12,posterize:6,ink:1}},C=e=>e.saturation!==1||e.contrast!==1||e.gain[0]!==1||e.gain[1]!==1||e.gain[2]!==1||e.lift[0]!==0||e.lift[1]!==0||e.lift[2]!==0||e.vignette>0||e.grain>0||e.posterize>0||e.ink>0,re=e=>b.includes(e),w=Math.PI/4,T=1.5,ie=2.4,ae=3.5,oe=.9,E={x:120,z:120,yMin:-6,yMax:60},D=(e,t,n,r,i,a)=>({x:e,y:t,z:n,yaw:r,pitch:i,roll:0,fov:a,vx:0,vy:0,vz:0}),O=(e,t,n)=>Math.min(n,Math.max(t,e));function se(e,t,n){let r=ie*(t.fast?ae:1),i=Math.cos(e.pitch),a=Math.sin(e.yaw),o=Math.cos(e.yaw),s=(-a*i*t.forward+o*t.right)*r,c=(Math.sin(e.pitch)*t.forward+t.up)*r,l=(-o*i*t.forward-a*t.right)*r,u=1-Math.exp(-7*n);e.vx+=(s-e.vx)*u,e.vy+=(c-e.vy)*u,e.vz+=(l-e.vz)*u,e.x=O(e.x+e.vx*n,-E.x,E.x),e.y=O(e.y+e.vy*n,E.yMin,E.yMax),e.z=O(e.z+e.vz*n,-E.z,E.z),k(e,t.roll,n)}function k(e,t,n){t&&(e.roll=O(e.roll+t*oe*n,-w,w))}function ce(e,t,n){e.yaw-=t,e.pitch=O(e.pitch-n,-1.5,T)}function le(e,t){return O(e*Math.exp(t*.0012),15,110)}function ue(e){e.vx=0,e.vy=0,e.vz=0}var de=2*Math.PI/45;function fe(e,t,n,r){let i=e.x-t,a=e.z-r;return{cx:t,cy:n,cz:r,radius:O(Math.hypot(i,a),1.2,12),height:O(e.y-n,-.5,4),angle:Math.atan2(i,a),speed:de}}function pe(e,t,n){e.angle+=e.speed*n,t.x=e.cx+Math.sin(e.angle)*e.radius,t.z=e.cz+Math.cos(e.angle)*e.radius,t.y=e.cy+e.height,me(t,e.cx,e.cy,e.cz),ue(t)}function me(e,t,n,r){let i=t-e.x,a=n-e.y,o=r-e.z;e.yaw=Math.atan2(-i,-o),e.pitch=O(Math.atan2(a,Math.hypot(i,o)),-1.5,T)}function A(e,t){let n=Math.min(e,t);return{side:Math.round(n*.045),top:Math.round(n*.045),bottom:Math.round(n*.16)}}var j=`Fredoka, 'Segoe UI', system-ui, sans-serif`;function M(e,t,n,r,i,a){e.beginPath(),e.moveTo(t+a,n),e.arcTo(t+r,n,t+r,n+i,a),e.arcTo(t+r,n+i,t,n+i,a),e.arcTo(t,n+i,t,n,a),e.arcTo(t,n,t+r,n,a),e.closePath()}function N(e,n,r,i){let a=Math.min(n,r)/100,o={x:0,y:0,w:n,h:r};if(e.save(),i.frame){let t=A(n,r);o={x:t.side,y:t.top,w:n-2*t.side,h:r-t.top-t.bottom},e.fillStyle=`#f7f3ea`,e.beginPath(),e.rect(0,0,n,r),e.rect(o.x,o.y,o.w,o.h),e.fill(`evenodd`),e.strokeStyle=`rgba(60, 50, 30, 0.18)`,e.lineWidth=Math.max(1,a*.25),e.strokeRect(o.x,o.y,o.w,o.h)}if(i.guides){e.strokeStyle=`rgba(255, 255, 255, 0.55)`,e.lineWidth=Math.max(1,a*.12),e.beginPath();for(let t of[1/3,2/3])e.moveTo(o.x+o.w*t,o.y),e.lineTo(o.x+o.w*t,o.y+o.h),e.moveTo(o.x,o.y+o.h*t),e.lineTo(o.x+o.w,o.y+o.h*t);e.stroke()}if(i.caption){if(i.frame){let t=A(n,r);e.fillStyle=`#3a3226`,e.font=`600 ${Math.round(t.bottom*.3)}px ${j}`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(i.caption,n/2,r-t.bottom/2,n-2*t.side)}else{let t=Math.round(a*3.2);e.font=`600 ${t}px ${j}`;let n=Math.min(e.measureText(i.caption).width,o.w*.7),r=t*.55,s=o.x+a*3,c=o.y+o.h-a*3-t-r;e.fillStyle=`rgba(20, 20, 30, 0.55)`,M(e,s,c,n+r*2,t+r*1.4,t*.45),e.fill(),e.fillStyle=`#fff`,e.textAlign=`left`,e.textBaseline=`middle`,e.fillText(i.caption,s+r,c+(t+r*1.4)/2,n)}}if(i.stamp){let n=Math.round(a*3.4);e.font=`700 ${n}px ${j}`;let r=n*1.5,s=Math.min(e.measureText(i.stamp).width+r,o.w*.5),c=n*.5,l=s+c*2,u=n+c*1.3,d=o.x+o.w-a*3-l,f=i.frame?o.y+a*3:o.y+o.h-a*3-u;e.fillStyle=`rgba(255, 250, 240, 0.92)`,e.strokeStyle=`#1f1d2b`,e.lineWidth=Math.max(1,n*.12),M(e,d,f,l,u,u*.35),e.fill(),e.stroke(),e.fillStyle=`#ff8a5b`,e.textAlign=`left`,e.textBaseline=`middle`,t(e,d+c,f+(u-n*1.3)/2,n*1.3),e.fillStyle=`#1f1d2b`,e.fillText(i.stamp,d+c+r,f+u/2,Math.max(1,s-r))}e.restore()}var he=e=>e.frame||!!e.stamp||!!e.caption,ge=1920;function _e(e){let t=Math.min(1,ge/Math.max(1,e.source.width)),n=Math.max(2,Math.round(e.source.width*t/2)*2),r=Math.max(2,Math.round(e.source.height*t/2)*2),i=document.createElement(`canvas`);i.width=n,i.height=r;let a=i.getContext(`2d`,{alpha:!1}),o=null;he(e.overlay)&&(o=document.createElement(`canvas`),o.width=n,o.height=r,N(o.getContext(`2d`),n,r,{...e.overlay,guides:!1}));let s=i.captureStream(e.fps),c=e.audio?.getAudioTracks().map(e=>e.clone())??[];for(let e of c)s.addTrack(e);let l=n*r*e.fps,u=new MediaRecorder(s,{mimeType:e.type,videoBitsPerSecond:Math.round(Math.min(16e6,Math.max(25e5,l*.09))),audioBitsPerSecond:128e3}),d=[];u.ondataavailable=e=>{e.data.size&&d.push(e.data)};let f=new Promise((t,n)=>{u.onstop=()=>t(new Blob(d,{type:e.type.split(`;`)[0]})),u.onerror=()=>n(Error(`the recording failed`))});u.start(1e3);let p=performance.now(),m=setTimeout(e.onLimit,e.seconds*1e3),h=!1;return{width:n,height:r,draw(){h||(a.drawImage(e.source,0,0,n,r),o&&a.drawImage(o,0,0))},elapsed:()=>(performance.now()-p)/1e3,stop(){if(!h){h=!0,clearTimeout(m),u.state!==`inactive`&&u.stop();let e=()=>{for(let e of s.getTracks())e.stop()};f.then(e,e)}return f}}}var ve=[10,30,60],P=.735,F=e(()=>({filter:`none`,stamp:!0,caption:!1,guides:!0,dof:!1,focus:4,blur:.5,daytime:null,scale:2,fps:30,clipSeconds:10,orbit:`free`,panel:!0,recording:null,busy:null,note:null})),I=D(0,1.65,0,0,0,72),L=null,ye=e=>void(L=e),R=!0,be=()=>void(R=!0);function xe(){let e=R;return R=!1,e}var z=null,B=null,V=[],Se=()=>B;function H(e,t=`info`,n){F.setState({note:{text:e,level:t,message:n}})}function Ce(e=!!document.pointerLockElement){return a()||!c()?!1:(z={locked:e,daytime:d.frozen},i.getState().setFocus(null),F.setState({daytime:null,orbit:`free`,panel:!0,note:null,busy:null}),r(!0),l.setState({active:!0,frozen:!0}),R=!0,!0)}function U(){if(!a())return;B&&X();let e=z;z=null,d.frozen=e?.daytime??null,u(),r(!1),s(),l.setState({active:!1,frozen:!1}),e?.locked&&!document.pointerLockElement?f():!e?.locked&&document.pointerLockElement&&document.exitPointerLock()}function W(e){a()&&(r(e),l.setState({frozen:e}),R=!0)}function G(e){let t=e===null?null:(e%1+1)%1;d.frozen=t??z?.daytime??null,u(),F.setState({daytime:t}),R=!0}function K(e){F.setState(e),R=!0}function q(e){let t=F.getState(),n=_();return{frame:S[t.filter].frame,stamp:t.stamp?i.getState().settings.companyName||`Droidsembly`:null,caption:t.caption?te(n.label,n.floor,new Date):null,guides:e&&t.guides}}function we(){let e=L?.focusCenter()??null;return e===null?(H(`Nothing in the middle of the view to focus on.`,`info`,[{key:`Nothing in the middle of the view to focus on.`}]),null):(K({dof:!0,focus:Math.round(e*10)/10}),e)}async function J(e=F.getState().scale){if(!L||F.getState().busy)return null;F.setState({busy:`Developing…`});try{let t=await L.shot(e),n=g(_().label,new Date,`png`),r=y(t.png,{kind:`shot`,name:n,width:t.width,height:t.height,seconds:null},t.thumb);m(r.url,n);let i=await h(t.png),a=t.scale<e?` (${e}× was too big for the browser, so ${Math.round(t.scale*10)/10}×)`:``;return H(`📸 Saved ${n}, ${t.width}×${t.height}${a}${i?`, and copied it`:``}`,`info`,[{key:`📸 Saved {name}, {width}×{height}`,values:{name:n,width:t.width,height:t.height}},...a?[{key:` ({requested}× was too big for the browser, so {actual}×)`,values:{requested:e,actual:Math.round(t.scale*10)/10}}]:[],...i?[{key:`, and copied it`}]:[]]),{name:n,width:t.width,height:t.height,bytes:t.png.size,copied:i}}catch(e){let t=e instanceof Error?e.message:String(e);return H(`The shot failed: ${t}`,`error`,[{key:`The shot failed: {error}`,values:{error:t}}]),null}finally{F.setState({busy:null})}}function Y(){if(B)return new Promise(e=>V.push(e));let e=o(),t=ee(e);if(!t.ok||!e){let e=t.ok?`The 3D view is not ready.`:t.why;return H(e,`error`,[{key:e}]),Promise.resolve(null)}let r=F.getState();try{B=_e({source:e,fps:r.fps,seconds:r.clipSeconds,overlay:q(!1),audio:n(),type:t.type,onLimit:()=>void X()})}catch(e){let t=e instanceof Error?e.message:String(e);return H(`Recording could not start: ${t}`,`error`,[{key:`Recording could not start: {error}`,values:{error:t}}]),Promise.resolve(null)}return F.setState({recording:{started:performance.now(),limit:r.clipSeconds,fps:r.fps},note:null}),R=!0,new Promise(e=>V.push(e))}async function X(){let e=B;if(!e)return null;B=null;let t=e.elapsed(),n=V;V=[],F.setState({recording:null,busy:`Saving the clip…`});let r=null;try{let n=await e.stop(),i=g(_().label,new Date,`webm`),a=y(n,{kind:`clip`,name:i,width:e.width,height:e.height,seconds:t});m(a.url,i),r={name:i,bytes:n.size,seconds:t,type:n.type,width:e.width,height:e.height},H(`🎬 Saved ${i}, ${Math.round(t)} s at ${e.width}×${e.height}`,`info`,[{key:`🎬 Saved {name}, {seconds} s at {width}×{height}`,values:{name:i,seconds:Math.round(t),width:e.width,height:e.height}}])}catch(e){let t=e instanceof Error?e.message:String(e);H(`The clip failed: ${t}`,`error`,[{key:`The clip failed: {error}`,values:{error:t}}])}finally{F.setState({busy:null})}for(let e of n)e(r);return r}var Te=()=>B?X():Y(),Z=(e,t=100)=>Math.round(e*t)/t,Q=e=>Z(e*180/Math.PI,10),$={state(){let e=F.getState();return{frozen:l.getState().frozen,camera:{x:Z(I.x),y:Z(I.y),z:Z(I.z),yaw:Q(I.yaw),pitch:Q(I.pitch),roll:Q(I.roll),fov:Z(I.fov,10)},filter:e.filter,overlays:{stamp:e.stamp,caption:e.caption,guides:e.guides},dof:e.dof?{focus:e.focus,blur:e.blur}:null,daytime:e.daytime,orbit:e.orbit,recording:e.recording?{seconds:Z((performance.now()-e.recording.started)/1e3,10),limit:e.recording.limit,fps:e.recording.fps}:null,busy:e.busy,note:e.note?.text??null,frames:L?.frames()??0,gallery:p.getState().items.map(e=>({kind:e.kind,name:e.name,bytes:e.bytes,width:e.width,height:e.height,seconds:e.seconds&&Z(e.seconds,10)}))}},set(e){let t={};re(e.filter)&&(t.filter=e.filter);for(let n of[`stamp`,`caption`,`guides`,`dof`,`panel`])typeof e[n]==`boolean`&&(t[n]=e[n]);return typeof e.focus==`number`&&(t.focus=Math.max(.3,e.focus)),typeof e.blur==`number`&&(t.blur=Math.min(1,Math.max(0,e.blur))),v.includes(e.scale)&&(t.scale=e.scale),(e.fps===30||e.fps===60)&&(t.fps=e.fps),typeof e.clipSeconds==`number`&&(t.clipSeconds=Math.min(60,Math.max(1,e.clipSeconds))),typeof e.orbit==`string`&&(t.orbit=e.orbit),K(t),e.daytime===`golden`?G(P):(typeof e.daytime==`number`||e.daytime===null)&&G(e.daytime),typeof e.frozen==`boolean`&&W(e.frozen),typeof e.fov==`number`&&(I.fov=Math.min(110,Math.max(15,e.fov))),typeof e.roll==`number`&&(I.roll=Math.min(w,Math.max(-w,e.roll*Math.PI/180))),$.state()},fly(e,t,n,r=0,i=0){return Object.assign(I,{x:e,y:t,z:n,yaw:r*Math.PI/180,pitch:i*Math.PI/180,vx:0,vy:0,vz:0}),K({orbit:`free`}),$.state().camera},shot:e=>J(v.includes(e)?e:void 0),record(e,t){return $.set({clipSeconds:e,fps:t?.fps,orbit:t?.orbit}),Y()}};export{ve as CLIP_SECONDS,P as GOLDEN_HOUR,D as a,Se as activeClip,k as c,I as cam,ne as d,Ce as enter,S as f,we as focusCenter,ce as i,le as l,U as leave,w as n,fe as o,q as overlayOptions,C as p,$ as probe,se as r,be as requestFrame,pe as s,ye as setBridge,G as setDaytime,W as setFrozen,Y as startRecording,X as stopRecording,N as t,xe as takeRedraw,J as takeShot,Te as toggleRecording,b as u,K as update,F as usePhoto};
|