synabun 2.0.0 → 2.0.5
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/CHANGELOG.md +57 -0
- package/NOTICE +5 -0
- package/README.md +1 -1
- package/THIRD-PARTY-LICENSES.md +46 -0
- package/benchmarks/fixtures/browser/README.md +1 -1
- package/benchmarks/fixtures/desktop/README.md +1 -1
- package/docs/whatsapp.md +2 -2
- package/hooks/claude-code/pre-compact.mjs +11 -0
- package/hooks/claude-code/prompt-submit.mjs +60 -184
- package/hooks/claude-code/session-start.mjs +73 -16
- package/hooks/claude-code/shared.mjs +20 -0
- package/hooks/claude-code/stop.mjs +5 -5
- package/lib/start-launcher.js +88 -1
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -3
- package/neural-interface/i18n/en.json +1500 -153
- package/neural-interface/i18n/pt-BR.json +1498 -152
- package/neural-interface/lib/assistant-api.js +62 -6
- package/neural-interface/lib/assistant-brains/claude.js +4 -0
- package/neural-interface/lib/assistant-catalog.js +179 -27
- package/neural-interface/lib/assistant-config.js +31 -2
- package/neural-interface/lib/assistant-dispatch.js +62 -13
- package/neural-interface/lib/assistant-hidden-models.js +393 -66
- package/neural-interface/lib/assistant-memory.js +24 -10
- package/neural-interface/lib/assistant-persona.js +6 -2
- package/neural-interface/lib/assistant-pricing.js +21 -6
- package/neural-interface/lib/assistant-runtime.js +181 -12
- package/neural-interface/lib/assistant-task-prompt.js +13 -3
- package/neural-interface/lib/assistant-test-density.js +142 -0
- package/neural-interface/lib/assistant-user-context-budgets.js +123 -0
- package/neural-interface/lib/assistant-user-context.js +908 -0
- package/neural-interface/lib/assistant-user-knowledge.js +328 -0
- package/neural-interface/lib/assistant-user-learn.js +404 -0
- package/neural-interface/lib/assistant-user-threads.js +226 -0
- package/neural-interface/lib/assistant-user-writer.js +181 -0
- package/neural-interface/lib/browser-background-tab.js +134 -0
- package/neural-interface/lib/browser-screenshot.js +678 -61
- package/neural-interface/lib/claude-agent-bridge.js +33 -6
- package/neural-interface/lib/claude-model-catalog.js +30 -2
- package/neural-interface/lib/claude-temporary.js +46 -7
- package/neural-interface/lib/cloudflared/install.js +533 -0
- package/neural-interface/lib/cloudflared/manager.js +545 -0
- package/neural-interface/lib/cloudflared/pins.js +115 -0
- package/neural-interface/lib/cloudflared/pins.json +63 -0
- package/neural-interface/lib/cloudflared/tunnel.js +265 -0
- package/neural-interface/lib/editor-completion-endpoint.js +264 -0
- package/neural-interface/lib/editor-completion-opencode.js +436 -0
- package/neural-interface/lib/editor-completion.js +714 -0
- package/neural-interface/lib/editor-config.js +149 -0
- package/neural-interface/lib/editor-files-api.js +268 -0
- package/neural-interface/lib/editor-git-api.js +134 -0
- package/neural-interface/lib/file-explorer-api.js +1039 -0
- package/neural-interface/lib/file-explorer-system.js +355 -0
- package/neural-interface/lib/file-explorer-trash.ps1 +85 -0
- package/neural-interface/lib/file-explorer-watch.js +239 -0
- package/neural-interface/lib/git-diff-api.js +103 -0
- package/neural-interface/lib/git-read.js +202 -0
- package/neural-interface/lib/greeting/api.js +89 -0
- package/neural-interface/lib/greeting/budgets.js +90 -0
- package/neural-interface/lib/greeting/engine.js +461 -0
- package/neural-interface/lib/greeting/facts.js +320 -0
- package/neural-interface/lib/greeting/sources.js +252 -0
- package/neural-interface/lib/greeting/writer.js +139 -0
- package/neural-interface/lib/http-guards.js +189 -13
- package/neural-interface/lib/machine-names.js +88 -0
- package/neural-interface/lib/memory-api.js +31 -7
- package/neural-interface/lib/native-loop-providers.js +10 -5
- package/neural-interface/lib/plugin-installer.js +4 -2
- package/neural-interface/lib/project-storage.js +5 -7
- package/neural-interface/lib/request-gate.js +589 -0
- package/neural-interface/lib/ui-blob-api.js +108 -0
- package/neural-interface/lib/ui-blob-store.js +68 -0
- package/neural-interface/package-lock.json +701 -2
- package/neural-interface/package.json +13 -2
- package/neural-interface/public/install-app.html +9 -6
- package/neural-interface/public/offline.html +3 -2
- package/neural-interface/public/onboarding.html +12 -1
- package/neural-interface/public/shared/agent-runtime-options.js +22 -6
- package/neural-interface/public/shared/assistant/asst-automation.js +286 -0
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +312 -62
- package/neural-interface/public/shared/assistant/asst-composer.js +11 -1
- package/neural-interface/public/shared/assistant/asst-mascot.js +18 -58
- package/neural-interface/public/shared/assistant/asst-menu.js +12 -8
- package/neural-interface/public/shared/assistant/asst-panel.js +150 -28
- package/neural-interface/public/shared/assistant/asst-render.js +162 -19
- package/neural-interface/public/shared/assistant/asst-route-models.js +108 -0
- package/neural-interface/public/shared/assistant/asst-route.js +23 -329
- package/neural-interface/public/shared/assistant/asst-routes-editor.js +495 -0
- package/neural-interface/public/shared/assistant/asst-sanitize.js +8 -1
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +31 -9
- package/neural-interface/public/shared/assistant/asst-state.js +185 -1
- package/neural-interface/public/shared/assistant/asst-styles.js +158 -4
- package/neural-interface/public/shared/blob-store.js +111 -22
- package/neural-interface/public/shared/cdx/cdx-panel.js +32 -11
- package/neural-interface/public/shared/cdx/cdx-render.js +25 -89
- package/neural-interface/public/shared/cdx/cdx-styles.js +36 -0
- package/neural-interface/public/shared/cdx/cdx-tabs.js +87 -4
- package/neural-interface/public/shared/constants.js +6 -1
- package/neural-interface/public/shared/cp/cp-rehydrate.js +2 -1
- package/neural-interface/public/shared/cp/cp-styles.js +15 -0
- package/neural-interface/public/shared/editor/editor-ai-logic.js +409 -0
- package/neural-interface/public/shared/editor/editor-ai.js +619 -0
- package/neural-interface/public/shared/editor/editor-commands.js +212 -0
- package/neural-interface/public/shared/editor/editor-compare.js +103 -0
- package/neural-interface/public/shared/editor/editor-completion-list.js +172 -0
- package/neural-interface/public/shared/editor/editor-doc.js +257 -0
- package/neural-interface/public/shared/editor/editor-git-logic.js +131 -0
- package/neural-interface/public/shared/editor/editor-git.js +95 -0
- package/neural-interface/public/shared/editor/editor-languages.js +156 -0
- package/neural-interface/public/shared/editor/editor-lint.js +229 -0
- package/neural-interface/public/shared/editor/editor-loader.js +51 -0
- package/neural-interface/public/shared/editor/editor-markdown.js +90 -0
- package/neural-interface/public/shared/editor/editor-menu.js +233 -0
- package/neural-interface/public/shared/editor/editor-minimap.js +371 -0
- package/neural-interface/public/shared/editor/editor-palette-logic.js +192 -0
- package/neural-interface/public/shared/editor/editor-palette.js +125 -0
- package/neural-interface/public/shared/editor/editor-panel-logic.js +288 -0
- package/neural-interface/public/shared/editor/editor-panel.js +2099 -0
- package/neural-interface/public/shared/editor/editor-prefs.js +224 -0
- package/neural-interface/public/shared/editor/editor-safety.js +500 -0
- package/neural-interface/public/shared/editor/editor-search.js +352 -0
- package/neural-interface/public/shared/editor/editor-statusbar.js +144 -0
- package/neural-interface/public/shared/editor/editor-tabs-logic.js +331 -0
- package/neural-interface/public/shared/editor/editor-tabs.js +233 -0
- package/neural-interface/public/shared/editor/editor-theme.js +244 -0
- package/neural-interface/public/shared/editor/editor-view.js +332 -0
- package/neural-interface/public/shared/explorer/fx-api.js +216 -0
- package/neural-interface/public/shared/explorer/fx-links.js +204 -0
- package/neural-interface/public/shared/explorer/fx-logic.js +537 -0
- package/neural-interface/public/shared/explorer/fx-main.js +865 -0
- package/neural-interface/public/shared/explorer/fx-names.js +87 -0
- package/neural-interface/public/shared/explorer/fx-ops.js +370 -0
- package/neural-interface/public/shared/explorer/fx-popups.js +490 -0
- package/neural-interface/public/shared/explorer/fx-tree.js +790 -0
- package/neural-interface/public/shared/file-links.js +339 -0
- package/neural-interface/public/shared/greeting/greeting-card.js +178 -0
- package/neural-interface/public/shared/greeting/greeting-view.js +148 -0
- package/neural-interface/public/shared/html-shell.js +160 -165
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +4 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-greeting.js +47 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +99 -17
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +7 -1
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +5 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +40 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +3 -2
- package/neural-interface/public/shared/pwa-install-page.js +29 -1
- package/neural-interface/public/shared/pwa-install.css +3 -3
- package/neural-interface/public/shared/pwa-install.js +100 -1
- package/neural-interface/public/shared/settings/settings-code-editor-pane.js +412 -0
- package/neural-interface/public/shared/settings/settings-code-editor.js +328 -0
- package/neural-interface/public/shared/settings/settings-greeting.js +133 -0
- package/neural-interface/public/shared/settings/settings-ia.js +18 -4
- package/neural-interface/public/shared/settings/settings-user-context.js +154 -0
- package/neural-interface/public/shared/start-bridge.js +238 -19
- package/neural-interface/public/shared/styles.css +1414 -721
- package/neural-interface/public/shared/synabun-mascot.js +20 -56
- package/neural-interface/public/shared/tunnel-view.js +167 -0
- package/neural-interface/public/shared/ui-claude-panel.js +157 -16
- package/neural-interface/public/shared/ui-detail.js +15 -0
- package/neural-interface/public/shared/ui-explorer.js +22 -0
- package/neural-interface/public/shared/ui-file-explorer.js +481 -2496
- package/neural-interface/public/shared/ui-file-links.js +103 -0
- package/neural-interface/public/shared/ui-help.js +26 -0
- package/neural-interface/public/shared/ui-invite.js +126 -116
- package/neural-interface/public/shared/ui-keybinds.js +4 -0
- package/neural-interface/public/shared/ui-loading.js +159 -15
- package/neural-interface/public/shared/ui-menubar.js +12 -30
- package/neural-interface/public/shared/ui-native-loop-router-state.js +11 -0
- package/neural-interface/public/shared/ui-native-loop-router.js +15 -2
- package/neural-interface/public/shared/ui-navbar.js +45 -21
- package/neural-interface/public/shared/ui-settings.js +455 -488
- package/neural-interface/public/shared/ui-sidepanel-runtime.js +2 -1
- package/neural-interface/public/shared/ui-sync.js +16 -0
- package/neural-interface/public/shared/ui-terminal.js +23 -5
- package/neural-interface/public/shared/ui-tunnel.js +130 -0
- package/neural-interface/public/shared/ui-tutorial-steps.js +6 -2
- package/neural-interface/public/shared/ui-whiteboard.js +12 -0
- package/neural-interface/public/shared/ui-worker-end.js +245 -0
- package/neural-interface/public/shared/ui-workspaces.js +41 -27
- package/neural-interface/public/shared/worker-end.js +251 -0
- package/neural-interface/public/sw.js +2 -2
- package/neural-interface/public/vendor/codemirror/chunks/apl-CSDKT72Z.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/asciiarmor-JYYPU5BM.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/asn1-NRWCZDA6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/asterisk-5OU6D4ZQ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/brainfuck-ID4N4SYC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-4RZWGCS2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-ACTJM3JR.js +11 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-S6BMAXLK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-TO2RDOHQ.js +3 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-US2GMZZQ.js +13 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-WYYO5ZAJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-XALZTDJC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-YRNUTRDV.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/chunk-Z3QOKH62.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/clike-OWQBSOGL.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/clojure-KV75UQWC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/cmake-GTEP5Y3C.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/cobol-WCZ7QEGJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/coffeescript-TGLBOT6B.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/commonlisp-WVVI432V.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/crystal-S6R6HLKQ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/css-PDA2RINP.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/cypher-HL5QPL4C.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/d-HHJH2HAJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/diff-MN3A35BY.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-25SQLBVS.js +3 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-27ZGGJJS.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-4E52OJIF.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-6FT73XDC.js +2 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-BE6YGRMW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-CJSGKW2O.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-CRPH2WLI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-CTG7JEQN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-I3FEVELX.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-IM5BBSWZ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-KERUKTIF.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-LXTMWZAM.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-MABASSET.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-MJVBUZLL.js +3 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-MNB3WZVU.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-QYWXOE3U.js +7 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-TEBOFWLZ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-UNXFROM3.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-XL2SLQO6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-XO42Y3AP.js +6 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-Y2WWDWJK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-YFEZKWMU.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dist-ZY7SWQO6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dockerfile-3Y4R4NCH.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dtd-5343GJ4P.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/dylan-FI2CXSW2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ebnf-GNQ77YWA.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ecl-MRPUAE2L.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/eiffel-DZROES27.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/elm-4KICRFKQ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/erlang-3IHYC263.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/factor-C6D3E5UK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/fcl-VYTWUJMI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/forth-ZBO2EH5M.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/fortran-5NDCRWIK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/gas-SKRMOXFP.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/gherkin-L45YXZLW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/groovy-GLPTLN44.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/haskell-E7NF7P4Y.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/haxe-K2NVDOB6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/http-Q6DRQIJB.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/idl-MZYNJVLN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/javascript-6YRYK2HR.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/julia-HXEL2T5G.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/livescript-MV7CI2JZ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/lua-E36NHOOD.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mathematica-3XOZZCMC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mbox-ODYGFKS7.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mirc-WB43AWF5.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mllike-ZT6ET7ZH.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/modelica-LLMZPFGA.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mscgen-2OPNNYFH.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/mumps-6P3HWJH6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/nginx-TCGKQTRW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/nsis-ATIGIXTJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ntriples-5PLBI5OV.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/octave-QF2S3NL6.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/oz-JFIVFFH2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/pascal-JG6SW76V.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/perl-4B3IWVVO.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/pig-ABEBH4MI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/powershell-H32XE7TL.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/properties-NN644MMA.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/protobuf-YKWQK2J3.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/pug-RIYXEKFW.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/puppet-JZQ5WPEV.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/python-EBCGGHAC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/q-5UMH2YQY.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/r-7XMGG453.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/rpm-IEV7TSLR.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ruby-T4SPFPNM.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sas-GEDX67ET.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/scheme-FTLOWKPC.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/shell-HUFRKFSJ.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sieve-P5QUDVYO.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/smalltalk-2SORJNQI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/solr-M22TGAR5.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sparql-4M3KL752.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/spreadsheet-3K23LA4N.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/sql-VHRFMUBI.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/stex-QZDAQUY2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/stylus-7ZDKAKBD.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/swift-WCLCLGMR.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/tcl-JLMU6WOK.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/textile-4CHDKZ4T.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/tiddlywiki-DKMCZZQ4.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/tiki-F4JIG36Q.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/toml-BHMHTIM2.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/troff-YQ2KV5NT.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ttcn-ZHRCVFJY.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/ttcn-cfg-KJOVTY4X.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/turtle-535P5N6I.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/vb-76UMQHOT.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/vbscript-CGNDTK6Z.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/velocity-VSJDO5T5.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/verilog-4T6ETXIP.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/vhdl-T7FNAXUN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/webidl-P6MJSJ6J.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/xquery-UOVILRGN.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/yacas-CV2APROL.js +1 -0
- package/neural-interface/public/vendor/codemirror/chunks/z80-3KFNVM4M.js +1 -0
- package/neural-interface/public/vendor/codemirror/codemirror-6.43.14-75f05e67.min.js +2 -0
- package/neural-interface/public/vendor/codemirror/manifest.json +60 -0
- package/neural-interface/scripts/build-vendor.mjs +78 -2
- package/neural-interface/scripts/vendor-codemirror-entry.js +121 -0
- package/neural-interface/server.js +873 -1028
- package/neural-interface/templates/rulesets/README.md +1 -1
- package/package.json +2 -8
- package/setup.js +44 -7
- package/benchmarks/browser-live-results.json +0 -79
- package/benchmarks/browser-v2-results.json +0 -258
- package/neural-interface/lib/codex-capabilities.d.ts +0 -41
- package/neural-interface/public/category-logos/claude.svg +0 -1
- package/neural-interface/public/category-logos/gemini-color.svg +0 -1
- package/neural-interface/public/category-logos/openai.svg +0 -1
- package/neural-interface/public/category-logos/synabun.png +0 -0
- package/neural-interface/public/claude.svg +0 -1
- package/neural-interface/public/gallery.svg +0 -6
- package/neural-interface/public/leonardoai.svg +0 -1
- package/neural-interface/public/mcp.svg +0 -4
- package/neural-interface/public/opencode-logo-dark-square.svg +0 -1
- package/neural-interface/public/pin-svgrepo-com.svg +0 -25
- package/neural-interface/public/sessionicon.svg +0 -8
- package/neural-interface/public/toolbar-album.svg +0 -8
- package/neural-interface/public/toolbar-question.svg +0 -6
- package/neural-interface/public/toolbar-sessions.svg +0 -6
- package/neural-interface/scripts/codex-protocol-fixture.mjs +0 -83
- package/skills/synabun/synabunicon.png +0 -0
|
@@ -457,12 +457,19 @@
|
|
|
457
457
|
user-select: none;
|
|
458
458
|
}
|
|
459
459
|
|
|
460
|
-
/* ── Toolbar (vertical, left side) ──
|
|
460
|
+
/* ── Toolbar (vertical, left side) ──
|
|
461
|
+
Centred on the board, but no higher than just below the top-right toolbar's row (navbar + 20px + its 40px +
|
|
462
|
+
12px) as long as the whole rail still fits under it: on a short window the rail would otherwise rise under
|
|
463
|
+
that row where the row reaches this far left. Where it cannot fit there, it sits as low as it can and still
|
|
464
|
+
ends 20px above the board's bottom. (In translateY, 50% and 100% are the rail's own height.) */
|
|
461
465
|
#wb-toolbar {
|
|
462
466
|
position: absolute;
|
|
463
|
-
top:
|
|
467
|
+
--wb-rail-top: calc(var(--navbar-height, 48px) + 72px);
|
|
468
|
+
--wb-board-h: calc(100dvh - var(--terminal-height, 0px));
|
|
469
|
+
--wb-rail-y: max(calc(var(--wb-board-h) / 2 - 50%), min(var(--wb-rail-top), calc(var(--wb-board-h) - 100% - 20px)));
|
|
470
|
+
top: 0;
|
|
464
471
|
left: calc(var(--sidebar-total-width, 0px) + 20px);
|
|
465
|
-
transform: translateY(-
|
|
472
|
+
transform: translateY(var(--wb-rail-y));
|
|
466
473
|
z-index: 10;
|
|
467
474
|
display: flex;
|
|
468
475
|
flex-direction: column;
|
|
@@ -470,21 +477,6 @@
|
|
|
470
477
|
gap: 2px;
|
|
471
478
|
padding: 8px 4px;
|
|
472
479
|
pointer-events: auto;
|
|
473
|
-
transition: opacity 0.3s ease,
|
|
474
|
-
transform 0.45s cubic-bezier(0.22, 1, 0.36, 1),
|
|
475
|
-
visibility 0s;
|
|
476
|
-
}
|
|
477
|
-
/* "Hide all toolbars" (top-right chevron) — body.toolbars-hidden is set by ui-navbar.js.
|
|
478
|
-
visibility (not display) keeps layout so whiteboard shortcuts and picker positioning
|
|
479
|
-
keep working while the rail is hidden. Same idiom as #terminal-panel.hidden. */
|
|
480
|
-
body.toolbars-hidden #wb-toolbar {
|
|
481
|
-
opacity: 0;
|
|
482
|
-
transform: translate(-12px, -50%);
|
|
483
|
-
visibility: hidden;
|
|
484
|
-
pointer-events: none;
|
|
485
|
-
transition: opacity 0.3s ease,
|
|
486
|
-
transform 0.45s cubic-bezier(0.22, 1, 0.36, 1),
|
|
487
|
-
visibility 0s 0.45s;
|
|
488
480
|
}
|
|
489
481
|
.wb-tool {
|
|
490
482
|
width: 32px;
|
|
@@ -543,6 +535,24 @@
|
|
|
543
535
|
}
|
|
544
536
|
.wb-tool-sm { width: 26px; height: 26px; }
|
|
545
537
|
.wb-tool-sm svg { width: 14px; height: 14px; }
|
|
538
|
+
/* A setting the rail switches (Snap to grid), not a tool: on, it keeps the accent mark it had in the top-right
|
|
539
|
+
bar, so it never reads as the tool in use. */
|
|
540
|
+
.wb-tool.wb-toggle { position: relative; }
|
|
541
|
+
.wb-tool.wb-toggle.active { background: transparent; color: var(--t-bright); }
|
|
542
|
+
.wb-tool.wb-toggle.active:hover { background: var(--s-hover); }
|
|
543
|
+
.wb-tool.wb-toggle.active::after {
|
|
544
|
+
content: '';
|
|
545
|
+
position: absolute;
|
|
546
|
+
bottom: 2px;
|
|
547
|
+
left: 50%;
|
|
548
|
+
transform: translateX(-50%);
|
|
549
|
+
width: 6px;
|
|
550
|
+
height: 2.5px;
|
|
551
|
+
border-radius: 2px;
|
|
552
|
+
background: var(--accent-blue);
|
|
553
|
+
opacity: 0.9;
|
|
554
|
+
box-shadow: 0 0 6px var(--accent-blue);
|
|
555
|
+
}
|
|
546
556
|
.wb-tool-sep {
|
|
547
557
|
width: 20px;
|
|
548
558
|
height: 1px;
|
|
@@ -3960,10 +3970,7 @@
|
|
|
3960
3970
|
background: rgba(255,82,82,0.08);
|
|
3961
3971
|
}
|
|
3962
3972
|
|
|
3963
|
-
/*
|
|
3964
|
-
.cc-greeting-field {
|
|
3965
|
-
margin-bottom: 10px;
|
|
3966
|
-
}
|
|
3973
|
+
/* A small uppercase row label (Settings → Setup uses it; the greeting editor it came from is gone) */
|
|
3967
3974
|
.cc-greeting-label {
|
|
3968
3975
|
font-size: 10.5px;
|
|
3969
3976
|
text-transform: uppercase;
|
|
@@ -3973,40 +3980,6 @@
|
|
|
3973
3980
|
margin-bottom: 5px;
|
|
3974
3981
|
display: block;
|
|
3975
3982
|
}
|
|
3976
|
-
.cc-greeting-textarea {
|
|
3977
|
-
width: 100%;
|
|
3978
|
-
min-height: 60px;
|
|
3979
|
-
max-height: 160px;
|
|
3980
|
-
resize: vertical;
|
|
3981
|
-
background: rgba(255,255,255,0.03);
|
|
3982
|
-
border: 1px solid var(--b-subtle);
|
|
3983
|
-
border-radius: 6px;
|
|
3984
|
-
padding: 8px 10px;
|
|
3985
|
-
font-family: 'JetBrains Mono', monospace;
|
|
3986
|
-
font-size: 11px;
|
|
3987
|
-
line-height: 1.5;
|
|
3988
|
-
color: var(--t-primary);
|
|
3989
|
-
box-sizing: border-box;
|
|
3990
|
-
transition: border-color 0.15s;
|
|
3991
|
-
}
|
|
3992
|
-
.cc-greeting-textarea:focus {
|
|
3993
|
-
outline: none;
|
|
3994
|
-
border-color: rgba(255,255,255,0.15);
|
|
3995
|
-
}
|
|
3996
|
-
.cc-greeting-textarea::placeholder { color: var(--t-faint); }
|
|
3997
|
-
.cc-greeting-project-select {
|
|
3998
|
-
background: rgba(255,255,255,0.04);
|
|
3999
|
-
border: 1px solid var(--b-subtle);
|
|
4000
|
-
border-radius: 6px;
|
|
4001
|
-
padding: 5px 8px;
|
|
4002
|
-
font-family: inherit;
|
|
4003
|
-
font-size: 12px;
|
|
4004
|
-
color: var(--t-primary);
|
|
4005
|
-
cursor: pointer;
|
|
4006
|
-
min-width: 120px;
|
|
4007
|
-
}
|
|
4008
|
-
.cc-greeting-project-select:focus { outline: none; border-color: rgba(255,255,255,0.15); }
|
|
4009
|
-
.cc-greeting-project-select option { background: #1a1a1a; color: var(--t-primary); }
|
|
4010
3983
|
|
|
4011
3984
|
/* Custom dropdown */
|
|
4012
3985
|
.cc-dropdown {
|
|
@@ -4634,93 +4607,6 @@
|
|
|
4634
4607
|
margin-top: 4px;
|
|
4635
4608
|
}
|
|
4636
4609
|
|
|
4637
|
-
.cc-greeting-reminder-list { display: flex; flex-direction: column; gap: 4px; }
|
|
4638
|
-
.cc-greeting-reminder-row {
|
|
4639
|
-
display: flex;
|
|
4640
|
-
align-items: center;
|
|
4641
|
-
gap: 6px;
|
|
4642
|
-
padding: 4px 0;
|
|
4643
|
-
border-radius: 4px;
|
|
4644
|
-
transition: background 0.1s;
|
|
4645
|
-
}
|
|
4646
|
-
.cc-greeting-reminder-row:hover { background: rgba(255,255,255,0.02); }
|
|
4647
|
-
.cc-greeting-drag-handle {
|
|
4648
|
-
cursor: grab;
|
|
4649
|
-
color: var(--t-faint);
|
|
4650
|
-
font-size: 11px;
|
|
4651
|
-
padding: 2px;
|
|
4652
|
-
user-select: none;
|
|
4653
|
-
opacity: 0.4;
|
|
4654
|
-
transition: opacity 0.15s;
|
|
4655
|
-
}
|
|
4656
|
-
.cc-greeting-reminder-row:hover .cc-greeting-drag-handle { opacity: 0.8; }
|
|
4657
|
-
.cc-greeting-reminder-input {
|
|
4658
|
-
flex: 1;
|
|
4659
|
-
background: transparent;
|
|
4660
|
-
border: 1px solid transparent;
|
|
4661
|
-
border-radius: 4px;
|
|
4662
|
-
padding: 4px 6px;
|
|
4663
|
-
font-family: inherit;
|
|
4664
|
-
font-size: 12px;
|
|
4665
|
-
color: var(--t-primary);
|
|
4666
|
-
transition: border-color 0.15s, background 0.15s;
|
|
4667
|
-
}
|
|
4668
|
-
.cc-greeting-reminder-input:hover { border-color: var(--b-subtle); }
|
|
4669
|
-
.cc-greeting-reminder-input:focus {
|
|
4670
|
-
outline: none;
|
|
4671
|
-
border-color: rgba(255,255,255,0.12);
|
|
4672
|
-
background: rgba(255,255,255,0.03);
|
|
4673
|
-
}
|
|
4674
|
-
.cc-greeting-reminder-input::placeholder { color: var(--t-faint); }
|
|
4675
|
-
.cc-greeting-reminder-input.cmd {
|
|
4676
|
-
font-family: 'JetBrains Mono', monospace;
|
|
4677
|
-
font-size: 11px;
|
|
4678
|
-
}
|
|
4679
|
-
.cc-greeting-reminder-remove {
|
|
4680
|
-
background: none;
|
|
4681
|
-
border: none;
|
|
4682
|
-
color: var(--t-faint);
|
|
4683
|
-
cursor: pointer;
|
|
4684
|
-
padding: 2px 4px;
|
|
4685
|
-
font-size: 14px;
|
|
4686
|
-
line-height: 1;
|
|
4687
|
-
opacity: 0;
|
|
4688
|
-
transition: opacity 0.15s, color 0.15s;
|
|
4689
|
-
}
|
|
4690
|
-
.cc-greeting-reminder-row:hover .cc-greeting-reminder-remove { opacity: 0.6; }
|
|
4691
|
-
.cc-greeting-reminder-remove:hover { opacity: 1 !important; color: var(--accent-red); }
|
|
4692
|
-
.cc-greeting-checkboxes {
|
|
4693
|
-
display: flex;
|
|
4694
|
-
gap: 16px;
|
|
4695
|
-
margin-bottom: 10px;
|
|
4696
|
-
}
|
|
4697
|
-
.cc-greeting-var-hint {
|
|
4698
|
-
font-size: 10px;
|
|
4699
|
-
color: var(--t-faint);
|
|
4700
|
-
margin-top: 3px;
|
|
4701
|
-
line-height: 1.4;
|
|
4702
|
-
}
|
|
4703
|
-
.cc-greeting-cheatsheet-toggle {
|
|
4704
|
-
font-size: 10px;
|
|
4705
|
-
color: var(--accent-blue);
|
|
4706
|
-
margin-top: 4px;
|
|
4707
|
-
cursor: pointer;
|
|
4708
|
-
user-select: none;
|
|
4709
|
-
display: inline-flex;
|
|
4710
|
-
align-items: center;
|
|
4711
|
-
gap: 4px;
|
|
4712
|
-
opacity: 0.7;
|
|
4713
|
-
transition: opacity 0.15s;
|
|
4714
|
-
}
|
|
4715
|
-
.cc-greeting-cheatsheet-toggle:hover { opacity: 1; }
|
|
4716
|
-
.cc-greeting-cheatsheet-toggle.open { opacity: 1; }
|
|
4717
|
-
.cc-greeting-cheatsheet {
|
|
4718
|
-
margin-top: 6px;
|
|
4719
|
-
border: 1px solid var(--b-subtle);
|
|
4720
|
-
border-radius: 6px;
|
|
4721
|
-
background: rgba(255,255,255,0.02);
|
|
4722
|
-
overflow: hidden;
|
|
4723
|
-
}
|
|
4724
4610
|
.cc-cheatsheet-table {
|
|
4725
4611
|
width: 100%;
|
|
4726
4612
|
border-collapse: collapse;
|
|
@@ -5934,9 +5820,19 @@
|
|
|
5934
5820
|
position: fixed;
|
|
5935
5821
|
top: calc(var(--navbar-height, 48px) + 20px);
|
|
5936
5822
|
right: calc(20px + var(--right-panel-width, var(--claude-panel-width, 0px)));
|
|
5823
|
+
/* One row in the band between the left panels (Memory Explorer, File Explorer) and the right one, 20px clear of
|
|
5824
|
+
each, never over a left panel: where the band is narrower than the row, the dock takes a line of its own under
|
|
5825
|
+
the buttons (wrap-reverse: the buttons' line stays on top; see "Fit" below). What still reaches left of the
|
|
5826
|
+
band (no band at all between wide panels, a dropdown that opens leftwards) is cut off at the band's edge:
|
|
5827
|
+
nothing of the toolbar is drawn, or takes a click, over a left panel. */
|
|
5828
|
+
max-width: var(--topright-band);
|
|
5829
|
+
min-height: 40px; /* the dock's height: the buttons and the pills stay where they are when it hides */
|
|
5830
|
+
justify-content: flex-end;
|
|
5831
|
+
clip-path: inset(-100vh -100vw -200vh calc(var(--sidebar-total-width, 0px) + var(--right-panel-width, var(--claude-panel-width, 0px)) + 40px + 100% - 100vw));
|
|
5937
5832
|
transition: right 0.3s cubic-bezier(0.22, 1, 0.36, 1);
|
|
5938
5833
|
z-index: 400;
|
|
5939
5834
|
display: flex;
|
|
5835
|
+
flex-wrap: wrap-reverse;
|
|
5940
5836
|
align-items: center;
|
|
5941
5837
|
gap: 6px;
|
|
5942
5838
|
font-family: inherit;
|
|
@@ -5957,25 +5853,26 @@
|
|
|
5957
5853
|
display: none;
|
|
5958
5854
|
}
|
|
5959
5855
|
|
|
5960
|
-
/* ── Unified frosted glass dock bar ──
|
|
5856
|
+
/* ── Unified frosted glass dock bar ──
|
|
5857
|
+
z-index: the session pills (#term-minimized-tray) hang right below the bar, and what the dock opens
|
|
5858
|
+
(workspaces, bookmarks, invite) drops over them. Its backdrop-filter makes it a stacking context, so those
|
|
5859
|
+
menus' own z-index stops at the dock's: the dock itself has to be above the tray. */
|
|
5961
5860
|
#topright-inner {
|
|
5861
|
+
position: relative;
|
|
5862
|
+
z-index: 1;
|
|
5962
5863
|
display: flex;
|
|
5963
5864
|
align-items: center;
|
|
5964
|
-
|
|
5865
|
+
flex-shrink: 0;
|
|
5866
|
+
gap: 2px;
|
|
5965
5867
|
overflow: visible;
|
|
5966
|
-
max-width: 2000px;
|
|
5967
|
-
opacity: 1;
|
|
5968
5868
|
background: rgba(18, 18, 22, 0.65);
|
|
5969
5869
|
backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
|
|
5970
5870
|
-webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
|
|
5971
5871
|
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
5972
5872
|
border-radius: 14px;
|
|
5973
|
-
padding: 4px
|
|
5873
|
+
padding: 4px;
|
|
5974
5874
|
box-shadow: var(--shadow-md), var(--shadow-highlight);
|
|
5975
|
-
transition:
|
|
5976
|
-
opacity 0.3s ease,
|
|
5977
|
-
gap 0.35s ease,
|
|
5978
|
-
border-color 0.3s ease,
|
|
5875
|
+
transition: border-color 0.3s ease,
|
|
5979
5876
|
box-shadow 0.3s ease;
|
|
5980
5877
|
}
|
|
5981
5878
|
#topright-inner:hover {
|
|
@@ -5983,130 +5880,94 @@
|
|
|
5983
5880
|
box-shadow: var(--shadow-lg), var(--shadow-highlight);
|
|
5984
5881
|
}
|
|
5985
5882
|
|
|
5986
|
-
|
|
5987
|
-
|
|
5988
|
-
opacity: 0;
|
|
5989
|
-
gap: 0;
|
|
5990
|
-
overflow: hidden;
|
|
5991
|
-
pointer-events: none;
|
|
5992
|
-
padding: 0;
|
|
5993
|
-
border-width: 0;
|
|
5994
|
-
}
|
|
5995
|
-
|
|
5996
|
-
/* ── Thin divider between groups ── */
|
|
5997
|
-
.tr-divider {
|
|
5998
|
-
width: 1px;
|
|
5999
|
-
height: 14px;
|
|
6000
|
-
background: rgba(255, 255, 255, 0.08);
|
|
6001
|
-
flex-shrink: 0;
|
|
6002
|
-
margin: 0 2px;
|
|
6003
|
-
border-radius: 1px;
|
|
6004
|
-
}
|
|
6005
|
-
|
|
6006
|
-
/* ── Collapse toggle button ── */
|
|
6007
|
-
.topright-collapse-btn {
|
|
6008
|
-
width: 32px;
|
|
6009
|
-
height: 32px;
|
|
5883
|
+
/* The tools toggle and the agent side panels: one row of their own that never wraps, at the bar's right edge. */
|
|
5884
|
+
#topright-buttons {
|
|
6010
5885
|
display: flex;
|
|
6011
5886
|
align-items: center;
|
|
6012
|
-
justify-content: center;
|
|
6013
|
-
background: rgba(18, 18, 22, 0.65);
|
|
6014
|
-
backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
|
|
6015
|
-
-webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.3);
|
|
6016
|
-
border: 1px solid rgba(255,255,255,0.06);
|
|
6017
|
-
border-radius: 10px;
|
|
6018
|
-
color: var(--t-muted);
|
|
6019
|
-
cursor: pointer;
|
|
6020
|
-
transition: all 0.4s cubic-bezier(0.22, 1, 0.36, 1);
|
|
6021
|
-
position: relative;
|
|
6022
|
-
padding: 0;
|
|
6023
5887
|
flex-shrink: 0;
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
box-shadow: var(--shadow-md), var(--shadow-highlight);
|
|
5888
|
+
gap: 6px;
|
|
5889
|
+
min-height: 40px; /* the dock's height: a bar that wraps keeps its lines 40px apart, the buttons where they were */
|
|
6027
5890
|
}
|
|
6028
5891
|
|
|
6029
|
-
|
|
6030
|
-
|
|
6031
|
-
|
|
6032
|
-
color: var(--t-primary);
|
|
5892
|
+
/* Hidden by the tools toggle (#topright-tools-btn, ui-navbar.js): the buttons and the pills stay where they are. */
|
|
5893
|
+
#topright-controls.tools-hidden > #topright-inner {
|
|
5894
|
+
display: none;
|
|
6033
5895
|
}
|
|
6034
5896
|
|
|
6035
|
-
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
|
|
6040
|
-
|
|
6041
|
-
|
|
6042
|
-
|
|
6043
|
-
|
|
5897
|
+
/* ── Fit: the buttons one row in any band, nothing hidden, nothing over a left panel ──
|
|
5898
|
+
--topright-row is the row at its widest without the workspace name: the dock (the switcher with its save button,
|
|
5899
|
+
50px; seven tools of 30px and the update button; two dividers; the dock's gaps and edges: 298px in all, 266px
|
|
5900
|
+
while the update button is hidden), then --topright-buttons, the tools toggle and the four agent buttons with
|
|
5901
|
+
the gaps before them (190px). Below row + 45px of band the workspace name goes into the switcher's tooltip
|
|
5902
|
+
(--topright-compact; it shows from 40px on, up to 120px, and takes what the band leaves it). Below the row itself
|
|
5903
|
+
the bar wraps (#topright-controls: flex-wrap: wrap-reverse): the toggle and the agent buttons stay on top, in one
|
|
5904
|
+
row, and the dock takes a line of its own right under them, right-aligned, still one row. --topright-compact is
|
|
5905
|
+
1 below its width and 0 from it up (tan(atan2()) divides a length by a length); it lives on :root so that a
|
|
5906
|
+
style query reaches the name. Change --topright-row (or --topright-buttons) with the controls of the row. */
|
|
5907
|
+
@property --topright-compact {
|
|
5908
|
+
syntax: '<number>';
|
|
5909
|
+
inherits: true;
|
|
5910
|
+
initial-value: 0;
|
|
6044
5911
|
}
|
|
6045
|
-
|
|
6046
|
-
|
|
6047
|
-
|
|
6048
|
-
|
|
6049
|
-
|
|
6050
|
-
gap: 3px;
|
|
6051
|
-
align-items: center;
|
|
6052
|
-
opacity: 0;
|
|
6053
|
-
transition: opacity 0.3s ease;
|
|
6054
|
-
pointer-events: none;
|
|
5912
|
+
:root {
|
|
5913
|
+
--topright-band: calc(100vw - var(--sidebar-total-width, 0px) - var(--right-panel-width, var(--claude-panel-width, 0px)) - 40px);
|
|
5914
|
+
--topright-buttons: 190px;
|
|
5915
|
+
--topright-row: calc(298px + var(--topright-buttons));
|
|
5916
|
+
--topright-compact: clamp(0, tan(atan2(calc(var(--topright-row) + 45px - var(--topright-band)), 0.01px)), 1);
|
|
6055
5917
|
}
|
|
6056
|
-
|
|
6057
|
-
|
|
6058
|
-
width: 3px;
|
|
6059
|
-
height: 3px;
|
|
6060
|
-
border-radius: 50%;
|
|
6061
|
-
background: rgba(160, 200, 255, 0.45);
|
|
6062
|
-
transition: background 0.3s ease;
|
|
5918
|
+
:root:has(#topright-update-btn[style*="none"]) {
|
|
5919
|
+
--topright-row: calc(266px + var(--topright-buttons));
|
|
6063
5920
|
}
|
|
6064
|
-
|
|
6065
|
-
|
|
6066
|
-
|
|
6067
|
-
|
|
6068
|
-
height: 32px;
|
|
6069
|
-
border-radius: 10px;
|
|
6070
|
-
background: rgba(16, 16, 20, 0.7);
|
|
6071
|
-
border-color: rgba(110, 181, 255, 0.08);
|
|
6072
|
-
box-shadow: 0 0 12px rgba(110, 181, 255, 0.04),
|
|
6073
|
-
inset 0 0 8px rgba(110, 181, 255, 0.02);
|
|
5921
|
+
@container style(--topright-compact: 1) {
|
|
5922
|
+
#ws-active-name {
|
|
5923
|
+
display: none;
|
|
5924
|
+
}
|
|
6074
5925
|
}
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
|
|
6078
|
-
|
|
6079
|
-
|
|
5926
|
+
/* The session pills (#term-minimized-tray, a child of the row): a column under the bar, one pill per line,
|
|
5927
|
+
right-aligned with its right edge (the last agent button). The same
|
|
5928
|
+
place whether the tools show or not; under the dock's line where the bar wrapped. Never wider than the band, so
|
|
5929
|
+
nothing of them lies over a left panel (a pill gives its label up first); in Focus Mode they also keep clear of
|
|
5930
|
+
the whiteboard rail at the band's left edge (--topright-tray-inset: its 42px and 8px). The row slides left with
|
|
5931
|
+
a right side panel and takes them along. Nothing in the row hides them: the menus the dock opens draw over them
|
|
5932
|
+
(#topright-inner's z-index, an opaque menu). Only the code editor hides the whole row, pills included
|
|
5933
|
+
(body.fe-editor-open): it fills the band they hang in. The tray's own box takes no click: what lies beside the
|
|
5934
|
+
pills is the canvas's. */
|
|
5935
|
+
:root {
|
|
5936
|
+
--topright-tray-inset: 0px;
|
|
6080
5937
|
}
|
|
6081
|
-
|
|
6082
|
-
|
|
6083
|
-
#topright-controls.collapsed .collapse-chevron {
|
|
6084
|
-
opacity: 0;
|
|
6085
|
-
transform: scale(0.5);
|
|
5938
|
+
:root:has(#static-bg.visible) {
|
|
5939
|
+
--topright-tray-inset: 50px;
|
|
6086
5940
|
}
|
|
6087
|
-
|
|
6088
|
-
|
|
6089
|
-
|
|
5941
|
+
#topright-controls > #term-minimized-tray {
|
|
5942
|
+
right: 0;
|
|
5943
|
+
width: max-content;
|
|
5944
|
+
max-width: calc(var(--topright-band) - var(--topright-tray-inset));
|
|
6090
5945
|
flex-direction: column;
|
|
5946
|
+
flex-wrap: nowrap;
|
|
5947
|
+
align-items: flex-end;
|
|
5948
|
+
gap: 6px;
|
|
5949
|
+
pointer-events: none;
|
|
6091
5950
|
}
|
|
6092
|
-
|
|
6093
|
-
|
|
6094
|
-
#topright-controls.collapsed .collapse-dots span {
|
|
6095
|
-
animation: dotPulse 2.4s ease-in-out infinite;
|
|
5951
|
+
#topright-controls > #term-minimized-tray > * {
|
|
5952
|
+
pointer-events: auto;
|
|
6096
5953
|
}
|
|
6097
|
-
|
|
6098
|
-
|
|
6099
|
-
|
|
6100
|
-
|
|
6101
|
-
|
|
6102
|
-
#topright-controls
|
|
6103
|
-
|
|
6104
|
-
background: rgba(110, 181, 255, 0.7);
|
|
5954
|
+
/* A pill's label: 100px as everywhere, less in a narrow band, so that two pills share a line (the pill around its
|
|
5955
|
+
label is 60px, 62 with rounding, and 6px apart): a narrow band gets rows of two, not a stack of one, down to a
|
|
5956
|
+
band of 182px (two pills at the shortest label, 28px). It keeps that width on hover (widening, a pill would push the others onto another line under the pointer):
|
|
5957
|
+
its whole name is its tooltip (ui-navbar.js). */
|
|
5958
|
+
#topright-controls > #term-minimized-tray > .term-minimized-pill .term-minimized-pill-label,
|
|
5959
|
+
#topright-controls > #term-minimized-tray > .term-minimized-pill:hover .term-minimized-pill-label {
|
|
5960
|
+
max-width: clamp(28px, calc(var(--topright-band) - var(--topright-tray-inset) - 62px), 100px);
|
|
6105
5961
|
}
|
|
6106
5962
|
|
|
6107
|
-
|
|
6108
|
-
|
|
6109
|
-
|
|
5963
|
+
/* ── Thin divider between groups ── */
|
|
5964
|
+
.tr-divider {
|
|
5965
|
+
width: 1px;
|
|
5966
|
+
height: 14px;
|
|
5967
|
+
background: rgba(255, 255, 255, 0.08);
|
|
5968
|
+
flex-shrink: 0;
|
|
5969
|
+
margin: 0 2px;
|
|
5970
|
+
border-radius: 1px;
|
|
6110
5971
|
}
|
|
6111
5972
|
|
|
6112
5973
|
/* ── Icon buttons inside unified dock (transparent, no individual glass) ── */
|
|
@@ -6192,7 +6053,8 @@
|
|
|
6192
6053
|
font-weight: 600;
|
|
6193
6054
|
}
|
|
6194
6055
|
|
|
6195
|
-
/* ── Standalone buttons outside the unified bar (side panels) ── */
|
|
6056
|
+
/* ── Standalone buttons outside the unified bar (the tools toggle, the side panels) ── */
|
|
6057
|
+
#topright-tools-btn,
|
|
6196
6058
|
#topright-assistant-panel-btn,
|
|
6197
6059
|
#topright-claude-panel-btn,
|
|
6198
6060
|
#topright-codex-panel-btn,
|
|
@@ -6206,6 +6068,7 @@
|
|
|
6206
6068
|
width: 32px;
|
|
6207
6069
|
height: 32px;
|
|
6208
6070
|
}
|
|
6071
|
+
#topright-tools-btn:hover,
|
|
6209
6072
|
#topright-assistant-panel-btn:hover,
|
|
6210
6073
|
#topright-claude-panel-btn:hover,
|
|
6211
6074
|
#topright-codex-panel-btn:hover,
|
|
@@ -6213,64 +6076,114 @@
|
|
|
6213
6076
|
background: rgba(24, 24, 30, 0.8);
|
|
6214
6077
|
border-color: rgba(255, 255, 255, 0.1);
|
|
6215
6078
|
}
|
|
6079
|
+
/* The toggle's chevrons point the way the tools go: right to tuck them away, left to bring them back. */
|
|
6080
|
+
#topright-tools-btn svg {
|
|
6081
|
+
transition: transform 0.2s ease, filter 0.3s ease;
|
|
6082
|
+
}
|
|
6083
|
+
#topright-controls.tools-hidden #topright-tools-btn svg {
|
|
6084
|
+
transform: rotate(180deg);
|
|
6085
|
+
}
|
|
6086
|
+
@media (prefers-reduced-motion: reduce) {
|
|
6087
|
+
#topright-tools-btn svg {
|
|
6088
|
+
transition: none;
|
|
6089
|
+
}
|
|
6090
|
+
}
|
|
6091
|
+
/* An update waits behind the hidden tools: the update badge's green, as a dot on the toggle. */
|
|
6092
|
+
.topright-tools-dot {
|
|
6093
|
+
display: none;
|
|
6094
|
+
position: absolute;
|
|
6095
|
+
top: 5px;
|
|
6096
|
+
right: 5px;
|
|
6097
|
+
width: 6px;
|
|
6098
|
+
height: 6px;
|
|
6099
|
+
border-radius: 50%;
|
|
6100
|
+
background: #34c759;
|
|
6101
|
+
box-shadow: 0 0 0 2px rgba(18, 18, 22, 0.9);
|
|
6102
|
+
pointer-events: none;
|
|
6103
|
+
}
|
|
6104
|
+
#topright-controls.tools-hidden:has(#topright-update-btn:not([style*="none"])) .topright-tools-dot {
|
|
6105
|
+
display: block;
|
|
6106
|
+
}
|
|
6216
6107
|
|
|
6217
|
-
|
|
6218
|
-
|
|
6219
|
-
|
|
6220
|
-
|
|
6108
|
+
/* Keyboard focus on the bar's own controls (the Style Guide's focus ring). */
|
|
6109
|
+
#topright-controls :is(.topright-icon-btn, #ws-indicator, #ws-quick-save):focus-visible {
|
|
6110
|
+
outline: 2px solid var(--stg-focus, #93c5fd);
|
|
6111
|
+
outline-offset: 2px;
|
|
6221
6112
|
}
|
|
6222
6113
|
|
|
6223
|
-
|
|
6114
|
+
/* The workspace switcher opens the dock: the layers icon, the active workspace's name (only while one is
|
|
6115
|
+
loaded, truncated, full in the tooltip) and its save button, or a chevron while none is. */
|
|
6116
|
+
#workspace-overlay {
|
|
6117
|
+
position: relative;
|
|
6224
6118
|
display: flex;
|
|
6225
6119
|
align-items: center;
|
|
6226
|
-
|
|
6120
|
+
flex-shrink: 0;
|
|
6227
6121
|
height: 30px;
|
|
6228
|
-
padding: 0 10px;
|
|
6229
6122
|
border-radius: 8px;
|
|
6230
6123
|
background: rgba(255, 255, 255, 0.04);
|
|
6231
|
-
border:
|
|
6232
|
-
|
|
6233
|
-
transition: background 0.2s ease,
|
|
6234
|
-
|
|
6124
|
+
/* its edge is a ring, not a border: the switch inside keeps the whole 30px of height */
|
|
6125
|
+
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04);
|
|
6126
|
+
transition: background 0.2s ease, box-shadow 0.2s ease;
|
|
6127
|
+
font-family: inherit;
|
|
6128
|
+
user-select: none;
|
|
6235
6129
|
}
|
|
6236
6130
|
|
|
6237
|
-
#ws-indicator:hover {
|
|
6131
|
+
#workspace-overlay:has(> #ws-indicator:hover, > .ws-quick-save:hover) {
|
|
6238
6132
|
background: rgba(255, 255, 255, 0.08);
|
|
6239
|
-
|
|
6133
|
+
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
|
|
6240
6134
|
}
|
|
6241
6135
|
|
|
6242
|
-
#ws-indicator.open {
|
|
6136
|
+
#workspace-overlay:has(> #ws-indicator.open) {
|
|
6243
6137
|
background: rgba(110, 181, 255, 0.08);
|
|
6244
|
-
|
|
6245
|
-
}
|
|
6246
|
-
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6138
|
+
box-shadow: inset 0 0 0 1px rgba(110, 181, 255, 0.15);
|
|
6139
|
+
}
|
|
6140
|
+
|
|
6141
|
+
#ws-indicator {
|
|
6142
|
+
display: flex;
|
|
6143
|
+
align-items: center;
|
|
6144
|
+
gap: 5px;
|
|
6145
|
+
height: 100%;
|
|
6146
|
+
padding: 0 8px;
|
|
6147
|
+
background: none;
|
|
6148
|
+
border: 0;
|
|
6149
|
+
border-radius: inherit;
|
|
6150
|
+
color: inherit;
|
|
6151
|
+
font: inherit;
|
|
6152
|
+
cursor: pointer;
|
|
6153
|
+
white-space: nowrap;
|
|
6154
|
+
}
|
|
6155
|
+
|
|
6156
|
+
.ws-icon {
|
|
6157
|
+
width: 14px; height: 14px;
|
|
6158
|
+
stroke: var(--t-muted);
|
|
6159
|
+
stroke-width: 1.7;
|
|
6160
|
+
fill: none;
|
|
6161
|
+
flex-shrink: 0;
|
|
6162
|
+
}
|
|
6163
|
+
|
|
6164
|
+
#ws-indicator.has-workspace .ws-icon {
|
|
6165
|
+
stroke: var(--accent-blue);
|
|
6257
6166
|
}
|
|
6258
6167
|
|
|
6259
6168
|
#ws-active-name {
|
|
6260
6169
|
font-size: 11.5px;
|
|
6261
6170
|
color: var(--t-secondary);
|
|
6262
|
-
max-width:
|
|
6171
|
+
max-width: clamp(40px, calc(var(--topright-band, 100vw) - var(--topright-row, 450px) - 5px), 120px);
|
|
6263
6172
|
overflow: hidden;
|
|
6264
6173
|
text-overflow: ellipsis;
|
|
6265
6174
|
}
|
|
6266
6175
|
|
|
6176
|
+
#ws-indicator:not(.has-workspace) #ws-active-name {
|
|
6177
|
+
display: none;
|
|
6178
|
+
}
|
|
6179
|
+
|
|
6267
6180
|
#ws-indicator.has-workspace #ws-active-name {
|
|
6268
6181
|
color: var(--t-primary);
|
|
6269
6182
|
}
|
|
6270
6183
|
|
|
6271
6184
|
.ws-chevron {
|
|
6272
6185
|
width: 11px; height: 11px;
|
|
6273
|
-
stroke: var(--t-
|
|
6186
|
+
stroke: var(--t-muted);
|
|
6274
6187
|
stroke-width: 2;
|
|
6275
6188
|
fill: none;
|
|
6276
6189
|
transition: transform 0.15s;
|
|
@@ -6295,8 +6208,7 @@
|
|
|
6295
6208
|
padding: 0;
|
|
6296
6209
|
transition: color 0.12s, background 0.12s;
|
|
6297
6210
|
flex-shrink: 0;
|
|
6298
|
-
margin-
|
|
6299
|
-
margin-right: -2px;
|
|
6211
|
+
margin-right: 4px;
|
|
6300
6212
|
}
|
|
6301
6213
|
|
|
6302
6214
|
.ws-quick-save svg {
|
|
@@ -6316,25 +6228,25 @@
|
|
|
6316
6228
|
color: var(--accent-blue);
|
|
6317
6229
|
}
|
|
6318
6230
|
|
|
6319
|
-
#ws-indicator.has-workspace .ws-quick-save {
|
|
6231
|
+
#ws-indicator.has-workspace ~ .ws-quick-save {
|
|
6320
6232
|
display: flex;
|
|
6321
6233
|
}
|
|
6322
6234
|
#ws-indicator.has-workspace .ws-chevron {
|
|
6323
6235
|
display: none;
|
|
6324
6236
|
}
|
|
6325
6237
|
#ws-indicator.has-workspace {
|
|
6326
|
-
padding-right:
|
|
6238
|
+
padding-right: 4px;
|
|
6327
6239
|
}
|
|
6328
6240
|
|
|
6329
6241
|
/* ── Dropdown (glassmorphic, matching topright-icon-btn style) ── */
|
|
6330
6242
|
#ws-dropdown {
|
|
6331
6243
|
position: absolute;
|
|
6332
6244
|
top: calc(100% + 12px);
|
|
6333
|
-
|
|
6245
|
+
left: -5px;
|
|
6334
6246
|
z-index: 100001;
|
|
6335
6247
|
width: 260px;
|
|
6336
6248
|
border-radius: 12px;
|
|
6337
|
-
background:
|
|
6249
|
+
background: rgb(18, 18, 22); /* opaque, as the bookmarks and invite menus: it drops over the session pills */
|
|
6338
6250
|
backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6339
6251
|
-webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6340
6252
|
border: 1px solid rgba(255,255,255,0.07);
|
|
@@ -6642,7 +6554,7 @@
|
|
|
6642
6554
|
max-height: 360px;
|
|
6643
6555
|
overflow-y: auto;
|
|
6644
6556
|
border-radius: 12px;
|
|
6645
|
-
background:
|
|
6557
|
+
background: rgb(18, 18, 22); /* opaque: it drops over the session pills (see #term-minimized-tray) */
|
|
6646
6558
|
backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6647
6559
|
-webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6648
6560
|
border: 1px solid rgba(255,255,255,0.07);
|
|
@@ -6676,7 +6588,7 @@
|
|
|
6676
6588
|
z-index: 100001;
|
|
6677
6589
|
width: 280px;
|
|
6678
6590
|
border-radius: 12px;
|
|
6679
|
-
background:
|
|
6591
|
+
background: rgb(18, 18, 22); /* opaque: it drops over the session pills (see #term-minimized-tray) */
|
|
6680
6592
|
backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6681
6593
|
-webkit-backdrop-filter: blur(var(--blur-heavy)) saturate(1.4);
|
|
6682
6594
|
border: 1px solid rgba(255,255,255,0.07);
|
|
@@ -7019,6 +6931,66 @@
|
|
|
7019
6931
|
to { transform: rotate(360deg); }
|
|
7020
6932
|
}
|
|
7021
6933
|
|
|
6934
|
+
/* The tunnel block of the Connection section (ui-invite.js tunnelBlock): the state as a word, one sentence
|
|
6935
|
+
about it, and the progress of the tunnel program's download. */
|
|
6936
|
+
.invite-status-dot.error { background: var(--accent-red); }
|
|
6937
|
+
.invite-status-dot.warn { background: var(--accent-orange); }
|
|
6938
|
+
|
|
6939
|
+
.invite-tunnel-spinner {
|
|
6940
|
+
width: 11px;
|
|
6941
|
+
height: 11px;
|
|
6942
|
+
flex-shrink: 0;
|
|
6943
|
+
fill: none;
|
|
6944
|
+
stroke: var(--accent-blue);
|
|
6945
|
+
stroke-width: 2.5;
|
|
6946
|
+
stroke-linecap: round;
|
|
6947
|
+
}
|
|
6948
|
+
|
|
6949
|
+
.invite-tunnel-state {
|
|
6950
|
+
flex: 1;
|
|
6951
|
+
min-width: 0;
|
|
6952
|
+
font-size: 11px;
|
|
6953
|
+
font-weight: 500;
|
|
6954
|
+
color: var(--t-primary);
|
|
6955
|
+
}
|
|
6956
|
+
|
|
6957
|
+
.invite-tunnel-state.error { color: var(--accent-red); }
|
|
6958
|
+
|
|
6959
|
+
.invite-tunnel-percent {
|
|
6960
|
+
font-size: 10px;
|
|
6961
|
+
font-family: 'JetBrains Mono', monospace;
|
|
6962
|
+
font-variant-numeric: tabular-nums;
|
|
6963
|
+
color: var(--t-secondary);
|
|
6964
|
+
}
|
|
6965
|
+
|
|
6966
|
+
.invite-progress {
|
|
6967
|
+
height: 3px;
|
|
6968
|
+
margin: 2px 0 6px;
|
|
6969
|
+
border-radius: 2px;
|
|
6970
|
+
background: var(--s-light);
|
|
6971
|
+
overflow: hidden;
|
|
6972
|
+
}
|
|
6973
|
+
|
|
6974
|
+
.invite-progress > span {
|
|
6975
|
+
display: block;
|
|
6976
|
+
height: 100%;
|
|
6977
|
+
border-radius: 2px;
|
|
6978
|
+
background: var(--accent-blue);
|
|
6979
|
+
transition: width 0.3s ease;
|
|
6980
|
+
}
|
|
6981
|
+
|
|
6982
|
+
.invite-tunnel-detail {
|
|
6983
|
+
font-size: 11px;
|
|
6984
|
+
line-height: 1.45;
|
|
6985
|
+
color: var(--t-secondary);
|
|
6986
|
+
overflow-wrap: anywhere;
|
|
6987
|
+
}
|
|
6988
|
+
|
|
6989
|
+
.invite-tunnel-copy {
|
|
6990
|
+
margin-top: 2px;
|
|
6991
|
+
font-size: 10px;
|
|
6992
|
+
}
|
|
6993
|
+
|
|
7022
6994
|
.count-badge--blue {
|
|
7023
6995
|
background: var(--accent-blue);
|
|
7024
6996
|
color: #000;
|
|
@@ -12903,8 +12875,7 @@
|
|
|
12903
12875
|
letter-spacing: 0.08em;
|
|
12904
12876
|
color: rgba(255,255,255,0.4);
|
|
12905
12877
|
}
|
|
12906
|
-
.settings-tab-body .cc-cheatsheet-table td:last-child
|
|
12907
|
-
.settings-tab-body .cc-greeting-cheatsheet-toggle {
|
|
12878
|
+
.settings-tab-body .cc-cheatsheet-table td:last-child {
|
|
12908
12879
|
color: rgba(255,255,255,0.42);
|
|
12909
12880
|
}
|
|
12910
12881
|
.settings-tab-body .cc-cheatsheet-table code,
|
|
@@ -13599,6 +13570,7 @@
|
|
|
13599
13570
|
.settings-nav-item[data-tab="browser"] { --stg-tile: #d9772b; }
|
|
13600
13571
|
.settings-nav-item[data-tab="connected-tools"] { --stg-tile: #a07a52; }
|
|
13601
13572
|
.settings-nav-item[data-tab="tool-access"] { --stg-tile: #c2577a; }
|
|
13573
|
+
.settings-nav-item[data-tab="code-editor"] { --stg-tile: #7da136; }
|
|
13602
13574
|
.settings-nav-item[data-tab="automations"] { --stg-tile: #c99a1e; }
|
|
13603
13575
|
.settings-nav-item[data-tab="messages"] { --stg-tile: #2fa84f; }
|
|
13604
13576
|
.settings-nav-item[data-tab="notifications"] { --stg-tile: #d9483f; }
|
|
@@ -13833,6 +13805,17 @@
|
|
|
13833
13805
|
.settings-panel .stg-pill[data-state="busy"]::before { background: var(--stg-help); animation: stgPulse 1s ease-in-out infinite; }
|
|
13834
13806
|
@keyframes stgPulse { 50% { opacity: 0.2; } }
|
|
13835
13807
|
|
|
13808
|
+
/* Online access → Public address (ui-settings.js tunnelRowHtml / tunnelExtraHtml): what sits under the tunnel's
|
|
13809
|
+
row belongs to it: the download's progress, the sentence about the state, the retry or copy button. */
|
|
13810
|
+
.settings-panel .stg-card-body > .stg-tunnel-extra { margin-top: calc(var(--stg-row-y) * -0.5); margin-bottom: var(--stg-row-y); }
|
|
13811
|
+
.settings-panel .stg-tunnel-extra:empty { display: none; }
|
|
13812
|
+
.settings-panel .stg-tunnel-extra > * + * { margin-top: 6px; }
|
|
13813
|
+
.settings-panel .stg-tunnel-extra > .stg-help { margin-top: 0; }
|
|
13814
|
+
.settings-panel .stg-tunnel-extra > * + .stg-help { margin-top: 6px; }
|
|
13815
|
+
.settings-panel .stg-tunnel-extra > * + .cc-copy-btn { margin-top: 8px; }
|
|
13816
|
+
.settings-panel .stg-tunnel-progress { height: 4px; max-width: 72ch; border-radius: 2px; background: var(--stg-control); overflow: hidden; }
|
|
13817
|
+
.settings-panel .stg-tunnel-progress > span { display: block; height: 100%; border-radius: 2px; background: var(--stg-accent-fill); transition: width 0.3s ease; }
|
|
13818
|
+
|
|
13836
13819
|
/* Switches: the macOS capsule, accent when on, a visible edge when off, and a focus ring (the input itself is 0×0) */
|
|
13837
13820
|
.settings-panel .recall-toggle-track { width: 32px; height: 18px; border-radius: 999px; background: rgba(255,255,255,0.16); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.22); }
|
|
13838
13821
|
.settings-panel .recall-toggle-track::after { top: 2px; left: 2px; width: 14px; height: 14px; background: #e8e8ea; box-shadow: 0 1px 2px rgba(0,0,0,0.35); }
|
|
@@ -14021,11 +14004,8 @@
|
|
|
14021
14004
|
.settings-panel .stg-card .cc-integration-label { font-size: 13px; color: var(--stg-text); white-space: normal; }
|
|
14022
14005
|
.settings-panel .stg-card .cc-integration-path { font-size: 12px; color: var(--stg-help); white-space: normal; overflow: visible; text-overflow: clip; }
|
|
14023
14006
|
.settings-panel .stg-card .cc-greeting-label { font-size: 13px; font-weight: 600; color: var(--stg-text); text-transform: none; letter-spacing: 0; }
|
|
14024
|
-
.settings-panel .stg-card .cc-greeting-cheatsheet-toggle { font-size: 12px; color: var(--stg-body); }
|
|
14025
14007
|
.settings-panel .stg-card .cc-cheatsheet-table :is(th, td),
|
|
14026
|
-
.settings-panel .stg-card .cc-cheatsheet-preview
|
|
14027
|
-
.settings-panel .stg-card .cc-greeting-reminder-input { font-size: 12px; }
|
|
14028
|
-
.settings-panel .stg-card .cc-greeting-checkboxes { display: block; }
|
|
14008
|
+
.settings-panel .stg-card .cc-cheatsheet-preview { font-size: 12px; }
|
|
14029
14009
|
.settings-panel .stg-mini-number {
|
|
14030
14010
|
width: 52px; padding: 2px 4px; font: inherit; font-size: 12px; text-align: center;
|
|
14031
14011
|
color: var(--stg-text); background: rgba(255,255,255,0.04); border: 1px solid var(--stg-line); border-radius: 4px;
|
|
@@ -14079,7 +14059,7 @@
|
|
|
14079
14059
|
.cc-dropdown-item, .browser-cfg-range-val, .bc-profile-name, .bc-profile-divider, .stg-mcp-note strong, .stg-mcp-note span,
|
|
14080
14060
|
.stg-mx-corner-head, .stg-mx-profile-name, .stg-mx-profile-del, .stg-mx-grp-name, .stg-mx-grp-count, .stg-mcp-section-header, .stg-mx-always-chip,
|
|
14081
14061
|
.stg-mx-ext-name, .stg-mx-ext-type, .stg-mx-ext-sub, .stg-mx-ext-toggle-name, .stg-mx-ext-cli-badge, .stg-mcp-empty-note, .stg-mcp-source-tab,
|
|
14082
|
-
.stg-mcp-page-tab, .cc-
|
|
14062
|
+
.stg-mcp-page-tab, .cc-cheatsheet-table code, .wa-mode-notes li, .recall-control-scale span,
|
|
14083
14063
|
select option
|
|
14084
14064
|
) { font-size: 12px; }
|
|
14085
14065
|
/* the capability chips grow with their letter */
|
|
@@ -14099,11 +14079,11 @@
|
|
|
14099
14079
|
.stg-mcp-note span, .stg-ocp-oauth-wait, .stg-cap-filter, .stg-provider-status-disconnected, .ocp-config-footer, .ocp-config-link, .ocp-danger-meta,
|
|
14100
14080
|
.stg-callout-note, .project-storage-path, .project-storage-item-meta, .project-storage-protection, .project-storage-group-path, .project-storage-group-total,
|
|
14101
14081
|
.project-storage-group-empty, .project-storage-stat span, .project-storage-safety-note, .cc-cheatsheet-table th, .cc-tool-category-count, .cc-panel-row-label,
|
|
14102
|
-
.cc-
|
|
14082
|
+
.cc-compat-note, .recall-control-scale span, .bc-profile-divider, .browser-cfg-range-val
|
|
14103
14083
|
) { color: var(--stg-help); opacity: 1; }
|
|
14104
14084
|
.settings-panel .settings-content :is(
|
|
14105
14085
|
.cc-dropdown-item, .cc-dropdown-value, .stg-code, .gfx-reset-btn, .stg-ocp-toggle-all, .project-storage-item-size, .project-storage-item-title-row strong,
|
|
14106
|
-
.wa-btn:not(.wa-btn-accent):not(.wa-btn-danger)
|
|
14086
|
+
.wa-btn:not(.wa-btn-accent):not(.wa-btn-danger)
|
|
14107
14087
|
) { color: var(--stg-body); }
|
|
14108
14088
|
.settings-panel .settings-content .cc-dropdown-item.active { color: var(--stg-text); }
|
|
14109
14089
|
.settings-panel .settings-content :is(.project-storage-risk.safe) { color: var(--stg-ok); }
|
|
@@ -14111,8 +14091,7 @@
|
|
|
14111
14091
|
.settings-panel .settings-content :is(.project-storage-risk.blocked, .ocp-srv-btn-stop, .wa-btn-danger) { color: var(--stg-err); }
|
|
14112
14092
|
.settings-panel .settings-content .project-storage-risk.protected { color: var(--stg-focus); }
|
|
14113
14093
|
/* Controls that only showed on hover stay visible: an action nobody can see is an action nobody finds. */
|
|
14114
|
-
.settings-panel .settings-content :is(.stg-ocp-remove-btn, .stg-model-all-btn, .stg-model-none-btn, .stg-ocp-apikey-btn, .stg-ocp-oauth-btn
|
|
14115
|
-
.cc-greeting-reminder-remove) { opacity: 1; }
|
|
14094
|
+
.settings-panel .settings-content :is(.stg-ocp-remove-btn, .stg-model-all-btn, .stg-model-none-btn, .stg-ocp-apikey-btn, .stg-ocp-oauth-btn) { opacity: 1; }
|
|
14116
14095
|
.settings-panel .settings-content :is(.stg-cap, .stg-cap-filter-letter) { color: var(--cap-c, var(--stg-body)); }
|
|
14117
14096
|
|
|
14118
14097
|
/* ── Reflow, phase 2b: nothing scrolls sideways in a 320–560px panel (a data table scrolls inside its own box) ── */
|
|
@@ -14963,8 +14942,7 @@
|
|
|
14963
14942
|
.settings-panel .settings-content .project-storage-icon-btn svg { width: 12px; height: 12px; }
|
|
14964
14943
|
|
|
14965
14944
|
/* ── Text-weight action: the default for secondary and in-row actions ── */
|
|
14966
|
-
.settings-panel .settings-content :is(.stg-text-btn, .ocp-config-link, .ocp-history-clear-btn, .
|
|
14967
|
-
.cc-greeting-reminder-remove),
|
|
14945
|
+
.settings-panel .settings-content :is(.stg-text-btn, .ocp-config-link, .ocp-history-clear-btn, .stg-mcp-env-add, .wa-link-btn),
|
|
14968
14946
|
.settings-panel .settings-content .stg-card :is(.stg-text-btn, .cc-copy-btn.stg-text-btn),
|
|
14969
14947
|
.settings-panel .settings-content .stg-provider-card .stg-action-btn.compact.stg-text-btn,
|
|
14970
14948
|
.settings-panel .settings-content #stg-ocp-providers > .stg-ocp-toggle-all {
|
|
@@ -14975,19 +14953,19 @@
|
|
|
14975
14953
|
color: var(--stg-link); background: none; border: 0; border-radius: 4px; box-shadow: none; opacity: 1;
|
|
14976
14954
|
cursor: pointer; transition: color 0.15s ease;
|
|
14977
14955
|
}
|
|
14978
|
-
.settings-panel .settings-content :is(.stg-text-btn, .ocp-config-link, .
|
|
14956
|
+
.settings-panel .settings-content :is(.stg-text-btn, .ocp-config-link, .stg-mcp-env-add, .wa-link-btn),
|
|
14979
14957
|
.settings-panel .settings-content #stg-ocp-providers > .stg-ocp-toggle-all { color: var(--stg-link); }
|
|
14980
|
-
.settings-panel .settings-content :is(.stg-text-btn, .ocp-config-link, .
|
|
14958
|
+
.settings-panel .settings-content :is(.stg-text-btn, .ocp-config-link, .stg-mcp-env-add, .wa-link-btn):hover:not(:disabled),
|
|
14981
14959
|
.settings-panel .settings-content .stg-card .stg-text-btn:hover:not(:disabled),
|
|
14982
14960
|
.settings-panel .settings-content #stg-ocp-providers > .stg-ocp-toggle-all:hover { color: var(--accent-blue); background: none; border: 0; text-decoration: none; }
|
|
14983
14961
|
.settings-panel .settings-content .stg-provider-card .stg-action-btn.compact.stg-text-btn:hover:not(:disabled) { color: var(--accent-blue); background: none; border: 0; }
|
|
14984
14962
|
.settings-panel .settings-content .stg-provider-card .stg-action-btn.compact.stg-text-btn.stg-text-btn-danger:hover:not(:disabled) { color: var(--stg-err); }
|
|
14985
14963
|
.settings-panel .settings-content :is(.stg-text-btn, .ocp-config-link, .wa-link-btn) svg { width: 11px; height: 11px; opacity: 0.9; fill: none; stroke: currentColor; stroke-width: 2; }
|
|
14986
14964
|
/* destructive text actions: grey at rest, red on hover */
|
|
14987
|
-
.settings-panel .settings-content :is(.stg-text-btn-danger, .ocp-history-clear-btn
|
|
14965
|
+
.settings-panel .settings-content :is(.stg-text-btn-danger, .ocp-history-clear-btn),
|
|
14988
14966
|
.settings-panel .settings-content .stg-card .stg-text-btn.stg-text-btn-danger,
|
|
14989
14967
|
.settings-panel .settings-content .stg-provider-card .stg-action-btn.compact.stg-text-btn-danger { color: rgba(255,255,255,0.6); }
|
|
14990
|
-
.settings-panel .settings-content :is(.stg-text-btn-danger, .ocp-history-clear-btn
|
|
14968
|
+
.settings-panel .settings-content :is(.stg-text-btn-danger, .ocp-history-clear-btn):hover:not(:disabled),
|
|
14991
14969
|
.settings-panel .settings-content .stg-card .stg-text-btn.stg-text-btn-danger:hover:not(:disabled),
|
|
14992
14970
|
.settings-panel .settings-content .stg-provider-side .stg-ocp-remove-btn:hover:not(:disabled),
|
|
14993
14971
|
.settings-panel .settings-content .ocp-danger-row .ocp-history-clear-btn:hover:not(:disabled) { color: var(--stg-err); background: none; }
|
|
@@ -15215,6 +15193,45 @@
|
|
|
15215
15193
|
.settings-panel .settings-content .stg-mcp-note svg { display: none; }
|
|
15216
15194
|
.settings-panel .settings-content .wa-callout-err { color: var(--stg-err); }
|
|
15217
15195
|
.settings-panel .settings-content .wa-callout-warn { color: var(--stg-warn); }
|
|
15196
|
+
/* Automation behavior: the Assistant's user context (three layers, the digest a new conversation starts with) */
|
|
15197
|
+
/* the line above the switches when they cannot be used: an older server, an engine that did not start, no answer */
|
|
15198
|
+
.settings-panel .settings-content .uc-status-note { margin: 0 0 10px; max-width: none; color: var(--stg-warn); }
|
|
15199
|
+
.settings-panel .settings-content .cc-integration-item.uc-disabled :is(.cc-integration-label, .cc-integration-path) { opacity: 0.7; }
|
|
15200
|
+
/* what stands in the way of a layer, under its help: a caption, amber when something is not happening */
|
|
15201
|
+
.settings-panel .settings-content .uc-layer-notes:empty { display: none; }
|
|
15202
|
+
.settings-panel .settings-content .uc-layer-note { margin: 3px 0 0; font-size: 12px; line-height: 1.45; color: var(--stg-help); overflow-wrap: anywhere; }
|
|
15203
|
+
.settings-panel .settings-content .uc-layer-note[data-tone="warn"] { color: var(--stg-warn); }
|
|
15204
|
+
.settings-panel .settings-content .uc-layer-note .uc-note-link { display: inline; width: auto; min-height: 0; margin: 0 0 0 2px; padding: 0; vertical-align: baseline; }
|
|
15205
|
+
.settings-panel .settings-content .uc-save-status { margin: 0 0 8px; max-width: none; color: var(--stg-err); }
|
|
15206
|
+
.settings-panel .settings-content .uc-applies { margin: 0 0 2px; max-width: none; }
|
|
15207
|
+
.settings-panel .settings-content :is(.uc-status-note, .uc-save-status, .uc-applies)[hidden] { display: none; }
|
|
15208
|
+
.settings-panel .settings-content .uc-digest { margin: 14px 0 16px; }
|
|
15209
|
+
/* Settings → Automations → Greeting: the preview is the card every panel shows (shared/greeting/), set left in the section. */
|
|
15210
|
+
.settings-panel .settings-content .gr-preview { margin-bottom: 4px; }
|
|
15211
|
+
.settings-panel .settings-content :is(.gr-preview-lead, .gr-preview-spend) { margin: 8px 0 0; max-width: none; }
|
|
15212
|
+
.settings-panel .settings-content :is(.gr-preview-lead, .gr-preview-spend, #gr-write)[hidden] { display: none; }
|
|
15213
|
+
.settings-panel .settings-content .gr-preview-card .sb-greet { --sbg-text: var(--stg-text); --sbg-2: var(--stg-body); --sbg-3: var(--stg-help); align-items: flex-start; max-width: none; margin: 8px 0 0; padding: 10px 12px; text-align: left; border: 1px solid var(--stg-line); border-radius: var(--r-card); }
|
|
15214
|
+
.settings-panel .settings-content .gr-preview-card:empty { display: none; }
|
|
15215
|
+
.settings-panel .settings-content #gr-write { margin-top: 10px !important; }
|
|
15216
|
+
.settings-panel .settings-content .uc-digest-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
|
|
15217
|
+
.settings-panel .settings-content .uc-digest-title { font-size: 13px; font-weight: 500; color: var(--stg-text); }
|
|
15218
|
+
.settings-panel .settings-content .uc-digest-count { flex-shrink: 0; font-size: 12px; color: var(--stg-help); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
15219
|
+
.settings-panel .settings-content .uc-digest-rows { display: flex; flex-direction: column; margin: 8px 0; border: 1px solid var(--stg-line); border-radius: var(--r-small); overflow: hidden; }
|
|
15220
|
+
.settings-panel .settings-content .uc-digest-rows:empty { display: none; }
|
|
15221
|
+
.settings-panel .settings-content .uc-digest-row {
|
|
15222
|
+
display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
|
|
15223
|
+
width: 100%; min-height: 0; margin: 0; padding: 7px 10px; border: 0; border-radius: 0; background: transparent;
|
|
15224
|
+
color: var(--stg-body); font: inherit; font-size: 13px; line-height: 1.4; text-align: left; cursor: pointer;
|
|
15225
|
+
}
|
|
15226
|
+
.settings-panel .settings-content .uc-digest-row + .uc-digest-row { border-top: 1px solid var(--stg-sep); }
|
|
15227
|
+
.settings-panel .settings-content .uc-digest-row:hover { background: var(--stg-group); color: var(--stg-text); }
|
|
15228
|
+
.settings-panel .settings-content .uc-digest-row:focus-visible { outline: 2px solid var(--stg-focus); outline-offset: -2px; }
|
|
15229
|
+
.settings-panel .settings-content .uc-digest-statement { min-width: 0; overflow-wrap: anywhere; }
|
|
15230
|
+
.settings-panel .settings-content .uc-digest-facet { flex-shrink: 0; font-size: 12px; color: var(--stg-help); white-space: nowrap; }
|
|
15231
|
+
.settings-panel .settings-content .uc-digest-rows > .stg-help { margin: 0; padding: 8px 10px; max-width: none; }
|
|
15232
|
+
/* "Knowledge of you" is off: no digest is sent, so none is listed */
|
|
15233
|
+
.settings-panel .settings-content .uc-digest[data-uc-digest-state="off"] .uc-digest-title { color: var(--stg-body); }
|
|
15234
|
+
.settings-panel .settings-content .uc-digest[data-uc-digest-state="off"] .uc-digest-help { display: none; }
|
|
15218
15235
|
/* a status bar above a page's groups: a 12px line of secondary text */
|
|
15219
15236
|
.settings-panel .settings-content .stg-pane > .settings-status,
|
|
15220
15237
|
.settings-panel .settings-content .stg-card .settings-status {
|
|
@@ -15582,6 +15599,51 @@
|
|
|
15582
15599
|
.settings-nav-item[data-tab="browser"] { --stg-tile: #c07b48; }
|
|
15583
15600
|
.settings-nav-item[data-tab="connected-tools"] { --stg-tile: #9a7e60; }
|
|
15584
15601
|
.settings-nav-item[data-tab="tool-access"] { --stg-tile: #b4607e; }
|
|
15602
|
+
.settings-nav-item[data-tab="code-editor"] { --stg-tile: #7e9948; }
|
|
15603
|
+
|
|
15604
|
+
/* Code editor → AI autocomplete (shared/settings/settings-code-editor-pane.js): the model list, a test's
|
|
15605
|
+
result, the list of files that are never sent. Settings tokens only. */
|
|
15606
|
+
.settings-panel .edt-engine[hidden], .settings-panel .edt-note[hidden], .settings-panel .edt-save-status[hidden] { display: none; }
|
|
15607
|
+
.settings-panel .edt-note, .settings-panel .edt-save-status { margin: 0 0 8px; color: var(--stg-warn); }
|
|
15608
|
+
.settings-panel .edt-save-status { margin: 8px 0 0; color: var(--stg-err); }
|
|
15609
|
+
.settings-panel .edt-models-field, .settings-panel .edt-exclude-field, .settings-panel .edt-usage-field { display: block; margin-top: 12px; }
|
|
15610
|
+
.settings-panel .edt-models-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
15611
|
+
.settings-panel .edt-models {
|
|
15612
|
+
margin-top: 6px; max-height: 232px; overflow-y: auto;
|
|
15613
|
+
border: 1px solid var(--stg-field-line); border-radius: 5px; background: var(--stg-field-bg);
|
|
15614
|
+
}
|
|
15615
|
+
.settings-panel .edt-models:empty { display: none; }
|
|
15616
|
+
.settings-panel .edt-model {
|
|
15617
|
+
display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 0 10px;
|
|
15618
|
+
padding: 4px 10px; border-top: 1px solid var(--stg-sep);
|
|
15619
|
+
}
|
|
15620
|
+
.settings-panel .edt-model:first-child { border-top: 0; }
|
|
15621
|
+
.settings-panel .edt-model.selected { background: rgba(255,255,255,0.04); }
|
|
15622
|
+
.settings-panel .edt-model-pick { display: flex; align-items: center; gap: 8px; min-width: 0; min-height: 22px; margin: 0; cursor: pointer; }
|
|
15623
|
+
.settings-panel .edt-model-pick input { flex-shrink: 0; margin: 0; }
|
|
15624
|
+
.settings-panel .edt-model-name { flex-shrink: 0; max-width: 60%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--stg-text); font-size: 12.5px; }
|
|
15625
|
+
.settings-panel .edt-model-meta { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--stg-help); font-size: 12px; }
|
|
15626
|
+
.settings-panel .edt-model-result { grid-column: 1 / -1; margin: 0 0 3px 22px; overflow-wrap: anywhere; }
|
|
15627
|
+
.settings-panel .edt-model-result[hidden], .settings-panel .edt-result[hidden] { display: none; }
|
|
15628
|
+
.settings-panel .edt-models-message { margin: 0; padding: 8px 10px; }
|
|
15629
|
+
.settings-panel [data-edt-tone="ok"] { color: var(--stg-ok); }
|
|
15630
|
+
.settings-panel [data-edt-tone="warn"] { color: var(--stg-warn); }
|
|
15631
|
+
.settings-panel [data-edt-tone="err"] { color: var(--stg-err); }
|
|
15632
|
+
.settings-panel .edt-note[data-edt-tone="neutral"] { color: var(--stg-help); }
|
|
15633
|
+
/* A model's own result reads as a note; only a failure is coloured. */
|
|
15634
|
+
.settings-panel .edt-model-result[data-edt-tone="ok"] { color: var(--stg-help); }
|
|
15635
|
+
.settings-panel .edt-result { overflow-wrap: anywhere; }
|
|
15636
|
+
.settings-panel .edt-key-row { align-items: center; gap: 8px; }
|
|
15637
|
+
.settings-panel .edt-key-state { margin-top: 4px; }
|
|
15638
|
+
/* File name patterns are code: the Settings code type (12px mono on 1.5). Named through its field, so that the
|
|
15639
|
+
panel's rule for text fields (13px, of the same weight as a plain textarea rule) does not take it over. */
|
|
15640
|
+
.settings-panel .settings-content .edt-exclude-field textarea.edt-exclude {
|
|
15641
|
+
display: block; width: 100%; box-sizing: border-box; min-height: 96px; margin: 6px 0; padding: 8px; resize: vertical;
|
|
15642
|
+
background: var(--stg-field-bg); color: var(--stg-text);
|
|
15643
|
+
border: 1px solid var(--stg-field-line); border-radius: 5px;
|
|
15644
|
+
font-family: var(--stg-mono); font-size: 12px; line-height: 1.5;
|
|
15645
|
+
}
|
|
15646
|
+
.settings-panel .settings-content .edt-exclude-field textarea.edt-exclude:disabled { opacity: 0.45; }
|
|
15585
15647
|
.settings-nav-item[data-tab="automations"] { --stg-tile: #b4953f; }
|
|
15586
15648
|
.settings-nav-item[data-tab="messages"] { --stg-tile: #4f9b63; }
|
|
15587
15649
|
.settings-nav-item[data-tab="notifications"] { --stg-tile: #bd5a52; }
|
|
@@ -16118,18 +16180,35 @@
|
|
|
16118
16180
|
100% { transform: scale(1); opacity: 1; }
|
|
16119
16181
|
}
|
|
16120
16182
|
|
|
16121
|
-
/* ── File Explorer (docked sidebar) ──
|
|
16183
|
+
/* ── File Explorer (docked sidebar) ──
|
|
16184
|
+
The tree and what it does are shared/explorer/ (docs/file-explorer.md).
|
|
16185
|
+
Its colours are the app's tokens; the git marks take the colours the code
|
|
16186
|
+
editor gives the same states (--ed-warn, --ed-add, --ed-del), so tree and
|
|
16187
|
+
editor read as one. The variables are declared for the panel and for what it
|
|
16188
|
+
opens over the page (menu, preview, questions, the branch popover). */
|
|
16189
|
+
#file-explorer-panel, .fe-ctx-flyout, .fe-modal-overlay, .fe-git-popover, .fe-jump-layer {
|
|
16190
|
+
--fe-bg: rgb(18, 18, 20);
|
|
16191
|
+
--fe-focus: var(--accent-blue);
|
|
16192
|
+
--fe-git-modified: #fbbf24;
|
|
16193
|
+
--fe-git-new: #9fe3b4;
|
|
16194
|
+
--fe-git-deleted: #f0a3a3;
|
|
16195
|
+
--fe-git-conflict: var(--accent-red);
|
|
16196
|
+
--fe-menu-bg: #16161a;
|
|
16197
|
+
--fe-menu-border: var(--b-light);
|
|
16198
|
+
--fe-menu-shadow: 0 12px 32px rgba(0,0,0,0.4);
|
|
16199
|
+
}
|
|
16122
16200
|
#file-explorer-panel {
|
|
16123
16201
|
position: fixed;
|
|
16124
16202
|
top: 0;
|
|
16125
16203
|
left: var(--explorer-width, 0px);
|
|
16126
16204
|
width: var(--file-explorer-width, 280px);
|
|
16127
16205
|
min-width: 240px;
|
|
16206
|
+
max-width: 100vw;
|
|
16128
16207
|
height: 100dvh;
|
|
16129
16208
|
z-index: 199;
|
|
16130
16209
|
display: flex;
|
|
16131
16210
|
flex-direction: column;
|
|
16132
|
-
background:
|
|
16211
|
+
background: var(--fe-bg);
|
|
16133
16212
|
border-right: none;
|
|
16134
16213
|
box-shadow: var(--shadow-sm);
|
|
16135
16214
|
transform: translateX(-100%);
|
|
@@ -16140,6 +16219,16 @@
|
|
|
16140
16219
|
transform: translateX(0);
|
|
16141
16220
|
padding-top: var(--navbar-height, 48px);
|
|
16142
16221
|
}
|
|
16222
|
+
/* An invited guest's page: the panel is the owner's and is not there. */
|
|
16223
|
+
#file-explorer-panel[hidden] { display: none; }
|
|
16224
|
+
#file-explorer-panel button:focus-visible,
|
|
16225
|
+
.fe-ctx-flyout button:focus-visible,
|
|
16226
|
+
.fe-modal button:focus-visible,
|
|
16227
|
+
.fe-git-popover button:focus-visible,
|
|
16228
|
+
.fe-git-popover select:focus-visible {
|
|
16229
|
+
outline: 2px solid var(--fe-focus);
|
|
16230
|
+
outline-offset: 1px;
|
|
16231
|
+
}
|
|
16143
16232
|
|
|
16144
16233
|
/* Filter bar */
|
|
16145
16234
|
.fe-filter {
|
|
@@ -16153,58 +16242,52 @@
|
|
|
16153
16242
|
width: 13px;
|
|
16154
16243
|
height: 13px;
|
|
16155
16244
|
fill: none;
|
|
16156
|
-
stroke:
|
|
16245
|
+
stroke: var(--t-secondary);
|
|
16157
16246
|
stroke-width: 2;
|
|
16158
16247
|
stroke-linecap: round;
|
|
16248
|
+
stroke-linejoin: round;
|
|
16159
16249
|
flex-shrink: 0;
|
|
16160
|
-
transition:
|
|
16250
|
+
transition: stroke 0.2s;
|
|
16161
16251
|
position: absolute;
|
|
16162
16252
|
left: 18px;
|
|
16163
16253
|
pointer-events: none;
|
|
16164
16254
|
}
|
|
16165
|
-
.fe-filter:focus-within .fe-filter-icon {
|
|
16166
|
-
stroke: rgba(255,255,255,0.5);
|
|
16167
|
-
}
|
|
16255
|
+
.fe-filter:focus-within .fe-filter-icon { stroke: var(--t-primary); }
|
|
16168
16256
|
.fe-filter input {
|
|
16169
16257
|
flex: 1;
|
|
16170
|
-
|
|
16171
|
-
|
|
16172
|
-
border
|
|
16173
|
-
|
|
16258
|
+
min-width: 0;
|
|
16259
|
+
background: var(--s-subtle);
|
|
16260
|
+
border: 1px solid var(--b-subtle);
|
|
16261
|
+
border-radius: var(--r-small);
|
|
16262
|
+
color: var(--t-bright);
|
|
16174
16263
|
font-size: 11.5px;
|
|
16175
|
-
padding: 7px
|
|
16264
|
+
padding: 7px 26px 7px 28px;
|
|
16176
16265
|
outline: none;
|
|
16177
16266
|
font-family: var(--ff-mono);
|
|
16178
16267
|
text-align: left;
|
|
16179
16268
|
transition: border-color 0.2s, background 0.2s;
|
|
16180
16269
|
}
|
|
16181
16270
|
.fe-filter input:focus {
|
|
16182
|
-
background:
|
|
16183
|
-
border-color:
|
|
16184
|
-
}
|
|
16185
|
-
.fe-filter input::placeholder {
|
|
16186
|
-
color: var(--t-dimmed);
|
|
16271
|
+
background: var(--s-light);
|
|
16272
|
+
border-color: var(--b-hover);
|
|
16187
16273
|
}
|
|
16274
|
+
.fe-filter input:focus-visible { outline: 2px solid var(--fe-focus); outline-offset: -1px; }
|
|
16275
|
+
.fe-filter input::placeholder { color: var(--t-secondary); }
|
|
16188
16276
|
#fe-filter-clear {
|
|
16189
16277
|
position: absolute;
|
|
16190
16278
|
right: 14px;
|
|
16191
16279
|
background: none;
|
|
16192
16280
|
border: none;
|
|
16193
|
-
color: var(--t-
|
|
16281
|
+
color: var(--t-secondary);
|
|
16194
16282
|
cursor: pointer;
|
|
16195
16283
|
font-size: 13px;
|
|
16196
|
-
padding: 2px
|
|
16284
|
+
padding: 2px 5px;
|
|
16197
16285
|
line-height: 1;
|
|
16198
|
-
opacity: 0;
|
|
16199
|
-
transition: opacity 0.15s;
|
|
16200
16286
|
border-radius: 3px;
|
|
16201
16287
|
z-index: 1;
|
|
16202
16288
|
}
|
|
16203
|
-
#fe-filter-clear
|
|
16204
|
-
|
|
16205
|
-
.fe-filter:has(input:not(:placeholder-shown)) .fe-filter-icon {
|
|
16206
|
-
stroke: rgba(255,255,255,0.45);
|
|
16207
|
-
}
|
|
16289
|
+
#fe-filter-clear[hidden] { display: none; }
|
|
16290
|
+
#fe-filter-clear:hover { color: var(--t-bright); background: var(--s-light); }
|
|
16208
16291
|
|
|
16209
16292
|
/* Project row — selector + branch button side by side */
|
|
16210
16293
|
.fe-project-row {
|
|
@@ -16225,10 +16308,10 @@
|
|
|
16225
16308
|
display: flex;
|
|
16226
16309
|
align-items: center;
|
|
16227
16310
|
gap: 7px;
|
|
16228
|
-
background:
|
|
16229
|
-
border: 1px solid
|
|
16230
|
-
border-radius:
|
|
16231
|
-
color: var(--t-
|
|
16311
|
+
background: var(--s-subtle);
|
|
16312
|
+
border: 1px solid var(--b-subtle);
|
|
16313
|
+
border-radius: var(--r-small);
|
|
16314
|
+
color: var(--t-bright);
|
|
16232
16315
|
font-size: 11.5px;
|
|
16233
16316
|
font-family: var(--ff-mono);
|
|
16234
16317
|
padding: 7px 10px;
|
|
@@ -16237,14 +16320,14 @@
|
|
|
16237
16320
|
transition: border-color 0.2s, background 0.2s;
|
|
16238
16321
|
text-align: left;
|
|
16239
16322
|
}
|
|
16240
|
-
.fe-project-btn:hover { border-color:
|
|
16323
|
+
.fe-project-btn:hover { border-color: var(--b-hover); }
|
|
16241
16324
|
.fe-project-selector.open .fe-project-btn {
|
|
16242
|
-
background:
|
|
16243
|
-
border-color:
|
|
16325
|
+
background: var(--s-light);
|
|
16326
|
+
border-color: var(--b-hover);
|
|
16244
16327
|
}
|
|
16245
16328
|
.fe-project-icon {
|
|
16246
16329
|
width: 13px; height: 13px;
|
|
16247
|
-
fill:
|
|
16330
|
+
fill: var(--t-secondary);
|
|
16248
16331
|
flex-shrink: 0;
|
|
16249
16332
|
}
|
|
16250
16333
|
.fe-project-label {
|
|
@@ -16256,7 +16339,7 @@
|
|
|
16256
16339
|
.fe-project-chevron {
|
|
16257
16340
|
width: 12px; height: 12px;
|
|
16258
16341
|
fill: none;
|
|
16259
|
-
stroke:
|
|
16342
|
+
stroke: var(--t-secondary);
|
|
16260
16343
|
stroke-width: 2;
|
|
16261
16344
|
stroke-linecap: round;
|
|
16262
16345
|
stroke-linejoin: round;
|
|
@@ -16270,11 +16353,11 @@
|
|
|
16270
16353
|
display: flex;
|
|
16271
16354
|
align-items: center;
|
|
16272
16355
|
gap: 4px;
|
|
16273
|
-
background:
|
|
16274
|
-
border: 1px solid
|
|
16275
|
-
border-radius:
|
|
16276
|
-
color:
|
|
16277
|
-
font-size:
|
|
16356
|
+
background: var(--s-subtle);
|
|
16357
|
+
border: 1px solid var(--b-subtle);
|
|
16358
|
+
border-radius: var(--r-small);
|
|
16359
|
+
color: var(--t-secondary);
|
|
16360
|
+
font-size: 10.5px;
|
|
16278
16361
|
font-family: var(--ff-mono);
|
|
16279
16362
|
padding: 0 8px;
|
|
16280
16363
|
cursor: pointer;
|
|
@@ -16288,31 +16371,26 @@
|
|
|
16288
16371
|
.fe-branch-btn svg {
|
|
16289
16372
|
width: 11px; height: 11px;
|
|
16290
16373
|
fill: none;
|
|
16291
|
-
stroke:
|
|
16374
|
+
stroke: currentColor;
|
|
16292
16375
|
stroke-width: 2;
|
|
16293
16376
|
stroke-linecap: round;
|
|
16294
16377
|
stroke-linejoin: round;
|
|
16295
16378
|
flex-shrink: 0;
|
|
16296
16379
|
}
|
|
16297
|
-
.fe-branch-btn:hover
|
|
16298
|
-
border-color: rgba(255,255,255,0.18);
|
|
16299
|
-
color: var(--t-primary);
|
|
16300
|
-
background: rgba(255,255,255,0.06);
|
|
16301
|
-
}
|
|
16302
|
-
.fe-branch-btn:hover svg { stroke: rgba(255,255,255,0.5); }
|
|
16380
|
+
.fe-branch-btn:hover,
|
|
16303
16381
|
.fe-branch-btn.active {
|
|
16304
|
-
border-color:
|
|
16305
|
-
|
|
16306
|
-
|
|
16382
|
+
border-color: var(--b-hover);
|
|
16383
|
+
color: var(--t-bright);
|
|
16384
|
+
background: var(--s-light);
|
|
16307
16385
|
}
|
|
16308
16386
|
.fe-branch-btn-name {
|
|
16309
16387
|
overflow: hidden;
|
|
16310
16388
|
text-overflow: ellipsis;
|
|
16311
16389
|
}
|
|
16312
16390
|
.fe-branch-btn-badge {
|
|
16313
|
-
font-size:
|
|
16391
|
+
font-size: 10px;
|
|
16314
16392
|
font-weight: 600;
|
|
16315
|
-
color:
|
|
16393
|
+
color: var(--fe-git-modified);
|
|
16316
16394
|
flex-shrink: 0;
|
|
16317
16395
|
}
|
|
16318
16396
|
.fe-branch-btn-badge:empty { display: none; }
|
|
@@ -16321,10 +16399,11 @@
|
|
|
16321
16399
|
.fe-git-popover {
|
|
16322
16400
|
position: fixed;
|
|
16323
16401
|
width: 240px;
|
|
16324
|
-
|
|
16325
|
-
|
|
16326
|
-
border
|
|
16327
|
-
|
|
16402
|
+
max-width: calc(100vw - 16px);
|
|
16403
|
+
background: var(--fe-menu-bg);
|
|
16404
|
+
border: 1px solid var(--fe-menu-border);
|
|
16405
|
+
border-radius: var(--r-card);
|
|
16406
|
+
box-shadow: var(--fe-menu-shadow);
|
|
16328
16407
|
z-index: 300;
|
|
16329
16408
|
padding: 10px;
|
|
16330
16409
|
opacity: 0;
|
|
@@ -16343,36 +16422,42 @@
|
|
|
16343
16422
|
top: 12px;
|
|
16344
16423
|
width: 10px;
|
|
16345
16424
|
height: 10px;
|
|
16346
|
-
background:
|
|
16347
|
-
border-left: 1px solid
|
|
16348
|
-
border-bottom: 1px solid
|
|
16425
|
+
background: var(--fe-menu-bg);
|
|
16426
|
+
border-left: 1px solid var(--fe-menu-border);
|
|
16427
|
+
border-bottom: 1px solid var(--fe-menu-border);
|
|
16349
16428
|
transform: rotate(45deg);
|
|
16350
16429
|
}
|
|
16430
|
+
.fe-git-popover-arrow.flipped {
|
|
16431
|
+
left: auto;
|
|
16432
|
+
right: -5px;
|
|
16433
|
+
border-left: none;
|
|
16434
|
+
border-bottom: none;
|
|
16435
|
+
border-right: 1px solid var(--fe-menu-border);
|
|
16436
|
+
border-top: 1px solid var(--fe-menu-border);
|
|
16437
|
+
}
|
|
16351
16438
|
.fe-git-pop-label {
|
|
16352
16439
|
display: block;
|
|
16353
|
-
font-size:
|
|
16440
|
+
font-size: 10px;
|
|
16354
16441
|
font-family: var(--ff-mono);
|
|
16355
|
-
color:
|
|
16442
|
+
color: var(--t-secondary);
|
|
16356
16443
|
text-transform: uppercase;
|
|
16357
16444
|
letter-spacing: 0.05em;
|
|
16358
16445
|
margin-bottom: 4px;
|
|
16359
16446
|
}
|
|
16360
|
-
.fe-git-pop-section {
|
|
16361
|
-
padding: 2px 0;
|
|
16362
|
-
}
|
|
16447
|
+
.fe-git-pop-section { padding: 2px 0; }
|
|
16363
16448
|
.fe-git-pop-sep {
|
|
16364
16449
|
height: 1px;
|
|
16365
|
-
background:
|
|
16450
|
+
background: var(--b-subtle);
|
|
16366
16451
|
margin: 6px 0;
|
|
16367
16452
|
}
|
|
16368
16453
|
|
|
16369
16454
|
/* Branch select */
|
|
16370
16455
|
.fe-git-branch-select {
|
|
16371
16456
|
width: 100%;
|
|
16372
|
-
background:
|
|
16373
|
-
border: 1px solid
|
|
16457
|
+
background-color: var(--s-light);
|
|
16458
|
+
border: 1px solid var(--b-light);
|
|
16374
16459
|
border-radius: 5px;
|
|
16375
|
-
color: var(--t-
|
|
16460
|
+
color: var(--t-bright);
|
|
16376
16461
|
font-size: 11px;
|
|
16377
16462
|
font-family: var(--ff-mono);
|
|
16378
16463
|
padding: 5px 22px 5px 8px;
|
|
@@ -16380,16 +16465,16 @@
|
|
|
16380
16465
|
cursor: pointer;
|
|
16381
16466
|
appearance: none;
|
|
16382
16467
|
-webkit-appearance: none;
|
|
16383
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='rgba(255,255,255,0.
|
|
16468
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='rgba(255,255,255,0.5)' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
|
16384
16469
|
background-repeat: no-repeat;
|
|
16385
16470
|
background-position: right 7px center;
|
|
16386
16471
|
transition: border-color 0.15s;
|
|
16387
16472
|
}
|
|
16388
|
-
.fe-git-branch-select:hover { border-color:
|
|
16389
|
-
.fe-git-branch-select:focus { border-color:
|
|
16473
|
+
.fe-git-branch-select:hover { border-color: var(--b-hover); }
|
|
16474
|
+
.fe-git-branch-select:focus { border-color: var(--b-visible); }
|
|
16390
16475
|
.fe-git-branch-select option {
|
|
16391
|
-
background:
|
|
16392
|
-
color: var(--t-
|
|
16476
|
+
background: var(--fe-menu-bg);
|
|
16477
|
+
color: var(--t-bright);
|
|
16393
16478
|
}
|
|
16394
16479
|
|
|
16395
16480
|
/* Commit area */
|
|
@@ -16400,114 +16485,106 @@
|
|
|
16400
16485
|
.fe-git-commit-input {
|
|
16401
16486
|
flex: 1;
|
|
16402
16487
|
min-width: 0;
|
|
16403
|
-
background:
|
|
16404
|
-
border: 1px solid
|
|
16488
|
+
background: var(--s-light);
|
|
16489
|
+
border: 1px solid var(--b-light);
|
|
16405
16490
|
border-radius: 5px;
|
|
16406
|
-
color: var(--t-
|
|
16491
|
+
color: var(--t-bright);
|
|
16407
16492
|
font-size: 11px;
|
|
16408
16493
|
font-family: var(--ff-mono);
|
|
16409
16494
|
padding: 5px 8px;
|
|
16410
16495
|
outline: none;
|
|
16411
16496
|
transition: border-color 0.15s;
|
|
16412
16497
|
}
|
|
16413
|
-
.fe-git-commit-input::placeholder { color:
|
|
16414
|
-
.fe-git-commit-input:focus { border-color:
|
|
16415
|
-
.fe-git-commit-
|
|
16498
|
+
.fe-git-commit-input::placeholder { color: var(--t-secondary); }
|
|
16499
|
+
.fe-git-commit-input:focus { border-color: var(--b-visible); }
|
|
16500
|
+
.fe-git-commit-input:focus-visible { outline: 2px solid var(--fe-focus); outline-offset: -1px; }
|
|
16501
|
+
.fe-git-commit-btn,
|
|
16502
|
+
.fe-git-gen-btn {
|
|
16416
16503
|
flex-shrink: 0;
|
|
16417
16504
|
width: 28px; height: 28px;
|
|
16418
16505
|
display: flex;
|
|
16419
16506
|
align-items: center;
|
|
16420
16507
|
justify-content: center;
|
|
16421
|
-
background:
|
|
16422
|
-
border: 1px solid
|
|
16508
|
+
background: var(--s-light);
|
|
16509
|
+
border: 1px solid var(--b-light);
|
|
16423
16510
|
border-radius: 5px;
|
|
16511
|
+
color: var(--t-secondary);
|
|
16424
16512
|
cursor: pointer;
|
|
16425
|
-
transition: background 0.15s, border-color 0.15s;
|
|
16513
|
+
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
|
16426
16514
|
outline: none;
|
|
16427
16515
|
}
|
|
16428
16516
|
.fe-git-commit-btn svg {
|
|
16429
16517
|
width: 13px; height: 13px;
|
|
16430
16518
|
fill: none;
|
|
16431
|
-
stroke:
|
|
16519
|
+
stroke: currentColor;
|
|
16432
16520
|
stroke-width: 2.5;
|
|
16433
16521
|
stroke-linecap: round;
|
|
16434
16522
|
stroke-linejoin: round;
|
|
16435
16523
|
}
|
|
16436
16524
|
.fe-git-commit-btn:hover {
|
|
16437
|
-
|
|
16438
|
-
|
|
16525
|
+
border-color: var(--b-hover);
|
|
16526
|
+
color: var(--fe-git-new);
|
|
16439
16527
|
}
|
|
16440
|
-
.fe-git-commit-btn:hover svg { stroke: #66bb6a; }
|
|
16441
|
-
.fe-git-commit-btn:active { background: rgba(102,187,106,0.2); }
|
|
16442
16528
|
.fe-git-commit-btn.loading,
|
|
16443
16529
|
.fe-git-gen-btn.loading {
|
|
16444
16530
|
pointer-events: none;
|
|
16445
16531
|
opacity: 0.5;
|
|
16446
16532
|
}
|
|
16447
|
-
|
|
16448
|
-
/* Generate message button */
|
|
16449
|
-
.fe-git-gen-btn {
|
|
16450
|
-
flex-shrink: 0;
|
|
16451
|
-
width: 28px; height: 28px;
|
|
16452
|
-
display: flex;
|
|
16453
|
-
align-items: center;
|
|
16454
|
-
justify-content: center;
|
|
16455
|
-
background: rgba(255,255,255,0.05);
|
|
16456
|
-
border: 1px solid rgba(255,255,255,0.08);
|
|
16457
|
-
border-radius: 5px;
|
|
16458
|
-
cursor: pointer;
|
|
16459
|
-
transition: background 0.15s, border-color 0.15s;
|
|
16460
|
-
outline: none;
|
|
16461
|
-
}
|
|
16462
16533
|
.fe-git-gen-btn svg {
|
|
16463
16534
|
width: 12px; height: 12px;
|
|
16464
|
-
fill:
|
|
16535
|
+
fill: currentColor;
|
|
16465
16536
|
stroke: none;
|
|
16466
16537
|
}
|
|
16467
16538
|
.fe-git-gen-btn:hover {
|
|
16468
|
-
|
|
16469
|
-
|
|
16539
|
+
border-color: var(--b-hover);
|
|
16540
|
+
color: var(--accent-orange);
|
|
16470
16541
|
}
|
|
16471
|
-
.fe-git-gen-btn:hover svg { fill: #ffb74d; }
|
|
16472
|
-
.fe-git-gen-btn:active { background: rgba(255,183,77,0.2); }
|
|
16473
16542
|
|
|
16474
16543
|
/* Summary line */
|
|
16475
16544
|
.fe-git-summary {
|
|
16476
|
-
font-size:
|
|
16545
|
+
font-size: 10.5px;
|
|
16477
16546
|
font-family: var(--ff-mono);
|
|
16478
|
-
color: var(--t-
|
|
16547
|
+
color: var(--t-secondary);
|
|
16479
16548
|
line-height: 1.5;
|
|
16480
16549
|
}
|
|
16481
16550
|
.fe-git-summary:empty { display: none; }
|
|
16482
|
-
.fe-git-summary .gs-m { color:
|
|
16483
|
-
.fe-git-summary .gs-a { color:
|
|
16484
|
-
.fe-git-summary .gs-d { color:
|
|
16485
|
-
.fe-git-summary .gs-u { color:
|
|
16551
|
+
.fe-git-summary .gs-m { color: var(--fe-git-modified); }
|
|
16552
|
+
.fe-git-summary .gs-a { color: var(--fe-git-new); }
|
|
16553
|
+
.fe-git-summary .gs-d { color: var(--fe-git-deleted); }
|
|
16554
|
+
.fe-git-summary .gs-u { color: var(--t-primary); }
|
|
16486
16555
|
|
|
16487
16556
|
/* Git commit output */
|
|
16488
16557
|
.fe-git-popover.fe-git-output-mode {
|
|
16489
16558
|
width: 300px;
|
|
16490
16559
|
transition: opacity 0.18s ease, transform 0.18s ease, width 0.18s ease;
|
|
16491
16560
|
}
|
|
16492
|
-
.fe-git-output {
|
|
16493
|
-
display: none;
|
|
16494
|
-
}
|
|
16561
|
+
.fe-git-output { display: none; }
|
|
16495
16562
|
.fe-git-output-header {
|
|
16496
|
-
font-size:
|
|
16563
|
+
font-size: 10px;
|
|
16497
16564
|
font-family: var(--ff-mono);
|
|
16498
|
-
color:
|
|
16565
|
+
color: var(--t-primary);
|
|
16499
16566
|
text-transform: uppercase;
|
|
16500
16567
|
letter-spacing: 0.05em;
|
|
16501
16568
|
margin-bottom: 6px;
|
|
16502
16569
|
}
|
|
16570
|
+
.fe-git-output-icon {
|
|
16571
|
+
width: 11px; height: 11px;
|
|
16572
|
+
stroke: var(--fe-git-deleted);
|
|
16573
|
+
fill: none;
|
|
16574
|
+
stroke-width: 2.5;
|
|
16575
|
+
stroke-linecap: round;
|
|
16576
|
+
stroke-linejoin: round;
|
|
16577
|
+
vertical-align: -1px;
|
|
16578
|
+
}
|
|
16579
|
+
.fe-git-output-icon.ok { stroke: var(--fe-git-new); }
|
|
16503
16580
|
.fe-git-output-pre {
|
|
16504
|
-
background: rgba(0,0,0,0.
|
|
16505
|
-
border: 1px solid
|
|
16581
|
+
background: rgba(0,0,0,0.25);
|
|
16582
|
+
border: 1px solid var(--b-subtle);
|
|
16506
16583
|
border-radius: 5px;
|
|
16507
16584
|
padding: 8px 10px;
|
|
16508
16585
|
font-family: var(--ff-mono);
|
|
16509
|
-
font-size:
|
|
16510
|
-
color:
|
|
16586
|
+
font-size: 10.5px;
|
|
16587
|
+
color: var(--t-primary);
|
|
16511
16588
|
line-height: 1.5;
|
|
16512
16589
|
white-space: pre-wrap;
|
|
16513
16590
|
word-break: break-all;
|
|
@@ -16516,9 +16593,9 @@
|
|
|
16516
16593
|
margin: 0;
|
|
16517
16594
|
}
|
|
16518
16595
|
.fe-git-output-pre.error {
|
|
16519
|
-
background:
|
|
16520
|
-
border-color:
|
|
16521
|
-
color:
|
|
16596
|
+
background: var(--accent-red-bg);
|
|
16597
|
+
border-color: var(--accent-red-hover);
|
|
16598
|
+
color: var(--fe-git-deleted);
|
|
16522
16599
|
}
|
|
16523
16600
|
|
|
16524
16601
|
/* Dropdown panel */
|
|
@@ -16527,11 +16604,12 @@
|
|
|
16527
16604
|
position: absolute;
|
|
16528
16605
|
left: 0; right: 0;
|
|
16529
16606
|
top: calc(100% + 2px);
|
|
16530
|
-
|
|
16531
|
-
|
|
16532
|
-
|
|
16607
|
+
max-height: min(320px, 60vh);
|
|
16608
|
+
overflow-y: auto;
|
|
16609
|
+
background: var(--fe-menu-bg);
|
|
16610
|
+
border: 1px solid var(--fe-menu-border);
|
|
16611
|
+
border-radius: var(--r-small);
|
|
16533
16612
|
z-index: 200;
|
|
16534
|
-
overflow: hidden;
|
|
16535
16613
|
box-shadow: var(--shadow-md);
|
|
16536
16614
|
}
|
|
16537
16615
|
.fe-project-selector.open .fe-project-dropdown { display: block; }
|
|
@@ -16542,7 +16620,7 @@
|
|
|
16542
16620
|
padding: 7px 10px;
|
|
16543
16621
|
font-size: 11.5px;
|
|
16544
16622
|
font-family: var(--ff-mono);
|
|
16545
|
-
color: var(--t-
|
|
16623
|
+
color: var(--t-primary);
|
|
16546
16624
|
cursor: pointer;
|
|
16547
16625
|
transition: background 0.1s;
|
|
16548
16626
|
border: none;
|
|
@@ -16550,14 +16628,16 @@
|
|
|
16550
16628
|
width: 100%;
|
|
16551
16629
|
text-align: left;
|
|
16552
16630
|
}
|
|
16553
|
-
.fe-project-option:hover
|
|
16554
|
-
.fe-project-option
|
|
16631
|
+
.fe-project-option:hover,
|
|
16632
|
+
.fe-project-option:focus-visible { background: var(--s-hover); color: var(--t-bright); }
|
|
16633
|
+
#file-explorer-panel .fe-project-option:focus-visible { outline-offset: -2px; }
|
|
16634
|
+
.fe-project-option.active { color: var(--t-bright); background: var(--s-light); }
|
|
16555
16635
|
.fe-project-option svg {
|
|
16556
16636
|
width: 12px; height: 12px;
|
|
16557
|
-
fill:
|
|
16637
|
+
fill: var(--t-secondary);
|
|
16558
16638
|
flex-shrink: 0;
|
|
16559
16639
|
}
|
|
16560
|
-
.fe-project-option.active svg { fill:
|
|
16640
|
+
.fe-project-option.active svg { fill: var(--t-primary); }
|
|
16561
16641
|
.fe-project-option .fe-opt-label {
|
|
16562
16642
|
flex: 1;
|
|
16563
16643
|
overflow: hidden;
|
|
@@ -16566,16 +16646,15 @@
|
|
|
16566
16646
|
}
|
|
16567
16647
|
.fe-project-sep {
|
|
16568
16648
|
height: 1px;
|
|
16569
|
-
background:
|
|
16649
|
+
background: var(--b-subtle);
|
|
16570
16650
|
margin: 2px 0;
|
|
16571
16651
|
}
|
|
16572
16652
|
.fe-project-option.fe-add-project svg {
|
|
16573
16653
|
fill: none;
|
|
16574
|
-
stroke:
|
|
16654
|
+
stroke: currentColor;
|
|
16575
16655
|
stroke-width: 2;
|
|
16576
16656
|
stroke-linecap: round;
|
|
16577
16657
|
}
|
|
16578
|
-
.fe-project-option.fe-add-project:hover svg { stroke: rgba(255,255,255,0.5); }
|
|
16579
16658
|
|
|
16580
16659
|
/* Toolbar */
|
|
16581
16660
|
.fe-toolbar {
|
|
@@ -16584,11 +16663,23 @@
|
|
|
16584
16663
|
justify-content: center;
|
|
16585
16664
|
gap: 2px;
|
|
16586
16665
|
padding: 4px 8px 6px;
|
|
16587
|
-
border-bottom: 1px solid
|
|
16666
|
+
border-bottom: 1px solid var(--b-subtle);
|
|
16588
16667
|
white-space: nowrap;
|
|
16589
16668
|
flex-wrap: nowrap;
|
|
16590
16669
|
flex-shrink: 0;
|
|
16591
16670
|
}
|
|
16671
|
+
.fe-toolbar .detail-action-btn { color: var(--t-secondary); }
|
|
16672
|
+
.fe-toolbar .detail-action-btn:hover { color: var(--t-bright); }
|
|
16673
|
+
.fe-toolbar .detail-action-btn[aria-pressed="true"] {
|
|
16674
|
+
color: var(--t-bright);
|
|
16675
|
+
background: var(--s-medium);
|
|
16676
|
+
border-color: var(--b-hover);
|
|
16677
|
+
}
|
|
16678
|
+
.fe-toolbar .detail-action-btn:disabled {
|
|
16679
|
+
opacity: 0.4;
|
|
16680
|
+
cursor: default;
|
|
16681
|
+
pointer-events: none;
|
|
16682
|
+
}
|
|
16592
16683
|
|
|
16593
16684
|
/* Tree container */
|
|
16594
16685
|
.fe-tree {
|
|
@@ -16597,68 +16688,99 @@
|
|
|
16597
16688
|
overflow-x: hidden;
|
|
16598
16689
|
padding: 4px 0;
|
|
16599
16690
|
min-height: 0;
|
|
16600
|
-
|
|
16601
|
-
|
|
16602
|
-
|
|
16691
|
+
outline: none;
|
|
16692
|
+
/* Isolate the tree's layout/style recalc (see .explorer-tree). Safe: what the
|
|
16693
|
+
explorer opens over the page (menu, preview, questions) is added to the
|
|
16694
|
+
body, not to the tree. Not `paint` — would clip and isn't needed. */
|
|
16603
16695
|
contain: layout style;
|
|
16604
16696
|
scrollbar-width: thin;
|
|
16605
16697
|
scrollbar-color: transparent transparent;
|
|
16606
16698
|
}
|
|
16607
|
-
.fe-tree:hover {
|
|
16608
|
-
scrollbar-color: rgba(255,255,255,0.1) transparent;
|
|
16609
|
-
}
|
|
16699
|
+
.fe-tree:hover { scrollbar-color: var(--b-light) transparent; }
|
|
16610
16700
|
.fe-tree::-webkit-scrollbar { width: 6px; }
|
|
16611
16701
|
.fe-tree::-webkit-scrollbar-track { background: transparent; }
|
|
16612
16702
|
.fe-tree::-webkit-scrollbar-thumb {
|
|
16613
16703
|
background: transparent;
|
|
16614
16704
|
border-radius: 3px;
|
|
16615
16705
|
}
|
|
16616
|
-
.fe-tree:hover::-webkit-scrollbar-thumb {
|
|
16617
|
-
|
|
16618
|
-
|
|
16619
|
-
.fe-tree
|
|
16620
|
-
background: rgba(255,255,255,0.2);
|
|
16621
|
-
}
|
|
16706
|
+
.fe-tree:hover::-webkit-scrollbar-thumb { background: var(--b-light); }
|
|
16707
|
+
.fe-tree:hover::-webkit-scrollbar-thumb:hover { background: var(--b-visible); }
|
|
16708
|
+
/* Rows may be dropped on the project itself. */
|
|
16709
|
+
.fe-tree.fe-drop { box-shadow: inset 0 0 0 1px var(--fe-focus); background: var(--accent-blue-bg); }
|
|
16622
16710
|
|
|
16623
16711
|
/* Tree rows */
|
|
16624
16712
|
.fe-row {
|
|
16625
16713
|
display: flex;
|
|
16626
16714
|
align-items: center;
|
|
16627
16715
|
gap: 6px;
|
|
16628
|
-
padding:
|
|
16716
|
+
padding: 0 8px;
|
|
16629
16717
|
cursor: pointer;
|
|
16630
16718
|
border-radius: 4px;
|
|
16631
16719
|
font-size: 12px;
|
|
16632
16720
|
white-space: nowrap;
|
|
16633
16721
|
transition: background 0.12s;
|
|
16634
16722
|
margin: 0 4px;
|
|
16635
|
-
|
|
16636
|
-
|
|
16637
|
-
|
|
16638
|
-
|
|
16723
|
+
height: 24px;
|
|
16724
|
+
user-select: none;
|
|
16725
|
+
-webkit-user-select: none;
|
|
16726
|
+
}
|
|
16727
|
+
.fe-row:hover { background: var(--s-subtle); }
|
|
16728
|
+
.fe-row--ctx-active { background: var(--s-hover); }
|
|
16729
|
+
.fe-node--selected > .fe-row { background: var(--s-medium); }
|
|
16730
|
+
.fe-node--selected > .fe-row:hover { background: var(--s-active); }
|
|
16731
|
+
/* The keyboard's row, while the tree has the keyboard. */
|
|
16732
|
+
.fe-tree:focus-visible .fe-node--focus > .fe-row {
|
|
16733
|
+
outline: 2px solid var(--fe-focus);
|
|
16734
|
+
outline-offset: -2px;
|
|
16639
16735
|
}
|
|
16640
|
-
.
|
|
16641
|
-
|
|
16736
|
+
/* The file that is showing in the editor. */
|
|
16737
|
+
.fe-node--active > .fe-row { box-shadow: inset 2px 0 0 var(--fe-focus); }
|
|
16738
|
+
.fe-node--active > .fe-row > .fe-name { color: var(--t-bright); }
|
|
16739
|
+
/* A folder rows are about to be dropped into: the folder and what it shows. */
|
|
16740
|
+
.fe-node.fe-drop {
|
|
16741
|
+
background: var(--accent-blue-bg);
|
|
16742
|
+
outline: 1px dashed var(--fe-focus);
|
|
16743
|
+
outline-offset: -1px;
|
|
16744
|
+
border-radius: 4px;
|
|
16642
16745
|
}
|
|
16746
|
+
.fe-tree--dragging .fe-row { cursor: grabbing; }
|
|
16643
16747
|
|
|
16644
16748
|
/* Chevron */
|
|
16645
16749
|
.fe-chevron {
|
|
16646
|
-
font-size: 7px;
|
|
16647
16750
|
width: 12px;
|
|
16648
|
-
|
|
16649
|
-
|
|
16650
|
-
|
|
16751
|
+
height: 12px;
|
|
16752
|
+
display: inline-flex;
|
|
16753
|
+
align-items: center;
|
|
16754
|
+
justify-content: center;
|
|
16755
|
+
color: var(--t-secondary);
|
|
16651
16756
|
flex-shrink: 0;
|
|
16652
|
-
user-select: none;
|
|
16653
16757
|
}
|
|
16654
|
-
.fe-
|
|
16655
|
-
|
|
16758
|
+
.fe-chevron svg {
|
|
16759
|
+
width: 10px;
|
|
16760
|
+
height: 10px;
|
|
16761
|
+
fill: none;
|
|
16762
|
+
stroke: currentColor;
|
|
16763
|
+
stroke-width: 2.5;
|
|
16764
|
+
stroke-linecap: round;
|
|
16765
|
+
stroke-linejoin: round;
|
|
16766
|
+
transition: transform 0.15s ease;
|
|
16656
16767
|
}
|
|
16768
|
+
.fe-node[data-expanded="true"] > .fe-row > .fe-chevron svg { transform: rotate(90deg); }
|
|
16657
16769
|
|
|
16658
|
-
/* Collapsed children hidden */
|
|
16659
|
-
.fe-
|
|
16660
|
-
|
|
16770
|
+
/* Collapsed children hidden; an open folder draws the line its rows hang from. */
|
|
16771
|
+
.fe-children { position: relative; }
|
|
16772
|
+
.fe-node[data-expanded="false"] > .fe-children { display: none; }
|
|
16773
|
+
.fe-children::before {
|
|
16774
|
+
content: '';
|
|
16775
|
+
position: absolute;
|
|
16776
|
+
top: 0;
|
|
16777
|
+
bottom: 0;
|
|
16778
|
+
left: calc(var(--fe-guide, 14px) + 4px);
|
|
16779
|
+
width: 1px;
|
|
16780
|
+
background: var(--b-subtle);
|
|
16781
|
+
pointer-events: none;
|
|
16661
16782
|
}
|
|
16783
|
+
.fe-children:hover::before { background: var(--b-hover); }
|
|
16662
16784
|
|
|
16663
16785
|
/* File/folder icon */
|
|
16664
16786
|
.fe-icon {
|
|
@@ -16668,6 +16790,7 @@
|
|
|
16668
16790
|
display: flex;
|
|
16669
16791
|
align-items: center;
|
|
16670
16792
|
justify-content: center;
|
|
16793
|
+
position: relative;
|
|
16671
16794
|
}
|
|
16672
16795
|
.fe-icon svg {
|
|
16673
16796
|
width: 14px;
|
|
@@ -16678,9 +16801,22 @@
|
|
|
16678
16801
|
stroke-linecap: round;
|
|
16679
16802
|
stroke-linejoin: round;
|
|
16680
16803
|
}
|
|
16681
|
-
.fe-icon--dir { color:
|
|
16682
|
-
.fe-icon--file { color:
|
|
16804
|
+
.fe-icon--dir { color: var(--accent-orange); }
|
|
16805
|
+
.fe-icon--file { color: var(--t-secondary); }
|
|
16683
16806
|
.fe-icon-img { width: 14px; height: 14px; object-fit: contain; }
|
|
16807
|
+
/* A link: a small arrow on its icon. */
|
|
16808
|
+
.fe-link-glyph {
|
|
16809
|
+
position: absolute;
|
|
16810
|
+
right: -4px;
|
|
16811
|
+
bottom: -3px;
|
|
16812
|
+
width: 8px;
|
|
16813
|
+
height: 8px;
|
|
16814
|
+
border-radius: 2px;
|
|
16815
|
+
background: var(--fe-bg);
|
|
16816
|
+
color: var(--t-primary);
|
|
16817
|
+
display: flex;
|
|
16818
|
+
}
|
|
16819
|
+
.fe-icon .fe-link-glyph svg { width: 8px; height: 8px; stroke-width: 3; }
|
|
16684
16820
|
|
|
16685
16821
|
/* File name */
|
|
16686
16822
|
.fe-name {
|
|
@@ -16688,45 +16824,210 @@
|
|
|
16688
16824
|
text-overflow: ellipsis;
|
|
16689
16825
|
flex: 1;
|
|
16690
16826
|
min-width: 0;
|
|
16691
|
-
color: var(--t-
|
|
16827
|
+
color: var(--t-primary);
|
|
16692
16828
|
font-family: var(--ff-mono);
|
|
16693
16829
|
font-size: 12px;
|
|
16694
16830
|
}
|
|
16695
|
-
.fe-node[data-type="dir"] > .fe-row > .fe-name {
|
|
16696
|
-
|
|
16697
|
-
|
|
16831
|
+
.fe-node[data-type="dir"] > .fe-row > .fe-name { font-weight: 500; }
|
|
16832
|
+
/* What git ignores is dimmed, and still text that reads. */
|
|
16833
|
+
.fe-node--ignored > .fe-row > .fe-name { color: var(--t-secondary); }
|
|
16834
|
+
.fe-node--ignored > .fe-row > .fe-icon { opacity: 0.6; }
|
|
16835
|
+
/* Cut: on its way somewhere else. */
|
|
16836
|
+
.fe-node--cut > .fe-row > .fe-name { color: var(--t-secondary); font-style: italic; }
|
|
16837
|
+
.fe-node--cut > .fe-row > .fe-icon { opacity: 0.5; }
|
|
16838
|
+
/* A file git lists as deleted, and a link that cannot be opened from here. */
|
|
16839
|
+
.fe-node--missing > .fe-row > .fe-name { color: var(--t-secondary); text-decoration: line-through; }
|
|
16840
|
+
.fe-node--faint > .fe-row > .fe-name { color: var(--t-secondary); font-style: italic; }
|
|
16841
|
+
/* A selected row under the pointer has the lightest ground of the tree: the dimmed names would read at 4.4:1
|
|
16842
|
+
there, so they take the next text token up (7:1) and stay italic or struck through. */
|
|
16843
|
+
.fe-node--selected.fe-node--ignored > .fe-row:hover > .fe-name,
|
|
16844
|
+
.fe-node--selected.fe-node--cut > .fe-row:hover > .fe-name,
|
|
16845
|
+
.fe-node--selected.fe-node--missing > .fe-row:hover > .fe-name,
|
|
16846
|
+
.fe-node--selected.fe-node--faint > .fe-row:hover > .fe-name { color: var(--t-primary); }
|
|
16847
|
+
.fe-match {
|
|
16848
|
+
background: var(--s-active);
|
|
16849
|
+
color: var(--t-bright);
|
|
16850
|
+
border-radius: 2px;
|
|
16698
16851
|
}
|
|
16699
16852
|
|
|
16700
|
-
/*
|
|
16853
|
+
/* Open in the editor (a ring), unsaved there (a dot) */
|
|
16854
|
+
.fe-open-dot {
|
|
16855
|
+
display: none;
|
|
16856
|
+
width: 6px;
|
|
16857
|
+
height: 6px;
|
|
16858
|
+
border-radius: 50%;
|
|
16859
|
+
flex-shrink: 0;
|
|
16860
|
+
box-sizing: border-box;
|
|
16861
|
+
}
|
|
16862
|
+
.fe-open-dot--open { display: block; border: 1px solid var(--t-secondary); }
|
|
16863
|
+
.fe-open-dot--dirty { display: block; background: var(--t-bright); }
|
|
16864
|
+
|
|
16865
|
+
/* Git state: a letter on a file, a dot on a folder that holds changes */
|
|
16701
16866
|
.fe-git-badge {
|
|
16702
|
-
font-size:
|
|
16867
|
+
font-size: 10px;
|
|
16703
16868
|
font-family: var(--ff-mono);
|
|
16704
|
-
font-weight:
|
|
16705
|
-
|
|
16706
|
-
|
|
16869
|
+
font-weight: 600;
|
|
16870
|
+
width: 12px;
|
|
16871
|
+
text-align: center;
|
|
16707
16872
|
flex-shrink: 0;
|
|
16708
16873
|
line-height: 16px;
|
|
16709
16874
|
}
|
|
16710
|
-
.fe-git-
|
|
16711
|
-
.fe-git-
|
|
16712
|
-
|
|
16713
|
-
|
|
16714
|
-
|
|
16715
|
-
|
|
16716
|
-
|
|
16875
|
+
.fe-git-badge[hidden] { display: none; }
|
|
16876
|
+
.fe-git-badge--dot::before {
|
|
16877
|
+
content: '';
|
|
16878
|
+
display: inline-block;
|
|
16879
|
+
width: 5px;
|
|
16880
|
+
height: 5px;
|
|
16881
|
+
border-radius: 50%;
|
|
16882
|
+
background: currentColor;
|
|
16883
|
+
vertical-align: 1px;
|
|
16884
|
+
}
|
|
16885
|
+
.fe-git-modified { color: var(--fe-git-modified); }
|
|
16886
|
+
.fe-git-new { color: var(--fe-git-new); }
|
|
16887
|
+
.fe-git-deleted { color: var(--fe-git-deleted); }
|
|
16888
|
+
.fe-git-conflict { color: var(--fe-git-conflict); }
|
|
16889
|
+
|
|
16890
|
+
/* A line among the rows that is not a row: loading, empty, an error, more to show */
|
|
16891
|
+
.fe-note {
|
|
16892
|
+
display: flex;
|
|
16893
|
+
align-items: center;
|
|
16894
|
+
flex-wrap: wrap;
|
|
16895
|
+
gap: 2px 8px;
|
|
16896
|
+
min-height: 22px;
|
|
16897
|
+
padding-right: 10px;
|
|
16898
|
+
font-size: 11px;
|
|
16899
|
+
line-height: 1.4;
|
|
16900
|
+
font-family: var(--ff-mono);
|
|
16901
|
+
color: var(--t-secondary);
|
|
16902
|
+
}
|
|
16903
|
+
.fe-note--error { color: var(--fe-git-deleted); padding-top: 3px; padding-bottom: 3px; }
|
|
16904
|
+
/* A line that offers something ("Show more", "Retry") while the keyboard is on it: its offer has the ring a row has. */
|
|
16905
|
+
.fe-tree:focus-visible .fe-note--focus > .fe-note-action {
|
|
16906
|
+
outline: 2px solid var(--fe-focus);
|
|
16907
|
+
outline-offset: 2px;
|
|
16908
|
+
border-radius: 2px;
|
|
16909
|
+
}
|
|
16910
|
+
.fe-note-action,
|
|
16911
|
+
.fe-notice-action {
|
|
16912
|
+
background: none;
|
|
16913
|
+
border: none;
|
|
16914
|
+
padding: 0;
|
|
16915
|
+
font: inherit;
|
|
16916
|
+
color: var(--t-bright);
|
|
16917
|
+
text-decoration: underline;
|
|
16918
|
+
text-underline-offset: 2px;
|
|
16919
|
+
cursor: pointer;
|
|
16920
|
+
flex-shrink: 0;
|
|
16921
|
+
}
|
|
16922
|
+
.fe-empty {
|
|
16923
|
+
display: flex;
|
|
16924
|
+
flex-direction: column;
|
|
16925
|
+
align-items: flex-start;
|
|
16926
|
+
gap: 12px;
|
|
16927
|
+
padding: 16px;
|
|
16928
|
+
font-size: 12px;
|
|
16929
|
+
line-height: 1.45;
|
|
16930
|
+
color: var(--t-primary);
|
|
16931
|
+
}
|
|
16932
|
+
.fe-empty p { margin: 0; }
|
|
16933
|
+
|
|
16934
|
+
/* A name typed in place */
|
|
16935
|
+
.fe-rename-input {
|
|
16936
|
+
width: 100%;
|
|
16937
|
+
height: 20px;
|
|
16938
|
+
box-sizing: border-box;
|
|
16939
|
+
background: var(--fe-bg);
|
|
16940
|
+
border: 1px solid var(--fe-focus);
|
|
16941
|
+
border-radius: 3px;
|
|
16942
|
+
color: var(--t-bright);
|
|
16943
|
+
font-family: var(--ff-mono);
|
|
16944
|
+
font-size: 12px;
|
|
16945
|
+
padding: 0 4px;
|
|
16946
|
+
outline: none;
|
|
16947
|
+
}
|
|
16948
|
+
.fe-rename-input[aria-invalid="true"] { border-color: var(--fe-git-deleted); }
|
|
16949
|
+
.fe-rename-tip {
|
|
16950
|
+
margin: 2px 8px 4px 30px;
|
|
16951
|
+
padding: 4px 8px;
|
|
16952
|
+
border-radius: 4px;
|
|
16953
|
+
background: var(--accent-red-bg);
|
|
16954
|
+
color: var(--fe-git-deleted);
|
|
16955
|
+
font-size: 11px;
|
|
16956
|
+
line-height: 1.4;
|
|
16957
|
+
white-space: normal;
|
|
16958
|
+
}
|
|
16959
|
+
.fe-rename-tip[hidden] { display: none; }
|
|
16960
|
+
|
|
16961
|
+
/* What happened, at the foot of the panel */
|
|
16962
|
+
.fe-notice {
|
|
16963
|
+
display: flex;
|
|
16964
|
+
align-items: flex-start;
|
|
16965
|
+
gap: 8px;
|
|
16966
|
+
padding: 6px 6px 6px 12px;
|
|
16967
|
+
border-top: 1px solid var(--b-subtle);
|
|
16968
|
+
background: var(--s-subtle);
|
|
16969
|
+
font-size: 11.5px;
|
|
16970
|
+
line-height: 1.4;
|
|
16971
|
+
color: var(--t-bright);
|
|
16972
|
+
flex-shrink: 0;
|
|
16973
|
+
}
|
|
16974
|
+
.fe-notice[hidden] { display: none; }
|
|
16975
|
+
.fe-notice[data-tone="error"] { color: var(--fe-git-deleted); }
|
|
16976
|
+
.fe-notice-text {
|
|
16977
|
+
flex: 1;
|
|
16978
|
+
min-width: 0;
|
|
16979
|
+
overflow-wrap: anywhere;
|
|
16980
|
+
display: -webkit-box;
|
|
16981
|
+
-webkit-line-clamp: 4;
|
|
16982
|
+
-webkit-box-orient: vertical;
|
|
16983
|
+
overflow: hidden;
|
|
16984
|
+
}
|
|
16985
|
+
.fe-notice-action[hidden] { display: none; }
|
|
16986
|
+
.fe-notice-close {
|
|
16987
|
+
background: none;
|
|
16988
|
+
border: none;
|
|
16989
|
+
color: var(--t-secondary);
|
|
16990
|
+
cursor: pointer;
|
|
16991
|
+
font-size: 13px;
|
|
16992
|
+
line-height: 1;
|
|
16993
|
+
padding: 1px 5px;
|
|
16994
|
+
border-radius: 3px;
|
|
16995
|
+
flex-shrink: 0;
|
|
16996
|
+
}
|
|
16997
|
+
.fe-notice-close:hover { color: var(--t-bright); background: var(--s-light); }
|
|
16717
16998
|
|
|
16718
16999
|
/* Footer */
|
|
16719
17000
|
.fe-footer {
|
|
16720
17001
|
display: flex;
|
|
16721
17002
|
align-items: center;
|
|
17003
|
+
justify-content: space-between;
|
|
17004
|
+
gap: 8px;
|
|
16722
17005
|
height: 28px;
|
|
16723
17006
|
padding: 0 12px;
|
|
16724
|
-
font-size:
|
|
16725
|
-
color: var(--t-
|
|
17007
|
+
font-size: 10.5px;
|
|
17008
|
+
color: var(--t-secondary);
|
|
16726
17009
|
border-top: 1px solid var(--b-subtle);
|
|
16727
17010
|
flex-shrink: 0;
|
|
16728
17011
|
font-family: var(--ff-mono);
|
|
16729
17012
|
}
|
|
17013
|
+
.fe-restart-hint {
|
|
17014
|
+
display: inline-flex;
|
|
17015
|
+
width: 14px;
|
|
17016
|
+
height: 14px;
|
|
17017
|
+
color: var(--accent-orange);
|
|
17018
|
+
border-radius: 50%;
|
|
17019
|
+
cursor: help;
|
|
17020
|
+
}
|
|
17021
|
+
.fe-restart-hint[hidden] { display: none; }
|
|
17022
|
+
.fe-restart-hint:focus-visible { outline: 2px solid var(--fe-focus); outline-offset: 1px; }
|
|
17023
|
+
.fe-restart-hint svg {
|
|
17024
|
+
width: 14px;
|
|
17025
|
+
height: 14px;
|
|
17026
|
+
fill: none;
|
|
17027
|
+
stroke: currentColor;
|
|
17028
|
+
stroke-width: 2;
|
|
17029
|
+
stroke-linecap: round;
|
|
17030
|
+
}
|
|
16730
17031
|
|
|
16731
17032
|
/* Right-edge resize handle */
|
|
16732
17033
|
.fe-resize-handle {
|
|
@@ -16738,13 +17039,14 @@
|
|
|
16738
17039
|
cursor: col-resize;
|
|
16739
17040
|
z-index: 10;
|
|
16740
17041
|
transition: background 0.15s;
|
|
17042
|
+
touch-action: none;
|
|
17043
|
+
outline: none;
|
|
16741
17044
|
}
|
|
16742
17045
|
.fe-resize-handle:hover,
|
|
16743
|
-
.fe-resize-handle.active {
|
|
16744
|
-
|
|
16745
|
-
}
|
|
17046
|
+
.fe-resize-handle.active { background: var(--b-visible); }
|
|
17047
|
+
.fe-resize-handle:focus-visible { background: var(--fe-focus); }
|
|
16746
17048
|
|
|
16747
|
-
/* ──
|
|
17049
|
+
/* ── Context menu and preview (flyouts docked to the right of the panel) ── */
|
|
16748
17050
|
.fe-ctx-flyout {
|
|
16749
17051
|
position: fixed;
|
|
16750
17052
|
z-index: 100010;
|
|
@@ -16771,70 +17073,179 @@
|
|
|
16771
17073
|
width: 0; height: 0;
|
|
16772
17074
|
border-top: 6px solid transparent;
|
|
16773
17075
|
border-bottom: 6px solid transparent;
|
|
16774
|
-
border-right: 6px solid
|
|
17076
|
+
border-right: 6px solid var(--fe-menu-border);
|
|
16775
17077
|
transform: translateY(-6px);
|
|
16776
|
-
filter: drop-shadow(-2px 0 2px rgba(0,0,0,0.25));
|
|
16777
17078
|
z-index: 1;
|
|
16778
17079
|
}
|
|
17080
|
+
/* No room beside the panel: the flyout lies over it, and points at nothing. */
|
|
17081
|
+
.fe-ctx-flyout--over .fe-ctx-arrow { display: none; }
|
|
16779
17082
|
.fe-ctx-menu {
|
|
16780
|
-
background:
|
|
16781
|
-
|
|
16782
|
-
-
|
|
16783
|
-
|
|
16784
|
-
|
|
16785
|
-
|
|
16786
|
-
|
|
16787
|
-
|
|
17083
|
+
background: var(--fe-menu-bg);
|
|
17084
|
+
border: 1px solid var(--fe-menu-border);
|
|
17085
|
+
border-radius: var(--r-card);
|
|
17086
|
+
padding: 6px;
|
|
17087
|
+
min-width: 196px;
|
|
17088
|
+
max-width: min(300px, calc(100vw - 16px));
|
|
17089
|
+
max-height: calc(100dvh - 16px);
|
|
17090
|
+
overflow-y: auto;
|
|
17091
|
+
box-sizing: border-box;
|
|
17092
|
+
box-shadow: var(--fe-menu-shadow);
|
|
17093
|
+
outline: none;
|
|
16788
17094
|
}
|
|
16789
17095
|
.fe-ctx-item {
|
|
16790
17096
|
display: flex;
|
|
16791
17097
|
align-items: center;
|
|
16792
17098
|
gap: 8px;
|
|
16793
17099
|
width: 100%;
|
|
16794
|
-
padding:
|
|
17100
|
+
padding: 5px 8px;
|
|
16795
17101
|
border: none;
|
|
16796
17102
|
background: none;
|
|
16797
|
-
color:
|
|
17103
|
+
color: var(--t-primary);
|
|
16798
17104
|
font-size: 11px;
|
|
16799
|
-
font-family:
|
|
17105
|
+
font-family: var(--ff-mono);
|
|
16800
17106
|
cursor: pointer;
|
|
16801
|
-
border-radius:
|
|
17107
|
+
border-radius: 4px;
|
|
16802
17108
|
text-align: left;
|
|
16803
|
-
transition: background 0.1s, color 0.1s;
|
|
16804
17109
|
}
|
|
16805
|
-
.fe-ctx-item:hover
|
|
16806
|
-
|
|
16807
|
-
|
|
17110
|
+
.fe-ctx-item:hover,
|
|
17111
|
+
.fe-ctx-item:focus { background: var(--s-hover); color: var(--t-bright); outline: none; }
|
|
17112
|
+
.fe-ctx-flyout .fe-ctx-item:focus-visible { outline: 2px solid var(--fe-focus); outline-offset: -2px; }
|
|
17113
|
+
.fe-ctx-item[aria-disabled="true"] {
|
|
17114
|
+
opacity: 0.45;
|
|
17115
|
+
cursor: default;
|
|
17116
|
+
background: none;
|
|
17117
|
+
color: var(--t-primary);
|
|
16808
17118
|
}
|
|
16809
|
-
.fe-ctx-
|
|
16810
|
-
width: 13px;
|
|
16811
|
-
|
|
16812
|
-
|
|
16813
|
-
|
|
17119
|
+
.fe-ctx-icon {
|
|
17120
|
+
width: 13px;
|
|
17121
|
+
height: 13px;
|
|
17122
|
+
flex-shrink: 0;
|
|
17123
|
+
display: inline-flex;
|
|
17124
|
+
}
|
|
17125
|
+
.fe-ctx-icon svg {
|
|
17126
|
+
width: 13px; height: 13px;
|
|
17127
|
+
fill: none; stroke: currentColor;
|
|
17128
|
+
stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round;
|
|
17129
|
+
}
|
|
17130
|
+
.fe-ctx-label {
|
|
17131
|
+
flex: 1;
|
|
17132
|
+
min-width: 0;
|
|
17133
|
+
overflow: hidden;
|
|
17134
|
+
text-overflow: ellipsis;
|
|
17135
|
+
white-space: nowrap;
|
|
16814
17136
|
}
|
|
16815
|
-
.fe-ctx-
|
|
16816
|
-
|
|
17137
|
+
.fe-ctx-key {
|
|
17138
|
+
flex-shrink: 0;
|
|
17139
|
+
padding-left: 12px;
|
|
17140
|
+
color: var(--t-secondary);
|
|
17141
|
+
font-size: 10.5px;
|
|
16817
17142
|
}
|
|
16818
17143
|
.fe-ctx-separator {
|
|
16819
17144
|
height: 1px;
|
|
16820
|
-
margin:
|
|
16821
|
-
background:
|
|
17145
|
+
margin: 4px 2px;
|
|
17146
|
+
background: var(--b-subtle);
|
|
17147
|
+
}
|
|
17148
|
+
.fe-ctx-item--danger { color: var(--fe-git-deleted); }
|
|
17149
|
+
.fe-ctx-item--danger:hover,
|
|
17150
|
+
.fe-ctx-item--danger:focus { background: var(--accent-red-bg); color: var(--fe-git-deleted); }
|
|
17151
|
+
|
|
17152
|
+
/* Folder colours: a row of swatches on a page of the menu */
|
|
17153
|
+
.fe-ctx-swatches {
|
|
17154
|
+
display: grid;
|
|
17155
|
+
grid-template-columns: repeat(5, 22px);
|
|
17156
|
+
gap: 7px;
|
|
17157
|
+
padding: 6px 8px 8px;
|
|
17158
|
+
}
|
|
17159
|
+
.fe-color-swatch {
|
|
17160
|
+
width: 22px;
|
|
17161
|
+
height: 22px;
|
|
17162
|
+
border-radius: 50%;
|
|
17163
|
+
border: 2px solid transparent;
|
|
17164
|
+
cursor: pointer;
|
|
17165
|
+
transition: transform 0.12s, border-color 0.12s;
|
|
17166
|
+
padding: 0;
|
|
17167
|
+
}
|
|
17168
|
+
.fe-color-swatch:hover { transform: scale(1.15); border-color: var(--b-visible); }
|
|
17169
|
+
.fe-color-swatch--active { border-color: var(--t-bright); }
|
|
17170
|
+
.fe-ctx-flyout .fe-color-swatch:focus-visible { outline: 2px solid var(--fe-focus); outline-offset: 2px; }
|
|
17171
|
+
|
|
17172
|
+
/* The card of a file that is not text. It lies over the editor: it slides in at full strength (a menu fades
|
|
17173
|
+
in), so nothing under it reads through while it arrives. */
|
|
17174
|
+
.fe-preview:not(.fe-ctx-flyout--out) { opacity: 1; }
|
|
17175
|
+
.fe-preview-card {
|
|
17176
|
+
width: 280px;
|
|
17177
|
+
padding: 10px;
|
|
17178
|
+
display: flex;
|
|
17179
|
+
flex-direction: column;
|
|
17180
|
+
gap: 8px;
|
|
17181
|
+
}
|
|
17182
|
+
.fe-preview-name {
|
|
17183
|
+
font-family: var(--ff-mono);
|
|
17184
|
+
font-size: 12px;
|
|
17185
|
+
color: var(--t-bright);
|
|
17186
|
+
overflow: hidden;
|
|
17187
|
+
text-overflow: ellipsis;
|
|
17188
|
+
white-space: nowrap;
|
|
16822
17189
|
}
|
|
16823
|
-
.fe-
|
|
16824
|
-
|
|
17190
|
+
.fe-preview-frame {
|
|
17191
|
+
display: flex;
|
|
17192
|
+
align-items: center;
|
|
17193
|
+
justify-content: center;
|
|
17194
|
+
min-height: 72px;
|
|
17195
|
+
background: var(--s-subtle);
|
|
17196
|
+
border: 1px solid var(--b-subtle);
|
|
17197
|
+
border-radius: var(--r-small);
|
|
17198
|
+
overflow: hidden;
|
|
17199
|
+
}
|
|
17200
|
+
.fe-preview-frame img {
|
|
17201
|
+
display: block;
|
|
17202
|
+
max-width: 100%;
|
|
17203
|
+
max-height: min(280px, 50vh);
|
|
17204
|
+
object-fit: contain;
|
|
17205
|
+
}
|
|
17206
|
+
.fe-preview-frame--failed {
|
|
17207
|
+
padding: 12px;
|
|
17208
|
+
font-size: 11px;
|
|
17209
|
+
color: var(--t-secondary);
|
|
17210
|
+
}
|
|
17211
|
+
.fe-preview-detail {
|
|
17212
|
+
font-size: 11px;
|
|
17213
|
+
line-height: 1.45;
|
|
17214
|
+
color: var(--t-secondary);
|
|
17215
|
+
white-space: pre-line;
|
|
17216
|
+
}
|
|
17217
|
+
.fe-preview-actions {
|
|
17218
|
+
display: flex;
|
|
17219
|
+
flex-wrap: wrap;
|
|
17220
|
+
gap: 6px;
|
|
17221
|
+
}
|
|
17222
|
+
.fe-preview-actions .fe-modal-btn { padding: 5px 10px; }
|
|
17223
|
+
|
|
17224
|
+
/* Where go-to-file opens: the editor's own list, beside the panel */
|
|
17225
|
+
.fe-jump-layer {
|
|
17226
|
+
position: fixed;
|
|
17227
|
+
inset: 0;
|
|
17228
|
+
z-index: 100020;
|
|
17229
|
+
pointer-events: none;
|
|
17230
|
+
--ed-menu-bg: var(--fe-menu-bg);
|
|
17231
|
+
--ed-menu-fg: var(--t-primary);
|
|
17232
|
+
--ed-menu-fg-active: var(--t-bright);
|
|
17233
|
+
--ed-menu-border: var(--fe-menu-border);
|
|
17234
|
+
--ed-menu-hover: var(--s-hover);
|
|
17235
|
+
--ed-menu-radius: var(--r-card);
|
|
17236
|
+
--ed-menu-shadow: var(--fe-menu-shadow);
|
|
17237
|
+
--fw-focus: var(--fe-focus);
|
|
16825
17238
|
}
|
|
16826
|
-
.fe-
|
|
16827
|
-
.fe-
|
|
16828
|
-
.fe-ctx-item--danger svg { stroke: #e57373; }
|
|
16829
|
-
.fe-ctx-item--danger:hover svg { stroke: #ff8a80; }
|
|
17239
|
+
.fe-jump-layer > .fe-editor-menu { pointer-events: auto; }
|
|
17240
|
+
.fe-jump-layer .fe-editor-menu:focus-visible { outline: none; }
|
|
16830
17241
|
|
|
16831
|
-
/*
|
|
16832
|
-
.fe-
|
|
16833
|
-
|
|
16834
|
-
|
|
17242
|
+
/* A side panel that rows are being dragged onto */
|
|
17243
|
+
.fe-drop-agent {
|
|
17244
|
+
outline: 2px dashed var(--accent-blue);
|
|
17245
|
+
outline-offset: -6px;
|
|
16835
17246
|
}
|
|
16836
17247
|
|
|
16837
|
-
/* ──
|
|
17248
|
+
/* ── Questions (delete, replace, save first) ── */
|
|
16838
17249
|
.fe-modal-overlay {
|
|
16839
17250
|
position: fixed;
|
|
16840
17251
|
inset: 0;
|
|
@@ -16843,17 +17254,20 @@
|
|
|
16843
17254
|
display: flex;
|
|
16844
17255
|
align-items: center;
|
|
16845
17256
|
justify-content: center;
|
|
17257
|
+
padding: 16px;
|
|
17258
|
+
box-sizing: border-box;
|
|
16846
17259
|
opacity: 0;
|
|
16847
17260
|
transition: opacity 0.15s ease;
|
|
16848
17261
|
}
|
|
16849
17262
|
.fe-modal-overlay--in { opacity: 1; }
|
|
16850
17263
|
.fe-modal {
|
|
16851
|
-
background:
|
|
16852
|
-
border: 1px solid
|
|
16853
|
-
border-radius:
|
|
17264
|
+
background: var(--fe-menu-bg);
|
|
17265
|
+
border: 1px solid var(--fe-menu-border);
|
|
17266
|
+
border-radius: var(--r-button);
|
|
16854
17267
|
padding: 20px 24px;
|
|
16855
|
-
min-width: 280px;
|
|
16856
|
-
max-width:
|
|
17268
|
+
min-width: min(280px, 100%);
|
|
17269
|
+
max-width: 380px;
|
|
17270
|
+
box-sizing: border-box;
|
|
16857
17271
|
box-shadow: var(--shadow-xl);
|
|
16858
17272
|
transform: scale(0.95);
|
|
16859
17273
|
transition: transform 0.15s cubic-bezier(0.22,1,0.36,1);
|
|
@@ -16862,100 +17276,139 @@
|
|
|
16862
17276
|
.fe-modal-title {
|
|
16863
17277
|
font-size: 13px;
|
|
16864
17278
|
font-weight: 600;
|
|
16865
|
-
color:
|
|
17279
|
+
color: var(--t-bright);
|
|
16866
17280
|
margin-bottom: 8px;
|
|
17281
|
+
overflow-wrap: anywhere;
|
|
16867
17282
|
}
|
|
16868
17283
|
.fe-modal-body {
|
|
16869
17284
|
font-size: 12px;
|
|
16870
|
-
color:
|
|
17285
|
+
color: var(--t-primary);
|
|
16871
17286
|
line-height: 1.5;
|
|
16872
17287
|
margin-bottom: 18px;
|
|
17288
|
+
overflow-wrap: anywhere;
|
|
16873
17289
|
}
|
|
16874
|
-
.fe-modal-body
|
|
17290
|
+
.fe-modal-body p { margin: 0 0 6px; }
|
|
17291
|
+
.fe-modal-body p:last-child { margin-bottom: 0; }
|
|
17292
|
+
.fe-modal-body code { font-family: var(--ff-mono); color: var(--t-bright); }
|
|
16875
17293
|
.fe-modal-actions {
|
|
16876
17294
|
display: flex;
|
|
16877
17295
|
justify-content: flex-end;
|
|
17296
|
+
flex-wrap: wrap;
|
|
16878
17297
|
gap: 8px;
|
|
16879
17298
|
}
|
|
16880
17299
|
.fe-modal-btn {
|
|
16881
17300
|
padding: 6px 14px;
|
|
16882
|
-
font-size:
|
|
17301
|
+
font-size: 12px;
|
|
16883
17302
|
font-family: inherit;
|
|
16884
17303
|
border: none;
|
|
16885
|
-
border-radius:
|
|
17304
|
+
border-radius: var(--r-small);
|
|
16886
17305
|
cursor: pointer;
|
|
16887
17306
|
transition: background 0.12s, color 0.12s;
|
|
16888
17307
|
}
|
|
16889
17308
|
.fe-modal-cancel {
|
|
16890
|
-
background:
|
|
16891
|
-
color:
|
|
17309
|
+
background: var(--s-light);
|
|
17310
|
+
color: var(--t-primary);
|
|
16892
17311
|
}
|
|
16893
|
-
.fe-modal-cancel:hover { background:
|
|
17312
|
+
.fe-modal-cancel:hover { background: var(--s-medium); color: var(--t-bright); }
|
|
16894
17313
|
.fe-modal-confirm {
|
|
16895
|
-
background:
|
|
16896
|
-
color:
|
|
17314
|
+
background: var(--accent-red-bg);
|
|
17315
|
+
color: var(--fe-git-deleted);
|
|
16897
17316
|
}
|
|
16898
|
-
.fe-modal-confirm:hover { background:
|
|
17317
|
+
.fe-modal-confirm:hover { background: var(--accent-red-hover); color: var(--t-bright); }
|
|
17318
|
+
/* A question that removes nothing: its answer is not a warning. */
|
|
17319
|
+
.fe-modal--plain .fe-modal-confirm { background: var(--s-medium); color: var(--t-bright); }
|
|
17320
|
+
.fe-modal--plain .fe-modal-confirm:hover { background: var(--s-active); }
|
|
16899
17321
|
|
|
16900
17322
|
/* ── Trust-workspace modal (amber accent, different from destructive red) ── */
|
|
16901
|
-
.fe-trust-modal .fe-modal-title { color:
|
|
16902
|
-
.fe-trust-modal .fe-modal-confirm { background:
|
|
16903
|
-
.fe-trust-modal .fe-modal-confirm:hover { background:
|
|
17323
|
+
.fe-trust-modal .fe-modal-title { color: var(--accent-orange); }
|
|
17324
|
+
.fe-trust-modal .fe-modal-confirm { background: var(--accent-orange-bg); color: var(--accent-orange); }
|
|
17325
|
+
.fe-trust-modal .fe-modal-confirm:hover { background: var(--s-medium); }
|
|
16904
17326
|
.fe-trust-modal .fe-modal-confirm:disabled { opacity: 0.5; cursor: default; }
|
|
16905
17327
|
.fe-trust-path {
|
|
16906
17328
|
margin-top: 10px;
|
|
16907
17329
|
padding: 8px 10px;
|
|
16908
|
-
background: rgba(0,0,0,0.
|
|
16909
|
-
border: 1px solid
|
|
16910
|
-
border-radius:
|
|
16911
|
-
font-family: var(--
|
|
17330
|
+
background: rgba(0,0,0,0.25);
|
|
17331
|
+
border: 1px solid var(--b-subtle);
|
|
17332
|
+
border-radius: var(--r-small);
|
|
17333
|
+
font-family: var(--ff-mono);
|
|
16912
17334
|
font-size: 11px;
|
|
16913
|
-
color:
|
|
17335
|
+
color: var(--t-primary);
|
|
16914
17336
|
word-break: break-all;
|
|
16915
17337
|
}
|
|
16916
17338
|
|
|
16917
|
-
/*
|
|
16918
|
-
|
|
16919
|
-
|
|
16920
|
-
|
|
16921
|
-
|
|
16922
|
-
|
|
16923
|
-
-
|
|
16924
|
-
|
|
16925
|
-
|
|
16926
|
-
|
|
16927
|
-
|
|
16928
|
-
|
|
16929
|
-
|
|
16930
|
-
|
|
16931
|
-
|
|
16932
|
-
|
|
16933
|
-
width: 22px;
|
|
16934
|
-
height: 22px;
|
|
16935
|
-
border-radius: 50%;
|
|
16936
|
-
border: 2px solid transparent;
|
|
16937
|
-
cursor: pointer;
|
|
16938
|
-
transition: transform 0.12s, border-color 0.12s;
|
|
16939
|
-
padding: 0;
|
|
16940
|
-
}
|
|
16941
|
-
.fe-color-swatch:hover {
|
|
16942
|
-
transform: scale(1.2);
|
|
16943
|
-
border-color: rgba(255,255,255,0.3);
|
|
16944
|
-
}
|
|
16945
|
-
.fe-color-swatch--active {
|
|
16946
|
-
border-color: rgba(255,255,255,0.7);
|
|
16947
|
-
box-shadow: 0 0 0 1px rgba(255,255,255,0.2);
|
|
17339
|
+
/* A finger needs more room than a pointer: rows, buttons and menu items grow. */
|
|
17340
|
+
@media (pointer: coarse) {
|
|
17341
|
+
.fe-row { height: 40px; }
|
|
17342
|
+
.fe-toolbar { gap: 0; justify-content: flex-start; overflow-x: auto; scrollbar-width: none; }
|
|
17343
|
+
.fe-toolbar .detail-action-btn { width: 44px; height: 44px; }
|
|
17344
|
+
.fe-toolbar .detail-action-btn svg { width: 16px; height: 16px; }
|
|
17345
|
+
.fe-filter input, .fe-project-btn { min-height: 44px; font-size: 13px; }
|
|
17346
|
+
#fe-filter-clear { padding: 12px; right: 8px; }
|
|
17347
|
+
.fe-ctx-item { padding: 13px 10px; font-size: 13px; }
|
|
17348
|
+
.fe-ctx-swatches { grid-template-columns: repeat(5, 36px); gap: 10px; }
|
|
17349
|
+
.fe-color-swatch { width: 36px; height: 36px; }
|
|
17350
|
+
.fe-modal-btn { min-height: 44px; padding: 10px 16px; }
|
|
17351
|
+
.fe-note-action, .fe-notice-action, .fe-notice-close { min-height: 44px; min-width: 44px; }
|
|
17352
|
+
.fe-project-option { min-height: 44px; }
|
|
17353
|
+
.fe-resize-handle { width: 16px; }
|
|
17354
|
+
.fe-rename-input { height: 32px; font-size: 14px; }
|
|
16948
17355
|
}
|
|
16949
|
-
|
|
16950
|
-
|
|
16951
|
-
|
|
16952
|
-
|
|
16953
|
-
justify-content: center;
|
|
16954
|
-
padding: 4px 0;
|
|
17356
|
+
@media (prefers-reduced-motion: reduce) {
|
|
17357
|
+
#file-explorer-panel, .fe-ctx-flyout, .fe-ctx-flyout--out, .fe-modal-overlay, .fe-modal, .fe-git-popover, .fe-git-popover.fe-git-output-mode,
|
|
17358
|
+
.fe-row, .fe-chevron svg, .fe-color-swatch, .fe-project-chevron { transition: none; }
|
|
17359
|
+
.fe-ctx-flyout, .fe-git-popover, .fe-modal, .fe-color-swatch:hover { transform: none; }
|
|
16955
17360
|
}
|
|
16956
17361
|
|
|
16957
|
-
/* ── File Editor (standalone panel, slides from file explorer's right edge) ──
|
|
17362
|
+
/* ── File Editor (standalone panel, slides from file explorer's right edge) ──
|
|
17363
|
+
The editor inside it is CodeMirror (shared/editor/). Its colours are the
|
|
17364
|
+
--ed-* variables below, read by shared/editor/editor-theme.js: a skin
|
|
17365
|
+
restyles the editor by overriding them. */
|
|
16958
17366
|
.fe-editor-panel {
|
|
17367
|
+
--ed-bg: rgb(16, 16, 18);
|
|
17368
|
+
--ed-fg: #8a8ea0;
|
|
17369
|
+
--ed-caret: var(--t-bright);
|
|
17370
|
+
--ed-selection: rgba(99,102,241,0.25);
|
|
17371
|
+
--ed-line-active: rgba(255,255,255,0.03);
|
|
17372
|
+
--ed-gutter-bg: rgba(0,0,0,0.1);
|
|
17373
|
+
--ed-gutter-fg: rgba(255,255,255,0.15);
|
|
17374
|
+
--ed-gutter-fg-active: rgba(255,255,255,0.5);
|
|
17375
|
+
--ed-gutter-border: rgba(255,255,255,0.04);
|
|
17376
|
+
/* Mono syntax tokens — cool gray palette */
|
|
17377
|
+
--ed-kw: #cccdd6;
|
|
17378
|
+
--ed-str: #6e7a86;
|
|
17379
|
+
--ed-cm: #5a6a5a;
|
|
17380
|
+
--ed-num: #8c94a8;
|
|
17381
|
+
--ed-fn: #b0b4c4;
|
|
17382
|
+
--ed-op: #585c6c;
|
|
17383
|
+
--ed-tag: #a0a4b4;
|
|
17384
|
+
--ed-attr: #787c8c;
|
|
17385
|
+
--ed-prop: #9498a8;
|
|
17386
|
+
--ed-br: #8a7a50;
|
|
17387
|
+
--ed-match: rgba(255,255,255,0.10);
|
|
17388
|
+
--ed-match-current: rgba(99,102,241,0.35);
|
|
17389
|
+
--ed-ghost: rgba(255,255,255,0.28);
|
|
17390
|
+
--ed-add: #9fe3b4;
|
|
17391
|
+
--ed-add-bg: rgba(95,207,131,0.10);
|
|
17392
|
+
--ed-del: #f0a3a3;
|
|
17393
|
+
--ed-del-bg: rgba(239,112,112,0.10);
|
|
17394
|
+
--ed-error: var(--stg-err, #fca5a5);
|
|
17395
|
+
--ed-warn: #fbbf24;
|
|
17396
|
+
/* Spaces and tabs made visible, and the minimap's box over the part in view */
|
|
17397
|
+
--ed-whitespace: rgba(255,255,255,0.2);
|
|
17398
|
+
--ed-minimap-box: rgba(255,255,255,0.06);
|
|
17399
|
+
--ed-minimap-box-active: rgba(255,255,255,0.1);
|
|
17400
|
+
--ed-minimap-edge: var(--b-hover);
|
|
17401
|
+
--ed-minimap-match: var(--fw-focus);
|
|
17402
|
+
/* Indent guides and the completion list take existing tokens. */
|
|
17403
|
+
--ed-guide: var(--b-light);
|
|
17404
|
+
--ed-guide-active: var(--b-visible);
|
|
17405
|
+
--ed-menu-bg: #16161a;
|
|
17406
|
+
--ed-menu-fg: var(--t-primary);
|
|
17407
|
+
--ed-menu-fg-active: var(--t-bright);
|
|
17408
|
+
--ed-menu-border: rgba(255,255,255,0.10);
|
|
17409
|
+
--ed-menu-hover: var(--s-hover);
|
|
17410
|
+
--ed-menu-radius: 8px;
|
|
17411
|
+
--ed-menu-shadow: 0 12px 32px rgba(0,0,0,0.4);
|
|
16959
17412
|
position: fixed;
|
|
16960
17413
|
top: var(--navbar-height, 48px);
|
|
16961
17414
|
left: calc(var(--sidebar-total-width, 0px));
|
|
@@ -16965,7 +17418,7 @@
|
|
|
16965
17418
|
z-index: 198;
|
|
16966
17419
|
display: flex;
|
|
16967
17420
|
flex-direction: column;
|
|
16968
|
-
background:
|
|
17421
|
+
background: var(--ed-bg);
|
|
16969
17422
|
border-left: 1px solid rgba(255,255,255,0.04);
|
|
16970
17423
|
box-shadow: var(--shadow-md);
|
|
16971
17424
|
transform: translateX(40px);
|
|
@@ -16995,6 +17448,110 @@
|
|
|
16995
17448
|
flex-shrink: 0;
|
|
16996
17449
|
}
|
|
16997
17450
|
|
|
17451
|
+
/* Bars under the header (the file changed on disk…): the banner's geometry, neutral */
|
|
17452
|
+
.fe-editor-bar {
|
|
17453
|
+
display: flex;
|
|
17454
|
+
align-items: center;
|
|
17455
|
+
justify-content: center;
|
|
17456
|
+
flex-wrap: wrap;
|
|
17457
|
+
gap: 4px 14px;
|
|
17458
|
+
padding: 6px 12px;
|
|
17459
|
+
font-size: 12px;
|
|
17460
|
+
color: var(--t-primary);
|
|
17461
|
+
background: rgba(255,255,255,0.04);
|
|
17462
|
+
border-bottom: 1px solid var(--b-subtle);
|
|
17463
|
+
flex-shrink: 0;
|
|
17464
|
+
}
|
|
17465
|
+
.fe-editor-bar-action {
|
|
17466
|
+
background: none; border: none; padding: 0; cursor: pointer;
|
|
17467
|
+
font: inherit; font-weight: 600; color: var(--t-bright);
|
|
17468
|
+
text-decoration: underline; text-underline-offset: 2px;
|
|
17469
|
+
transition: color 0.15s;
|
|
17470
|
+
}
|
|
17471
|
+
.fe-editor-bar-action:hover { color: #fff; }
|
|
17472
|
+
|
|
17473
|
+
/* Tab strip (shared/editor/editor-tabs.js): a 28px row under the header, there while two or more files are open */
|
|
17474
|
+
.fe-editor-tabs {
|
|
17475
|
+
display: flex;
|
|
17476
|
+
align-items: stretch;
|
|
17477
|
+
height: 28px;
|
|
17478
|
+
flex-shrink: 0;
|
|
17479
|
+
overflow-x: auto;
|
|
17480
|
+
overflow-y: hidden;
|
|
17481
|
+
scrollbar-width: none;
|
|
17482
|
+
border-bottom: 1px solid rgba(255,255,255,0.04);
|
|
17483
|
+
background: rgba(0,0,0,0.1);
|
|
17484
|
+
}
|
|
17485
|
+
.fe-editor-tabs[hidden] { display: none; }
|
|
17486
|
+
.fe-editor-tabs::-webkit-scrollbar { display: none; }
|
|
17487
|
+
.fe-editor-tab {
|
|
17488
|
+
position: relative;
|
|
17489
|
+
display: flex;
|
|
17490
|
+
align-items: center;
|
|
17491
|
+
gap: 6px;
|
|
17492
|
+
flex: 0 0 auto;
|
|
17493
|
+
max-width: 240px;
|
|
17494
|
+
padding: 0 6px 0 10px;
|
|
17495
|
+
font-size: 11px;
|
|
17496
|
+
font-family: var(--ff-mono);
|
|
17497
|
+
color: var(--t-secondary);
|
|
17498
|
+
border-right: 1px solid rgba(255,255,255,0.04);
|
|
17499
|
+
cursor: pointer;
|
|
17500
|
+
user-select: none;
|
|
17501
|
+
transition: color 0.15s, background-color 0.15s;
|
|
17502
|
+
}
|
|
17503
|
+
.fe-editor-tab:hover { color: var(--t-primary); background: rgba(255,255,255,0.03); }
|
|
17504
|
+
.fe-editor-tab.active { color: var(--t-bright); }
|
|
17505
|
+
.fe-editor-tab.active::after {
|
|
17506
|
+
content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 1px;
|
|
17507
|
+
background: var(--fw-focus);
|
|
17508
|
+
}
|
|
17509
|
+
.fe-editor-tab.dragging { opacity: 0.5; }
|
|
17510
|
+
/* A tab the next file may take says so in italics */
|
|
17511
|
+
.fe-editor-tab.preview .fe-editor-tab-name { font-style: italic; }
|
|
17512
|
+
.fe-editor-tab-icon { display: flex; flex-shrink: 0; }
|
|
17513
|
+
.fe-editor-tab-icon svg {
|
|
17514
|
+
width: 12px; height: 12px; fill: none;
|
|
17515
|
+
stroke: currentColor; stroke-width: 2;
|
|
17516
|
+
stroke-linecap: round; stroke-linejoin: round;
|
|
17517
|
+
}
|
|
17518
|
+
.fe-editor-tab-icon img { width: 12px; height: 12px; }
|
|
17519
|
+
.fe-editor-tab:not(.active) .fe-editor-tab-icon { opacity: 0.6; }
|
|
17520
|
+
/* A plan or a changelog: the banner's accent on its icon, and its kind after the name */
|
|
17521
|
+
.fe-editor-tab.marked .fe-editor-tab-icon { color: var(--accent, #06d6a0); }
|
|
17522
|
+
.fe-editor-tab-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
17523
|
+
.fe-editor-tab-hint,
|
|
17524
|
+
.fe-editor-tab-mark {
|
|
17525
|
+
flex-shrink: 2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
17526
|
+
font-size: 10px; color: var(--t-secondary);
|
|
17527
|
+
}
|
|
17528
|
+
.fe-editor-tab-close {
|
|
17529
|
+
position: relative; display: flex; align-items: center; justify-content: center;
|
|
17530
|
+
width: 16px; height: 16px; flex-shrink: 0; padding: 0;
|
|
17531
|
+
background: none; border: none; border-radius: 3px; cursor: pointer; color: inherit;
|
|
17532
|
+
}
|
|
17533
|
+
.fe-editor-tab-close svg {
|
|
17534
|
+
width: 10px; height: 10px; fill: none;
|
|
17535
|
+
stroke: currentColor; stroke-width: 2; stroke-linecap: round;
|
|
17536
|
+
opacity: 0; transition: opacity 0.12s;
|
|
17537
|
+
}
|
|
17538
|
+
.fe-editor-tab:hover .fe-editor-tab-close svg,
|
|
17539
|
+
.fe-editor-tab.active .fe-editor-tab-close svg,
|
|
17540
|
+
.fe-editor-tab-close:focus-visible svg { opacity: 0.7; }
|
|
17541
|
+
.fe-editor-tab-close:hover { background: rgba(255,255,255,0.08); }
|
|
17542
|
+
.fe-editor-tab .fe-editor-tab-close:hover svg { opacity: 1; }
|
|
17543
|
+
/* Unsaved: the header's dot in place of the close mark, which comes back under the pointer */
|
|
17544
|
+
.fe-editor-tab-dot {
|
|
17545
|
+
position: absolute; width: 7px; height: 7px; border-radius: 50%;
|
|
17546
|
+
background: #ffca28; opacity: 0; transition: opacity 0.12s;
|
|
17547
|
+
}
|
|
17548
|
+
.fe-editor-tab.dirty .fe-editor-tab-dot { opacity: 1; }
|
|
17549
|
+
.fe-editor-tab.dirty .fe-editor-tab-close svg { opacity: 0; }
|
|
17550
|
+
.fe-editor-tab.dirty .fe-editor-tab-close:hover .fe-editor-tab-dot { opacity: 0; }
|
|
17551
|
+
.fe-editor-tab.dirty .fe-editor-tab-close:hover svg { opacity: 1; }
|
|
17552
|
+
/* The strip clips: the focus ring is drawn inside the tab */
|
|
17553
|
+
body .fe-editor-panel .fe-editor-tabs .fe-editor-tab.fe-editor-tab:focus-visible { outline-offset: -2px; }
|
|
17554
|
+
|
|
16998
17555
|
/* Header */
|
|
16999
17556
|
.fe-editor-header {
|
|
17000
17557
|
display: flex;
|
|
@@ -17028,7 +17585,7 @@
|
|
|
17028
17585
|
.fe-editor-dot.dirty { background: #ffca28; }
|
|
17029
17586
|
.fe-editor-filepath {
|
|
17030
17587
|
font-size: 11px; font-family: var(--ff-mono);
|
|
17031
|
-
color: var(--t-
|
|
17588
|
+
color: var(--t-secondary); overflow: hidden;
|
|
17032
17589
|
text-overflow: ellipsis; white-space: nowrap;
|
|
17033
17590
|
direction: rtl; text-align: left;
|
|
17034
17591
|
}
|
|
@@ -17045,6 +17602,7 @@
|
|
|
17045
17602
|
.fe-editor-action:hover { background: rgba(255,255,255,0.05); }
|
|
17046
17603
|
.fe-editor-action:hover svg { stroke: var(--t-bright); }
|
|
17047
17604
|
.fe-editor-action.active svg { stroke: var(--accent-blue, #6366f1); }
|
|
17605
|
+
.fe-editor-action[hidden] { display: none; }
|
|
17048
17606
|
.fe-editor-help-wrap { position: relative; display: flex; }
|
|
17049
17607
|
.fe-editor-help-btn svg circle,
|
|
17050
17608
|
.fe-editor-help-btn svg path,
|
|
@@ -17066,6 +17624,8 @@
|
|
|
17066
17624
|
border-radius: 8px;
|
|
17067
17625
|
padding: 10px 14px;
|
|
17068
17626
|
min-width: 200px;
|
|
17627
|
+
max-height: min(60vh, 440px);
|
|
17628
|
+
overflow-y: auto;
|
|
17069
17629
|
z-index: 100;
|
|
17070
17630
|
backdrop-filter: blur(12px);
|
|
17071
17631
|
box-shadow: var(--shadow-md);
|
|
@@ -17103,6 +17663,7 @@
|
|
|
17103
17663
|
.fe-editor-kb span {
|
|
17104
17664
|
color: var(--t-muted);
|
|
17105
17665
|
margin-left: 12px;
|
|
17666
|
+
white-space: nowrap;
|
|
17106
17667
|
}
|
|
17107
17668
|
.fe-editor-sep {
|
|
17108
17669
|
width: 1px; height: 14px;
|
|
@@ -17123,7 +17684,7 @@
|
|
|
17123
17684
|
#fe-editor-close { border-color: rgba(255,82,82,0.35); color: var(--accent-red); }
|
|
17124
17685
|
#fe-editor-close:hover:not(:disabled) { border-color: rgba(255,82,82,0.55); color: var(--accent-red); background: var(--accent-red-bg); }
|
|
17125
17686
|
|
|
17126
|
-
/* Editor body —
|
|
17687
|
+
/* Editor body — CodeMirror, the Markdown preview, or a message in their place */
|
|
17127
17688
|
.fe-editor-body {
|
|
17128
17689
|
flex: 1;
|
|
17129
17690
|
display: flex;
|
|
@@ -17131,89 +17692,44 @@
|
|
|
17131
17692
|
position: relative;
|
|
17132
17693
|
overflow: hidden;
|
|
17133
17694
|
}
|
|
17134
|
-
.fe-editor-
|
|
17135
|
-
|
|
17136
|
-
|
|
17137
|
-
|
|
17138
|
-
text-align: right;
|
|
17139
|
-
font-family: 'JetBrains Mono', 'SF Mono', 'Consolas', monospace;
|
|
17140
|
-
font-size: 12px;
|
|
17141
|
-
line-height: 20px;
|
|
17142
|
-
color: rgba(255,255,255,0.15);
|
|
17143
|
-
background: rgba(0,0,0,0.1);
|
|
17144
|
-
border-right: 1px solid rgba(255,255,255,0.04);
|
|
17145
|
-
overflow: hidden;
|
|
17146
|
-
user-select: none;
|
|
17147
|
-
pointer-events: none;
|
|
17148
|
-
}
|
|
17149
|
-
.fe-editor-gutter div {
|
|
17150
|
-
padding-right: 10px;
|
|
17151
|
-
height: 20px;
|
|
17152
|
-
}
|
|
17153
|
-
.fe-editor-highlight {
|
|
17154
|
-
position: absolute;
|
|
17155
|
-
top: 0;
|
|
17156
|
-
left: 48px;
|
|
17157
|
-
right: 0;
|
|
17158
|
-
bottom: 0;
|
|
17159
|
-
margin: 0;
|
|
17160
|
-
padding: 10px 16px;
|
|
17161
|
-
font-family: 'JetBrains Mono', 'SF Mono', 'Consolas', monospace;
|
|
17162
|
-
font-size: 12px;
|
|
17163
|
-
line-height: 20px;
|
|
17164
|
-
white-space: pre-wrap;
|
|
17165
|
-
overflow-wrap: break-word;
|
|
17166
|
-
overflow: hidden;
|
|
17167
|
-
pointer-events: none;
|
|
17168
|
-
color: #8a8ea0;
|
|
17169
|
-
tab-size: 2;
|
|
17170
|
-
z-index: 1;
|
|
17171
|
-
border: none;
|
|
17172
|
-
background: transparent;
|
|
17695
|
+
.fe-editor-host {
|
|
17696
|
+
flex: 1;
|
|
17697
|
+
min-width: 0;
|
|
17698
|
+
min-height: 0;
|
|
17173
17699
|
}
|
|
17174
|
-
.fe-editor-
|
|
17175
|
-
|
|
17176
|
-
|
|
17177
|
-
|
|
17178
|
-
|
|
17700
|
+
.fe-editor-host[hidden],
|
|
17701
|
+
.fe-editor-message[hidden] { display: none; }
|
|
17702
|
+
/* The scroll bar the editor always had: 6px, a darker track */
|
|
17703
|
+
.fe-editor-host .cm-scroller::-webkit-scrollbar { width: 6px; height: 6px; }
|
|
17704
|
+
.fe-editor-host .cm-scroller::-webkit-scrollbar-track { background: rgba(0,0,0,0.15); }
|
|
17705
|
+
.fe-editor-host .cm-scroller::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.2); border-radius: 3px; }
|
|
17706
|
+
.fe-editor-host .cm-scroller::-webkit-scrollbar-corner { background: transparent; }
|
|
17707
|
+
/* Fold arrows: the folded ones always, the rest while the pointer is over the gutter */
|
|
17708
|
+
.fe-editor-fold { display: inline-flex; align-items: center; justify-content: center; height: 100%; }
|
|
17709
|
+
.fe-editor-fold svg {
|
|
17710
|
+
width: 9px; height: 9px; fill: none;
|
|
17711
|
+
stroke: currentColor; stroke-width: 2.5;
|
|
17712
|
+
stroke-linecap: round; stroke-linejoin: round;
|
|
17179
17713
|
}
|
|
17180
|
-
.fe-editor-
|
|
17181
|
-
|
|
17182
|
-
|
|
17183
|
-
.fe-editor-
|
|
17184
|
-
background: rgba(99,102,241,0.25);
|
|
17185
|
-
}
|
|
17186
|
-
/* Mono syntax tokens — cool gray palette */
|
|
17187
|
-
.sh-kw { color: #cccdd6; }
|
|
17188
|
-
.sh-str { color: #6e7a86; }
|
|
17189
|
-
.sh-cm { color: #5a6a5a; font-style: italic; }
|
|
17190
|
-
.sh-num { color: #8c94a8; }
|
|
17191
|
-
.sh-fn { color: #b0b4c4; }
|
|
17192
|
-
.sh-op { color: #585c6c; }
|
|
17193
|
-
.sh-tag { color: #a0a4b4; }
|
|
17194
|
-
.sh-attr { color: #787c8c; }
|
|
17195
|
-
.sh-prop { color: #9498a8; }
|
|
17196
|
-
.sh-br { color: #8a7a50; }
|
|
17197
|
-
.fe-editor-textarea {
|
|
17714
|
+
.fe-editor-fold--open { opacity: 0; transition: opacity 0.12s; }
|
|
17715
|
+
.fe-editor-host .cm-gutters:hover .fe-editor-fold--open { opacity: 1; }
|
|
17716
|
+
/* A file the editor does not open, or an editor that did not load */
|
|
17717
|
+
.fe-editor-message {
|
|
17198
17718
|
flex: 1;
|
|
17199
|
-
|
|
17200
|
-
|
|
17201
|
-
|
|
17202
|
-
|
|
17719
|
+
display: flex;
|
|
17720
|
+
flex-direction: column;
|
|
17721
|
+
align-items: center;
|
|
17722
|
+
justify-content: center;
|
|
17723
|
+
gap: 12px;
|
|
17724
|
+
padding: 24px;
|
|
17725
|
+
text-align: center;
|
|
17726
|
+
}
|
|
17727
|
+
.fe-editor-message-text {
|
|
17728
|
+
max-width: 68ch;
|
|
17203
17729
|
font-size: 12px;
|
|
17204
|
-
line-height:
|
|
17205
|
-
color:
|
|
17206
|
-
|
|
17207
|
-
resize: none;
|
|
17208
|
-
outline: none;
|
|
17209
|
-
tab-size: 2;
|
|
17210
|
-
white-space: pre-wrap;
|
|
17211
|
-
overflow-wrap: break-word;
|
|
17212
|
-
overflow-x: auto;
|
|
17213
|
-
overflow-y: auto;
|
|
17214
|
-
min-height: 0;
|
|
17215
|
-
position: relative;
|
|
17216
|
-
z-index: 2;
|
|
17730
|
+
line-height: 1.45;
|
|
17731
|
+
color: var(--t-muted);
|
|
17732
|
+
overflow-wrap: anywhere;
|
|
17217
17733
|
}
|
|
17218
17734
|
|
|
17219
17735
|
/* Status bar */
|
|
@@ -17232,6 +17748,183 @@
|
|
|
17232
17748
|
.fe-editor-statusbar .fe-editor-sep {
|
|
17233
17749
|
height: 10px;
|
|
17234
17750
|
}
|
|
17751
|
+
.fe-editor-statusbar.is-empty > * { visibility: hidden; }
|
|
17752
|
+
|
|
17753
|
+
/* Status items that open a list (shared/editor/editor-statusbar.js): the bar's own text,
|
|
17754
|
+
with the hover of the AI chip. The negative margin keeps the bar's geometry. */
|
|
17755
|
+
.fe-editor-status-btn {
|
|
17756
|
+
margin: -2px -5px; padding: 2px 5px;
|
|
17757
|
+
background: none; border: none; border-radius: 3px; cursor: pointer;
|
|
17758
|
+
font: inherit; color: var(--t-secondary); white-space: nowrap;
|
|
17759
|
+
transition: color 0.15s, background-color 0.15s;
|
|
17760
|
+
}
|
|
17761
|
+
.fe-editor-status-btn:hover,
|
|
17762
|
+
.fe-editor-status-btn[aria-expanded="true"] { background: rgba(255,255,255,0.05); color: var(--t-primary); }
|
|
17763
|
+
|
|
17764
|
+
/* Menus of the editor panel (shared/editor/editor-menu.js): a tab's menu and the status bar's
|
|
17765
|
+
lists, in the menu treatment of the completion list and the AI popover. */
|
|
17766
|
+
.fe-editor-menu {
|
|
17767
|
+
position: absolute; z-index: 120;
|
|
17768
|
+
min-width: 168px; max-width: min(320px, calc(100% - 16px));
|
|
17769
|
+
padding: 6px;
|
|
17770
|
+
background: var(--ed-menu-bg); color: var(--ed-menu-fg);
|
|
17771
|
+
border: 1px solid var(--ed-menu-border); border-radius: var(--ed-menu-radius);
|
|
17772
|
+
box-shadow: var(--ed-menu-shadow);
|
|
17773
|
+
font-family: var(--ff-mono); font-size: 11px; line-height: 1.45;
|
|
17774
|
+
text-align: left; cursor: default;
|
|
17775
|
+
}
|
|
17776
|
+
body .fe-editor-panel .fe-editor-menu.fe-editor-menu.fe-editor-menu:focus-visible { outline: none; }
|
|
17777
|
+
.fe-editor-menu-search {
|
|
17778
|
+
display: block; width: 100%; box-sizing: border-box; margin-bottom: 6px;
|
|
17779
|
+
background: rgba(0,0,0,0.2);
|
|
17780
|
+
border: 1px solid rgba(255,255,255,0.08);
|
|
17781
|
+
border-radius: 4px;
|
|
17782
|
+
padding: 4px 8px;
|
|
17783
|
+
font-family: var(--ff-mono);
|
|
17784
|
+
font-size: 11px;
|
|
17785
|
+
color: var(--t-bright);
|
|
17786
|
+
outline: none;
|
|
17787
|
+
}
|
|
17788
|
+
.fe-editor-menu-search:focus { border-color: rgba(99,102,241,0.4); }
|
|
17789
|
+
.fe-editor-menu-list { max-height: min(264px, 50vh); overflow-y: auto; }
|
|
17790
|
+
.fe-editor-menu-list::-webkit-scrollbar { width: 6px; }
|
|
17791
|
+
.fe-editor-menu-list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.2); border-radius: 3px; }
|
|
17792
|
+
.fe-editor-menu-item {
|
|
17793
|
+
display: flex; align-items: center; gap: 6px;
|
|
17794
|
+
padding: 3px 8px; border-radius: 4px;
|
|
17795
|
+
white-space: nowrap; cursor: pointer;
|
|
17796
|
+
}
|
|
17797
|
+
.fe-editor-menu-item.active { background: var(--ed-menu-hover); color: var(--ed-menu-fg-active); }
|
|
17798
|
+
/* The menu itself shows no focus ring: the row the keyboard is on does, while the menu has the keyboard. */
|
|
17799
|
+
.fe-editor-menu:focus-within .fe-editor-menu-item.active { outline: 2px solid var(--fw-focus); outline-offset: -2px; }
|
|
17800
|
+
.fe-editor-menu-item[aria-disabled="true"] { opacity: 0.4; cursor: default; }
|
|
17801
|
+
.fe-editor-menu-check { width: 10px; flex-shrink: 0; color: var(--t-secondary); }
|
|
17802
|
+
.fe-editor-menu-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
17803
|
+
.fe-editor-menu-hint { flex-shrink: 0; color: var(--t-secondary); }
|
|
17804
|
+
.fe-editor-menu-sep { height: 1px; margin: 4px 2px; background: rgba(255,255,255,0.06); }
|
|
17805
|
+
.fe-editor-menu-empty { padding: 6px 8px; color: var(--t-secondary); }
|
|
17806
|
+
/* The command palette and go-to-file (shared/editor/editor-palette.js): the same menu, wider, at the top of the panel */
|
|
17807
|
+
.fe-editor-menu.fe-editor-palette { width: min(460px, calc(100% - 16px)); max-width: none; }
|
|
17808
|
+
.fe-editor-palette .fe-editor-menu-list { max-height: min(308px, 50vh); }
|
|
17809
|
+
.fe-editor-palette .fe-editor-menu-check { display: none; }
|
|
17810
|
+
.fe-editor-palette .fe-editor-menu-label { flex: 0 1 auto; }
|
|
17811
|
+
.fe-editor-palette .fe-editor-menu-hint { flex: 1 1 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; text-align: right; }
|
|
17812
|
+
|
|
17813
|
+
/* A comparison's button that puts one difference back (shared/editor/editor-compare.js):
|
|
17814
|
+
the find bar's Replace button */
|
|
17815
|
+
.fe-editor-host .cm-deletedChunk .fe-editor-compare-revert {
|
|
17816
|
+
margin: 2px 0; padding: 0 8px;
|
|
17817
|
+
background: rgba(255,255,255,0.04);
|
|
17818
|
+
border: 1px solid rgba(255,255,255,0.08);
|
|
17819
|
+
border-radius: 4px;
|
|
17820
|
+
font-family: var(--ff-mono); font-size: 10px; line-height: 14px;
|
|
17821
|
+
color: var(--t-primary);
|
|
17822
|
+
cursor: pointer;
|
|
17823
|
+
transition: all 0.12s;
|
|
17824
|
+
}
|
|
17825
|
+
.fe-editor-host .cm-deletedChunk .fe-editor-compare-revert:hover {
|
|
17826
|
+
background: rgba(255,255,255,0.08);
|
|
17827
|
+
color: var(--t-primary);
|
|
17828
|
+
border-color: rgba(255,255,255,0.14);
|
|
17829
|
+
}
|
|
17830
|
+
|
|
17831
|
+
@media (prefers-reduced-motion: reduce) {
|
|
17832
|
+
.fe-editor-tab, .fe-editor-tab-close svg, .fe-editor-tab-dot, .fe-editor-status-btn,
|
|
17833
|
+
.fe-editor-host .cm-deletedChunk .fe-editor-compare-revert { transition: none; }
|
|
17834
|
+
}
|
|
17835
|
+
/* Touch: the strip and the status items keep the 44px target of the panel's header controls */
|
|
17836
|
+
@media (pointer: coarse) {
|
|
17837
|
+
.fe-editor-tabs { height: 44px; }
|
|
17838
|
+
.fe-editor-tab-close { width: 28px; height: 28px; }
|
|
17839
|
+
.fe-editor-status-btn { margin: -12px -5px; padding: 12px 5px; }
|
|
17840
|
+
}
|
|
17841
|
+
|
|
17842
|
+
/* AI autocomplete: the status-bar chip and its popover (shared/editor/editor-ai.js).
|
|
17843
|
+
Built only when the server has the feature. The dot says the state, the tooltip names it:
|
|
17844
|
+
hollow = off, filled = ready, pulsing = asking the model, amber = a problem. */
|
|
17845
|
+
.fe-editor-ai { position: relative; display: inline-flex; align-items: center; }
|
|
17846
|
+
.fe-editor-ai[hidden], .fe-editor-statusbar .fe-editor-sep[hidden], .fe-editor-ai-popover[hidden], .fe-editor-ai-popover [hidden] { display: none; }
|
|
17847
|
+
.fe-editor-ai-chip {
|
|
17848
|
+
display: inline-flex; align-items: center; gap: 5px;
|
|
17849
|
+
margin: -2px -5px; padding: 2px 5px;
|
|
17850
|
+
background: none; border: none; border-radius: 3px; cursor: pointer;
|
|
17851
|
+
font: inherit; color: var(--t-secondary);
|
|
17852
|
+
transition: color 0.15s, background-color 0.15s;
|
|
17853
|
+
}
|
|
17854
|
+
.fe-editor-ai-chip:hover, .fe-editor-ai-chip[aria-expanded="true"] { background: rgba(255,255,255,0.05); color: var(--t-primary); }
|
|
17855
|
+
.fe-editor-ai-dot {
|
|
17856
|
+
width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0;
|
|
17857
|
+
background: transparent; box-shadow: inset 0 0 0 1px var(--t-secondary);
|
|
17858
|
+
transition: background-color 0.15s;
|
|
17859
|
+
}
|
|
17860
|
+
.fe-editor-ai-chip[data-state="ready"] .fe-editor-ai-dot,
|
|
17861
|
+
.fe-editor-ai-chip[data-state="thinking"] .fe-editor-ai-dot { background: var(--t-primary); box-shadow: none; }
|
|
17862
|
+
.fe-editor-ai-chip[data-state="thinking"] .fe-editor-ai-dot { animation: fe-editor-ai-pulse 1s ease-in-out infinite; }
|
|
17863
|
+
.fe-editor-ai-chip[data-state="problem"] .fe-editor-ai-dot { background: var(--ed-warn); box-shadow: none; }
|
|
17864
|
+
@keyframes fe-editor-ai-pulse {
|
|
17865
|
+
0%, 100% { opacity: 0.5; }
|
|
17866
|
+
50% { opacity: 1; }
|
|
17867
|
+
}
|
|
17868
|
+
body.ui-interacting .fe-editor-ai-dot { animation-play-state: paused; }
|
|
17869
|
+
.fe-editor-ai-popover {
|
|
17870
|
+
/* The accent as a fill white reads on (Settings' recipe for a checked control): the raw accent can be as light as the knob. */
|
|
17871
|
+
--stg-accent-fill: hsl(var(--accent-hue, 199), var(--accent-saturation, 92%), 36%);
|
|
17872
|
+
position: absolute; right: -6px; bottom: calc(100% + 8px);
|
|
17873
|
+
width: 292px; max-width: calc(100vw - 32px);
|
|
17874
|
+
padding: 10px 12px 8px;
|
|
17875
|
+
background: var(--ed-menu-bg); color: var(--ed-menu-fg);
|
|
17876
|
+
border: 1px solid var(--ed-menu-border); border-radius: var(--ed-menu-radius);
|
|
17877
|
+
box-shadow: var(--ed-menu-shadow);
|
|
17878
|
+
z-index: 100;
|
|
17879
|
+
font-family: inherit; font-size: 12px; line-height: 1.45; letter-spacing: 0;
|
|
17880
|
+
text-align: left; cursor: default;
|
|
17881
|
+
}
|
|
17882
|
+
.fe-editor-ai-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
17883
|
+
.fe-editor-ai-title { font-weight: 600; color: var(--ed-menu-fg-active); }
|
|
17884
|
+
.fe-editor-ai-switch {
|
|
17885
|
+
position: relative; width: 26px; height: 15px; min-width: 26px; padding: 0; flex-shrink: 0;
|
|
17886
|
+
border: 0; border-radius: 999px; cursor: pointer;
|
|
17887
|
+
background: rgba(255,255,255,0.16); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.22);
|
|
17888
|
+
transition: background-color 0.15s ease;
|
|
17889
|
+
}
|
|
17890
|
+
.fe-editor-ai-switch::after {
|
|
17891
|
+
content: ''; position: absolute; top: 1px; left: 1px; width: 13px; height: 13px; border-radius: 50%;
|
|
17892
|
+
background: #e8e8ea; box-shadow: 0 1px 2px rgba(0,0,0,0.35);
|
|
17893
|
+
transition: left 0.15s ease;
|
|
17894
|
+
}
|
|
17895
|
+
@supports (color: oklch(from red l c h)) {
|
|
17896
|
+
.fe-editor-ai-popover { --stg-accent-fill: oklch(from var(--accent-blue) 0.5 c h); }
|
|
17897
|
+
}
|
|
17898
|
+
.fe-editor-ai-switch[aria-checked="true"] { background: var(--stg-accent-fill); box-shadow: none; }
|
|
17899
|
+
.fe-editor-ai-switch[aria-checked="true"]::after { left: 12px; background: #fff; }
|
|
17900
|
+
.fe-editor-ai-note, .fe-editor-ai-status { margin: 6px 0 0; color: var(--t-secondary); overflow-wrap: anywhere; }
|
|
17901
|
+
.fe-editor-ai-status { color: var(--t-secondary); }
|
|
17902
|
+
.fe-editor-ai-status[data-state="problem"] { color: var(--ed-warn); }
|
|
17903
|
+
.fe-editor-ai-row { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
|
|
17904
|
+
.fe-editor-ai-row label { flex-shrink: 0; color: var(--t-secondary); }
|
|
17905
|
+
.fe-editor-ai-row .fe-editor-btn { flex-shrink: 0; white-space: nowrap; color: var(--t-secondary); }
|
|
17906
|
+
.fe-editor-ai-row .fe-editor-btn:hover:not(:disabled) { color: var(--t-primary); }
|
|
17907
|
+
.fe-editor-ai-select {
|
|
17908
|
+
flex: 1; min-width: 0; height: 22px; padding: 0 6px;
|
|
17909
|
+
background: rgba(0,0,0,0.2); color: var(--t-bright);
|
|
17910
|
+
border: 1px solid rgba(255,255,255,0.08); border-radius: 4px;
|
|
17911
|
+
font-family: var(--ff-mono); font-size: 11px;
|
|
17912
|
+
}
|
|
17913
|
+
.fe-editor-ai-result { min-width: 0; color: var(--t-secondary); overflow-wrap: anywhere; }
|
|
17914
|
+
.fe-editor-ai-keys { margin-top: 8px; padding-top: 6px; border-top: 1px solid rgba(255,255,255,0.06); }
|
|
17915
|
+
.fe-editor-ai-keys .fe-editor-kb span { color: var(--t-secondary); }
|
|
17916
|
+
.fe-editor-ai-link {
|
|
17917
|
+
display: inline-block; margin-top: 6px; padding: 2px 0;
|
|
17918
|
+
background: none; border: none; cursor: pointer;
|
|
17919
|
+
font: inherit; color: var(--t-secondary);
|
|
17920
|
+
text-decoration: underline; text-underline-offset: 2px;
|
|
17921
|
+
transition: color 0.15s;
|
|
17922
|
+
}
|
|
17923
|
+
.fe-editor-ai-link:hover { color: var(--t-bright); }
|
|
17924
|
+
@media (prefers-reduced-motion: reduce) {
|
|
17925
|
+
.fe-editor-ai-dot { animation: none !important; }
|
|
17926
|
+
.fe-editor-ai-chip, .fe-editor-ai-dot, .fe-editor-ai-switch, .fe-editor-ai-switch::after, .fe-editor-ai-link { transition: none; }
|
|
17927
|
+
}
|
|
17235
17928
|
|
|
17236
17929
|
/* View toggle (Raw/Preview) */
|
|
17237
17930
|
.fe-editor-view-toggle {
|
|
@@ -17332,10 +18025,23 @@
|
|
|
17332
18025
|
.fe-editor-find-input:focus {
|
|
17333
18026
|
border-color: rgba(99,102,241,0.4);
|
|
17334
18027
|
}
|
|
18028
|
+
.fe-editor-find-input.invalid,
|
|
18029
|
+
.fe-editor-goto-input.invalid { border-color: var(--ed-error); }
|
|
18030
|
+
.fe-editor-find-toggle {
|
|
18031
|
+
background: none; border: 1px solid transparent; cursor: pointer;
|
|
18032
|
+
min-width: 22px; padding: 2px 4px; border-radius: 3px;
|
|
18033
|
+
font-family: var(--ff-mono); font-size: 10px; line-height: 14px;
|
|
18034
|
+
color: var(--t-secondary);
|
|
18035
|
+
transition: color 0.12s, background-color 0.12s, border-color 0.12s;
|
|
18036
|
+
}
|
|
18037
|
+
.fe-editor-find-toggle:hover { background: rgba(255,255,255,0.05); color: var(--t-bright); }
|
|
18038
|
+
.fe-editor-find-toggle[aria-pressed="true"] {
|
|
18039
|
+
background: rgba(99,102,241,0.12); border-color: rgba(99,102,241,0.35); color: #a5b4fc;
|
|
18040
|
+
}
|
|
17335
18041
|
.fe-editor-find-count {
|
|
17336
18042
|
font-size: 10px;
|
|
17337
18043
|
font-family: var(--ff-mono);
|
|
17338
|
-
color: var(--t-
|
|
18044
|
+
color: var(--t-secondary);
|
|
17339
18045
|
min-width: 50px;
|
|
17340
18046
|
text-align: center;
|
|
17341
18047
|
}
|
|
@@ -17400,11 +18106,13 @@
|
|
|
17400
18106
|
.fe-editor-goto.open {
|
|
17401
18107
|
display: flex;
|
|
17402
18108
|
}
|
|
17403
|
-
.fe-editor-goto-label
|
|
18109
|
+
.fe-editor-goto-label,
|
|
18110
|
+
.fe-editor-goto-hint {
|
|
17404
18111
|
font-size: 11px;
|
|
17405
18112
|
font-family: var(--ff-mono);
|
|
17406
18113
|
color: var(--t-muted);
|
|
17407
18114
|
}
|
|
18115
|
+
.fe-editor-goto-hint { font-size: 10px; }
|
|
17408
18116
|
.fe-editor-goto-input {
|
|
17409
18117
|
width: 80px;
|
|
17410
18118
|
background: rgba(0,0,0,0.2);
|
|
@@ -17426,36 +18134,9 @@
|
|
|
17426
18134
|
border-color: rgba(99,102,241,0.4);
|
|
17427
18135
|
}
|
|
17428
18136
|
|
|
17429
|
-
|
|
17430
|
-
|
|
17431
|
-
|
|
17432
|
-
left: 48px;
|
|
17433
|
-
right: 0;
|
|
17434
|
-
height: 20px;
|
|
17435
|
-
background: rgba(255,255,255,0.03);
|
|
17436
|
-
pointer-events: none;
|
|
17437
|
-
z-index: 0;
|
|
17438
|
-
transition: top 0.05s;
|
|
17439
|
-
}
|
|
17440
|
-
|
|
17441
|
-
/* Scroll indicator */
|
|
17442
|
-
.fe-editor-scrollmap {
|
|
17443
|
-
position: absolute;
|
|
17444
|
-
top: 0;
|
|
17445
|
-
right: 0;
|
|
17446
|
-
width: 6px;
|
|
17447
|
-
height: 100%;
|
|
17448
|
-
background: rgba(0,0,0,0.15);
|
|
17449
|
-
z-index: 2;
|
|
17450
|
-
pointer-events: none;
|
|
17451
|
-
}
|
|
17452
|
-
.fe-editor-scrollmap-thumb {
|
|
17453
|
-
position: absolute;
|
|
17454
|
-
width: 100%;
|
|
17455
|
-
min-height: 12px;
|
|
17456
|
-
background: rgba(255,255,255,0.1);
|
|
17457
|
-
border-radius: 3px;
|
|
17458
|
-
transition: top 0.08s, height 0.08s;
|
|
18137
|
+
@media (prefers-reduced-motion: reduce) {
|
|
18138
|
+
.fe-editor-panel,
|
|
18139
|
+
.fe-editor-fold--open { transition: none; }
|
|
17459
18140
|
}
|
|
17460
18141
|
|
|
17461
18142
|
/* ── Multi-select bar (shared) ── */
|
|
@@ -17713,6 +18394,15 @@
|
|
|
17713
18394
|
text-align: center;
|
|
17714
18395
|
}
|
|
17715
18396
|
#loading-overlay.server-offline #loading-server-cmd { display: block; }
|
|
18397
|
+
/* A restart the user asked for (ui-loading.js beginRestart). The overlay goes
|
|
18398
|
+
over the running app: there in the frame of the click, so no fade-in, and
|
|
18399
|
+
above every panel and dialog that is open (at boot nothing else is). While
|
|
18400
|
+
the restart runs there is nothing to press and no command to type; refused,
|
|
18401
|
+
the server is still there. */
|
|
18402
|
+
#loading-overlay.over-app { transition: none; z-index: 2147483647; }
|
|
18403
|
+
#loading-overlay.restart-busy #loading-action-btn,
|
|
18404
|
+
#loading-overlay.restart-busy #loading-server-cmd,
|
|
18405
|
+
#loading-overlay.restart-refused #loading-server-cmd { display: none; }
|
|
17716
18406
|
#loading-server-cmd-hint {
|
|
17717
18407
|
font-size: 12px;
|
|
17718
18408
|
color: rgba(255,255,255,0.25);
|
|
@@ -23706,9 +24396,12 @@
|
|
|
23706
24396
|
gap: 4px;
|
|
23707
24397
|
}
|
|
23708
24398
|
#term-minimized-tray:empty { display: none; }
|
|
23709
|
-
/*
|
|
23710
|
-
|
|
23711
|
-
|
|
24399
|
+
/* In the top-right row it is a row under the bar: placed with the row ("Fit"). The menus of the dock (workspaces,
|
|
24400
|
+
bookmarks, invite) draw over it, opaque: their blur lives inside the dock's own backdrop root and cannot reach
|
|
24401
|
+
the pills, and through 95% glass their labels still read. */
|
|
24402
|
+
#term-minimized-tray > .term-minimized-pill {
|
|
24403
|
+
max-width: 100%;
|
|
24404
|
+
}
|
|
23712
24405
|
|
|
23713
24406
|
.term-minimized-pill {
|
|
23714
24407
|
display: flex;
|