tempest-react-sdk 0.74.0 → 0.76.0

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.
Files changed (147) hide show
  1. package/README.md +3 -1
  2. package/dist/br/BrazilMap.module.cjs.map +1 -1
  3. package/dist/br/BrazilMap.module.js.map +1 -1
  4. package/dist/br/MunicipalitySearch.cjs +1 -1
  5. package/dist/br/MunicipalitySearch.cjs.map +1 -1
  6. package/dist/br/MunicipalitySearch.js +66 -48
  7. package/dist/br/MunicipalitySearch.js.map +1 -1
  8. package/dist/br/MunicipalitySearch.module.cjs +1 -1
  9. package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
  10. package/dist/br/MunicipalitySearch.module.js +4 -3
  11. package/dist/br/MunicipalitySearch.module.js.map +1 -1
  12. package/dist/br.d.ts +12 -0
  13. package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
  14. package/dist/components/AIChat/AIChat.module.js.map +1 -1
  15. package/dist/components/AppBar/AppBar.cjs +1 -1
  16. package/dist/components/AppBar/AppBar.cjs.map +1 -1
  17. package/dist/components/AppBar/AppBar.js +1 -0
  18. package/dist/components/AppBar/AppBar.js.map +1 -1
  19. package/dist/components/AppBar/AppBar.module.cjs +1 -1
  20. package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
  21. package/dist/components/AppBar/AppBar.module.js +12 -11
  22. package/dist/components/AppBar/AppBar.module.js.map +1 -1
  23. package/dist/components/Button/Button.module.cjs.map +1 -1
  24. package/dist/components/Button/Button.module.js.map +1 -1
  25. package/dist/components/Button/ButtonContent.cjs.map +1 -1
  26. package/dist/components/Button/ButtonContent.js.map +1 -1
  27. package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
  28. package/dist/components/Carousel/Carousel.module.js.map +1 -1
  29. package/dist/components/Chat/Chat.module.cjs.map +1 -1
  30. package/dist/components/Chat/Chat.module.js.map +1 -1
  31. package/dist/components/Combobox/Combobox.cjs +1 -1
  32. package/dist/components/Combobox/Combobox.cjs.map +1 -1
  33. package/dist/components/Combobox/Combobox.js +18 -23
  34. package/dist/components/Combobox/Combobox.js.map +1 -1
  35. package/dist/components/Combobox/use-listbox-dismiss.cjs +2 -0
  36. package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -0
  37. package/dist/components/Combobox/use-listbox-dismiss.js +34 -0
  38. package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -0
  39. package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
  40. package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
  41. package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
  42. package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
  43. package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
  44. package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
  45. package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
  46. package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
  47. package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
  48. package/dist/components/ListTile/ListTile.module.js.map +1 -1
  49. package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
  50. package/dist/components/Markdown/Markdown.module.js.map +1 -1
  51. package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
  52. package/dist/components/Menubar/Menubar.module.js.map +1 -1
  53. package/dist/components/MultiSelect/MultiSelect.cjs +1 -1
  54. package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
  55. package/dist/components/MultiSelect/MultiSelect.js +55 -54
  56. package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
  57. package/dist/components/Navbar/Navbar.cjs +1 -1
  58. package/dist/components/Navbar/Navbar.cjs.map +1 -1
  59. package/dist/components/Navbar/Navbar.js +1 -0
  60. package/dist/components/Navbar/Navbar.js.map +1 -1
  61. package/dist/components/Navbar/Navbar.module.cjs +1 -1
  62. package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
  63. package/dist/components/Navbar/Navbar.module.js +9 -8
  64. package/dist/components/Navbar/Navbar.module.js.map +1 -1
  65. package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
  66. package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
  67. package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
  68. package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
  69. package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
  70. package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
  71. package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
  72. package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
  73. package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
  74. package/dist/components/PinInput/PinInput.module.js.map +1 -1
  75. package/dist/components/SectionHeader/SectionHeader.cjs +1 -1
  76. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
  77. package/dist/components/SectionHeader/SectionHeader.js +33 -25
  78. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  79. package/dist/components/Tour/Tour.module.cjs.map +1 -1
  80. package/dist/components/Tour/Tour.module.js.map +1 -1
  81. package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
  82. package/dist/components/Transfer/Transfer.module.js.map +1 -1
  83. package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
  84. package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
  85. package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
  86. package/dist/geo/TrajectoryMap.module.js.map +1 -1
  87. package/dist/icons/IconPicker.module.cjs.map +1 -1
  88. package/dist/icons/IconPicker.module.js.map +1 -1
  89. package/dist/neural.cjs +2 -0
  90. package/dist/neural.cjs.map +1 -0
  91. package/dist/neural.d.ts +110 -0
  92. package/dist/neural.js +48 -0
  93. package/dist/neural.js.map +1 -0
  94. package/dist/styles/actions.css +2 -2
  95. package/dist/styles/br.css +3 -3
  96. package/dist/styles/chat.css +5 -5
  97. package/dist/styles/component/AIChat.css +3 -3
  98. package/dist/styles/component/AppBar.css +1 -0
  99. package/dist/styles/component/BrazilMap.css +2 -2
  100. package/dist/styles/component/Button.css +1 -1
  101. package/dist/styles/component/Carousel.css +3 -3
  102. package/dist/styles/component/Chat.css +2 -2
  103. package/dist/styles/component/Dropzone.css +2 -1
  104. package/dist/styles/component/FilterBar.css +2 -2
  105. package/dist/styles/component/FloatingActionButton.css +1 -1
  106. package/dist/styles/component/IconPicker.css +1 -1
  107. package/dist/styles/component/ImageCropper.css +2 -2
  108. package/dist/styles/component/ListTile.css +1 -1
  109. package/dist/styles/component/Markdown.css +1 -1
  110. package/dist/styles/component/Menubar.css +1 -1
  111. package/dist/styles/component/MunicipalitySearch.css +1 -1
  112. package/dist/styles/component/Navbar.css +1 -0
  113. package/dist/styles/component/NavigationMenu.css +1 -1
  114. package/dist/styles/component/NavigationRail.css +1 -1
  115. package/dist/styles/component/NotificationCenter.css +3 -3
  116. package/dist/styles/component/PasswordInput.css +1 -1
  117. package/dist/styles/component/PinInput.css +1 -1
  118. package/dist/styles/component/Tour.css +2 -2
  119. package/dist/styles/component/TrajectoryMap.css +1 -1
  120. package/dist/styles/component/Transfer.css +2 -2
  121. package/dist/styles/component/VirtualTable.css +2 -2
  122. package/dist/styles/data.css +10 -10
  123. package/dist/styles/feedback.css +3 -3
  124. package/dist/styles/forms.css +6 -5
  125. package/dist/styles/geo.css +1 -1
  126. package/dist/styles/icons.css +1 -1
  127. package/dist/styles/inverse.css +225 -0
  128. package/dist/styles/navigation.css +8 -6
  129. package/dist/styles.css +1 -1
  130. package/dist/tempest-react-sdk.d.ts +130 -17
  131. package/dist/theme/create-theme.cjs +1 -1
  132. package/dist/theme/create-theme.cjs.map +1 -1
  133. package/dist/theme/create-theme.js +6 -1
  134. package/dist/theme/create-theme.js.map +1 -1
  135. package/dist/theme/inverse-render.cjs +1 -1
  136. package/dist/theme/inverse-render.cjs.map +1 -1
  137. package/dist/theme/inverse-render.js +1 -1
  138. package/dist/theme/inverse-render.js.map +1 -1
  139. package/dist/theme/inverse-restore.cjs +5 -0
  140. package/dist/theme/inverse-restore.cjs.map +1 -0
  141. package/dist/theme/inverse-restore.js +30 -0
  142. package/dist/theme/inverse-restore.js.map +1 -0
  143. package/dist/theme/inverse-surface.cjs +1 -1
  144. package/dist/theme/inverse-surface.cjs.map +1 -1
  145. package/dist/theme/inverse-surface.js +69 -72
  146. package/dist/theme/inverse-surface.js.map +1 -1
  147. package/package.json +11 -1
