Repository: microsoft/qsharp
Pull request #1798 (2024-07-26 19:08:54)

Support themes in kata previews
Cleaned up the kata svg images and content to reduce css duplication, updated the katas preview page to support themes (based on OS preference - same as QCOM), and explicitly set the playground to light theme so images render correctly.

Example of theme switch when changing OS preference below.


https://github.com/user-attachments/assets/cc1df760-3959-4a33-b409-f3b3e3a21edc



DmitryVasilevsky: Is it normal that my preview looks like this:
![image](https://github.com/user-attachments/assets/f56eec5f-1f55-4bd3-8471-d6e43287a9ef)

github-actions[bot]: ## Benchmark for 96c394f
  <details>
    <summary>Click to view benchmark</summary>

| Test | Base         | PR               | % |
|------|--------------|------------------|---|
| Array append evaluation | 339.9±6.35µs | 337.0±3.01µs | -0.85% |
| Array literal evaluation | 196.9±3.59µs | **189.5±1.45µs** | **-3.76%** |
| Array update evaluation | 419.1±3.23µs | **414.9±3.15µs** | **-1.00%** |
| Core + Standard library compilation | 23.2±0.53ms | **21.6±0.55ms** | **-6.90%** |
| Deutsch-Jozsa evaluation | 5.0±0.21ms | **4.9±0.05ms** | **-2.00%** |
| Large file parity evaluation | 34.1±0.40ms | 34.1±0.67ms | 0.00% |
| Large input file compilation | 14.5±0.46ms | **13.1±0.36ms** | **-9.66%** |
| Large input file compilation (interpreter) | 55.2±2.37ms | 53.2±2.39ms | -3.62% |
| Large nested iteration | 32.5±0.16ms | 32.6±0.69ms | +0.31% |
| Perform Runtime Capabilities Analysis (RCA) on Deutsch-Jozsa sample | 1634.8±176.60µs | **1565.8±35.24µs** | **-4.22%** |
| Perform Runtime Capabilities Analysis (RCA) on large file sample | 8.2±0.23ms | **7.7±0.10ms** | **-6.10%** |
| Perform Runtime Capabilities Analysis (RCA) on teleport sample | 1485.9±177.67µs | 1461.4±121.02µs | -1.65% |
| Perform Runtime Capabilities Analysis (RCA) on the core and std libraries | 28.7±0.26ms | **27.6±0.30ms** | **-3.83%** |
| Teleport evaluation | 91.2±3.61µs | 90.9±3.08µs | -0.33% |

  </details>
  
billti: Yes, as the standalone image doesn't have any CSS. The other option is to copy all the CSS into every image, which means to remember to update every image to match if the styles change and also increases file sizes a bit.

Patch:
diff --git a/build.py b/build.py
index e8f1ee25..ae188c9c 100755
--- a/build.py
+++ b/build.py
@@ -515,3 +515,17 @@ if build_pip and build_widgets and args.integration_tests:
             raise Exception(f"Error running {notebook}")
 
     step_end()
+
+    step_start("Running qsharp testing samples")
+    project_directories = [
+        dir for dir in os.walk(samples_src) if "qsharp.json" in dir[2]
+    ]
+
+    test_projects_directories = [ dir
+        for dir, _, _ in project_directories
+        if dir.find("testing") != -1
+    ]
+
+    for test_project_dir in test_projects_directories:
+        run_python_tests(test_project_dir, python_bin)
+    step_end()
diff --git a/compiler/qsc/src/interpret.rs b/compiler/qsc/src/interpret.rs
index f6e72383..ba81890e 100644
--- a/compiler/qsc/src/interpret.rs
+++ b/compiler/qsc/src/interpret.rs
@@ -11,8 +11,6 @@ mod package_tests;
 #[cfg(test)]
 mod tests;
 
-use std::rc::Rc;
-
 pub use qsc_eval::{
     debug::Frame,
     output::{self, GenericReceiver},
@@ -52,7 +50,7 @@ use qsc_eval::{
     output::Receiver,
     val, Env, State, VariableInfo,
 };
-use qsc_fir::fir::{self, ExecGraphNode, Global, PackageStoreLookup};
+use qsc_fir::fir::{self, ExecGraph, Global, PackageStoreLookup};
 use qsc_fir::{
     fir::{Block, BlockId, Expr, ExprId, Package, PackageId, Pat, PatId, Stmt, StmtId},
     visit::{self, Visitor},
@@ -119,6 +117,8 @@ pub struct Interpreter {
     fir_store: fir::PackageStore,
     /// FIR lowerer
     lowerer: qsc_lowerer::Lowerer,
+    /// The execution graph for the last expression evaluated.
+    expr_graph: Option<ExecGraph>,
     /// The ID of the current package.
     /// This ID is valid both for the FIR store and the `PackageStore`.
     package: PackageId,
@@ -241,6 +241,7 @@ impl Interpreter {
             capabilities,
             fir_store,
             lowerer: qsc_lowerer::Lowerer::new().with_debug(dbg),
+            expr_graph: None,
             env: Env::default(),
             sim: sim_circuit_backend(),
             quantum_seed: None,
@@ -275,6 +276,7 @@ impl Interpreter {
             capabilities,
             fir_store,
             lowerer: qsc_lowerer::Lowerer::new(),
+            expr_graph: None,
             env: Env::default(),
             sim: sim_circuit_backend(),
             quantum_seed: None,
@@ -300,6 +302,7 @@ impl Interpreter {
         receiver: &mut impl Receiver,
     ) -> std::result::Result<Value, Vec<Error>> {
         let graph = self.get_entry_exec_graph()?;
+        self.expr_graph = Some(graph.clone());
         eval(
             self.source_package,
             self.classical_seed,
@@ -320,6 +323,7 @@ impl Interpreter {
         receiver: &mut impl Receiver,
     ) -> std::result::Result<Value, Vec<Error>> {
         let graph = self.get_entry_exec_graph()?;
+        self.expr_graph = Some(graph.clone());
         if self.quantum_seed.is_some() {
             sim.set_seed(self.quantum_seed);
         }
@@ -335,7 +339,7 @@ impl Interpreter {
         )
     }
 
-    fn get_entry_exec_graph(&self) -> std::result::Result<Rc<[ExecGraphNode]>, Vec<Error>> {
+    fn get_entry_exec_graph(&self) -> std::result::Result<ExecGraph, Vec<Error>> {
         let unit = self.fir_store.get(self.source_package);
         if unit.entry.is_some() {
             return Ok(unit.entry_exec_graph.clone());
@@ -393,6 +397,7 @@ impl Interpreter {
         increment: Increment,
     ) -> InterpretResult {
         let (graph, _) = self.lower(&increment)?;
+        self.expr_graph = Some(graph.clone());
 
         // Updating the compiler state with the new AST/HIR nodes
         // is not necessary for the interpreter to function, as all
@@ -405,7 +410,7 @@ impl Interpreter {
         eval(
             self.package,
             self.classical_seed,
-            graph.into(),
+            graph,
             self.compiler.package_store(),
             &self.fir_store,
             &mut self.env,
@@ -419,7 +424,7 @@ impl Interpreter {
     pub fn run(
         &mut self,
         receiver: &mut impl Receiver,
-        expr: &str,
+        expr: Option<&str>,
     ) -> std::result::Result<InterpretResult, Vec<Error>> {
         self.run_with_sim(&mut SparseSim::new(), receiver, expr)
     }
@@ -452,7 +457,7 @@ impl Interpreter {
         };
         let package = self.fir_store.get(self.package);
         let entry = ProgramEntry {
-            exec_graph: graph.into(),
+            exec_graph: graph,
             expr: (
                 self.package,
                 package
@@ -538,9 +543,15 @@ impl Interpreter {
         &mut self,
         sim: &mut impl Backend<ResultType = impl Into<val::Result>>,
         receiver: &mut impl Receiver,
-        expr: &str,
+        expr: Option<&str>,
     ) -> std::result::Result<InterpretResult, Vec<Error>> {
-        let (graph, _) = self.compile_entry_expr(expr)?;
+        let graph = if let Some(expr) = expr {
+            let (graph, _) = self.compile_entry_expr(expr)?;
+            self.expr_graph = Some(graph.clone());
+            graph
+        } else {
+            self.expr_graph.clone().ok_or(vec![Error::NoEntryPoint])?
+        };
 
         if self.quantum_seed.is_some() {
             sim.set_seed(self.quantum_seed);
@@ -549,7 +560,7 @@ impl Interpreter {
         Ok(eval(
             self.package,
             self.classical_seed,
-            graph.into(),
+            graph,
             self.compiler.package_store(),
             &self.fir_store,
             &mut Env::default(),
@@ -568,11 +579,12 @@ impl Interpreter {
 
         let (package_id, graph) = if let Some(entry_expr) = entry_expr {
             // entry expression is provided
-            (self.package, self.compile_entry_expr(&entry_expr)?.0.into())
+            (self.package, self.compile_entry_expr(&entry_expr)?.0)
         } else {
             // no entry expression, use the entrypoint in the package
             (self.source_package, self.get_entry_exec_graph()?)
         };
+        self.expr_graph = Some(graph.clone());
 
         if self.quantum_seed.is_some() {
             sim.set_seed(self.quantum_seed);
@@ -593,8 +605,7 @@ impl Interpreter {
     fn compile_entry_expr(
         &mut self,
         expr: &str,
-    ) -> std::result::Result<(Vec<ExecGraphNode>, Option<PackageStoreComputeProperties>), Vec<Error>>
-    {
+    ) -> std::result::Result<(ExecGraph, Option<PackageStoreComputeProperties>), Vec<Error>> {
         let increment = self
             .compiler
             .compile_entry_expr(expr)
@@ -624,14 +635,13 @@ impl Interpreter {
     fn lower(
         &mut self,
         unit_addition: &qsc_frontend::incremental::Increment,
-    ) -> core::result::Result<(Vec<ExecGraphNode>, Option<PackageStoreComputeProperties>), Vec<Error>>
-    {
+    ) -> core::result::Result<(ExecGraph, Option<PackageStoreComputeProperties>), Vec<Error>> {
         if self.capabilities != TargetCapabilityFlags::all() {
             return self.run_fir_passes(unit_addition);
         }
 
         self.lower_and_update_package(unit_addition);
-        Ok((self.lowerer.take_exec_graph(), None))
+        Ok((self.lowerer.take_exec_graph().into(), None))
     }
 
     fn lower_and_update_package(&mut self, unit: &qsc_frontend::incremental::Increment) {
@@ -647,8 +657,7 @@ impl Interpreter {
     fn run_fir_passes(
         &mut self,
         unit: &qsc_frontend::incremental::Increment,
-    ) -> std::result::Result<(Vec<ExecGraphNode>, Option<PackageStoreComputeProperties>), Vec<Error>>
-    {
+    ) -> std::result::Result<(ExecGraph, Option<PackageStoreComputeProperties>), Vec<Error>> {
         self.lower_and_update_package(unit);
 
         let cap_results =
@@ -673,7 +682,7 @@ impl Interpreter {
         })?;
 
         let graph = self.lowerer.take_exec_graph();
-        Ok((graph, Some(compute_properties)))
+        Ok((graph.into(), Some(compute_properties)))
     }
 
     fn next_line_label(&mut self) -> String {
@@ -897,7 +906,7 @@ impl Debugger {
 fn eval(
     package: PackageId,
     classical_seed: Option<u64>,
-    exec_graph: Rc<[ExecGraphNode]>,
+    exec_graph: ExecGraph,
     package_store: &PackageStore,
     fir_store: &fir::PackageStore,
     env: &mut Env,
diff --git a/compiler/qsc_eval/src/lib.rs b/compiler/qsc_eval/src/lib.rs
index 79aa2e19..1ddedd90 100644
--- a/compiler/qsc_eval/src/lib.rs
+++ b/compiler/qsc_eval/src/lib.rs
@@ -36,9 +36,9 @@ use num_bigint::BigInt;
 use output::Receiver;
 use qsc_data_structures::{functors::FunctorApp, index_map::IndexMap, span::Span};
 use qsc_fir::fir::{
-    self, BinOp, CallableImpl, ExecGraphNode, Expr, ExprId, ExprKind, Field, FieldAssign, Global,
-    Lit, LocalItemId, LocalVarId, PackageId, PackageStoreLookup, PatId, PatKind, PrimField, Res,
-    StmtId, StoreItemId, StringComponent, UnOp,
+    self, BinOp, CallableImpl, ExecGraph, ExecGraphNode, Expr, ExprId, ExprKind, Field,
+    FieldAssign, Global, Lit, LocalItemId, LocalVarId, PackageId, PackageStoreLookup, PatId,
+    PatKind, PrimField, Res, StmtId, StoreItemId, StringComponent, UnOp,
 };
 use qsc_fir::ty::Ty;
 use qsc_lowerer::map_fir_package_to_hir;
@@ -199,10 +199,7 @@ impl Display for Spec {
 /// Utility function to identify a subset of a control flow graph corresponding to a given
 /// range.
 #[must_use]
-pub fn exec_graph_section(
-    graph: &Rc<[ExecGraphNode]>,
-    range: ops::Range<usize>,
-) -> Rc<[ExecGraphNode]> {
+pub fn exec_graph_section(graph: &ExecGraph, range: ops::Range<usize>) -> ExecGraph {
     let start: u32 = range
         .start
         .try_into()
@@ -227,7 +224,7 @@ pub fn exec_graph_section(
 pub fn eval(
     package: PackageId,
     seed: Option<u64>,
-    exec_graph: Rc<[ExecGraphNode]>,
+    exec_graph: ExecGraph,
     globals: &impl PackageStoreLookup,
     env: &mut Env,
     sim: &mut impl Backend<ResultType = impl Into<val::Result>>,
@@ -439,7 +436,7 @@ struct Scope {
 }
 
 pub struct State {
-    exec_graph_stack: Vec<Rc<[ExecGraphNode]>>,
+    exec_graph_stack: Vec<ExecGraph>,
     idx: u32,
     idx_stack: Vec<u32>,
     val_register: Option<Value>,
@@ -453,11 +450,7 @@ pub struct State {
 
 impl State {
     #[must_use]
-    pub fn new(
-        package: PackageId,
-        exec_graph: Rc<[ExecGraphNode]>,
-        classical_seed: Option<u64>,
-    ) -> Self {
+    pub fn new(package: PackageId, exec_graph: ExecGraph, classical_seed: Option<u64>) -> Self {
         let rng = match classical_seed {
             Some(seed) => RefCell::new(StdRng::seed_from_u64(seed)),
             None => RefCell::new(StdRng::from_entropy()),
@@ -476,12 +469,7 @@ impl State {
         }
     }
 
-    fn push_frame(
-        &mut self,
-        exec_graph: Rc<[ExecGraphNode]>,
-        id: StoreItemId,
-        functor: FunctorApp,
-    ) {
+    fn push_frame(&mut self, exec_graph: ExecGraph, id: StoreItemId, functor: FunctorApp) {
         self.call_stack.push_frame(Frame {
             span: self.current_span,
             id,
diff --git a/compiler/qsc_fir/src/fir.rs b/compiler/qsc_fir/src/fir.rs
index 39c4b8ea..d07e327f 100644
--- a/compiler/qsc_fir/src/fir.rs
+++ b/compiler/qsc_fir/src/fir.rs
@@ -562,7 +562,7 @@ pub struct Package {
     /// The entry expression for an executable package.
     pub entry: Option<ExprId>,
     /// The control flow graph for the entry expression in the package.
-    pub entry_exec_graph: Rc<[ExecGraphNode]>,
+    pub entry_exec_graph: ExecGraph,
     /// The blocks in the package.
     pub blocks: IndexMap<BlockId, Block>,
     /// The expressions in the package.
@@ -881,7 +881,7 @@ pub struct SpecDecl {
     /// The input of the specialization.
     pub input: Option<PatId>,
     /// The flattened control flow graph for the execution of the specialization.
-    pub exec_graph: Rc<[ExecGraphNode]>,
+    pub exec_graph: ExecGraph,
 }
 
 impl Display for SpecDecl {
@@ -894,6 +894,9 @@ impl Display for SpecDecl {
     }
 }
 
+/// An execution graph represented by a reference counted vector of nodes.
+pub type ExecGraph = Rc<[ExecGraphNode]>;
+
 #[derive(Copy, Clone, Debug, PartialEq)]
 /// A node within the control flow graph.
 pub enum ExecGraphNode {
diff --git a/compiler/qsc_partial_eval/src/lib.rs b/compiler/qsc_partial_eval/src/lib.rs
index c0981367..ee8f2349 100644
--- a/compiler/qsc_partial_eval/src/lib.rs
+++ b/compiler/qsc_partial_eval/src/lib.rs
@@ -30,10 +30,10 @@ use qsc_eval::{
 };
 use qsc_fir::{
     fir::{
-        self, BinOp, Block, BlockId, CallableDecl, CallableImpl, ExecGraphNode, Expr, ExprId,
-        ExprKind, Global, Ident, LocalVarId, Mutability, PackageId, PackageStore,
-        PackageStoreLookup, Pat, PatId, PatKind, Res, SpecDecl, SpecImpl, Stmt, StmtId, StmtKind,
-        StoreBlockId, StoreExprId, StoreItemId, StorePatId, StoreStmtId, UnOp,
+        self, BinOp, Block, BlockId, CallableDecl, CallableImpl, ExecGraph, Expr, ExprId, ExprKind,
+        Global, Ident, LocalVarId, Mutability, PackageId, PackageStore, PackageStoreLookup, Pat,
+        PatId, PatKind, Res, SpecDecl, SpecImpl, Stmt, StmtId, StmtKind, StoreBlockId, StoreExprId,
+        StoreItemId, StorePatId, StoreStmtId, UnOp,
     },
     ty::{Prim, Ty},
 };
@@ -127,7 +127,7 @@ impl Error {
 /// An entry to the program to be partially evaluated.
 pub struct ProgramEntry {
     /// The execution graph that corresponds to the entry expression.
-    pub exec_graph: Rc<[ExecGraphNode]>,
+    pub exec_graph: ExecGraph,
     /// The entry expression unique identifier within a package store.
     pub expr: fir::StoreExprId,
 }
@@ -2088,7 +2088,7 @@ impl<'a> PartialEvaluator<'a> {
         self.get_program_block_mut(self.eval_context.get_current_block_id())
     }
 
-    fn get_current_scope_exec_graph(&self) -> &Rc<[ExecGraphNode]> {
+    fn get_current_scope_exec_graph(&self) -> &ExecGraph {
         if let Some(spec_decl) = self.get_current_scope_spec_decl() {
             &spec_decl.exec_graph
         } else {
diff --git a/compiler/qsc_project/src/lib.rs b/compiler/qsc_project/src/lib.rs
index 29d25aa4..2d9ad135 100644
--- a/compiler/qsc_project/src/lib.rs
+++ b/compiler/qsc_project/src/lib.rs
@@ -23,5 +23,5 @@ pub use manifest::{Manifest, ManifestDescriptor, PackageRef, PackageType, MANIFE
 pub use project::FileSystemAsync;
 pub use project::{
     key_for_package_ref, package_ref_from_key, DependencyCycle, DirEntry, EntryType, Error,
-    FileSystem, PackageCache, PackageGraphSources, PackageInfo, Project,
+    FileSystem, PackageCache, PackageGraphSources, PackageInfo, Project, GITHUB_SCHEME,
 };
diff --git a/compiler/qsc_project/src/project.rs b/compiler/qsc_project/src/project.rs
index d3383c79..10d516ae 100644
--- a/compiler/qsc_project/src/project.rs
+++ b/compiler/qsc_project/src/project.rs
@@ -18,6 +18,8 @@ use std::{
 };
 use thiserror::Error;
 
+pub const GITHUB_SCHEME: &str = "qsharp-github-source";
+
 /// Describes a Q# project with all its sources and dependencies resolved.
 #[derive(Debug, Clone)]
 pub struct Project {
@@ -414,7 +416,7 @@ pub trait FileSystemAsync {
         let manifest = serde_json::from_str::<Manifest>(&manifest_content).map_err(|e| {
             Error::GitHubManifestParse {
                 path: format!(
-                    "qsharp-github-source:{}/{}/{}{}/qsharp.json",
+                    "{GITHUB_SCHEME}:{}/{}/{}{}/qsharp.json",
                     dep.owner,
                     dep.repo,
                     dep.r#ref,
@@ -448,7 +450,7 @@ pub trait FileSystemAsync {
             // and open them using cached contents.
             sources.push((
                 format!(
-                    "qsharp-github-source:{}/{}/{}{path}",
+                    "{GITHUB_SCHEME}:{}/{}/{}{path}",
                     dep.owner, dep.repo, dep.r#ref
                 )
                 .into(),
diff --git a/katas/README.md b/katas/README.md
index d31505ad..95d6c0bc 100644
--- a/katas/README.md
+++ b/katas/README.md
@@ -27,25 +27,103 @@ Katas are composed through an index.md markdown file that uses macros to indicat
 Macros are meant to insert interactive elements into the content defined through markdown. A macro starts with the `@` character followed by a word inside square brackets where the word represents the name of the macro (e.g. `@[example]`). This is followed by a JSON string enclosed within parenthesis `({...})` where the JSON string represents the properties of the macro that determine the interactive content. The macro is terminated by a line break `\r?\n`.
 
 The following macros are available for katas composition:
+
 - @[exercise]: Used to create Q# code exercises that we can be automatically verified.
-    - id: Unique identifier for the exercise.
-    - title: Title that will be displayed for the exercise.
-    - path: Path to a folder that contains the description of the exercise. This folder should contain the following files:
-        - `index.md`: the Markdown description of the exercise.
-        - `Placeholder.qs`: the Q# code that is given to the learner to start with.
-        - `Verification.qs`: the Q# code that checks whether the learner's solution is correct.
-        - `solution.md`: the Markdown description of the solution(s) to the exercise.
-        - `Solution.qs`: the Q# code that contains a "reference solution" described in `solution.md`.
+  - id: Unique identifier for the exercise.
+  - title: Title that will be displayed for the exercise.
+  - path: Path to a folder that contains the description of the exercise. This folder should contain the following files:
+    - `index.md`: the Markdown description of the exercise.
+    - `Placeholder.qs`: the Q# code that is given to the learner to start with.
+    - `Verification.qs`: the Q# code that checks whether the learner's solution is correct.
+    - `solution.md`: the Markdown description of the solution(s) to the exercise.
+    - `Solution.qs`: the Q# code that contains a "reference solution" described in `solution.md`.
     The @EntryPoint operation is called to check the solution (eventually, for the convention is to call Kata.Verification.CheckSolution).
 - @[example]: Standalone Q# code snippets that can be referenced from markdown files.
-    - id: Unique identifier for the example.
-    - codePath: Path to a Q# file that contains the example code.
+  - id: Unique identifier for the example.
+  - codePath: Path to a Q# file that contains the example code.
 - @[solution]: represents a solution to a Q# code exercise. It is meant to be compiled as if it was the user authored code that solves a Q# code exercise. It can only be used in solution markdown files.
-    - id: Unique identifier for the solution.
-    - codePath: Path to a Q# file that contains the solution code.
+  - id: Unique identifier for the solution.
+  - codePath: Path to a Q# file that contains the solution code.
 - @[section]: A kata is broken into multiple sections. This starts a new section. Exercises are their own sections.
-    - id: Unique identifier for the section.
-    - title: Title of the section.
+  - id: Unique identifier for the section.
+  - title: Title of the section.
+
+### Images
+
+Constructing SVG images correctly for the katas is a little involved due to the need to support dark
+and light themes on QCOM. Currently this follows the OS preference, but it is also common to allow the
+theme to be set via a `data-theme` attribute on a parent element, (e.g., the playground does this to force
+light mode, as it doesn't support other themes currently).
+
+To support this, CSS needs to be used. However if the CSS is not contained within the image itself, then
+editing or previewing the SVG file becomes very awkward. Therefore the approach taken is that the CSS
+be included directly in each image. The below CSS should be pasted directly into each `.svg` file used
+in the katas, directly after the opening `<svg>` element.
+
+IMPORTANT: As the SVG file becomes inline HTML in Markdown, it is important that there are no blank lines
+within the .svg files anywhere (including the CSS block), due to the way Markdown parsers determine
+a block of HTML has terminated. The kata generation script checks for this and will fail if any exist.
+
+```html
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
+```
+
+For previewing how each SVG image will look, and for making manual tweaks to the SVG markup (which is
+similar to HTML), I recommend the VS Code extension at <https://marketplace.visualstudio.com/items?itemName=jock.svg>.
+With this installed in VS Code, you can right-click on an SVG file and select 'Preview SVG'. The CSS takes
+effect, so changing the OS theme will change how the preview appears. (Note: You can choose a different background
+color from the swatch at the top of the preview. I recommend the first swatch option of "Use editor background", and then enable the VS Code setting `Window: Auto-detect color scheme`. That way as you change OS theme, the VS Code preview will match).
+
+For more involved SVG editing I recommend Inkscape (<https://inkscape.org/>), however it has a bit of
+learning curve, and doesn't handle custom CSS properties very well, so the below CSS may need to be
+modified before working in Inkscape, then replaced again after the image changes have been saved.
+
+If not familiar with the SVG format, the MDN reference at <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial>
+provides a very good overview.
 
 ## Acknowledgements
 
diff --git a/katas/content/deutsch_algo/media/Apply_hadamard.svg b/katas/content/deutsch_algo/media/Apply_hadamard.svg
index 3be7da0b..b9b5c70d 100644
--- a/katas/content/deutsch_algo/media/Apply_hadamard.svg
+++ b/katas/content/deutsch_algo/media/Apply_hadamard.svg
@@ -1,141 +1,147 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<svg width="679" height="365" fill="none" version="1.1" viewBox="0 0 679 365" xmlns="http://www.w3.org/2000/svg">
-   <style>
-        :root {
-            --kata-svg-stroke: #222;
-            --kata-svg-fill: #fff;
-            --kata-svg-path: #777;
-            --kata-svg-accent: #06c;
-        }
-        @media(prefers-color-scheme: dark) {
-        :root {
-            --kata-svg-stroke: #eee;
-            --kata-svg-fill: #111;
-            --kata-svg-path: #bbb;
-            --kata-svg-accent: #08f;
-        }
-        }
-        .kata_svg_path {
-            stroke: var(--kata-svg-path);
-        }
-        .kata_svg_text {
-            fill: var(--kata-svg-stroke);
-        }
-        .kata_svg_point {
-            fill: var(--kata-svg-fill);
-            stroke: var(--kata-svg-stroke);
-        }
-        .kata_svg_fill_accent {
-            fill: var(--kata-svg-accent);
-        }
-        .kata_svg_stroke_accent {
-            stroke: var(--kata-svg-accent);
-        }
-    </style>
-    <g clip-path="url(#clip0_6_812)" clip-rule="evenodd" fill-rule="evenodd">
-        <!-- Large circles -->
-        <g  class="kata_svg_path">
-            <path d="m24.1 163c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z" />
-            <path d="m375 163c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z" />
-        </g>
-        <!-- Target points -->
-        <g class="kata_svg_fill_accent">
-            <path d="m296 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            <path d="m18 163c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z" />
-            <path d="m508 23.7c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z" />
-            <path d="m508 302c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-        </g>
-        <!-- Normal points -->
-        <g class="kata_svg_point">
-            <path d="m157 23.8c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z" />
-            <path d="m157 302c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            <path d="m257 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m57.3 66.6c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9 0 3.26-2.69 5.9-6 5.9-3.31 0-6-2.64-6-5.9z" />
-            <path d="m647 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m369 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            <path d="m608 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z" />
-            <path d="m408 260c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-        </g>
-        <!-- From point -->
-        <g class="kata_svg_point kata_svg_stroke_accent">
-            <path d="m257 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z" />
-            <path d="m57.3 260c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z" />
-            <path d="m608 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m408 66.6c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z" />
-        </g>
-        <!-- Arrows -->
-        <g class="kata_svg_fill_accent" >
-            <path d="m309 162h15.1l-0.688 0.688v-96.5l0.688 0.688h-55.3v-1.38h56v97.9h-15.8v-1.38zm5.06 5.8-6.13-5.11 6.13-5.11c0.292-0.242 0.726-0.202 0.968 0.088 0.244 0.292 0.204 0.726-0.088 0.97l-5.5 4.58v-1.06l5.5 4.58c0.292 0.242 0.332 0.676 0.088 0.968-0.242 0.292-0.676 0.33-0.968 0.088z" />
-            <path d="m17 164h-15.4l0.688-0.688v96.5l-0.688-0.688h55.7v1.38h-56.3v-97.9h16.1v1.38zm-5.06-5.8 6.13 5.11-6.13 5.11c-0.292 0.242-0.725 0.204-0.968-0.088-0.243-0.292-0.204-0.726 0.088-0.968l5.5-4.58v1.06l-5.5-4.58c-0.292-0.242-0.331-0.676-0.088-0.968 0.243-0.292 0.677-0.33 0.968-0.088z" />
-            <path d="m620 259h57.4l-0.688 0.686v-258l0.688 0.687h-163l0.688-0.687v15.4h-1.38v-16.1h165v260h-58.1v-1.37zm-101-247-5.11 6.13-5.11-6.13c-0.242-0.292-0.204-0.725 0.088-0.968 0.292-0.243 0.726-0.204 0.968 0.088l4.58 5.5h-1.06l4.58-5.5c0.242-0.292 0.676-0.331 0.968-0.088 0.292 0.243 0.33 0.677 0.088 0.968z" />
-            <path d="m408 67.4h-51.1l0.686-0.688v258l-0.686-0.688h157l-0.686 0.688v-15.4h1.37v16.1h-158v-259h51.8v1.38zm101 247 5.11-6.13 5.11 6.13c0.244 0.292 0.204 0.726-0.088 0.97-0.292 0.242-0.724 0.202-0.968-0.088l-4.58-5.5h1.06l-4.58 5.5c-0.244 0.29-0.676 0.33-0.968 0.088-0.292-0.244-0.332-0.678-0.088-0.97z" />
-        </g>
-        <g class="kata_svg_text" clip-rule="evenodd" fill-rule="evenodd">
-            <!-- Legend text -->
-            <path d="m135 350c-0.94 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.862-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.7 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.72 0.432 3.59 1.29 0.868 0.857 1.3 1.99 1.3 3.4 0 1.53-0.45 2.73-1.35 3.62-0.893 0.886-2.12 1.33-3.68 1.33zm0.072-7.48c-0.671 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.477 0.856-0.477 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-0.243v-2.3c0.467 0.282 0.931 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.899-0.069 1.19-0.207 0.294-0.137 0.441-0.347 0.441-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.303-0.224-0.512-0.314c-0.204-0.09-0.429-0.171-0.674-0.243-0.246-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.689-0.285-0.97-0.441-0.276-0.161-0.509-0.347-0.701-0.557-0.186-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.332-1.33 0.228-0.372 0.528-0.674 0.899-0.908 0.377-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.407 0 0.821 0.033 1.24 0.099 0.419 0.06 0.832 0.15 1.24 0.27v2.19c-0.36-0.21-0.746-0.365-1.16-0.467-0.408-0.108-0.809-0.162-1.2-0.162-0.186 0-0.363 0.018-0.53 0.054-0.162 0.03-0.306 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.108 0.207-0.108 0.333 0 0.167 0.054 0.311 0.162 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.428 0.135 0.638 0.207 0.377 0.131 0.719 0.275 1.02 0.431 0.306 0.156 0.566 0.338 0.782 0.548 0.222 0.21 0.389 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.36 1.4-0.233 0.384-0.548 0.698-0.943 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.299 0 0.608-0.086 0.925-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.509-0.509-0.763-1.19-0.763-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.923 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.967-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.895 0.188-1.21 0.566-0.317 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.299 0 0.608-0.086 0.925-0.26v2.1z" />
-            <path d="m491 338-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.144 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.616 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.534 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.616 0-1.1 0.228-1.45 0.683-0.347 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.43-1.87 0.299 0 0.533 0.036 0.7 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.486 0 0.878 0.134 1.18 0.404 0.306 0.269 0.459 0.617 0.459 1.04 0 0.431-0.153 0.785-0.459 1.06-0.299 0.276-0.691 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.641 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.779 0.584 1.31 0.584 0.646 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.096 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z" />
-            <!-- Ket text -->
-            <path d="m259 156h1.25v15.1h-1.25v-15.1z" />
-            <path d="m266 157c-0.372 0-0.684 0.11-0.936 0.332s-0.454 0.54-0.608 0.956-0.264 0.924-0.328 1.52c-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.46-1.16s0.474-1.98 0.474-3.6c0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.42-1.32 0.738-1.8c0.316-0.472 0.694-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z" />
-            <path d="m273 156 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m156 45.5h1.25v15.1h-1.25v-15.1z" />
-            <path d="m164 45.9h0.446c-0.032 0.519-0.05 1.24-0.05 2.16v6.92c0 0.313 0.018 0.55 0.054 0.709 0.034 0.159 0.096 0.289 0.186 0.389s0.218 0.178 0.384 0.235c0.168 0.0568 0.38 0.1 0.634 0.13 0.254 0.0298 0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.29-0.109 0.256-0.0458 0.452-0.115 0.586-0.207 0.136-0.0918 0.234-0.222 0.296-0.389 0.062-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.0892-0.738 0.267-0.318 0.178-0.712 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z" />
-            <path d="m170 44.8 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m224 88.4h1.25v15.1h-1.25v-15.1z" />
-            <path d="m233 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m242 87.6 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m224 222h1.25v15.1h-1.25v-15.1z" />
-            <path d="m229 228h9.99v1.08h-9.99v-1.08z" />
-            <path d="m242 221 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m149 265h9.99v1.08h-9.99v-1.08z" />
-            <path d="m162 259h1.25v15.1h-1.25v-15.1z" />
-            <path d="m171 259h0.446c-0.032 0.52-0.05 1.24-0.05 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39s0.218 0.178 0.386 0.234c0.166 0.056 0.378 0.1 0.632 0.13s0.588 0.05 1 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.29-0.108 0.256-0.046 0.452-0.116 0.586-0.208 0.136-0.092 0.234-0.222 0.296-0.388 0.062-0.168 0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.088-0.738 0.266-0.318 0.178-0.712 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z" />
-            <path d="m176 258 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m44.7 163h9.99v1.08h-9.99v-1.08z" />
-            <path d="m57.9 156h1.25v15.1h-1.25v-15.1z" />
-            <path d="m65.7 157c-0.373 0-0.685 0.11-0.936 0.332s-0.454 0.54-0.608 0.956-0.264 0.924-0.328 1.52c-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.824 0.833 1.24 1.52 1.24 0.654 0 1.14-0.386 1.45-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.443-0.228 0.927-0.342 1.45-0.342z" />
-            <path d="m72 156 3.23 7.28v0.598l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z" />
-            <path d="m74.1 228h9.99v1.08h-9.99v-1.08z" />
-            <path d="m87.3 221h1.25v15.1h-1.25v-15.1z" />
-            <path d="m96.2 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m105 220 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m73.4 94.2h9.99v1.08h-9.99v-1.08z" />
-            <path d="m86.6 87.9h1.25v15.1h-1.25v-15.1z" />
-            <path d="m91.1 94.2h9.99v1.08h-9.99v-1.08z" />
-            <path d="m104 87.2 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m608 156h1.25v15.1h-1.25v-15.1z" />
-            <path d="m616 157c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.46-1.16s0.474-1.98 0.474-3.6c0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z" />
-            <path d="m622 156 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m505 45.5h1.25v15.1h-1.25v-15.1z" />
-            <path d="m514 45.9h0.444c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.054 0.709 0.034 0.159 0.096 0.289 0.186 0.389 0.088 0.1 0.216 0.178 0.384 0.235s0.378 0.1 0.632 0.13c0.254 0.0298 0.59 0.05 1.01 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.28-0.109 0.258-0.0458 0.454-0.115 0.588-0.207 0.136-0.0918 0.234-0.222 0.296-0.389 0.062-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.0892-0.738 0.267-0.318 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z" />
-            <path d="m519 44.8 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m574 88.4h1.25v15.1h-1.25v-15.1z" />
-            <path d="m583 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m591 87.6 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m574 222h1.25v15.1h-1.25v-15.1z" />
-            <path d="m578 228h9.99v1.08h-9.99v-1.08z" />
-            <path d="m591 221 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m498 265h9.99v1.08h-9.99v-1.08z" />
-            <path d="m511 259h1.25v15.1h-1.25v-15.1z" />
-            <path d="m520 259h0.446c-0.034 0.52-0.05 1.24-0.05 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39 0.088 0.1 0.216 0.178 0.384 0.234s0.378 0.1 0.632 0.13 0.59 0.05 1.01 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.28-0.108 0.258-0.046 0.454-0.116 0.588-0.208 0.136-0.092 0.234-0.222 0.296-0.388 0.062-0.168 0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.088-0.738 0.266s-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z" />
-            <path d="m525 258 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m394 163h9.99v1.08h-9.99v-1.08z" />
-            <path d="m407 156h1.25v15.1h-1.25v-15.1z" />
-            <path d="m415 157c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.45-1.16 0.318-0.776 0.476-1.98 0.476-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.62 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z" />
-            <path d="m421 156 3.23 7.28v0.598l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m423 228h9.99v1.08h-9.99v-1.08z" />
-            <path d="m436 221h1.25v15.1h-1.25v-15.1z" />
-            <path d="m445 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m454 220 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m423 94.2h9.99v1.08h-9.99v-1.08z" />
-            <path d="m436 87.9h1.25v15.1h-1.25v-15.1z" />
-            <path d="m440 94.2h9.99v1.08h-9.99v-1.08z" />
-            <path d="m453 87.2 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-        </g>
-    </g>
-    <defs>
-        <clipPath id="clip0_6_812">
-            <rect transform="translate(.8 .6)" width="677" height="364"/>
-        </clipPath>
-    </defs>
+<svg width="685" height="380" fill="none" version="1.1" xmlns="http://www.w3.org/2000/svg">
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
+  <!-- Large circles -->
+  <g class="kata_svg_path" >
+    <path d="m24.1 163c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z"/>
+    <path d="m375 163c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z"/>
+  </g>
+  <!-- Target points -->
+  <g class="kata_svg_fill_accent">
+    <path d="m296 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m18 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m508 23.7c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m508 302c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+  </g>
+  <!-- Normal points -->
+  <g class="kata_svg_point">
+    <path d="m157 23.8c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m157 302c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m257 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m57.3 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m647 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m369 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m608 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m408 260c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+  </g>
+  <!-- From point -->
+  <g class="kata_svg_point kata_svg_stroke_accent">
+    <path d="m257 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m57.3 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m608 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m408 66.6c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+  </g>
+  <!-- Arrows -->
+  <g class="kata_svg_path kata_svg_stroke_accent" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
+    <path d="m269.59 66.574h54.658v96.133h-15.241l5.6085-4.3192-5.6085 4.3192 5.6085 4.7704" image-rendering="auto"/>
+    <path d="m407 66.95h-50v257h157v-15.074l-4.3311 4.8322 4.3311-4.7179 4.5323 4.7179" image-rendering="auto"/>
+    <path d="m56.477 259.94h-51.893v-96.99h12.254l-5.544 4.3192 5.544-4.3192-5.544-4.7704" image-rendering="auto"/>
+    <path d="m619.97 259.89h50.641v-254.72h-156.63v11.463l4.3311-4.8322-4.3311 4.7179-4.5323-4.7179" image-rendering="auto"/>
+  </g>
+  <g class="kata_svg_text">
+    <!-- Legend text -->
+    <path d="m135 350c-.94.455-2.17.683-3.68.683-1.98 0-3.53-.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32.159 3.18.476v2.79c-.862-.515-1.84-.773-2.95-.773-1.21 0-2.19.381-2.93 1.14-.743.761-1.11 1.79-1.11 3.09 0 1.25.35 2.24 1.05 2.98.7.737 1.64 1.1 2.83 1.1 1.13 0 2.17-.276 3.11-.827v2.65zm6.35.683c-1.53 0-2.74-.429-3.62-1.28-.875-.863-1.31-2.03-1.31-3.5 0-1.52.455-2.71 1.37-3.57.91-.862 2.14-1.29 3.69-1.29 1.53 0 2.72.432 3.59 1.29.868.857 1.3 1.99 1.3 3.4 0 1.53-.45 2.73-1.35 3.62-.893.886-2.12 1.33-3.68 1.33zm.072-7.48c-.671 0-1.19.23-1.56.691-.371.462-.557 1.11-.557 1.96 0 1.77.713 2.65 2.14 2.65 1.36 0 2.04-.907 2.04-2.72 0-1.72-.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-.509-2.14-1.53-2.14-.492 0-.896.188-1.21.566-.318.377-.477.856-.477 1.44v5.25h-2.84v-9.2h2.84v1.46h.036c.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-.243v-2.3c.467.282.931.492 1.39.629.467.138.907.207 1.32.207.503 0 .899-.069 1.19-.207.294-.137.441-.347.441-.629 0-.179-.066-.329-.198-.449s-.303-.224-.512-.314c-.204-.09-.429-.171-.674-.243-.246-.072-.482-.153-.71-.242-.365-.138-.689-.285-.97-.441-.276-.161-.509-.347-.701-.557-.186-.209-.329-.452-.431-.727-.096-.276-.144-.602-.144-.98 0-.515.111-.958.332-1.33.228-.372.528-.674.899-.908.377-.239.806-.413 1.28-.521.485-.114.988-.171 1.51-.171.407 0 .821.033 1.24.099.419.06.832.15 1.24.27v2.19c-.36-.21-.746-.365-1.16-.467-.408-.108-.809-.162-1.2-.162-.186 0-.363.018-.53.054-.162.03-.306.078-.431.144-.126.06-.225.14-.297.242-.072.096-.108.207-.108.333 0 .167.054.311.162.431s.249.225.422.314c.174.084.366.162.575.234.216.066.428.135.638.207.377.131.719.275 1.02.431.306.156.566.338.782.548.222.21.389.455.503.737.12.281.18.617.18 1.01 0 .545-.12 1.01-.36 1.4-.233.384-.548.698-.943.944-.389.239-.841.413-1.36.521-.509.114-1.04.171-1.59.171-1.01 0-1.95-.156-2.81-.468zm14.3.135c-.419.222-1.05.333-1.9.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-.808v2.79h2.07v2.09h-2.07v3.72c0 .958.38 1.44 1.14 1.44.299 0 .608-.086.925-.26v2.1zm9.26.108h-2.69v-1.32h-.036c-.617 1.03-1.53 1.55-2.74 1.55-.893 0-1.6-.252-2.11-.755-.509-.509-.763-1.19-.763-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.395-.204.934-.383 1.62-.539.689-.156 1.32-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.923.12-1.38.536-1.38 1.25 0 .323.111.59.333.8.227.203.533.305.916.305.533 0 .967-.183 1.3-.548.335-.371.503-.838.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-.509-2.14-1.53-2.14-.491 0-.895.188-1.21.566-.317.377-.476.856-.476 1.44v5.25h-2.84v-9.2h2.84v1.46h.036c.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-.108c-.419.222-1.05.333-1.9.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-.808v2.79h2.07v2.09h-2.07v3.72c0 .958.38 1.44 1.14 1.44.299 0 .608-.086.925-.26v2.1z"/>
+    <path d="m491 338-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c.144.485.23.913.26 1.28h.054c.042-.402.135-.842.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-.036c-.616 1.03-1.53 1.55-2.74 1.55-.892 0-1.6-.252-2.11-.755-.509-.509-.764-1.19-.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.395-.204.934-.383 1.62-.539.689-.156 1.32-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.922.12-1.38.536-1.38 1.25 0 .323.11.59.332.8.228.203.533.305.916.305.534 0 .968-.183 1.3-.548.336-.371.503-.838.503-1.4zm10.9-2.9c-.341-.186-.739-.279-1.2-.279-.616 0-1.1.228-1.45.683-.347.449-.521 1.06-.521 1.84v4.39h-2.84v-9.2h2.84v1.71h.036c.449-1.25 1.26-1.87 2.43-1.87.299 0 .533.036.7.108v2.62zm2.84-4.02c-.479 0-.871-.141-1.18-.423-.305-.287-.458-.638-.458-1.05 0-.425.153-.773.458-1.04.306-.27.698-.404 1.18-.404.486 0 .878.134 1.18.404.306.269.459.617.459 1.04 0 .431-.153.785-.459 1.06-.299.276-.691.414-1.18.414zm1.4 10.7h-2.84v-9.2h2.84zm10 0h-2.69v-1.32h-.036c-.617 1.03-1.53 1.55-2.74 1.55-.892 0-1.6-.252-2.11-.755-.509-.509-.764-1.19-.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.396-.204.935-.383 1.62-.539.688-.156 1.31-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.922.12-1.38.536-1.38 1.25 0 .323.111.59.333.8.227.203.533.305.916.305.533 0 .968-.183 1.3-.548.335-.371.503-.838.503-1.4zm7.79 2.67h-.036v1.07h-2.84v-13.6h2.84v5.8h.036c.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1.408 2.74 1.22.641.815.961 1.93.961 3.34 0 1.53-.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-.432-2.57-1.29zm-.081-3.88v.943c0 .593.17 1.08.512 1.47.341.39.779.584 1.31.584.646 0 1.15-.248 1.5-.745.359-.503.539-1.21.539-2.13 0-.76-.165-1.35-.494-1.78-.324-.431-.788-.646-1.39-.646-.569 0-1.04.212-1.42.638-.372.425-.557.979-.557 1.66zm11.5 4.95h-2.84v-13.6h2.84zm10.7-3.79h-6c.096 1.34.937 2 2.52 2 1.01 0 1.9-.239 2.67-.719v2.05c-.851.455-1.96.683-3.32.683-1.48 0-2.64-.411-3.46-1.23-.82-.827-1.23-1.98-1.23-3.45 0-1.53.443-2.74 1.33-3.63.887-.892 1.98-1.34 3.27-1.34 1.34 0 2.38.399 3.11 1.2.737.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-.533-1.98-1.6-1.98-.456 0-.851.189-1.19.566-.33.377-.53.848-.602 1.41h3.39z"/>
+    <!-- Ket text -->
+    <path d="m259 156h1.25v15.1h-1.25z"/>
+    <path d="m266 157c-.372 0-.684.11-.936.332s-.454.54-.608.956-.264.924-.328 1.52c-.064.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.46-1.16s.474-1.98.474-3.6c0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.866 2.29.866 4.14 0 1.91-.308 3.36-.928 4.34-.618.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.856-2.31-.856-4.18c0-.994.088-1.85.264-2.58s.42-1.32.738-1.8c.316-.472.694-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m273 156 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m156 45.5h1.25v15.1h-1.25z"/>
+    <path d="m164 45.9h.446c-.032.519-.05 1.24-.05 2.16v6.92c0 .313.018.55.054.709.034.159.096.289.186.389s.218.178.384.235c.168.0568.38.1.634.13.254.0298.588.05 1 .0608v.592h-5.99v-.592c.6-.027 1.03-.0634 1.29-.109.256-.0458.452-.115.586-.207.136-.0918.234-.222.296-.389.062-.168.094-.44.094-.819v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.172 0-.418.0892-.738.267-.318.178-.712.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m170 44.8 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m224 88.4h1.25v15.1h-1.25z"/>
+    <path d="m233 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m242 87.6 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m224 222h1.25v15.1h-1.25z"/>
+    <path d="m229 228h9.99v1.08h-9.99z"/>
+    <path d="m242 221 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m149 265h9.99v1.08h-9.99z"/>
+    <path d="m162 259h1.25v15.1h-1.25z"/>
+    <path d="m171 259h.446c-.032.52-.05 1.24-.05 2.16v6.92c0 .314.018.55.054.71.034.16.096.29.186.39s.218.178.386.234c.166.056.378.1.632.13s.588.05 1 .06v.592h-5.99v-.592c.6-.026 1.03-.062 1.29-.108.256-.046.452-.116.586-.208.136-.092.234-.222.296-.388.062-.168.094-.44.094-.82v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.172 0-.418.088-.738.266-.318.178-.712.424-1.18.738l-.358-.624 3.79-2.26z"/>
+    <path d="m176 258 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m44.7 163h9.99v1.08h-9.99z"/>
+    <path d="m57.9 156h1.25v15.1h-1.25z"/>
+    <path d="m65.7 157c-.373 0-.685.11-.936.332s-.454.54-.608.956-.264.924-.328 1.52c-.0648.598-.0972 1.27-.0972 2.02 0 1.76.163 3.05.49 3.88.327.824.833 1.24 1.52 1.24.654 0 1.14-.386 1.45-1.16.316-.776.474-1.98.474-3.6 0-1.24-.081-2.25-.243-3.02s-.388-1.32-.677-1.66c-.289-.334-.639-.502-1.05-.502zm.0406-.69c1.18 0 2.06.458 2.64 1.37.578.914.867 2.29.867 4.14 0 1.91-.309 3.36-.928 4.34-.619.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38-.57-.918-.855-2.31-.855-4.18 0-.994.0878-1.85.263-2.58s.422-1.32.738-1.8c.316-.472.696-.822 1.14-1.05.443-.228.927-.342 1.45-.342z"/>
+    <path d="m72 156 3.23 7.28v.598l-3.23 7.29-.867-.308 2.6-7.28-2.6-7.29.867-.292z"/>
+    <path d="m74.1 228h9.99v1.08h-9.99z"/>
+    <path d="m87.3 221h1.25v15.1h-1.25z"/>
+    <path d="m96.2 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m105 220 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m73.4 94.2h9.99v1.08h-9.99z"/>
+    <path d="m86.6 87.9h1.25v15.1h-1.25z"/>
+    <path d="m91.1 94.2h9.99v1.08h-9.99z"/>
+    <path d="m104 87.2 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m608 156h1.25v15.1h-1.25z"/>
+    <path d="m616 157c-.374 0-.686.11-.936.332-.252.222-.454.54-.608.956s-.264.924-.328 1.52c-.066.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.46-1.16s.474-1.98.474-3.6c0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.868 2.29.868 4.14 0 1.91-.31 3.36-.928 4.34-.618.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.854-2.31-.854-4.18c0-.994.088-1.85.262-2.58.176-.724.422-1.32.738-1.8.316-.472.696-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m622 156 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m505 45.5h1.25v15.1h-1.25z"/>
+    <path d="m514 45.9h.444c-.032.519-.048 1.24-.048 2.16v6.92c0 .313.018.55.054.709.034.159.096.289.186.389.088.1.216.178.384.235s.378.1.632.13c.254.0298.59.05 1.01.0608v.592h-5.99v-.592c.6-.027 1.03-.0634 1.28-.109.258-.0458.454-.115.588-.207.136-.0918.234-.222.296-.389.062-.168.094-.44.094-.819v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.174 0-.42.0892-.738.267-.318.178-.714.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m519 44.8 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m574 88.4h1.25v15.1h-1.25z"/>
+    <path d="m583 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m591 87.6 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m574 222h1.25v15.1h-1.25z"/>
+    <path d="m578 228h9.99v1.08h-9.99z"/>
+    <path d="m591 221 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m498 265h9.99v1.08h-9.99z"/>
+    <path d="m511 259h1.25v15.1h-1.25z"/>
+    <path d="m520 259h.446c-.034.52-.05 1.24-.05 2.16v6.92c0 .314.018.55.054.71.034.16.096.29.186.39.088.1.216.178.384.234s.378.1.632.13.59.05 1.01.06v.592h-5.99v-.592c.6-.026 1.03-.062 1.28-.108.258-.046.454-.116.588-.208.136-.092.234-.222.296-.388.062-.168.094-.44.094-.82v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.174 0-.42.088-.738.266s-.714.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m525 258 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m394 163h9.99v1.08h-9.99z"/>
+    <path d="m407 156h1.25v15.1h-1.25z"/>
+    <path d="m415 157c-.374 0-.686.11-.936.332-.252.222-.454.54-.608.956s-.264.924-.328 1.52c-.066.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.45-1.16.318-.776.476-1.98.476-3.6 0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.868 2.29.868 4.14 0 1.91-.31 3.36-.928 4.34-.62.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.854-2.31-.854-4.18c0-.994.088-1.85.262-2.58.176-.724.422-1.32.738-1.8.316-.472.696-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m421 156 3.23 7.28v.598l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29.866-.292z"/>
+    <path d="m423 228h9.99v1.08h-9.99z"/>
+    <path d="m436 221h1.25v15.1h-1.25z"/>
+    <path d="m445 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m454 220 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m423 94.2h9.99v1.08h-9.99z"/>
+    <path d="m436 87.9h1.25v15.1h-1.25z"/>
+    <path d="m440 94.2h9.99v1.08h-9.99z"/>
+    <path d="m453 87.2 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+  </g>
 </svg>
diff --git a/katas/content/deutsch_algo/media/Apply_oracle.svg b/katas/content/deutsch_algo/media/Apply_oracle.svg
index 73dc6af4..0fca5353 100644
--- a/katas/content/deutsch_algo/media/Apply_oracle.svg
+++ b/katas/content/deutsch_algo/media/Apply_oracle.svg
@@ -1,164 +1,171 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<svg width="738" height="374" fill="none" version="1.1" viewBox="0 0 738 374" xmlns="http://www.w3.org/2000/svg">
-   <style>
-        :root {
-            --kata-svg-stroke: #222;
-            --kata-svg-fill: #fff;
-            --kata-svg-path: #777;
-            --kata-svg-accent: #06c;
-        }
-        @media(prefers-color-scheme: dark) {
-        :root {
-            --kata-svg-stroke: #eee;
-            --kata-svg-fill: #111;
-            --kata-svg-path: #bbb;
-            --kata-svg-accent: #08f;
-        }
-        }
-        .kata_svg_path {
-            stroke: var(--kata-svg-path);
-        }
-        .kata_svg_text {
-            fill: var(--kata-svg-stroke);
-        }
-        .kata_svg_point {
-            fill: var(--kata-svg-fill);
-            stroke: var(--kata-svg-stroke);
-        }
-        .kata_svg_fill_accent {
-            fill: var(--kata-svg-accent);
-        }
-        .kata_svg_stroke_accent {
-            stroke: var(--kata-svg-accent);
-        }
-    </style>
-    <g clip-path="url(#clip0_5_635)">
-        <!-- Large circles -->
-        <g class="kata_svg_path">
-            <path d="m7.3 189c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z" />
-            <path d="m358 189c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z" />
-        </g>
-        <!-- Normal points -->
-        <g class="kata_svg_point">
-            <path d="m392 285c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            <path d="m630 189c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m491 49.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z" />
-            <path d="m352 189c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            <path d="m491 328c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m240 285c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m40.5 92.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m279 189c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-            <path d="m140 49.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z" />
-            <path d="m1.3 189c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z" />
-            <path d="m140 328c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-        </g>
-        <!-- From points -->
-        <g class="kata_svg_point kata_svg_stroke_accent" >
-            <path d="m591 92.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-        </g>
-        <g class="kata_svg_fill_accent">
-            <path d="m240 92.3c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z" />
-            <path d="m40.4 285c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z" />
-            <path d="m591 285c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            <path d="m391 92.3c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z" />
-        </g>
-        <!-- Arrows -->
-        <g class="kata_svg_fill_accent" >
-            <path d="m247 85.4v-15.1l-0.688 0.688h22.1l-0.687-0.688v22.1l0.687-0.688h-16.2v1.38h16.9v-23.5h-23.5v15.8h1.38zm-5.8-5.06 5.11 6.13 5.11-6.13c0.244-0.292 0.204-0.725-0.088-0.968-0.291-0.243-0.725-0.204-0.968 0.088l-4.58 5.5h1.06l-4.58-5.5c-0.243-0.292-0.677-0.331-0.968-0.088-0.292 0.243-0.332 0.677-0.088 0.968z" />
-            <path d="m199 136-105 102 0.96 0.985 105-102-0.96-0.984zm-104 95.6-0.826 7.94 7.96-0.619c0.378-0.03 0.661-0.361 0.632-0.739-0.03-0.379-0.36-0.662-0.739-0.632l-7.14 0.555 0.737 0.757 0.741-7.12c0.0392-0.378-0.235-0.716-0.613-0.755-0.378-0.04-0.716 0.235-0.755 0.612z" />
-            <path d="m603 91.6h58.4v194h-56.4v-1.37h55.8l-0.688 0.686v-193l0.688 0.688h-57.8v-1.38zm7.05 199-6.13-5.11 6.13-5.11c0.29-0.244 0.724-0.204 0.968 0.088 0.242 0.29 0.204 0.724-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.242 0.33 0.676 0.088 0.968-0.244 0.292-0.678 0.332-0.968 0.088z" />
-            <path d="m397 85.7v-56.4h201v56.6h-1.37v-55.9l0.686 0.688h-200l0.688-0.688v55.7h-1.38zm5.8-5.06-5.11 6.13-5.11-6.13c-0.242-0.292-0.204-0.725 0.088-0.968 0.292-0.243 0.726-0.204 0.968 0.0882l4.58 5.5h-1.06l4.58-5.5c0.242-0.292 0.676-0.331 0.968-0.0882 0.292 0.243 0.33 0.677 0.088 0.968z" />
-        </g>
-        <!-- Equation text -->
-        <g class="kata_svg_fill_accent" clip-rule="evenodd" fill-rule="evenodd">
-            <path d="m231 48.1c0.516 0 0.962 0.0422 1.34 0.126l-0.308 1.34h-0.696c-0.074-0.301-0.17-0.517-0.288-0.649-0.12-0.132-0.294-0.198-0.526-0.198-0.302 0-0.556 0.083-0.764 0.249s-0.386 0.413-0.534 0.74-0.284 0.767-0.412 1.32l-0.196 0.862h2.03l-0.174 0.799h-2.04l-1.47 6.9c-0.242 1.14-0.614 2-1.12 2.56-0.5 0.562-1.13 0.842-1.89 0.842-0.222 0-0.396-0.0132-0.522-0.0396l0.134-0.696c0.054 0.0158 0.178 0.0236 0.372 0.0236 0.238 0 0.44-0.0606 0.61-0.182 0.168-0.121 0.324-0.332 0.47-0.633 0.144-0.3 0.278-0.717 0.4-1.25l1.7-7.52h-1.34l0.118-0.546c0.354-0.0212 0.608-0.0502 0.764-0.087 0.154-0.037 0.276-0.0924 0.364-0.166 0.086-0.0738 0.16-0.17 0.22-0.289 0.062-0.119 0.138-0.336 0.234-0.653 0.28-0.949 0.71-1.66 1.29-2.14 0.582-0.477 1.32-0.716 2.23-0.716z" />
-            <path d="m250 47.3c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.41 3.53-1.23 4.88-0.822 1.34-2.01 2.22-3.55 2.62l-0.19-0.609c1.22-0.406 2.12-1.21 2.72-2.4 0.594-1.2 0.89-2.72 0.89-4.56 0-1.78-0.296-3.26-0.886-4.44s-1.51-1.97-2.74-2.38l0.214-0.609zm-10.1 0 0.214 0.609c-1.23 0.406-2.15 1.2-2.74 2.38-0.592 1.18-0.89 2.66-0.89 4.44 0 1.85 0.298 3.37 0.89 4.56 0.594 1.2 1.5 2 2.72 2.4l-0.19 0.609c-1.55-0.406-2.73-1.28-3.55-2.62-0.822-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88s2.01-2.22 3.55-2.63z" />
-            <path d="m243 51.7c0.162 0 0.306 0.0184 0.43 0.0554 0.124 0.0368 0.234 0.0936 0.328 0.17 0.096 0.0764 0.18 0.175 0.254 0.297s0.144 0.286 0.214 0.494c0.068 0.208 0.132 0.467 0.194 0.775 0.06 0.308 0.114 0.629 0.162 0.961h0.078c0.506-0.712 0.89-1.23 1.15-1.56 0.26-0.33 0.48-0.575 0.66-0.736s0.352-0.274 0.518-0.34c0.166-0.0658 0.386-0.0988 0.66-0.0988 0.248 0 0.452 0.0316 0.61 0.0948l-0.316 1.43h-0.554c-0.032-0.221-0.124-0.332-0.278-0.332-0.046 0-0.098 0.0078-0.15 0.0238-0.052 0.0158-0.118 0.05-0.194 0.103-0.076 0.0526-0.188 0.156-0.336 0.308-0.148 0.153-0.314 0.34-0.498 0.562-0.184 0.222-0.374 0.454-0.57 0.696l-0.538 0.672c0.096 0.506 0.186 0.944 0.27 1.31s0.158 0.676 0.224 0.922 0.124 0.439 0.174 0.581c0.052 0.142 0.106 0.249 0.164 0.32 0.058 0.0712 0.116 0.121 0.178 0.15 0.06 0.029 0.13 0.0434 0.208 0.0434 0.144 0 0.282-0.0552 0.416-0.166s0.328-0.361 0.582-0.751l0.514 0.34c-0.37 0.548-0.704 0.935-1 1.16-0.298 0.224-0.652 0.336-1.06 0.336-0.226 0-0.418-0.0408-0.576-0.123-0.158-0.0816-0.296-0.212-0.412-0.391-0.116-0.179-0.218-0.459-0.308-0.839-0.164-0.675-0.264-1.19-0.3-1.55h-0.08c-0.558 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759-0.348 0.278-0.514 0.344c-0.166 0.066-0.386 0.099-0.66 0.099-0.248 0-0.452-0.0316-0.61-0.095l0.316-1.43h0.554c0.032 0.221 0.124 0.332 0.278 0.332 0.072 0 0.15-0.0198 0.232-0.0594s0.2-0.134 0.352-0.285c0.154-0.15 0.364-0.386 0.634-0.708 0.268-0.322 0.658-0.804 1.17-1.45-0.08-0.417-0.16-0.817-0.246-1.2-0.084-0.385-0.17-0.744-0.26-1.08s-0.164-0.55-0.222-0.653-0.12-0.174-0.186-0.214-0.148-0.0592-0.248-0.0592c-0.112 0-0.212 0.025-0.302 0.075-0.09 0.0502-0.186 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.958-1.12 0.306-0.248 0.666-0.372 1.08-0.372z" />
-            <path d="m262 55.9h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z" />
-            <path d="m281 49.2c-0.364 0-0.668 0.108-0.914 0.324-0.244 0.216-0.442 0.527-0.592 0.933-0.15 0.406-0.258 0.901-0.32 1.48-0.064 0.583-0.096 1.24-0.096 1.97 0 1.72 0.16 2.98 0.478 3.78 0.32 0.804 0.814 1.21 1.48 1.21 0.638 0 1.11-0.378 1.42-1.14s0.462-1.93 0.462-3.52c0-1.21-0.078-2.2-0.236-2.95-0.16-0.751-0.38-1.29-0.662-1.62s-0.622-0.49-1.02-0.49zm0.04-0.672c1.15 0 2.01 0.446 2.58 1.34s0.846 2.24 0.846 4.04c0 1.87-0.3 3.28-0.904 4.24s-1.49 1.44-2.65 1.44c-1.14 0-1.99-0.448-2.54-1.34-0.556-0.897-0.834-2.26-0.834-4.08 0-0.97 0.086-1.81 0.256-2.52 0.172-0.707 0.412-1.29 0.72-1.75 0.31-0.461 0.68-0.803 1.11-1.02s0.904-0.332 1.42-0.332z" />
-            <path d="m94.3 164c0.53 0 0.986 0.043 1.37 0.13l-0.316 1.38h-0.713c-0.0756-0.308-0.174-0.53-0.296-0.665s-0.301-0.203-0.539-0.203c-0.308 0-0.569 0.085-0.782 0.256-0.213 0.17-0.396 0.422-0.547 0.758-0.151 0.334-0.292 0.786-0.422 1.35l-0.203 0.882h2.08l-0.178 0.82h-2.09l-1.51 7.07c-0.249 1.17-0.63 2.05-1.14 2.62-0.513 0.574-1.16 0.862-1.94 0.862-0.227 0-0.405-0.012-0.535-0.04l0.138-0.714c0.054 0.016 0.181 0.026 0.381 0.026 0.243 0 0.451-0.064 0.624-0.188s0.334-0.34 0.482-0.648 0.285-0.734 0.409-1.28l1.74-7.71h-1.37l0.122-0.56c0.362-0.022 0.623-0.052 0.782-0.09s0.284-0.094 0.373-0.17c0.0892-0.076 0.165-0.174 0.227-0.296 0.0622-0.12 0.142-0.344 0.239-0.668 0.286-0.972 0.728-1.7 1.33-2.19 0.597-0.489 1.36-0.734 2.28-0.734z" />
-            <path d="m113 163c1.58 0.416 2.79 1.31 3.64 2.7 0.846 1.38 1.27 3.05 1.27 5 0 1.96-0.422 3.62-1.26 5-0.843 1.37-2.06 2.27-3.64 2.69l-0.195-0.624c1.25-0.416 2.18-1.24 2.78-2.46 0.608-1.23 0.911-2.79 0.911-4.68 0-1.83-0.302-3.34-0.907-4.55-0.606-1.21-1.54-2.02-2.81-2.44l0.219-0.624zm-10.3 0 0.219 0.624c-1.26 0.416-2.2 1.23-2.81 2.44-0.608 1.21-0.912 2.73-0.912 4.55 0 1.89 0.304 3.45 0.912 4.68 0.608 1.23 1.54 2.05 2.78 2.46l-0.194 0.624c-1.58-0.416-2.8-1.31-3.64-2.69-0.843-1.38-1.26-3.04-1.26-5 0-1.95 0.423-3.62 1.27-5 0.846-1.38 2.06-2.28 3.64-2.7z" />
-            <path d="m106 168c0.168 0 0.315 0.02 0.442 0.058s0.239 0.096 0.336 0.174c0.098 0.078 0.184 0.18 0.26 0.304 0.075 0.124 0.148 0.292 0.219 0.506 0.07 0.214 0.136 0.478 0.198 0.794s0.118 0.646 0.166 0.986h0.081c0.519-0.73 0.912-1.26 1.18-1.6 0.267-0.338 0.493-0.588 0.677-0.754 0.183-0.164 0.36-0.28 0.53-0.348 0.171-0.068 0.396-0.1 0.677-0.1 0.254 0 0.462 0.032 0.624 0.096l-0.324 1.47h-0.567c-0.033-0.228-0.127-0.342-0.284-0.342-0.049 0-0.1 0.01-0.154 0.026s-0.12 0.05-0.199 0.104c-0.078 0.054-0.193 0.16-0.344 0.316-0.151 0.158-0.322 0.35-0.511 0.576-0.189 0.228-0.383 0.464-0.583 0.714l-0.551 0.688c0.097 0.52 0.189 0.968 0.275 1.35 0.087 0.378 0.164 0.694 0.231 0.944 0.068 0.252 0.127 0.45 0.178 0.596 0.052 0.146 0.107 0.256 0.167 0.328 0.059 0.074 0.12 0.124 0.182 0.154s0.134 0.044 0.215 0.044c0.146 0 0.288-0.056 0.425-0.17 0.138-0.112 0.337-0.37 0.596-0.77l0.527 0.35c-0.378 0.562-0.72 0.956-1.02 1.19-0.306 0.23-0.669 0.346-1.09 0.346-0.232 0-0.429-0.042-0.591-0.126s-0.303-0.218-0.422-0.402-0.224-0.47-0.316-0.858c-0.167-0.692-0.27-1.22-0.308-1.59h-0.081c-0.573 0.806-0.998 1.38-1.28 1.73-0.278 0.352-0.507 0.612-0.689 0.78-0.181 0.166-0.356 0.284-0.526 0.352-0.171 0.068-0.396 0.102-0.677 0.102-0.254 0-0.462-0.034-0.624-0.098l0.324-1.47h0.567c0.033 0.228 0.127 0.342 0.284 0.342 0.076 0 0.155-0.022 0.239-0.062s0.204-0.138 0.361-0.292 0.373-0.396 0.648-0.724c0.276-0.33 0.676-0.824 1.2-1.48-0.081-0.428-0.165-0.838-0.251-1.23-0.087-0.394-0.176-0.762-0.268-1.1-0.092-0.342-0.167-0.564-0.227-0.67-0.059-0.104-0.123-0.178-0.19-0.218-0.068-0.04-0.153-0.06-0.256-0.06-0.113 0-0.216 0.024-0.308 0.076s-0.191 0.14-0.3 0.268c-0.108 0.126-0.251 0.326-0.429 0.596l-0.527-0.35c0.34-0.512 0.667-0.896 0.981-1.15 0.313-0.254 0.683-0.382 1.11-0.382z" />
-            <path d="m125 172h9.99v1.08h-9.99v-1.08zm0-3.36h9.99v1.08h-9.99v-1.08z" />
-            <path d="m146 164h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.052 0.71 0.036 0.158 0.098 0.288 0.186 0.388 0.09 0.1 0.218 0.178 0.386 0.236 0.168 0.056 0.378 0.1 0.632 0.128 0.254 0.03 0.588 0.05 1 0.062v0.592h-5.99v-0.592c0.6-0.028 1.03-0.064 1.29-0.11s0.452-0.114 0.588-0.206c0.134-0.092 0.234-0.222 0.296-0.39 0.062-0.166 0.092-0.44 0.092-0.818v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.09-0.736 0.268-0.32 0.178-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z" />
-            <path d="m676 183c0.516 0 0.962 0.044 1.34 0.128l-0.308 1.34h-0.696c-0.074-0.3-0.17-0.516-0.288-0.648-0.12-0.132-0.294-0.198-0.528-0.198-0.3 0-0.554 0.082-0.762 0.248-0.208 0.168-0.386 0.414-0.534 0.74-0.148 0.328-0.286 0.768-0.412 1.32l-0.198 0.862h2.03l-0.174 0.798h-2.04l-1.47 6.9c-0.244 1.14-0.614 2-1.12 2.56-0.5 0.56-1.13 0.842-1.89 0.842-0.222 0-0.396-0.014-0.522-0.04l0.134-0.696c0.052 0.016 0.176 0.024 0.372 0.024 0.238 0 0.44-0.06 0.608-0.182 0.17-0.122 0.326-0.332 0.472-0.632 0.144-0.302 0.278-0.718 0.398-1.25l1.7-7.52h-1.34l0.12-0.546c0.352-0.02 0.608-0.05 0.762-0.086 0.156-0.038 0.278-0.092 0.364-0.166 0.088-0.074 0.162-0.17 0.222-0.288 0.06-0.12 0.138-0.338 0.234-0.654 0.278-0.948 0.71-1.66 1.29-2.14 0.584-0.476 1.33-0.716 2.23-0.716z" />
-            <path d="m694 182c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.412 3.53-1.23 4.88s-2.01 2.22-3.55 2.62l-0.19-0.608c1.22-0.406 2.12-1.21 2.72-2.41 0.594-1.2 0.89-2.72 0.89-4.56 0-1.78-0.296-3.26-0.886-4.44-0.59-1.18-1.51-1.97-2.74-2.38l0.212-0.608zm-10.1 0 0.212 0.608c-1.23 0.406-2.15 1.2-2.74 2.38-0.594 1.18-0.89 2.66-0.89 4.44 0 1.85 0.296 3.37 0.89 4.56 0.594 1.2 1.5 2 2.72 2.41l-0.19 0.608c-1.55-0.406-2.73-1.28-3.55-2.62-0.824-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88 0.824-1.35 2.01-2.22 3.55-2.63z" />
-            <path d="m688 187c0.164 0 0.308 0.018 0.432 0.054 0.124 0.038 0.234 0.094 0.328 0.17 0.096 0.078 0.18 0.176 0.254 0.298 0.074 0.12 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.466 0.194 0.774 0.062 0.31 0.116 0.63 0.162 0.962h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.576 0.662-0.736 0.178-0.16 0.352-0.274 0.518-0.34s0.386-0.098 0.66-0.098c0.248 0 0.45 0.03 0.61 0.094l-0.318 1.43h-0.554c-0.03-0.222-0.122-0.332-0.276-0.332-0.048 0-0.098 8e-3 -0.15 0.024s-0.118 0.05-0.194 0.102-0.188 0.156-0.336 0.308c-0.148 0.154-0.314 0.34-0.498 0.562-0.186 0.222-0.374 0.454-0.57 0.696l-0.538 0.672c0.094 0.506 0.184 0.944 0.27 1.31 0.084 0.368 0.158 0.676 0.224 0.922 0.066 0.244 0.124 0.438 0.174 0.58 0.05 0.144 0.104 0.25 0.162 0.322 0.058 0.07 0.118 0.12 0.178 0.15 0.062 0.028 0.132 0.042 0.21 0.042 0.142 0 0.282-0.054 0.416-0.166 0.134-0.11 0.328-0.36 0.58-0.75l0.516 0.34c-0.37 0.548-0.704 0.934-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.04-0.576-0.122-0.16-0.082-0.296-0.212-0.412-0.392s-0.22-0.458-0.308-0.838c-0.164-0.676-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.76c-0.178 0.164-0.348 0.278-0.514 0.344s-0.388 0.098-0.662 0.098c-0.248 0-0.45-0.032-0.608-0.094l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.02 0.234-0.06 0.082-0.038 0.2-0.134 0.352-0.284s0.364-0.386 0.632-0.708c0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.416-0.162-0.816-0.246-1.2-0.084-0.384-0.172-0.744-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.652-0.058-0.104-0.12-0.174-0.186-0.214s-0.15-0.06-0.25-0.06c-0.11 0-0.21 0.026-0.3 0.076s-0.188 0.138-0.292 0.262c-0.106 0.122-0.246 0.316-0.42 0.58l-0.514-0.34c0.332-0.5 0.652-0.876 0.958-1.12 0.304-0.248 0.666-0.372 1.08-0.372z" />
-            <path d="m706 191h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z" />
-            <path d="m725 187c0.162 0 0.306 0.018 0.43 0.054 0.124 0.038 0.234 0.094 0.328 0.17 0.096 0.078 0.18 0.176 0.254 0.298 0.074 0.12 0.144 0.286 0.214 0.494 0.068 0.208 0.132 0.466 0.194 0.774 0.06 0.31 0.114 0.63 0.162 0.962h0.078c0.506-0.712 0.89-1.23 1.15-1.56 0.26-0.33 0.48-0.576 0.66-0.736s0.352-0.274 0.518-0.34 0.386-0.098 0.66-0.098c0.248 0 0.452 0.03 0.61 0.094l-0.316 1.43h-0.554c-0.032-0.222-0.124-0.332-0.278-0.332-0.046 0-0.096 8e-3 -0.15 0.024-0.052 0.016-0.118 0.05-0.194 0.102s-0.188 0.156-0.336 0.308c-0.148 0.154-0.314 0.34-0.498 0.562s-0.374 0.454-0.57 0.696l-0.538 0.672c0.096 0.506 0.186 0.944 0.27 1.31 0.084 0.368 0.16 0.676 0.224 0.922 0.066 0.244 0.124 0.438 0.174 0.58 0.052 0.144 0.106 0.25 0.164 0.322 0.058 0.07 0.116 0.12 0.178 0.15 0.06 0.028 0.13 0.042 0.208 0.042 0.144 0 0.282-0.054 0.416-0.166 0.134-0.11 0.328-0.36 0.582-0.75l0.514 0.34c-0.37 0.548-0.704 0.934-1 1.16s-0.652 0.336-1.06 0.336c-0.228 0-0.42-0.04-0.578-0.122s-0.296-0.212-0.412-0.392-0.218-0.458-0.308-0.838c-0.164-0.676-0.264-1.19-0.3-1.55h-0.08c-0.558 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.76-0.348 0.278-0.514 0.344-0.386 0.098-0.66 0.098c-0.248 0-0.452-0.032-0.61-0.094l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.278 0.332 0.072 0 0.15-0.02 0.232-0.06 0.082-0.038 0.2-0.134 0.352-0.284 0.154-0.15 0.364-0.386 0.634-0.708 0.268-0.322 0.658-0.804 1.17-1.45-0.08-0.416-0.16-0.816-0.246-1.2-0.084-0.384-0.17-0.744-0.26-1.08s-0.164-0.55-0.222-0.652c-0.058-0.104-0.12-0.174-0.186-0.214s-0.148-0.06-0.248-0.06c-0.112 0-0.212 0.026-0.302 0.076s-0.186 0.138-0.292 0.262c-0.106 0.122-0.246 0.316-0.42 0.58l-0.514-0.34c0.332-0.5 0.652-0.876 0.958-1.12 0.306-0.248 0.666-0.372 1.08-0.372z" />
-            <path d="m463 7.88c0.516 0 0.962 0.0422 1.34 0.127l-0.308 1.34h-0.696c-0.074-0.301-0.17-0.517-0.288-0.649-0.12-0.132-0.294-0.198-0.526-0.198-0.302 0-0.556 0.083-0.764 0.249-0.208 0.166-0.386 0.413-0.534 0.74-0.148 0.327-0.284 0.767-0.412 1.32l-0.198 0.862h2.03l-0.174 0.799h-2.04l-1.47 6.9c-0.244 1.14-0.614 2-1.12 2.56-0.5 0.562-1.13 0.842-1.89 0.842-0.222 0-0.396-0.0132-0.522-0.0394l0.134-0.696c0.052 0.0158 0.176 0.0238 0.372 0.0238 0.238 0 0.44-0.0606 0.608-0.182 0.17-0.121 0.326-0.332 0.472-0.633 0.144-0.301 0.278-0.717 0.4-1.25l1.7-7.52h-1.34l0.12-0.546c0.352-0.021 0.608-0.05 0.762-0.087 0.156-0.0368 0.278-0.0922 0.364-0.166 0.088-0.074 0.162-0.17 0.222-0.289s0.138-0.336 0.234-0.653c0.28-0.949 0.71-1.66 1.29-2.14 0.584-0.477 1.33-0.716 2.23-0.716z" />
-            <path d="m482 7.11c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.41 3.53-1.23 4.88-0.822 1.34-2.01 2.22-3.55 2.62l-0.19-0.609c1.22-0.406 2.12-1.21 2.72-2.4s0.89-2.72 0.89-4.56c0-1.78-0.296-3.26-0.886-4.44-0.59-1.18-1.51-1.97-2.74-2.38l0.212-0.609zm-10.1 0 0.212 0.609c-1.23 0.406-2.15 1.2-2.74 2.38-0.594 1.18-0.89 2.66-0.89 4.44 0 1.85 0.296 3.37 0.89 4.56s1.5 2 2.72 2.4l-0.19 0.609c-1.55-0.406-2.73-1.28-3.55-2.62-0.824-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88 0.824-1.35 2.01-2.22 3.55-2.63z" />
-            <path d="m475 11.5c0.164 0 0.308 0.0184 0.432 0.0554s0.234 0.0936 0.328 0.17c0.096 0.0766 0.18 0.175 0.254 0.297 0.074 0.121 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.467 0.194 0.775 0.062 0.309 0.116 0.629 0.162 0.961h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.575 0.662-0.736 0.178-0.161 0.352-0.274 0.518-0.34 0.166-0.066 0.386-0.099 0.66-0.099 0.248 0 0.45 0.0318 0.61 0.095l-0.318 1.43h-0.552c-0.032-0.222-0.124-0.332-0.278-0.332-0.048 0-0.098 8e-3 -0.15 0.0238s-0.118 0.0502-0.194 0.103c-0.076 0.0528-0.188 0.156-0.336 0.309-0.148 0.153-0.314 0.34-0.498 0.562-0.186 0.221-0.374 0.453-0.57 0.696l-0.538 0.672c0.096 0.506 0.184 0.944 0.27 1.31 0.084 0.369 0.158 0.676 0.224 0.921s0.124 0.439 0.174 0.581 0.104 0.249 0.162 0.32 0.118 0.121 0.178 0.15c0.062 0.029 0.132 0.0434 0.21 0.0434 0.142 0 0.282-0.0554 0.416-0.166 0.134-0.111 0.328-0.361 0.58-0.751l0.516 0.34c-0.37 0.548-0.704 0.935-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.0408-0.576-0.123-0.16-0.0818-0.296-0.212-0.412-0.392-0.116-0.179-0.22-0.459-0.308-0.838-0.164-0.675-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759c-0.178 0.163-0.348 0.278-0.514 0.344s-0.388 0.0988-0.662 0.0988c-0.248 0-0.45-0.0316-0.608-0.0948l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.0198 0.234-0.0592 0.082-0.0396 0.2-0.135 0.352-0.285 0.152-0.15 0.364-0.386 0.632-0.708 0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.417-0.162-0.817-0.246-1.2-0.084-0.385-0.172-0.743-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.653-0.058-0.103-0.12-0.174-0.186-0.214-0.066-0.0396-0.15-0.0594-0.25-0.0594-0.11 0-0.21 0.025-0.3 0.0752-0.09 0.05-0.188 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.958-1.12s0.666-0.372 1.08-0.372z" />
-            <path d="m494 15.7h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z" />
-            <path d="m510 14h9.74v5.58h-1.12v-4.54h-8.62v-1.04z" />
-            <path d="m524 11.5c0.164 0 0.308 0.0184 0.432 0.0554s0.234 0.0936 0.328 0.17c0.094 0.0766 0.18 0.175 0.254 0.297 0.072 0.121 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.467 0.194 0.775 0.062 0.309 0.116 0.629 0.162 0.961h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.575 0.662-0.736 0.178-0.161 0.352-0.274 0.518-0.34 0.166-0.066 0.386-0.099 0.66-0.099 0.248 0 0.45 0.0318 0.608 0.095l-0.316 1.43h-0.554c-0.03-0.222-0.124-0.332-0.276-0.332-0.048 0-0.098 8e-3 -0.15 0.0238-0.054 0.0158-0.118 0.0502-0.194 0.103-0.076 0.0528-0.188 0.156-0.336 0.309-0.148 0.153-0.314 0.34-0.498 0.562-0.186 0.221-0.376 0.453-0.57 0.696l-0.538 0.672c0.094 0.506 0.184 0.944 0.268 1.31 0.086 0.369 0.16 0.676 0.226 0.921s0.124 0.439 0.174 0.581 0.104 0.249 0.162 0.32 0.118 0.121 0.178 0.15c0.062 0.029 0.13 0.0434 0.21 0.0434 0.142 0 0.28-0.0554 0.416-0.166 0.134-0.111 0.328-0.361 0.58-0.751l0.514 0.34c-0.368 0.548-0.702 0.935-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.0408-0.578-0.123-0.158-0.0818-0.294-0.212-0.41-0.392-0.116-0.179-0.22-0.459-0.308-0.838-0.164-0.675-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759c-0.178 0.163-0.348 0.278-0.514 0.344-0.168 0.066-0.388 0.0988-0.662 0.0988-0.248 0-0.45-0.0316-0.608-0.0948l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.0198 0.234-0.0592 0.082-0.0396 0.198-0.135 0.352-0.285 0.152-0.15 0.364-0.386 0.632-0.708 0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.417-0.162-0.817-0.246-1.2-0.084-0.385-0.172-0.743-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.653-0.058-0.103-0.12-0.174-0.186-0.214-0.066-0.0396-0.15-0.0594-0.25-0.0594-0.11 0-0.21 0.025-0.3 0.0752-0.09 0.05-0.188 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.956-1.12 0.306-0.248 0.668-0.372 1.08-0.372z" />
-        </g>
-        <g class="kata_svg_text" clip-rule="evenodd" fill-rule="evenodd">
-            <!-- Legend text -->
-            <path d="m121 360c-0.941 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.863-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.701 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.73 0.432 3.59 1.29 0.869 0.857 1.3 1.99 1.3 3.4 0 1.53-0.449 2.73-1.35 3.62-0.892 0.886-2.12 1.33-3.67 1.33zm0.071-7.48c-0.67 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-0.243v-2.3c0.467 0.282 0.932 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.898-0.069 1.19-0.207 0.293-0.137 0.44-0.347 0.44-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.302-0.224-0.512-0.314c-0.204-0.09-0.428-0.171-0.674-0.243-0.245-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.688-0.285-0.97-0.441-0.275-0.161-0.509-0.347-0.701-0.557-0.185-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.333-1.33 0.227-0.372 0.527-0.674 0.898-0.908 0.377-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.408 0 0.821 0.033 1.24 0.099 0.419 0.06 0.833 0.15 1.24 0.27v2.19c-0.359-0.21-0.746-0.365-1.16-0.467-0.407-0.108-0.809-0.162-1.2-0.162-0.186 0-0.362 0.018-0.53 0.054-0.162 0.03-0.305 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.108 0.207-0.108 0.333 0 0.167 0.054 0.311 0.162 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.429 0.135 0.638 0.207 0.378 0.131 0.719 0.275 1.02 0.431 0.305 0.156 0.566 0.338 0.781 0.548 0.222 0.21 0.39 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.359 1.4-0.234 0.384-0.548 0.698-0.944 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.967-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.035c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1z" />
-            <path d="m477 347-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.143 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.534 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.617 0-1.1 0.228-1.45 0.683-0.347 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.43-1.87 0.299 0 0.533 0.036 0.7 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.486 0 0.878 0.134 1.18 0.404 0.306 0.269 0.459 0.617 0.459 1.04 0 0.431-0.153 0.785-0.459 1.06-0.299 0.276-0.691 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.641 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.778 0.584 1.31 0.584 0.646 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.096 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z" />
-            <!-- Ket text -->
-            <path d="m242 183h1.25v15.1h-1.25v-15.1z" />
-            <path d="m250 184c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.826 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.46-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z" />
-            <path d="m256 182 3.24 7.28v0.6l-3.24 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m139 72.2h1.25v15.1h-1.25v-15.1z" />
-            <path d="m148 72.6h0.444c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.052 0.709 0.036 0.159 0.098 0.289 0.188 0.389 0.088 0.1 0.216 0.178 0.384 0.235 0.168 0.0566 0.378 0.0998 0.632 0.13s0.59 0.05 1.01 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.28-0.109 0.258-0.046 0.454-0.115 0.588-0.207 0.136-0.0918 0.234-0.221 0.296-0.389 0.062-0.167 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.076-0.0998-0.186-0.15-0.332-0.15-0.174 0-0.42 0.089-0.738 0.267-0.32 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z" />
-            <path d="m153 71.5 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m208 115h1.25v15.1h-1.25v-15.1z" />
-            <path d="m217 117h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m225 114 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m208 248h1.25v15.1h-1.25v-15.1z" />
-            <path d="m212 255h9.99v1.08h-9.99v-1.08z" />
-            <path d="m225 247 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m132 292h9.99v1.08h-9.99v-1.08z" />
-            <path d="m145 285h1.25v15.1h-1.25v-15.1z" />
-            <path d="m154 286h0.444c-0.032 0.52-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39 0.088 0.1 0.216 0.178 0.384 0.234 0.168 0.058 0.378 0.1 0.632 0.13s0.59 0.05 1.01 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.28-0.108 0.258-0.046 0.454-0.116 0.588-0.208 0.136-0.092 0.234-0.22 0.296-0.388s0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.088-0.738 0.266-0.318 0.18-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z" />
-            <path d="m159 285 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m27.9 189h9.99v1.08h-9.99v-1.08z" />
-            <path d="m41 183h1.25v15.1h-1.25v-15.1z" />
-            <path d="m48.9 184c-0.373 0-0.685 0.11-0.936 0.332-0.251 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.826 0.833 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.443-0.228 0.927-0.342 1.45-0.342z" />
-            <path d="m55.2 182 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z" />
-            <path d="m57.3 254h9.99v1.08h-9.99v-1.08z" />
-            <path d="m70.4 248h1.25v15.1h-1.25v-15.1z" />
-            <path d="m79.3 250h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m87.8 247 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z" />
-            <path d="m56.6 121h9.99v1.08h-9.99v-1.08z" />
-            <path d="m69.8 115h1.25v15.1h-1.25v-15.1z" />
-            <path d="m74.3 121h9.99v1.08h-9.99v-1.08z" />
-            <path d="m87.1 114 3.23 7.28v0.599l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z" />
-            <path d="m593 183h1.25v15.1h-1.25v-15.1z" />
-            <path d="m601 184c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956s-0.262 0.924-0.328 1.52c-0.064 0.598-0.096 1.27-0.096 2.02 0 1.76 0.162 3.05 0.49 3.88 0.326 0.826 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16s0.474-1.98 0.474-3.6c0-1.24-0.08-2.25-0.242-3.02s-0.388-1.32-0.678-1.66c-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.93 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.444-0.228 0.928-0.342 1.45-0.342z" />
-            <path d="m607 182 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m490 72.2h1.25v15.1h-1.25v-15.1z" />
-            <path d="m499 72.6h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.052 0.709 0.036 0.159 0.098 0.289 0.186 0.389 0.09 0.1 0.218 0.178 0.386 0.235 0.168 0.0566 0.378 0.0998 0.632 0.13s0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.29-0.109 0.256-0.046 0.452-0.115 0.588-0.207 0.134-0.0918 0.234-0.221 0.296-0.389 0.062-0.167 0.092-0.44 0.092-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.0998-0.186-0.15-0.332-0.15-0.172 0-0.418 0.089-0.736 0.267-0.32 0.178-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z" />
-            <path d="m504 71.5 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m559 115h1.25v15.1h-1.25v-15.1z" />
-            <path d="m567 117h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m576 114 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m559 248h1.25v15.1h-1.25v-15.1z" />
-            <path d="m563 255h9.99v1.08h-9.99v-1.08z" />
-            <path d="m576 247 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m483 292h9.99v1.08h-9.99v-1.08z" />
-            <path d="m496 285h1.25v15.1h-1.25v-15.1z" />
-            <path d="m505 286h0.446c-0.032 0.52-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.052 0.71 0.036 0.16 0.098 0.29 0.186 0.39 0.09 0.1 0.218 0.178 0.386 0.234 0.168 0.058 0.378 0.1 0.632 0.13s0.588 0.05 1 0.06v0.592h-5.99v-0.592c0.598-0.026 1.03-0.062 1.28-0.108s0.452-0.116 0.588-0.208c0.134-0.092 0.234-0.22 0.296-0.388s0.092-0.44 0.092-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.088-0.736 0.266-0.32 0.18-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z" />
-            <path d="m510 285 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m379 189h9.99v1.08h-9.99v-1.08z" />
-            <path d="m392 183h1.25v15.1h-1.25v-15.1z" />
-            <path d="m400 184c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956s-0.262 0.924-0.328 1.52c-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.826 0.832 1.24 1.52 1.24 0.652 0 1.14-0.388 1.45-1.16s0.474-1.98 0.474-3.6c0-1.24-0.08-2.25-0.242-3.02-0.164-0.77-0.388-1.32-0.678-1.66-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.444-0.228 0.926-0.342 1.45-0.342z" />
-            <path d="m406 182 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m408 254h9.99v1.08h-9.99v-1.08z" />
-            <path d="m421 248h1.25v15.1h-1.25v-15.1z" />
-            <path d="m430 250h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m439 247 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m408 121h9.99v1.08h-9.99v-1.08z" />
-            <path d="m421 115h1.25v15.1h-1.25v-15.1z" />
-            <path d="m425 121h9.99v1.08h-9.99v-1.08z" />
-            <path d="m438 114 3.23 7.28v0.599l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-        </g>
-    </g>
-    <defs>
-        <clipPath id="clip0_5_635">
-            <rect transform="translate(.6 .2)" width="737" height="374" />
-        </clipPath>
-    </defs>
+<svg width="685" height="380" fill="none" version="1.1" xmlns="http://www.w3.org/2000/svg">
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
+  <!-- Large circles -->
+  <g class="kata_svg_path">
+    <path d="m24.1 163c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z"/>
+    <path d="m375 163c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z"/>
+  </g>
+  <!-- Normal points -->
+  <g class="kata_svg_point">
+    <path d="m157 23.8c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m157 302c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m257 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m57.3 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m647 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m369 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m408 260c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m296 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m18 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m508 23.7c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m508 302c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+  </g>
+  <!-- Target points -->
+  <g class="kata_svg_fill_accent">
+    <path d="m257 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m57.3 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m608 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m408 66.6c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+  </g>
+  <!-- From point -->
+  <g class="kata_svg_point kata_svg_stroke_accent">
+    <path d="m608 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+  </g>
+  <!-- Arrows -->
+  <g class="kata_svg_path kata_svg_stroke_accent" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
+    <path d="m269.59 66.574h13.076v-21.506h-19.622v14.449l5.1379-6.8441-5.1379 6.8522-6.4917-6.8522" image-rendering="auto"/>
+    <path d="m614.87 59.292.6231-55.409h-201.62v55.688l-4.9896-4.7393 4.9896 4.8536 5.062-4.8536" image-rendering="auto"/>
+    <path d="m214.6 107.51-104.64 104.38 8.787-.26203-8.787.26203.0944-8.0595" image-rendering="auto"/>
+    <path d="m620.69 66.395h51.003v193.29h-50.926l5.8-5.9628-5.8 5.9628 5.8 5.8634" image-rendering="auto"/>
+  </g>
+  <!-- Equation text -->
+  <g class="kata_svg_fill_accent" clip-rule="evenodd" fill-rule="evenodd">
+    <path d="m253 18.1c.516 0 .962.0422 1.34.126l-.308 1.34h-.696c-.074-.301-.17-.517-.288-.649-.12-.132-.294-.198-.526-.198-.302 0-.556.083-.764.249s-.386.413-.534.74-.284.767-.412 1.32l-.196.862h2.03l-.174.799h-2.04l-1.47 6.9c-.242 1.14-.614 2-1.12 2.56-.5.562-1.13.842-1.89.842-.222 0-.396-.0132-.522-.0396l.134-.696c.054.0158.178.0236.372.0236.238 0 .44-.0606.61-.182.168-.121.324-.332.47-.633.144-.3.278-.717.4-1.25l1.7-7.52h-1.34l.118-.546c.354-.0212.608-.0502.764-.087.154-.037.276-.0924.364-.166.086-.0738.16-.17.22-.289.062-.119.138-.336.234-.653.28-.949.71-1.66 1.29-2.14.582-.477 1.32-.716 2.23-.716z"/>
+    <path d="m272 17.3c1.54.406 2.72 1.28 3.55 2.63.826 1.35 1.24 2.97 1.24 4.88s-.41 3.53-1.23 4.88c-.822 1.34-2.01 2.22-3.55 2.62l-.19-.609c1.22-.406 2.12-1.21 2.72-2.4.594-1.2.89-2.72.89-4.56 0-1.78-.296-3.26-.886-4.44s-1.51-1.97-2.74-2.38l.214-.609zm-10.1 0 .214.609c-1.23.406-2.15 1.2-2.74 2.38-.592 1.18-.89 2.66-.89 4.44 0 1.85.298 3.37.89 4.56.594 1.2 1.5 2 2.72 2.4l-.19.609c-1.55-.406-2.73-1.28-3.55-2.62-.822-1.34-1.23-2.97-1.23-4.88 0-1.9.412-3.53 1.24-4.88s2.01-2.22 3.55-2.63z"/>
+    <path d="m265 21.7c.162 0 .306.0184.43.0554.124.0368.234.0936.328.17.096.0764.18.175.254.297s.144.286.214.494c.068.208.132.467.194.775.06.308.114.629.162.961h.078c.506-.712.89-1.23 1.15-1.56s.48-.575.66-.736.352-.274.518-.34c.166-.0658.386-.0988.66-.0988.248 0 .452.0316.61.0948l-.316 1.43h-.554c-.032-.221-.124-.332-.278-.332-.046 0-.098.0078-.15.0238-.052.0158-.118.05-.194.103-.076.0526-.188.156-.336.308-.148.153-.314.34-.498.562s-.374.454-.57.696l-.538.672c.096.506.186.944.27 1.31s.158.676.224.922.124.439.174.581c.052.142.106.249.164.32.058.0712.116.121.178.15.06.029.13.0434.208.0434.144 0 .282-.0552.416-.166s.328-.361.582-.751l.514.34c-.37.548-.704.935-1 1.16-.298.224-.652.336-1.06.336-.226 0-.418-.0408-.576-.123-.158-.0816-.296-.212-.412-.391s-.218-.459-.308-.839c-.164-.675-.264-1.19-.3-1.55h-.08c-.558.786-.974 1.35-1.25 1.69s-.496.596-.672.759-.348.278-.514.344-.386.099-.66.099c-.248 0-.452-.0316-.61-.095l.316-1.43h.554c.032.221.124.332.278.332.072 0 .15-.0198.232-.0594s.2-.134.352-.285c.154-.15.364-.386.634-.708.268-.322.658-.804 1.17-1.45-.08-.417-.16-.817-.246-1.2-.084-.385-.17-.744-.26-1.08s-.164-.55-.222-.653-.12-.174-.186-.214-.148-.0592-.248-.0592c-.112 0-.212.025-.302.075-.09.0502-.186.137-.292.261s-.246.318-.42.581l-.514-.34c.332-.501.652-.875.958-1.12.306-.248.666-.372 1.08-.372z"/>
+    <path d="m284 25.9h9.75v1.05h-9.75zm0-3.28h9.75v1.05h-9.75z"/>
+    <path d="m303 19.2c-.364 0-.668.108-.914.324-.244.216-.442.527-.592.933s-.258.901-.32 1.48c-.064.583-.096 1.24-.096 1.97 0 1.72.16 2.98.478 3.78.32.804.814 1.21 1.48 1.21.638 0 1.11-.378 1.42-1.14s.462-1.93.462-3.52c0-1.21-.078-2.2-.236-2.95-.16-.751-.38-1.29-.662-1.62s-.622-.49-1.02-.49zm.04-.672c1.15 0 2.01.446 2.58 1.34s.846 2.24.846 4.04c0 1.87-.3 3.28-.904 4.24s-1.49 1.44-2.65 1.44c-1.14 0-1.99-.448-2.54-1.34-.556-.897-.834-2.26-.834-4.08 0-.97.086-1.81.256-2.52.172-.707.412-1.29.72-1.75.31-.461.68-.803 1.11-1.02s.904-.332 1.42-.332z"/>
+    <path d="m110.47 136.35c.53 0 .986.043 1.37.13l-.316 1.38h-.713c-.0756-.308-.174-.53-.296-.665s-.301-.203-.539-.203c-.308 0-.569.085-.782.256-.213.17-.396.422-.547.758-.151.334-.292.786-.422 1.35l-.203.882h2.08l-.178.82h-2.09l-1.51 7.07c-.249 1.17-.63 2.05-1.14 2.62-.513.574-1.16.862-1.94.862-.227 0-.405-.012-.535-.04l.138-.714c.054.016.181.026.381.026.243 0 .451-.064.624-.188s.334-.34.482-.648.285-.734.409-1.28l1.74-7.71h-1.37l.122-.56c.362-.022.623-.052.782-.09s.284-.094.373-.17c.0892-.076.165-.174.227-.296.0622-.12.142-.344.239-.668.286-.972.728-1.7 1.33-2.19.597-.489 1.36-.734 2.28-.734z"/>
+    <path d="m129.17 135.35c1.58.416 2.79 1.31 3.64 2.7.846 1.38 1.27 3.05 1.27 5 0 1.96-.422 3.62-1.26 5-.843 1.37-2.06 2.27-3.64 2.69l-.195-.624c1.25-.416 2.18-1.24 2.78-2.46.608-1.23.911-2.79.911-4.68 0-1.83-.302-3.34-.907-4.55-.606-1.21-1.54-2.02-2.81-2.44l.219-.624zm-10.3 0 .219.624c-1.26.416-2.2 1.23-2.81 2.44-.608 1.21-.912 2.73-.912 4.55 0 1.89.304 3.45.912 4.68s1.54 2.05 2.78 2.46l-.194.624c-1.58-.416-2.8-1.31-3.64-2.69-.843-1.38-1.26-3.04-1.26-5 0-1.95.423-3.62 1.27-5 .846-1.38 2.06-2.28 3.64-2.7z"/>
+    <path d="m122.17 140.35c.168 0 .315.02.442.058s.239.096.336.174c.098.078.184.18.26.304.075.124.148.292.219.506.07.214.136.478.198.794s.118.646.166.986h.081c.519-.73.912-1.26 1.18-1.6.267-.338.493-.588.677-.754.183-.164.36-.28.53-.348.171-.068.396-.1.677-.1.254 0 .462.032.624.096l-.324 1.47h-.567c-.033-.228-.127-.342-.284-.342-.049 0-.1.01-.154.026s-.12.05-.199.104c-.078.054-.193.16-.344.316-.151.158-.322.35-.511.576-.189.228-.383.464-.583.714l-.551.688c.097.52.189.968.275 1.35.087.378.164.694.231.944.068.252.127.45.178.596.052.146.107.256.167.328.059.074.12.124.182.154s.134.044.215.044c.146 0 .288-.056.425-.17.138-.112.337-.37.596-.77l.527.35c-.378.562-.72.956-1.02 1.19-.306.23-.669.346-1.09.346-.232 0-.429-.042-.591-.126s-.303-.218-.422-.402-.224-.47-.316-.858c-.167-.692-.27-1.22-.308-1.59h-.081c-.573.806-.998 1.38-1.28 1.73-.278.352-.507.612-.689.78-.181.166-.356.284-.526.352-.171.068-.396.102-.677.102-.254 0-.462-.034-.624-.098l.324-1.47h.567c.033.228.127.342.284.342.076 0 .155-.022.239-.062s.204-.138.361-.292.373-.396.648-.724c.276-.33.676-.824 1.2-1.48-.081-.428-.165-.838-.251-1.23-.087-.394-.176-.762-.268-1.1-.092-.342-.167-.564-.227-.67-.059-.104-.123-.178-.19-.218-.068-.04-.153-.06-.256-.06-.113 0-.216.024-.308.076s-.191.14-.3.268c-.108.126-.251.326-.429.596l-.527-.35c.34-.512.667-.896.981-1.15.313-.254.683-.382 1.11-.382z"/>
+    <path d="m141.17 144.35h9.99v1.08h-9.99zm0-3.36h9.99v1.08h-9.99z"/>
+    <path d="m162.17 136.35h.446c-.032.519-.048 1.24-.048 2.16v6.92c0 .314.018.55.052.71.036.158.098.288.186.388.09.1.218.178.386.236.168.056.378.1.632.128.254.03.588.05 1 .062v.592h-5.99v-.592c.6-.028 1.03-.064 1.29-.11s.452-.114.588-.206c.134-.092.234-.222.296-.39.062-.166.092-.44.092-.818v-6.57c0-.216-.038-.374-.114-.474-.074-.1-.186-.15-.332-.15-.172 0-.418.09-.736.268-.32.178-.714.424-1.18.738l-.358-.624 3.79-2.26z"/>
+    <path d="m616.79 271.85c.516 0 .962.044 1.34.128l-.308 1.34h-.696c-.074-.3-.17-.516-.288-.648-.12-.132-.294-.198-.528-.198-.3 0-.554.082-.762.248-.208.168-.386.414-.534.74-.148.328-.286.768-.412 1.32l-.198.862h2.03l-.174.798h-2.04l-1.47 6.9c-.244 1.14-.614 2-1.12 2.56-.5.56-1.13.842-1.89.842-.222 0-.396-.014-.522-.04l.134-.696c.052.016.176.024.372.024.238 0 .44-.06.608-.182.17-.122.326-.332.472-.632.144-.302.278-.718.398-1.25l1.7-7.52h-1.34l.12-.546c.352-.02.608-.05.762-.086.156-.038.278-.092.364-.166.088-.074.162-.17.222-.288.06-.12.138-.338.234-.654.278-.948.71-1.66 1.29-2.14.584-.476 1.33-.716 2.23-.716z"/>
+    <path d="m634.79 270.85c1.54.406 2.72 1.28 3.55 2.63.826 1.35 1.24 2.97 1.24 4.88s-.412 3.53-1.23 4.88-2.01 2.22-3.55 2.62l-.19-.608c1.22-.406 2.12-1.21 2.72-2.41.594-1.2.89-2.72.89-4.56 0-1.78-.296-3.26-.886-4.44s-1.51-1.97-2.74-2.38l.212-.608zm-10.1 0 .212.608c-1.23.406-2.15 1.2-2.74 2.38-.594 1.18-.89 2.66-.89 4.44 0 1.85.296 3.37.89 4.56.594 1.2 1.5 2 2.72 2.41l-.19.608c-1.55-.406-2.73-1.28-3.55-2.62-.824-1.34-1.23-2.97-1.23-4.88 0-1.9.412-3.53 1.24-4.88.824-1.35 2.01-2.22 3.55-2.63z"/>
+    <path d="m628.79 275.85c.164 0 .308.018.432.054.124.038.234.094.328.17.096.078.18.176.254.298.074.12.144.286.212.494.07.208.134.466.194.774.062.31.116.63.162.962h.08c.506-.712.89-1.23 1.15-1.56.262-.33.482-.576.662-.736.178-.16.352-.274.518-.34s.386-.098.66-.098c.248 0 .45.03.61.094l-.318 1.43h-.554c-.03-.222-.122-.332-.276-.332-.048 0-.098.008-.15.024s-.118.05-.194.102-.188.156-.336.308c-.148.154-.314.34-.498.562-.186.222-.374.454-.57.696l-.538.672c.094.506.184.944.27 1.31.084.368.158.676.224.922.066.244.124.438.174.58.05.144.104.25.162.322.058.07.118.12.178.15.062.028.132.042.21.042.142 0 .282-.054.416-.166.134-.11.328-.36.58-.75l.516.34c-.37.548-.704.934-1 1.16s-.652.336-1.06.336c-.226 0-.418-.04-.576-.122-.16-.082-.296-.212-.412-.392s-.22-.458-.308-.838c-.164-.676-.264-1.19-.302-1.55h-.078c-.56.786-.974 1.35-1.25 1.69s-.496.596-.672.76c-.178.164-.348.278-.514.344s-.388.098-.662.098c-.248 0-.45-.032-.608-.094l.316-1.43h.554c.032.222.124.332.276.332.074 0 .152-.02.234-.06.082-.038.2-.134.352-.284s.364-.386.632-.708c.27-.322.66-.804 1.17-1.45-.08-.416-.162-.816-.246-1.2s-.172-.744-.26-1.08c-.09-.332-.164-.55-.222-.652-.058-.104-.12-.174-.186-.214s-.15-.06-.25-.06c-.11 0-.21.026-.3.076s-.188.138-.292.262c-.106.122-.246.316-.42.58l-.514-.34c.332-.5.652-.876.958-1.12.304-.248.666-.372 1.08-.372z"/>
+    <path d="m646.79 279.85h9.75v1.05h-9.75zm0-3.28h9.75v1.05h-9.75z"/>
+    <path d="m665.79 275.85c.162 0 .306.018.43.054.124.038.234.094.328.17.096.078.18.176.254.298.074.12.144.286.214.494.068.208.132.466.194.774.06.31.114.63.162.962h.078c.506-.712.89-1.23 1.15-1.56s.48-.576.66-.736.352-.274.518-.34.386-.098.66-.098c.248 0 .452.03.61.094l-.316 1.43h-.554c-.032-.222-.124-.332-.278-.332-.046 0-.096.008-.15.024-.052.016-.118.05-.194.102s-.188.156-.336.308c-.148.154-.314.34-.498.562s-.374.454-.57.696l-.538.672c.096.506.186.944.27 1.31.084.368.16.676.224.922.066.244.124.438.174.58.052.144.106.25.164.322.058.07.116.12.178.15.06.028.13.042.208.042.144 0 .282-.054.416-.166.134-.11.328-.36.582-.75l.514.34c-.37.548-.704.934-1 1.16s-.652.336-1.06.336c-.228 0-.42-.04-.578-.122s-.296-.212-.412-.392-.218-.458-.308-.838c-.164-.676-.264-1.19-.3-1.55h-.08c-.558.786-.974 1.35-1.25 1.69s-.496.596-.672.76-.348.278-.514.344-.386.098-.66.098c-.248 0-.452-.032-.61-.094l.316-1.43h.554c.032.222.124.332.278.332.072 0 .15-.02.232-.06.082-.038.2-.134.352-.284.154-.15.364-.386.634-.708.268-.322.658-.804 1.17-1.45-.08-.416-.16-.816-.246-1.2-.084-.384-.17-.744-.26-1.08s-.164-.55-.222-.652c-.058-.104-.12-.174-.186-.214s-.148-.06-.248-.06c-.112 0-.212.026-.302.076s-.186.138-.292.262c-.106.122-.246.316-.42.58l-.514-.34c.332-.5.652-.876.958-1.12.306-.248.666-.372 1.08-.372z"/>
+    <path d="m484.16 7.6428c.516 0 .962.0422 1.34.127l-.308 1.34h-.696c-.074-.301-.17-.517-.288-.649-.12-.132-.294-.198-.526-.198-.302 0-.556.083-.764.249s-.386.413-.534.74-.284.767-.412 1.32l-.198.862h2.03l-.174.799h-2.04l-1.47 6.9c-.244 1.14-.614 2-1.12 2.56-.5.562-1.13.842-1.89.842-.222 0-.396-.0132-.522-.0394l.134-.696c.052.0158.176.0238.372.0238.238 0 .44-.0606.608-.182.17-.121.326-.332.472-.633.144-.301.278-.717.4-1.25l1.7-7.52h-1.34l.12-.546c.352-.021.608-.05.762-.087.156-.0368.278-.0922.364-.166.088-.074.162-.17.222-.289s.138-.336.234-.653c.28-.949.71-1.66 1.29-2.14.584-.477 1.33-.716 2.23-.716z"/>
+    <path d="m503.16 6.8728c1.54.406 2.72 1.28 3.55 2.63.826 1.35 1.24 2.97 1.24 4.88s-.41 3.53-1.23 4.88c-.822 1.34-2.01 2.22-3.55 2.62l-.19-.609c1.22-.406 2.12-1.21 2.72-2.4s.89-2.72.89-4.56c0-1.78-.296-3.26-.886-4.44-.59-1.18-1.51-1.97-2.74-2.38l.212-.609zm-10.1 0 .212.609c-1.23.406-2.15 1.2-2.74 2.38-.594 1.18-.89 2.66-.89 4.44 0 1.85.296 3.37.89 4.56s1.5 2 2.72 2.4l-.19.609c-1.55-.406-2.73-1.28-3.55-2.62-.824-1.34-1.23-2.97-1.23-4.88 0-1.9.412-3.53 1.24-4.88.824-1.35 2.01-2.22 3.55-2.63z"/>
+    <path d="m496.16 11.263c.164 0 .308.0184.432.0554s.234.0936.328.17c.096.0766.18.175.254.297.074.121.144.286.212.494.07.208.134.467.194.775.062.309.116.629.162.961h.08c.506-.712.89-1.23 1.15-1.56.262-.33.482-.575.662-.736.178-.161.352-.274.518-.34s.386-.099.66-.099c.248 0 .45.0318.61.095l-.318 1.43h-.552c-.032-.222-.124-.332-.278-.332-.048 0-.098.008-.15.0238s-.118.0502-.194.103-.188.156-.336.309-.314.34-.498.562c-.186.221-.374.453-.57.696l-.538.672c.096.506.184.944.27 1.31.084.369.158.676.224.921s.124.439.174.581.104.249.162.32.118.121.178.15c.062.029.132.0434.21.0434.142 0 .282-.0554.416-.166.134-.111.328-.361.58-.751l.516.34c-.37.548-.704.935-1 1.16s-.652.336-1.06.336c-.226 0-.418-.0408-.576-.123-.16-.0818-.296-.212-.412-.392-.116-.179-.22-.459-.308-.838-.164-.675-.264-1.19-.302-1.55h-.078c-.56.786-.974 1.35-1.25 1.69s-.496.596-.672.759c-.178.163-.348.278-.514.344s-.388.0988-.662.0988c-.248 0-.45-.0316-.608-.0948l.316-1.43h.554c.032.222.124.332.276.332.074 0 .152-.0198.234-.0592.082-.0396.2-.135.352-.285s.364-.386.632-.708c.27-.322.66-.804 1.17-1.45-.08-.417-.162-.817-.246-1.2-.084-.385-.172-.743-.26-1.08-.09-.332-.164-.55-.222-.653s-.12-.174-.186-.214c-.066-.0396-.15-.0594-.25-.0594-.11 0-.21.025-.3.0752-.09.05-.188.137-.292.261-.106.124-.246.318-.42.581l-.514-.34c.332-.501.652-.875.958-1.12s.666-.372 1.08-.372z"/>
+    <path d="m515.16 15.463h9.75v1.05h-9.75zm0-3.28h9.75v1.05h-9.75z"/>
+    <path d="m531.16 13.763h9.74v5.58h-1.12v-4.54h-8.62z"/>
+    <path d="m545.16 11.263c.164 0 .308.0184.432.0554s.234.0936.328.17c.094.0766.18.175.254.297.072.121.144.286.212.494.07.208.134.467.194.775.062.309.116.629.162.961h.08c.506-.712.89-1.23 1.15-1.56.262-.33.482-.575.662-.736.178-.161.352-.274.518-.34s.386-.099.66-.099c.248 0 .45.0318.608.095l-.316 1.43h-.554c-.03-.222-.124-.332-.276-.332-.048 0-.098.008-.15.0238-.054.0158-.118.0502-.194.103s-.188.156-.336.309-.314.34-.498.562c-.186.221-.376.453-.57.696l-.538.672c.094.506.184.944.268 1.31.086.369.16.676.226.921s.124.439.174.581.104.249.162.32.118.121.178.15c.062.029.13.0434.21.0434.142 0 .28-.0554.416-.166.134-.111.328-.361.58-.751l.514.34c-.368.548-.702.935-1 1.16s-.652.336-1.06.336c-.226 0-.418-.0408-.578-.123-.158-.0818-.294-.212-.41-.392-.116-.179-.22-.459-.308-.838-.164-.675-.264-1.19-.302-1.55h-.078c-.56.786-.974 1.35-1.25 1.69s-.496.596-.672.759c-.178.163-.348.278-.514.344-.168.066-.388.0988-.662.0988-.248 0-.45-.0316-.608-.0948l.316-1.43h.554c.032.222.124.332.276.332.074 0 .152-.0198.234-.0592.082-.0396.198-.135.352-.285.152-.15.364-.386.632-.708.27-.322.66-.804 1.17-1.45-.08-.417-.162-.817-.246-1.2-.084-.385-.172-.743-.26-1.08-.09-.332-.164-.55-.222-.653s-.12-.174-.186-.214c-.066-.0396-.15-.0594-.25-.0594-.11 0-.21.025-.3.0752-.09.05-.188.137-.292.261-.106.124-.246.318-.42.581l-.514-.34c.332-.501.652-.875.956-1.12.306-.248.668-.372 1.08-.372z"/>
+  </g>
+  <g class="kata_svg_text">
+    <!-- Legend text -->
+    <path d="m135 350c-.94.455-2.17.683-3.68.683-1.98 0-3.53-.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32.159 3.18.476v2.79c-.862-.515-1.84-.773-2.95-.773-1.21 0-2.19.381-2.93 1.14-.743.761-1.11 1.79-1.11 3.09 0 1.25.35 2.24 1.05 2.98.7.737 1.64 1.1 2.83 1.1 1.13 0 2.17-.276 3.11-.827v2.65zm6.35.683c-1.53 0-2.74-.429-3.62-1.28-.875-.863-1.31-2.03-1.31-3.5 0-1.52.455-2.71 1.37-3.57.91-.862 2.14-1.29 3.69-1.29 1.53 0 2.72.432 3.59 1.29.868.857 1.3 1.99 1.3 3.4 0 1.53-.45 2.73-1.35 3.62-.893.886-2.12 1.33-3.68 1.33zm.072-7.48c-.671 0-1.19.23-1.56.691-.371.462-.557 1.11-.557 1.96 0 1.77.713 2.65 2.14 2.65 1.36 0 2.04-.907 2.04-2.72 0-1.72-.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-.509-2.14-1.53-2.14-.492 0-.896.188-1.21.566-.318.377-.477.856-.477 1.44v5.25h-2.84v-9.2h2.84v1.46h.036c.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-.243v-2.3c.467.282.931.492 1.39.629.467.138.907.207 1.32.207.503 0 .899-.069 1.19-.207.294-.137.441-.347.441-.629 0-.179-.066-.329-.198-.449s-.303-.224-.512-.314c-.204-.09-.429-.171-.674-.243-.246-.072-.482-.153-.71-.242-.365-.138-.689-.285-.97-.441-.276-.161-.509-.347-.701-.557-.186-.209-.329-.452-.431-.727-.096-.276-.144-.602-.144-.98 0-.515.111-.958.332-1.33.228-.372.528-.674.899-.908.377-.239.806-.413 1.28-.521.485-.114.988-.171 1.51-.171.407 0 .821.033 1.24.099.419.06.832.15 1.24.27v2.19c-.36-.21-.746-.365-1.16-.467-.408-.108-.809-.162-1.2-.162-.186 0-.363.018-.53.054-.162.03-.306.078-.431.144-.126.06-.225.14-.297.242-.072.096-.108.207-.108.333 0 .167.054.311.162.431s.249.225.422.314c.174.084.366.162.575.234.216.066.428.135.638.207.377.131.719.275 1.02.431.306.156.566.338.782.548.222.21.389.455.503.737.12.281.18.617.18 1.01 0 .545-.12 1.01-.36 1.4-.233.384-.548.698-.943.944-.389.239-.841.413-1.36.521-.509.114-1.04.171-1.59.171-1.01 0-1.95-.156-2.81-.468zm14.3.135c-.419.222-1.05.333-1.9.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-.808v2.79h2.07v2.09h-2.07v3.72c0 .958.38 1.44 1.14 1.44.299 0 .608-.086.925-.26v2.1zm9.26.108h-2.69v-1.32h-.036c-.617 1.03-1.53 1.55-2.74 1.55-.893 0-1.6-.252-2.11-.755-.509-.509-.763-1.19-.763-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.395-.204.934-.383 1.62-.539.689-.156 1.32-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.923.12-1.38.536-1.38 1.25 0 .323.111.59.333.8.227.203.533.305.916.305.533 0 .967-.183 1.3-.548.335-.371.503-.838.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-.509-2.14-1.53-2.14-.491 0-.895.188-1.21.566-.317.377-.476.856-.476 1.44v5.25h-2.84v-9.2h2.84v1.46h.036c.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-.108c-.419.222-1.05.333-1.9.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-.808v2.79h2.07v2.09h-2.07v3.72c0 .958.38 1.44 1.14 1.44.299 0 .608-.086.925-.26v2.1z"/>
+    <path d="m491 338-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c.144.485.23.913.26 1.28h.054c.042-.402.135-.842.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-.036c-.616 1.03-1.53 1.55-2.74 1.55-.892 0-1.6-.252-2.11-.755-.509-.509-.764-1.19-.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.395-.204.934-.383 1.62-.539.689-.156 1.32-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.922.12-1.38.536-1.38 1.25 0 .323.11.59.332.8.228.203.533.305.916.305.534 0 .968-.183 1.3-.548.336-.371.503-.838.503-1.4zm10.9-2.9c-.341-.186-.739-.279-1.2-.279-.616 0-1.1.228-1.45.683-.347.449-.521 1.06-.521 1.84v4.39h-2.84v-9.2h2.84v1.71h.036c.449-1.25 1.26-1.87 2.43-1.87.299 0 .533.036.7.108v2.62zm2.84-4.02c-.479 0-.871-.141-1.18-.423-.305-.287-.458-.638-.458-1.05 0-.425.153-.773.458-1.04.306-.27.698-.404 1.18-.404.486 0 .878.134 1.18.404.306.269.459.617.459 1.04 0 .431-.153.785-.459 1.06-.299.276-.691.414-1.18.414zm1.4 10.7h-2.84v-9.2h2.84zm10 0h-2.69v-1.32h-.036c-.617 1.03-1.53 1.55-2.74 1.55-.892 0-1.6-.252-2.11-.755-.509-.509-.764-1.19-.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.396-.204.935-.383 1.62-.539.688-.156 1.31-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.922.12-1.38.536-1.38 1.25 0 .323.111.59.333.8.227.203.533.305.916.305.533 0 .968-.183 1.3-.548.335-.371.503-.838.503-1.4zm7.79 2.67h-.036v1.07h-2.84v-13.6h2.84v5.8h.036c.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1.408 2.74 1.22.641.815.961 1.93.961 3.34 0 1.53-.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-.432-2.57-1.29zm-.081-3.88v.943c0 .593.17 1.08.512 1.47.341.39.779.584 1.31.584.646 0 1.15-.248 1.5-.745.359-.503.539-1.21.539-2.13 0-.76-.165-1.35-.494-1.78-.324-.431-.788-.646-1.39-.646-.569 0-1.04.212-1.42.638-.372.425-.557.979-.557 1.66zm11.5 4.95h-2.84v-13.6h2.84zm10.7-3.79h-6c.096 1.34.937 2 2.52 2 1.01 0 1.9-.239 2.67-.719v2.05c-.851.455-1.96.683-3.32.683-1.48 0-2.64-.411-3.46-1.23-.82-.827-1.23-1.98-1.23-3.45 0-1.53.443-2.74 1.33-3.63.887-.892 1.98-1.34 3.27-1.34 1.34 0 2.38.399 3.11 1.2.737.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-.533-1.98-1.6-1.98-.456 0-.851.189-1.19.566-.33.377-.53.848-.602 1.41h3.39z"/>
+    <!-- Ket text -->
+    <path d="m259 156h1.25v15.1h-1.25z"/>
+    <path d="m266 157c-.372 0-.684.11-.936.332s-.454.54-.608.956-.264.924-.328 1.52c-.064.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.46-1.16s.474-1.98.474-3.6c0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.866 2.29.866 4.14 0 1.91-.308 3.36-.928 4.34-.618.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.856-2.31-.856-4.18c0-.994.088-1.85.264-2.58s.42-1.32.738-1.8c.316-.472.694-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m273 156 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m156 45.5h1.25v15.1h-1.25z"/>
+    <path d="m164 45.9h.446c-.032.519-.05 1.24-.05 2.16v6.92c0 .313.018.55.054.709.034.159.096.289.186.389s.218.178.384.235c.168.0568.38.1.634.13.254.0298.588.05 1 .0608v.592h-5.99v-.592c.6-.027 1.03-.0634 1.29-.109.256-.0458.452-.115.586-.207.136-.0918.234-.222.296-.389.062-.168.094-.44.094-.819v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.172 0-.418.0892-.738.267-.318.178-.712.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m170 44.8 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m224 88.4h1.25v15.1h-1.25z"/>
+    <path d="m233 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m242 87.6 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m224 222h1.25v15.1h-1.25z"/>
+    <path d="m229 228h9.99v1.08h-9.99z"/>
+    <path d="m242 221 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m149 265h9.99v1.08h-9.99z"/>
+    <path d="m162 259h1.25v15.1h-1.25z"/>
+    <path d="m171 259h.446c-.032.52-.05 1.24-.05 2.16v6.92c0 .314.018.55.054.71.034.16.096.29.186.39s.218.178.386.234c.166.056.378.1.632.13s.588.05 1 .06v.592h-5.99v-.592c.6-.026 1.03-.062 1.29-.108.256-.046.452-.116.586-.208.136-.092.234-.222.296-.388.062-.168.094-.44.094-.82v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.172 0-.418.088-.738.266-.318.178-.712.424-1.18.738l-.358-.624 3.79-2.26z"/>
+    <path d="m176 258 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m44.7 163h9.99v1.08h-9.99z"/>
+    <path d="m57.9 156h1.25v15.1h-1.25z"/>
+    <path d="m65.7 157c-.373 0-.685.11-.936.332s-.454.54-.608.956-.264.924-.328 1.52c-.0648.598-.0972 1.27-.0972 2.02 0 1.76.163 3.05.49 3.88.327.824.833 1.24 1.52 1.24.654 0 1.14-.386 1.45-1.16.316-.776.474-1.98.474-3.6 0-1.24-.081-2.25-.243-3.02s-.388-1.32-.677-1.66c-.289-.334-.639-.502-1.05-.502zm.0406-.69c1.18 0 2.06.458 2.64 1.37.578.914.867 2.29.867 4.14 0 1.91-.309 3.36-.928 4.34-.619.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38-.57-.918-.855-2.31-.855-4.18 0-.994.0878-1.85.263-2.58s.422-1.32.738-1.8c.316-.472.696-.822 1.14-1.05.443-.228.927-.342 1.45-.342z"/>
+    <path d="m72 156 3.23 7.28v.598l-3.23 7.29-.867-.308 2.6-7.28-2.6-7.29.867-.292z"/>
+    <path d="m74.1 228h9.99v1.08h-9.99z"/>
+    <path d="m87.3 221h1.25v15.1h-1.25z"/>
+    <path d="m96.2 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m105 220 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m73.4 94.2h9.99v1.08h-9.99z"/>
+    <path d="m86.6 87.9h1.25v15.1h-1.25z"/>
+    <path d="m91.1 94.2h9.99v1.08h-9.99z"/>
+    <path d="m104 87.2 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m608 156h1.25v15.1h-1.25z"/>
+    <path d="m616 157c-.374 0-.686.11-.936.332-.252.222-.454.54-.608.956s-.264.924-.328 1.52c-.066.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.46-1.16s.474-1.98.474-3.6c0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.868 2.29.868 4.14 0 1.91-.31 3.36-.928 4.34-.618.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.854-2.31-.854-4.18c0-.994.088-1.85.262-2.58.176-.724.422-1.32.738-1.8.316-.472.696-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m622 156 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m505 45.5h1.25v15.1h-1.25z"/>
+    <path d="m514 45.9h.444c-.032.519-.048 1.24-.048 2.16v6.92c0 .313.018.55.054.709.034.159.096.289.186.389.088.1.216.178.384.235s.378.1.632.13c.254.0298.59.05 1.01.0608v.592h-5.99v-.592c.6-.027 1.03-.0634 1.28-.109.258-.0458.454-.115.588-.207.136-.0918.234-.222.296-.389.062-.168.094-.44.094-.819v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.174 0-.42.0892-.738.267-.318.178-.714.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m519 44.8 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m574 88.4h1.25v15.1h-1.25z"/>
+    <path d="m583 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m591 87.6 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m574 222h1.25v15.1h-1.25z"/>
+    <path d="m578 228h9.99v1.08h-9.99z"/>
+    <path d="m591 221 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m498 265h9.99v1.08h-9.99z"/>
+    <path d="m511 259h1.25v15.1h-1.25z"/>
+    <path d="m520 259h.446c-.034.52-.05 1.24-.05 2.16v6.92c0 .314.018.55.054.71.034.16.096.29.186.39.088.1.216.178.384.234s.378.1.632.13.59.05 1.01.06v.592h-5.99v-.592c.6-.026 1.03-.062 1.28-.108.258-.046.454-.116.588-.208.136-.092.234-.222.296-.388.062-.168.094-.44.094-.82v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.174 0-.42.088-.738.266s-.714.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m525 258 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m394 163h9.99v1.08h-9.99z"/>
+    <path d="m407 156h1.25v15.1h-1.25z"/>
+    <path d="m415 157c-.374 0-.686.11-.936.332-.252.222-.454.54-.608.956s-.264.924-.328 1.52c-.066.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.45-1.16.318-.776.476-1.98.476-3.6 0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.868 2.29.868 4.14 0 1.91-.31 3.36-.928 4.34-.62.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.854-2.31-.854-4.18c0-.994.088-1.85.262-2.58.176-.724.422-1.32.738-1.8.316-.472.696-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m421 156 3.23 7.28v.598l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29.866-.292z"/>
+    <path d="m423 228h9.99v1.08h-9.99z"/>
+    <path d="m436 221h1.25v15.1h-1.25z"/>
+    <path d="m445 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m454 220 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m423 94.2h9.99v1.08h-9.99z"/>
+    <path d="m436 87.9h1.25v15.1h-1.25z"/>
+    <path d="m440 94.2h9.99v1.08h-9.99z"/>
+    <path d="m453 87.2 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+  </g>
 </svg>
diff --git a/katas/content/deutsch_algo/media/Plus_state.svg b/katas/content/deutsch_algo/media/Plus_state.svg
index 36b860da..6ad446f8 100644
--- a/katas/content/deutsch_algo/media/Plus_state.svg
+++ b/katas/content/deutsch_algo/media/Plus_state.svg
@@ -1,141 +1,145 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<svg width="660" height="334" fill="none" version="1.1" viewBox="0 0 660 334" xmlns="http://www.w3.org/2000/svg">
-    <style>
-        :root {
-            --kata-svg-stroke: #222;
-            --kata-svg-fill: #fff;
-            --kata-svg-path: #777;
-            --kata-svg-accent: #06c;
-        }
-        @media(prefers-color-scheme: dark) {
-        :root {
-            --kata-svg-stroke: #eee;
-            --kata-svg-fill: #111;
-            --kata-svg-path: #bbb;
-            --kata-svg-accent: #08f;
-        }
-        }
-        .kata_svg_path {
-            stroke: var(--kata-svg-path);
-        }
-        .kata_svg_text {
-            fill: var(--kata-svg-stroke);
-        }
-        .kata_svg_point {
-            fill: var(--kata-svg-fill);
-            stroke: var(--kata-svg-stroke);
-        }
-        .kata_svg_fill_accent {
-            fill: var(--kata-svg-accent);
-        }
-        .kata_svg_stroke_accent {
-            stroke: var(--kata-svg-accent);
-        }
-    </style>
-    <g clip-path="url(#clip0_4_498)">
-        <g clip-rule="evenodd" fill-rule="evenodd">
-            <!-- Large circles -->
-            <g class="kata_svg_path">
-                <path d="m7.1 146c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z" stroke-miterlimit="8" stroke-width="1.38" />
-                <path d="m358 146c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z" stroke-miterlimit="8" stroke-width="1.38" />
-            </g>
-            <!-- Normal points -->
-            <g class="kata_svg_point">
-                <path d="m140 7.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-                <path d="m1.3 147c0-3.26 2.64-5.9 5.9-5.9 3.26 0 5.9 2.64 5.9 5.9s-2.64 5.9-5.9 5.9c-3.26 0-5.9-2.64-5.9-5.9z" />
-                <path d="m140 286c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-                <path d="m240 243c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-                <path d="m40.3 50.2c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z" />
-                <path d="m40.3 243c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-                <path d="m491 7.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-                <path d="m352 147c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-                <path d="m491 286c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-                <path d="m591 243c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-                <path d="m391 50.2c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z" />
-                <path d="m391 243c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            </g>
-            <!-- Arrows -->
-            <g class="kata_svg_fill_accent" >
-                <path d="m291 146h16.5l-0.688 0.688v-96.5l0.688 0.687h-54.6v-1.38h55.3v97.9h-17.2v-1.38zm-33-90.7-6.13-5.11 6.13-5.11c0.292-0.243 0.726-0.204 0.968 0.088 0.244 0.292 0.204 0.725-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.243 0.332 0.677 0.088 0.968-0.242 0.292-0.676 0.331-0.968 0.088z" />
-                <path d="m642 146h16.5l-0.688 0.688v-96.5l0.688 0.687h-54.6v-1.38h55.3v97.9h-17.2v-1.38zm-33-90.7-6.13-5.11 6.13-5.11c0.292-0.243 0.726-0.204 0.968 0.088 0.244 0.292 0.204 0.725-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.243 0.332 0.677 0.088 0.968-0.242 0.292-0.676 0.331-0.968 0.088z" />
-            </g>
-            <!-- From points -->
-            <g class="kata_svg_point kata_svg_stroke_accent">
-                <path d="m279 147c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z" />
-                <path d="m630 147c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z" />
-            </g>
-            <!-- Target points -->
-            <g class="kata_svg_fill_accent">
-                <path d="m240 50.1c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z" />
-                <path d="m591 50.1c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z" />
-            </g>
-        </g>
-        <g class="kata_svg_text" clip-rule="evenodd" fill-rule="evenodd">
-            <!-- Legend text -->
-            <path d="m120 319c-0.941 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.863-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.701 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.73 0.432 3.59 1.29 0.869 0.857 1.3 1.99 1.3 3.4 0 1.53-0.449 2.73-1.35 3.62-0.892 0.886-2.12 1.33-3.67 1.33zm0.071-7.48c-0.67 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.05 1.26 3.05 3.79v5.63zm1.65-0.243v-2.3c0.468 0.282 0.932 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.898-0.069 1.19-0.207 0.293-0.137 0.44-0.347 0.44-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.302-0.224-0.512-0.314c-0.204-0.09-0.428-0.171-0.674-0.243-0.245-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.688-0.285-0.97-0.441-0.275-0.161-0.509-0.347-0.701-0.557-0.185-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.333-1.33 0.227-0.372 0.527-0.674 0.898-0.908 0.378-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.408 0 0.821 0.033 1.24 0.099 0.419 0.06 0.833 0.15 1.24 0.27v2.19c-0.359-0.21-0.746-0.365-1.16-0.467-0.407-0.108-0.809-0.162-1.2-0.162-0.186 0-0.362 0.018-0.53 0.054-0.162 0.03-0.305 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.107 0.207-0.107 0.333 0 0.167 0.053 0.311 0.161 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.429 0.135 0.638 0.207 0.378 0.131 0.719 0.275 1.02 0.431 0.305 0.156 0.566 0.338 0.781 0.548 0.222 0.21 0.39 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.359 1.4-0.234 0.384-0.548 0.698-0.944 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.42 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.926-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1z" />
-            <path d="m476 307-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.143 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.617 0-1.1 0.228-1.45 0.683-0.348 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.42-1.87 0.3 0 0.534 0.036 0.701 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.485 0 0.878 0.134 1.18 0.404 0.306 0.269 0.458 0.617 0.458 1.04 0 0.431-0.152 0.785-0.458 1.06-0.299 0.276-0.692 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.64 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.778 0.584 1.31 0.584 0.647 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.095 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z" />
-            <!-- Ket text -->
-            <path d="m242 141h1.25v15.1h-1.25v-15.1z" />
-            <path d="m250 142c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956-0.154 0.418-0.264 0.924-0.328 1.52-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.774 0.476-1.98 0.476-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.62 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.854-2.31-0.854-4.18 0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.79 0.316-0.474 0.696-0.824 1.14-1.05 0.442-0.228 0.926-0.34 1.45-0.34z" />
-            <path d="m256 140 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.29z" />
-            <path d="m140 30.2h1.25v15.1h-1.25v-15.1z" />
-            <path d="m148 30.6h0.446c-0.033 0.519-0.049 1.24-0.049 2.16v6.92c0 0.313 0.018 0.55 0.053 0.709s0.097 0.289 0.186 0.389 0.218 0.178 0.385 0.235c0.168 0.0568 0.378 0.1 0.632 0.13 0.254 0.0296 0.589 0.05 1 0.0608v0.592h-5.99v-0.592c0.599-0.0272 1.03-0.0636 1.28-0.11 0.257-0.0458 0.453-0.115 0.588-0.207s0.234-0.222 0.296-0.389c0.062-0.168 0.093-0.44 0.093-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.075-0.1-0.186-0.15-0.332-0.15-0.173 0-0.419 0.0892-0.737 0.268-0.319 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z" />
-            <path d="m154 29.4 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z" />
-            <path d="m208 73h1.25v15.1h-1.25v-15.1z" />
-            <path d="m217 74.6h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m226 72.3 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m208 206h1.25v15.1h-1.25v-15.1z" />
-            <path d="m213 212h9.99v1.08h-9.99v-1.08z" />
-            <path d="m226 205 3.23 7.28v0.598l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m133 250h9.99v1.08h-9.99v-1.08z" />
-            <path d="m146 243h1.25v15.1h-1.25v-15.1z" />
-            <path d="m154 244h0.446c-0.033 0.518-0.049 1.24-0.049 2.16v6.92c0 0.312 0.018 0.55 0.053 0.708 0.035 0.16 0.097 0.29 0.186 0.39s0.218 0.178 0.385 0.234c0.168 0.058 0.378 0.1 0.632 0.13s0.59 0.05 1.01 0.062v0.59h-5.99v-0.59c0.599-0.028 1.03-0.064 1.28-0.11 0.257-0.046 0.453-0.114 0.588-0.206s0.234-0.222 0.296-0.39 0.093-0.44 0.093-0.818v-6.57c0-0.216-0.038-0.374-0.113-0.474-0.076-0.1-0.187-0.15-0.333-0.15-0.173 0-0.419 0.088-0.737 0.268-0.319 0.178-0.714 0.424-1.18 0.736l-0.356-0.624 3.79-2.26z" />
-            <path d="m160 243 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m28.4 147h9.99v1.08h-9.99v-1.08z" />
-            <path d="m41.6 141h1.25v15.1h-1.25v-15.1z" />
-            <path d="m49.5 142c-0.373 0-0.685 0.11-0.936 0.332s-0.454 0.54-0.608 0.956c-0.154 0.418-0.263 0.924-0.328 1.52-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.824 0.833 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.696-0.824 1.14-1.05 0.443-0.228 0.927-0.34 1.45-0.34z" />
-            <path d="m55.8 140 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.29z" />
-            <path d="m57.9 212h9.99v1.08h-9.99v-1.08z" />
-            <path d="m71 206h1.25v15.1h-1.25v-15.1z" />
-            <path d="m79.9 207h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m88.4 205 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.29z" />
-            <path d="m57.2 78.8h9.99v1.08h-9.99v-1.08z" />
-            <path d="m70.3 72.5h1.25v15.1h-1.25v-15.1z" />
-            <path d="m74.8 78.8h9.99v1.08h-9.99v-1.08z" />
-            <path d="m87.7 71.8 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z" />
-            <path d="m592 141h1.25v15.1h-1.25v-15.1z" />
-            <path d="m600 142c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956-0.154 0.418-0.262 0.924-0.328 1.52-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.824 0.832 1.24 1.52 1.24 0.652 0 1.14-0.388 1.45-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.08-2.25-0.242-3.02-0.164-0.77-0.388-1.32-0.678-1.66-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.856-2.31-0.856-4.18 0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.696-0.824 1.14-1.05 0.444-0.228 0.926-0.34 1.45-0.34z" />
-            <path d="m606 140 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z" />
-            <path d="m489 30.2h1.25v15.1h-1.25v-15.1z" />
-            <path d="m498 30.6h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.016 0.55 0.052 0.709 0.034 0.159 0.098 0.289 0.186 0.389 0.09 0.1 0.218 0.178 0.386 0.235 0.166 0.0568 0.378 0.1 0.632 0.13 0.254 0.0296 0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.0272 1.03-0.0636 1.29-0.11 0.256-0.0458 0.452-0.115 0.588-0.207 0.134-0.0918 0.232-0.222 0.294-0.389 0.064-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.0892-0.738 0.268-0.318 0.178-0.712 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z" />
-            <path d="m504 29.4 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m558 73h1.25v15.1h-1.25v-15.1z" />
-            <path d="m567 74.6h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m575 72.3 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-            <path d="m558 206h1.25v15.1h-1.25v-15.1z" />
-            <path d="m563 212h9.99v1.08h-9.99v-1.08z" />
-            <path d="m575 205 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m483 250h9.99v1.08h-9.99v-1.08z" />
-            <path d="m496 243h1.25v15.1h-1.25v-15.1z" />
-            <path d="m504 244h0.446c-0.032 0.518-0.048 1.24-0.048 2.16v6.92c0 0.312 0.016 0.55 0.052 0.708 0.036 0.16 0.098 0.29 0.186 0.39 0.09 0.1 0.218 0.178 0.386 0.234 0.166 0.058 0.378 0.1 0.632 0.13s0.588 0.05 1 0.062v0.59h-5.99v-0.59c0.6-0.028 1.03-0.064 1.29-0.11 0.256-0.046 0.452-0.114 0.588-0.206 0.134-0.092 0.232-0.222 0.294-0.39 0.064-0.168 0.094-0.44 0.094-0.818v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.088-0.738 0.268-0.318 0.178-0.712 0.424-1.18 0.736l-0.358-0.624 3.79-2.26z" />
-            <path d="m510 243 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z" />
-            <path d="m378 147h9.99v1.08h-9.99v-1.08z" />
-            <path d="m391 141h1.25v15.1h-1.25v-15.1z" />
-            <path d="m399 142c-0.372 0-0.684 0.11-0.936 0.332s-0.454 0.54-0.608 0.956c-0.154 0.418-0.264 0.924-0.328 1.52-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.824 0.832 1.24 1.52 1.24 0.654 0 1.14-0.388 1.46-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.386-1.32-0.676-1.66c-0.29-0.334-0.638-0.502-1.05-0.502zm0.04-0.688c1.18 0 2.07 0.456 2.64 1.37 0.578 0.912 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.856-2.31-0.856-4.18 0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.694-0.824 1.14-1.05 0.444-0.228 0.926-0.34 1.45-0.34z" />
-            <path d="m406 140 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z" />
-            <path d="m408 212h9.99v1.08h-9.99v-1.08z" />
-            <path d="m421 206h1.25v15.1h-1.25v-15.1z" />
-            <path d="m430 207h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z" />
-            <path d="m438 205 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z" />
-            <path d="m407 78.8h9.99v1.08h-9.99v-1.08z" />
-            <path d="m420 72.5h1.25v15.1h-1.25v-15.1z" />
-            <path d="m425 78.8h9.99v1.08h-9.99v-1.08z" />
-            <path d="m438 71.8 3.24 7.28v0.6l-3.24 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z" />
-        </g>
-    </g>
-    <defs>
-        <clipPath id="clip0_4_498">
-            <rect transform="translate(.6 .8)" width="659" height="332" />
-        </clipPath>
-    </defs>
+<svg width="685" height="380" fill="none" version="1.1" xmlns="http://www.w3.org/2000/svg">
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
+  <!-- Large circles -->
+  <g class="kata_svg_path">
+    <path d="m24.1 163c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z"/>
+    <path d="m375 163c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z"/>
+  </g>
+  <!-- Target points -->
+  <g class="kata_svg_fill_accent">
+    <path d="m257 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m608 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+  </g>
+  <!-- Normal points -->
+  <g class="kata_svg_point">
+    <path d="m18 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m508 23.7c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m508 302c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m157 23.8c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m157 302c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m257 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m57.3 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m369 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m408 260c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m57.3 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m408 66.6c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+    <path d="m608 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+  </g>
+  <!-- From point -->
+  <g class="kata_svg_point kata_svg_stroke_accent">
+    <path d="m647 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z"/>
+    <path d="m296 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z"/>
+  </g>
+  <!-- Arrows -->
+  <g class="kata_svg_path kata_svg_stroke_accent" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2">
+    <path d="m308.12 163.05h16.128v-96.466h-54.244l5.6085-4.3192-5.6085 4.3192 5.6085 4.7704" image-rendering="auto"/>
+    <path d="m659.97 162.9h16.128v-96.466h-55.326l5.6085-4.3192-5.6085 4.3192 5.6085 4.7704" image-rendering="auto"/>
+  </g>
+  <g class="kata_svg_text">
+    <!-- Legend text -->
+    <path d="m135 350c-.94.455-2.17.683-3.68.683-1.98 0-3.53-.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32.159 3.18.476v2.79c-.862-.515-1.84-.773-2.95-.773-1.21 0-2.19.381-2.93 1.14-.743.761-1.11 1.79-1.11 3.09 0 1.25.35 2.24 1.05 2.98.7.737 1.64 1.1 2.83 1.1 1.13 0 2.17-.276 3.11-.827v2.65zm6.35.683c-1.53 0-2.74-.429-3.62-1.28-.875-.863-1.31-2.03-1.31-3.5 0-1.52.455-2.71 1.37-3.57.91-.862 2.14-1.29 3.69-1.29 1.53 0 2.72.432 3.59 1.29.868.857 1.3 1.99 1.3 3.4 0 1.53-.45 2.73-1.35 3.62-.893.886-2.12 1.33-3.68 1.33zm.072-7.48c-.671 0-1.19.23-1.56.691-.371.462-.557 1.11-.557 1.96 0 1.77.713 2.65 2.14 2.65 1.36 0 2.04-.907 2.04-2.72 0-1.72-.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-.509-2.14-1.53-2.14-.492 0-.896.188-1.21.566-.318.377-.477.856-.477 1.44v5.25h-2.84v-9.2h2.84v1.46h.036c.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-.243v-2.3c.467.282.931.492 1.39.629.467.138.907.207 1.32.207.503 0 .899-.069 1.19-.207.294-.137.441-.347.441-.629 0-.179-.066-.329-.198-.449s-.303-.224-.512-.314c-.204-.09-.429-.171-.674-.243-.246-.072-.482-.153-.71-.242-.365-.138-.689-.285-.97-.441-.276-.161-.509-.347-.701-.557-.186-.209-.329-.452-.431-.727-.096-.276-.144-.602-.144-.98 0-.515.111-.958.332-1.33.228-.372.528-.674.899-.908.377-.239.806-.413 1.28-.521.485-.114.988-.171 1.51-.171.407 0 .821.033 1.24.099.419.06.832.15 1.24.27v2.19c-.36-.21-.746-.365-1.16-.467-.408-.108-.809-.162-1.2-.162-.186 0-.363.018-.53.054-.162.03-.306.078-.431.144-.126.06-.225.14-.297.242-.072.096-.108.207-.108.333 0 .167.054.311.162.431s.249.225.422.314c.174.084.366.162.575.234.216.066.428.135.638.207.377.131.719.275 1.02.431.306.156.566.338.782.548.222.21.389.455.503.737.12.281.18.617.18 1.01 0 .545-.12 1.01-.36 1.4-.233.384-.548.698-.943.944-.389.239-.841.413-1.36.521-.509.114-1.04.171-1.59.171-1.01 0-1.95-.156-2.81-.468zm14.3.135c-.419.222-1.05.333-1.9.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-.808v2.79h2.07v2.09h-2.07v3.72c0 .958.38 1.44 1.14 1.44.299 0 .608-.086.925-.26v2.1zm9.26.108h-2.69v-1.32h-.036c-.617 1.03-1.53 1.55-2.74 1.55-.893 0-1.6-.252-2.11-.755-.509-.509-.763-1.19-.763-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.395-.204.934-.383 1.62-.539.689-.156 1.32-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.923.12-1.38.536-1.38 1.25 0 .323.111.59.333.8.227.203.533.305.916.305.533 0 .967-.183 1.3-.548.335-.371.503-.838.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-.509-2.14-1.53-2.14-.491 0-.895.188-1.21.566-.317.377-.476.856-.476 1.44v5.25h-2.84v-9.2h2.84v1.46h.036c.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-.108c-.419.222-1.05.333-1.9.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-.808v2.79h2.07v2.09h-2.07v3.72c0 .958.38 1.44 1.14 1.44.299 0 .608-.086.925-.26v2.1z"/>
+    <path d="m491 338-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c.144.485.23.913.26 1.28h.054c.042-.402.135-.842.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-.036c-.616 1.03-1.53 1.55-2.74 1.55-.892 0-1.6-.252-2.11-.755-.509-.509-.764-1.19-.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.395-.204.934-.383 1.62-.539.689-.156 1.32-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.922.12-1.38.536-1.38 1.25 0 .323.11.59.332.8.228.203.533.305.916.305.534 0 .968-.183 1.3-.548.336-.371.503-.838.503-1.4zm10.9-2.9c-.341-.186-.739-.279-1.2-.279-.616 0-1.1.228-1.45.683-.347.449-.521 1.06-.521 1.84v4.39h-2.84v-9.2h2.84v1.71h.036c.449-1.25 1.26-1.87 2.43-1.87.299 0 .533.036.7.108v2.62zm2.84-4.02c-.479 0-.871-.141-1.18-.423-.305-.287-.458-.638-.458-1.05 0-.425.153-.773.458-1.04.306-.27.698-.404 1.18-.404.486 0 .878.134 1.18.404.306.269.459.617.459 1.04 0 .431-.153.785-.459 1.06-.299.276-.691.414-1.18.414zm1.4 10.7h-2.84v-9.2h2.84zm10 0h-2.69v-1.32h-.036c-.617 1.03-1.53 1.55-2.74 1.55-.892 0-1.6-.252-2.11-.755-.509-.509-.764-1.19-.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-.333c0-1.01-.545-1.51-1.64-1.51-1.1 0-2.14.326-3.13.979v-2.14c.396-.204.935-.383 1.62-.539.688-.156 1.31-.234 1.88-.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-.62l-1.67.215c-.922.12-1.38.536-1.38 1.25 0 .323.111.59.333.8.227.203.533.305.916.305.533 0 .968-.183 1.3-.548.335-.371.503-.838.503-1.4zm7.79 2.67h-.036v1.07h-2.84v-13.6h2.84v5.8h.036c.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1.408 2.74 1.22.641.815.961 1.93.961 3.34 0 1.53-.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-.432-2.57-1.29zm-.081-3.88v.943c0 .593.17 1.08.512 1.47.341.39.779.584 1.31.584.646 0 1.15-.248 1.5-.745.359-.503.539-1.21.539-2.13 0-.76-.165-1.35-.494-1.78-.324-.431-.788-.646-1.39-.646-.569 0-1.04.212-1.42.638-.372.425-.557.979-.557 1.66zm11.5 4.95h-2.84v-13.6h2.84zm10.7-3.79h-6c.096 1.34.937 2 2.52 2 1.01 0 1.9-.239 2.67-.719v2.05c-.851.455-1.96.683-3.32.683-1.48 0-2.64-.411-3.46-1.23-.82-.827-1.23-1.98-1.23-3.45 0-1.53.443-2.74 1.33-3.63.887-.892 1.98-1.34 3.27-1.34 1.34 0 2.38.399 3.11 1.2.737.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-.533-1.98-1.6-1.98-.456 0-.851.189-1.19.566-.33.377-.53.848-.602 1.41h3.39z"/>
+    <!-- Ket text -->
+    <path d="m259 156h1.25v15.1h-1.25z"/>
+    <path d="m266 157c-.372 0-.684.11-.936.332s-.454.54-.608.956-.264.924-.328 1.52c-.064.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.46-1.16s.474-1.98.474-3.6c0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.866 2.29.866 4.14 0 1.91-.308 3.36-.928 4.34-.618.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.856-2.31-.856-4.18c0-.994.088-1.85.264-2.58s.42-1.32.738-1.8c.316-.472.694-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m273 156 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m156 45.5h1.25v15.1h-1.25z"/>
+    <path d="m164 45.9h.446c-.032.519-.05 1.24-.05 2.16v6.92c0 .313.018.55.054.709.034.159.096.289.186.389s.218.178.384.235c.168.0568.38.1.634.13.254.0298.588.05 1 .0608v.592h-5.99v-.592c.6-.027 1.03-.0634 1.29-.109.256-.0458.452-.115.586-.207.136-.0918.234-.222.296-.389.062-.168.094-.44.094-.819v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.172 0-.418.0892-.738.267-.318.178-.712.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m170 44.8 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m224 88.4h1.25v15.1h-1.25z"/>
+    <path d="m233 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m242 87.6 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m224 222h1.25v15.1h-1.25z"/>
+    <path d="m229 228h9.99v1.08h-9.99z"/>
+    <path d="m242 221 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m149 265h9.99v1.08h-9.99z"/>
+    <path d="m162 259h1.25v15.1h-1.25z"/>
+    <path d="m171 259h.446c-.032.52-.05 1.24-.05 2.16v6.92c0 .314.018.55.054.71.034.16.096.29.186.39s.218.178.386.234c.166.056.378.1.632.13s.588.05 1 .06v.592h-5.99v-.592c.6-.026 1.03-.062 1.29-.108.256-.046.452-.116.586-.208.136-.092.234-.222.296-.388.062-.168.094-.44.094-.82v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.172 0-.418.088-.738.266-.318.178-.712.424-1.18.738l-.358-.624 3.79-2.26z"/>
+    <path d="m176 258 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m44.7 163h9.99v1.08h-9.99z"/>
+    <path d="m57.9 156h1.25v15.1h-1.25z"/>
+    <path d="m65.7 157c-.373 0-.685.11-.936.332s-.454.54-.608.956-.264.924-.328 1.52c-.0648.598-.0972 1.27-.0972 2.02 0 1.76.163 3.05.49 3.88.327.824.833 1.24 1.52 1.24.654 0 1.14-.386 1.45-1.16.316-.776.474-1.98.474-3.6 0-1.24-.081-2.25-.243-3.02s-.388-1.32-.677-1.66c-.289-.334-.639-.502-1.05-.502zm.0406-.69c1.18 0 2.06.458 2.64 1.37.578.914.867 2.29.867 4.14 0 1.91-.309 3.36-.928 4.34-.619.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38-.57-.918-.855-2.31-.855-4.18 0-.994.0878-1.85.263-2.58s.422-1.32.738-1.8c.316-.472.696-.822 1.14-1.05.443-.228.927-.342 1.45-.342z"/>
+    <path d="m72 156 3.23 7.28v.598l-3.23 7.29-.867-.308 2.6-7.28-2.6-7.29.867-.292z"/>
+    <path d="m74.1 228h9.99v1.08h-9.99z"/>
+    <path d="m87.3 221h1.25v15.1h-1.25z"/>
+    <path d="m96.2 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m105 220 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m73.4 94.2h9.99v1.08h-9.99z"/>
+    <path d="m86.6 87.9h1.25v15.1h-1.25z"/>
+    <path d="m91.1 94.2h9.99v1.08h-9.99z"/>
+    <path d="m104 87.2 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m608 156h1.25v15.1h-1.25z"/>
+    <path d="m616 157c-.374 0-.686.11-.936.332-.252.222-.454.54-.608.956s-.264.924-.328 1.52c-.066.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.46-1.16s.474-1.98.474-3.6c0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.868 2.29.868 4.14 0 1.91-.31 3.36-.928 4.34-.618.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.854-2.31-.854-4.18c0-.994.088-1.85.262-2.58.176-.724.422-1.32.738-1.8.316-.472.696-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m622 156 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m505 45.5h1.25v15.1h-1.25z"/>
+    <path d="m514 45.9h.444c-.032.519-.048 1.24-.048 2.16v6.92c0 .313.018.55.054.709.034.159.096.289.186.389.088.1.216.178.384.235s.378.1.632.13c.254.0298.59.05 1.01.0608v.592h-5.99v-.592c.6-.027 1.03-.0634 1.28-.109.258-.0458.454-.115.588-.207.136-.0918.234-.222.296-.389.062-.168.094-.44.094-.819v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.174 0-.42.0892-.738.267-.318.178-.714.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m519 44.8 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m574 88.4h1.25v15.1h-1.25z"/>
+    <path d="m583 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m591 87.6 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m574 222h1.25v15.1h-1.25z"/>
+    <path d="m578 228h9.99v1.08h-9.99z"/>
+    <path d="m591 221 3.23 7.28v.6l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m498 265h9.99v1.08h-9.99z"/>
+    <path d="m511 259h1.25v15.1h-1.25z"/>
+    <path d="m520 259h.446c-.034.52-.05 1.24-.05 2.16v6.92c0 .314.018.55.054.71.034.16.096.29.186.39.088.1.216.178.384.234s.378.1.632.13.59.05 1.01.06v.592h-5.99v-.592c.6-.026 1.03-.062 1.28-.108.258-.046.454-.116.588-.208.136-.092.234-.222.296-.388.062-.168.094-.44.094-.82v-6.57c0-.216-.038-.374-.114-.474s-.186-.15-.332-.15c-.174 0-.42.088-.738.266s-.714.424-1.18.738l-.356-.624 3.79-2.26z"/>
+    <path d="m525 258 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+    <path d="m394 163h9.99v1.08h-9.99z"/>
+    <path d="m407 156h1.25v15.1h-1.25z"/>
+    <path d="m415 157c-.374 0-.686.11-.936.332-.252.222-.454.54-.608.956s-.264.924-.328 1.52c-.066.598-.098 1.27-.098 2.02 0 1.76.164 3.05.49 3.88.328.824.834 1.24 1.52 1.24.654 0 1.14-.386 1.45-1.16.318-.776.476-1.98.476-3.6 0-1.24-.082-2.25-.244-3.02s-.388-1.32-.676-1.66c-.29-.334-.64-.502-1.05-.502zm.04-.69c1.18 0 2.06.458 2.64 1.37.578.914.868 2.29.868 4.14 0 1.91-.31 3.36-.928 4.34-.62.982-1.52 1.47-2.71 1.47-1.17 0-2.04-.46-2.61-1.38s-.854-2.31-.854-4.18c0-.994.088-1.85.262-2.58.176-.724.422-1.32.738-1.8.316-.472.696-.822 1.14-1.05.442-.228.926-.342 1.45-.342z"/>
+    <path d="m421 156 3.23 7.28v.598l-3.23 7.29-.866-.308 2.6-7.28-2.6-7.29.866-.292z"/>
+    <path d="m423 228h9.99v1.08h-9.99z"/>
+    <path d="m436 221h1.25v15.1h-1.25z"/>
+    <path d="m445 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42z"/>
+    <path d="m454 220 3.23 7.28v.598l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29.868-.292z"/>
+    <path d="m423 94.2h9.99v1.08h-9.99z"/>
+    <path d="m436 87.9h1.25v15.1h-1.25z"/>
+    <path d="m440 94.2h9.99v1.08h-9.99z"/>
+    <path d="m453 87.2 3.23 7.28v.6l-3.23 7.29-.868-.308 2.6-7.28-2.6-7.29z"/>
+  </g>
 </svg>
diff --git a/katas/content/grovers_search/media/1_equal_superposition.svg b/katas/content/grovers_search/media/1_equal_superposition.svg
index 62c65e36..74645ae6 100644
--- a/katas/content/grovers_search/media/1_equal_superposition.svg
+++ b/katas/content/grovers_search/media/1_equal_superposition.svg
@@ -1,40 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <svg width="447" height="370" overflow="hidden" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
-    <style>
-        :root {
-            --kata-svg-stroke: #222;
-            --kata-svg-fill: #fff;
-            --kata-svg-path: #777;
-            --kata-svg-accent: #06c;
-        }
-        @media(prefers-color-scheme: dark) {
-        :root {
-            --kata-svg-stroke: #eee;
-            --kata-svg-fill: #111;
-            --kata-svg-path: #bbb;
-            --kata-svg-accent: #08f;
-        }
-        }
-        .kata_svg_path {
-            stroke: var(--kata-svg-path);
-            stroke-width: 10;
-            stroke-linecap: round;
-            fill: none;
-        }
-        .kata_svg_text {
-            fill: var(--kata-svg-stroke);
-        }
-        .kata_svg_point {
-            fill: var(--kata-svg-fill);
-            stroke: var(--kata-svg-stroke);
-        }
-        .kata_svg_fill_accent {
-            fill: var(--kata-svg-accent);
-        }
-        .kata_svg_stroke_accent {
-            stroke: var(--kata-svg-accent);
-        }
-    </style>
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
     <g transform="matrix(.25 0 0 .25 -333 -132)">
         <g class="kata_svg_path">
             <!-- Main circle -->
diff --git a/katas/content/grovers_search/media/2_first_reflection.svg b/katas/content/grovers_search/media/2_first_reflection.svg
index 0ae83d90..61a223ee 100644
--- a/katas/content/grovers_search/media/2_first_reflection.svg
+++ b/katas/content/grovers_search/media/2_first_reflection.svg
@@ -1,40 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <svg width="447" height="370" overflow="hidden" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
-    <style>
-        :root {
-            --kata-svg-stroke: #222;
-            --kata-svg-fill: #fff;
-            --kata-svg-path: #777;
-            --kata-svg-accent: #06c;
-        }
-        @media(prefers-color-scheme: dark) {
-        :root {
-            --kata-svg-stroke: #eee;
-            --kata-svg-fill: #111;
-            --kata-svg-path: #bbb;
-            --kata-svg-accent: #08f;
-        }
-        }
-        .kata_svg_path {
-            stroke: var(--kata-svg-path);
-            stroke-width: 10;
-            stroke-linecap: round;
-            fill: none;
-        }
-        .kata_svg_text {
-            fill: var(--kata-svg-stroke);
-        }
-        .kata_svg_point {
-            fill: var(--kata-svg-fill);
-            stroke: var(--kata-svg-stroke);
-        }
-        .kata_svg_fill_accent {
-            fill: var(--kata-svg-accent);
-        }
-        .kata_svg_stroke_accent {
-            stroke: var(--kata-svg-accent);
-        }
-    </style>
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
     <g transform="matrix(.25 0 0 .25 -333 -132)">
         <g class="kata_svg_path">
             <!-- Main circle -->
diff --git a/katas/content/grovers_search/media/3_second_reflection.svg b/katas/content/grovers_search/media/3_second_reflection.svg
index c0ecbd98..79a75ab8 100644
--- a/katas/content/grovers_search/media/3_second_reflection.svg
+++ b/katas/content/grovers_search/media/3_second_reflection.svg
@@ -1,40 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <svg width="447" height="370" overflow="hidden" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
-    <style>
-        :root {
-            --kata-svg-stroke: #222;
-            --kata-svg-fill: #fff;
-            --kata-svg-path: #777;
-            --kata-svg-accent: #06c;
-        }
-        @media(prefers-color-scheme: dark) {
-        :root {
-            --kata-svg-stroke: #eee;
-            --kata-svg-fill: #111;
-            --kata-svg-path: #bbb;
-            --kata-svg-accent: #08f;
-        }
-        }
-        .kata_svg_path {
-            stroke: var(--kata-svg-path);
-            stroke-width: 10;
-            stroke-linecap: round;
-            fill: none;
-        }
-        .kata_svg_text {
-            fill: var(--kata-svg-stroke);
-        }
-        .kata_svg_point {
-            fill: var(--kata-svg-fill);
-            stroke: var(--kata-svg-stroke);
-        }
-        .kata_svg_fill_accent {
-            fill: var(--kata-svg-accent);
-        }
-        .kata_svg_stroke_accent {
-            stroke: var(--kata-svg-accent);
-        }
-    </style>
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
     <g transform="matrix(.25 0 0 .25 -333 -132)">
         <g class="kata_svg_path">
             <!-- Main circle -->
diff --git a/katas/content/grovers_search/media/4_measurement.svg b/katas/content/grovers_search/media/4_measurement.svg
index bec5cc7d..09139353 100644
--- a/katas/content/grovers_search/media/4_measurement.svg
+++ b/katas/content/grovers_search/media/4_measurement.svg
@@ -1,40 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <svg width="447" height="370" overflow="hidden" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
-    <style>
-        :root {
-            --kata-svg-stroke: #222;
-            --kata-svg-fill: #fff;
-            --kata-svg-path: #777;
-            --kata-svg-accent: #06c;
-        }
-        @media(prefers-color-scheme: dark) {
-        :root {
-            --kata-svg-stroke: #eee;
-            --kata-svg-fill: #111;
-            --kata-svg-path: #bbb;
-            --kata-svg-accent: #08f;
-        }
-        }
-        .kata_svg_path {
-            stroke: var(--kata-svg-path);
-            stroke-width: 10;
-            stroke-linecap: round;
-            fill: none;
-        }
-        .kata_svg_text {
-            fill: var(--kata-svg-stroke);
-        }
-        .kata_svg_point {
-            fill: var(--kata-svg-fill);
-            stroke: var(--kata-svg-stroke);
-        }
-        .kata_svg_fill_accent {
-            fill: var(--kata-svg-accent);
-        }
-        .kata_svg_stroke_accent {
-            stroke: var(--kata-svg-accent);
-        }
-    </style>
+<style>
+/* Default values, or theme set explicitly to light */
+:root, [data-theme="light"] {
+    --kata-svg-stroke: #222;
+    --kata-svg-fill: #fff;
+    --kata-svg-path: #777;
+    --kata-svg-accent: #06c;
+}
+/* User has set OS preference for dark. (An explict light theme will override) */
+@media(prefers-color-scheme: dark) {
+    :root {
+        --kata-svg-stroke: #eee;
+        --kata-svg-fill: #111;
+        --kata-svg-path: #bbb;
+        --kata-svg-accent: #08f;
+    }
+}
+/* Explicit dark theme set (should match above dark preference values) */
+[data-theme="dark"] {
+    --kata-svg-stroke: #eee;
+    --kata-svg-fill: #111;
+    --kata-svg-path: #bbb;
+    --kata-svg-accent: #08f;
+}
+/*** Kata specific styles ***/
+.kata_svg_path {
+    stroke: var(--kata-svg-path);
+    stroke-width: 2;
+    stroke-linecap: round;
+    fill: none;
+}
+.kata_svg_text {
+    fill: var(--kata-svg-stroke);
+}
+.kata_svg_point {
+    fill: var(--kata-svg-fill);
+    stroke: var(--kata-svg-stroke);
+}
+.kata_svg_fill_accent {
+    fill: var(--kata-svg-accent);
+}
+.kata_svg_stroke_accent {
+    stroke: var(--kata-svg-accent);
+}
+</style>
     <g transform="matrix(.25 0 0 .25 -333 -132)">
         <g class="kata_svg_path">
             <!-- Main circle -->
diff --git a/language_service/src/state.rs b/language_service/src/state.rs
index 4a3aaa49..3eaed8c1 100644
--- a/language_service/src/state.rs
+++ b/language_service/src/state.rs
@@ -417,6 +417,12 @@ impl<'a> CompilationStateUpdater<'a> {
                         // a less confusing user experience.
                         continue;
                     }
+                    if uri.starts_with(qsc_project::GITHUB_SCHEME) {
+                        // Don't publish diagnostics for GitHub URIs.
+                        // This is temporary workaround to avoid spurious errors when a document
+                        // is opened in single file mode that is part of a read-only GitHub project.
+                        continue;
+                    }
 
                     self.publish_diagnostics_for_doc(state, &uri, errors);
                 }
diff --git a/pip/qsharp/_qsharp.py b/pip/qsharp/_qsharp.py
index a333cba9..aa9cfaae 100644
--- a/pip/qsharp/_qsharp.py
+++ b/pip/qsharp/_qsharp.py
@@ -206,6 +206,9 @@ def run(
     """
     ipython_helper()
 
+    if shots < 1:
+        raise QSharpError("The number of shots must be greater than 0.")
+
     results: List[ShotResult] = []
 
     def print_output(output: Output) -> None:
@@ -215,7 +218,7 @@ def run(
         # Append the output to the last shot's output list
         results[-1]["events"].append(output)
 
-    for _ in range(shots):
+    for shot in range(shots):
         results.append({"result": None, "events": []})
         run_results = get_interpreter().run(
             entry_expr, on_save_events if save_events else print_output
@@ -223,6 +226,10 @@ def run(
         results[-1]["result"] = run_results
         if on_result:
             on_result(results[-1])
+        # For every shot after the first, treat the entry expression as None to trigger
+        # a rerun of the last executed expression without paying the cost for any additional
+        # compilation.
+        entry_expr = None
 
     if save_events:
         return results
diff --git a/pip/src/interpreter.rs b/pip/src/interpreter.rs
index c07a8230..bbaab8cf 100644
--- a/pip/src/interpreter.rs
+++ b/pip/src/interpreter.rs
@@ -194,7 +194,7 @@ impl Interpreter {
     fn run(
         &mut self,
         py: Python,
-        entry_expr: &str,
+        entry_expr: Option<&str>,
         callback: Option<PyObject>,
     ) -> PyResult<PyObject> {
         let mut receiver = OptionalCallbackReceiver { callback, py };
diff --git a/playground/public/index.html b/playground/public/index.html
index 165b4cb3..d7ab7117 100644
--- a/playground/public/index.html
+++ b/playground/public/index.html
@@ -23,5 +23,5 @@
     <script src="libs/monaco/vs/loader.js"></script>
     <script src="libs/main.js"></script>
   </head>
-  <body class="qs-play-body"></body>
+  <body data-theme="light" class="qs-play-body"></body>
 </html>
diff --git a/playground/public/katas.html b/playground/public/katas.html
index 650ee6d9..bb6bd384 100644
--- a/playground/public/katas.html
+++ b/playground/public/katas.html
@@ -13,8 +13,39 @@
       href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/styles/default.min.css"
     />
     <style>
+      /* Override highlight.js if in dark mode */
+      @import url("https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/styles/dark.min.css")
+        screen and (prefers-color-scheme: dark);
+
+      /* Default colors, or theme set explicitly to light */
+      :root,
+      [data-theme="light"] {
+        --kata-primay-color: #222;
+        --kata-background-color: #eee;
+        --kata-background-selected: #ccc;
+        --kata-row-highlight: #ddd;
+      }
+      /* User has set OS preference for dark (explict theme will override) */
+      @media (prefers-color-scheme: dark) {
+        :root {
+          --kata-primay-color: #eee;
+          --kata-background-color: #222;
+          --kata-background-selected: #444;
+          --kata-row-highlight: #333;
+        }
+      }
+      /* Explicit dark theme set (should match above dark preference values) */
+      [data-theme="dark"] {
+        --kata-primay-color: #eee;
+        --kata-background-color: #222;
+        --kata-background-selected: #444;
+        --kata-row-highlight: #333;
+      }
+
       body {
         font-family: system-ui, "Segoe UI", sans-serif;
+        color: var(--kata-primay-color);
+        background-color: var(--kata-background-color);
         margin: 0;
       }
       table {
@@ -23,7 +54,7 @@
         vertical-align: middle;
       }
       table tr:nth-child(2n) {
-        background-color: rgb(252, 252, 255);
+        background-color: var(--kata-row-highlight);
       }
       th,
       td {
@@ -37,7 +68,7 @@
         padding-top: 16px;
         position: fixed;
         overflow-y: auto;
-        background-color: #eee;
+        background-color: var(--kata-background-color);
       }
       .content {
         margin-left: 330px;
@@ -50,14 +81,14 @@
       .nav-item {
         font-size: 1.1em;
         padding: 8px;
-        color: #444;
+        color: var(--kata-primay-color);
       }
       .nav-item:hover {
-        background-color: #ddd;
+        background-color: var(--kata-row-highlight);
       }
       .nav-selected {
-        font-weight: 600;
-        background-color: #ccc;
+        font-weight: bold;
+        background-color: var(--kata-background-selected);
       }
     </style>
   </head>
diff --git a/playground/src/kataViewer.tsx b/playground/src/kataViewer.tsx
index ea9f9950..aa39239f 100644
--- a/playground/src/kataViewer.tsx
+++ b/playground/src/kataViewer.tsx
@@ -199,6 +199,13 @@ async function onload() {
     }
     if (kataIndex < 0) kataIndex = 0;
 
+    // Allow the user to pass ?theme={dark|light} on the URL to set the theme
+    const urlParams = new URLSearchParams(window.location.search);
+    const theme = urlParams.get("theme");
+    if (theme) {
+      document.body.setAttribute("data-theme", theme);
+    }
+
     onRender(kataIndex);
   }
 
diff --git a/resource_estimator/src/lib.rs b/resource_estimator/src/lib.rs
index aa3b0103..95a0ed69 100644
--- a/resource_estimator/src/lib.rs
+++ b/resource_estimator/src/lib.rs
@@ -57,7 +57,7 @@ pub fn estimate_expr(
     let mut stdout = std::io::sink();
     let mut out = GenericReceiver::new(&mut stdout);
     interpreter
-        .run_with_sim(&mut counter, &mut out, expr)
+        .run_with_sim(&mut counter, &mut out, Some(expr))
         .map_err(|e| e.into_iter().map(Error::Interpreter).collect::<Vec<_>>())?
         .map_err(|e| vec![Error::Interpreter(e[0].clone())])?;
     estimate_physical_resources(counter.logical_resources(), params)


Test patch:
diff --git a/compiler/qsc/src/interpret/tests.rs b/compiler/qsc/src/interpret/tests.rs
index 1ade346b..b948b4bf 100644
--- a/compiler/qsc/src/interpret/tests.rs
+++ b/compiler/qsc/src/interpret/tests.rs
@@ -28,7 +28,7 @@ mod given_interpreter {
     ) -> (Result<InterpretResult, Vec<Error>>, String) {
         let mut cursor = Cursor::new(Vec::<u8>::new());
         let mut receiver = CursorReceiver::new(&mut cursor);
-        (interpreter.run(&mut receiver, expr), receiver.dump())
+        (interpreter.run(&mut receiver, Some(expr)), receiver.dump())
     }
 
     fn entry(
diff --git a/compiler/qsc_eval/src/tests.rs b/compiler/qsc_eval/src/tests.rs
index f801ff19..da44e16d 100644
--- a/compiler/qsc_eval/src/tests.rs
+++ b/compiler/qsc_eval/src/tests.rs
@@ -3,8 +3,6 @@
 
 #![allow(clippy::needless_raw_string_hashes)]
 
-use std::rc::Rc;
-
 use crate::{
     backend::{Backend, SparseSim},
     debug::Frame,
@@ -15,7 +13,7 @@ use crate::{
 use expect_test::{expect, Expect};
 use indoc::indoc;
 use qsc_data_structures::{language_features::LanguageFeatures, target::TargetCapabilityFlags};
-use qsc_fir::fir::{self, ExecGraphNode, StmtId};
+use qsc_fir::fir::{self, ExecGraph, StmtId};
 use qsc_fir::fir::{PackageId, PackageStoreLookup};
 use qsc_frontend::compile::{self, compile, PackageStore, SourceMap};
 use qsc_lowerer::map_hir_package_to_fir;
@@ -26,7 +24,7 @@ use qsc_passes::{run_core_passes, run_default_passes, PackageType};
 /// # Errors
 /// Returns the first error encountered during execution.
 pub(super) fn eval_graph(
-    graph: Rc<[ExecGraphNode]>,
+    graph: ExecGraph,
     sim: &mut impl Backend<ResultType = impl Into<val::Result>>,
     globals: &impl PackageStoreLookup,
     package: PackageId,
diff --git a/pip/tests/test_qsharp.py b/pip/tests/test_qsharp.py
index dbd29902..5a8ce6e3 100644
--- a/pip/tests/test_qsharp.py
+++ b/pip/tests/test_qsharp.py
@@ -305,3 +305,21 @@ def test_run_with_result_callback(capsys) -> None:
     stdout = capsys.readouterr().out
     assert stdout == ""
     assert called
+
+
+def test_run_with_invalid_shots_produces_error() -> None:
+    qsharp.init()
+    qsharp.eval('operation Foo() : Result { Message("Hello, world!"); Zero }')
+    try:
+        qsharp.run("Foo()", -1)
+    except qsharp.QSharpError as e:
+        assert str(e) == "The number of shots must be greater than 0."
+    else:
+        assert False
+
+    try:
+        qsharp.run("Foo()", 0)
+    except qsharp.QSharpError as e:
+        assert str(e) == "The number of shots must be greater than 0."
+    else:
+        assert False
diff --git a/samples/testing/operations/README.md b/samples/testing/operations/README.md
new file mode 100644
index 00000000..86a7244b
--- /dev/null
+++ b/samples/testing/operations/README.md
@@ -0,0 +1,34 @@
+# Testing Operations in the QDK
+This sample project demonstrates different approaches to testing operations in the QDK, both via Python and within Q# itself.
+
+## Testing Methods
+
+There are two primary ways to test operations in the QDK:
+
+1. **Using Operation Matrix Representation:**
+   - Use the `dump_operation` Python API to retrieve the operation's representation as a matrix and compare it against the expected matrix.
+
+2. **Q# `Fact` Assertions:**
+   - Use a `Fact` function in your Q# code that uses the `CheckOperationsAreEqual` operation to verify if two operations are identical up to a global phase. The `Fact` function asserts that the check returns `true`.
+
+## Project Structure
+This sample project is a multi-file Q# project that showcases both testing methods. The project structure is as follows:
+
+- src
+    - `BellState.qs`: Q# file containing the `AllBellStates` operation to be tested
+    - `CustomOperation.qs`: Q# file containing the `ApplySWAP` operation to be tested
+    - `OperationEquivalence.qs`: Q# file containing the `TestEquivalence` operation to be called in Python wrapper
+- `qsharp.json`: Q# project manifest file, instructing compiler to include all files in `src` directory.
+- `test_dump_operation.py`: Python wrapper containing tests.
+
+## Installation
+- Install the `qsharp` Python package by following the instructions mentioned [here](https://learn.microsoft.com/azure/quantum/install-overview-qdk#add-support-for-python-and-jupyter-notebooks).
+- Install `pytest` Python package.
+
+## Running the sample
+Open the `samples/testing/operations` directory, and run `pytest` command.
+
+## Reference Links:
+- [Q# Testing guide](https://learn.microsoft.com/azure/quantum/user-guide/testing-debugging).
+- [Getting started with the QDK](https://learn.microsoft.com/azure/quantum/install-overview-qdk)
+- [Getting started with Pytest](https://docs.pytest.org/en/stable/getting-started.html)
diff --git a/samples/testing/operations/qsharp.json b/samples/testing/operations/qsharp.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/samples/testing/operations/qsharp.json
@@ -0,0 +1,1 @@
+{}
diff --git a/samples/testing/operations/src/BellState.qs b/samples/testing/operations/src/BellState.qs
new file mode 100644
index 00000000..4fe97537
--- /dev/null
+++ b/samples/testing/operations/src/BellState.qs
@@ -0,0 +1,35 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace BellState {
+    /// # Summary
+    /// Operation that generates all bell states for testing with `dump_operation.py`.
+    ///
+    /// # Input
+    /// ## qs
+    /// Input qubit register
+    ///
+    /// ## choice
+    /// Bell state to construct.
+    /// 0: |Φ+〉(PhiPlus)
+    /// 1: |Φ-〉(PhiMinus)
+    /// 2: |Ψ+〉(PsiPlus)
+    /// 3: |Ψ-〉(PsiMinus)
+
+    operation AllBellStates(qs : Qubit[], choice : Int) : Unit is Ctl + Adj {
+        open Microsoft.Quantum.Convert;
+
+        H(qs[0]);
+        CNOT(qs[0], qs[1]);
+
+        let bitmask = IntAsBoolArray(choice, 2);
+        if bitmask[1] {
+            X(qs[1]);
+        }
+
+        if bitmask[0] {
+            Z(qs[0]);
+        }
+
+    }
+}
diff --git a/samples/testing/operations/src/CustomOperation.qs b/samples/testing/operations/src/CustomOperation.qs
new file mode 100644
index 00000000..8e2bf3a0
--- /dev/null
+++ b/samples/testing/operations/src/CustomOperation.qs
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace CustomOperation {
+    // # Summary
+    /// CNOT based operation for testing with `TestEquivalence` operation.
+    ///
+    /// # Input
+    /// ## q1
+    /// First input qubit
+    /// ## q2
+    /// Second input qubit
+    operation ApplySWAP(q1 : Qubit, q2 : Qubit) : Unit is Ctl + Adj {
+        CNOT(q1, q2); // q1, q1 xor q2
+        CNOT(q2, q1); // q2, q1 xor q2
+        CNOT(q1, q2); // q2, q1
+    }
+}
diff --git a/samples/testing/operations/src/OperationEquivalence.qs b/samples/testing/operations/src/OperationEquivalence.qs
new file mode 100644
index 00000000..beec0787
--- /dev/null
+++ b/samples/testing/operations/src/OperationEquivalence.qs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+namespace OperationEquivalence {
+    open Microsoft.Quantum.Diagnostics;
+    open CustomOperation;
+    /// # Summary
+    /// Verifies the equivalence of quantum operations up to a global phase using `Fact` function
+    /// and the `CheckOperationsAreEqual` operation. You can either run this here,
+    /// by clicking `Run` in VsCode or call `TestEquivalence` operation in Python.
+    @EntryPoint()
+    operation TestEquivalence() : Unit {
+        let actual = qs => CustomOperation.ApplySWAP(qs[0], qs[1]);
+        let expected = qs => SWAP(qs[0], qs[1]);
+        Fact(CheckOperationsAreEqual(2, actual, expected), "Actual and expected operation should be same");
+    }
+}
diff --git a/samples/testing/operations/test_operations.py b/samples/testing/operations/test_operations.py
new file mode 100644
index 00000000..cf2664e8
--- /dev/null
+++ b/samples/testing/operations/test_operations.py
@@ -0,0 +1,109 @@
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License.
+
+import pytest
+import qsharp
+from qsharp.utils import dump_operation
+
+@pytest.fixture(autouse=True)
+def setup():
+    """Fixture to execute before a test is run"""
+    # Setting the project root to current folder.
+    qsharp.init(project_root=".")
+    yield # this is where the testing happens
+
+def test_empty_operation() -> None:
+    res = dump_operation("qs => ()", 1)
+    assert res == [
+        [1, 0],
+        [0, 1],
+    ]
+
+
+def test_single_qubit_not_gate() -> None:
+    res = dump_operation("qs => X(qs[0])", 1)
+    assert res == [
+        [0, 1],
+        [1, 0],
+    ]
+
+def test_single_qubit_hadamard_gate() -> None:
+    res = dump_operation("qs => H(qs[0])", 1)
+    assert res == [
+        [0.707107, 0.707107],
+        [0.707107, -0.707107],
+    ]
+
+def test_two_qubit_cnot_gate() -> None:
+    res = dump_operation("qs => CNOT(qs[0], qs[1])", 2)
+    assert res == [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 0, 1],
+        [0, 0, 1, 0],
+    ]
+
+def test_custom_operation() -> None:
+    qsharp.eval(
+        "operation ApplySWAP(qs : Qubit[]) : Unit is Ctl + Adj { SWAP(qs[0], qs[1]); }"
+    )
+
+    res = dump_operation("ApplySWAP", 2)
+    assert res == [
+        [1, 0, 0, 0],
+        [0, 0, 1, 0],
+        [0, 1, 0, 0],
+        [0, 0, 0, 1],
+    ]
+
+def test_operation_no_args_in_qsharp_file() -> None:
+    res = dump_operation("qs => CustomOperation.ApplySWAP(qs[0], qs[1])", 2)
+    assert res == [
+        [1, 0, 0, 0],
+        [0, 0, 1, 0],
+        [0, 1, 0, 0],
+        [0, 0, 0, 1],
+    ]
+
+def test_operation_with_args_in_qsharp_file() -> None:
+    res0 = dump_operation("BellState.AllBellStates(_, 0)", 2)
+
+    assert res0 == [
+        [0.707107, 0.0, 0.707107, 0.0],
+        [0.0, 0.707107, 0.0, 0.707107],
+        [0.0, 0.707107, 0.0, -0.707107],
+        [0.707107, 0.0, -0.707107, 0.0],
+    ]
+
+    res1 = dump_operation("BellState.AllBellStates(_, 1)", 2)
+
+    assert res1 == [
+        [0.707107, 0.0, 0.707107, 0.0],
+        [0.0, 0.707107, 0.0, 0.707107],
+        [0.0, -0.707107, 0.0, 0.707107],
+        [-0.707107, 0.0, 0.707107, 0.0],
+    ]
+
+    res2 = dump_operation("BellState.AllBellStates(_, 2)", 2)
+
+    assert res2 == [
+        [0.0, 0.707107, 0.0, 0.707107],
+        [0.707107, 0.0, 0.707107, 0.0],
+        [0.707107, 0.0, -0.707107, 0.0],
+        [0.0, 0.707107, 0.0, -0.707107],
+    ]
+
+    res3 = dump_operation("BellState.AllBellStates(_, 3)", 2)
+
+    assert res3 == [
+        [0.0, 0.707107, 0.0, 0.707107],
+        [0.707107, 0.0, 0.707107, 0.0],
+        [-0.707107, 0.0, 0.707107, 0.0],
+        [0.0, -0.707107, 0.0, 0.707107],
+    ]
+
+
+def test_operation_equivalence_using_fact() -> None:
+    qsharp.eval(
+        "OperationEquivalence.TestEquivalence()"
+    )
diff --git a/samples/testing/operations/test_requirements.txt b/samples/testing/operations/test_requirements.txt
new file mode 100644
index 00000000..e079f8a6
--- /dev/null
+++ b/samples/testing/operations/test_requirements.txt
@@ -0,0 +1,1 @@
+pytest