@pyric/cli 0.1.0-alpha.18 → 0.1.0-alpha.20
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/README.md +14 -9
- package/dist/bridge/server/mcp-contract.d.ts +2 -2
- package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
- package/dist/bridge/server/mcp-contract.js +3 -0
- package/dist/bridge/server/mcp-contract.js.map +1 -1
- package/dist/cli/index.d.ts +3 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +51 -42
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp-proxy.d.ts.map +1 -1
- package/dist/cli/mcp-proxy.js +3 -3
- package/dist/cli/mcp-proxy.js.map +1 -1
- package/dist/cli/parse-args.d.ts +1 -1
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +51 -15
- package/dist/cli/parse-args.js.map +1 -1
- package/dist/cli/pyric-config.d.ts +24 -0
- package/dist/cli/pyric-config.d.ts.map +1 -0
- package/dist/cli/pyric-config.js +28 -0
- package/dist/cli/pyric-config.js.map +1 -0
- package/dist/cli/rules.d.ts +1 -0
- package/dist/cli/rules.d.ts.map +1 -1
- package/dist/cli/rules.js +18 -4
- package/dist/cli/rules.js.map +1 -1
- package/dist/cli/{dev-runner.d.ts → sandbox-runner.d.ts} +33 -36
- package/dist/cli/sandbox-runner.d.ts.map +1 -0
- package/dist/cli/{dev-runner.js → sandbox-runner.js} +90 -55
- package/dist/cli/sandbox-runner.js.map +1 -0
- package/dist/cli/serve.d.ts +6 -4
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +99 -40
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/service-command-records/storage-rules-resolve.d.ts +4 -0
- package/dist/cli/service-command-records/storage-rules-resolve.d.ts.map +1 -0
- package/dist/cli/service-command-records/storage-rules-resolve.js +3 -0
- package/dist/cli/service-command-records/storage-rules-resolve.js.map +1 -0
- package/dist/cli/service-commands.generated.d.ts +3 -0
- package/dist/cli/service-commands.generated.d.ts.map +1 -1
- package/dist/cli/service-commands.generated.js +2 -0
- package/dist/cli/service-commands.generated.js.map +1 -1
- package/dist/cli/snapshot.js +5 -5
- package/dist/cli/snapshot.js.map +1 -1
- package/dist/cli/verify.js +1 -1
- package/dist/cli/verify.js.map +1 -1
- package/dist/functions-rtdb/development-runtime.js +1 -1
- package/dist/functions-rtdb/development-runtime.js.map +1 -1
- package/dist/functions-rtdb/project.js +8 -8
- package/dist/functions-rtdb/project.js.map +1 -1
- package/dist/next/guard.js +1 -1
- package/dist/next/guard.js.map +1 -1
- package/dist/remote/index.d.ts +1 -1
- package/dist/remote/index.js +9 -9
- package/dist/remote/index.js.map +1 -1
- package/dist/serve/bundler.js +10 -10
- package/dist/serve/bundler.js.map +1 -1
- package/dist/serve/entries/ai.d.ts.map +1 -1
- package/dist/serve/entries/ai.js +27 -1
- package/dist/serve/entries/ai.js.map +1 -1
- package/dist/serve/entries/auth-helper-dom.js +1 -1
- package/dist/serve/entries/auth-helper-dom.js.map +1 -1
- package/dist/serve/entries/auth-helper-runtime.js +1 -1
- package/dist/serve/entries/auth-helper-runtime.js.map +1 -1
- package/dist/serve/entries/firestore.js +3 -3
- package/dist/serve/entries/firestore.js.map +1 -1
- package/dist/serve/entries/keepalive.js +1 -1
- package/dist/serve/entries/keepalive.js.map +1 -1
- package/dist/serve/entries/runtime.js +21 -14
- package/dist/serve/entries/runtime.js.map +1 -1
- package/dist/serve/entries/storage.js +1 -1
- package/dist/serve/entries/storage.js.map +1 -1
- package/dist/serve/entries/worker-runtime.js +1 -1
- package/dist/serve/entries/worker-runtime.js.map +1 -1
- package/dist/serve/init-payload.d.ts +4 -0
- package/dist/serve/init-payload.d.ts.map +1 -1
- package/dist/serve/namespace.d.ts +6 -0
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +36 -5
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/rules.d.ts +3 -3
- package/dist/serve/rules.d.ts.map +1 -1
- package/dist/serve/rules.js +56 -25
- package/dist/serve/rules.js.map +1 -1
- package/dist/serve/runtime/chip.d.ts.map +1 -1
- package/dist/serve/runtime/chip.js +32 -1
- package/dist/serve/runtime/chip.js.map +1 -1
- package/dist/serve/runtime/manifest.d.ts +1 -1
- package/dist/serve/runtime/manifest.d.ts.map +1 -1
- package/dist/serve/runtime/manifest.js +1 -1
- package/dist/serve/runtime/manifest.js.map +1 -1
- package/dist/serve/runtime/status.d.ts.map +1 -1
- package/dist/serve/runtime/status.js +23 -0
- package/dist/serve/runtime/status.js.map +1 -1
- package/dist/serve/sandbox-session.d.ts +1 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +10 -4
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/server.d.ts +7 -0
- package/dist/serve/server.d.ts.map +1 -1
- package/dist/serve/server.js +15 -1
- package/dist/serve/server.js.map +1 -1
- package/dist/serve/site-ui/404.html +1 -1
- package/dist/serve/site-ui/_astro/{RulesCodeEditor.CzwHdCi9.js → RulesCodeEditor.XtDmHOlN.js} +1 -1
- package/dist/serve/site-ui/_astro/_example_.B9DG9HLJ.css +1 -0
- package/dist/serve/site-ui/_astro/_slug_.Da5VLhW1.css +1 -0
- package/dist/serve/site-ui/_astro/_studio_.BnfYCKoI.css +1 -0
- package/dist/serve/site-ui/_astro/app.B52xr-DK.js +1 -0
- package/dist/serve/site-ui/_astro/app.DWBraPUw.js +12 -0
- package/dist/serve/site-ui/_astro/app.pMSnN6Qw.css +1 -0
- package/dist/serve/site-ui/_astro/chess-showcase.B72XYeoh.js +354 -0
- package/dist/serve/site-ui/_astro/{example-runtime.B0byNQOl.js → example-runtime.C25_lx6Z.js} +2 -26
- package/dist/serve/site-ui/_astro/index.Tb-31efc.css +1 -0
- package/dist/serve/site-ui/_astro/index.UkCBr-_0.css +1 -0
- package/dist/serve/site-ui/_astro/sandbox-controls.DEpnKg-O.js +1169 -0
- package/dist/serve/site-ui/_astro/seed.Co0yUJY5.js +20 -0
- package/dist/serve/site-ui/_astro/writes.rpjrFzmu.js +102 -0
- package/dist/serve/site-ui/auth/index.html +5 -3
- package/dist/serve/site-ui/david-east.jpg +0 -0
- package/dist/serve/site-ui/docs/_rhythm/index.html +6 -3
- package/dist/serve/site-ui/docs/_rhythm.md +1 -1
- package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +45 -17
- package/dist/serve/site-ui/docs/agent/set-up-your-agent.md +20 -17
- package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +6 -5
- package/dist/serve/site-ui/docs/agent/watch-and-review.md +1 -5
- package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +8 -5
- package/dist/serve/site-ui/docs/agent/work-with-an-agent.md +4 -4
- package/dist/serve/site-ui/docs/ai-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/api-reference/index.html +6 -2
- package/dist/serve/site-ui/docs/api-reference.md +1 -0
- package/dist/serve/site-ui/docs/app-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/auth-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +5 -2
- package/dist/serve/site-ui/docs/build/authentication/index.html +7 -4
- package/dist/serve/site-ui/docs/build/authentication.md +2 -2
- package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +34 -53
- package/dist/serve/site-ui/docs/build/cloud-firestore.md +40 -36
- package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +5 -2
- package/dist/serve/site-ui/docs/build/cloud-storage/index.html +6 -3
- package/dist/serve/site-ui/docs/build/cloud-storage.md +1 -1
- package/dist/serve/site-ui/docs/build/realtime-database/index.html +9 -6
- package/dist/serve/site-ui/docs/build/realtime-database.md +4 -4
- package/dist/serve/site-ui/docs/conformance-scores/index.html +5 -2
- package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +6 -3
- package/dist/serve/site-ui/docs/create-pyric-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/database-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/examples/chess/index.html +649 -250
- package/dist/serve/site-ui/docs/examples/chess.md +45 -16
- package/dist/serve/site-ui/docs/examples/index.html +6 -3
- package/dist/serve/site-ui/docs/firestore-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +9 -6
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works.md +5 -5
- package/dist/serve/site-ui/docs/get-started/nextjs/index.html +9 -6
- package/dist/serve/site-ui/docs/get-started/nextjs.md +4 -4
- package/dist/serve/site-ui/docs/get-started/start-building/index.html +41 -10
- package/dist/serve/site-ui/docs/get-started/start-building.md +21 -10
- package/dist/serve/site-ui/docs/get-started/vite/index.html +6 -3
- package/dist/serve/site-ui/docs/get-started/vite.md +1 -1
- package/dist/serve/site-ui/docs/index.json +203 -168
- package/dist/serve/site-ui/docs/messaging-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +5 -2
- package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +6 -4
- package/dist/serve/site-ui/docs/observe/see-whats-happening.md +2 -4
- package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +9 -6
- package/dist/serve/site-ui/docs/observe/shape-your-data.md +4 -4
- package/dist/serve/site-ui/docs/overview/index.html +16 -10
- package/dist/serve/site-ui/docs/overview.md +19 -11
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +8 -5
- package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api.md +3 -3
- package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +501 -0
- package/dist/serve/site-ui/docs/pyric-admin-reference-api.md +587 -0
- package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +6 -3
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +166 -95
- package/dist/serve/site-ui/docs/pyric-database-reference-api.md +107 -1
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +10 -4
- package/dist/serve/site-ui/docs/pyric-messaging-reference-api.md +5 -2
- package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +10 -4
- package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api.md +5 -2
- package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +6 -3
- package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api.md +2 -2
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +5 -2
- package/dist/serve/site-ui/docs/reference/cli/index.html +153 -0
- package/dist/serve/site-ui/docs/reference/cli.md +114 -0
- package/dist/serve/site-ui/docs/rules-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +5 -2
- package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +5 -2
- package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +6 -3
- package/dist/serve/site-ui/docs/secure/read-a-denial.md +1 -1
- package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +5 -2
- package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +5 -2
- package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +5 -2
- package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +5 -2
- package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +5 -2
- package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +7 -4
- package/dist/serve/site-ui/docs/ship/ship-to-production.md +2 -2
- package/dist/serve/site-ui/docs/ship/test-in-node/index.html +9 -6
- package/dist/serve/site-ui/docs/ship/test-in-node.md +4 -4
- package/dist/serve/site-ui/docs/storage-compat/index.html +5 -2
- package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +5 -2
- package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +5 -2
- package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +5 -2
- package/dist/serve/site-ui/docs/tutorial/index.html +10 -7
- package/dist/serve/site-ui/docs/tutorial.md +4 -4
- package/dist/serve/site-ui/examples/chess/index.html +4 -2
- package/dist/serve/site-ui/firestore/index.html +5 -3
- package/dist/serve/site-ui/hero-charcoal.jpg +0 -0
- package/dist/serve/site-ui/index.html +9 -7
- package/dist/serve/site-ui/llms.txt +4 -3
- package/dist/serve/site-ui/pyric-campfire-full.png +0 -0
- package/dist/serve/site-ui/pyric-campfire.png +0 -0
- package/dist/serve/site-ui/rtdb/index.html +5 -3
- package/dist/serve/site-ui/settings/index.html +5 -3
- package/dist/serve/site-ui/storage/index.html +5 -3
- package/dist/serve/site-ui/studio/index.html +13 -0
- package/dist/serve/site-ui/studio-routes.json +1 -1
- package/dist/serve/site-ui/traffic/index.html +5 -3
- package/dist/serve/studio/routes.d.ts +9 -0
- package/dist/serve/studio/routes.d.ts.map +1 -1
- package/dist/serve/studio/routes.js +47 -7
- package/dist/serve/studio/routes.js.map +1 -1
- package/dist/serve/vite-ai-config.d.ts.map +1 -1
- package/dist/serve/vite-ai-config.js +38 -8
- package/dist/serve/vite-ai-config.js.map +1 -1
- package/dist/serve/vite-module-swap.d.ts.map +1 -1
- package/dist/serve/vite-module-swap.js +0 -28
- package/dist/serve/vite-module-swap.js.map +1 -1
- package/dist/serve/vite-rules-source.d.ts.map +1 -1
- package/dist/serve/vite-rules-source.js +28 -7
- package/dist/serve/vite-rules-source.js.map +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +1 -1
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/client/disconnect.js +1 -1
- package/dist/serve/worker/client/disconnect.js.map +1 -1
- package/dist/serve/worker/client/presence.d.ts.map +1 -1
- package/dist/serve/worker/client/presence.js +18 -5
- package/dist/serve/worker/client/presence.js.map +1 -1
- package/dist/serve/worker/host-ai.d.ts.map +1 -1
- package/dist/serve/worker/host-ai.js +15 -0
- package/dist/serve/worker/host-ai.js.map +1 -1
- package/dist/serve/worker/protocol.d.ts +4 -0
- package/dist/serve/worker/protocol.d.ts.map +1 -1
- package/dist/serve/worker/protocol.js.map +1 -1
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +7 -1
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/package.json +5 -5
- package/src/bridge/server/mcp-contract.ts +3 -0
- package/src/cli/cli.test.ts +2 -2
- package/src/cli/index.ts +51 -42
- package/src/cli/mcp-proxy.ts +10 -11
- package/src/cli/parse-args.ts +61 -15
- package/src/cli/pyric-config.ts +45 -0
- package/src/cli/rules.ts +31 -4
- package/src/cli/{dev-runner.ts → sandbox-runner.ts} +117 -72
- package/src/cli/serve.ts +115 -47
- package/src/cli/service-command-records/storage-rules-resolve.ts +4 -0
- package/src/cli/service-commands.generated.ts +2 -0
- package/src/cli/snapshot.ts +5 -5
- package/src/cli/verify.ts +1 -1
- package/src/functions-rtdb/development-runtime.ts +1 -1
- package/src/functions-rtdb/project.ts +8 -8
- package/src/next/guard.ts +1 -1
- package/src/remote/index.ts +9 -9
- package/src/serve/bundler.ts +10 -10
- package/src/serve/entries/ai.ts +27 -1
- package/src/serve/entries/auth-helper-dom.ts +1 -1
- package/src/serve/entries/auth-helper-runtime.ts +1 -1
- package/src/serve/entries/firestore.ts +3 -3
- package/src/serve/entries/keepalive.ts +1 -1
- package/src/serve/entries/runtime.ts +19 -14
- package/src/serve/entries/storage.ts +1 -1
- package/src/serve/entries/worker-runtime.ts +1 -1
- package/src/serve/init-payload.ts +4 -0
- package/src/serve/namespace.ts +44 -5
- package/src/serve/rules.ts +61 -26
- package/src/serve/runtime/chip.ts +38 -1
- package/src/serve/runtime/manifest.ts +1 -1
- package/src/serve/runtime/status.ts +24 -0
- package/src/serve/sandbox-session.ts +10 -4
- package/src/serve/server.ts +18 -1
- package/src/serve/studio/routes.ts +63 -7
- package/src/serve/vite-ai-config.ts +37 -7
- package/src/serve/vite-module-swap.ts +0 -28
- package/src/serve/vite-rules-source.ts +29 -7
- package/src/serve/vite-sandbox-generation.ts +1 -1
- package/src/serve/worker/client/disconnect.ts +1 -1
- package/src/serve/worker/client/presence.ts +25 -5
- package/src/serve/worker/host-ai.ts +15 -0
- package/src/serve/worker/protocol.ts +2 -1
- package/src/serve/worker/serve-init.ts +5 -1
- package/README.md.orig +0 -141
- package/dist/cli/dev-runner.d.ts.map +0 -1
- package/dist/cli/dev-runner.js.map +0 -1
- package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +0 -1
- package/dist/serve/site-ui/_astro/_slug_.C6QfVOxJ.css +0 -1
- package/dist/serve/site-ui/_astro/_slug_.CXh9yTP1.css +0 -1
- package/dist/serve/site-ui/_astro/_studio_.B6b_G1ev.css +0 -1
- package/dist/serve/site-ui/_astro/app.B7pBzz5N.js +0 -11
- package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +0 -1
- package/dist/serve/site-ui/_astro/app.boex5SnQ.js +0 -1
- package/dist/serve/site-ui/_astro/chess-showcase.DDqE-QGe.js +0 -1
- package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +0 -1
- package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +0 -354
- package/dist/serve/site-ui/_astro/index.uwPvjH_1.js +0 -1
- package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +0 -9
- package/dist/serve/site-ui/_astro/reads.Dh3z0fJy.js +0 -1
- package/dist/serve/site-ui/_astro/sandbox-controls.C2IqtoSw.js +0 -1252
- package/dist/serve/site-ui/_astro/seed.CCmj00su.js +0 -20
- package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +0 -582
- package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +0 -448
- package/dist/serve/site-ui/examples/firestore-first-write/index.html +0 -2
|
@@ -12,17 +12,39 @@ export function resolveViteRulesConfig(
|
|
|
12
12
|
explicitRules: string | undefined,
|
|
13
13
|
firebaseConfig: FirebaseJson | null,
|
|
14
14
|
): FirebaseJson | null {
|
|
15
|
-
const
|
|
15
|
+
const firestoreSource = explicitRules
|
|
16
16
|
?? (existsSync(path.join(root, 'firestore.modules.rules'))
|
|
17
17
|
? 'firestore.modules.rules'
|
|
18
18
|
: undefined);
|
|
19
|
+
const storageSource = existsSync(path.join(root, 'storage.modules.rules'))
|
|
20
|
+
? 'storage.modules.rules'
|
|
21
|
+
: undefined;
|
|
19
22
|
|
|
20
|
-
if (!
|
|
21
|
-
|
|
23
|
+
if (!firestoreSource && !storageSource) return firebaseConfig;
|
|
24
|
+
let resolved: FirebaseJson = {
|
|
22
25
|
...(firebaseConfig ?? {}),
|
|
23
|
-
firestore: {
|
|
24
|
-
...(firebaseConfig?.firestore ?? {}),
|
|
25
|
-
rules: rulesSource,
|
|
26
|
-
},
|
|
27
26
|
};
|
|
27
|
+
if (firestoreSource) {
|
|
28
|
+
resolved.firestore = {
|
|
29
|
+
...(firebaseConfig?.firestore ?? {}),
|
|
30
|
+
rules: firestoreSource,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (storageSource) {
|
|
34
|
+
const storage = firebaseConfig?.storage;
|
|
35
|
+
if (Array.isArray(storage)) {
|
|
36
|
+
const index = Math.max(0, storage.findIndex((entry) => entry.rules));
|
|
37
|
+
resolved.storage = storage.length === 0
|
|
38
|
+
? [{ rules: storageSource }]
|
|
39
|
+
: storage.map((entry, entryIndex) =>
|
|
40
|
+
entryIndex === index ? { ...entry, rules: storageSource } : entry,
|
|
41
|
+
);
|
|
42
|
+
} else {
|
|
43
|
+
resolved.storage = {
|
|
44
|
+
...(storage ?? {}),
|
|
45
|
+
rules: storageSource,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return resolved;
|
|
28
50
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import type { ViteDevServer } from 'vite';
|
|
3
3
|
import { readFirebaseJson, readFirebaseRc, type FirebaseJson } from '../cli/firebase-json.js';
|
|
4
|
-
import { registerModuleUrl } from '../cli/
|
|
4
|
+
import { registerModuleUrl } from '../cli/sandbox-runner.js';
|
|
5
5
|
import {
|
|
6
6
|
discoverFunctionsRtdbProject,
|
|
7
7
|
type FunctionsRtdbProject,
|
|
@@ -15,7 +15,7 @@ function deleteTimeoutError(): Error & { code: string } {
|
|
|
15
15
|
return Object.assign(
|
|
16
16
|
new Error(
|
|
17
17
|
'Timed out waiting for SharedWorker app cleanup acknowledgment. ' +
|
|
18
|
-
'Close all tabs using this pyric
|
|
18
|
+
'Close all tabs using this pyric sandbox origin so the worker can restart.',
|
|
19
19
|
),
|
|
20
20
|
{ code: 'app/delete-timeout' },
|
|
21
21
|
);
|
|
@@ -25,9 +25,29 @@ import type { ClientDb, Unsubscribe } from './handles.js';
|
|
|
25
25
|
export type { PresenceClientKind, PresenceSnapshot, PresenceVisibility };
|
|
26
26
|
export { PRESENCE_HEARTBEAT_INTERVAL_MS, PRESENCE_STALE_MS };
|
|
27
27
|
|
|
28
|
+
function supportsRandomUUID(): boolean {
|
|
29
|
+
return typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function supportsDocumentEventListeners(): boolean {
|
|
33
|
+
return (
|
|
34
|
+
typeof document !== 'undefined' &&
|
|
35
|
+
typeof document.addEventListener === 'function' &&
|
|
36
|
+
typeof document.removeEventListener === 'function'
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function supportsWindowEventListeners(): boolean {
|
|
41
|
+
return (
|
|
42
|
+
typeof window !== 'undefined' &&
|
|
43
|
+
typeof window.addEventListener === 'function' &&
|
|
44
|
+
typeof window.removeEventListener === 'function'
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
28
48
|
/** Mint a random client id (page-lifetime). */
|
|
29
49
|
export function mintPresenceClientId(): string {
|
|
30
|
-
if (
|
|
50
|
+
if (supportsRandomUUID()) {
|
|
31
51
|
return crypto.randomUUID();
|
|
32
52
|
}
|
|
33
53
|
return `page-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
@@ -114,10 +134,10 @@ export function startPresence(opts: StartPresenceOptions): PresenceSession {
|
|
|
114
134
|
|
|
115
135
|
register();
|
|
116
136
|
|
|
117
|
-
if (
|
|
137
|
+
if (supportsDocumentEventListeners()) {
|
|
118
138
|
document.addEventListener('visibilitychange', update);
|
|
119
139
|
}
|
|
120
|
-
if (
|
|
140
|
+
if (supportsWindowEventListeners()) {
|
|
121
141
|
window.addEventListener('popstate', update);
|
|
122
142
|
window.addEventListener('hashchange', update);
|
|
123
143
|
// Best-effort clean disconnect; lease expiry covers unclean shutdown.
|
|
@@ -139,10 +159,10 @@ export function startPresence(opts: StartPresenceOptions): PresenceSession {
|
|
|
139
159
|
clearInterval(timer);
|
|
140
160
|
timer = null;
|
|
141
161
|
}
|
|
142
|
-
if (
|
|
162
|
+
if (supportsDocumentEventListeners()) {
|
|
143
163
|
document.removeEventListener('visibilitychange', update);
|
|
144
164
|
}
|
|
145
|
-
if (
|
|
165
|
+
if (supportsWindowEventListeners()) {
|
|
146
166
|
window.removeEventListener('popstate', update);
|
|
147
167
|
window.removeEventListener('hashchange', update);
|
|
148
168
|
window.removeEventListener('pagehide', onPageHide);
|
|
@@ -57,6 +57,21 @@ function resolveEngineConfig(wire: AiEngineConfigWire): NonNullable<AIOptions['e
|
|
|
57
57
|
...(wire.modelMap !== undefined ? { modelMap: wire.modelMap } : {}),
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
+
const isGeminiWire = wire.kind === 'gemini';
|
|
61
|
+
if (isGeminiWire) {
|
|
62
|
+
const result: Record<string, unknown> = {
|
|
63
|
+
kind: 'gemini',
|
|
64
|
+
};
|
|
65
|
+
const hasBaseUrl = wire.baseUrl !== undefined;
|
|
66
|
+
if (hasBaseUrl) {
|
|
67
|
+
result.baseUrl = wire.baseUrl;
|
|
68
|
+
}
|
|
69
|
+
const hasApiKey = wire.apiKey !== undefined;
|
|
70
|
+
if (hasApiKey) {
|
|
71
|
+
result.apiKey = wire.apiKey;
|
|
72
|
+
}
|
|
73
|
+
return result as unknown as NonNullable<AIOptions['engine']>;
|
|
74
|
+
}
|
|
60
75
|
return {
|
|
61
76
|
kind: 'scripted',
|
|
62
77
|
...(wire.script !== undefined
|
|
@@ -203,7 +203,8 @@ export type AiEngineConfigWire =
|
|
|
203
203
|
model?: string;
|
|
204
204
|
/** Explicit Gemini-model-id → upstream-model mapping. */
|
|
205
205
|
modelMap?: Record<string, string>;
|
|
206
|
-
}
|
|
206
|
+
}
|
|
207
|
+
| { kind: 'gemini'; baseUrl?: string; apiKey?: string };
|
|
207
208
|
|
|
208
209
|
/**
|
|
209
210
|
* Wire form of the Gemini error envelope an `AiBrokerError` carries
|
|
@@ -221,8 +221,8 @@ export function applyServeInit(
|
|
|
221
221
|
};
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
+
const rtdb = ctx.rtdb ??= getDatabase(ctx.sandbox);
|
|
224
225
|
if (payload.databaseRules) {
|
|
225
|
-
const rtdb = ctx.rtdb ??= getDatabase(ctx.sandbox);
|
|
226
226
|
rtdbSandbox.setRules(rtdb, payload.databaseRules);
|
|
227
227
|
ctx.activeRules ??= {};
|
|
228
228
|
ctx.activeRules.database = {
|
|
@@ -231,6 +231,10 @@ export function applyServeInit(
|
|
|
231
231
|
status: 'active',
|
|
232
232
|
messages: [],
|
|
233
233
|
};
|
|
234
|
+
} else if (payload.permissive) {
|
|
235
|
+
rtdbSandbox.setDefaultPolicy(rtdb, 'allow');
|
|
236
|
+
} else {
|
|
237
|
+
rtdbSandbox.setDefaultPolicy(rtdb, 'deny');
|
|
234
238
|
}
|
|
235
239
|
|
|
236
240
|
// 1b. Storage rules — deployed ONCE, here, before any storage op can run.
|
package/README.md.orig
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
# `@pyric/cli`
|
|
2
|
-
|
|
3
|
-
The Pyric CLI and programmatic helpers for local sandbox development,
|
|
4
|
-
verification, artifact generation, and agent bridges.
|
|
5
|
-
|
|
6
|
-
> **Alpha.** This package is an early alpha. Non-mirrored exports (e.g.
|
|
7
|
-
> `@pyric/cli/serve/worker`, `@pyric/cli/verify`, `@pyric/cli/credentials/node`)
|
|
8
|
-
> are experimental public-alpha surfaces that may change without notice. The
|
|
9
|
-
> MCP tool surface (tool names and shapes) will consolidate during early
|
|
10
|
-
> alpha — do not treat tool names as stable.
|
|
11
|
-
|
|
12
|
-
Production project administration (deploy, Identity Toolkit configuration,
|
|
13
|
-
hosted discovery) is **not** part of this package. Use
|
|
14
|
-
[`firebase-tools`](https://firebase.google.com/docs/cli) or the Firebase
|
|
15
|
-
Console to ship rules, indexes, hosting, and functions to a real project.
|
|
16
|
-
|
|
17
|
-
## CLI subcommands
|
|
18
|
-
|
|
19
|
-
| Command | What it does |
|
|
20
|
-
|---|---|
|
|
21
|
-
| `pyric init [dir]` | Scaffold a pyric project — never prompts, idempotent, safe to rerun. `--template web` (default) creates a Vite app with canonical `firebase/*` imports; `--template static` creates a no-bundler app; `--template node` creates a script-style project. Run any template through `pyric dev` for sandbox resolution; inactive production tooling loads Firebase directly. Also `--name`, `--force` (overwrite scaffold-owned files), and `--json` (machine result on stdout). |
|
|
22
|
-
| `pyric bridge` | Stand up an HTTP+WebSocket bridge an MCP client (Claude Code, Cursor) connects to (sandbox mode only) |
|
|
23
|
-
| `pyric dev` | Local dev server with the pyric sandbox standing in for Firebase: serves `hosting.public`, resolves unmodified `firebase/*` imports to a pyric sandbox via a served import map, deploys + hot-reloads `firestore.rules` (SSE), opens an emulator-style sign-in helper for `signInWithPopup`/`signInWithRedirect`. The sandbox runs in a **SharedWorker by default** — one backend shared by every tab of the origin (live cross-tab sync), kept in the browser's IndexedDB so **your sandbox data — Firestore docs, auth users, RTDB, storage objects, and the traffic history — survives a refresh/restart by default** (see the persistence guide's coverage matrix for the exact tiers); a per-tab in-page sandbox is the fallback when SharedWorker is unavailable. Flags + exit codes: [CLI reference](docs/reference/cli.md#pyric-dev); persistence, ephemeral runs, clearing data, and SharedWorker tips: [persistence & multi-tab](docs/how-to/serve-persistence-and-multi-tab.md) |
|
|
24
|
-
| `pyric snapshot` | Promote lived sandbox state (live `dev --persist`, else `.pyric/state/state.json`) to a committable fixture; `pyric dev --seed <fixture>` re-serves it (docs + users). `--out`, `--port`, `--force`, `--json` |
|
|
25
|
-
| `pyric verify` | Replay a captured sandbox session against candidate rules (`--engine sandbox\|rules-test-api\|both`). Hosted Rules Test API needs SA/ADC via `FIREBASE_SA_BASE64` / `GOOGLE_APPLICATION_CREDENTIALS` |
|
|
26
|
-
| `pyric can-i-use <feature>` | Query the canonical conformance model for availability, behaviour fidelity, assurance eligibility, caveats, and evidence. Only an exact canonical feature name exits 0; ambiguous names, spelling suggestions, and missing features exit 1. Accepts `--json`. |
|
|
27
|
-
| `pyric mcp` | Start the stdio MCP server; attach to `pyric dev --bridge` when available or host a headless sandbox |
|
|
28
|
-
| `pyric firestore rules lint <path>` | Lint a Firestore rules file |
|
|
29
|
-
| `pyric firestore rules validate <path>` | Validate Firestore rules structure |
|
|
30
|
-
| `pyric firestore rules simulate` | Run the local Firestore rules simulator |
|
|
31
|
-
| `pyric firestore rules resolve <path>` | Resolve `2+modules` imports into a Firebase rules artifact |
|
|
32
|
-
| `pyric firestore indexes generate <path...>` | Derive composite-index definitions from application source |
|
|
33
|
-
| `pyric storage rules lint <path>` / `simulate` | Run local Storage rules lint or simulation |
|
|
34
|
-
| `pyric database rules lint <path>` | Lint a Realtime Database rules JSON file |
|
|
35
|
-
| `pyric database rules validate <path>` | Validate Realtime Database rules expressions |
|
|
36
|
-
| `pyric database rules simulate` | Run the local Realtime Database rules simulator |
|
|
37
|
-
| `pyric database rules generate` | Compile a constraints module to local `database.rules.json` without contacting production |
|
|
38
|
-
|
|
39
|
-
Every command's full flags, defaults, exit codes, and environment variables are
|
|
40
|
-
in the **[CLI reference](docs/reference/cli.md)**. Task guides and the rest of
|
|
41
|
-
the docs are indexed in **[docs/](docs/README.md)**.
|
|
42
|
-
|
|
43
|
-
### Persistence caveats (documented limits)
|
|
44
|
-
|
|
45
|
-
- **Anonymous users don't persist** (no round-trip key) — but their *documents
|
|
46
|
-
do*. An app that calls `signInAnonymously` on load mints a new uid every
|
|
47
|
-
reload under `--persist`, so docs owned by prior anonymous uids accumulate
|
|
48
|
-
unreachably. Use the sign-in helper (or seeded users) for owner-based data
|
|
49
|
-
you want durable.
|
|
50
|
-
- **The state file is not a point-in-time snapshot** — firestore and auth
|
|
51
|
-
sections flush on independent debounces; a crash between them can persist
|
|
52
|
-
docs whose owner user hasn't flushed yet (or vice versa).
|
|
53
|
-
- **One writer tab at a time (in-page fallback only)** — when several per-tab
|
|
54
|
-
in-page sandboxes share one `.pyric/state` file, the first tab to flush holds
|
|
55
|
-
the writer lock; others run read-only (console warning + `persistReadOnly`
|
|
56
|
-
diagnostic) so they can't erase the writer's data. On the default SharedWorker
|
|
57
|
-
path this can't happen — the single worker is the sole writer.
|
|
58
|
-
- **Loss window** — the final unsaved change can be lost if the tab CLOSES
|
|
59
|
-
within the flush debounce while the state exceeds ~60KB (keepalive cap);
|
|
60
|
-
smaller states flush on unload, and reloads are always safe. A reset (or
|
|
61
|
-
any delete-all) that empties a non-empty state first preserves the prior
|
|
62
|
-
file at `.pyric/state/state.json.bak`.
|
|
63
|
-
|
|
64
|
-
### Agent onboarding (init → dev → MCP)
|
|
65
|
-
|
|
66
|
-
Three parseable steps, no flags to discover:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
pyric init myapp --json # → {..., "nextSteps": [...]}
|
|
70
|
-
cd myapp && bun install
|
|
71
|
-
bun run dev:agent # pyric dev --bridge --seed seed.json
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Readiness probe: `GET <url>/__pyric/init.json` → 200 once serving (body
|
|
75
|
-
carries the live rules hash). MCP endpoint: `<url>/__pyric/mcp`. With
|
|
76
|
-
`pyric dev --json`, stdout's single line carries `{url, port, mcpUrl,
|
|
77
|
-
rulesHash}`.
|
|
78
|
-
|
|
79
|
-
## Programmatic subpaths
|
|
80
|
-
|
|
81
|
-
| Subpath | Surface |
|
|
82
|
-
|---|---|
|
|
83
|
-
| `@pyric/cli/credentials/node` | `fromServiceAccount`, `fromAdc` — build a `ProjectScope` for the Rules Test API (`pyric verify --engine rules-test-api\|both`) |
|
|
84
|
-
| `@pyric/cli/verify` | Captured-session replay for Firestore and RTDB rules |
|
|
85
|
-
| `@pyric/cli/conformance` | Node query surface: `canIUse` returns full claims and evidence; `canIUseImport` resolves a published import to its canonical compatibility page. |
|
|
86
|
-
| `@pyric/cli/conformance/browser` | Compact browser query surface: `canIUse` returns availability, fidelity, assurance, summary, caveats, and the evidence slug without the full claim graph. |
|
|
87
|
-
| `@pyric/cli/assurance` | Assurance campaign types and tools |
|
|
88
|
-
| `@pyric/cli/assurance/browser` | Browser attachment for assurance campaigns |
|
|
89
|
-
| `@pyric/cli/bridge` | `createBridge`, `startServer` (Node) / `connectBridge` (browser via conditional export). Vite integration is `pyric({ bridge })` in `@pyric/cli/vite`. |
|
|
90
|
-
| `@pyric/cli/bridge/client` | Browser bridge client helpers |
|
|
91
|
-
| `@pyric/cli/vite` | `pyric(opts)`, the dev-only firebase→sandbox swap plugin. Opts: `rules`, `persist`/`fresh`, `seed`, `capture`, `bridge` (MCP), `ui` (Pyric Studio at `/__pyric/ui/`, parity with `dev --ui`). |
|
|
92
|
-
| `@pyric/cli/discover` | Credential-free crawl helpers for sandbox discovery (`crawl`, `findCollectionGroup`, `createFirestoreDiscoverTools`). Not registered on the default MCP bridge. |
|
|
93
|
-
| `@pyric/cli/serve/worker` | SharedWorker serve runtime |
|
|
94
|
-
| `@pyric/cli/remote` | Remote / headless helpers |
|
|
95
|
-
| `@pyric/cli/register` | Registration helpers |
|
|
96
|
-
|
|
97
|
-
## MCP tool surface (`pyric bridge`)
|
|
98
|
-
|
|
99
|
-
The bridge composes its toolsets from the same factories used by its browser
|
|
100
|
-
dispatcher so advertised and executable tools cannot drift. The canonical,
|
|
101
|
-
always-current list is the
|
|
102
|
-
[agent tool inventory](../../docs/agent-tools.md).
|
|
103
|
-
|
|
104
|
-
**Sandbox-routed** — dispatched against the connected browser sandbox
|
|
105
|
-
(`createFirestoreDataTools` + `createFirestoreSimulatorTools` +
|
|
106
|
-
`createFirestoreInspectTools` + local RTDB inspection):
|
|
107
|
-
|
|
108
|
-
- data: `firestore_get_document` / `_list_documents` / `_create_document` / `_add_document` / `_update_document` / `_delete_document` / `_batch_write` / `_query_where` / `firestore_create_with_auto_id`
|
|
109
|
-
- stateful simulator session: `firestore_simulator_create` / `_execute` / `_read` / `_batch` / `_undo` / `_redo` / `_events` / `_transaction`
|
|
110
|
-
- diagnostics: `sandbox_inspect` — single-call sandbox state/rules snapshot
|
|
111
|
-
- RTDB authorization: `rtdb_simulate_access` — evaluates one operation against
|
|
112
|
-
the rules and data currently installed in the connected sandbox
|
|
113
|
-
- RTDB structure: `rtdb_crawl_structure` — returns a bounded structural view of
|
|
114
|
-
current sandbox data without leaf values
|
|
115
|
-
|
|
116
|
-
Assurance campaign tools remain available programmatically from
|
|
117
|
-
`@pyric/cli/assurance`, but are not registered on the default MCP bridge.
|
|
118
|
-
|
|
119
|
-
**In-process** — run on the bridge process itself (`createFirestoreRulesTools`
|
|
120
|
-
without a live `ProjectScope`, so no Rules Test API tool):
|
|
121
|
-
|
|
122
|
-
- `firestore_simulate_rules`
|
|
123
|
-
- `firestore_rules_stdlib_list` / `_get`
|
|
124
|
-
- `firestore_lint_rules`
|
|
125
|
-
- `firestore_resolve_modules`
|
|
126
|
-
|
|
127
|
-
### Gaps from the playground tool surface
|
|
128
|
-
|
|
129
|
-
The `packages/playground/` app ships richer diagnostic tools that
|
|
130
|
-
the `pyric bridge` does NOT register out of the box today. They're
|
|
131
|
-
playground-specific orchestrators built on top of `useRuntimeStore`
|
|
132
|
-
and other browser-only state:
|
|
133
|
-
|
|
134
|
-
- `inspect_firestore_traffic` — structured dump of the sandbox traffic log
|
|
135
|
-
- `seed_firestore_data_as_admin` — admin-bypass bulk writes for fixture setup
|
|
136
|
-
- `generate_fixture_from_session` — snapshot `sandbox.history()` as a replay fixture
|
|
137
|
-
- `try_rules_edit` — replay events under a proposed rules edit
|
|
138
|
-
- `debug_firestore_rules` — orchestrator over simulate + lint + history + state
|
|
139
|
-
|
|
140
|
-
The underlying primitives (`sandbox.history()`, `pyric/sandbox/replay`, and the
|
|
141
|
-
rules simulator) remain available for custom compositions.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-runner.d.ts","sourceRoot":"","sources":["../../src/cli/dev-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAM9D;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC,GACL,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAID,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAKhE;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUxD;AAED,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;CAChC,GAAG,YAAY,GAAG,IAAI,CAWtB;AAID;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,UAAU,EACvB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9C,MAAM,CAAC,UAAU,CAOnB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAc9F;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC5B;IAAE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;CAAE,CAkB9C;AAID,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB;0EACsE;IACtE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,YAAY,CAAC;CACrB;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC3D,cAAc,CAiEhB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-runner.js","sourceRoot":"","sources":["../../src/cli/dev-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
body{margin:0;background:#15151d;color:#f4f4f7;font-family:Inter,sans-serif}.example-runtime{box-sizing:border-box;min-height:100vh;padding:1rem}.example-runtime header{display:flex;align-items:center;gap:.65rem}.example-runtime header strong{flex:1;font-size:.9rem}.example-runtime button{border:1px solid #4a4a58;border-radius:.45rem;padding:.45rem .65rem;background:#24242f;color:inherit;cursor:pointer}.example-runtime p{color:#b6b6c2;font-size:.82rem;line-height:1.45}.example-runtime pre{min-height:8rem;overflow:auto;border-radius:.55rem;padding:.85rem;background:#0f0f17;color:#d9f99d;font:.78rem/1.5 JetBrains Mono,monospace}.status{width:.55rem;height:.55rem;border-radius:50%;background:#eab308}.status-ready{background:#22c55e}.status-error{background:#ef4444}.copy-error{float:right}.chess-showcase{padding:clamp(1rem,3vw,2.25rem);background:#15151d;color:#f4f4f7}.chess-play{display:grid;grid-template-columns:minmax(20rem,42rem) minmax(18rem,25rem);gap:clamp(1rem,3vw,2rem);align-items:start;max-width:70rem;margin:0 auto}.chess-board-wrap{padding:clamp(.55rem,1.5vw,1rem);border:1px solid #474258;border-radius:.5rem;background:#201f2a}.chess-board{display:grid;grid-template:repeat(8,minmax(0,1fr)) / repeat(8,minmax(0,1fr));overflow:hidden;width:100%;aspect-ratio:1}.chess-square{position:relative;display:grid;width:100%;height:100%;min-width:0;min-height:0;place-items:center;overflow:hidden;border:0;border-radius:0;padding:0;cursor:pointer;font-size:clamp(1.6rem,5vw,3.6rem);line-height:1;text-shadow:0 2px 2px #0005}.chess-piece{position:absolute;inset:0;display:grid;place-items:center;line-height:1}.chess-square.is-light{background:#d7d0e3;color:#17151d}.chess-square.is-dark{background:#756b91;color:#111018}.chess-square:hover{box-shadow:inset 0 0 0 .22rem #c7ff5f;z-index:1}.chess-square.is-selected{box-shadow:inset 0 0 0 .3rem #b8ff3d;background:#9caa64;z-index:2}.chess-square small{position:absolute;font:700 .58rem/1 Inter,sans-serif;opacity:.65}.rank-label{top:.25rem;left:.25rem}.file-label{right:.25rem;bottom:.22rem}.chess-console{display:grid;gap:1rem}.turn-row,.identity-picker,.scenario-picker,.verdict{border:1px solid #413e4d;border-radius:.5rem;background:#1e1d27;padding:1rem}.turn-row{display:flex;gap:1rem;align-items:center;justify-content:space-between}.turn-row strong{display:block;margin-top:.25rem;font-size:1rem}.verdict strong{display:flex;align-items:center;gap:.45rem;margin-top:.25rem;font-size:1rem}.verdict strong i{width:.48rem;height:.48rem;border-radius:50%;background:#8f8b9d}.console-label{color:#9995a6;font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.chess-showcase button{border:1px solid #504c5d;border-radius:.5rem;padding:.55rem .7rem;background:#292733;color:inherit;cursor:pointer}.chess-showcase button:hover{border-color:#8d84ae;background:#322f40}.chess-showcase button:disabled{opacity:.45;cursor:not-allowed}.identity-picker{display:grid;grid-template-columns:1fr 1fr;gap:.55rem}.identity-picker legend,.scenario-picker legend{grid-column:1 / -1;padding:0 .2rem;color:#aaa6b7;font-size:.78rem}.identity-picker button[aria-pressed=true],.source-tabs button[aria-selected=true]{border-color:#9d8dff;background:#443c70}.identity-picker code{display:block;margin-top:.2rem;color:#c5bfd6;font-size:.65rem}.try-row{display:grid;grid-template-columns:1fr 1fr;gap:.55rem}.scenario-action{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.55rem}.scenario-action select{min-width:0;border:1px solid #504c5d;border-radius:.5rem;padding:.55rem .7rem;background:#292733;color:inherit;font:inherit}.scenario-picker p{margin:.7rem 0 .35rem}.scenario-picker>code{color:#c5bfd6;font-size:.7rem;line-height:1.5}.verdict{min-height:10rem}.verdict.is-allowed{border-color:#4d735c}.verdict.is-denied{border-color:#754956}.verdict.is-allowed strong i{background:#4ade80}.verdict.is-denied strong i{background:#fb7185}.verdict dl{display:grid;gap:.3rem;margin:.85rem 0}.verdict dl div{display:flex;justify-content:space-between;gap:1rem}.verdict dt{color:#9995a6;font-size:.75rem}.verdict dd{margin:0;font-size:.75rem}.verdict p{margin:.75rem 0 0;color:#bbb8c8;font-size:.8rem;line-height:1.5}@media(max-width:820px){.chess-play{grid-template-columns:1fr}}@media(max-width:430px){.chess-showcase{padding:.75rem}.chess-square{font-size:1.8rem}.try-row,.scenario-action{grid-template-columns:1fr}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.prose .conformance-flow{display:flex;flex-wrap:wrap;align-items:stretch;gap:var(--space-2)}.prose .flow-step{flex:1 1 0;min-width:92px;display:flex;flex-direction:column;justify-content:center;gap:var(--space-1);padding:var(--space-3);text-align:center;background:var(--panel);border:1px solid var(--line);border-radius:8px;font-size:.9rem;font-weight:550;line-height:1.3;color:var(--ink)}.prose .flow-sub{font-size:var(--fs-caption);font-weight:400;color:var(--muted)}.prose .flow-arrow{display:flex;align-items:center;color:var(--faint);font-size:1.1rem}.prose .compat-stat{display:flex;flex-direction:column;gap:var(--space-3);padding-top:var(--space-4);border-top:1px solid var(--line)}.prose .compat-stat-surface{font-size:.85rem;color:var(--muted);font-variant-numeric:tabular-nums}.prose .compat-stat-surface strong,.prose .compat-stat-item strong{color:var(--ink)}.prose .compat-stat-figure{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-3);line-height:1}.prose .compat-stat-pct{font-size:2.75rem;font-weight:750;line-height:1;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}.prose .compat-stat-label{font-size:1rem;color:var(--muted)}.prose .compat-stat-denom{font-size:.85rem;color:var(--faint);font-variant-numeric:tabular-nums}.prose .compat-stat-bar{display:flex;gap:2px;width:100%;height:10px;border-radius:5px;overflow:hidden}.prose .compat-stat-seg{flex-basis:0;min-width:0;background:var(--muted)}.prose .compat-stat-seg[data-status=ok]{background:var(--diff-add)}.prose .compat-stat-seg[data-status=unsupported]{background:var(--line-2)}.prose .compat-stat-seg[data-status=unverified]{background:transparent;box-shadow:inset 0 0 0 1px var(--faint)}.prose .compat-stat-seg[data-status=diverged]{background:repeating-linear-gradient(135deg,var(--accent) 0 4px,color-mix(in srgb,var(--accent) 45%,transparent) 4px 7px)}.prose .compat-stat-seg[data-status=bug]{background:repeating-linear-gradient(45deg,var(--diff-remove) 0 3px,color-mix(in srgb,var(--diff-remove) 40%,transparent) 3px 6px)}.prose .compat-stat-key{padding:0;display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);list-style:none}.prose .compat-stat-item{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--fs-caption);color:var(--muted);font-variant-numeric:tabular-nums}.prose .compat-stat-note{font-size:var(--fs-caption);color:var(--muted)}.prose .compat-meters{display:flex;flex-direction:column;gap:var(--space-2)}.prose .compat-meter{display:grid;grid-template-columns:minmax(9rem,auto) 1fr auto;align-items:center;gap:var(--space-3);font-size:var(--fs-caption);color:var(--muted);font-variant-numeric:tabular-nums}.prose .compat-meter-label{color:var(--muted)}.prose .compat-meter-value{color:var(--ink);font-weight:600;text-align:right}.prose .compat-meter-track{display:block;width:100%;height:8px;border-radius:4px;background:var(--line-2);overflow:hidden}.prose .compat-meter-fill{display:block;height:100%;border-radius:4px;background:var(--diff-add)}.prose .compat-meter-track--mini{height:5px;margin-top:var(--space-1)}.prose .compat-score-table{width:100%;border-collapse:collapse;font-size:.875rem}.prose .compat-score-table thead th{text-align:left;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3, #667);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line)}.prose .compat-score-table td,.prose .compat-score-table th[scope=row]{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line);vertical-align:middle;text-align:left}.prose .compat-score-table th[scope=row]{font-weight:600;white-space:nowrap}.prose .compat-score-cell{white-space:nowrap}.prose .compat-score-cell .compat-score-pct{font-variant-numeric:tabular-nums;font-weight:600;margin-right:var(--space-2)}.prose .compat-score-cell .compat-meter-track--mini{display:inline-block;width:8rem;vertical-align:middle}.prose .compat-score-detail{color:var(--ink-3, #667);font-size:.8125rem;white-space:nowrap}.prose .compat-score-row--overall th[scope=row],.prose .compat-score-row--overall td{border-top:2px solid var(--line);border-bottom:0}.prose .compat-score-tbd{color:var(--ink-3, #667);font-size:.8125rem;font-style:italic}.prose .compat-score-stack{display:grid;gap:var(--space-1)}.prose .compat-score-bar{display:flex;align-items:center;gap:var(--space-2)}.prose .compat-score-bar .compat-meter-track{flex:1 1 auto}.prose .compat-score-basis{font-size:.8125rem;color:var(--ink-3, #667)}.prose .compat-score-row--rules .compat-score-cell{white-space:normal}.prose .compat-score-row--rules th[scope=row]{vertical-align:top}.prose .compat-score-group{display:grid;gap:var(--space-3)}.prose .compat-score-engine{display:grid;grid-template-columns:minmax(10rem,.7fr) minmax(14rem,1.3fr);align-items:start;gap:var(--space-3)}.prose .compat-score-engine-name{padding-top:1px;color:var(--ink);font-weight:550}@media(max-width:760px){.prose .compat-score-engine{grid-template-columns:1fr;gap:var(--space-1)}}:root{--rhythm-para: .875rem;--rhythm-group: 1.5rem;--rhythm-subsection: 2.25rem;--rhythm-section: 3.25rem;--rhythm-list: calc(var(--rhythm-para) * .75)}.prose>*,.prose blockquote>*,.prose li>*,.prose .compat-stat>*{margin-block:0}.prose>*+*{margin-block-start:var(--rhythm-group)}.prose>*+h2{margin-block-start:var(--rhythm-section)}.prose>*+h3,.prose>*+h4{margin-block-start:var(--rhythm-subsection)}.prose>h1+*,.prose>h2+*,.prose>h3+*,.prose>h4+*{margin-block-start:var(--rhythm-para)}.prose>p+p{margin-block-start:var(--rhythm-para)}.prose>p+ul,.prose>p+ol,.prose>p+blockquote{margin-block-start:var(--rhythm-para)}.prose li+li{margin-block-start:var(--rhythm-list)}.prose li>ul,.prose li>ol{margin-block-start:var(--rhythm-list)}.prose li>*+*,.prose blockquote>*+*{margin-block-start:var(--rhythm-para)}.api-reference-header{margin:0 0 2.5rem;padding:0 0 2rem;border-bottom:1px solid var(--line)}.api-reference-kicker{margin:0 0 .65rem;color:var(--muted);font-size:var(--fs-micro);font-weight:600;letter-spacing:var(--tracking-micro);text-transform:uppercase}.api-reference-header h1{margin:0;color:var(--ink);font-size:clamp(1.7rem,4vw,2.45rem);font-weight:600;letter-spacing:-.035em}.api-reference-header h1 code{padding:0;color:inherit;background:transparent;font:inherit}.api-reference-meta,.api-reference-source{margin:.7rem 0 0;color:var(--muted);font-size:var(--fs-body)}.api-reference-source{margin-top:.3rem}.api-reference-evidence{display:inline-block;margin-top:1rem;color:var(--ink);font-size:var(--fs-label);font-weight:600;text-underline-offset:.18em}.api-reference-body>h2{margin-top:3.75rem;padding-bottom:.65rem;border-bottom:1px solid var(--line)}.api-reference-body>h3{margin-top:2.75rem}.api-reference-body>h3 code{font-size:inherit}.api-reference-body h4{margin-top:1.8rem}.api-reference-body h5,.api-reference-body h6{margin-top:1.35rem}.api-reference-body pre{overflow-x:auto}.api-reference-body table{display:block;max-width:100%;overflow-x:auto;white-space:nowrap}.api-symbols{max-height:calc(100vh - 5rem);overflow:auto;scrollbar-width:thin}.api-symbol-filter{width:100%;margin:.2rem 0 1rem;padding:.5rem .6rem;border:1px solid var(--line);border-radius:.35rem;color:var(--ink);background:var(--panel);font:inherit;font-size:var(--fs-caption)}.api-symbol-filter:focus{border-color:var(--muted);outline:none}.api-symbol-group+.api-symbol-group{margin-top:1rem}.api-symbol-kind{display:block;margin-bottom:.35rem;color:var(--muted);font-size:var(--fs-micro);font-weight:600;letter-spacing:var(--tracking-micro);text-transform:uppercase}.api-symbol-group ul{margin:0;padding:0;list-style:none}.api-symbol-group li+li{margin-top:.22rem}.api-symbol-group li a{display:block;overflow:hidden;color:var(--muted);font-family:var(--font-mono);font-size:var(--fs-caption);text-overflow:ellipsis;white-space:nowrap}.api-symbol-group li a:hover,.api-symbol-kind:hover{color:var(--ink)}.api-symbol-empty{color:var(--muted);font-size:var(--fs-caption)}.docs-shell--example[data-astro-cid-mw7aashj]{max-width:100rem;grid-template-columns:minmax(200px,240px) minmax(0,1fr)}.docs-shell--example[data-astro-cid-mw7aashj] .doc-toc[data-astro-cid-mw7aashj]{display:none}.doc-main--example[data-astro-cid-mw7aashj]{max-width:70rem}@media(max-width:800px){.docs-shell--example[data-astro-cid-mw7aashj]{grid-template-columns:minmax(0,1fr)}}.example-stage[data-astro-cid-xgvwrve7]{width:100%;margin:0;border:1px solid var(--line);border-radius:.5rem;overflow:hidden;background:#15151d}iframe[data-astro-cid-xgvwrve7]{display:block;width:100%;height:19rem;border:0;overflow:hidden;background:#15151d}.is-showcase[data-astro-cid-xgvwrve7] iframe[data-astro-cid-xgvwrve7]{height:35rem}.pyric-example[data-astro-cid-2qfr4sn2]{margin:2rem 0}figcaption[data-astro-cid-2qfr4sn2]{margin-bottom:.75rem;font-weight:650}.pyric-example-grid[data-astro-cid-2qfr4sn2]{display:grid;grid-template-columns:minmax(0,1fr) minmax(19rem,.8fr);gap:1rem}pre[data-astro-cid-2qfr4sn2]{box-sizing:border-box;width:100%;min-height:19rem;margin:0;border:1px solid var(--border, #30303a);border-radius:.5rem}pre[data-astro-cid-2qfr4sn2]{overflow:auto;padding:1rem;background:#0f0f17;color:#e8e8ef}.pyric-showcase[data-astro-cid-2qfr4sn2] .pyric-example-grid[data-astro-cid-2qfr4sn2]{grid-template-columns:1fr}@media(max-width:800px){.pyric-example-grid[data-astro-cid-2qfr4sn2]{grid-template-columns:1fr}}.example-gallery[data-astro-cid-aiymqahz]{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr));gap:1rem;margin:2rem 0}.example-card[data-astro-cid-aiymqahz]{display:block;border:1px solid var(--border);border-radius:.85rem;padding:1.15rem;background:var(--surface-1);color:inherit;text-decoration:none;transition:border-color .15s,transform .15s}.example-card[data-astro-cid-aiymqahz]:hover{border-color:var(--accent);transform:translateY(-2px)}.example-card[data-astro-cid-aiymqahz].is-showcase{grid-column:1 / -1;padding:clamp(1.25rem,3vw,2rem);background:radial-gradient(circle at 80% 10%,#463d7138,transparent 55%),var(--surface-1)}.example-card[data-astro-cid-aiymqahz]>span[data-astro-cid-aiymqahz]{color:var(--accent);font-size:.7rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.example-card[data-astro-cid-aiymqahz] h2[data-astro-cid-aiymqahz]{margin:.45rem 0;font-size:1.2rem}.example-card[data-astro-cid-aiymqahz] p[data-astro-cid-aiymqahz]{margin:0 0 1rem;color:var(--muted)}.example-card[data-astro-cid-aiymqahz] code[data-astro-cid-aiymqahz]{font-size:.72rem}.example-header[data-astro-cid-3f5pqdpq]{margin:0 0 1.5rem}.example-header[data-astro-cid-3f5pqdpq] p[data-astro-cid-3f5pqdpq]{margin:0 0 .5rem;color:var(--muted);font-family:var(--font-mono);font-size:.7rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase}.example-header[data-astro-cid-3f5pqdpq] h1[data-astro-cid-3f5pqdpq]{margin:0;color:var(--ink);font-size:clamp(1.75rem,3vw,2.35rem);font-weight:600;line-height:1.15;letter-spacing:-.025em}.example-header[data-astro-cid-3f5pqdpq] div[data-astro-cid-3f5pqdpq]{max-width:58ch;margin-top:.8rem;color:var(--muted);font-size:1rem;line-height:1.55}.source-explorer{overflow:hidden;border:1px solid var(--line);border-radius:.5rem;background:#111118}.source-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.7rem .8rem;border-bottom:1px solid #353540;color:#f4f4f7}.source-toolbar strong{font-size:.8rem}.source-toolbar button{border:1px solid #4a4a58;border-radius:.35rem;padding:.38rem .55rem;background:#24242f;color:#f4f4f7;cursor:pointer}.source-explorer pre{max-height:34rem;margin:0;overflow:auto;padding:1rem;background:#111118;color:#d9f99d;font:.76rem/1.55 JetBrains Mono,monospace}.example-doc-page[data-astro-cid-ghke3xma]{width:100%}.example-explanation[data-astro-cid-ghke3xma],.example-rules[data-astro-cid-ghke3xma]{max-width:72ch;margin-top:2.5rem}.example-rules[data-astro-cid-ghke3xma] h2[data-astro-cid-ghke3xma]{margin:0 0 .5rem;color:var(--ink);font-size:1.45rem}.example-rules[data-astro-cid-ghke3xma] p[data-astro-cid-ghke3xma]{margin:0 0 1rem;color:var(--muted);line-height:1.6}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--font-ui: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--font-display: var(--font-ui);--fs-title: 17px;--fs-body: 13px;--fs-label: 12px;--fs-data: 12.5px;--fs-caption: 11.5px;--fs-micro: 10.5px;--tracking-micro: .06em;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px}:root{--bg: #16161a;--panel: #1e1e24;--elevated: #24242c;--ink: #fbfbfe;--muted: #72728a;--faint: #72728a;--line: #2a2a35;--line-2: #3a3a48;--accent: #8f7fe8;--accent-tint: #1e1b2e;--accent-ink: #14102a;--deny: #ededee;--deny-ink: #0c0c0d;--deny-tint: #161618;--diff-add: #57b985;--diff-add-bg: #111d16;--diff-remove: #e2607a;--diff-remove-bg: #221318}@media(prefers-color-scheme:light){:root:not([data-theme]){--bg: #ffffff;--panel: #fafafa;--elevated: #ffffff;--ink: #16181d;--muted: #646b78;--faint: #9aa1ad;--line: #e7e8ec;--line-2: #d9dbe0;--accent: #6b57d6;--accent-tint: #f4f2fd;--accent-ink: #ffffff;--deny: #16181d;--deny-ink: #ffffff;--deny-tint: #f4f4f6;--diff-add: #1f8f4e;--diff-add-bg: #eef8f1;--diff-remove: #c2374b;--diff-remove-bg: #fceef0}}[data-theme=light]{--bg: #ffffff;--panel: #fafafa;--elevated: #ffffff;--ink: #16181d;--muted: #646b78;--faint: #9aa1ad;--line: #e7e8ec;--line-2: #d9dbe0;--accent: #6b57d6;--accent-tint: #f4f2fd;--accent-ink: #ffffff;--deny: #16181d;--deny-ink: #ffffff;--deny-tint: #f4f4f6;--diff-add: #1f8f4e;--diff-add-bg: #eef8f1;--diff-remove: #c2374b;--diff-remove-bg: #fceef0}:root{--code-bg: #0f0f17;--wide: 1440px;--gutter: clamp(16px, 3vw, 32px);color-scheme:dark}@media(prefers-color-scheme:light){:root:not([data-theme]){color-scheme:light}}[data-theme=light]{color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-ui);font-feature-settings:"cv11","ss01";font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased}.studio__bar{border-bottom:1px solid var(--line);background:var(--panel);min-width:0;position:sticky;top:0;z-index:10}.studio__bar-inner{width:100%;max-width:var(--wide);margin:0 auto;height:54px;display:grid;grid-template-columns:auto 1fr;align-items:center;gap:16px;padding:0 var(--gutter);min-width:0}.studio__brand{font-size:13px;font-weight:600;color:var(--ink);text-decoration:none;flex-shrink:0}.studio__nav{display:flex;align-items:center;justify-content:flex-start;gap:4px;height:100%;min-width:0;overflow-x:auto;scrollbar-width:none}.studio__nav::-webkit-scrollbar{display:none}.studio__nav-tab{display:inline-flex;align-items:center;border-bottom:2px solid transparent;font-size:13px;font-weight:500;line-height:1.5;color:var(--muted);text-decoration:none;padding:0 12px;height:100%;white-space:nowrap;transition:color .12s,border-color .12s}.studio__nav-tab:hover{color:color-mix(in srgb,var(--ink) 80%,transparent)}.studio__nav-tab[aria-current=page]{color:var(--ink);border-bottom-color:var(--ink)}@media(max-width:760px){.studio__nav{scroll-snap-type:x proximity;padding-right:28px;mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent)}.studio__nav-tab{scroll-snap-align:start}}.docs-shell{max-width:var(--wide);margin-inline:auto;padding:2.5rem var(--gutter) 5rem;display:grid;grid-template-columns:minmax(200px,240px) minmax(0,1fr) minmax(180px,220px);column-gap:clamp(var(--space-6),4vw,calc(var(--space-6) * 2.5));row-gap:3rem;align-items:start}.docs-nav{position:sticky;top:calc(54px + 1.5rem);max-height:calc(100vh - 54px - 4rem);max-height:calc(100dvh - 54px - 4rem);overflow-y:auto;padding-bottom:var(--space-6);display:grid;align-content:start;gap:var(--space-3);font-size:.8125rem;line-height:1.5}.docs-nav-toplink{display:flex;align-items:center;min-height:2.125rem;padding:var(--space-1) var(--space-3);border-radius:.375rem;font-weight:600;color:var(--ink);text-decoration:none;transition:background-color .12s}.docs-nav-toplink:hover{background:color-mix(in srgb,var(--panel) 70%,transparent)}.docs-nav-toplink[aria-current=page]{background:var(--panel)}.docs-nav-group>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);min-height:2.125rem;padding:var(--space-1) var(--space-3);border-radius:.375rem;font-weight:600;color:var(--ink);transition:background-color .12s}.docs-nav-group>summary:hover{background:color-mix(in srgb,var(--panel) 70%,transparent)}.docs-nav-group>summary::-webkit-details-marker{display:none}.docs-nav-group>summary:after{content:"›";display:inline-block;color:var(--faint);font-weight:400;transition:transform .12s}.docs-nav-group[open]>summary:after{transform:rotate(90deg)}.docs-nav-group-body{display:grid;gap:var(--space-5);padding:var(--space-1) 0 var(--space-2)}.docs-nav-heading{margin:0 0 var(--space-1);padding-inline:var(--space-3);font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--ink)}.docs-nav ul{margin:0;padding:0;list-style:none;display:grid;gap:var(--space-1)}.docs-nav li{min-width:0}.docs-nav a{display:flex;align-items:center;min-height:2.125rem;padding:var(--space-1) var(--space-3);border-radius:.375rem;color:var(--muted);text-decoration:none;background:transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background-color .12s,color .12s}.docs-nav a:hover{color:var(--ink);background:color-mix(in srgb,var(--panel) 70%,transparent)}.docs-nav a[aria-current]{color:var(--ink)}.docs-nav a[aria-current=page]{background:var(--panel);font-weight:500}.docs-nav-drawer{display:none}.doc-main{width:100%;max-width:72ch;margin-inline:auto;min-width:0;font-size:1rem}.doc-toc{position:sticky;top:calc(54px + 1.5rem);max-height:calc(100vh - 54px - 4rem);max-height:calc(100dvh - 54px - 4rem);overflow-y:auto;padding-bottom:var(--space-6);display:grid;align-content:start;font-size:.8125rem}.doc-toc-heading{margin:0 0 .625rem;font-family:var(--font-mono);font-size:var(--fs-micro, 10.5px);font-weight:500;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--muted)}.doc-toc ul{margin:0;padding:0;list-style:none;display:grid;gap:.375rem;border-left:1px solid var(--line)}.doc-toc li{min-width:0}.doc-toc a{display:block;padding-left:.75rem;margin-left:-1px;border-left:1px solid transparent;color:var(--muted);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doc-toc li[data-depth="3"] a{padding-left:1.5rem}.doc-toc a:hover{color:var(--ink)}.doc-toc a.active{color:var(--accent);border-left-color:var(--accent)}.docs-search{position:relative}.docs-search-field{display:flex;align-items:center;gap:var(--space-2);min-height:2.125rem;padding:0 var(--space-3);border:1px solid var(--line);border-radius:.375rem;background:var(--panel)}.docs-search-icon{flex-shrink:0;color:var(--faint)}.docs-search-input{flex:1;min-width:0;border:none;outline:none;background:transparent;color:var(--ink);font:inherit;font-size:.8125rem}.docs-search-input::placeholder{color:var(--faint)}.docs-search-kbd{flex-shrink:0;font-family:var(--font-mono);font-size:var(--fs-micro, 10.5px);color:var(--faint);border:1px solid var(--line);border-radius:.25rem;padding:.0625rem .3125rem;background:var(--elevated)}.docs-search-results{position:absolute;top:calc(100% + var(--space-1));left:0;right:0;z-index:20;margin:0;padding:var(--space-1);list-style:none;display:grid;gap:2px;background:var(--elevated);border:1px solid var(--line);border-radius:.5rem;box-shadow:0 12px 28px #00000059;max-height:60vh;overflow-y:auto}.docs-search-results li{min-width:0}.docs-search-results a{display:grid;gap:2px;padding:var(--space-2) var(--space-3);border-radius:.375rem;text-decoration:none;color:var(--ink)}.docs-search-results a:hover{background:var(--panel)}.docs-search-result-title{font-size:.8125rem;color:var(--ink)}.docs-search-result-meta{font-size:var(--fs-caption, 11.5px);color:var(--faint)}.docs-search-empty{padding:var(--space-2) var(--space-3);color:var(--faint);font-size:.8125rem}.docs-breadcrumbs{margin:0 0 var(--rhythm-group);font-size:var(--fs-caption, 11.5px)}.docs-breadcrumbs ol{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem;margin:0;padding:0;list-style:none}.docs-breadcrumbs li{display:flex;align-items:center;gap:.375rem;min-width:0}.docs-breadcrumbs a{color:var(--muted);text-decoration:none}.docs-breadcrumbs a:hover{color:var(--ink);text-decoration:underline}.docs-breadcrumbs [aria-current=page],.docs-breadcrumbs-sep{color:var(--faint)}.docs-nav,.doc-toc,.docs-search-results,.prose pre,.prose .table-scroll{scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}.docs-nav::-webkit-scrollbar,.doc-toc::-webkit-scrollbar,.docs-search-results::-webkit-scrollbar,.prose pre::-webkit-scrollbar,.prose .table-scroll::-webkit-scrollbar{width:8px;height:8px}.docs-nav::-webkit-scrollbar-track,.doc-toc::-webkit-scrollbar-track,.docs-search-results::-webkit-scrollbar-track,.prose pre::-webkit-scrollbar-track,.prose .table-scroll::-webkit-scrollbar-track{background:transparent}.docs-nav::-webkit-scrollbar-thumb,.doc-toc::-webkit-scrollbar-thumb,.docs-search-results::-webkit-scrollbar-thumb,.prose pre::-webkit-scrollbar-thumb,.prose .table-scroll::-webkit-scrollbar-thumb{background-color:var(--line-2);border-radius:999px;border:2px solid transparent;background-clip:content-box}.prose h1{font-size:1.75rem;font-weight:650;line-height:1.25;letter-spacing:-.02em}.prose h2{font-size:1.3125rem;font-weight:600;line-height:1.3;letter-spacing:-.01em}.prose h3{font-size:1.0625rem;font-weight:600;line-height:1.35}.prose h4{font-size:.9375rem;font-weight:600}.prose a{color:var(--accent);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 40%,transparent);text-underline-offset:2px}.prose a:hover{text-decoration-color:var(--accent)}a.external-link:after{content:"";display:inline-block;vertical-align:baseline;width:.625em;height:.625em;margin-left:.2em;background-color:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 2.5h9v9h-2V5.91l-6.8 6.8-1.41-1.42 6.79-6.79H4.5v-2z'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 2.5h9v9h-2V5.91l-6.8 6.8-1.41-1.42 6.79-6.79H4.5v-2z'/%3E%3C/svg%3E") no-repeat center / contain}.prose strong{font-weight:600;color:var(--ink)}.prose code{font-family:var(--font-mono);font-size:.85em;background:var(--panel);border:1px solid var(--line);border-radius:.25rem;padding:.0625rem .3125rem}.prose pre{border:1px solid var(--line);border-radius:.375rem;padding:.875rem 1rem;overflow-x:auto;font-size:.8125rem;line-height:1.6}.prose pre.astro-code{background-color:var(--code-bg)!important}.prose pre code{background:none;border:none;padding:0;font-size:inherit}.prose ul,.prose ol{padding-inline-start:1.5rem}.prose li::marker{color:var(--muted)}.prose blockquote{position:relative;margin-inline:0;padding-inline:0;padding-block:var(--rhythm-para);color:var(--muted)}.prose blockquote:before{content:"";position:absolute;inset-block:0;left:calc(-1 * var(--space-4));width:2px;background:var(--line-2)}.prose hr{border:none;border-top:1px solid var(--line)}.prose .table-scroll{max-width:100%;overflow-x:auto}.prose table{width:auto;border-collapse:collapse;font-size:.875rem}.prose th,.prose td{border:0;border-bottom:1px solid var(--line);padding:.5rem 2rem .5rem 0;text-align:left;vertical-align:top}.prose th:last-child,.prose td:last-child{padding-right:0}.prose th{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--muted);white-space:nowrap;border-bottom-color:var(--line-2)}.prose td code{white-space:nowrap}pre,code,kbd,samp{font-variant-ligatures:none}.prose .compat-key{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-5);margin:1rem 0;font-size:var(--fs-caption);color:var(--muted)}.prose .compat-key-item{display:inline-flex;align-items:center;gap:var(--space-2);white-space:nowrap}.prose .compat-list{margin:1rem 0}.prose .compat-list--plain .compat-line{grid-template-columns:1fr}.prose .compat-line{display:grid;grid-template-columns:.75rem 1fr auto;column-gap:var(--space-3);align-items:start;padding:var(--space-2) 0}.prose .compat-main{display:flex;flex-direction:column;gap:1px;min-width:0}.prose .compat-api{font-family:var(--font-mono);font-size:.9rem;color:var(--ink);overflow-wrap:anywhere}.prose .compat-sub{font-size:.8125rem;color:var(--ink)}.prose .compat-category{color:var(--muted)}.prose .compat-row{border-bottom:1px solid var(--line)}.prose .compat-row:last-child{border-bottom:0}.prose summary.compat-line{cursor:pointer;list-style:none}.prose summary.compat-line::-webkit-details-marker{display:none}.prose summary.compat-line:after{content:"›";color:var(--faint);transition:transform .12s}.prose details[open]>summary.compat-line:after{transform:rotate(90deg)}.prose .compat-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0}.prose .compat-line .compat-dot{margin-top:.4em}.prose .compat-dot[data-status=ok]{background:var(--diff-add)}.prose .compat-dot[data-status=diverged]{background:var(--accent)}.prose .compat-dot[data-status=bug]{background:var(--diff-remove)}.prose .compat-dot[data-status=unsupported]{background:var(--line-2)}.prose .compat-dot[data-status=unverified]{background:transparent;box-shadow:inset 0 0 0 1px var(--faint)}.prose .compat-status{font-family:var(--font-mono);font-size:var(--fs-caption);color:var(--muted)}.prose .compat-behavior{font-size:.875rem}.prose .compat-evidence{margin:0 0 var(--space-2) calc(.75rem + var(--space-3))}.prose .compat-probe,.prose .compat-note{margin-top:2px;font-size:var(--fs-caption);color:var(--muted);overflow-wrap:anywhere}.prose .compat-probe{font-family:var(--font-mono)}.prose .compat-list code,.prose .compat-key code{background:none;border:0;padding:0;color:inherit}.prose h1,.prose h2,.prose h3,.prose h4{scroll-margin-top:calc(54px + 1.5rem)}@media(max-width:1080px){.docs-shell{grid-template-columns:240px minmax(0,1fr)}.doc-toc{display:none}}@media(max-width:800px){.docs-shell{grid-template-columns:minmax(0,1fr);gap:1.5rem;padding-top:1.5rem}.docs-shell>.docs-nav{display:none}.docs-nav-drawer{display:block;border:1px solid var(--line);background:var(--panel)}.docs-nav-drawer>summary{cursor:pointer;padding:.625rem 1rem;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--muted);list-style:none}.docs-nav-drawer>summary:after{content:" ▾"}.docs-nav-drawer .docs-nav{display:grid;position:static;max-height:none;padding:0 1rem 1rem}}.docs-nav-group-body--reference{gap:var(--space-3)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}:root{--font-ui:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--font-display:var(--font-ui);--fs-display:28px;--fs-title:17px;--fs-body:13px;--fs-label:12px;--fs-data:12.5px;--fs-caption:11.5px;--fs-micro:10.5px;--tracking-micro:.06em;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--bg:#16161a;--panel:#1e1e24;--elevated:#24242c;--ink:#fbfbfe;--muted:#72728a;--faint:#72728a;--line:#2a2a35;--line-2:#3a3a48;--accent:#8f7fe8;--accent-tint:#1e1b2e;--accent-ink:#14102a;--deny:#ededee;--deny-ink:#0c0c0d;--deny-tint:#161618;--diff-add:#57b985;--diff-add-bg:#111d16;--diff-remove:#e2607a;--diff-remove-bg:#221318;--update-added-bg:#19402b;--update-modified-bg:#4a3512;--update-added-ink:#57d685;--update-modified-ink:#ffb300}@media(prefers-color-scheme:light){:root:not([data-theme]){--bg:#fff;--panel:#fafafa;--elevated:#fff;--ink:#16181d;--muted:#646b78;--faint:#9aa1ad;--line:#e7e8ec;--line-2:#d9dbe0;--accent:#6b57d6;--accent-tint:#f4f2fd;--accent-ink:#fff;--deny:#16181d;--deny-ink:#fff;--deny-tint:#f4f4f6;--diff-add:#1f8f4e;--diff-add-bg:#eef8f1;--diff-remove:#c2374b;--diff-remove-bg:#fceef0;--update-added-bg:#d9f4e3;--update-modified-bg:#ffedb3;--update-added-ink:#188038;--update-modified-ink:#9a5b00}}[data-theme=light]{--bg:#fff;--panel:#fafafa;--elevated:#fff;--ink:#16181d;--muted:#646b78;--faint:#9aa1ad;--line:#e7e8ec;--line-2:#d9dbe0;--accent:#6b57d6;--accent-tint:#f4f2fd;--accent-ink:#fff;--deny:#16181d;--deny-ink:#fff;--deny-tint:#f4f4f6;--diff-add:#1f8f4e;--diff-add-bg:#eef8f1;--diff-remove:#c2374b;--diff-remove-bg:#fceef0;--update-added-bg:#d9f4e3;--update-modified-bg:#ffedb3;--update-added-ink:#188038;--update-modified-ink:#9a5b00}[data-pyric-update=added]{--pyric-update-light:var(--update-added-bg);--pyric-update-ink:var(--update-added-ink)}[data-pyric-update=modified]{--pyric-update-light:var(--update-modified-bg);--pyric-update-ink:var(--update-modified-ink)}[data-pyric-update][data-pyric-update-cycle="0"]{animation:1.2s ease-out pyric-update-light-a}[data-pyric-update][data-pyric-update-cycle="1"]{animation:1.2s ease-out pyric-update-light-b}[data-pyric-update][data-pyric-update-cycle="0"] :is(.fs-doctree__key,.fs-doctree__value,[data-rtdb-key],[data-rtdb-value]){animation:1.2s ease-out pyric-update-text-a}[data-pyric-update][data-pyric-update-cycle="1"] :is(.fs-doctree__key,.fs-doctree__value,[data-rtdb-key],[data-rtdb-value]){animation:1.2s ease-out pyric-update-text-b}@keyframes pyric-update-light-a{0%{background-color:var(--pyric-update-light);color:var(--pyric-update-ink)}to{background-color:#0000}}@keyframes pyric-update-light-b{0%{background-color:var(--pyric-update-light);color:var(--pyric-update-ink)}to{background-color:#0000}}@keyframes pyric-update-text-a{0%{color:var(--pyric-update-ink)}}@keyframes pyric-update-text-b{0%{color:var(--pyric-update-ink)}}@media(prefers-reduced-motion:reduce){[data-pyric-update],[data-pyric-update] *{animation:none!important}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:var(--font-mono);--spacing:.25rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:var(--bg);--color-panel:var(--panel);--color-elevated:var(--elevated);--color-ink:var(--ink);--color-muted:var(--muted);--color-faint:var(--faint);--color-line:var(--line);--color-line-2:var(--line-2);--color-accent:var(--accent);--color-accent-tint:var(--accent-tint);--color-accent-ink:var(--accent-ink);--color-deny:var(--deny);--color-deny-ink:var(--deny-ink);--color-deny-tint:var(--deny-tint);--color-diff-add:var(--diff-add);--color-diff-add-bg:var(--diff-add-bg);--color-diff-remove:var(--diff-remove);--color-diff-remove-bg:var(--diff-remove-bg);--font-ui:var(--font-ui);--font-display:var(--font-display);--color-content-bg:var(--bg);--color-sidebar-bg:var(--panel);--color-border:var(--line);--color-border-strong:var(--line-2);--color-soft-white:var(--ink);--color-slate-gray:var(--muted);--color-label-white:var(--ink);--color-primary:var(--accent);--color-danger:var(--diff-remove);--color-warning:#f5a623;--color-info:var(--accent);--color-severity-low:var(--muted);--color-severity-medium:#f5a623;--color-severity-high:var(--diff-remove)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;font-size:13px;line-height:1.5}.mono{font-family:var(--font-mono)}}@layer components;@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-full{height:100%}.min-h-0{min-height:0}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-\[1fr_320px\]{grid-template-columns:1fr 320px}.grid-cols-\[18rem_minmax\(0\,1fr\)\]{grid-template-columns:18rem minmax(0,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-y-1{row-gap:var(--spacing)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border{border-color:var(--color-border)}.border-line{border-color:var(--color-line)}.bg-content-bg{background-color:var(--color-content-bg)}.bg-current{background-color:currentColor}.bg-danger\/10{background-color:var(--color-danger)}@supports (color:color-mix(in lab,red,red)){.bg-danger\/10{background-color:color-mix(in oklab,var(--color-danger) 10%,transparent)}}.bg-danger\/15{background-color:var(--color-danger)}@supports (color:color-mix(in lab,red,red)){.bg-danger\/15{background-color:color-mix(in oklab,var(--color-danger) 15%,transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-primary\/15{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,var(--color-primary) 15%,transparent)}}.bg-severity-high{background-color:var(--color-severity-high)}.bg-severity-low{background-color:var(--color-severity-low)}.bg-severity-medium{background-color:var(--color-severity-medium)}.bg-sidebar-bg{background-color:var(--color-sidebar-bg)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-16{padding-block:calc(var(--spacing) * 16)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6rem\]{font-size:.6rem}.text-\[0\.7em\]{font-size:.7em}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.65rem\]{font-size:.65rem}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-danger{color:var(--color-danger)}.text-diff-add{color:var(--color-diff-add)}.text-info{color:var(--color-info)}.text-muted{color:var(--color-muted)}.text-primary,.text-primary\/70{color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.text-primary\/70{color:color-mix(in oklab,var(--color-primary) 70%,transparent)}}.text-slate-gray,.text-slate-gray\/80{color:var(--color-slate-gray)}@supports (color:color-mix(in lab,red,red)){.text-slate-gray\/80{color:color-mix(in oklab,var(--color-slate-gray) 80%,transparent)}}.text-soft-white{color:var(--color-soft-white)}.text-warning{color:var(--color-warning)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-primary\/40{-webkit-text-decoration-color:var(--color-primary);text-decoration-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.decoration-primary\/40{-webkit-text-decoration-color:color-mix(in oklab,var(--color-primary) 40%,transparent);text-decoration-color:color-mix(in oklab,var(--color-primary) 40%,transparent)}}.underline-offset-2{text-underline-offset:2px}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.placeholder\:text-slate-gray::placeholder{color:var(--color-slate-gray)}@media(hover:hover){.hover\:bg-content-bg:hover{background-color:var(--color-content-bg)}.hover\:bg-primary\/25:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/25:hover{background-color:color-mix(in oklab,var(--color-primary) 25%,transparent)}}.hover\:text-soft-white:hover{color:var(--color-soft-white)}.hover\:decoration-primary:hover{-webkit-text-decoration-color:var(--color-primary);text-decoration-color:var(--color-primary)}}.disabled\:opacity-40:disabled{opacity:.4}.\[\&_\[data-pyric-empty-body\]\]\:mt-2 [data-pyric-empty-body]{margin-top:calc(var(--spacing) * 2)}.\[\&_\[data-pyric-empty-body\]\]\:max-w-md [data-pyric-empty-body]{max-width:var(--container-md)}.\[\&_\[data-pyric-empty-body\]\]\:text-sm [data-pyric-empty-body]{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_\[data-pyric-empty-body\]\]\:leading-relaxed [data-pyric-empty-body]{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_\[data-pyric-empty-body\]\]\:text-slate-gray [data-pyric-empty-body]{color:var(--color-slate-gray)}.\[\&_\[data-pyric-empty-title\]\]\:text-base [data-pyric-empty-title]{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_\[data-pyric-empty-title\]\]\:font-semibold [data-pyric-empty-title]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_\[data-pyric-empty-title\]\]\:text-soft-white [data-pyric-empty-title]{color:var(--color-soft-white)}.\[\&_\[data-pyric-selected\]\]\:text-primary [data-pyric-selected]{color:var(--color-primary)}.\[\&_button\]\:text-left button{text-align:left}}[data-pyric-ui=confirm-portal]{z-index:2000;place-items:center;padding:20px;display:grid;position:fixed;inset:0}[data-pyric-ui=confirm-overlay]{pointer-events:none;background:var(--bg);position:absolute;inset:0}@supports (color:color-mix(in lab,red,red)){[data-pyric-ui=confirm-overlay]{background:color-mix(in srgb,var(--bg) 72%,transparent)}}[data-pyric-ui=confirm-overlay]{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}[data-pyric-ui=confirm-dialog]{border:1px solid var(--line-2);background:var(--elevated);width:min(440px,100%);color:var(--ink);box-shadow:0 18px 60px var(--bg);border-radius:10px;padding:20px;position:relative}@supports (color:color-mix(in lab,red,red)){[data-pyric-ui=confirm-dialog]{box-shadow:0 18px 60px color-mix(in srgb,var(--bg) 75%,transparent)}}[data-pyric-confirm-title]{font-size:16px;font-weight:650}[data-pyric-confirm-body]{color:var(--muted);margin-top:10px;font-size:13px;line-height:1.55}[data-pyric-confirm-body] ul{max-height:180px;font-family:var(--font-mono);margin:0;padding-left:20px;font-size:12px;overflow:auto}[data-pyric-confirm-actions]{justify-content:flex-end;gap:10px;margin-top:20px;display:flex}[data-pyric-confirm-actions] button{appearance:none;border:1px solid var(--line-2);background:var(--panel);color:var(--ink);font:inherit;cursor:pointer;border-radius:7px;padding:7px 13px;font-size:12.5px}[data-pyric-confirm-confirm][data-pyric-destructive]{border-color:var(--diff-remove);background:var(--diff-remove);color:var(--deny-ink)}[data-pyric-ui=toast-region]{z-index:2100;gap:8px;width:min(360px,100vw - 36px);margin:0;padding:0;list-style:none;display:grid;position:fixed;top:18px;right:18px}[data-pyric-toast]{border:1px solid var(--line-2);background:var(--elevated);color:var(--ink);box-shadow:0 12px 36px var(--bg);border-radius:9px;padding:12px 36px 12px 14px;position:relative}@supports (color:color-mix(in lab,red,red)){[data-pyric-toast]{box-shadow:0 12px 36px color-mix(in srgb,var(--bg) 65%,transparent)}}[data-pyric-toast][data-pyric-toast-kind=error]{border-color:var(--diff-remove)}@supports (color:color-mix(in lab,red,red)){[data-pyric-toast][data-pyric-toast-kind=error]{border-color:color-mix(in srgb,var(--diff-remove) 55%,var(--line))}}[data-pyric-toast-title]{font-weight:600}[data-pyric-toast-body]{color:var(--muted);margin-top:5px;font-size:12px}[data-pyric-toast-dismiss]{color:var(--faint);cursor:pointer;background:0 0;border:0;position:absolute;top:8px;right:8px}.studio-chip{border:1px solid var(--line);background:var(--elevated);color:var(--muted);font-size:var(--fs-caption);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;line-height:1.2;text-decoration:none;display:inline-flex}.studio-selection-count{font-family:var(--font-mono);color:var(--ink);font-size:12px}.studio-selection-delete{appearance:none;border:1px solid var(--diff-remove)}@supports (color:color-mix(in lab,red,red)){.studio-selection-delete{border:1px solid color-mix(in srgb,var(--diff-remove) 45%,var(--line))}}.studio-selection-delete{background:var(--elevated);color:var(--diff-remove);font:inherit;cursor:pointer;border-radius:7px;padding:5px 11px;font-size:12px}.studio-selection-delete:disabled{opacity:.45;cursor:default}a.studio-chip:hover{border-color:var(--line-2);color:var(--ink)}.studio-chip__dot{background:var(--faint);border-radius:999px;flex:none;width:6px;height:6px}.studio-chip--live .studio-chip__dot{background:var(--accent)}.studio-chip--warn{color:var(--ink);border-color:var(--diff-remove)}@supports (color:color-mix(in lab,red,red)){.studio-chip--warn{border-color:color-mix(in srgb,var(--diff-remove) 45%,var(--line))}}.studio-chip--warn .studio-chip__dot{background:var(--diff-remove)}.studio-presence{display:inline-flex;position:relative}.studio-presence__trigger{appearance:none;font:inherit;cursor:pointer}.studio-presence__trigger:hover{border-color:var(--line-2);color:var(--ink)}.studio-presence__backdrop{z-index:40;position:fixed;inset:0}.studio-presence__panel{z-index:50;border:1px solid var(--line);background:var(--elevated);width:min(320px,100vw - 24px);box-shadow:0 8px 24px var(--ink);border-radius:10px;padding:12px 12px 10px;position:absolute;top:calc(100% + 6px);right:0}@supports (color:color-mix(in lab,red,red)){.studio-presence__panel{box-shadow:0 8px 24px color-mix(in srgb,var(--ink) 12%,transparent)}}.studio-presence__panel{color:var(--ink)}.studio-presence__lead{font-size:var(--fs-caption);color:var(--muted);margin:0 0 10px;line-height:1.45}.studio-presence__list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.studio-presence__item{border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:8px 9px}.studio-presence__item-head{align-items:center;gap:8px;margin-bottom:2px;display:flex}.studio-presence__kind{font-size:var(--fs-caption);color:var(--ink);font-weight:600}.studio-presence__this{letter-spacing:.04em;text-transform:uppercase;color:var(--accent);font-size:10px;font-weight:700}.studio-presence__route{font-family:var(--font-mono);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.studio-presence__meta{color:var(--faint);margin-top:2px;font-size:11px}.studio-presence__boundary{color:var(--faint);margin:10px 0 0;font-size:11px;line-height:1.45}.studio-surface{container-type:inline-size}.studio-surface__intro{gap:6px;max-width:680px;margin-bottom:22px;display:grid}.studio-surface__eyebrow{color:var(--accent);font-size:var(--fs-micro);letter-spacing:var(--tracking-micro);text-transform:uppercase;margin:0;font-weight:700}.studio-surface__title{color:var(--ink);margin:0;font-size:clamp(18px,2vw,24px);font-weight:650;line-height:1.2}.studio-surface__copy{color:var(--muted);font-size:var(--fs-body);margin:0;line-height:1.6}.studio-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:12px;display:grid}.studio-card,.studio-panel{border:1px solid var(--line);background:var(--panel);border-radius:8px}.studio-card{appearance:none;min-height:132px;color:inherit;text-align:left;align-content:start;gap:10px;padding:16px;display:grid}button.studio-card{cursor:pointer}button.studio-card:hover{border-color:var(--line-2);background:var(--panel)}@supports (color:color-mix(in lab,red,red)){button.studio-card:hover{background:color-mix(in srgb,var(--panel) 80%,var(--elevated))}}.studio-badge{border:1px solid var(--line-2);color:var(--faint);font-size:var(--fs-caption);border-radius:999px;justify-content:center;align-items:center;padding:2px 7px;line-height:1.2;display:inline-flex}.studio-button{appearance:none;border:1px solid var(--line);background:var(--elevated);min-height:32px;color:var(--ink);font:inherit;font-size:var(--fs-label);cursor:pointer;border-radius:7px;justify-content:center;align-items:center;padding:7px 11px;display:inline-flex}.studio-button:hover{border-color:var(--line-2)}.studio-button:disabled{cursor:default;opacity:.55}.studio-button--primary{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.studio-button--primary{border-color:color-mix(in srgb,var(--accent) 55%,var(--line))}}.studio-button--primary{color:var(--accent)}.studio-button--danger{color:var(--diff-remove)}.studio-panel{padding:16px}.studio-panel__title{color:var(--ink);margin:0 0 10px;font-size:14px;font-weight:650}.studio-empty{place-items:center;min-height:min(560px,70vh);display:grid!important}.studio-empty__panel{border:1px dashed var(--line-2);background:var(--panel);text-align:center;border-radius:8px;width:min(100%,520px);padding:28px}.studio__palette-backdrop{background:var(--bg);position:fixed;inset:0}@supports (color:color-mix(in lab,red,red)){.studio__palette-backdrop{background:color-mix(in srgb,var(--bg) 55%,transparent)}}.studio__palette-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:50;justify-content:center;align-items:flex-start;padding-top:14vh;display:flex}.studio__palette{background:var(--elevated);border:1px solid var(--line-2);border-radius:12px;width:100%;max-width:560px;overflow:hidden;box-shadow:0 18px 48px -12px #00000059}.studio__palette-cmd{border-bottom:1px solid var(--line);align-items:center;gap:9px;padding:12px 14px;display:flex}.studio__palette-input{color:var(--ink);font:inherit;background:0 0;border:none;outline:none;flex:1;font-size:14px}.studio__palette-input::placeholder{color:var(--faint)}.studio__palette-list{max-height:52vh;margin:0;padding:6px;list-style:none;overflow:auto}.studio__palette-item{text-align:left;appearance:none;width:100%;font:inherit;cursor:pointer;background:0 0;border:none;border-radius:8px;flex-direction:column;gap:2px;padding:9px 11px;display:flex}.studio__palette-item[data-active]{background:var(--accent-tint)}.studio__palette-label{color:var(--ink);font-size:13px;font-weight:500}.studio__palette-item[aria-current=page] .studio__palette-label:after{content:"current";text-transform:uppercase;letter-spacing:.04em;color:var(--accent);margin-left:8px;font-size:10px;font-weight:400}.studio__palette-blurb{color:var(--muted);font-size:12px;line-height:1.45}.studio__palette-empty{text-align:center;color:var(--faint);padding:16px;font-size:13px}.studio__palette-run .studio__palette-label{color:var(--accent)}.studio__palette-running{color:var(--muted);margin:0;padding:16px;font-size:13px}.studio__palette-error{color:var(--diff-remove);margin:0;padding:4px 16px 14px;font-size:12px;line-height:1.5}@media(max-width:760px){.studio__palette-backdrop{padding-top:8vh}.studio__palette{max-width:none;margin:0 12px}.ai-set__field{flex-direction:column;align-items:stretch}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}.studio-loading[data-astro-cid-w5sm6wlz]{margin:0;min-height:100vh;display:grid;place-items:center;background:#16161a;color:#a1a1aa;font:14px Inter,system-ui,sans-serif}
|