package/dist/neural.js ADDED
@@ -0,0 +1,48 @@
1
+ import { RnnoiseWorkletNode as e, loadRnnoise as t } from "@sapphi-red/web-noise-suppressor";
2
+ //#region src/neural/index.ts
3
+ function n() {
4
+ return typeof AudioWorkletNode < "u" && typeof window < "u" && window.isSecureContext;
5
+ }
6
+ var r = null, i = /* @__PURE__ */ new WeakMap();
7
+ async function a(e, n) {
8
+ let a = i.get(e);
9
+ return a || (a = e.audioWorklet.addModule(n.workletUrl).then(() => void 0, (t) => {
10
+ throw i.delete(e), t;
11
+ }), i.set(e, a)), await a, r === null && (r = t({
12
+ url: n.wasmUrl,
13
+ simdUrl: n.simdWasmUrl
14
+ }).catch((e) => {
15
+ throw r = null, e;
16
+ })), r;
17
+ }
18
+ async function o(t, n, r, i) {
19
+ if (t.sampleRate !== 48e3) return null;
20
+ let o;
21
+ try {
22
+ o = await a(t, r);
23
+ } catch {
24
+ return null;
25
+ }
26
+ let s;
27
+ try {
28
+ s = new e(t, {
29
+ maxChannels: i.maxChannels,
30
+ wasmBinary: o
31
+ });
32
+ } catch {
33
+ return null;
34
+ }
35
+ let c = t.createMediaStreamSource(new MediaStream([n])), l = t.createMediaStreamDestination();
36
+ c.connect(s), s.connect(l);
37
+ let u = l.stream.getAudioTracks()[0];
38
+ return u ? (u.contentHint = n.contentHint, {
39
+ track: u,
40
+ release: () => {
41
+ c.disconnect(), s.disconnect(), l.disconnect(), s.destroy(), u.stop();
42
+ }
43
+ }) : (c.disconnect(), s.disconnect(), l.disconnect(), s.destroy(), null);
44
+ }
45
+ //#endregion
46
+ export { o as createNeuralSuppressor, n as isNeuralSuppressionSupported, a as prepareNeuralSuppressor };
47
+
48
+ //# sourceMappingURL=neural.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neural.js","names":[],"sources":["../src/neural/index.ts"],"sourcesContent":["import { RnnoiseWorkletNode, loadRnnoise } from \"@sapphi-red/web-noise-suppressor\";\n\n/**\n * Where the suppressor's three pieces live, as URLs a bundler hands over.\n *\n * The `@sapphi-red/web-noise-suppressor` package ships the runnable assets next\n * to its code, but it cannot say where they are from inside a library: the\n * `?url` suffix that resolves a module to its served address is a bundler\n * feature, and every bundler answers it differently. So this subpath takes the\n * three resolved addresses as arguments and does the honest part — the graph,\n * the load-once semantics, the per-context registration — here.\n */\nexport interface NeuralSuppressorAssets {\n /**\n * The `AudioWorklet` processor module the model runs its DSP in\n * (`rnnoiseWorklet.js`).\n */\n workletUrl: string;\n /** The SIMD build of the model's wasm (`rnnoise_simd.wasm`). */\n simdWasmUrl: string;\n /** The baseline build, used where the engine lacks SIMD (`rnnoise.wasm`). */\n wasmUrl: string;\n}\n\n/**\n * Whether this browser can run a worklet-based noise suppressor.\n *\n * Answered from the two things the path needs that nothing but the platform can\n * supply: `AudioWorkletNode` runs custom DSP on the audio thread, and a secure\n * context is what the browser requires before letting a module near the\n * microphone graph. Everything else — the models, the wasm — ships with the\n * caller, so it cannot be missing. The context must also run at 48 kHz, which\n * is checked at build time rather than here because the caller owns how its\n * context was opened.\n *\n * Deliberately conservative: anything it cannot establish answers `false`, and\n * a `false` sends the caller back to the browser's own `noiseSuppression`\n * constraint, which is weaker but always there.\n *\n * @returns True when a neural suppressor can be built on top of a capture.\n */\nexport function isNeuralSuppressionSupported(): boolean {\n return (\n typeof AudioWorkletNode !== \"undefined\" &&\n typeof window !== \"undefined\" &&\n window.isSecureContext\n );\n}\n\n/**\n * The one wasm binary every suppressor shares, fetched once.\n *\n * `loadRnnoise` compiles the whole model, and the answer is identical for every\n * graph that opens afterwards — a mesh can build a suppressor per published\n * track and a settings dialog may build a second for its monitor within a\n * single frame. Held as the promise rather than the result so the first two\n * callers race into one fetch instead of two. Reset on failure, so the next\n * call retries instead of replaying a dead promise.\n */\nlet loadingBinary: Promise<ArrayBuffer> | null = null;\n\n/**\n * The contexts the worklet module has already been registered on, mapped to the\n * registration's own promise.\n *\n * `addModule` is per-context and throws on a name it already holds, so the\n * module records the moment a context is ready and skips the call next time.\n * The promise is what makes a fast caller that cannot wait — a mesh can open a\n * microphone and a preview within a single frame — race into one `addModule`\n * instead of two: had this been a set, the second caller would see the context\n * absent while the first was still awaiting and register the module twice.\n * Mapped to a promise rather than the module itself the way the wasm is,\n * because the registration belongs to one context while the wasm is shared,\n * and nothing here should keep a dead context alive — the value is dropped\n * with the context. On failure the entry is removed, so the next attempt\n * actually retries instead of replaying the broken registration.\n */\nconst readyContexts = new WeakMap<AudioContext, Promise<void>>();\n\n/**\n * The compiled model for this context, loading what is not ready yet.\n *\n * Idempotent across calls: the wasm fetch and the module registration both\n * happen exactly once. The wasm is shared by every suppressor, while the module\n * registration belongs to one context.\n *\n * @param context - The context the suppression graph will run in.\n * @param assets - The resolved asset addresses from {@link NeuralSuppressorAssets}.\n * @returns The compiled model binary, ready to hand to a worklet node.\n * @throws Whatever the fetch or the compile threw, for the caller to fall back on.\n */\nexport async function prepareNeuralSuppressor(\n context: AudioContext,\n assets: NeuralSuppressorAssets,\n): Promise<ArrayBuffer> {\n let ready = readyContexts.get(context);\n if (!ready) {\n ready = context.audioWorklet.addModule(assets.workletUrl).then(\n () => undefined,\n (error: unknown) => {\n readyContexts.delete(context);\n throw error;\n },\n );\n readyContexts.set(context, ready);\n }\n await ready;\n if (loadingBinary === null) {\n loadingBinary = loadRnnoise({ url: assets.wasmUrl, simdUrl: assets.simdWasmUrl }).catch(\n (error: unknown) => {\n loadingBinary = null;\n throw error;\n },\n );\n }\n return loadingBinary;\n}\n\n/**\n * A denoised track plus the graph that has to come down with it.\n *\n * `track` is not the captured one — it is the output of a `MediaStream`\n * destination the worklet feeds — so stopping the published track is not enough\n * to free the microphone. `release` closes the graph; the captured track behind\n * it belongs to the caller.\n */\nexport interface NeuralSuppressor {\n /** The track to publish in place of the captured one. */\n track: MediaStreamTrack;\n /** Tears the graph down. Does not stop the source track it was built from. */\n release(): void;\n}\n\n/**\n * Build a suppressor graph on top of a captured microphone track.\n *\n * The model runs on the audio thread through an `AudioWorkletNode` — a\n * recurrent network trained on speech that separates a voice from everything\n * that is not one: keyboards, fans, traffic, a room full of people. The\n * browser's `noiseSuppression` constraint answers the same question with a\n * stationary-noise gate that either lets a transient through or eats the voice\n * with it.\n *\n * Prefer {@link prepareNeuralSuppressor} before the capture opens: the fallback\n * to the browser's own suppression is a `getUserMedia` constraint, and a\n * constraint cannot be added to a capture that already exists. A caller that\n * did not preload still works — the load happens here, idempotently.\n *\n * The model assumes 48 kHz. A context opened at any other rate answers `null`\n * before anything is fetched, because feeding speech samples of the wrong rate\n * into a network trained on 48 kHz produces mush, not a voice.\n *\n * Failure is not fatal and is reported as `null` — whether the wasm would not\n * load or the worklet node could not be built: by the time this runs the caller\n * has already committed to the neural path, so the honest outcome is a call\n * without suppression rather than a microphone that will not open. {@link\n * prepareNeuralSuppressor}, which exists to be called *before* the capture,\n * still throws so the caller can pick a different fallback while one is\n * reachable.\n *\n * @param context - The shared context, prepared at 48 kHz.\n * @param source - The captured microphone track.\n * @param assets - The resolved asset addresses from {@link NeuralSuppressorAssets}.\n * @param options - `maxChannels` is the channel count of the capture; the model\n * is mono, and a stereo capture asks for two so a second channel is not lost.\n * @returns The denoised track and its teardown, or `null` when this context or\n * this graph cannot host the suppressor.\n */\nexport async function createNeuralSuppressor(\n context: AudioContext,\n source: MediaStreamTrack,\n assets: NeuralSuppressorAssets,\n options: { maxChannels: number },\n): Promise<NeuralSuppressor | null> {\n if (context.sampleRate !== 48_000) return null;\n\n let binary: ArrayBuffer;\n try {\n binary = await prepareNeuralSuppressor(context, assets);\n } catch {\n return null;\n }\n\n let node: RnnoiseWorkletNode;\n try {\n node = new RnnoiseWorkletNode(context, {\n maxChannels: options.maxChannels,\n wasmBinary: binary,\n });\n } catch {\n return null;\n }\n\n const input = context.createMediaStreamSource(new MediaStream([source]));\n const output = context.createMediaStreamDestination();\n input.connect(node);\n node.connect(output);\n\n const track = output.stream.getAudioTracks()[0];\n if (!track) {\n input.disconnect();\n node.disconnect();\n output.disconnect();\n node.destroy();\n return null;\n }\n track.contentHint = source.contentHint;\n\n return {\n track,\n release: () => {\n input.disconnect();\n node.disconnect();\n output.disconnect();\n node.destroy();\n track.stop();\n },\n };\n}\n"],"mappings":";;AAyCA,SAAgB,IAAwC;CACpD,OACI,OAAO,mBAAqB,OAC5B,OAAO,SAAW,OAClB,OAAO;AAEf;AAYA,IAAI,IAA6C,MAkB3C,oBAAgB,IAAI,QAAqC;AAc/D,eAAsB,EAClB,GACA,GACoB;CACpB,IAAI,IAAQ,EAAc,IAAI,CAAO;CAoBrC,OAnBK,MACD,IAAQ,EAAQ,aAAa,UAAU,EAAO,UAAU,CAAC,CAAC,WAChD,KAAA,IACL,MAAmB;EAEhB,MADA,EAAc,OAAO,CAAO,GACtB;CACV,CACJ,GACA,EAAc,IAAI,GAAS,CAAK,IAEpC,MAAM,GACF,MAAkB,SAClB,IAAgB,EAAY;EAAE,KAAK,EAAO;EAAS,SAAS,EAAO;CAAY,CAAC,CAAC,CAAC,OAC7E,MAAmB;EAEhB,MADA,IAAgB,MACV;CACV,CACJ,IAEG;AACX;AAoDA,eAAsB,EAClB,GACA,GACA,GACA,GACgC;CAChC,IAAI,EAAQ,eAAe,MAAQ,OAAO;CAE1C,IAAI;CACJ,IAAI;EACA,IAAS,MAAM,EAAwB,GAAS,CAAM;CAC1D,QAAQ;EACJ,OAAO;CACX;CAEA,IAAI;CACJ,IAAI;EACA,IAAO,IAAI,EAAmB,GAAS;GACnC,aAAa,EAAQ;GACrB,YAAY;EAChB,CAAC;CACL,QAAQ;EACJ,OAAO;CACX;CAEA,IAAM,IAAQ,EAAQ,wBAAwB,IAAI,YAAY,CAAC,CAAM,CAAC,CAAC,GACjE,IAAS,EAAQ,6BAA6B;CAEpD,AADA,EAAM,QAAQ,CAAI,GAClB,EAAK,QAAQ,CAAM;CAEnB,IAAM,IAAQ,EAAO,OAAO,eAAe,CAAC,CAAC;CAU7C,OATK,KAOL,EAAM,cAAc,EAAO,aAEpB;EACH;EACA,eAAe;GAKX,AAJA,EAAM,WAAW,GACjB,EAAK,WAAW,GAChB,EAAO,WAAW,GAClB,EAAK,QAAQ,GACb,EAAM,KAAK;EACf;CACJ,MAjBI,EAAM,WAAW,GACjB,EAAK,WAAW,GAChB,EAAO,WAAW,GAClB,EAAK,QAAQ,GACN;AAcf"}
@@ -39,7 +39,7 @@ a.tempest_button_2ZuB7:is(:link,:visited,:hover,:active,:focus,:not([href])){col
39
39
  .tempest_pill_lx8lt{border-radius:var(--tempest-radius-full)}
40
40
  .tempest_fullWidth_36oJT{width:100%}
41
41
  .tempest_content_EKXmF{justify-content:center;align-items:center;gap:var(--tempest-control-gap,var(--tempest-space-2));min-width:0;display:inline-flex}
42
- .tempest_loading_EQAt2 .tempest_hiddenText_hIiJ2{visibility:hidden}
42
+ .tempest_loading_EQAt2 .tempest_hiddenText_hIiJ2{opacity:0;pointer-events:none}
43
43
  .tempest_spinner_ZExvW{animation:.8s linear infinite tempest_tempest-spin_UOSVC;position:absolute}
44
44
  @keyframes tempest_tempest-spin_UOSVC{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
45
45
  .tempest_root_5ZetV{display:inline-flex;position:relative}
@@ -60,7 +60,7 @@ a.tempest_button_2ZuB7:is(:link,:visited,:hover,:active,:focus,:not([href])){col
60
60
  @media (prefers-reduced-motion:reduce){.tempest_menu_-RiRW{animation:none}}
61
61
  .tempest_fab_U3NIL{justify-content:center;align-items:center;gap:var(--tempest-space-2);cursor:pointer;font-family:var(--tempest-font-sans);font-weight:var(--tempest-weight-semibold);box-shadow:var(--tempest-shadow-lg);transition:background var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out), box-shadow var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out), transform var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out);border:0;display:inline-flex}
62
62
  .tempest_fab_U3NIL:active{transform:scale(.96)}
63
- .tempest_fab_U3NIL:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,var(--tempest-primary));outline-offset:var(--tempest-focus-ring-offset,2px)}
63
+ .tempest_fab_U3NIL:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,currentColor);outline-offset:var(--tempest-focus-ring-offset,2px)}
64
64
  .tempest_fab_U3NIL:disabled{opacity:.5;cursor:not-allowed;box-shadow:var(--tempest-shadow-sm)}
65
65
  .tempest_primary_8lnHI{background:var(--tempest-primary);color:var(--tempest-primary-foreground)}
66
66
  .tempest_primary_8lnHI:hover:not(:disabled){background:var(--tempest-primary-active,var(--tempest-primary))}
@@ -5,7 +5,7 @@
5
5
  .tempest_state_JV7Hu{fill:var(--tempest-surface-3);stroke:var(--tempest-border-strong);stroke-width:.75px;stroke-linejoin:round;transition:fill .12s,opacity .12s}
6
6
  .tempest_state_JV7Hu[role=button]{cursor:pointer}
7
7
  .tempest_state_JV7Hu[role=button]:hover{fill:var(--tempest-primary-soft)}
8
- .tempest_state_JV7Hu[role=button]:focus-visible{stroke:var(--tempest-primary);stroke-width:1.5px;outline:none}
8
+ .tempest_state_JV7Hu[role=button]:focus-visible{stroke:var(--tempest-focus-ring-color);stroke-width:1.5px;outline:none}
9
9
  .tempest_selected_CNxWu{fill:var(--tempest-primary);stroke:var(--tempest-primary-active);stroke-width:1.25px}
10
10
  .tempest_selected_CNxWu:hover{fill:var(--tempest-primary-hover)}
11
11
  .tempest_label_PK-ES{fill:var(--tempest-text);font-size:10px;font-weight:var(--tempest-weight-medium);pointer-events:none;-webkit-user-select:none;user-select:none}
@@ -15,7 +15,7 @@
15
15
  .tempest_marker_5td7B{stroke:var(--tempest-surface);stroke-width:2px}
16
16
  .tempest_marker_5td7B[role=button]{cursor:pointer}
17
17
  .tempest_marker_5td7B[role=button]:hover{stroke:var(--tempest-primary-active)}
18
- .tempest_marker_5td7B[role=button]:focus-visible{stroke:var(--tempest-primary);stroke-width:3px;outline:none}
18
+ .tempest_marker_5td7B[role=button]:focus-visible{stroke:var(--tempest-focus-ring-color);stroke-width:3px;outline:none}
19
19
  .tempest_zoomReset_IXmak{top:var(--tempest-space-2);right:var(--tempest-space-2);padding:var(--tempest-space-1) var(--tempest-space-2);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-xs);color:var(--tempest-text);background:var(--tempest-surface);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-sm);cursor:pointer;position:absolute}
20
20
  .tempest_zoomReset_IXmak:hover{background:var(--tempest-surface-2)}
21
21
  .tempest_legend_jti9g{gap:var(--tempest-space-1);padding:var(--tempest-space-2) var(--tempest-space-3);background:var(--tempest-surface);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-xs);color:var(--tempest-text);flex-direction:column;min-width:160px;display:inline-flex}
@@ -29,7 +29,7 @@
29
29
  .tempest_search_iYSqC{font-family:var(--tempest-font-sans);position:relative}
30
30
  .tempest_results_-a0Jg{z-index:10;margin:var(--tempest-space-1) 0 0;padding:var(--tempest-space-1);background:var(--tempest-surface);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);max-height:260px;box-shadow:var(--tempest-shadow-md,0 4px 12px #0000001f);list-style:none;position:absolute;top:100%;left:0;right:0;overflow-y:auto}
31
31
  .tempest_result_D5-no{justify-content:space-between;align-items:center;gap:var(--tempest-space-2);width:100%;padding:var(--tempest-space-2) var(--tempest-space-3);border-radius:var(--tempest-radius-sm);font-size:var(--tempest-text-sm);color:var(--tempest-text);text-align:left;cursor:pointer;background:0 0;border:none;display:flex}
32
- .tempest_result_D5-no:hover,.tempest_result_D5-no:focus-visible{background:var(--tempest-primary-soft);outline:none}
32
+ .tempest_result_D5-no:hover,.tempest_result_D5-no.tempest_active_qX2ct{background:var(--tempest-primary-soft)}
33
33
  .tempest_uf_Rj15X{font-size:var(--tempest-text-xs);color:var(--tempest-text-muted);font-weight:var(--tempest-weight-medium)}
34
34
  .tempest_pix_sx91C{align-items:center;gap:var(--tempest-space-3);font-family:var(--tempest-font-sans);flex-direction:column;display:inline-flex}
35
35
  .tempest_symbol_tVr1U{padding:var(--tempest-space-2);border-radius:var(--tempest-radius-md);border:1px solid var(--tempest-border);background:#fff}
@@ -3,7 +3,7 @@
3
3
  .tempest_header_KYy5l{padding:var(--tempest-space-3) var(--tempest-space-4);border-bottom:1px solid var(--tempest-border);flex:none}
4
4
  .tempest_threadWrapper_LjoF6{flex:auto;min-width:0;min-height:0;display:flex;position:relative}
5
5
  .tempest_thread_RqELz{gap:var(--tempest-space-5);min-width:0;min-height:0;padding:var(--tempest-space-4);overscroll-behavior:contain;flex-direction:column;flex:auto;display:flex;overflow-y:auto}
6
- .tempest_thread_RqELz:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-2px}
6
+ .tempest_thread_RqELz:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
7
7
  .tempest_jump_oBKxQ{right:var(--tempest-space-4);bottom:var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-full);background-color:var(--tempest-surface);width:2rem;height:2rem;color:var(--tempest-text);box-shadow:var(--tempest-shadow-md);cursor:pointer;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}
8
8
  .tempest_jump_oBKxQ:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
9
9
  @media (pointer:coarse){.tempest_jump_oBKxQ:after{content:"";position:absolute;inset:-6px}}
@@ -54,7 +54,7 @@
54
54
  @media (prefers-reduced-motion:reduce){.tempest_actions_SZnxe .tempest_action_YPvQH{transition:none}}
55
55
  .tempest_editor_rk4hA{gap:var(--tempest-space-2);flex-direction:column;width:100%;max-width:min(85%,36rem);display:flex}
56
56
  .tempest_editField_Z9neJ{width:100%;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-primary);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-bg);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:vertical}
57
- .tempest_editField_Z9neJ:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-1px}
57
+ .tempest_editField_Z9neJ:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
58
58
  .tempest_editActions_vfC0b{justify-content:flex-end;gap:var(--tempest-space-2);display:flex}
59
59
  .tempest_ghost_S1yuC{padding:var(--tempest-space-1) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);cursor:pointer;background-color:#0000}
60
60
  .tempest_primary_wZ-Wu{padding:var(--tempest-space-1) var(--tempest-space-3);border-radius:var(--tempest-radius-md);background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;border:none}
@@ -66,7 +66,7 @@
66
66
  .tempest_suggestion_4NYhq:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
67
67
  .tempest_composer_AaB1Q{gap:var(--tempest-space-1);padding:var(--tempest-space-3) var(--tempest-space-4);border-top:1px solid var(--tempest-border);flex-direction:column;flex:none;display:flex}
68
68
  .tempest_composerBox_Fz-GG{align-items:flex-end;gap:var(--tempest-space-2);max-width:var(--tempest-ai-chat-width,48rem);width:100%;padding:var(--tempest-space-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-surface);margin-inline:auto;display:flex}
69
- .tempest_composerBox_Fz-GG:focus-within{border-color:var(--tempest-primary)}
69
+ .tempest_composerBox_Fz-GG:focus-within{border-color:var(--tempest-primary);box-shadow:0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color)}
70
70
  .tempest_field_7m1Pa{min-width:0;padding:var(--tempest-space-1) var(--tempest-space-2);color:inherit;font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:none;background:0 0;border:none;flex:auto}
71
71
  .tempest_field_7m1Pa:focus-visible{outline:none}
72
72
  .tempest_field_7m1Pa:disabled{color:var(--tempest-text-subtle);cursor:not-allowed}
@@ -80,7 +80,7 @@
80
80
  .tempest_panel_xUVw0{min-width:0;min-height:0;height:var(--tempest-chat-height,100%);background-color:var(--tempest-bg);color:var(--tempest-text);font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
81
81
  .tempest_header_muoPu{padding:var(--tempest-space-3) var(--tempest-space-4);border-bottom:1px solid var(--tempest-border);flex:none}
82
82
  .tempest_thread_-j8yS{gap:var(--tempest-space-3);min-height:0;padding:var(--tempest-space-4);overscroll-behavior:contain;flex-direction:column;flex:auto;display:flex;overflow-y:auto}
83
- .tempest_thread_-j8yS:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-2px}
83
+ .tempest_thread_-j8yS:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
84
84
  .tempest_day_uLsWA{align-items:center;gap:var(--tempest-space-3);display:flex}
85
85
  .tempest_day_uLsWA:before,.tempest_day_uLsWA:after{background-color:var(--tempest-border);content:"";flex:auto;height:1px}
86
86
  .tempest_dayLabel_m8rDy{color:var(--tempest-text-subtle);font-size:var(--tempest-text-xs);text-transform:capitalize}
@@ -133,7 +133,7 @@
133
133
  .tempest_typing_zdp3O{padding:0 var(--tempest-space-4) var(--tempest-space-2);color:var(--tempest-text-subtle);font-size:var(--tempest-text-xs);flex:none;margin:0}
134
134
  .tempest_composer_krOGl{align-items:flex-end;gap:var(--tempest-space-2);padding:var(--tempest-space-3) var(--tempest-space-4);border-top:1px solid var(--tempest-border);flex:none;display:flex}
135
135
  .tempest_field_fBY-q{min-width:0;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-bg);color:inherit;font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:none;flex:auto}
136
- .tempest_field_fBY-q:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-1px}
136
+ .tempest_field_fBY-q:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
137
137
  .tempest_field_fBY-q:disabled{background-color:var(--tempest-surface-2);color:var(--tempest-text-subtle);cursor:not-allowed}
138
138
  .tempest_composerActions_MYwQx{align-items:center;gap:var(--tempest-space-2);display:flex}
139
139
  .tempest_send_NwcaR{padding:var(--tempest-space-2) var(--tempest-space-4);border-radius:var(--tempest-radius-md);background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;border:none}
@@ -3,7 +3,7 @@
3
3
  .tempest_header_KYy5l{padding:var(--tempest-space-3) var(--tempest-space-4);border-bottom:1px solid var(--tempest-border);flex:none}
4
4
  .tempest_threadWrapper_LjoF6{flex:auto;min-width:0;min-height:0;display:flex;position:relative}
5
5
  .tempest_thread_RqELz{gap:var(--tempest-space-5);min-width:0;min-height:0;padding:var(--tempest-space-4);overscroll-behavior:contain;flex-direction:column;flex:auto;display:flex;overflow-y:auto}
6
- .tempest_thread_RqELz:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-2px}
6
+ .tempest_thread_RqELz:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
7
7
  .tempest_jump_oBKxQ{right:var(--tempest-space-4);bottom:var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-full);background-color:var(--tempest-surface);width:2rem;height:2rem;color:var(--tempest-text);box-shadow:var(--tempest-shadow-md);cursor:pointer;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}
8
8
  .tempest_jump_oBKxQ:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
9
9
  @media (pointer:coarse){.tempest_jump_oBKxQ:after{content:"";position:absolute;inset:-6px}}
@@ -54,7 +54,7 @@
54
54
  @media (prefers-reduced-motion:reduce){.tempest_actions_SZnxe .tempest_action_YPvQH{transition:none}}
55
55
  .tempest_editor_rk4hA{gap:var(--tempest-space-2);flex-direction:column;width:100%;max-width:min(85%,36rem);display:flex}
56
56
  .tempest_editField_Z9neJ{width:100%;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-primary);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-bg);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:vertical}
57
- .tempest_editField_Z9neJ:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-1px}
57
+ .tempest_editField_Z9neJ:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
58
58
  .tempest_editActions_vfC0b{justify-content:flex-end;gap:var(--tempest-space-2);display:flex}
59
59
  .tempest_ghost_S1yuC{padding:var(--tempest-space-1) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);cursor:pointer;background-color:#0000}
60
60
  .tempest_primary_wZ-Wu{padding:var(--tempest-space-1) var(--tempest-space-3);border-radius:var(--tempest-radius-md);background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;border:none}
@@ -66,7 +66,7 @@
66
66
  .tempest_suggestion_4NYhq:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
67
67
  .tempest_composer_AaB1Q{gap:var(--tempest-space-1);padding:var(--tempest-space-3) var(--tempest-space-4);border-top:1px solid var(--tempest-border);flex-direction:column;flex:none;display:flex}
68
68
  .tempest_composerBox_Fz-GG{align-items:flex-end;gap:var(--tempest-space-2);max-width:var(--tempest-ai-chat-width,48rem);width:100%;padding:var(--tempest-space-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-surface);margin-inline:auto;display:flex}
69
- .tempest_composerBox_Fz-GG:focus-within{border-color:var(--tempest-primary)}
69
+ .tempest_composerBox_Fz-GG:focus-within{border-color:var(--tempest-primary);box-shadow:0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color)}
70
70
  .tempest_field_7m1Pa{min-width:0;padding:var(--tempest-space-1) var(--tempest-space-2);color:inherit;font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:none;background:0 0;border:none;flex:auto}
71
71
  .tempest_field_7m1Pa:focus-visible{outline:none}
72
72
  .tempest_field_7m1Pa:disabled{color:var(--tempest-text-subtle);cursor:not-allowed}
@@ -3,6 +3,7 @@
3
3
  .tempest_bar_SHqWS.tempest_centered_S0CCw{grid-template-columns:1fr auto 1fr}
4
4
  .tempest_bar_SHqWS.tempest_surface_fusKb{background:var(--tempest-surface);color:var(--tempest-text)}
5
5
  .tempest_bar_SHqWS.tempest_primary_QcCyN{background:var(--tempest-primary);color:var(--tempest-primary-foreground)}
6
+ .tempest_bar_SHqWS.tempest_inverse_Icool{background:var(--tempest-bg);color:var(--tempest-text)}
6
7
  .tempest_bar_SHqWS.tempest_transparent_uGrsu{color:inherit;background:0 0}
7
8
  .tempest_bar_SHqWS.tempest_bordered_5M9FZ{border-bottom:1px solid var(--tempest-border)}
8
9
  .tempest_bar_SHqWS.tempest_sticky_DStUO{z-index:30;position:sticky;top:0}
@@ -5,7 +5,7 @@
5
5
  .tempest_state_JV7Hu{fill:var(--tempest-surface-3);stroke:var(--tempest-border-strong);stroke-width:.75px;stroke-linejoin:round;transition:fill .12s,opacity .12s}
6
6
  .tempest_state_JV7Hu[role=button]{cursor:pointer}
7
7
  .tempest_state_JV7Hu[role=button]:hover{fill:var(--tempest-primary-soft)}
8
- .tempest_state_JV7Hu[role=button]:focus-visible{stroke:var(--tempest-primary);stroke-width:1.5px;outline:none}
8
+ .tempest_state_JV7Hu[role=button]:focus-visible{stroke:var(--tempest-focus-ring-color);stroke-width:1.5px;outline:none}
9
9
  .tempest_selected_CNxWu{fill:var(--tempest-primary);stroke:var(--tempest-primary-active);stroke-width:1.25px}
10
10
  .tempest_selected_CNxWu:hover{fill:var(--tempest-primary-hover)}
11
11
  .tempest_label_PK-ES{fill:var(--tempest-text);font-size:10px;font-weight:var(--tempest-weight-medium);pointer-events:none;-webkit-user-select:none;user-select:none}
@@ -15,6 +15,6 @@
15
15
  .tempest_marker_5td7B{stroke:var(--tempest-surface);stroke-width:2px}
16
16
  .tempest_marker_5td7B[role=button]{cursor:pointer}
17
17
  .tempest_marker_5td7B[role=button]:hover{stroke:var(--tempest-primary-active)}
18
- .tempest_marker_5td7B[role=button]:focus-visible{stroke:var(--tempest-primary);stroke-width:3px;outline:none}
18
+ .tempest_marker_5td7B[role=button]:focus-visible{stroke:var(--tempest-focus-ring-color);stroke-width:3px;outline:none}
19
19
  .tempest_zoomReset_IXmak{top:var(--tempest-space-2);right:var(--tempest-space-2);padding:var(--tempest-space-1) var(--tempest-space-2);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-xs);color:var(--tempest-text);background:var(--tempest-surface);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-sm);cursor:pointer;position:absolute}
20
20
  .tempest_zoomReset_IXmak:hover{background:var(--tempest-surface-2)}
@@ -39,6 +39,6 @@ a.tempest_button_2ZuB7:is(:link,:visited,:hover,:active,:focus,:not([href])){col
39
39
  .tempest_pill_lx8lt{border-radius:var(--tempest-radius-full)}
40
40
  .tempest_fullWidth_36oJT{width:100%}
41
41
  .tempest_content_EKXmF{justify-content:center;align-items:center;gap:var(--tempest-control-gap,var(--tempest-space-2));min-width:0;display:inline-flex}
42
- .tempest_loading_EQAt2 .tempest_hiddenText_hIiJ2{visibility:hidden}
42
+ .tempest_loading_EQAt2 .tempest_hiddenText_hIiJ2{opacity:0;pointer-events:none}
43
43
  .tempest_spinner_ZExvW{animation:.8s linear infinite tempest_tempest-spin_UOSVC;position:absolute}
44
44
  @keyframes tempest_tempest-spin_UOSVC{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
@@ -1,17 +1,17 @@
1
1
  /* Generated by scripts/split-css.mjs — do not edit. */
2
2
  .tempest_root_-w3-j{width:100%;font-family:var(--tempest-font-sans);position:relative}
3
- .tempest_root_-w3-j:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
3
+ .tempest_root_-w3-j:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
4
4
  .tempest_viewport_n0hzM{border-radius:var(--tempest-radius-lg);overflow:hidden}
5
5
  .tempest_track_5PA8h{transition:transform var(--tempest-duration-base) var(--tempest-ease-out);display:flex}
6
6
  .tempest_slide_fhfjg{flex:0 0 100%;min-width:0}
7
7
  .tempest_arrow_S92Lt{background-color:var(--tempest-bg);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-full);width:2rem;height:2rem;box-shadow:var(--tempest-shadow-md);color:var(--tempest-text);font-size:var(--tempest-text-xl);cursor:pointer;transition:var(--tempest-transition-color);justify-content:center;align-items:center;line-height:1;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}
8
8
  @media (hover:hover) and (pointer:fine){.tempest_arrow_S92Lt:hover:not(:disabled){background-color:var(--tempest-surface)}}
9
- .tempest_arrow_S92Lt:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
9
+ .tempest_arrow_S92Lt:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
10
10
  .tempest_arrow_S92Lt:disabled{opacity:.4;cursor:not-allowed}
11
11
  .tempest_prev_X8whU{left:var(--tempest-space-2)}
12
12
  .tempest_next_jBRSz{right:var(--tempest-space-2)}
13
13
  .tempest_dots_fL3Hr{justify-content:center;align-items:center;gap:var(--tempest-space-2);margin-top:var(--tempest-space-3);display:flex}
14
14
  .tempest_dot_vEB56{background-color:var(--tempest-border);border-radius:var(--tempest-radius-full);cursor:pointer;width:.5rem;height:.5rem;transition:var(--tempest-transition-color);border:none;padding:0}
15
15
  .tempest_dotActive_OSSUg{background-color:var(--tempest-primary)}
16
- .tempest_dot_vEB56:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
16
+ .tempest_dot_vEB56:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
17
17
  @media (prefers-reduced-motion:reduce){.tempest_track_5PA8h{transition:none}}
@@ -2,7 +2,7 @@
2
2
  .tempest_panel_xUVw0{min-width:0;min-height:0;height:var(--tempest-chat-height,100%);background-color:var(--tempest-bg);color:var(--tempest-text);font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
3
3
  .tempest_header_muoPu{padding:var(--tempest-space-3) var(--tempest-space-4);border-bottom:1px solid var(--tempest-border);flex:none}
4
4
  .tempest_thread_-j8yS{gap:var(--tempest-space-3);min-height:0;padding:var(--tempest-space-4);overscroll-behavior:contain;flex-direction:column;flex:auto;display:flex;overflow-y:auto}
5
- .tempest_thread_-j8yS:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-2px}
5
+ .tempest_thread_-j8yS:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
6
6
  .tempest_day_uLsWA{align-items:center;gap:var(--tempest-space-3);display:flex}
7
7
  .tempest_day_uLsWA:before,.tempest_day_uLsWA:after{background-color:var(--tempest-border);content:"";flex:auto;height:1px}
8
8
  .tempest_dayLabel_m8rDy{color:var(--tempest-text-subtle);font-size:var(--tempest-text-xs);text-transform:capitalize}
@@ -55,7 +55,7 @@
55
55
  .tempest_typing_zdp3O{padding:0 var(--tempest-space-4) var(--tempest-space-2);color:var(--tempest-text-subtle);font-size:var(--tempest-text-xs);flex:none;margin:0}
56
56
  .tempest_composer_krOGl{align-items:flex-end;gap:var(--tempest-space-2);padding:var(--tempest-space-3) var(--tempest-space-4);border-top:1px solid var(--tempest-border);flex:none;display:flex}
57
57
  .tempest_field_fBY-q{min-width:0;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-bg);color:inherit;font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:none;flex:auto}
58
- .tempest_field_fBY-q:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-1px}
58
+ .tempest_field_fBY-q:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
59
59
  .tempest_field_fBY-q:disabled{background-color:var(--tempest-surface-2);color:var(--tempest-text-subtle);cursor:not-allowed}
60
60
  .tempest_composerActions_MYwQx{align-items:center;gap:var(--tempest-space-2);display:flex}
61
61
  .tempest_send_NwcaR{padding:var(--tempest-space-2) var(--tempest-space-4);border-radius:var(--tempest-radius-md);background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;border:none}
@@ -1,6 +1,7 @@
1
1
  /* Generated by scripts/split-css.mjs — do not edit. */
2
2
  .tempest_zone_u04pu{text-align:center;min-height:120px;padding:var(--tempest-space-6,24px);border:2px dashed var(--tempest-border);border-radius:var(--tempest-radius-lg,12px);background:var(--tempest-surface);color:var(--tempest-text-muted);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-sm);cursor:pointer;transition:border-color var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out), background var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out);justify-content:center;align-items:center;display:flex}
3
- .tempest_zone_u04pu:hover,.tempest_zone_u04pu:focus-visible{border-color:var(--tempest-primary);color:var(--tempest-text);outline:none}
3
+ .tempest_zone_u04pu:hover,.tempest_zone_u04pu:focus-visible{border-color:var(--tempest-primary);color:var(--tempest-text)}
4
+ .tempest_zone_u04pu:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
4
5
  .tempest_dragging_uGtl4{border-color:var(--tempest-primary);background:var(--tempest-primary-soft);color:var(--tempest-text)}
5
6
  .tempest_disabled_GTKfV{opacity:.5;cursor:not-allowed}
6
7
  .tempest_input_qhJ1u{display:none}
@@ -8,7 +8,7 @@
8
8
  .tempest_editor_th4Sm{align-items:center;gap:var(--tempest-space-2);padding:var(--tempest-space-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-surface);flex-wrap:wrap;display:flex}
9
9
  .tempest_control_y8jH6{min-width:0;display:inline-flex}
10
10
  .tempest_select_yn-Um,.tempest_input_lLEzH{min-width:7rem;max-width:14rem;padding:var(--tempest-space-1) var(--tempest-space-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-sm);background-color:var(--tempest-bg);color:inherit;font:inherit}
11
- .tempest_select_yn-Um:focus-visible,.tempest_input_lLEzH:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-1px}
11
+ .tempest_select_yn-Um:focus-visible,.tempest_input_lLEzH:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
12
12
  .tempest_actions_s-nBo{align-items:center;gap:var(--tempest-space-2);flex-wrap:wrap;display:flex}
13
13
  .tempest_primary_zW1qN,.tempest_secondary_2wMQS,.tempest_ghost_tDjte{padding:var(--tempest-space-1) var(--tempest-space-3);border-radius:var(--tempest-radius-md);font:inherit;cursor:pointer}
14
14
  .tempest_primary_zW1qN{background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);border:none}
@@ -16,4 +16,4 @@
16
16
  .tempest_secondary_2wMQS{border:1px dashed var(--tempest-border-strong);color:var(--tempest-text);background-color:#0000}
17
17
  .tempest_secondary_2wMQS:disabled{color:var(--tempest-text-subtle);cursor:not-allowed}
18
18
  .tempest_ghost_tDjte{color:var(--tempest-text-muted);background:0 0;border:none;text-decoration:underline}
19
- .tempest_primary_zW1qN:focus-visible,.tempest_secondary_2wMQS:focus-visible,.tempest_ghost_tDjte:focus-visible,.tempest_remove_FmPaZ:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:1px}
19
+ .tempest_primary_zW1qN:focus-visible,.tempest_secondary_2wMQS:focus-visible,.tempest_ghost_tDjte:focus-visible,.tempest_remove_FmPaZ:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:1px}
@@ -1,7 +1,7 @@
1
1
  /* Generated by scripts/split-css.mjs — do not edit. */
2
2
  .tempest_fab_U3NIL{justify-content:center;align-items:center;gap:var(--tempest-space-2);cursor:pointer;font-family:var(--tempest-font-sans);font-weight:var(--tempest-weight-semibold);box-shadow:var(--tempest-shadow-lg);transition:background var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out), box-shadow var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out), transform var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out);border:0;display:inline-flex}
3
3
  .tempest_fab_U3NIL:active{transform:scale(.96)}
4
- .tempest_fab_U3NIL:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,var(--tempest-primary));outline-offset:var(--tempest-focus-ring-offset,2px)}
4
+ .tempest_fab_U3NIL:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,currentColor);outline-offset:var(--tempest-focus-ring-offset,2px)}
5
5
  .tempest_fab_U3NIL:disabled{opacity:.5;cursor:not-allowed;box-shadow:var(--tempest-shadow-sm)}
6
6
  .tempest_primary_8lnHI{background:var(--tempest-primary);color:var(--tempest-primary-foreground)}
7
7
  .tempest_primary_8lnHI:hover:not(:disabled){background:var(--tempest-primary-active,var(--tempest-primary))}
@@ -2,5 +2,5 @@
2
2
  .tempest_picker_TP94V{align-items:center;gap:var(--tempest-space-2);font-family:var(--tempest-font-sans);display:inline-flex}
3
3
  .tempest_preview_lo-Gg{border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background:var(--tempest-surface);width:34px;height:34px;color:var(--tempest-text);flex:none;justify-content:center;align-items:center;display:inline-flex}
4
4
  .tempest_input_5dPK-{min-width:0;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background:var(--tempest-bg);color:var(--tempest-text);font-family:inherit;font-size:var(--tempest-text-sm);flex:auto;min-height:34px}
5
- .tempest_input_5dPK-:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:1px}
5
+ .tempest_input_5dPK-:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:1px}
6
6
  .tempest_input_5dPK-[aria-invalid=true]{border-color:var(--tempest-danger)}
@@ -2,7 +2,7 @@
2
2
  .tempest_wrapper_l83On{gap:var(--tempest-space-3);max-width:100%;font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
3
3
  .tempest_frame_AFLKa{border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-surface);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;width:100%;position:relative;overflow:hidden}
4
4
  .tempest_frame_AFLKa:active{cursor:grabbing}
5
- .tempest_frame_AFLKa:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
5
+ .tempest_frame_AFLKa:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
6
6
  .tempest_circle_qI5b8{border-radius:var(--tempest-radius-full)}
7
7
  .tempest_image_8RAkb{pointer-events:none;max-width:none;max-height:none;position:absolute;top:50%;left:50%;translate:-50% -50%}
8
8
  .tempest_controls_Tbg70{align-items:center;gap:var(--tempest-space-3);flex-wrap:wrap;display:flex}
@@ -10,7 +10,7 @@
10
10
  .tempest_zoom_hMOSD:disabled{opacity:.5}
11
11
  .tempest_reset_TK3vP{padding:var(--tempest-space-1) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-bg);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);cursor:pointer}
12
12
  @media (hover:hover) and (pointer:fine){.tempest_reset_TK3vP:hover:not(:disabled){background-color:var(--tempest-surface)}}
13
- .tempest_reset_TK3vP:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
13
+ .tempest_reset_TK3vP:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
14
14
  .tempest_reset_TK3vP:disabled{opacity:.5;cursor:default}
15
15
  .tempest_hint_rIrZ8{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);margin:0}
16
16
  .tempest_hint_rIrZ8 kbd{padding:0 var(--tempest-space-1);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-sm);background-color:var(--tempest-surface);font-family:var(--tempest-font-mono,monospace);font-size:inherit}
@@ -2,7 +2,7 @@
2
2
  .tempest_tile_ZpED6{align-items:center;gap:var(--tempest-space-3);width:100%;padding:var(--tempest-space-3) var(--tempest-space-4);background:var(--tempest-surface);color:var(--tempest-text);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-sm);text-align:left;border-radius:var(--tempest-radius-md);border:0;display:flex}
3
3
  .tempest_interactive_3ICXQ{cursor:pointer;transition:background var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out)}
4
4
  .tempest_interactive_3ICXQ:hover{background:var(--tempest-surface-2)}
5
- .tempest_interactive_3ICXQ:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,var(--tempest-primary));outline-offset:var(--tempest-focus-ring-offset,2px)}
5
+ .tempest_interactive_3ICXQ:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,currentColor);outline-offset:var(--tempest-focus-ring-offset,2px)}
6
6
  .tempest_selected_dMY11{background:var(--tempest-primary-soft);color:var(--tempest-primary-on-soft)}
7
7
  .tempest_interactive_3ICXQ.tempest_selected_dMY11:hover{background:var(--tempest-primary-soft-hover,var(--tempest-primary-soft))}
8
8
  .tempest_disabled_HnXxf{opacity:.4;cursor:not-allowed;pointer-events:none}
@@ -18,7 +18,7 @@
18
18
  .tempest_link_prTnN{color:var(--tempest-primary);text-underline-offset:2px;text-decoration:underline}
19
19
  .tempest_image_HjzdE{border-radius:var(--tempest-radius-md);max-width:100%;height:auto}
20
20
  .tempest_tableScroll_2u5gY{overflow-x:auto}
21
- .tempest_tableScroll_2u5gY:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
21
+ .tempest_tableScroll_2u5gY:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
22
22
  .tempest_table_-CmP5{border-collapse:collapse;width:100%;font-size:var(--tempest-text-sm)}
23
23
  .tempest_table_-CmP5 th,.tempest_table_-CmP5 td{padding:var(--tempest-space-2) var(--tempest-space-3);border-bottom:1px solid var(--tempest-border);text-align:left}
24
24
  .tempest_table_-CmP5 th{color:var(--tempest-text-muted);font-weight:var(--tempest-weight-semibold)}
@@ -3,7 +3,7 @@
3
3
  .tempest_menu_hEVLT{position:relative}
4
4
  .tempest_trigger_ZlZBx{padding:var(--tempest-space-1) var(--tempest-space-3);border-radius:var(--tempest-radius-sm);color:var(--tempest-text);font-family:inherit;font-size:inherit;line-height:var(--tempest-leading-snug);cursor:pointer;transition:var(--tempest-transition-color);background:0 0;border:none;align-items:center;display:inline-flex}
5
5
  @media (hover:hover) and (pointer:fine){.tempest_trigger_ZlZBx:hover{background-color:var(--tempest-surface)}}
6
- .tempest_trigger_ZlZBx:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
6
+ .tempest_trigger_ZlZBx:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
7
7
  .tempest_triggerOpen_Hpfbu{background-color:var(--tempest-surface)}
8
8
  .tempest_panel_6ta6u{z-index:var(--tempest-z-dropdown);background-color:var(--tempest-bg);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);min-width:200px;max-width:360px;box-shadow:var(--tempest-shadow-lg);padding:var(--tempest-space-1);animation:tempest_tempest-menubar-in_gOQQD var(--tempest-duration-fast) var(--tempest-ease-out);margin:0;list-style:none;position:absolute;top:calc(100% + 4px);left:0}
9
9
  .tempest_item_wM-61{justify-content:space-between;align-items:center;gap:var(--tempest-space-4);width:100%;padding:var(--tempest-space-2) var(--tempest-space-3);border-radius:var(--tempest-radius-sm);color:var(--tempest-text);font-family:inherit;font-size:var(--tempest-text-base);line-height:var(--tempest-leading-snug);text-align:left;cursor:pointer;transition:var(--tempest-transition-color);background:0 0;border:none;display:flex}
@@ -2,5 +2,5 @@
2
2
  .tempest_search_iYSqC{font-family:var(--tempest-font-sans);position:relative}
3
3
  .tempest_results_-a0Jg{z-index:10;margin:var(--tempest-space-1) 0 0;padding:var(--tempest-space-1);background:var(--tempest-surface);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);max-height:260px;box-shadow:var(--tempest-shadow-md,0 4px 12px #0000001f);list-style:none;position:absolute;top:100%;left:0;right:0;overflow-y:auto}
4
4
  .tempest_result_D5-no{justify-content:space-between;align-items:center;gap:var(--tempest-space-2);width:100%;padding:var(--tempest-space-2) var(--tempest-space-3);border-radius:var(--tempest-radius-sm);font-size:var(--tempest-text-sm);color:var(--tempest-text);text-align:left;cursor:pointer;background:0 0;border:none;display:flex}
5
- .tempest_result_D5-no:hover,.tempest_result_D5-no:focus-visible{background:var(--tempest-primary-soft);outline:none}
5
+ .tempest_result_D5-no:hover,.tempest_result_D5-no.tempest_active_qX2ct{background:var(--tempest-primary-soft)}
6
6
  .tempest_uf_Rj15X{font-size:var(--tempest-text-xs);color:var(--tempest-text-muted);font-weight:var(--tempest-weight-medium)}
@@ -2,6 +2,7 @@
2
2
  .tempest_navbar_Ey25T{align-items:center;gap:var(--tempest-space-4);padding:var(--tempest-space-3) var(--tempest-space-4);width:100%;min-height:56px;font-family:var(--tempest-font-sans);padding-top:max(var(--tempest-space-3), env(safe-area-inset-top,0));display:flex}
3
3
  .tempest_navbar_Ey25T.tempest_surface_xyKhM{background:var(--tempest-surface);color:var(--tempest-text)}
4
4
  .tempest_navbar_Ey25T.tempest_primary_w3ft-{background:var(--tempest-primary);color:var(--tempest-primary-foreground)}
5
+ .tempest_navbar_Ey25T.tempest_inverse_f26-i{background:var(--tempest-bg);color:var(--tempest-text)}
5
6
  .tempest_navbar_Ey25T.tempest_transparent_N1vMR{color:inherit;background:0 0}
6
7
  .tempest_navbar_Ey25T.tempest_bordered_HD49R{border-bottom:1px solid var(--tempest-border)}
7
8
  .tempest_navbar_Ey25T.tempest_sticky_0XsOs{z-index:30;-webkit-backdrop-filter:saturate(180%)blur(8px);backdrop-filter:saturate(180%)blur(8px);position:sticky;top:0}
@@ -4,7 +4,7 @@
4
4
  .tempest_item_9RzZ7{position:relative}
5
5
  .tempest_link_67ULr,.tempest_trigger_2gBDu{align-items:center;gap:var(--tempest-space-1);padding:var(--tempest-space-2) var(--tempest-space-3);border-radius:var(--tempest-radius-sm);color:var(--tempest-text);font-family:inherit;font-size:inherit;line-height:var(--tempest-leading-snug);text-align:left;cursor:pointer;transition:var(--tempest-transition-color);background:0 0;border:none;text-decoration:none;display:inline-flex}
6
6
  @media (hover:hover) and (pointer:fine){.tempest_link_67ULr:hover,.tempest_trigger_2gBDu:hover{background-color:var(--tempest-surface)}}
7
- .tempest_link_67ULr:focus-visible,.tempest_trigger_2gBDu:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
7
+ .tempest_link_67ULr:focus-visible,.tempest_trigger_2gBDu:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
8
8
  .tempest_panel_N2ujp{z-index:var(--tempest-z-dropdown);background-color:var(--tempest-bg);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);min-width:180px;max-width:320px;box-shadow:var(--tempest-shadow-lg);padding:var(--tempest-space-1);animation:tempest_tempest-nav-menu-in_8tNCR var(--tempest-duration-fast) var(--tempest-ease-out);margin:0;list-style:none;position:absolute;top:calc(100% + 4px);left:0}
9
9
  .tempest_subItem_LjtO7{display:block}
10
10
  .tempest_subItem_LjtO7 .tempest_link_67ULr{width:100%}
@@ -5,7 +5,7 @@
5
5
  .tempest_footer_ojpGC{width:100%;padding-top:var(--tempest-space-2);justify-content:center;align-items:center;margin-top:auto;display:flex}
6
6
  .tempest_item_XEXI9{width:100%;padding:var(--tempest-space-2) var(--tempest-space-1);border-radius:var(--tempest-radius-md);cursor:pointer;color:var(--tempest-text-muted);font-size:var(--tempest-text-2xs);transition:color var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out), background var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out);background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:4px;display:flex}
7
7
  .tempest_item_XEXI9:hover{color:var(--tempest-text);background:var(--tempest-surface-2)}
8
- .tempest_item_XEXI9:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,var(--tempest-primary));outline-offset:var(--tempest-focus-ring-offset,2px)}
8
+ .tempest_item_XEXI9:focus-visible{outline:var(--tempest-focus-ring-width,2px) solid var(--tempest-focus-ring-color,currentColor);outline-offset:var(--tempest-focus-ring-offset,2px)}
9
9
  .tempest_item_XEXI9.tempest_active_U3hSU{color:var(--tempest-primary-on-soft);background:var(--tempest-primary-soft)}
10
10
  .tempest_item_XEXI9:disabled{opacity:.4;cursor:not-allowed}
11
11
  .tempest_iconWrap_iVwlb{display:inline-flex;position:relative}
@@ -4,7 +4,7 @@
4
4
  .tempest_title_UJyzl{align-items:center;gap:var(--tempest-space-2);font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-semibold);margin:0;display:flex}
5
5
  .tempest_headerAction_A0T8e{color:var(--tempest-primary);font:inherit;font-size:var(--tempest-text-xs);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0}
6
6
  .tempest_headerAction_A0T8e:hover{text-decoration:underline}
7
- .tempest_headerAction_A0T8e:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px;border-radius:var(--tempest-radius-sm)}
7
+ .tempest_headerAction_A0T8e:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset);border-radius:var(--tempest-radius-sm)}
8
8
  .tempest_list_Q23Lz{flex-direction:column;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}
9
9
  .tempest_item_e-qev{align-items:flex-start;gap:var(--tempest-space-3);padding:var(--tempest-space-3) var(--tempest-space-4);border-bottom:1px solid var(--tempest-border);display:flex}
10
10
  .tempest_item_e-qev:last-child{border-bottom:none}
@@ -12,10 +12,10 @@
12
12
  .tempest_icon_W0eML{border-radius:var(--tempest-radius-full);background-color:var(--tempest-surface-2,var(--tempest-surface));width:2rem;height:2rem;color:var(--tempest-text-muted);flex-shrink:0;justify-content:center;align-items:center;display:flex}
13
13
  .tempest_body_m3hfl{gap:var(--tempest-space-1);flex-direction:column;flex:1;min-width:0;display:flex}
14
14
  .tempest_trigger_y7SuR{gap:var(--tempest-space-1);color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;padding:0;display:flex}
15
- .tempest_trigger_y7SuR:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px;border-radius:var(--tempest-radius-sm)}
15
+ .tempest_trigger_y7SuR:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset);border-radius:var(--tempest-radius-sm)}
16
16
  .tempest_itemTitle_o7OXC{font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);line-height:var(--tempest-leading-snug)}
17
17
  .tempest_itemBody_KL7uZ{color:var(--tempest-text-muted);font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal)}
18
18
  .tempest_time_NLUQU{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs)}
19
19
  .tempest_dismiss_74KRm{border-radius:var(--tempest-radius-full);width:1.5rem;height:1.5rem;color:var(--tempest-text-muted);font-size:var(--tempest-text-base);cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0;line-height:1}
20
20
  @media (hover:hover) and (pointer:fine){.tempest_dismiss_74KRm:hover{background-color:var(--tempest-surface);color:var(--tempest-text)}}
21
- .tempest_dismiss_74KRm:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
21
+ .tempest_dismiss_74KRm:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
@@ -2,7 +2,7 @@
2
2
  .tempest_wrapper_zEU-L{gap:var(--tempest-space-1);font-family:var(--tempest-font-sans);flex-direction:column;width:100%;display:flex}
3
3
  .tempest_label_ps3gD{font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);color:var(--tempest-text)}
4
4
  .tempest_field_7taZG{border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background:var(--tempest-surface);transition:border-color var(--tempest-duration-fast,.12s);align-items:center;display:flex;position:relative}
5
- .tempest_field_7taZG:focus-within{border-color:var(--tempest-primary);box-shadow:0 0 0 var(--tempest-focus-ring-width,2px) var(--tempest-focus-ring-color,var(--tempest-primary))}
5
+ .tempest_field_7taZG:focus-within{border-color:var(--tempest-primary);box-shadow:0 0 0 var(--tempest-focus-ring-width,2px) var(--tempest-focus-ring-color,currentColor)}
6
6
  .tempest_input_FWEvb{color:var(--tempest-text);font:inherit;font-family:var(--tempest-font-sans);background:0 0;border:0;outline:0;flex:auto}
7
7
  .tempest_sm_3-CZz .tempest_input_FWEvb{font-size:var(--tempest-text-sm);padding:6px 8px}
8
8
  .tempest_md_ReV0O .tempest_input_FWEvb{font-size:var(--tempest-text-md);padding:8px 12px}
@@ -6,7 +6,7 @@
6
6
  .tempest_cells_URO3v.tempest_sm_SQM-s .tempest_cell_fxLzs{width:32px;height:36px;font-size:var(--tempest-text-md)}
7
7
  .tempest_cells_URO3v.tempest_md_aHCGl .tempest_cell_fxLzs{width:44px;height:52px;font-size:var(--tempest-text-lg)}
8
8
  .tempest_cells_URO3v.tempest_lg_JpI4A .tempest_cell_fxLzs{width:56px;height:64px;font-size:var(--tempest-text-xl)}
9
- .tempest_cell_fxLzs:focus{border-color:var(--tempest-primary);box-shadow:0 0 0 var(--tempest-focus-ring-width,2px) var(--tempest-focus-ring-color,var(--tempest-primary));outline:none}
9
+ .tempest_cell_fxLzs:focus{border-color:var(--tempest-primary);box-shadow:0 0 0 var(--tempest-focus-ring-width,2px) var(--tempest-focus-ring-color,currentColor);outline:none}
10
10
  .tempest_cell_fxLzs:disabled{opacity:.4;cursor:not-allowed}
11
11
  .tempest_error_Kou0o .tempest_cell_fxLzs{border-color:var(--tempest-danger-border,var(--tempest-danger))}
12
12
  .tempest_helper_W04iL{font-size:var(--tempest-text-xs);color:var(--tempest-text-muted)}
@@ -3,7 +3,7 @@
3
3
  .tempest_backdrop_TVqRI{background-color:var(--tempest-tour-backdrop,#0000008c);pointer-events:auto;position:fixed}
4
4
  .tempest_spotlight_0N62-{border-radius:var(--tempest-radius-md);box-shadow:0 0 0 2px var(--tempest-primary);pointer-events:none;position:fixed}
5
5
  .tempest_card_eurpw{gap:var(--tempest-space-2);width:min(22rem,100vw - 2rem);padding:var(--tempest-space-4);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-bg);box-shadow:var(--tempest-shadow-lg);color:var(--tempest-text);pointer-events:auto;flex-direction:column;display:flex;position:fixed}
6
- .tempest_card_eurpw:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
6
+ .tempest_card_eurpw:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
7
7
  .tempest_header_PTKGS{justify-content:space-between;align-items:center;gap:var(--tempest-space-2);display:flex}
8
8
  .tempest_progress_WzQ2f{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);font-variant-numeric:tabular-nums}
9
9
  .tempest_close_z43ed{border-radius:var(--tempest-radius-sm);width:1.75rem;height:1.75rem;color:var(--tempest-text-muted);font-size:var(--tempest-text-lg);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:flex}
@@ -16,5 +16,5 @@
16
16
  .tempest_primary_ICXJm,.tempest_secondary_kde2L{padding:var(--tempest-space-2) var(--tempest-space-4);border-radius:var(--tempest-radius-md);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer}
17
17
  .tempest_primary_ICXJm{background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);border:none}
18
18
  .tempest_secondary_kde2L{border:1px solid var(--tempest-border);background-color:var(--tempest-bg);color:var(--tempest-text)}
19
- .tempest_primary_ICXJm:focus-visible,.tempest_secondary_kde2L:focus-visible,.tempest_skip_IdWQY:focus-visible,.tempest_close_z43ed:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px}
19
+ .tempest_primary_ICXJm:focus-visible,.tempest_secondary_kde2L:focus-visible,.tempest_skip_IdWQY:focus-visible,.tempest_close_z43ed:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
20
20
  @media (prefers-reduced-motion:no-preference){.tempest_spotlight_0N62-{transition:top var(--tempest-duration-base) var(--tempest-ease-out), left var(--tempest-duration-base) var(--tempest-ease-out), width var(--tempest-duration-base) var(--tempest-ease-out), height var(--tempest-duration-base) var(--tempest-ease-out)}.tempest_card_eurpw{transition:top var(--tempest-duration-base) var(--tempest-ease-out), left var(--tempest-duration-base) var(--tempest-ease-out)}}
@@ -11,6 +11,6 @@
11
11
  @keyframes tempest_tempest-geo-pulse_9O0Rj{0%{opacity:.35;transform:scale(.6)}to{opacity:0;transform:scale(1.6)}}
12
12
  .tempest_marker_HB3Rb{fill:var(--tempest-primary);stroke:var(--tempest-surface);stroke-width:2px}
13
13
  .tempest_marker_HB3Rb[role=button]{cursor:pointer}
14
- .tempest_marker_HB3Rb[role=button]:focus-visible{stroke:var(--tempest-primary-active);stroke-width:3px;outline:none}
14
+ .tempest_marker_HB3Rb[role=button]:focus-visible{stroke:var(--tempest-focus-ring-color);stroke-width:3px;outline:none}
15
15
  .tempest_scale_YuwqB line{stroke:var(--tempest-text);stroke-width:2px}
16
16
  .tempest_scale_YuwqB text{fill:var(--tempest-text);font-size:var(--tempest-text-xs);font-family:var(--tempest-font-sans)}
@@ -9,13 +9,13 @@
9
9
  .tempest_title_IhvAM{color:var(--tempest-text);font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-semibold);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}
10
10
  .tempest_count_2NX52{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);font-variant-numeric:tabular-nums;white-space:nowrap}
11
11
  .tempest_search_OPJ2A{width:100%;min-width:0;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-bg);color:inherit;font:inherit;font-size:var(--tempest-text-sm)}
12
- .tempest_search_OPJ2A:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-1px}
12
+ .tempest_search_OPJ2A:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
13
13
  .tempest_list_LrZlc{gap:var(--tempest-space-1);overscroll-behavior:contain;flex-direction:column;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}
14
14
  .tempest_row_uZH5v{padding:var(--tempest-space-1) var(--tempest-space-2);border-radius:var(--tempest-radius-sm);font-size:var(--tempest-text-sm)}
15
15
  .tempest_row_uZH5v:hover{background-color:var(--tempest-surface)}
16
16
  .tempest_empty_sM4jo{padding:var(--tempest-space-4) var(--tempest-space-2);color:var(--tempest-text-muted);font-size:var(--tempest-text-sm);text-align:center}
17
17
  .tempest_control_-y936{width:var(--tempest-control-height-sm);height:var(--tempest-control-height-sm);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-bg);color:var(--tempest-text);font-size:var(--tempest-text-base);cursor:pointer;justify-content:center;align-items:center;line-height:1;display:flex}
18
18
  .tempest_control_-y936:hover:not(:disabled){border-color:var(--tempest-primary);color:var(--tempest-primary)}
19
- .tempest_control_-y936:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:1px}
19
+ .tempest_control_-y936:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:1px}
20
20
  .tempest_control_-y936:disabled{color:var(--tempest-text-subtle);cursor:not-allowed}
21
21
  @media (width<=640px){.tempest_wrapper_v0MUQ{grid-template-columns:minmax(0,1fr)}.tempest_controls_Khwwy{flex-direction:row;justify-content:center}}
@@ -8,10 +8,10 @@
8
8
  .tempest_alignRight_uxhpx{text-align:right}
9
9
  .tempest_alignCenter_9B3Sb{text-align:center}
10
10
  .tempest_sortButton_4h-vK{align-items:center;gap:var(--tempest-space-1);color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;background:0 0;border:none;padding:0;display:inline-flex}
11
- .tempest_sortButton_4h-vK:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:2px;border-radius:var(--tempest-radius-sm)}
11
+ .tempest_sortButton_4h-vK:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset);border-radius:var(--tempest-radius-sm)}
12
12
  .tempest_sortIndicator_-WpMp{font-size:var(--tempest-text-xs);opacity:.55}
13
13
  .tempest_tr_EI3uW.tempest_clickable_4AfSX{cursor:pointer;transition:background-color var(--tempest-duration-fast) var(--tempest-ease-out)}
14
14
  @media (hover:hover) and (pointer:fine){.tempest_tr_EI3uW.tempest_clickable_4AfSX:hover{background-color:var(--tempest-surface)}}
15
- .tempest_tr_EI3uW.tempest_clickable_4AfSX:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-2px}
15
+ .tempest_tr_EI3uW.tempest_clickable_4AfSX:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:calc(var(--tempest-focus-ring-width) * -1)}
16
16
  .tempest_emptyRow_4kIiT{padding:var(--tempest-space-8) var(--tempest-space-4);text-align:center;color:var(--tempest-text-muted)}
17
17
  @media (prefers-reduced-motion:reduce){.tempest_tr_EI3uW.tempest_clickable_4AfSX{transition:none}}