diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..6b62ee47d
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,20 @@
+name: ROS Free Workflow
+
+on:
+ push:
+ branches: [ master]
+ pull_request:
+
+jobs:
+ build:
+ name: "Ubuntu Latest"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Code Checkout
+ uses: actions/checkout@v2
+ - name: Configure and Build
+ run: |
+ sudo apt-get update && sudo apt-get install -y libeigen3-dev libopencv-dev libboost-all-dev &&
+ mkdir build && cd build &&
+ cmake ../ov_msckf/ && make
+
diff --git a/.github/workflows/build_catkin.yml b/.github/workflows/build_catkin.yml
deleted file mode 100644
index eee6557bb..000000000
--- a/.github/workflows/build_catkin.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-name: C/C++ CI
-
-on:
- push:
- branches: [ master ]
- pull_request:
-
-jobs:
- build:
- runs-on: ${{ matrix.os }}
- if: "!contains(github.event.head_commit.message, 'skip ci')"
- strategy:
- fail-fast: false
- matrix:
- os: [ubuntu-16.04, ubuntu-18.04, ubuntu-20.04]
- compiler: ["/usr/bin/g++"]
- steps:
- - uses: actions/checkout@v2
- - name: Checkout submodules
- uses: textbook/git-checkout-submodule-action@master
-
- - name: Install apt dependencies (ubuntu-16.04)
- if: matrix.os == 'ubuntu-16.04'
- run: |
- sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' &&
- sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 &&
- curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add - &&
- sudo apt update && sudo apt -y install build-essential ros-kinetic-desktop python-catkin-pkg python-catkin-tools libeigen3-dev git &&
- touch ~/.bashrc && echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
-
- - name: Install apt dependencies (ubuntu-18.04)
- if: matrix.os == 'ubuntu-18.04'
- run: |
- sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' &&
- sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 &&
- curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add - &&
- sudo apt update && sudo apt -y install build-essential ros-melodic-desktop python-catkin-pkg python-catkin-tools libeigen3-dev git &&
- touch ~/.bashrc && echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
-
- - name: Install apt dependencies (ubuntu-20.04)
- if: matrix.os == 'ubuntu-20.04'
- run: |
- sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' &&
- sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 &&
- curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add - &&
- sudo apt update && sudo apt -y install build-essential ros-noetic-desktop python3-catkin-pkg python3-catkin-tools python3-osrf-pycommon libeigen3-dev git &&
- touch ~/.bashrc && echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
-
- - name: Create catkin workspace and compile
- run: |
- export REPO=$(basename $GITHUB_REPOSITORY) &&
- cd $GITHUB_WORKSPACE/.. && mkdir src/ &&
- mv $REPO/ src/ && mkdir $REPO/ && mv src/ $REPO/ && cd $REPO/ &&
- source /opt/ros/$(ls -1 /opt/ros/ | head -n1)/setup.bash && echo "ros version: $ROS_DISTRO" &&
- catkin build -j2 --no-status
-
- - name: Run simulation dataset
- run: |
- source $GITHUB_WORKSPACE/devel/setup.bash &&
- roscore &
- export REPO=$(basename $GITHUB_REPOSITORY) &&
- source $GITHUB_WORKSPACE/devel/setup.bash &&
- rosrun ov_msckf run_simulation _sim_traj_path:=$GITHUB_WORKSPACE/src/$REPO/ov_data/sim/udel_gore.txt
\ No newline at end of file
diff --git a/.github/workflows/build_ros1.yml b/.github/workflows/build_ros1.yml
new file mode 100644
index 000000000..9564f9a00
--- /dev/null
+++ b/.github/workflows/build_ros1.yml
@@ -0,0 +1,71 @@
+name: ROS 1 Workflow
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+
+jobs:
+ build_1604:
+ name: "ROS1 Ubuntu 16.04"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Code Checkout
+ uses: actions/checkout@v2
+ - name: Create Workspace and Docker Image
+ run: |
+ export REPO=$(basename $GITHUB_REPOSITORY) &&
+ cd $GITHUB_WORKSPACE/.. && mkdir src/ &&
+ mv $REPO/ src/ && mkdir $REPO/ && mv src/ $REPO/ && cd $REPO/ &&
+ docker build -t openvins -f $GITHUB_WORKSPACE/src/$REPO/Dockerfile_ros1_16_04 .
+ - name: Echo Enviroment
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "echo $ROS_DISTRO && echo $ROS_VERSION"
+ - name: Run Build in Docker
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && catkin build"
+ - name: Run OpenVINS Simulation!
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && source devel/setup.bash && roslaunch ov_msckf simulation.launch verbosity:=WARNING"
+ build_1804:
+ name: "ROS1 Ubuntu 18.04"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Code Checkout
+ uses: actions/checkout@v2
+ - name: Create Workspace and Docker Image
+ run: |
+ export REPO=$(basename $GITHUB_REPOSITORY) &&
+ cd $GITHUB_WORKSPACE/.. && mkdir src/ &&
+ mv $REPO/ src/ && mkdir $REPO/ && mv src/ $REPO/ && cd $REPO/ &&
+ docker build -t openvins -f $GITHUB_WORKSPACE/src/$REPO/Dockerfile_ros1_18_04 .
+ - name: Echo Enviroment
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "echo $ROS_DISTRO && echo $ROS_VERSION"
+ - name: Run Build in Docker
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && catkin build"
+ - name: Run OpenVINS Simulation!
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && source devel/setup.bash && roslaunch ov_msckf simulation.launch verbosity:=WARNING"
+ build_2004:
+ name: "ROS1 Ubuntu 20.04"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Code Checkout
+ uses: actions/checkout@v2
+ - name: Create Workspace and Docker Image
+ run: |
+ export REPO=$(basename $GITHUB_REPOSITORY) &&
+ cd $GITHUB_WORKSPACE/.. && mkdir src/ &&
+ mv $REPO/ src/ && mkdir $REPO/ && mv src/ $REPO/ && cd $REPO/ &&
+ docker build -t openvins -f $GITHUB_WORKSPACE/src/$REPO/Dockerfile_ros1_20_04 .
+ - name: Echo Enviroment
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "echo $ROS_DISTRO && echo $ROS_VERSION"
+ - name: Run Build in Docker
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && catkin build"
+ - name: Run OpenVINS Simulation!
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && source devel/setup.bash && roslaunch ov_msckf simulation.launch verbosity:=WARNING"
diff --git a/.github/workflows/build_ros2.yml b/.github/workflows/build_ros2.yml
new file mode 100644
index 000000000..d94f4c660
--- /dev/null
+++ b/.github/workflows/build_ros2.yml
@@ -0,0 +1,51 @@
+name: ROS 2 Workflow
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+
+jobs:
+ build_1804:
+ name: "ROS2 Ubuntu 18.04"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Code Checkout
+ uses: actions/checkout@v2
+ - name: Create Workspace and Docker Image
+ run: |
+ export REPO=$(basename $GITHUB_REPOSITORY) &&
+ cd $GITHUB_WORKSPACE/.. && mkdir src/ &&
+ mv $REPO/ src/ && mkdir $REPO/ && mv src/ $REPO/ && cd $REPO/ &&
+ docker build -t openvins -f $GITHUB_WORKSPACE/src/$REPO/Dockerfile_ros2_18_04 .
+ - name: Echo Enviroment
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "echo $ROS_DISTRO && echo $ROS_VERSION"
+ - name: Run Build in Docker
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && colcon build"
+ # THIS SEEMS TO FAIL WITH 245 ERROR, NOT SURE WHY!!!!!
+ #- name: Run OpenVINS Simulation!
+ # run: |
+ # docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && source install/setup.bash && ros2 run ov_msckf run_simulation src/open_vins/config/rpng_sim/estimator_config.yaml"
+ build_2004:
+ name: "ROS2 Ubuntu 20.04"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Code Checkout
+ uses: actions/checkout@v2
+ - name: Create Workspace and Docker Image
+ run: |
+ export REPO=$(basename $GITHUB_REPOSITORY) &&
+ cd $GITHUB_WORKSPACE/.. && mkdir src/ &&
+ mv $REPO/ src/ && mkdir $REPO/ && mv src/ $REPO/ && cd $REPO/ &&
+ docker build -t openvins -f $GITHUB_WORKSPACE/src/$REPO/Dockerfile_ros2_20_04 .
+ - name: Echo Enviroment
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "echo $ROS_DISTRO && echo $ROS_VERSION"
+ - name: Run Build in Docker
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && colcon build"
+ - name: Run OpenVINS Simulation!
+ run: |
+ docker run -t --mount type=bind,source=$GITHUB_WORKSPACE,target=/catkin_ws openvins /bin/bash -c "cd /catkin_ws && source install/setup.bash && ros2 run ov_msckf run_simulation src/open_vins/config/rpng_sim/estimator_config.yaml"
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 11509d6ad..000000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-cmake_minimum_required(VERSION 2.8.8)
-
-add_subdirectory(ov_core)
-add_subdirectory(ov_eval)
-add_subdirectory(ov_msckf)
-
diff --git a/Dockerfile_ros1_16_04 b/Dockerfile_ros1_16_04
new file mode 100644
index 000000000..58b7df3db
--- /dev/null
+++ b/Dockerfile_ros1_16_04
@@ -0,0 +1,43 @@
+FROM osrf/ros:kinetic-desktop-full
+
+# =========================================================
+# =========================================================
+
+# Are you are looking for how to use this docker file?
+# - https://docs.openvins.com/dev-docker.html
+# - https://docs.docker.com/get-started/
+# - http://wiki.ros.org/docker/Tutorials/Docker
+
+# =========================================================
+# =========================================================
+
+# Dependencies we use, catkin tools is very good build system
+# Also some helper utilities for fast in terminal edits (nano etc)
+RUN apt-get update && apt-get install -y libeigen3-dev nano git
+RUN sudo apt-get install -y python-catkin-tools
+
+# Seems this has Python 2.7 installed on it...
+RUN sudo apt-get install -y python2.7-dev python-matplotlib python-numpy python-psutil python-tk
+
+# Install CMake 3.13.5
+ADD https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh /cmake-3.13.5-Linux-x86_64.sh
+RUN mkdir /opt/cmake
+RUN sh /cmake-3.13.5-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
+RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
+RUN cmake --version
+
+# Install deps needed for clion remote debugging
+# https://blog.jetbrains.com/clion/2020/01/using-docker-with-clion/
+RUN apt-get update && apt-get install -y ssh build-essential gcc g++ \
+ gdb clang cmake rsync tar python && apt-get clean
+RUN ( \
+ echo 'LogLevel DEBUG2'; \
+ echo 'PermitRootLogin yes'; \
+ echo 'PasswordAuthentication yes'; \
+ echo 'Subsystem sftp /usr/lib/openssh/sftp-server'; \
+ ) > /etc/ssh/sshd_config_test_clion \
+ && mkdir /run/sshd
+RUN useradd -m user && yes password | passwd user
+RUN usermod -s /bin/bash user
+CMD ["/usr/sbin/sshd", "-D", "-e", "-f", "/etc/ssh/sshd_config_test_clion"]
+
diff --git a/Dockerfile_ros1_18_04 b/Dockerfile_ros1_18_04
new file mode 100644
index 000000000..bb24fb942
--- /dev/null
+++ b/Dockerfile_ros1_18_04
@@ -0,0 +1,43 @@
+FROM osrf/ros:melodic-desktop-full
+
+# =========================================================
+# =========================================================
+
+# Are you are looking for how to use this docker file?
+# - https://docs.openvins.com/dev-docker.html
+# - https://docs.docker.com/get-started/
+# - http://wiki.ros.org/docker/Tutorials/Docker
+
+# =========================================================
+# =========================================================
+
+# Dependencies we use, catkin tools is very good build system
+# Also some helper utilities for fast in terminal edits (nano etc)
+RUN apt-get update && apt-get install -y libeigen3-dev nano git
+RUN sudo apt-get install -y python-catkin-tools
+
+# Seems this has Python 3.6 installed on it...
+RUN sudo apt-get install -y python3-dev python3-matplotlib python3-numpy python3-psutil python3-tk
+
+# Install CMake 3.13.5
+ADD https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh /cmake-3.13.5-Linux-x86_64.sh
+RUN mkdir /opt/cmake
+RUN sh /cmake-3.13.5-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
+RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
+RUN cmake --version
+
+# Install deps needed for clion remote debugging
+# https://blog.jetbrains.com/clion/2020/01/using-docker-with-clion/
+RUN apt-get update && apt-get install -y ssh build-essential gcc g++ \
+ gdb clang cmake rsync tar python && apt-get clean
+RUN ( \
+ echo 'LogLevel DEBUG2'; \
+ echo 'PermitRootLogin yes'; \
+ echo 'PasswordAuthentication yes'; \
+ echo 'Subsystem sftp /usr/lib/openssh/sftp-server'; \
+ ) > /etc/ssh/sshd_config_test_clion \
+ && mkdir /run/sshd
+RUN useradd -m user && yes password | passwd user
+RUN usermod -s /bin/bash user
+CMD ["/usr/sbin/sshd", "-D", "-e", "-f", "/etc/ssh/sshd_config_test_clion"]
+
diff --git a/Dockerfile b/Dockerfile_ros1_20_04
similarity index 68%
rename from Dockerfile
rename to Dockerfile_ros1_20_04
index e69633365..a912b4928 100644
--- a/Dockerfile
+++ b/Dockerfile_ros1_20_04
@@ -12,10 +12,20 @@ FROM osrf/ros:noetic-desktop-full
# =========================================================
# Dependencies we use, catkin tools is very good build system
-# Also some helper utitiles for fast in terminal edits (nano etc)
-RUN apt-get update && apt-get install -y libeigen3-dev nano git cmake
+# Also some helper utilities for fast in terminal edits (nano etc)
+RUN apt-get update && apt-get install -y libeigen3-dev nano git
RUN sudo apt-get install -y python3-catkin-tools python3-osrf-pycommon
+# Seems this has Python 3.8 installed on it...
+RUN sudo apt-get install -y python3-dev python3-matplotlib python3-numpy python3-psutil python3-tk
+
+# Install CMake 3.13.5
+ADD https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh /cmake-3.13.5-Linux-x86_64.sh
+RUN mkdir /opt/cmake
+RUN sh /cmake-3.13.5-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
+RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
+RUN cmake --version
+
# Install deps needed for clion remote debugging
# https://blog.jetbrains.com/clion/2020/01/using-docker-with-clion/
RUN apt-get update && apt-get install -y ssh build-essential gcc g++ \
diff --git a/Dockerfile_ros2_18_04 b/Dockerfile_ros2_18_04
new file mode 100644
index 000000000..86baa0fa0
--- /dev/null
+++ b/Dockerfile_ros2_18_04
@@ -0,0 +1,42 @@
+FROM osrf/ros:dashing-desktop
+
+# =========================================================
+# =========================================================
+
+# Are you are looking for how to use this docker file?
+# - https://docs.openvins.com/dev-docker.html
+# - https://docs.docker.com/get-started/
+# - http://wiki.ros.org/docker/Tutorials/Docker
+
+# =========================================================
+# =========================================================
+
+# Dependencies we use, catkin tools is very good build system
+# Also some helper utilities for fast in terminal edits (nano etc)
+RUN apt-get update && apt-get install -y libeigen3-dev nano git
+
+# Seems this has Python 3.6 installed on it...
+RUN sudo apt-get install -y python3-dev python3-matplotlib python3-numpy python3-psutil python3-tk
+
+# Install CMake 3.13.5
+ADD https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh /cmake-3.13.5-Linux-x86_64.sh
+RUN mkdir /opt/cmake
+RUN sh /cmake-3.13.5-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
+RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
+RUN cmake --version
+
+# Install deps needed for clion remote debugging
+# https://blog.jetbrains.com/clion/2020/01/using-docker-with-clion/
+RUN apt-get update && apt-get install -y ssh build-essential gcc g++ \
+ gdb clang cmake rsync tar python && apt-get clean
+RUN ( \
+ echo 'LogLevel DEBUG2'; \
+ echo 'PermitRootLogin yes'; \
+ echo 'PasswordAuthentication yes'; \
+ echo 'Subsystem sftp /usr/lib/openssh/sftp-server'; \
+ ) > /etc/ssh/sshd_config_test_clion \
+ && mkdir /run/sshd
+RUN useradd -m user && yes password | passwd user
+RUN usermod -s /bin/bash user
+CMD ["/usr/sbin/sshd", "-D", "-e", "-f", "/etc/ssh/sshd_config_test_clion"]
+
diff --git a/Dockerfile_ros2_20_04 b/Dockerfile_ros2_20_04
new file mode 100644
index 000000000..6787c6c85
--- /dev/null
+++ b/Dockerfile_ros2_20_04
@@ -0,0 +1,42 @@
+FROM osrf/ros:galactic-desktop
+
+# =========================================================
+# =========================================================
+
+# Are you are looking for how to use this docker file?
+# - https://docs.openvins.com/dev-docker.html
+# - https://docs.docker.com/get-started/
+# - http://wiki.ros.org/docker/Tutorials/Docker
+
+# =========================================================
+# =========================================================
+
+# Dependencies we use, catkin tools is very good build system
+# Also some helper utilities for fast in terminal edits (nano etc)
+RUN apt-get update && apt-get install -y libeigen3-dev nano git
+
+# Seems this has Python 3.8 installed on it...
+RUN sudo apt-get install -y python3-dev python3-matplotlib python3-numpy python3-psutil python3-tk
+
+# Install CMake 3.13.5
+ADD https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh /cmake-3.13.5-Linux-x86_64.sh
+RUN mkdir /opt/cmake
+RUN sh /cmake-3.13.5-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
+RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
+RUN cmake --version
+
+# Install deps needed for clion remote debugging
+# https://blog.jetbrains.com/clion/2020/01/using-docker-with-clion/
+RUN apt-get update && apt-get install -y ssh build-essential gcc g++ \
+ gdb clang cmake rsync tar python && apt-get clean
+RUN ( \
+ echo 'LogLevel DEBUG2'; \
+ echo 'PermitRootLogin yes'; \
+ echo 'PasswordAuthentication yes'; \
+ echo 'Subsystem sftp /usr/lib/openssh/sftp-server'; \
+ ) > /etc/ssh/sshd_config_test_clion \
+ && mkdir /run/sshd
+RUN useradd -m user && yes password | passwd user
+RUN usermod -s /bin/bash user
+CMD ["/usr/sbin/sshd", "-D", "-e", "-f", "/etc/ssh/sshd_config_test_clion"]
+
diff --git a/Doxyfile-mcss b/Doxyfile-mcss
index 68c1aee52..da1db0c85 100644
--- a/Doxyfile-mcss
+++ b/Doxyfile-mcss
@@ -35,7 +35,7 @@ ALIASES += \
##! M_THEME_COLOR = #2f73a3
##! M_FAVICON = docs/img/favicon-light.png
-##! M_LINKS_NAVBAR1 = pages namespaceov__core namespaceov__type namespaceov__msckf namespaceov__eval annotated
+##! M_LINKS_NAVBAR1 = pages annotated namespaceov__core namespaceov__type namespaceov__msckf namespaceov__init namespaceov__eval
##! M_LINKS_NAVBAR2 = \
##! "GitHub"
diff --git a/ReadMe.md b/ReadMe.md
index c21e40a94..bf45671c3 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -1,41 +1,60 @@
# OpenVINS
-![C/C++ CI](https://github.com/rpng/open_vins/workflows/C/C++%20CI/badge.svg)
+[![ROS 1 Workflow](https://github.com/rpng/open_vins/actions/workflows/build_ros1.yml/badge.svg)](https://github.com/rpng/open_vins/actions/workflows/build_ros1.yml)
+[![ROS 2 Workflow](https://github.com/rpng/open_vins/actions/workflows/build_ros2.yml/badge.svg)](https://github.com/rpng/open_vins/actions/workflows/build_ros2.yml)
+[![ROS Free Workflow](https://github.com/rpng/open_vins/actions/workflows/build.yml/badge.svg)](https://github.com/rpng/open_vins/actions/workflows/build.yml)
Welcome to the OpenVINS project!
-The OpenVINS project houses some core computer vision code along with a state-of-the art filter-based visual-inertial estimator.
-The core filter is an [Extended Kalman filter](https://en.wikipedia.org/wiki/Extended_Kalman_filter) which fuses inertial information with sparse visual feature tracks.
-These visual feature tracks are fused leveraging the [Multi-State Constraint Kalman Filter (MSCKF)](https://ieeexplore.ieee.org/document/4209642) sliding window formulation which allows for 3D features to update the state estimate without directly estimating the feature states in the filter.
-Inspired by graph-based optimization systems, the included filter has modularity allowing for convenient covariance management with a proper type-based state system.
-Please take a look at the feature list below for full details on what the system supports.
-
+The OpenVINS project houses some core computer vision code along with a state-of-the art filter-based visual-inertial
+estimator. The core filter is an [Extended Kalman filter](https://en.wikipedia.org/wiki/Extended_Kalman_filter) which
+fuses inertial information with sparse visual feature tracks. These visual feature tracks are fused leveraging
+the [Multi-State Constraint Kalman Filter (MSCKF)](https://ieeexplore.ieee.org/document/4209642) sliding window
+formulation which allows for 3D features to update the state estimate without directly estimating the feature states in
+the filter. Inspired by graph-based optimization systems, the included filter has modularity allowing for convenient
+covariance management with a proper type-based state system. Please take a look at the feature list below for full
+details on what the system supports.
* Github project page - https://github.com/rpng/open_vins
* Documentation - https://docs.openvins.com/
* Getting started guide - https://docs.openvins.com/getting-started.html
* Publication reference - http://udel.edu/~pgeneva/downloads/papers/c10.pdf
-
## News / Events
-* **July 19, 2021** - Camera classes, masking support, alignment utility, and other small fixes. See v2.4 [PR#117](https://github.com/rpng/open_vins/pull/186) for details.
-* **December 1, 2020** - Released improved memory management, active feature pointcloud publishing, limiting number of features in update to bound compute, and other small fixes. See v2.3 [PR#117](https://github.com/rpng/open_vins/pull/117) for details.
-* **November 18, 2020** - Released groundtruth generation utility package, [vicon2gt](https://github.com/rpng/vicon2gt) to enable creation of groundtruth trajectories in a motion capture room for evaulating VIO methods.
-* **July 7, 2020** - Released zero velocity update for vehicle applications and direct initialization when standing still. See [PR#79](https://github.com/rpng/open_vins/pull/79) for details.
-* **May 18, 2020** - Released secondary pose graph example repository [ov_secondary](https://github.com/rpng/ov_secondary) based on [VINS-Fusion](https://github.com/HKUST-Aerial-Robotics/VINS-Fusion). OpenVINS now publishes marginalized feature track, feature 3d position, and first camera intrinsics and extrinsics. See [PR#66](https://github.com/rpng/open_vins/pull/66) for details and discussion.
-* **April 3, 2020** - Released [v2.0](https://github.com/rpng/open_vins/releases/tag/v2.0) update to the codebase with some key refactoring, ros-free building, improved dataset support, and single inverse depth feature representation. Please check out the [release page](https://github.com/rpng/open_vins/releases/tag/v2.0) for details.
-* **January 21, 2020** - Our paper has been accepted for presentation in [ICRA 2020](https://www.icra2020.org/). We look forward to seeing everybody there! We have also added links to a few videos of the system running on different datasets.
+* **December 13, 2021** - New YAML configuration system, ROS2 support, Docker images, robust static initialization based on disparity, internal logging system to reduce verbosity, image transport publishers, dynamic number of features support, and other small fixes. See
+ v2.5 [PR#209](https://github.com/rpng/open_vins/pull/209) for details.
+* **July 19, 2021** - Camera classes, masking support, alignment utility, and other small fixes. See
+ v2.4 [PR#117](https://github.com/rpng/open_vins/pull/186) for details.
+* **December 1, 2020** - Released improved memory management, active feature pointcloud publishing, limiting number of
+ features in update to bound compute, and other small fixes. See
+ v2.3 [PR#117](https://github.com/rpng/open_vins/pull/117) for details.
+* **November 18, 2020** - Released groundtruth generation utility package, [vicon2gt](https://github.com/rpng/vicon2gt)
+ to enable creation of groundtruth trajectories in a motion capture room for evaulating VIO methods.
+* **July 7, 2020** - Released zero velocity update for vehicle applications and direct initialization when standing
+ still. See [PR#79](https://github.com/rpng/open_vins/pull/79) for details.
+* **May 18, 2020** - Released secondary pose graph example
+ repository [ov_secondary](https://github.com/rpng/ov_secondary) based
+ on [VINS-Fusion](https://github.com/HKUST-Aerial-Robotics/VINS-Fusion). OpenVINS now publishes marginalized feature
+ track, feature 3d position, and first camera intrinsics and extrinsics.
+ See [PR#66](https://github.com/rpng/open_vins/pull/66) for details and discussion.
+* **April 3, 2020** - Released [v2.0](https://github.com/rpng/open_vins/releases/tag/v2.0) update to the codebase with
+ some key refactoring, ros-free building, improved dataset support, and single inverse depth feature representation.
+ Please check out the [release page](https://github.com/rpng/open_vins/releases/tag/v2.0) for details.
+* **January 21, 2020** - Our paper has been accepted for presentation in [ICRA 2020](https://www.icra2020.org/). We look
+ forward to seeing everybody there! We have also added links to a few videos of the system running on different
+ datasets.
* **October 23, 2019** - OpenVINS placed first in the [IROS 2019 FPV Drone Racing VIO Competition
-](http://rpg.ifi.uzh.ch/uzh-fpv.html). We will be giving a short presentation at the [workshop](https://wp.nyu.edu/workshopiros2019mav/) at 12:45pm in Macau on November 8th.
+ ](http://rpg.ifi.uzh.ch/uzh-fpv.html). We will be giving a short presentation at
+ the [workshop](https://wp.nyu.edu/workshopiros2019mav/) at 12:45pm in Macau on November 8th.
* **October 1, 2019** - We will be presenting at the [Visual-Inertial Navigation: Challenges and Applications
-](http://udel.edu/~ghuang/iros19-vins-workshop/index.html) workshop at [IROS 2019](https://www.iros2019.org/). The submitted workshop paper can be found at [this](http://udel.edu/~ghuang/iros19-vins-workshop/papers/06.pdf) link.
-* **August 21, 2019** - Open sourced [ov_maplab](https://github.com/rpng/ov_maplab) for interfacing OpenVINS with the [maplab](https://github.com/ethz-asl/maplab) library.
-* **August 15, 2019** - Initial release of OpenVINS repository and documentation website!
-
+ ](http://udel.edu/~ghuang/iros19-vins-workshop/index.html) workshop at [IROS 2019](https://www.iros2019.org/). The
+ submitted workshop paper can be found at [this](http://udel.edu/~ghuang/iros19-vins-workshop/papers/06.pdf) link.
+* **August 21, 2019** - Open sourced [ov_maplab](https://github.com/rpng/ov_maplab) for interfacing OpenVINS with
+ the [maplab](https://github.com/ethz-asl/maplab) library.
+* **August 15, 2019** - Initial release of OpenVINS repository and documentation website!
## Project Features
-
* Sliding window visual-inertial MSCKF
* Modular covariance type system
* Comprehensive documentation and derivations
@@ -52,7 +71,7 @@ Please take a look at the feature list below for full details on what the system
5. Anchored MSCKF inverse depth
6. Anchored single inverse depth
* Calibration of sensor intrinsics and extrinsics
- * Camera to IMU transform
+ * Camera to IMU transform
* Camera to IMU time offset
* Camera intrinsics
* Environmental SLAM feature
@@ -69,28 +88,30 @@ Please take a look at the feature list below for full details on what the system
* Out of the box evaluation on EurocMav, TUM-VI, UZH-FPV, KAIST Urban and VIO datasets
* Extensive evaluation suite (ATE, RPE, NEES, RMSE, etc..)
-
-
## Codebase Extensions
-* **[ov_secondary](https://github.com/rpng/ov_secondary)** -
-This is an example secondary thread which provides loop closure in a loosely coupled manner for [OpenVINS](https://github.com/rpng/open_vins).
-This is a modification of the code originally developed by the HKUST aerial robotics group and can be found in their [VINS-Fusion](https://github.com/HKUST-Aerial-Robotics/VINS-Fusion) repository.
-Here we stress that this is a loosely coupled method, thus no information is returned to the estimator to improve the underlying OpenVINS odometry.
-This codebase has been modified in a few key areas including: exposing more loop closure parameters, subscribing to camera intrinsics, simplifying configuration such that only topics need to be supplied, and some tweaks to the loop closure detection to improve frequency.
-
-* **[ov_maplab](https://github.com/rpng/ov_maplab)** -
-This codebase contains the interface wrapper for exporting visual-inertial runs from [OpenVINS](https://github.com/rpng/open_vins) into the ViMap structure taken by [maplab](https://github.com/ethz-asl/maplab).
-The state estimates and raw images are appended to the ViMap as OpenVINS runs through a dataset.
-After completion of the dataset, features are re-extract and triangulate with maplab's feature system.
-This can be used to merge multi-session maps, or to perform a batch optimization after first running the data through OpenVINS.
-Some example have been provided along with a helper script to export trajectories into the standard groundtruth format.
-
-* **[vicon2gt](https://github.com/rpng/vicon2gt)** -
-This utility was created to generate groundtruth trajectories using a motion capture system (e.g. Vicon or OptiTrack) for use in evaluating visual-inertial estimation systems.
-Specifically we calculate the inertial IMU state (full 15 dof) at camera frequency rate and generate a groundtruth trajectory similar to those provided by the EurocMav datasets.
-Performs fusion of inertial and motion capture information and estimates all unknown spacial-temporal calibrations between the two sensors.
-
+* **[ov_secondary](https://github.com/rpng/ov_secondary)** - This is an example secondary thread which provides loop
+ closure in a loosely coupled manner for [OpenVINS](https://github.com/rpng/open_vins). This is a modification of the
+ code originally developed by the HKUST aerial robotics group and can be found in
+ their [VINS-Fusion](https://github.com/HKUST-Aerial-Robotics/VINS-Fusion) repository. Here we stress that this is a
+ loosely coupled method, thus no information is returned to the estimator to improve the underlying OpenVINS odometry.
+ This codebase has been modified in a few key areas including: exposing more loop closure parameters, subscribing to
+ camera intrinsics, simplifying configuration such that only topics need to be supplied, and some tweaks to the loop
+ closure detection to improve frequency.
+
+* **[ov_maplab](https://github.com/rpng/ov_maplab)** - This codebase contains the interface wrapper for exporting
+ visual-inertial runs from [OpenVINS](https://github.com/rpng/open_vins) into the ViMap structure taken
+ by [maplab](https://github.com/ethz-asl/maplab). The state estimates and raw images are appended to the ViMap as
+ OpenVINS runs through a dataset. After completion of the dataset, features are re-extract and triangulate with
+ maplab's feature system. This can be used to merge multi-session maps, or to perform a batch optimization after first
+ running the data through OpenVINS. Some example have been provided along with a helper script to export trajectories
+ into the standard groundtruth format.
+
+* **[vicon2gt](https://github.com/rpng/vicon2gt)** - This utility was created to generate groundtruth trajectories using
+ a motion capture system (e.g. Vicon or OptiTrack) for use in evaluating visual-inertial estimation systems.
+ Specifically we calculate the inertial IMU state (full 15 dof) at camera frequency rate and generate a groundtruth
+ trajectory similar to those provided by the EurocMav datasets. Performs fusion of inertial and motion capture
+ information and estimates all unknown spacial-temporal calibrations between the two sensors.
## Demo Videos
@@ -103,13 +124,12 @@ Performs fusion of inertial and motion capture information and estimates all unk
[![](docs/youtube/oUoLlrFryk0.jpg)](http://www.youtube.com/watch?v=oUoLlrFryk0 "OpenVINS - TUM VI Datasets Demostration")
[![](docs/youtube/ExPIGwORm4E.jpg)](http://www.youtube.com/watch?v=ExPIGwORm4E "OpenVINS - UZH-FPV Drone Racing Dataset Demonstration")
-
-
## Credit / Licensing
-This code was written by the [Robot Perception and Navigation Group (RPNG)](https://sites.udel.edu/robot/) at the University of Delaware.
-If you have any issues with the code please open an issue on our github page with relevant implementation details and references.
-For researchers that have leveraged or compared to this work, please cite the following:
+This code was written by the [Robot Perception and Navigation Group (RPNG)](https://sites.udel.edu/robot/) at the
+University of Delaware. If you have any issues with the code please open an issue on our github page with relevant
+implementation details and references. For researchers that have leveraged or compared to this work, please cite the
+following:
```txt
@Conference{Geneva2020ICRA,
@@ -122,7 +142,6 @@ For researchers that have leveraged or compared to this work, please cite the fo
}
```
-
The codebase is licensed under the [GNU General Public License v3 (GPL-3)](https://www.gnu.org/licenses/gpl-3.0.txt).
diff --git a/config/euroc_mav/estimator_config.yaml b/config/euroc_mav/estimator_config.yaml
new file mode 100644
index 000000000..98401ddd1
--- /dev/null
+++ b/config/euroc_mav/estimator_config.yaml
@@ -0,0 +1,101 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if first-estimate Jacobians should be used (enable for good consistency)
+use_imuavg: true # if using discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints between pairs
+max_cameras: 2 # how many cameras we have 1 = mono, 2 = stereo, >2 = binocular (all mono tracking)
+
+calib_cam_extrinsics: true # if the transform between camera and IMU should be optimized R_ItoC, p_CinI
+calib_cam_intrinsics: true # if camera intrinsics should be optimized (focal, center, distortion)
+calib_cam_timeoffset: true # if timeoffset between camera and IMU should be optimized
+
+max_clones: 11 # how many clones in the sliding window
+max_slam: 50 # number of features in our state vector
+max_slam_in_update: 25 # update can be split into sequential updates of batches, how many in a batch
+max_msckf_in_update: 40 # how many MSCKF features to use in the update
+dt_slam_delay: 2 # delay before initializing (helps with stability from bad initialization...)
+
+gravity_mag: 9.81 # magnitude of gravity in this location
+
+feat_rep_msckf: "GLOBAL_3D"
+feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: true
+zupt_chi2_multipler: 0 # set to 0 for only disp-based
+zupt_max_velocity: 0.1
+zupt_noise_multiplier: 50
+zupt_max_disparity: 1.5 # set to 0 for only imu-based
+zupt_only_at_beginning: true
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 0.75 # how many seconds to collect initialization information
+init_imu_thresh: 1.5 # threshold for variance of the accelerometer to detect a "jerk" in motion
+init_max_disparity: 1.5 # max disparity to consider the platform stationary (dependent on resolution)
+init_max_features: 50.0 # how many features to track during initialization (saves on computation)
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false # if we want to record timing information of the method
+record_timing_filepath: "/tmp/traj_timing.txt" # https://docs.openvins.com/eval-timing.html#eval-ov-timing-flame
+
+# if we want to save the simulation state and its diagional covariance
+# use this with rosrun ov_eval error_simulation
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 250
+fast_threshold: 15
+grid_x: 20
+grid_y: 20
+min_px_dist: 15
+knn_ratio: 0.70
+downsample_cameras: false # will downsample image in half if true
+multi_threading: true # if should enable opencv multi threading
+histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: false
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 1
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 1
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 1
+
+# masks for our images
+use_mask: false
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+
+
diff --git a/config/euroc_mav/kalibr_imu_chain.yaml b/config/euroc_mav/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..394cdca13
--- /dev/null
+++ b/config/euroc_mav/kalibr_imu_chain.yaml
@@ -0,0 +1,16 @@
+%YAML:1.0
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /imu0
+ time_offset: 0.0
+ update_rate: 200.0
\ No newline at end of file
diff --git a/config/euroc_mav/kalibr_imucam_chain.yaml b/config/euroc_mav/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..6e14a9084
--- /dev/null
+++ b/config/euroc_mav/kalibr_imucam_chain.yaml
@@ -0,0 +1,28 @@
+%YAML:1.0
+
+cam0:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [0.0148655429818, -0.999880929698, 0.00414029679422, -0.0216401454975]
+ - [0.999557249008, 0.0149672133247, 0.025715529948, -0.064676986768]
+ - [-0.0257744366974, 0.00375618835797, 0.999660727178, 0.00981073058949]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [-0.28340811, 0.07395907, 0.00019359, 1.76187114e-05]
+ distortion_model: radtan
+ intrinsics: [458.654, 457.296, 367.215, 248.375] #fu, fv, cu, cv
+ resolution: [752, 480]
+ rostopic: /cam0/image_raw
+cam1:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [0.0125552670891, -0.999755099723, 0.0182237714554, -0.0198435579556]
+ - [0.999598781151, 0.0130119051815, 0.0251588363115, 0.0453689425024]
+ - [-0.0253898008918, 0.0179005838253, 0.999517347078, 0.00786212447038]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [-0.28368365,0.07451284,-0.00010473,-3.55590700e-05]
+ distortion_model: radtan
+ intrinsics: [457.587, 456.134, 379.999, 255.238] #fu, fv, cu, cv
+ resolution: [752, 480]
+ rostopic: /cam1/image_raw
\ No newline at end of file
diff --git a/config/kaist/estimator_config.yaml b/config/kaist/estimator_config.yaml
new file mode 100644
index 000000000..f647dc579
--- /dev/null
+++ b/config/kaist/estimator_config.yaml
@@ -0,0 +1,103 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "DEBUG" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if we should use first-estimate Jacobians (enable for good consistency)
+use_imuavg: true # for our discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints
+max_cameras: 2
+
+calib_cam_extrinsics: false
+calib_cam_intrinsics: true
+calib_cam_timeoffset: true
+
+max_clones: 25
+max_slam: 10
+max_slam_in_update: 25
+max_msckf_in_update: 100
+dt_slam_delay: 1
+
+gravity_mag: 9.79858
+
+feat_rep_msckf: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: true
+zupt_chi2_multipler: 0 # set to 0 for only disp-based
+zupt_max_velocity: 0.1
+zupt_noise_multiplier: 1
+zupt_max_disparity: 0.3 # set to 0 for only imu-based
+zupt_only_at_beginning: false
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 1.0
+init_imu_thresh: 0.5
+init_max_disparity: 1.5
+init_max_features: 50.0
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false
+record_timing_filepath: "/tmp/traj_timing.txt"
+
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 300
+fast_threshold: 10
+grid_x: 20
+grid_y: 20
+min_px_dist: 20
+knn_ratio: 0.65
+downsample_cameras: false
+multi_threading: true
+histogram_method: "CLAHE" # NONE, HISTOGRAM, CLAHE
+
+fi_max_dist: 150
+fi_max_baseline: 200
+fi_max_cond_number: 20000
+fi_triangulate_1d: false
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: false
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 1
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 1
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 1
+
+# masks for our images
+use_mask: false
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+
diff --git a/config/kaist/kalibr_imu_chain.yaml b/config/kaist/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..b3eea522e
--- /dev/null
+++ b/config/kaist/kalibr_imu_chain.yaml
@@ -0,0 +1,23 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+
+# MTI-100 series converted from data sheet, guess on bias random walk
+# https://www.xsens.com/hubfs/Downloads/usermanual/MTi_usermanual.pdf
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 2.0000e-03 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 3.0000e-03 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ #
+ #
+ #
+ #
+ model: calibrated
+ rostopic: /imu/data_raw
+ time_offset: 0.0
+ update_rate: 500.0
\ No newline at end of file
diff --git a/config/kaist/kalibr_imucam_chain.yaml b/config/kaist/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..bda3a5d55
--- /dev/null
+++ b/config/kaist/kalibr_imucam_chain.yaml
@@ -0,0 +1,28 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+cam0:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [-0.00413,-0.01966,0.99980,1.73944]
+ - [-0.99993,-0.01095,-0.00435,0.27803]
+ - [0.01103,-0.99975,-0.01962,-0.08785]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [-5.6143027800000002e-02,1.3952563200000001e-01,-1.2155906999999999e-03,-9.7281389999999998e-04]
+ distortion_model: radtan
+ intrinsics: [8.1690378992770002e+02,8.1156803828490001e+02,6.0850726281690004e+02,2.6347599764440002e+02]
+ resolution: [1280, 560]
+ rostopic: /stereo/left/image_raw
+cam1:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [-0.00768,-0.01509,0.99986,1.73376]
+ - [-0.99988,-0.01305,-0.00788,-0.19706]
+ - [0.01317,-0.99980,-0.01499,-0.08271]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [0.0034003170790442797, 0.001766278153469831, -0.00266312569781606, 0.0003299517423931039]
+ distortion_model: radtan
+ intrinsics: [190.44236969414825, 190.4344384721956, 252.59949716835982, 254.91723064636983]
+ resolution: [1280, 560]
+ rostopic: /stereo/right/image_raw
\ No newline at end of file
diff --git a/ov_msckf/launch/pgeneva_ros_kaist.launch b/config/kaist/pgeneva_ros_kaist.launch.old
similarity index 100%
rename from ov_msckf/launch/pgeneva_ros_kaist.launch
rename to config/kaist/pgeneva_ros_kaist.launch.old
diff --git a/config/kaist_vio/kalibr_imu_chain.yaml b/config/kaist_vio/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..8bec50983
--- /dev/null
+++ b/config/kaist_vio/kalibr_imu_chain.yaml
@@ -0,0 +1,16 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 0.00333388 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 0.00047402 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 0.00005770 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 0.00001565 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /mavros/imu/data
+ time_offset: 0.0
+ update_rate: 100.0
\ No newline at end of file
diff --git a/config/kaist_vio/kalibr_imucam_chain.yaml b/config/kaist_vio/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..80e7e4acc
--- /dev/null
+++ b/config/kaist_vio/kalibr_imucam_chain.yaml
@@ -0,0 +1,93 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+cam0:
+ T_cam_imu:
+ - - -0.04030123999740945
+ - -0.9989998755524683
+ - 0.01936643232049068
+ - 0.02103955032447366
+ - - 0.026311325355146964
+ - -0.020436499663524704
+ - -0.9994448777394171
+ - -0.038224929976612206
+ - - 0.9988410905708309
+ - -0.0397693113802049
+ - 0.027108627033059024
+ - -0.1363488241088845
+ - - 0.0
+ - 0.0
+ - 0.0
+ - 1.0
+ cam_overlaps:
+ - 1
+ camera_model: pinhole
+ distortion_coeffs:
+ - 0.006896928127777268
+ - -0.009144207062654397
+ - 0.000254113977103925
+ - 0.0021434982252719545
+ distortion_model: radtan
+ intrinsics:
+ - 380.9229090195708
+ - 380.29264802262736
+ - 324.68121181846755
+ - 224.6741321466431
+ resolution:
+ - 640
+ - 480
+ rostopic: /camera/infra1/image_rect_raw
+ timeshift_cam_imu: -0.029958533056650416
+cam1:
+ T_cam_imu:
+ - - -0.03905752472566068
+ - -0.9990498568899562
+ - 0.019336318430946575
+ - -0.02909273113160158
+ - - 0.025035478432625047
+ - -0.020323396666370924
+ - -0.9994799569614147
+ - -0.03811090793611019
+ - - 0.99892328763622
+ - -0.03855311914877835
+ - 0.02580547271309183
+ - -0.13656684822705098
+ - - 0.0
+ - 0.0
+ - 0.0
+ - 1.0
+ T_cn_cnm1:
+ - - 0.9999992248836708
+ - 6.384241340452582e-05
+ - 0.0012434452955667624
+ - -0.049960282472300055
+ - - -6.225102643531651e-05
+ - 0.9999991790958949
+ - -0.0012798173093508036
+ - -5.920119010064575e-05
+ - - -0.001243525981443161
+ - 0.0012797389115975439
+ - 0.9999984079544582
+ - -0.00014316003395349448
+ - - 0.0
+ - 0.0
+ - 0.0
+ - 1.0
+ cam_overlaps:
+ - 0
+ camera_model: pinhole
+ distortion_coeffs:
+ - 0.007044055287844759
+ - -0.010251485722185347
+ - 0.0006674304399871926
+ - 0.001678899816379666
+ distortion_model: radtan
+ intrinsics:
+ - 380.95187095303424
+ - 380.3065956074995
+ - 324.0678433553536
+ - 225.9586983198407
+ resolution:
+ - 640
+ - 480
+ rostopic: /camera/infra2/image_rect_raw
+ timeshift_cam_imu: -0.030340187355085417
\ No newline at end of file
diff --git a/ov_msckf/launch/pgeneva_ros_kaistvio.launch b/config/kaist_vio/pgeneva_ros_kaistvio.launch.old
similarity index 100%
rename from ov_msckf/launch/pgeneva_ros_kaistvio.launch
rename to config/kaist_vio/pgeneva_ros_kaistvio.launch.old
diff --git a/config/rpng_aruco/estimator_config.yaml b/config/rpng_aruco/estimator_config.yaml
new file mode 100644
index 000000000..a17157cc6
--- /dev/null
+++ b/config/rpng_aruco/estimator_config.yaml
@@ -0,0 +1,98 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if we should use first-estimate Jacobians (enable for good consistency)
+use_imuavg: true # for our discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints
+max_cameras: 2
+
+calib_cam_extrinsics: true
+calib_cam_intrinsics: true
+calib_cam_timeoffset: true
+
+max_clones: 15
+max_slam: 75
+max_slam_in_update: 25
+max_msckf_in_update: 40
+dt_slam_delay: 2
+
+gravity_mag: 9.81
+
+feat_rep_msckf: "GLOBAL_3D"
+feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: true
+zupt_chi2_multipler: 0 # set to 0 for only disp-based
+zupt_max_velocity: 0.1
+zupt_noise_multiplier: 50
+zupt_max_disparity: 0.5 # set to 0 for only imu-based
+zupt_only_at_beginning: true
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 0.5
+init_imu_thresh: 1.2
+init_max_disparity: 1.5
+init_max_features: 50.0
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false
+record_timing_filepath: "/tmp/traj_timing.txt"
+
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 150
+fast_threshold: 15
+grid_x: 20
+grid_y: 20
+min_px_dist: 20
+knn_ratio: 0.85
+downsample_cameras: false
+multi_threading: true
+histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: true
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 1
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 1
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 8
+
+# masks for our images
+use_mask: false
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+
diff --git a/config/rpng_aruco/kalibr_imu_chain.yaml b/config/rpng_aruco/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..394cdca13
--- /dev/null
+++ b/config/rpng_aruco/kalibr_imu_chain.yaml
@@ -0,0 +1,16 @@
+%YAML:1.0
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /imu0
+ time_offset: 0.0
+ update_rate: 200.0
\ No newline at end of file
diff --git a/config/rpng_aruco/kalibr_imucam_chain.yaml b/config/rpng_aruco/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..74ebdbe18
--- /dev/null
+++ b/config/rpng_aruco/kalibr_imucam_chain.yaml
@@ -0,0 +1,28 @@
+%YAML:1.0
+
+cam0:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [-0.99997806, -0.00600501, 0.0027968, 0.03847796]
+ - [0.00601449, -0.99997615, 0.00339343, -0.0045601]
+ - [0.00277635, 0.00341018, 0.99999033, 0.00418038]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [-0.292031518680717,0.08753155838496009,0.0009568457669165753,2.3463489813256424e-05]
+ distortion_model: radtan
+ intrinsics: [470.0502737897896,468.7574814232544,405.80799445368035,245.2879780490104] #fu, fv, cu, cv
+ resolution: [752, 480]
+ rostopic: /cam0/image_raw
+cam1:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [-0.99984421, -0.00389232, 0.01721638, -0.07075565]
+ - [0.00394176, -0.9999882, 0.0028389, -0.00418534]
+ - [0.01720512, 0.00290632, 0.99984776, 0.00388861]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [-0.2847596229068525,0.07908861097045865,0.0011071433505703875,0.0005094909873658998]
+ distortion_model: radtan
+ intrinsics: [472.98384780424163,471.9917417027018,382.1928744696835,268.2536666120421] #fu, fv, cu, cv
+ resolution: [752, 480]
+ rostopic: /cam1/image_raw
\ No newline at end of file
diff --git a/config/rpng_ironsides/estimator_config.yaml b/config/rpng_ironsides/estimator_config.yaml
new file mode 100644
index 000000000..a49a5c680
--- /dev/null
+++ b/config/rpng_ironsides/estimator_config.yaml
@@ -0,0 +1,105 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if we should use first-estimate Jacobians (enable for good consistency)
+use_imuavg: true # for our discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints
+max_cameras: 2
+
+calib_cam_extrinsics: false
+calib_cam_intrinsics: true
+calib_cam_timeoffset: true
+
+max_clones: 12
+max_slam: 50
+max_slam_in_update: 25
+max_msckf_in_update: 40
+dt_slam_delay: 1
+
+gravity_mag: 9.80114
+
+feat_rep_msckf: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: true
+zupt_chi2_multipler: 1 # set to 0 for only disp-based
+zupt_max_velocity: 0.5
+zupt_noise_multiplier: 10
+zupt_max_disparity: 0.4 # set to 0 for only imu-based
+zupt_only_at_beginning: false
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 1.0
+init_imu_thresh: 0.5
+init_max_disparity: 1.5
+init_max_features: 50.0
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false
+record_timing_filepath: "/tmp/traj_timing.txt"
+
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 200
+fast_threshold: 10
+grid_x: 20
+grid_y: 20
+min_px_dist: 20
+knn_ratio: 0.65
+downsample_cameras: false
+multi_threading: true
+histogram_method: "CLAHE" # NONE, HISTOGRAM, CLAHE
+
+fi_max_dist: 150
+fi_max_baseline: 200
+fi_max_cond_number: 20000
+fi_triangulate_1d: false
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: false
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 2
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 2
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 1
+
+# masks for our images
+use_mask: true
+mask0: "../../../ov_data/masks/ironsides0.png" #relative to current file
+mask1: "../../../ov_data/masks/ironsides1.png" #relative to current file
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+
diff --git a/config/rpng_ironsides/kalibr_imu_chain.yaml b/config/rpng_ironsides/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..7e14da487
--- /dev/null
+++ b/config/rpng_ironsides/kalibr_imu_chain.yaml
@@ -0,0 +1,16 @@
+%YAML:1.0
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 0.0027052931930236323 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 1.3054568211204843e-04 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 1.1186830841306218e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 8.997530210630026e-07 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /imu0
+ time_offset: 0.0
+ update_rate: 200.0
\ No newline at end of file
diff --git a/config/rpng_ironsides/kalibr_imucam_chain.yaml b/config/rpng_ironsides/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..8af656255
--- /dev/null
+++ b/config/rpng_ironsides/kalibr_imucam_chain.yaml
@@ -0,0 +1,31 @@
+%YAML:1.0
+
+cam0:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [0.99992127, -0.0078594, 0.0097819, -0.05845078]
+ - [0.00784873, 0.99996856, 0.00112822, -0.00728728]
+ - [-0.00979046, -0.00105136, 0.99995152, 0.0623674]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [-0.03149689493503132, 0.07696336480701078, -0.06608854732019281, 0.019667561645120218]
+ distortion_model: equidistant
+ intrinsics: [276.4850207717928, 278.0310503180516, 314.5836189313042, 240.16980920673427] #fu, fv, cu, cv
+ resolution: [640, 480]
+ rostopic: /cam0/image_raw
+ timeshift_cam_imu: 0.00621
+
+cam1:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [0.99995933, 0.00327998, 0.00840069, 0.00793529]
+ - [-0.00328309, 0.99999455, 0.000356, -0.00716413]
+ - [-0.00839948, -0.00038357, 0.99996465, 0.06245421]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [-0.02998039058251529, 0.07202819722706337, -0.06178718820631651, 0.017655045017816777]
+ distortion_model: equidistant
+ intrinsics: [277.960323846132, 279.4348778432714, 322.404194404853, 236.72685252691352] #fu, fv, cu, cv
+ resolution: [640, 480]
+ rostopic: /cam1/image_raw
+ timeshift_cam_imu: 0.00621
\ No newline at end of file
diff --git a/config/rpng_sim/estimator_config.yaml b/config/rpng_sim/estimator_config.yaml
new file mode 100644
index 000000000..3c25232bf
--- /dev/null
+++ b/config/rpng_sim/estimator_config.yaml
@@ -0,0 +1,111 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if we should use first-estimate Jacobians (enable for good consistency)
+use_imuavg: true # for our discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints
+max_cameras: 2
+
+calib_cam_extrinsics: true
+calib_cam_intrinsics: true
+calib_cam_timeoffset: true
+
+max_clones: 11
+max_slam: 50
+max_slam_in_update: 25
+max_msckf_in_update: 10
+dt_slam_delay: 2
+
+gravity_mag: 9.81
+
+feat_rep_msckf: "GLOBAL_3D"
+feat_rep_slam: "GLOBAL_3D"
+feat_rep_aruco: "GLOBAL_3D"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: false
+zupt_chi2_multipler: 0 # set to 0 for only disp-based
+zupt_max_velocity: 0.1
+zupt_noise_multiplier: 50
+zupt_max_disparity: 0.5 # set to 0 for only imu-based
+zupt_only_at_beginning: true
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 0.75
+init_imu_thresh: 1.0
+init_max_disparity: 1.5
+init_max_features: 50.0
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false
+record_timing_filepath: "/tmp/traj_timing.txt"
+
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 250
+fast_threshold: 15
+grid_x: 20
+grid_y: 20
+min_px_dist: 15
+knn_ratio: 0.70
+downsample_cameras: false
+multi_threading: true
+histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: false
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 1
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 1
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 1
+
+# masks for our images
+use_mask: false
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+# ==================================================================
+# ==================================================================
+
+
+sim_seed_state_init: 0
+sim_seed_preturb: 0
+sim_seed_measurements: 0
+sim_do_perturbation: false
+sim_traj_path: "src/open_vins/ov_data/sim/tum_corridor1_512_16_okvis.txt"
+sim_distance_threshold: 1.2
+sim_freq_cam: 10
+sim_freq_imu: 400
+sim_min_feature_gen_dist: 5.0
+sim_max_feature_gen_dist: 7.0
\ No newline at end of file
diff --git a/config/rpng_sim/kalibr_imu_chain.yaml b/config/rpng_sim/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..394cdca13
--- /dev/null
+++ b/config/rpng_sim/kalibr_imu_chain.yaml
@@ -0,0 +1,16 @@
+%YAML:1.0
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /imu0
+ time_offset: 0.0
+ update_rate: 200.0
\ No newline at end of file
diff --git a/config/rpng_sim/kalibr_imucam_chain.yaml b/config/rpng_sim/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..6e14a9084
--- /dev/null
+++ b/config/rpng_sim/kalibr_imucam_chain.yaml
@@ -0,0 +1,28 @@
+%YAML:1.0
+
+cam0:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [0.0148655429818, -0.999880929698, 0.00414029679422, -0.0216401454975]
+ - [0.999557249008, 0.0149672133247, 0.025715529948, -0.064676986768]
+ - [-0.0257744366974, 0.00375618835797, 0.999660727178, 0.00981073058949]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [-0.28340811, 0.07395907, 0.00019359, 1.76187114e-05]
+ distortion_model: radtan
+ intrinsics: [458.654, 457.296, 367.215, 248.375] #fu, fv, cu, cv
+ resolution: [752, 480]
+ rostopic: /cam0/image_raw
+cam1:
+ T_imu_cam: #rotation from camera to IMU, position of IMU in camera
+ - [0.0125552670891, -0.999755099723, 0.0182237714554, -0.0198435579556]
+ - [0.999598781151, 0.0130119051815, 0.0251588363115, 0.0453689425024]
+ - [-0.0253898008918, 0.0179005838253, 0.999517347078, 0.00786212447038]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [-0.28368365,0.07451284,-0.00010473,-3.55590700e-05]
+ distortion_model: radtan
+ intrinsics: [457.587, 456.134, 379.999, 255.238] #fu, fv, cu, cv
+ resolution: [752, 480]
+ rostopic: /cam1/image_raw
\ No newline at end of file
diff --git a/config/tum_vi/estimator_config.yaml b/config/tum_vi/estimator_config.yaml
new file mode 100644
index 000000000..7e43d72e6
--- /dev/null
+++ b/config/tum_vi/estimator_config.yaml
@@ -0,0 +1,100 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if we should use first-estimate Jacobians (enable for good consistency)
+use_imuavg: true # for our discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints
+max_cameras: 2
+
+calib_cam_extrinsics: true
+calib_cam_intrinsics: true
+calib_cam_timeoffset: true
+
+max_clones: 11
+max_slam: 50
+max_slam_in_update: 25
+max_msckf_in_update: 40
+dt_slam_delay: 5
+
+gravity_mag: 9.80766
+
+feat_rep_msckf: "GLOBAL_3D"
+feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: false
+zupt_chi2_multipler: 0 # set to 0 for only disp-based
+zupt_max_velocity: 0.1
+zupt_noise_multiplier: 50
+zupt_max_disparity: 2.0 # set to 0 for only imu-based
+zupt_only_at_beginning: true
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 0.85
+init_imu_thresh: 0.45 # room1-5:0.45, room6:0.25
+init_max_disparity: 15.0
+init_max_features: 50.0
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false
+record_timing_filepath: "/tmp/traj_timing.txt"
+
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 250
+fast_threshold: 15
+grid_x: 20
+grid_y: 20
+min_px_dist: 15
+knn_ratio: 0.65
+downsample_cameras: false
+multi_threading: true
+histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: false
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 1
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 1
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 1
+
+# masks for our images
+use_mask: true
+mask0: "../../../ov_data/masks/tumvi0.png" #relative to current file
+mask1: "../../../ov_data/masks/tumvi1.png" #relative to current file
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+
diff --git a/config/tum_vi/kalibr_imu_chain.yaml b/config/tum_vi/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..8571eeb9f
--- /dev/null
+++ b/config/tum_vi/kalibr_imu_chain.yaml
@@ -0,0 +1,16 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 0.0028 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 0.00086 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 0.00016 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 2.2e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /imu0
+ time_offset: 0.0
+ update_rate: 200.0
\ No newline at end of file
diff --git a/config/tum_vi/kalibr_imucam_chain.yaml b/config/tum_vi/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..9da64c5ec
--- /dev/null
+++ b/config/tum_vi/kalibr_imucam_chain.yaml
@@ -0,0 +1,30 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+cam0:
+ T_cam_imu: #rotation from IMU to camera, position of camera in IMU
+ - [-0.9995250378696743, 0.029615343885863205, -0.008522328211654736, 0.04727988224914392]
+ - [0.0075019185074052044, -0.03439736061393144, -0.9993800792498829, -0.047443232143367084]
+ - [-0.02989013031643309, -0.998969345370175, 0.03415885127385616, -0.0681999605066297]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [0.0034823894022493434, 0.0007150348452162257, -0.0020532361418706202, 0.00020293673591811182]
+ distortion_model: equidistant
+ intrinsics: [190.97847715128717, 190.9733070521226, 254.93170605935475, 256.8974428996504]
+ resolution: [512, 512]
+ rostopic: /cam0/image_raw
+
+
+cam1:
+ T_cam_imu: #rotation from IMU to camera, position of camera in IMU
+ - [-0.9995110484978581, 0.030299116376600627, -0.0077218830287333565, -0.053697434688869734]
+ - [0.008104079263822521, 0.012511643720192351, -0.9998888851620987, -0.046131737923635924]
+ - [-0.030199136245891378, -0.9994625667418545, -0.012751072573940885, -0.07149261284195751]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [0.0034003170790442797, 0.001766278153469831, -0.00266312569781606, 0.0003299517423931039]
+ distortion_model: equidistant
+ intrinsics: [190.44236969414825, 190.4344384721956, 252.59949716835982, 254.91723064636983]
+ resolution: [512, 512]
+ rostopic: /cam1/image_raw
\ No newline at end of file
diff --git a/config/uzhfpv_indoor/estimator_config.yaml b/config/uzhfpv_indoor/estimator_config.yaml
new file mode 100644
index 000000000..142d412c9
--- /dev/null
+++ b/config/uzhfpv_indoor/estimator_config.yaml
@@ -0,0 +1,99 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if we should use first-estimate Jacobians (enable for good consistency)
+use_imuavg: true # for our discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints
+max_cameras: 2
+
+calib_cam_extrinsics: false
+calib_cam_intrinsics: true
+calib_cam_timeoffset: true
+
+max_clones: 11
+max_slam: 50
+max_slam_in_update: 25
+max_msckf_in_update: 30
+dt_slam_delay: 2
+
+gravity_mag: 9.81
+
+feat_rep_msckf: "GLOBAL_3D"
+feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: true
+zupt_chi2_multipler: 0 # set to 0 for only disp-based
+zupt_max_velocity: 0.5
+zupt_noise_multiplier: 20
+zupt_max_disparity: 0.4 # set to 0 for only imu-based
+zupt_only_at_beginning: false
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 1.0
+init_imu_thresh: 0.5
+init_max_disparity: 1.5
+init_max_features: 50.0
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false
+record_timing_filepath: "/tmp/traj_timing.txt"
+
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 200
+fast_threshold: 15
+grid_x: 20
+grid_y: 20
+min_px_dist: 15
+knn_ratio: 0.70
+downsample_cameras: false
+multi_threading: true
+histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: false
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 2
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 2
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 1
+
+# masks for our images
+use_mask: false
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+
+
diff --git a/config/uzhfpv_indoor/kalibr_imu_chain.yaml b/config/uzhfpv_indoor/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..5e91ccd79
--- /dev/null
+++ b/config/uzhfpv_indoor/kalibr_imu_chain.yaml
@@ -0,0 +1,20 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+# accelerometer_noise_density: 0.1 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+# accelerometer_random_walk: 0.002 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+# gyroscope_noise_density: 0.05 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+# gyroscope_random_walk: 4.0e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /snappy_imu
+ time_offset: 0.0
+ update_rate: 200.0
\ No newline at end of file
diff --git a/config/uzhfpv_indoor/kalibr_imucam_chain.yaml b/config/uzhfpv_indoor/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..aedd2f589
--- /dev/null
+++ b/config/uzhfpv_indoor/kalibr_imucam_chain.yaml
@@ -0,0 +1,37 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+cam0:
+ T_cam_imu:
+ - [-0.028228787368606456, -0.999601488301944, 1.2175294828553618e-05, 0.02172388268966517]
+ - [0.014401251861751119, -0.00041887083271471837, -0.9998962088597202, -6.605455433829172e-05]
+ - [0.999497743623523, -0.028225682131089447, 0.014407337010089172, -0.00048817563004522853]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [-0.013721808247486035, 0.020727425669427896, -0.012786476702685545,
+ 0.0025242267320687625]
+ distortion_model: equidistant
+ intrinsics: [278.66723066149086, 278.48991409740296, 319.75221200593535, 241.96858910358173]
+ resolution: [640, 480]
+ rostopic: /snappy_cam/stereo_l
+ timeshift_cam_imu: -0.016684572091862235
+cam1:
+ T_cam_imu:
+ - [-0.011823057800830705, -0.9998701444077991, -0.010950325390841398, -0.057904961033265645]
+ - [0.011552991631909482, 0.01081376681432078, -0.9998747875767439, 0.00043766687615362694]
+ - [0.9998633625093938, -0.011948086424720228, 0.011423639621249038, -0.00039944945687402214]
+ - [0.0, 0.0, 0.0, 1.0]
+ T_cn_cnm1:
+ - [0.9998053017199788, 0.011197738450911484, 0.01624713224548414, -0.07961594300469246]
+ - [-0.011147758116324, 0.9999328574031386, -0.0031635699090552883, 0.0007443452072558462]
+ - [-0.016281466199246444, 0.00298183486707869, 0.9998630018753686, 0.0004425529195268342]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [-0.008456929295619607, 0.011407590938612062, -0.006951788325762078,
+ 0.0015368127092821786]
+ distortion_model: equidistant
+ intrinsics: [277.61640629770613, 277.63749695723294, 314.8944703346039, 236.04310050462587]
+ resolution: [640, 480]
+ rostopic: /snappy_cam/stereo_r
+ timeshift_cam_imu: -0.016591431247074982
\ No newline at end of file
diff --git a/config/uzhfpv_indoor_45/estimator_config.yaml b/config/uzhfpv_indoor_45/estimator_config.yaml
new file mode 100644
index 000000000..142d412c9
--- /dev/null
+++ b/config/uzhfpv_indoor_45/estimator_config.yaml
@@ -0,0 +1,99 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT
+
+use_fej: true # if we should use first-estimate Jacobians (enable for good consistency)
+use_imuavg: true # for our discrete integration, if we should average sequential IMU measurements to "smooth" it
+use_rk4int: true # if rk4 integration should be used (overrides imu averaging)
+
+use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints
+max_cameras: 2
+
+calib_cam_extrinsics: false
+calib_cam_intrinsics: true
+calib_cam_timeoffset: true
+
+max_clones: 11
+max_slam: 50
+max_slam_in_update: 25
+max_msckf_in_update: 30
+dt_slam_delay: 2
+
+gravity_mag: 9.81
+
+feat_rep_msckf: "GLOBAL_3D"
+feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
+feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"
+
+# zero velocity update parameters we can use
+# we support either IMU-based or disparity detection.
+try_zupt: true
+zupt_chi2_multipler: 0 # set to 0 for only disp-based
+zupt_max_velocity: 0.5
+zupt_noise_multiplier: 20
+zupt_max_disparity: 0.4 # set to 0 for only imu-based
+zupt_only_at_beginning: false
+
+# ==================================================================
+# ==================================================================
+
+init_window_time: 1.0
+init_imu_thresh: 0.5
+init_max_disparity: 1.5
+init_max_features: 50.0
+
+# ==================================================================
+# ==================================================================
+
+record_timing_information: false
+record_timing_filepath: "/tmp/traj_timing.txt"
+
+save_total_state: false
+filepath_est: "/tmp/ov_estimate.txt"
+filepath_std: "/tmp/ov_estimate_std.txt"
+filepath_gt: "/tmp/ov_groundtruth.txt"
+
+# ==================================================================
+# ==================================================================
+
+# our front-end feature tracking parameters
+# we have a KLT and descriptor based (KLT is better implemented...)
+use_klt: true
+num_pts: 200
+fast_threshold: 15
+grid_x: 20
+grid_y: 20
+min_px_dist: 15
+knn_ratio: 0.70
+downsample_cameras: false
+multi_threading: true
+histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE
+
+# aruco tag tracker for the system
+# DICT_6X6_1000 from https://chev.me/arucogen/
+use_aruco: false
+num_aruco: 1024
+downsize_aruco: true
+
+# ==================================================================
+# ==================================================================
+
+# camera noises and chi-squared threshold multipliers
+up_msckf_sigma_px: 2
+up_msckf_chi2_multipler: 1
+up_slam_sigma_px: 2
+up_slam_chi2_multipler: 1
+up_aruco_sigma_px: 1
+up_aruco_chi2_multipler: 1
+
+# masks for our images
+use_mask: false
+
+# imu and camera spacial-temporal
+# imu config should also have the correct noise values
+relative_config_imu: "kalibr_imu_chain.yaml"
+relative_config_imucam: "kalibr_imucam_chain.yaml"
+
+
+
+
diff --git a/config/uzhfpv_indoor_45/kalibr_imu_chain.yaml b/config/uzhfpv_indoor_45/kalibr_imu_chain.yaml
new file mode 100644
index 000000000..32c182c76
--- /dev/null
+++ b/config/uzhfpv_indoor_45/kalibr_imu_chain.yaml
@@ -0,0 +1,20 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+imu0:
+ T_i_b:
+ - [1.0, 0.0, 0.0, 0.0]
+ - [0.0, 1.0, 0.0, 0.0]
+ - [0.0, 0.0, 1.0, 0.0]
+ - [0.0, 0.0, 0.0, 1.0]
+ accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ # accelerometer_noise_density: 0.1 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
+ # accelerometer_random_walk: 0.002 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
+ # gyroscope_noise_density: 0.05 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
+ # gyroscope_random_walk: 4.0e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
+ model: calibrated
+ rostopic: /snappy_imu
+ time_offset: 0.0
+ update_rate: 200.0
\ No newline at end of file
diff --git a/config/uzhfpv_indoor_45/kalibr_imucam_chain.yaml b/config/uzhfpv_indoor_45/kalibr_imucam_chain.yaml
new file mode 100644
index 000000000..37838c854
--- /dev/null
+++ b/config/uzhfpv_indoor_45/kalibr_imucam_chain.yaml
@@ -0,0 +1,37 @@
+%YAML:1.0 # need to specify the file type at the top!
+
+cam0:
+ T_cam_imu:
+ - [-0.027256691772188965, -0.9996260641688061, 0.0021919370477445077, 0.02422852666805565]
+ - [-0.7139206120417471, 0.017931469899155242, -0.6999970157716363, 0.008974432843748055]
+ - [0.6996959571525168, -0.020644471939022302, -0.714142404092339, -0.000638971731537894]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [1]
+ camera_model: pinhole
+ distortion_coeffs: [-6.545154718304953e-06, -0.010379525898159981, 0.014935312423953146,
+ -0.005639061406567785]
+ distortion_model: equidistant
+ intrinsics: [275.46015578667294, 274.9948095922592, 315.958384100568, 242.7123497822731]
+ resolution: [640, 480]
+ rostopic: /snappy_cam/stereo_l
+ timeshift_cam_imu: -0.01484888826656275
+cam1:
+ T_cam_imu:
+ - [-0.01749277298389329, -0.9997914625864506, -0.010537278233961556, -0.05569997768397372]
+ - [-0.7090991957246053, 0.019835234209851005, -0.7048296915614142, 0.00884826894411553]
+ - [0.7048917175822481, -0.004857450265962848, -0.7092982952614942, -0.0019997713120269607]
+ - [0.0, 0.0, 0.0, 1.0]
+ T_cn_cnm1:
+ - [0.9998713028057842, 0.0019367839962957476, 0.015925661468614183, -0.07993259169905036]
+ - [-0.0020450612045710957, 0.9999748874354272, 0.0067854420026733295, -7.205400304978925e-05]
+ - [-0.01591211959893364, -0.006817137687752675, 0.9998501543149417, -0.0009141881692325364]
+ - [0.0, 0.0, 0.0, 1.0]
+ cam_overlaps: [0]
+ camera_model: pinhole
+ distortion_coeffs: [-0.012138050918285051, 0.02244029339184358, -0.013753165428754275,
+ 0.002725090438517269]
+ distortion_model: equidistant
+ intrinsics: [274.4628309070672, 273.9261674470783, 315.93654481793794, 235.779167375461]
+ resolution: [640, 480]
+ rostopic: /snappy_cam/stereo_r
+ timeshift_cam_imu: -0.014950736007814259
\ No newline at end of file
diff --git a/docs/bib/extra.bib b/docs/bib/extra.bib
index 783aa7566..26c656879 100644
--- a/docs/bib/extra.bib
+++ b/docs/bib/extra.bib
@@ -40,7 +40,7 @@ @inproceedings{Schubert2018IROS
url = {https://arxiv.org/pdf/1804.06120.pdf},
}
-@inproceedings{Furgale2013ICRA,
+@inproceedings{Furgale2013IROS,
title = {Unified temporal and spatial calibration for multi-sensor systems},
author = {Furgale, Paul and Rehder, Joern and Siegwart, Roland},
booktitle = {2013 IEEE/RSJ International Conference on Intelligent Robots and Systems},
@@ -228,4 +228,14 @@ @article{Jeon2021RAL
publisher={IEEE}
}
+@inproceedings{Dong2012IROS,
+ title={Estimator initialization in vision-aided inertial navigation with unknown camera-IMU calibration},
+ author={Dong-Si, Tue-Cuong and Mourikis, Anastasios I},
+ booktitle={2012 IEEE/RSJ International Conference on Intelligent Robots and Systems},
+ pages={1064--1071},
+ year={2012},
+ organization={IEEE}
+}
+
+
diff --git a/docs/css/custom.css b/docs/css/custom.css
index b6bd9942d..7b8b33bc0 100644
--- a/docs/css/custom.css
+++ b/docs/css/custom.css
@@ -1,4 +1,3 @@
-
/* don't indent each paragraph since we frequently use equations */
main p {
text-indent: 0rem !important;
@@ -36,9 +35,11 @@ body > header > nav a#m-navbar-brand, body > header > nav #m-navbar-brand a {
.m-doc-template, dl.m-doc dd, ul.m-doc li > span.m-doc {
color: #1a1a1a;
}
+
.m-doc-template a, dl.m-doc dd a, ul.m-doc li > span.m-doc a {
color: #1a1a1a;
}
+
.m-block.m-dim, .m-text.m-dim, .m-label.m-flat.m-dim {
color: #1a1a1a;
}
\ No newline at end of file
diff --git a/docs/css/m-udel+documentation.compiled.css b/docs/css/m-udel+documentation.compiled.css
index 81054871f..0a9a854db 100644
--- a/docs/css/m-udel+documentation.compiled.css
+++ b/docs/css/m-udel+documentation.compiled.css
@@ -24,1500 +24,2417 @@
DEALINGS IN THE SOFTWARE.
*/
-*, ::before, ::after { box-sizing: border-box; }
-body { margin: 0; }
+*, ::before, ::after {
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+}
+
.m-container {
- width: 100%;
- margin: auto;
- padding-left: 1rem;
- padding-right: 1rem;
+ width: 100%;
+ margin: auto;
+ padding-left: 1rem;
+ padding-right: 1rem;
}
+
.m-row {
- margin-left: -1rem;
- margin-right: -1rem;
+ margin-left: -1rem;
+ margin-right: -1rem;
}
+
.m-row:after {
- content: ' ';
- clear: both;
- display: table;
+ content: ' ';
+ clear: both;
+ display: table;
}
+
.m-row > [class*='m-col-'] {
- position: relative;
- padding: 1rem;
+ position: relative;
+ padding: 1rem;
}
+
[class*='m-clearfix-']::after {
- display: block;
- content: ' ';
- clear: both;
+ display: block;
+ content: ' ';
+ clear: both;
}
+
[class*='m-show-'] {
- display: none;
+ display: none;
}
+
.m-container-inflate, :not(.m-row) > [class*='m-col-'] {
- margin-bottom: 1rem;
+ margin-bottom: 1rem;
}
+
.m-container-inflate:last-child, :not(.m-row) > [class*='m-col-']:last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
+
.m-container.m-nopad, [class*='m-col-'].m-nopad,
.m-container.m-nopadx, [class*='m-col-'].m-nopadx,
.m-container.m-nopadl, [class*='m-col-'].m-nopadl {
- padding-left: 0;
+ padding-left: 0;
}
+
.m-container.m-nopad, [class*='m-col-'].m-nopad,
.m-container.m-nopadx, [class*='m-col-'].m-nopadx,
.m-container.m-nopadr, [class*='m-col-'].m-nopadr {
- padding-right: 0;
+ padding-right: 0;
}
+
[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadt {
- padding-top: 0;
+ padding-top: 0;
}
+
[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadb,
.m-container-inflate.m-nopadb {
- padding-bottom: 0;
-}
-[class*='m-col-t-'] { float: left; }
-.m-left-t {
- padding-right: 1rem;
- float: left;
-}
-.m-right-t, [class*='m-col-t-'].m-right-t {
- padding-left: 1rem;
- float: right;
-}
-.m-center-t, [class*='m-col-t-'].m-center-t {
- float: none;
+ padding-bottom: 0;
}
-.m-center-t, [class*='m-col-t-'].m-center-t {
- margin-left: auto;
- margin-right: auto;
- float: none;
-}
-.m-col-t-1 { width: calc(1 * 100% / 12); }
-.m-col-t-2 { width: calc(2 * 100% / 12); }
-.m-col-t-3 { width: calc(3 * 100% / 12); }
-.m-col-t-4 { width: calc(4 * 100% / 12); }
-.m-col-t-5 { width: calc(5 * 100% / 12); }
-.m-col-t-6 { width: calc(6 * 100% / 12); }
-.m-col-t-7 { width: calc(7 * 100% / 12); }
-.m-col-t-8 { width: calc(8 * 100% / 12); }
-.m-col-t-9 { width: calc(9 * 100% / 12); }
-.m-col-t-10 { width: calc(10 * 100% / 12); }
-.m-col-t-11 { width: calc(11 * 100% / 12); }
-.m-col-t-12 { width: calc(12 * 100% / 12); }
-.m-push-t-1 { left: calc(1 * 100% / 12); }
-.m-push-t-2 { left: calc(2 * 100% / 12); }
-.m-push-t-3 { left: calc(3 * 100% / 12); }
-.m-push-t-4 { left: calc(4 * 100% / 12); }
-.m-push-t-5 { left: calc(5 * 100% / 12); }
-.m-push-t-6 { left: calc(6 * 100% / 12); }
-.m-push-t-7 { left: calc(7 * 100% / 12); }
-.m-push-t-8 { left: calc(8 * 100% / 12); }
-.m-push-t-9 { left: calc(9 * 100% / 12); }
-.m-push-t-10 { left: calc(10 * 100% / 12); }
-.m-push-t-11 { left: calc(11 * 100% / 12); }
-.m-pull-t-1 { right: calc(1 * 100% / 12); }
-.m-pull-t-2 { right: calc(2 * 100% / 12); }
-.m-pull-t-3 { right: calc(3 * 100% / 12); }
-.m-pull-t-4 { right: calc(4 * 100% / 12); }
-.m-pull-t-5 { right: calc(5 * 100% / 12); }
-.m-pull-t-6 { right: calc(6 * 100% / 12); }
-.m-pull-t-7 { right: calc(7 * 100% / 12); }
-.m-pull-t-8 { right: calc(8 * 100% / 12); }
-.m-pull-t-9 { right: calc(9 * 100% / 12); }
-.m-pull-t-10 { right: calc(10 * 100% / 12); }
-.m-pull-t-11 { right: calc(11 * 100% / 12); }
-@media screen and (min-width: 576px) {
- .m-container { width: 560px; }
- .m-container-inflatable .m-col-s-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
- margin-left: -10%;
- margin-right: -10%;
- }
- .m-container-inflatable .m-col-s-10 .m-container-inflate.m-left-s {
- margin-left: -10%;
- }
- .m-container-inflatable .m-col-s-10 .m-container-inflate.m-right-s {
- margin-right: -10%;
- }
- [class*='m-col-s-'] { float: left; }
- .m-left-s {
- padding-right: 1rem;
+
+[class*='m-col-t-'] {
float: left;
- }
- .m-right-s, [class*='m-col-s-'].m-right-s {
- padding-left: 1rem;
- float: right;
- }
- .m-center-s, [class*='m-col-s-'].m-center-s {
- margin-left: auto;
- margin-right: auto;
- float: none;
- }
- .m-col-s-1 { width: calc(1 * 100% / 12); }
- .m-col-s-2 { width: calc(2 * 100% / 12); }
- .m-col-s-3 { width: calc(3 * 100% / 12); }
- .m-col-s-4 { width: calc(4 * 100% / 12); }
- .m-col-s-5 { width: calc(5 * 100% / 12); }
- .m-col-s-6 { width: calc(6 * 100% / 12); }
- .m-col-s-7 { width: calc(7 * 100% / 12); }
- .m-col-s-8 { width: calc(8 * 100% / 12); }
- .m-col-s-9 { width: calc(9 * 100% / 12); }
- .m-col-s-10 { width: calc(10 * 100% / 12); }
- .m-col-s-11 { width: calc(11 * 100% / 12); }
- .m-col-s-12 { width: calc(12 * 100% / 12); }
- .m-push-s-0 { left: calc(0 * 100% / 12); }
- .m-push-s-1 { left: calc(1 * 100% / 12); }
- .m-push-s-2 { left: calc(2 * 100% / 12); }
- .m-push-s-3 { left: calc(3 * 100% / 12); }
- .m-push-s-4 { left: calc(4 * 100% / 12); }
- .m-push-s-5 { left: calc(5 * 100% / 12); }
- .m-push-s-6 { left: calc(6 * 100% / 12); }
- .m-push-s-7 { left: calc(7 * 100% / 12); }
- .m-push-s-8 { left: calc(8 * 100% / 12); }
- .m-push-s-9 { left: calc(9 * 100% / 12); }
- .m-push-s-10 { left: calc(10 * 100% / 12); }
- .m-push-s-11 { left: calc(11 * 100% / 12); }
- .m-pull-s-0 { right: calc(0 * 100% / 12); }
- .m-pull-s-1 { right: calc(1 * 100% / 12); }
- .m-pull-s-2 { right: calc(2 * 100% / 12); }
- .m-pull-s-3 { right: calc(3 * 100% / 12); }
- .m-pull-s-4 { right: calc(4 * 100% / 12); }
- .m-pull-s-5 { right: calc(5 * 100% / 12); }
- .m-pull-s-6 { right: calc(6 * 100% / 12); }
- .m-pull-s-7 { right: calc(7 * 100% / 12); }
- .m-pull-s-8 { right: calc(8 * 100% / 12); }
- .m-pull-s-9 { right: calc(9 * 100% / 12); }
- .m-pull-s-10 { right: calc(10 * 100% / 12); }
- .m-pull-s-11 { right: calc(11 * 100% / 12); }
- .m-clearfix-t::after { display: none; }
- .m-hide-s { display: none; }
- .m-show-s { display: block; }
- .m-col-s-none {
- width: auto;
- float: none;
- }
}
-@media screen and (min-width: 768px) {
- .m-container { width: 750px; }
- .m-container-inflatable .m-col-m-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
- margin-left: -10%;
- margin-right: -10%;
- }
- .m-container-inflatable .m-col-m-10 .m-container-inflate.m-left-m {
- margin-left: -10%;
- }
- .m-container-inflatable .m-col-m-10 .m-container-inflate.m-right-m {
- margin-right: -10%;
- }
- [class*='m-col-m-'] { float: left; }
- .m-left-m {
+
+.m-left-t {
padding-right: 1rem;
float: left;
- }
- .m-right-m, [class*='m-col-m-'].m-right-m {
+}
+
+.m-right-t, [class*='m-col-t-'].m-right-t {
padding-left: 1rem;
float: right;
- }
- .m-center-m, [class*='m-col-m-'].m-center-m {
- margin-left: auto;
- margin-right: auto;
- float: none;
- }
- .m-col-m-1 { width: calc(1 * 100% / 12); }
- .m-col-m-2 { width: calc(2 * 100% / 12); }
- .m-col-m-3 { width: calc(3 * 100% / 12); }
- .m-col-m-4 { width: calc(4 * 100% / 12); }
- .m-col-m-5 { width: calc(5 * 100% / 12); }
- .m-col-m-6 { width: calc(6 * 100% / 12); }
- .m-col-m-7 { width: calc(7 * 100% / 12); }
- .m-col-m-8 { width: calc(8 * 100% / 12); }
- .m-col-m-9 { width: calc(9 * 100% / 12); }
- .m-col-m-10 { width: calc(10 * 100% / 12); }
- .m-col-m-11 { width: calc(11 * 100% / 12); }
- .m-col-m-12 { width: calc(12 * 100% / 12); }
- .m-push-m-0 { left: calc(0 * 100% / 12); }
- .m-push-m-1 { left: calc(1 * 100% / 12); }
- .m-push-m-2 { left: calc(2 * 100% / 12); }
- .m-push-m-3 { left: calc(3 * 100% / 12); }
- .m-push-m-4 { left: calc(4 * 100% / 12); }
- .m-push-m-5 { left: calc(5 * 100% / 12); }
- .m-push-m-6 { left: calc(6 * 100% / 12); }
- .m-push-m-7 { left: calc(7 * 100% / 12); }
- .m-push-m-8 { left: calc(8 * 100% / 12); }
- .m-push-m-9 { left: calc(9 * 100% / 12); }
- .m-push-m-10 { left: calc(10 * 100% / 12); }
- .m-push-m-11 { left: calc(11 * 100% / 12); }
- .m-pull-m-0 { right: calc(0 * 100% / 12); }
- .m-pull-m-1 { right: calc(1 * 100% / 12); }
- .m-pull-m-2 { right: calc(2 * 100% / 12); }
- .m-pull-m-3 { right: calc(3 * 100% / 12); }
- .m-pull-m-4 { right: calc(4 * 100% / 12); }
- .m-pull-m-5 { right: calc(5 * 100% / 12); }
- .m-pull-m-6 { right: calc(6 * 100% / 12); }
- .m-pull-m-7 { right: calc(7 * 100% / 12); }
- .m-pull-m-8 { right: calc(8 * 100% / 12); }
- .m-pull-m-9 { right: calc(9 * 100% / 12); }
- .m-pull-m-10 { right: calc(10 * 100% / 12); }
- .m-pull-m-11 { right: calc(11 * 100% / 12); }
- .m-clearfix-s::after { display: none; }
- .m-hide-m { display: none; }
- .m-show-m { display: block; }
- .m-col-m-none {
- width: auto;
+}
+
+.m-center-t, [class*='m-col-t-'].m-center-t {
float: none;
- }
}
-@media screen and (min-width: 992px) {
- .m-container { width: 960px; }
- .m-container-inflatable .m-col-l-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
- margin-left: -10%;
- margin-right: -10%;
- }
- .m-container-inflatable .m-col-l-10 .m-container-inflate.m-left-l {
- margin-left: -10%;
- }
- .m-container-inflatable .m-col-l-10 .m-container-inflate.m-right-l {
- margin-right: -10%;
- }
- [class*='m-col-l-'] { float: left; }
- .m-left-l {
- padding-right: 1rem;
- float: left;
- }
- .m-right-l, [class*='m-col-l-'].m-right-l {
- padding-left: 1rem;
- float: right;
- }
- .m-center-l, [class*='m-col-l-'].m-center-l {
+
+.m-center-t, [class*='m-col-t-'].m-center-t {
margin-left: auto;
margin-right: auto;
float: none;
- }
- .m-col-l-1 { width: calc(1 * 100% / 12); }
- .m-col-l-2 { width: calc(2 * 100% / 12); }
- .m-col-l-3 { width: calc(3 * 100% / 12); }
- .m-col-l-4 { width: calc(4 * 100% / 12); }
- .m-col-l-5 { width: calc(5 * 100% / 12); }
- .m-col-l-6 { width: calc(6 * 100% / 12); }
- .m-col-l-7 { width: calc(7 * 100% / 12); }
- .m-col-l-8 { width: calc(8 * 100% / 12); }
- .m-col-l-9 { width: calc(9 * 100% / 12); }
- .m-col-l-10 { width: calc(10 * 100% / 12); }
- .m-col-l-11 { width: calc(11 * 100% / 12); }
- .m-col-l-12 { width: calc(12 * 100% / 12); }
- .m-push-l-0 { left: calc(0 * 100% / 12); }
- .m-push-l-1 { left: calc(1 * 100% / 12); }
- .m-push-l-2 { left: calc(2 * 100% / 12); }
- .m-push-l-3 { left: calc(3 * 100% / 12); }
- .m-push-l-4 { left: calc(4 * 100% / 12); }
- .m-push-l-5 { left: calc(5 * 100% / 12); }
- .m-push-l-6 { left: calc(6 * 100% / 12); }
- .m-push-l-7 { left: calc(7 * 100% / 12); }
- .m-push-l-8 { left: calc(8 * 100% / 12); }
- .m-push-l-9 { left: calc(9 * 100% / 12); }
- .m-push-l-10 { left: calc(10 * 100% / 12); }
- .m-push-l-11 { left: calc(11 * 100% / 12); }
- .m-pull-l-0 { right: calc(0 * 100% / 12); }
- .m-pull-l-1 { right: calc(1 * 100% / 12); }
- .m-pull-l-2 { right: calc(2 * 100% / 12); }
- .m-pull-l-3 { right: calc(3 * 100% / 12); }
- .m-pull-l-4 { right: calc(4 * 100% / 12); }
- .m-pull-l-5 { right: calc(5 * 100% / 12); }
- .m-pull-l-6 { right: calc(6 * 100% / 12); }
- .m-pull-l-7 { right: calc(7 * 100% / 12); }
- .m-pull-l-8 { right: calc(8 * 100% / 12); }
- .m-pull-l-9 { right: calc(9 * 100% / 12); }
- .m-pull-l-10 { right: calc(10 * 100% / 12); }
- .m-pull-l-11 { right: calc(11 * 100% / 12); }
- .m-clearfix-m::after { display: none; }
- .m-hide-l { display: none; }
- .m-show-l { display: block; }
- .m-col-l-none {
- width: auto;
- float: none;
- }
}
-html {
- font-size: 1em;
- background-color: #ffffff;
-}
-body {
- font-family: 'Source Sans Pro', sans-serif;
- font-size: 1rem;
- line-height: normal;
- color: #000000;
-}
-h1, h2, h3, h4, h5, h6 {
- margin-top: 0;
- font-weight: normal;
-}
-h1 {
- margin-bottom: 1rem;
-}
-h2, h3, h4, h5, h6 {
- margin-bottom: 0.5rem;
-}
-p, ul, ol, dl {
- margin-top: 0;
-}
-ul, ol {
- padding-left: 2rem;
+.m-col-t-1 {
+ width: calc(1 * 100% / 12);
}
-ul ol, ul ul, ol ol, ol ul {
- margin-bottom: 0;
+
+.m-col-t-2 {
+ width: calc(2 * 100% / 12);
}
-main p {
- text-indent: 1.5rem;
- text-align: justify;
+
+.m-col-t-3 {
+ width: calc(3 * 100% / 12);
}
-main p.m-noindent, li > p, dd > p, table.m-table td > p {
- text-indent: 0;
- text-align: left;
+
+.m-col-t-4 {
+ width: calc(4 * 100% / 12);
}
-blockquote {
- margin-top: 0;
- margin-left: 1rem;
- margin-right: 1rem;
- padding: 1rem;
- border-left-style: solid;
- border-left-width: 0.25rem;
+
+.m-col-t-5 {
+ width: calc(5 * 100% / 12);
}
-hr {
- width: 75%;
- border-width: 0.0625rem;
- border-style: solid;
+
+.m-col-t-6 {
+ width: calc(6 * 100% / 12);
}
-blockquote, hr {
- border-color: #c7cfd9;
+
+.m-col-t-7 {
+ width: calc(7 * 100% / 12);
}
-strong, .m-text.m-strong { font-weight: bold; }
-em, .m-text.m-em { font-style: italic; }
-s, .m-text.m-s { text-decoration: line-through; }
-sub, sup, .m-text.m-sub, .m-text.m-sup {
- font-size: 0.75rem;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
+
+.m-col-t-8 {
+ width: calc(8 * 100% / 12);
}
-sup, .m-text.m-sup { top: -0.35rem; }
-sub, .m-text.m-sub { bottom: -0.2rem; }
-abbr {
- cursor: help;
- text-decoration: underline dotted;
+
+.m-col-t-9 {
+ width: calc(9 * 100% / 12);
}
-a {
- color: #205275;
+
+.m-col-t-10 {
+ width: calc(10 * 100% / 12);
}
-a.m-flat {
- text-decoration: none;
+
+.m-col-t-11 {
+ width: calc(11 * 100% / 12);
}
-a:hover, a:focus, a:active {
- color: #2f73a3;
+
+.m-col-t-12 {
+ width: calc(12 * 100% / 12);
}
-a img { border: 0; }
-svg a { cursor: pointer; }
-mark {
- padding: 0.0625rem;
- background-color: #f0c63e;
- color: #4c93d3;
+
+.m-push-t-1 {
+ left: calc(1 * 100% / 12);
}
-.m-link-wrap {
- word-break: break-all;
+
+.m-push-t-2 {
+ left: calc(2 * 100% / 12);
}
-pre, code {
- font-family: 'Source Code Pro', monospace, monospace, monospace;
- font-size: 0.8em;
- color: #000000;
- background-color: #f2f7fa;
+
+.m-push-t-3 {
+ left: calc(3 * 100% / 12);
}
-pre.m-console, code.m-console {
- color: #000000;
- background-color: #000000;
+
+.m-push-t-4 {
+ left: calc(4 * 100% / 12);
}
-pre {
- padding: 0.5rem 1rem;
- border-radius: 0.2rem;
- overflow-x: auto;
- margin-top: 0;
+
+.m-push-t-5 {
+ left: calc(5 * 100% / 12);
}
-pre.m-console-wrap {
- white-space: pre-wrap;
- word-break: break-all;
+
+.m-push-t-6 {
+ left: calc(6 * 100% / 12);
}
-code {
- padding: 0.125rem;
+
+.m-push-t-7 {
+ left: calc(7 * 100% / 12);
}
-*:focus { outline-color: #2f73a3; }
-div.m-scroll {
- max-width: 100%;
- overflow-x: auto;
+
+.m-push-t-8 {
+ left: calc(8 * 100% / 12);
}
-.m-fullwidth {
- width: 100%;
+
+.m-push-t-9 {
+ left: calc(9 * 100% / 12);
}
-.m-spacing-150 {
- line-height: 1.5rem;
+
+.m-push-t-10 {
+ left: calc(10 * 100% / 12);
}
-.m-text-center, .m-text-center.m-noindent, table.m-table th.m-text-center, .m-text-center p {
- text-align: center;
+
+.m-push-t-11 {
+ left: calc(11 * 100% / 12);
}
-.m-text-left, .m-text-left.m-noindent, table.m-table th.m-text-left, .m-text-right p {
- text-align: left;
+
+.m-pull-t-1 {
+ right: calc(1 * 100% / 12);
}
-.m-text-right, .m-text-right.m-noindent, table.m-table th.m-text-right, .m-text-right p {
- text-align: right;
+
+.m-pull-t-2 {
+ right: calc(2 * 100% / 12);
}
-.m-text-top, table.m-table th.m-text-top, table.m-table td.m-text-top {
- vertical-align: top;
+
+.m-pull-t-3 {
+ right: calc(3 * 100% / 12);
}
-.m-text-middle, table.m-table th.m-text-middle, table.m-table td.m-text-middle {
- vertical-align: middle;
+
+.m-pull-t-4 {
+ right: calc(4 * 100% / 12);
}
-.m-text-bottom, table.m-table th.m-text-bottom, table.m-table td.m-text-bottom {
- vertical-align: bottom;
+
+.m-pull-t-5 {
+ right: calc(5 * 100% / 12);
}
-.m-text.m-tiny { font-size: 50.0%; }
-.m-text.m-small { font-size: 85.4%; }
-.m-text.m-big { font-size: 117%; }
-h1 .m-thin, h2 .m-thin, h3 .m-thin, h4 .m-thin, h5 .m-thin, h6 .m-thin {
- font-weight: normal;
+
+.m-pull-t-6 {
+ right: calc(6 * 100% / 12);
}
-ul.m-unstyled, ol.m-unstyled {
- list-style-type: none;
- padding-left: 0;
+
+.m-pull-t-7 {
+ right: calc(7 * 100% / 12);
}
-ul[class*='m-block-'], ol[class*='m-block-'] {
- padding-left: 0;
+
+.m-pull-t-8 {
+ right: calc(8 * 100% / 12);
}
-ul[class*='m-block-'] li, ol[class*='m-block-'] li {
- display: inline;
+
+.m-pull-t-9 {
+ right: calc(9 * 100% / 12);
}
-ul[class*='m-block-bar-'] li:not(:last-child)::after, ol[class*='m-block-bar-'] li:not(:last-child)::after {
- content: " | ";
+
+.m-pull-t-10 {
+ right: calc(10 * 100% / 12);
}
-ul[class*='m-block-dot-'] li:not(:last-child)::after, ol[class*='m-block-dot-'] li:not(:last-child)::after {
- content: " • ";
+
+.m-pull-t-11 {
+ right: calc(11 * 100% / 12);
}
+
@media screen and (min-width: 576px) {
- ul.m-block-bar-s, ol.m-block-bar-s,
- ul.m-block-dot-s, ol.m-block-dot-s { padding-left: 2rem; }
- ul.m-block-bar-s li, ol.m-block-bar-s li,
- ul.m-block-dot-s li, ol.m-block-dot-s li { display: list-item; }
- ul.m-block-bar-s li:not(:last-child)::after, ol.m-block-bar-s li:not(:last-child)::after,
- ul.m-block-dot-s li:not(:last-child)::after, ol.m-block-dot-s li:not(:last-child)::after { content: ""; }
+ .m-container {
+ width: 560px;
+ }
+
+ .m-container-inflatable .m-col-s-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
+ margin-left: -10%;
+ margin-right: -10%;
+ }
+
+ .m-container-inflatable .m-col-s-10 .m-container-inflate.m-left-s {
+ margin-left: -10%;
+ }
+
+ .m-container-inflatable .m-col-s-10 .m-container-inflate.m-right-s {
+ margin-right: -10%;
+ }
+
+ [class*='m-col-s-'] {
+ float: left;
+ }
+
+ .m-left-s {
+ padding-right: 1rem;
+ float: left;
+ }
+
+ .m-right-s, [class*='m-col-s-'].m-right-s {
+ padding-left: 1rem;
+ float: right;
+ }
+
+ .m-center-s, [class*='m-col-s-'].m-center-s {
+ margin-left: auto;
+ margin-right: auto;
+ float: none;
+ }
+
+ .m-col-s-1 {
+ width: calc(1 * 100% / 12);
+ }
+
+ .m-col-s-2 {
+ width: calc(2 * 100% / 12);
+ }
+
+ .m-col-s-3 {
+ width: calc(3 * 100% / 12);
+ }
+
+ .m-col-s-4 {
+ width: calc(4 * 100% / 12);
+ }
+
+ .m-col-s-5 {
+ width: calc(5 * 100% / 12);
+ }
+
+ .m-col-s-6 {
+ width: calc(6 * 100% / 12);
+ }
+
+ .m-col-s-7 {
+ width: calc(7 * 100% / 12);
+ }
+
+ .m-col-s-8 {
+ width: calc(8 * 100% / 12);
+ }
+
+ .m-col-s-9 {
+ width: calc(9 * 100% / 12);
+ }
+
+ .m-col-s-10 {
+ width: calc(10 * 100% / 12);
+ }
+
+ .m-col-s-11 {
+ width: calc(11 * 100% / 12);
+ }
+
+ .m-col-s-12 {
+ width: calc(12 * 100% / 12);
+ }
+
+ .m-push-s-0 {
+ left: calc(0 * 100% / 12);
+ }
+
+ .m-push-s-1 {
+ left: calc(1 * 100% / 12);
+ }
+
+ .m-push-s-2 {
+ left: calc(2 * 100% / 12);
+ }
+
+ .m-push-s-3 {
+ left: calc(3 * 100% / 12);
+ }
+
+ .m-push-s-4 {
+ left: calc(4 * 100% / 12);
+ }
+
+ .m-push-s-5 {
+ left: calc(5 * 100% / 12);
+ }
+
+ .m-push-s-6 {
+ left: calc(6 * 100% / 12);
+ }
+
+ .m-push-s-7 {
+ left: calc(7 * 100% / 12);
+ }
+
+ .m-push-s-8 {
+ left: calc(8 * 100% / 12);
+ }
+
+ .m-push-s-9 {
+ left: calc(9 * 100% / 12);
+ }
+
+ .m-push-s-10 {
+ left: calc(10 * 100% / 12);
+ }
+
+ .m-push-s-11 {
+ left: calc(11 * 100% / 12);
+ }
+
+ .m-pull-s-0 {
+ right: calc(0 * 100% / 12);
+ }
+
+ .m-pull-s-1 {
+ right: calc(1 * 100% / 12);
+ }
+
+ .m-pull-s-2 {
+ right: calc(2 * 100% / 12);
+ }
+
+ .m-pull-s-3 {
+ right: calc(3 * 100% / 12);
+ }
+
+ .m-pull-s-4 {
+ right: calc(4 * 100% / 12);
+ }
+
+ .m-pull-s-5 {
+ right: calc(5 * 100% / 12);
+ }
+
+ .m-pull-s-6 {
+ right: calc(6 * 100% / 12);
+ }
+
+ .m-pull-s-7 {
+ right: calc(7 * 100% / 12);
+ }
+
+ .m-pull-s-8 {
+ right: calc(8 * 100% / 12);
+ }
+
+ .m-pull-s-9 {
+ right: calc(9 * 100% / 12);
+ }
+
+ .m-pull-s-10 {
+ right: calc(10 * 100% / 12);
+ }
+
+ .m-pull-s-11 {
+ right: calc(11 * 100% / 12);
+ }
+
+ .m-clearfix-t::after {
+ display: none;
+ }
+
+ .m-hide-s {
+ display: none;
+ }
+
+ .m-show-s {
+ display: block;
+ }
+
+ .m-col-s-none {
+ width: auto;
+ float: none;
+ }
}
+
@media screen and (min-width: 768px) {
- ul.m-block-bar-m, ol.m-block-bar-m,
- ul.m-block-dot-m, ol.m-block-dot-m { padding-left: 2rem; }
- ul.m-block-bar-m li, ol.m-block-bar-m li,
- ul.m-block-dot-m li, ol.m-block-dot-m li { display: list-item; }
- ul.m-block-bar-m li:not(:last-child)::after, ol.m-block-bar-m li:not(:last-child)::after,
- ul.m-block-dot-m li:not(:last-child)::after, ol.m-block-dot-m li:not(:last-child)::after { content: ""; }
+ .m-container {
+ width: 750px;
+ }
+
+ .m-container-inflatable .m-col-m-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
+ margin-left: -10%;
+ margin-right: -10%;
+ }
+
+ .m-container-inflatable .m-col-m-10 .m-container-inflate.m-left-m {
+ margin-left: -10%;
+ }
+
+ .m-container-inflatable .m-col-m-10 .m-container-inflate.m-right-m {
+ margin-right: -10%;
+ }
+
+ [class*='m-col-m-'] {
+ float: left;
+ }
+
+ .m-left-m {
+ padding-right: 1rem;
+ float: left;
+ }
+
+ .m-right-m, [class*='m-col-m-'].m-right-m {
+ padding-left: 1rem;
+ float: right;
+ }
+
+ .m-center-m, [class*='m-col-m-'].m-center-m {
+ margin-left: auto;
+ margin-right: auto;
+ float: none;
+ }
+
+ .m-col-m-1 {
+ width: calc(1 * 100% / 12);
+ }
+
+ .m-col-m-2 {
+ width: calc(2 * 100% / 12);
+ }
+
+ .m-col-m-3 {
+ width: calc(3 * 100% / 12);
+ }
+
+ .m-col-m-4 {
+ width: calc(4 * 100% / 12);
+ }
+
+ .m-col-m-5 {
+ width: calc(5 * 100% / 12);
+ }
+
+ .m-col-m-6 {
+ width: calc(6 * 100% / 12);
+ }
+
+ .m-col-m-7 {
+ width: calc(7 * 100% / 12);
+ }
+
+ .m-col-m-8 {
+ width: calc(8 * 100% / 12);
+ }
+
+ .m-col-m-9 {
+ width: calc(9 * 100% / 12);
+ }
+
+ .m-col-m-10 {
+ width: calc(10 * 100% / 12);
+ }
+
+ .m-col-m-11 {
+ width: calc(11 * 100% / 12);
+ }
+
+ .m-col-m-12 {
+ width: calc(12 * 100% / 12);
+ }
+
+ .m-push-m-0 {
+ left: calc(0 * 100% / 12);
+ }
+
+ .m-push-m-1 {
+ left: calc(1 * 100% / 12);
+ }
+
+ .m-push-m-2 {
+ left: calc(2 * 100% / 12);
+ }
+
+ .m-push-m-3 {
+ left: calc(3 * 100% / 12);
+ }
+
+ .m-push-m-4 {
+ left: calc(4 * 100% / 12);
+ }
+
+ .m-push-m-5 {
+ left: calc(5 * 100% / 12);
+ }
+
+ .m-push-m-6 {
+ left: calc(6 * 100% / 12);
+ }
+
+ .m-push-m-7 {
+ left: calc(7 * 100% / 12);
+ }
+
+ .m-push-m-8 {
+ left: calc(8 * 100% / 12);
+ }
+
+ .m-push-m-9 {
+ left: calc(9 * 100% / 12);
+ }
+
+ .m-push-m-10 {
+ left: calc(10 * 100% / 12);
+ }
+
+ .m-push-m-11 {
+ left: calc(11 * 100% / 12);
+ }
+
+ .m-pull-m-0 {
+ right: calc(0 * 100% / 12);
+ }
+
+ .m-pull-m-1 {
+ right: calc(1 * 100% / 12);
+ }
+
+ .m-pull-m-2 {
+ right: calc(2 * 100% / 12);
+ }
+
+ .m-pull-m-3 {
+ right: calc(3 * 100% / 12);
+ }
+
+ .m-pull-m-4 {
+ right: calc(4 * 100% / 12);
+ }
+
+ .m-pull-m-5 {
+ right: calc(5 * 100% / 12);
+ }
+
+ .m-pull-m-6 {
+ right: calc(6 * 100% / 12);
+ }
+
+ .m-pull-m-7 {
+ right: calc(7 * 100% / 12);
+ }
+
+ .m-pull-m-8 {
+ right: calc(8 * 100% / 12);
+ }
+
+ .m-pull-m-9 {
+ right: calc(9 * 100% / 12);
+ }
+
+ .m-pull-m-10 {
+ right: calc(10 * 100% / 12);
+ }
+
+ .m-pull-m-11 {
+ right: calc(11 * 100% / 12);
+ }
+
+ .m-clearfix-s::after {
+ display: none;
+ }
+
+ .m-hide-m {
+ display: none;
+ }
+
+ .m-show-m {
+ display: block;
+ }
+
+ .m-col-m-none {
+ width: auto;
+ float: none;
+ }
}
+
@media screen and (min-width: 992px) {
- ul.m-block-bar-l, ol.m-block-bar-l,
- ul.m-block-dot-l, ol.m-block-dot-l { padding-left: 2rem; }
- ul.m-block-bar-l li, ol.m-block-bar-l li,
- ul.m-block-dot-l li, ol.m-block-dot-l li { display: list-item; }
- ul.m-block-bar-l li:not(:last-child)::after, ol.m-block-bar-l li:not(:last-child)::after,
- ul.m-block-dot-l li:not(:last-child)::after, ol.m-block-dot-l li:not(:last-child)::after { content: ""; }
-}
-p.m-poem {
- text-indent: 0;
- text-align: left;
- margin-left: 1.5rem;
-}
-p.m-transition {
- color: #c7cfd9;
- text-indent: 0;
- text-align: center;
- font-size: 2rem;
-}
-dl.m-diary {
- margin-bottom: 1.25rem;
-}
-dl.m-diary:last-child {
- margin-bottom: 0.25rem;
-}
-dl.m-diary dt {
- font-weight: bold;
- width: 6rem;
- float: left;
- clear: both;
- padding-top: 0.25rem;
-}
-dl.m-diary dd {
- padding-top: 0.25rem;
- padding-left: 6rem;
- margin-left: 0;
-}
-a.m-footnote, dl.m-footnote dd span.m-footnote {
- top: -0.35rem;
- font-size: 0.75rem;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-a.m-footnote, dl.m-footnote dd span.m-footnote a {
- text-decoration: none;
-}
-a.m-footnote::before { content: '['; }
-a.m-footnote::after { content: ']'; }
-dl.m-footnote dt {
- width: 1.5rem;
- float: left;
- clear: both;
-}
-dl.m-footnote dd {
- margin-left: 1.5rem;
-}
-dl.m-footnote {
- font-size: 85.4%;
+ .m-container {
+ width: 960px;
+ }
+
+ .m-container-inflatable .m-col-l-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
+ margin-left: -10%;
+ margin-right: -10%;
+ }
+
+ .m-container-inflatable .m-col-l-10 .m-container-inflate.m-left-l {
+ margin-left: -10%;
+ }
+
+ .m-container-inflatable .m-col-l-10 .m-container-inflate.m-right-l {
+ margin-right: -10%;
+ }
+
+ [class*='m-col-l-'] {
+ float: left;
+ }
+
+ .m-left-l {
+ padding-right: 1rem;
+ float: left;
+ }
+
+ .m-right-l, [class*='m-col-l-'].m-right-l {
+ padding-left: 1rem;
+ float: right;
+ }
+
+ .m-center-l, [class*='m-col-l-'].m-center-l {
+ margin-left: auto;
+ margin-right: auto;
+ float: none;
+ }
+
+ .m-col-l-1 {
+ width: calc(1 * 100% / 12);
+ }
+
+ .m-col-l-2 {
+ width: calc(2 * 100% / 12);
+ }
+
+ .m-col-l-3 {
+ width: calc(3 * 100% / 12);
+ }
+
+ .m-col-l-4 {
+ width: calc(4 * 100% / 12);
+ }
+
+ .m-col-l-5 {
+ width: calc(5 * 100% / 12);
+ }
+
+ .m-col-l-6 {
+ width: calc(6 * 100% / 12);
+ }
+
+ .m-col-l-7 {
+ width: calc(7 * 100% / 12);
+ }
+
+ .m-col-l-8 {
+ width: calc(8 * 100% / 12);
+ }
+
+ .m-col-l-9 {
+ width: calc(9 * 100% / 12);
+ }
+
+ .m-col-l-10 {
+ width: calc(10 * 100% / 12);
+ }
+
+ .m-col-l-11 {
+ width: calc(11 * 100% / 12);
+ }
+
+ .m-col-l-12 {
+ width: calc(12 * 100% / 12);
+ }
+
+ .m-push-l-0 {
+ left: calc(0 * 100% / 12);
+ }
+
+ .m-push-l-1 {
+ left: calc(1 * 100% / 12);
+ }
+
+ .m-push-l-2 {
+ left: calc(2 * 100% / 12);
+ }
+
+ .m-push-l-3 {
+ left: calc(3 * 100% / 12);
+ }
+
+ .m-push-l-4 {
+ left: calc(4 * 100% / 12);
+ }
+
+ .m-push-l-5 {
+ left: calc(5 * 100% / 12);
+ }
+
+ .m-push-l-6 {
+ left: calc(6 * 100% / 12);
+ }
+
+ .m-push-l-7 {
+ left: calc(7 * 100% / 12);
+ }
+
+ .m-push-l-8 {
+ left: calc(8 * 100% / 12);
+ }
+
+ .m-push-l-9 {
+ left: calc(9 * 100% / 12);
+ }
+
+ .m-push-l-10 {
+ left: calc(10 * 100% / 12);
+ }
+
+ .m-push-l-11 {
+ left: calc(11 * 100% / 12);
+ }
+
+ .m-pull-l-0 {
+ right: calc(0 * 100% / 12);
+ }
+
+ .m-pull-l-1 {
+ right: calc(1 * 100% / 12);
+ }
+
+ .m-pull-l-2 {
+ right: calc(2 * 100% / 12);
+ }
+
+ .m-pull-l-3 {
+ right: calc(3 * 100% / 12);
+ }
+
+ .m-pull-l-4 {
+ right: calc(4 * 100% / 12);
+ }
+
+ .m-pull-l-5 {
+ right: calc(5 * 100% / 12);
+ }
+
+ .m-pull-l-6 {
+ right: calc(6 * 100% / 12);
+ }
+
+ .m-pull-l-7 {
+ right: calc(7 * 100% / 12);
+ }
+
+ .m-pull-l-8 {
+ right: calc(8 * 100% / 12);
+ }
+
+ .m-pull-l-9 {
+ right: calc(9 * 100% / 12);
+ }
+
+ .m-pull-l-10 {
+ right: calc(10 * 100% / 12);
+ }
+
+ .m-pull-l-11 {
+ right: calc(11 * 100% / 12);
+ }
+
+ .m-clearfix-m::after {
+ display: none;
+ }
+
+ .m-hide-l {
+ display: none;
+ }
+
+ .m-show-l {
+ display: block;
+ }
+
+ .m-col-l-none {
+ width: auto;
+ float: none;
+ }
}
-dl.m-footnote dd span.m-footnote a {
- font-weight: bold;
- font-style: italic;
+
+html {
+ font-size: 1em;
+ background-color: #ffffff;
}
-.m-note {
- border-radius: 0.2rem;
- padding: 1rem;
+
+body {
+ font-family: 'Source Sans Pro', sans-serif;
+ font-size: 1rem;
+ line-height: normal;
+ color: #000000;
}
-.m-frame {
- background-color: #ffffff;
- border-style: solid;
- border-width: 0.125rem;
- border-radius: 0.2rem;
- border-color: #c7cfd9;
- padding: 0.875rem;
+
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ font-weight: normal;
}
-.m-block {
- border-style: solid;
- border-width: 0.0625rem;
- border-left-width: 0.25rem;
- border-radius: 0.2rem;
- border-color: #c7cfd9;
- padding: 0.9375rem 0.9375rem 0.9375rem 0.75rem;
+
+h1 {
+ margin-bottom: 1rem;
}
-.m-block.m-badge::after {
- content: ' ';
- display: block;
- clear: both;
+
+h2, h3, h4, h5, h6 {
+ margin-bottom: 0.5rem;
}
-.m-block.m-badge h3 {
- margin-left: 5rem;
+
+p, ul, ol, dl {
+ margin-top: 0;
}
-.m-block.m-badge p {
- margin-left: 5rem;
- text-indent: 0;
+
+ul, ol {
+ padding-left: 2rem;
}
-.m-block.m-badge img {
- width: 4rem;
- height: 4rem;
- border-radius: 2rem;
- float: left;
+
+ul ol, ul ul, ol ol, ol ul {
+ margin-bottom: 0;
}
-div.m-button {
- text-align: center;
+
+main p {
+ text-indent: 1.5rem;
+ text-align: justify;
}
-div.m-button a {
- display: inline-block;
- border-radius: 0.2rem;
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
- padding-left: 1.5rem;
- padding-right: 1.5rem;
- text-decoration: none;
- font-size: 1.17rem;
+
+main p.m-noindent, li > p, dd > p, table.m-table td > p {
+ text-indent: 0;
+ text-align: left;
}
-div.m-button.m-fullwidth a {
- display: block;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
+
+blockquote {
+ margin-top: 0;
+ margin-left: 1rem;
+ margin-right: 1rem;
+ padding: 1rem;
+ border-left-style: solid;
+ border-left-width: 0.25rem;
}
-div.m-button a .m-big:first-child {
- font-size: 1.37rem;
- font-weight: bold;
+
+hr {
+ width: 75%;
+ border-width: 0.0625rem;
+ border-style: solid;
}
-div.m-button a .m-small:last-child {
- font-size: 0.854rem;
+
+blockquote, hr {
+ border-color: #c7cfd9;
}
-.m-label {
- border-radius: 0.2rem;
- font-size: 75%;
- font-weight: normal;
- padding: 0.125rem 0.25rem;
- vertical-align: 7.5%;
+
+strong, .m-text.m-strong {
+ font-weight: bold;
}
-.m-label.m-flat {
- border-width: 0.0625rem;
- border-style: solid;
- border-color: #bdbdbd;
- padding: 0.0625rem 0.1875rem;
+
+em, .m-text.m-em {
+ font-style: italic;
}
-table.m-table {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
+
+s, .m-text.m-s {
+ text-decoration: line-through;
}
-table.m-table.m-big {
- margin-top: 1.75rem;
+
+sub, sup, .m-text.m-sub, .m-text.m-sup {
+ font-size: 0.75rem;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
}
-div.m-scroll > table.m-table:last-child {
- margin-bottom: 0.0625rem;
+
+sup, .m-text.m-sup {
+ top: -0.35rem;
}
-table.m-table:not(.m-flat) tbody tr:hover {
- background-color: #c7cfd9;
+
+sub, .m-text.m-sub {
+ bottom: -0.2rem;
}
-table.m-table th, table.m-table td {
- vertical-align: top;
- border-style: solid;
- border-top-width: 0.0625rem;
- border-left-width: 0;
- border-right-width: 0;
- border-bottom-width: 0;
- border-color: #c7cfd9;
+
+abbr {
+ cursor: help;
+ text-decoration: underline dotted;
}
-table.m-table caption {
- padding-bottom: 0.5rem;
+
+a {
+ color: #205275;
}
-table.m-table thead tr:first-child th, table.m-table thead tr:first-child td {
- border-top-width: 0.125rem;
+
+a.m-flat {
+ text-decoration: none;
}
-table.m-table thead th, table.m-table thead td {
- border-bottom-width: 0.125rem;
- vertical-align: bottom;
+
+a:hover, a:focus, a:active {
+ color: #2f73a3;
}
-table.m-table tfoot th, table.m-table tfoot td {
- border-top-width: 0.125rem;
+
+a img {
+ border: 0;
}
-table.m-table th, table.m-table td {
- padding: 0.5rem;
+
+svg a {
+ cursor: pointer;
}
-table.m-table.m-big th, table.m-table.m-big td {
- padding: 0.75rem 1rem;
+
+mark {
+ padding: 0.0625rem;
+ background-color: #f0c63e;
+ color: #4c93d3;
}
-table.m-table th {
- text-align: left;
+
+.m-link-wrap {
+ word-break: break-all;
}
-table.m-table th.m-thin {
- font-weight: normal;
+
+pre, code {
+ font-family: 'Source Code Pro', monospace, monospace, monospace;
+ font-size: 0.8em;
+ color: #000000;
+ background-color: #f2f7fa;
}
-table.m-table td.m-default, table.m-table th.m-default,
-table.m-table td.m-primary, table.m-table th.m-primary,
-table.m-table td.m-success, table.m-table th.m-success,
-table.m-table td.m-warning, table.m-table th.m-warning,
-table.m-table td.m-danger, table.m-table th.m-danger,
-table.m-table td.m-info, table.m-table th.m-info,
-table.m-table td.m-dim, table.m-table th.m-dim {
- padding-left: 0.4375rem;
- padding-right: 0.4375rem;
- border-left-width: 0.0625rem;
+
+pre.m-console, code.m-console {
+ color: #000000;
+ background-color: #000000;
}
-table.m-table.m-big td.m-default, table.m-table.m-big th.m-default,
-table.m-table.m-big td.m-primary, table.m-table.m-big th.m-primary,
-table.m-table.m-big td.m-success, table.m-table.m-big th.m-success,
-table.m-table.m-big td.m-warning, table.m-table.m-big th.m-warning,
-table.m-table.m-big td.m-danger, table.m-table.m-big th.m-danger,
-table.m-table.m-big td.m-info, table.m-table.m-big th.m-info,
-table.m-table.m-big td.m-dim, table.m-table.m-big th.m-dim {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- border-left-width: 0.0625rem;
+
+pre {
+ padding: 0.5rem 1rem;
+ border-radius: 0.2rem;
+ overflow-x: auto;
+ margin-top: 0;
}
-table.m-table tr.m-default td, table.m-table td.m-default,
-table.m-table tr.m-default th, table.m-table th.m-default,
-table.m-table tr.m-primary td, table.m-table td.m-primary,
-table.m-table tr.m-primary th, table.m-table th.m-primary,
-table.m-table tr.m-success td, table.m-table td.m-success,
-table.m-table tr.m-success th, table.m-table th.m-success,
-table.m-table tr.m-warning td, table.m-table td.m-warning,
-table.m-table tr.m-warning th, table.m-table th.m-warning,
-table.m-table tr.m-danger td, table.m-table td.m-danger,
-table.m-table tr.m-danger th, table.m-table th.m-danger,
-table.m-table tr.m-info td, table.m-table td.m-info,
-table.m-table tr.m-info th, table.m-table th.m-info,
-table.m-table tr.m-dim td, table.m-table td.m-dim,
-table.m-table tr.m-dim th, table.m-table th.m-dim {
- border-color: #ffffff;
+
+pre.m-console-wrap {
+ white-space: pre-wrap;
+ word-break: break-all;
}
-.m-note pre, .m-note code,
-table.m-table tr.m-default pre, table.m-table tr.m-default code,
-table.m-table td.m-default pre, table.m-table td.m-default code,
-table.m-table th.m-default pre, table.m-table th.m-default code,
-table.m-table tr.m-primary pre, table.m-table tr.m-primary code,
-table.m-table td.m-primary pre, table.m-table td.m-primary code,
-table.m-table th.m-primary pre, table.m-table th.m-primary code,
-table.m-table tr.m-success pre, table.m-table tr.m-success code,
-table.m-table td.m-success pre, table.m-table td.m-success code,
-table.m-table th.m-success pre, table.m-table th.m-success code,
-table.m-table tr.m-warning pre, table.m-table tr.m-warning code,
-table.m-table td.m-warning pre, table.m-table td.m-warning code,
-table.m-table th.m-warning pre, table.m-table th.m-warning code,
-table.m-table tr.m-danger pre, table.m-table tr.m-danger code,
-table.m-table td.m-danger pre, table.m-table td.m-danger code,
-table.m-table th.m-danger pre, table.m-table th.m-danger code,
-table.m-table tr.m-info pre, table.m-table tr.m-info code,
-table.m-table td.m-info pre, table.m-table td.m-info code,
-table.m-table th.m-info pre, table.m-table th.m-info code,
-table.m-table tr.m-dim pre, table.m-table tr.m-dim code,
-table.m-table td.m-dim pre, table.m-table td.m-dim code,
-table.m-table th.m-dim pre, table.m-table th.m-dim code {
- background-color: rgba(251, 240, 236, 0.5);
+
+code {
+ padding: 0.125rem;
}
-img.m-image, svg.m-image {
- display: block;
- margin-left: auto;
- margin-right: auto;
+
+*:focus {
+ outline-color: #2f73a3;
}
-div.m-image {
- text-align: center;
+
+div.m-scroll {
+ max-width: 100%;
+ overflow-x: auto;
}
-img.m-image, svg.m-image, div.m-image img, div.m-image svg {
- max-width: 100%;
- border-radius: 0.2rem;
+
+.m-fullwidth {
+ width: 100%;
}
-div.m-image.m-fullwidth img, div.m-image.m-fullwidth svg {
- width: 100%;
+
+.m-spacing-150 {
+ line-height: 1.5rem;
}
-img.m-image.m-badge, div.m-image.m-badge img {
- border-radius: 50%;
+
+.m-text-center, .m-text-center.m-noindent, table.m-table th.m-text-center, .m-text-center p {
+ text-align: center;
}
-figure.m-figure {
- max-width: 100%;
- margin-top: 0;
- margin-left: auto;
- margin-right: auto;
- position: relative;
- display: table;
+
+.m-text-left, .m-text-left.m-noindent, table.m-table th.m-text-left, .m-text-right p {
+ text-align: left;
}
-figure.m-figure:before {
- position: absolute;
- content: ' ';
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: -1;
- border-style: solid;
- border-width: 0.125rem;
- border-radius: 0.2rem;
- border-color: #c7cfd9;
+
+.m-text-right, .m-text-right.m-noindent, table.m-table th.m-text-right, .m-text-right p {
+ text-align: right;
}
-figure.m-figure.m-flat:before {
- border-color: transparent;
+
+.m-text-top, table.m-table th.m-text-top, table.m-table td.m-text-top {
+ vertical-align: top;
}
-figure.m-figure > * {
- margin-left: 1rem;
- margin-right: 1rem;
- display: table-caption;
- caption-side: bottom;
+
+.m-text-middle, table.m-table th.m-text-middle, table.m-table td.m-text-middle {
+ vertical-align: middle;
}
-figure.m-figure > *:first-child {
- display: inline;
+
+.m-text-bottom, table.m-table th.m-text-bottom, table.m-table td.m-text-bottom {
+ vertical-align: bottom;
}
-figure.m-figure > *:last-child {
- margin-bottom: 1rem !important;
+
+.m-text.m-tiny {
+ font-size: 50.0%;
}
-figure.m-figure img, figure.m-figure svg {
- position: relative;
- margin-left: 0;
- margin-right: 0;
- margin-bottom: 0;
- border-top-left-radius: 0.2rem;
- border-top-right-radius: 0.2rem;
- max-width: 100%;
+
+.m-text.m-small {
+ font-size: 85.4%;
}
-figure.m-figure.m-flat img, figure.m-figure.m-flat svg {
- border-bottom-left-radius: 0.2rem;
- border-bottom-right-radius: 0.2rem;
+
+.m-text.m-big {
+ font-size: 117%;
}
-figure.m-figure a img, figure.m-figure a svg {
- margin-left: -1rem;
- margin-right: -1rem;
+
+h1 .m-thin, h2 .m-thin, h3 .m-thin, h4 .m-thin, h5 .m-thin, h6 .m-thin {
+ font-weight: normal;
}
-figure.m-figure.m-fullwidth, figure.m-figure.m-fullwidth > * {
- display: block;
+
+ul.m-unstyled, ol.m-unstyled {
+ list-style-type: none;
+ padding-left: 0;
}
-figure.m-figure.m-fullwidth > *:first-child {
- display: inline;
+
+ul[class*='m-block-'], ol[class*='m-block-'] {
+ padding-left: 0;
}
-figure.m-figure.m-fullwidth img, figure.m-figure.m-fullwidth svg {
- width: 100%;
+
+ul[class*='m-block-'] li, ol[class*='m-block-'] li {
+ display: inline;
}
-figure.m-figure.m-fullwidth:after {
- content: ' ';
- display: block;
- margin-top: 1rem;
- height: 1px;
+
+ul[class*='m-block-bar-'] li:not(:last-child)::after, ol[class*='m-block-bar-'] li:not(:last-child)::after {
+ content: " | ";
}
-.m-code-figure, .m-console-figure {
- margin-top: 0;
- margin-left: 0;
- margin-right: 0;
- position: relative;
- padding: 1rem;
+
+ul[class*='m-block-dot-'] li:not(:last-child)::after, ol[class*='m-block-dot-'] li:not(:last-child)::after {
+ content: " • ";
}
-.m-code-figure:before, .m-console-figure:before {
- position: absolute;
- content: ' ';
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: -1;
- border-style: solid;
- border-width: 0.125rem;
- border-radius: 0.2rem;
+
+@media screen and (min-width: 576px) {
+ ul.m-block-bar-s, ol.m-block-bar-s,
+ ul.m-block-dot-s, ol.m-block-dot-s {
+ padding-left: 2rem;
+ }
+
+ ul.m-block-bar-s li, ol.m-block-bar-s li,
+ ul.m-block-dot-s li, ol.m-block-dot-s li {
+ display: list-item;
+ }
+
+ ul.m-block-bar-s li:not(:last-child)::after, ol.m-block-bar-s li:not(:last-child)::after,
+ ul.m-block-dot-s li:not(:last-child)::after, ol.m-block-dot-s li:not(:last-child)::after {
+ content: "";
+ }
}
-.m-code-figure:before {
- border-color: #f2f7fa;
+
+@media screen and (min-width: 768px) {
+ ul.m-block-bar-m, ol.m-block-bar-m,
+ ul.m-block-dot-m, ol.m-block-dot-m {
+ padding-left: 2rem;
+ }
+
+ ul.m-block-bar-m li, ol.m-block-bar-m li,
+ ul.m-block-dot-m li, ol.m-block-dot-m li {
+ display: list-item;
+ }
+
+ ul.m-block-bar-m li:not(:last-child)::after, ol.m-block-bar-m li:not(:last-child)::after,
+ ul.m-block-dot-m li:not(:last-child)::after, ol.m-block-dot-m li:not(:last-child)::after {
+ content: "";
+ }
}
-.m-console-figure:before {
- border-color: #000000;
+
+@media screen and (min-width: 992px) {
+ ul.m-block-bar-l, ol.m-block-bar-l,
+ ul.m-block-dot-l, ol.m-block-dot-l {
+ padding-left: 2rem;
+ }
+
+ ul.m-block-bar-l li, ol.m-block-bar-l li,
+ ul.m-block-dot-l li, ol.m-block-dot-l li {
+ display: list-item;
+ }
+
+ ul.m-block-bar-l li:not(:last-child)::after, ol.m-block-bar-l li:not(:last-child)::after,
+ ul.m-block-dot-l li:not(:last-child)::after, ol.m-block-dot-l li:not(:last-child)::after {
+ content: "";
+ }
}
-.m-code-figure.m-flat:before, .m-console-figure.m-flat:before {
- border-color: transparent;
-}
-.m-code-figure > pre:first-child, .m-console-figure > pre:first-child {
- position: relative;
- margin: -1rem -1rem 1rem -1rem;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
+
+p.m-poem {
+ text-indent: 0;
+ text-align: left;
+ margin-left: 1.5rem;
}
-.m-code-figure > pre.m-nopad, .m-console-figure > pre.m-nopad {
- margin-left: -0.875rem;
- margin-right: -0.875rem;
- margin-top: -1rem;
- margin-bottom: -0.875rem;
- padding-left: 0.875rem;
+
+p.m-transition {
+ color: #c7cfd9;
+ text-indent: 0;
+ text-align: center;
+ font-size: 2rem;
}
-figure.m-figure figcaption, .m-code-figure figcaption, .m-console-figure figcaption {
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
- font-weight: normal;
- font-size: 1.17rem;
+
+dl.m-diary {
+ margin-bottom: 1.25rem;
}
-.m-imagegrid > div {
- background-color: #ffffff;
+
+dl.m-diary:last-child {
+ margin-bottom: 0.25rem;
}
-.m-imagegrid > div > figure {
- display: block;
- float: left;
- position: relative;
- margin: 0;
+
+dl.m-diary dt {
+ font-weight: bold;
+ width: 6rem;
+ float: left;
+ clear: both;
+ padding-top: 0.25rem;
}
-.m-imagegrid > div > figure > div,
-.m-imagegrid > div > figure > figcaption,
-.m-imagegrid > div > figure > a > div,
-.m-imagegrid > div > figure > a > figcaption {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border-color: #ffffff;
- border-style: solid;
- border-width: 0.25rem;
- padding: 0.5rem;
+
+dl.m-diary dd {
+ padding-top: 0.25rem;
+ padding-left: 6rem;
+ margin-left: 0;
}
-.m-imagegrid > div > figure:first-child > div,
-.m-imagegrid > div > figure:first-child > figcaption,
-.m-imagegrid > div > figure:first-child > a > div,
-.m-imagegrid > div > figure:first-child > a > figcaption {
- border-left-width: 0;
+
+a.m-footnote, dl.m-footnote dd span.m-footnote {
+ top: -0.35rem;
+ font-size: 0.75rem;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
}
-.m-imagegrid > div > figure:last-child > div,
-.m-imagegrid > div > figure:last-child > figcaption,
-.m-imagegrid > div > figure:last-child > a > div,
-.m-imagegrid > div > figure:last-child > a > figcaption {
- border-right-width: 0;
+
+a.m-footnote, dl.m-footnote dd span.m-footnote a {
+ text-decoration: none;
}
-.m-imagegrid > div > figure > figcaption,
-.m-imagegrid > div > figure > a > figcaption {
- color: transparent;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- font-size: 0.75rem;
+
+a.m-footnote::before {
+ content: '[';
}
-.m-imagegrid > div > figure > div::before,
-.m-imagegrid > div > figure > figcaption::before,
-.m-imagegrid > div > figure > a > div::before,
-.m-imagegrid > div > figure > a > figcaption::before {
- content: '';
- display: inline-block;
- height: 100%;
- vertical-align: bottom;
- width: 0;
+
+a.m-footnote::after {
+ content: ']';
}
-.m-imagegrid > div > figure:hover > figcaption,
-.m-imagegrid > div > figure:hover > a > figcaption {
- background: linear-gradient(transparent 0%, transparent 75%, rgba(0, 0, 0, 0.85) 100%);
- color: #ffffff;
+
+dl.m-footnote dt {
+ width: 1.5rem;
+ float: left;
+ clear: both;
}
-.m-imagegrid > div > figure > img,
-.m-imagegrid > div > figure > a > img {
- width: 100%;
- height: 100%;
+
+dl.m-footnote dd {
+ margin-left: 1.5rem;
}
-.m-imagegrid > div::after {
- display: block;
- content: ' ';
- clear: both;
+
+dl.m-footnote {
+ font-size: 85.4%;
}
-@media screen and (max-width: 767px) {
- .m-imagegrid > div > figure {
- float: none;
- width: 100% !important;
- }
- .m-imagegrid > div > figure > div,
- .m-imagegrid > div > figure > figcaption,
- .m-imagegrid > div > figure > a > div,
- .m-imagegrid > div > figure > a > figcaption {
- border-left-width: 0;
- border-right-width: 0;
- }
+
+dl.m-footnote dd span.m-footnote a {
+ font-weight: bold;
+ font-style: italic;
}
-.m-container-inflatable > .m-row > [class*='m-col-'] > .m-note,
-.m-container-inflatable > .m-row > [class*='m-col-'] > .m-frame,
-.m-container-inflatable > .m-row > [class*='m-col-'] > .m-block,
-.m-container-inflatable > .m-row > [class*='m-col-'] > .m-imagegrid,
-.m-container-inflatable > .m-row > [class*='m-col-'] > pre,
-.m-container-inflatable > .m-row > [class*='m-col-'] > .m-code-figure,
-.m-container-inflatable > .m-row > [class*='m-col-'] > .m-console-figure,
-.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-note,
-.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-frame,
-.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-block,
-.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-imagegrid,
-.m-container-inflatable > .m-row > [class*='m-col-'] section > pre,
-.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-code-figure,
-.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-console-figure,
-.m-container-inflatable [class*='m-center-'] > .m-note,
-.m-container-inflatable [class*='m-center-'] > .m-frame,
-.m-container-inflatable [class*='m-center-'] > .m-block,
-.m-container-inflatable [class*='m-center-'] > .m-imagegrid,
-.m-container-inflatable [class*='m-center-'] > pre,
-.m-container-inflatable [class*='m-center-'] > .m-code-figure,
-.m-container-inflatable [class*='m-center-'] > .m-console-figure,
-.m-container-inflatable [class*='m-left-'] > .m-note,
-.m-container-inflatable [class*='m-left-'] > .m-frame,
-.m-container-inflatable [class*='m-left-'] > .m-block,
-.m-container-inflatable [class*='m-left-'] > .m-imagegrid,
-.m-container-inflatable [class*='m-left-'] > pre,
-.m-container-inflatable [class*='m-left-'] > .m-code-figure,
-.m-container-inflatable [class*='m-left-'] > .m-console-figure,
-.m-container-inflatable [class*='m-right-'] > .m-note,
-.m-container-inflatable [class*='m-right-'] > .m-frame,
-.m-container-inflatable [class*='m-right-'] > .m-block,
-.m-container-inflatable [class*='m-right-'] > .m-imagegrid,
-.m-container-inflatable [class*='m-right-'] > pre,
-.m-container-inflatable [class*='m-right-'] > .m-code-figure,
-.m-container-inflatable [class*='m-right-'] > .m-console-figure,
-.m-container-inflatable .m-container-inflate > .m-note,
-.m-container-inflatable .m-container-inflate > .m-frame,
-.m-container-inflatable .m-container-inflate > .m-block,
-.m-container-inflatable .m-container-inflate > .m-imagegrid,
-.m-container-inflatable .m-container-inflate > pre,
-.m-container-inflatable .m-container-inflate > .m-code-figure,
-.m-container-inflatable .m-container-inflate > .m-console-figure
-{
- margin-left: -1rem;
- margin-right: -1rem;
+
+.m-note {
+ border-radius: 0.2rem;
+ padding: 1rem;
}
-@media screen and (min-width: 576px) {
- .m-container-inflatable .m-center-s > .m-note,
- .m-container-inflatable .m-center-s > .m-frame,
- .m-container-inflatable .m-center-s > .m-block,
- .m-container-inflatable .m-center-s > .m-imagegrid,
- .m-container-inflatable .m-center-s > pre,
- .m-container-inflatable .m-center-s > .m-code-figure,
- .m-container-inflatable .m-center-s > .m-console-figure {
- margin-left: -1rem;
- margin-right: -1rem;
- }
- .m-container-inflatable .m-left-s > .m-note,
- .m-container-inflatable .m-left-s > .m-frame,
- .m-container-inflatable .m-left-s > .m-block,
- .m-container-inflatable .m-left-s > .m-imagegrid,
- .m-container-inflatable .m-left-s > pre,
- .m-container-inflatable .m-left-s > .m-code-figure,
- .m-container-inflatable .m-left-s > .m-console-figure {
- margin-left: -1rem;
- margin-right: 0;
- }
- .m-container-inflatable .m-right-s > .m-note,
- .m-container-inflatable .m-right-s > .m-frame,
- .m-container-inflatable .m-right-s > .m-block,
- .m-container-inflatable .m-right-s > .m-imagegrid,
- .m-container-inflatable .m-right-s > pre,
- .m-container-inflatable .m-right-s > .m-code-figure,
- .m-container-inflatable .m-right-s > .m-console-figure {
- margin-left: 0;
- margin-right: -1rem;
- }
- .m-container-inflatable > .m-row > .m-col-s-10 > .m-imagegrid.m-container-inflate,
- .m-container-inflatable > .m-row > .m-col-s-10 section > .m-imagegrid.m-container-inflate {
- margin-left: -10%;
- margin-right: -10%;
- }
+
+.m-frame {
+ background-color: #ffffff;
+ border-style: solid;
+ border-width: 0.125rem;
+ border-radius: 0.2rem;
+ border-color: #c7cfd9;
+ padding: 0.875rem;
}
-@media screen and (min-width: 768px) {
- .m-container-inflatable .m-center-m > .m-note,
- .m-container-inflatable .m-center-m > .m-frame,
- .m-container-inflatable .m-center-m > .m-block,
- .m-container-inflatable .m-center-m > .m-imagegrid,
- .m-container-inflatable .m-center-m > pre,
- .m-container-inflatable .m-center-m > .m-code-figure,
- .m-container-inflatable .m-center-m > .m-console-figure {
- margin-left: -1rem;
- margin-right: -1rem;
- }
- .m-container-inflatable .m-left-m > .m-note,
- .m-container-inflatable .m-left-m > .m-frame,
- .m-container-inflatable .m-left-m > .m-block,
- .m-container-inflatable .m-left-m > .m-imagegrid,
- .m-container-inflatable .m-left-m > pre,
- .m-container-inflatable .m-left-m > .m-code-figure,
- .m-container-inflatable .m-left-m > .m-console-figure {
- margin-left: -1rem;
- margin-right: 0;
- }
- .m-container-inflatable .m-right-m > .m-note,
- .m-container-inflatable .m-right-m > .m-frame,
- .m-container-inflatable .m-right-m > .m-block,
- .m-container-inflatable .m-right-m > .m-imagegrid,
- .m-container-inflatable .m-right-m > pre,
- .m-container-inflatable .m-right-m > .m-code-figure,
- .m-container-inflatable .m-right-m > .m-console-figure {
- margin-left: 0;
- margin-right: -1rem;
- }
- .m-container-inflatable > .m-row > .m-col-m-10 > .m-imagegrid.m-container-inflate,
- .m-container-inflatable > .m-row > .m-col-m-10 section > .m-imagegrid.m-container-inflate {
- margin-left: -10%;
- margin-right: -10%;
- }
+
+.m-block {
+ border-style: solid;
+ border-width: 0.0625rem;
+ border-left-width: 0.25rem;
+ border-radius: 0.2rem;
+ border-color: #c7cfd9;
+ padding: 0.9375rem 0.9375rem 0.9375rem 0.75rem;
}
-@media screen and (min-width: 992px) {
- .m-container-inflatable .m-center-l > .m-note,
- .m-container-inflatable .m-center-l > .m-frame,
- .m-container-inflatable .m-center-l > .m-block,
- .m-container-inflatable .m-center-l > .m-imagegrid,
- .m-container-inflatable .m-center-l > pre,
- .m-container-inflatable .m-center-l > .m-code-figure,
- .m-container-inflatable .m-center-l > .m-console-figure {
- margin-left: -1rem;
- margin-right: -1rem;
- }
- .m-container-inflatable .m-left-l > .m-note,
- .m-container-inflatable .m-left-l > .m-frame,
- .m-container-inflatable .m-left-l > .m-block,
- .m-container-inflatable .m-left-l > .m-imagegrid,
- .m-container-inflatable .m-left-l > pre,
- .m-container-inflatable .m-left-l > .m-code-figure,
- .m-container-inflatable .m-left-l > .m-console-figure {
- margin-left: -1rem;
- margin-right: 0;
- }
- .m-container-inflatable .m-right-l > .m-note,
- .m-container-inflatable .m-right-l > .m-frame,
- .m-container-inflatable .m-right-l > .m-block,
- .m-container-inflatable .m-right-l > .m-imagegrid,
- .m-container-inflatable .m-right-l > pre,
- .m-container-inflatable .m-right-l > .m-code-figure,
- .m-container-inflatable .m-right-l > .m-console-figure {
- margin-left: 0;
- margin-right: -1rem;
- }
- .m-container-inflatable > .m-row > .m-col-l-10 > .m-imagegrid.m-container-inflate,
- .m-container-inflatable > .m-row > .m-col-l-10 section > .m-imagegrid.m-container-inflate {
- margin-left: -10%;
- margin-right: -10%;
- }
+
+.m-block.m-badge::after {
+ content: ' ';
+ display: block;
+ clear: both;
}
-pre.m-code span.hll {
- margin-left: -1.0rem;
- margin-right: -1.0rem;
- padding-left: 1.0rem;
+
+.m-block.m-badge h3 {
+ margin-left: 5rem;
}
-.m-code.m-inverted > span, .m-console.m-inverted > span {
- opacity: 0.3333;
+
+.m-block.m-badge p {
+ margin-left: 5rem;
+ text-indent: 0;
}
-.m-code.m-inverted > span.hll, .m-console.m-inverted > span.hll {
- opacity: 1;
- background-color: transparent;
- border-color: transparent;
-}
-.m-code.m-inverted { color: rgba(91, 91, 91, 0.33); }
-.m-console.m-inverted { color: rgba(91, 91, 91, 0.33); }
-.m-code.m-inverted > span.hll { color: #000000; }
-.m-cosole.m-inverted > span.hll { color: #000000; }
-.m-code-color {
- display: inline-block;
- width: 0.75rem;
- height: 0.75rem;
- vertical-align: -0.05rem;
- margin-left: 0.2rem;
- margin-right: 0.1rem;
- border-radius: 0.1rem;
+
+.m-block.m-badge img {
+ width: 4rem;
+ height: 4rem;
+ border-radius: 2rem;
+ float: left;
}
-div.m-math {
- overflow-x: auto;
- overflow-y: hidden;
+
+div.m-button {
+ text-align: center;
}
-div.m-math svg {
- margin-left: auto;
- margin-right: auto;
- display: block;
+
+div.m-button a {
+ display: inline-block;
+ border-radius: 0.2rem;
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ text-decoration: none;
+ font-size: 1.17rem;
}
-div.m-button a svg.m-math { fill: #ffffff; }
-div.m-button.m-flat a svg.m-math { fill: #000000; }
-div.m-button.m-flat a:hover svg.m-math, div.m-button.m-default a:focus svg.m-math,
-div.m-button.m-default a:active svg.m-math {
- fill: #2f73a3;
+
+div.m-button.m-fullwidth a {
+ display: block;
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
}
-.m-graph { font-size: 1em; }
-div.m-plot svg, div.m-graph svg {
- max-width: 100%;
- margin-left: auto;
- margin-right: auto;
- display: block;
-}
-div.m-plot .m-background { fill: #f2f7fa; }
-div.m-plot svg .m-label { font-size: 11px; }
-div.m-plot svg .m-title { font-size: 13px; }
-div.m-plot svg .m-label, div.m-plot svg .m-title { fill: #000000; }
-div.m-plot svg .m-line {
- stroke: #000000;
- stroke-width: 0.8;
+
+div.m-button a .m-big:first-child {
+ font-size: 1.37rem;
+ font-weight: bold;
}
-div.m-plot svg .m-error {
- stroke: #000000;
- stroke-width: 1.5;
+
+div.m-button a .m-small:last-child {
+ font-size: 0.854rem;
}
-div.m-plot svg .m-label.m-dim { fill: #bdbdbd; }
-.m-graph g.m-edge path, .m-graph g.m-node.m-flat ellipse,
-.m-graph g.m-node.m-flat polygon {
- fill: none;
+
+.m-label {
+ border-radius: 0.2rem;
+ font-size: 75%;
+ font-weight: normal;
+ padding: 0.125rem 0.25rem;
+ vertical-align: 7.5%;
}
-.m-graph g.m-node:not(.m-flat) text {
- fill: #ffffff;
+
+.m-label.m-flat {
+ border-width: 0.0625rem;
+ border-style: solid;
+ border-color: #bdbdbd;
+ padding: 0.0625rem 0.1875rem;
}
-figure.m-figure > svg.m-math:first-child,
-figure.m-figure > svg.m-graph:first-child {
- padding: 1rem;
- box-sizing: content-box;
+
+table.m-table {
+ border-collapse: collapse;
+ margin-left: auto;
+ margin-right: auto;
}
-figure.m-figure:not(.m-flat) > svg.m-math:first-child,
-figure.m-figure:not(.m-flat) > svg.m-graph:first-child {
- background-color: #c7cfd9;
+
+table.m-table.m-big {
+ margin-top: 1.75rem;
}
-.m-block.m-default { border-left-color: #c7cfd9; }
-.m-block.m-default h3, .m-block.m-default h4, .m-block.m-default h5, .m-block.m-default h6,
-.m-text.m-default, .m-label.m-flat.m-default {
- color: #000000;
+
+div.m-scroll > table.m-table:last-child {
+ margin-bottom: 0.0625rem;
}
-.m-block.m-default h3 a, .m-block.m-default h4 a, .m-block.m-default h5 a, .m-block.m-default h6 a {
- color: #205275;
+
+table.m-table:not(.m-flat) tbody tr:hover {
+ background-color: #c7cfd9;
}
-.m-block.m-primary { border-left-color: #205275; }
-.m-block.m-primary h3, .m-block.m-primary h4, .m-block.m-primary h5, .m-block.m-primary h6,
-.m-block.m-primary h3 a, .m-block.m-primary h4 a, .m-block.m-primary h5 a, .m-block.m-primary h6 a,
-.m-text.m-primary, .m-label.m-flat.m-primary {
- color: #205275;
+
+table.m-table th, table.m-table td {
+ vertical-align: top;
+ border-style: solid;
+ border-top-width: 0.0625rem;
+ border-left-width: 0;
+ border-right-width: 0;
+ border-bottom-width: 0;
+ border-color: #c7cfd9;
}
-.m-block.m-success { border-left-color: #31c25d; }
-.m-block.m-success h3, .m-block.m-success h4, .m-block.m-success h5, .m-block.m-success h6,
-.m-block.m-success h3 a, .m-block.m-success h4 a, .m-block.m-success h5 a, .m-block.m-success h6 a,
-.m-text.m-success, .m-label.m-flat.m-success {
- color: #31c25d;
+
+table.m-table caption {
+ padding-bottom: 0.5rem;
}
-.m-block.m-warning { border-left-color: #d19600; }
-.m-block.m-warning h3, .m-block.m-warning h4, .m-block.m-warning h5, .m-block.m-warning h6,
-.m-block.m-warning h3 a, .m-block.m-warning h4 a, .m-block.m-warning h5 a, .m-block.m-warning h6 a,
-.m-text.m-warning, .m-label.m-flat.m-warning {
- color: #d19600;
+
+table.m-table thead tr:first-child th, table.m-table thead tr:first-child td {
+ border-top-width: 0.125rem;
}
-.m-block.m-danger { border-left-color: #f60000; }
-.m-block.m-danger h3, .m-block.m-danger h4, .m-block.m-danger h5, .m-block.m-danger h6,
-.m-block.m-danger h3 a, .m-block.m-danger h4 a, .m-block.m-danger h5 a, .m-block.m-danger h6 a,
-.m-text.m-danger, .m-label.m-flat.m-danger {
- color: #f60000;
+
+table.m-table thead th, table.m-table thead td {
+ border-bottom-width: 0.125rem;
+ vertical-align: bottom;
}
-.m-block.m-info { border-left-color: #2e7dc5; }
-.m-block.m-info h3, .m-block.m-info h4, .m-block.m-info h5, .m-block.m-info h6,
-.m-block.m-info h3 a, .m-block.m-info h4 a, .m-block.m-info h5 a, .m-block.m-info h6 a,
-.m-text.m-info, .m-label.m-flat.m-info {
- color: #2e7dc5;
+
+table.m-table tfoot th, table.m-table tfoot td {
+ border-top-width: 0.125rem;
}
-.m-block.m-dim { border-left-color: #bdbdbd; }
-.m-block.m-dim, .m-text.m-dim, .m-label.m-flat.m-dim {
- color: #bdbdbd;
+
+table.m-table th, table.m-table td {
+ padding: 0.5rem;
}
-.m-block.m-dim a, .m-text.m-dim a { color: #c0c0c0; }
-.m-block.m-dim a:hover, .m-block.m-dim a:focus, .m-block.m-dim a:active,
-.m-text.m-dim a:hover, .m-text.m-dim a:focus, .m-text.m-dim a:active {
- color: #949494;
+
+table.m-table.m-big th, table.m-table.m-big td {
+ padding: 0.75rem 1rem;
}
-.m-block.m-flat { border-color: transparent; }
-.m-block.m-flat h3, .m-block.m-flat h4, .m-block.m-flat h5, .m-block.m-flat h6 {
- color: #000000;
+
+table.m-table th {
+ text-align: left;
}
-.m-block.m-default h3 a:hover, .m-block.m-default h3 a:focus, .m-block.m-default h3 a:active,
-.m-block.m-default h4 a:hover, .m-block.m-default h4 a:focus, .m-block.m-default h4 a:active,
-.m-block.m-default h5 a:hover, .m-block.m-default h5 a:focus, .m-block.m-default h5 a:active,
-.m-block.m-default h6 a:hover, .m-block.m-default h6 a:focus, .m-block.m-default h6 a:active {
- color: #205275;
+
+table.m-table th.m-thin {
+ font-weight: normal;
}
-.m-block.m-primary h3 a:hover, .m-block.m-primary h3 a:focus, .m-block.m-primary h3 a:active,
-.m-block.m-primary h4 a:hover, .m-block.m-primary h4 a:focus, .m-block.m-primary h4 a:active,
-.m-block.m-primary h5 a:hover, .m-block.m-primary h5 a:focus, .m-block.m-primary h5 a:active,
-.m-block.m-primary h6 a:hover, .m-block.m-primary h6 a:focus, .m-block.m-primary h6 a:active {
- color: #000000;
+
+table.m-table td.m-default, table.m-table th.m-default,
+table.m-table td.m-primary, table.m-table th.m-primary,
+table.m-table td.m-success, table.m-table th.m-success,
+table.m-table td.m-warning, table.m-table th.m-warning,
+table.m-table td.m-danger, table.m-table th.m-danger,
+table.m-table td.m-info, table.m-table th.m-info,
+table.m-table td.m-dim, table.m-table th.m-dim {
+ padding-left: 0.4375rem;
+ padding-right: 0.4375rem;
+ border-left-width: 0.0625rem;
}
-.m-block.m-success h3 a:hover, .m-block.m-success h3 a:focus, .m-block.m-success h3 a:active,
-.m-block.m-success h4 a:hover, .m-block.m-success h4 a:focus, .m-block.m-success h4 a:active,
-.m-block.m-success h5 a:hover, .m-block.m-success h5 a:focus, .m-block.m-success h5 a:active,
-.m-block.m-success h6 a:hover, .m-block.m-success h6 a:focus, .m-block.m-success h6 a:active {
- color: #dcf6e3;
+
+table.m-table.m-big td.m-default, table.m-table.m-big th.m-default,
+table.m-table.m-big td.m-primary, table.m-table.m-big th.m-primary,
+table.m-table.m-big td.m-success, table.m-table.m-big th.m-success,
+table.m-table.m-big td.m-warning, table.m-table.m-big th.m-warning,
+table.m-table.m-big td.m-danger, table.m-table.m-big th.m-danger,
+table.m-table.m-big td.m-info, table.m-table.m-big th.m-info,
+table.m-table.m-big td.m-dim, table.m-table.m-big th.m-dim {
+ padding-left: 0.9375rem;
+ padding-right: 0.9375rem;
+ border-left-width: 0.0625rem;
}
-.m-block.m-warning h3 a:hover, .m-block.m-warning h3 a:focus, .m-block.m-warning h3 a:active,
-.m-block.m-warning h4 a:hover, .m-block.m-warning h4 a:focus, .m-block.m-warning h4 a:active,
-.m-block.m-warning h5 a:hover, .m-block.m-warning h5 a:focus, .m-block.m-warning h5 a:active,
-.m-block.m-warning h6 a:hover, .m-block.m-warning h6 a:focus, .m-block.m-warning h6 a:active {
- color: #fff1cc;
+
+table.m-table tr.m-default td, table.m-table td.m-default,
+table.m-table tr.m-default th, table.m-table th.m-default,
+table.m-table tr.m-primary td, table.m-table td.m-primary,
+table.m-table tr.m-primary th, table.m-table th.m-primary,
+table.m-table tr.m-success td, table.m-table td.m-success,
+table.m-table tr.m-success th, table.m-table th.m-success,
+table.m-table tr.m-warning td, table.m-table td.m-warning,
+table.m-table tr.m-warning th, table.m-table th.m-warning,
+table.m-table tr.m-danger td, table.m-table td.m-danger,
+table.m-table tr.m-danger th, table.m-table th.m-danger,
+table.m-table tr.m-info td, table.m-table td.m-info,
+table.m-table tr.m-info th, table.m-table th.m-info,
+table.m-table tr.m-dim td, table.m-table td.m-dim,
+table.m-table tr.m-dim th, table.m-table th.m-dim {
+ border-color: #ffffff;
}
-.m-block.m-danger h3 a:hover, .m-block.m-danger h3 a:focus, .m-block.m-danger h3 a:active,
-.m-block.m-danger h4 a:hover, .m-block.m-danger h4 a:focus, .m-block.m-danger h4 a:active,
-.m-block.m-danger h5 a:hover, .m-block.m-danger h5 a:focus, .m-block.m-danger h5 a:active,
-.m-block.m-danger h6 a:hover, .m-block.m-danger h6 a:focus, .m-block.m-danger h6 a:active {
- color: #f6dddc;
+
+.m-note pre, .m-note code,
+table.m-table tr.m-default pre, table.m-table tr.m-default code,
+table.m-table td.m-default pre, table.m-table td.m-default code,
+table.m-table th.m-default pre, table.m-table th.m-default code,
+table.m-table tr.m-primary pre, table.m-table tr.m-primary code,
+table.m-table td.m-primary pre, table.m-table td.m-primary code,
+table.m-table th.m-primary pre, table.m-table th.m-primary code,
+table.m-table tr.m-success pre, table.m-table tr.m-success code,
+table.m-table td.m-success pre, table.m-table td.m-success code,
+table.m-table th.m-success pre, table.m-table th.m-success code,
+table.m-table tr.m-warning pre, table.m-table tr.m-warning code,
+table.m-table td.m-warning pre, table.m-table td.m-warning code,
+table.m-table th.m-warning pre, table.m-table th.m-warning code,
+table.m-table tr.m-danger pre, table.m-table tr.m-danger code,
+table.m-table td.m-danger pre, table.m-table td.m-danger code,
+table.m-table th.m-danger pre, table.m-table th.m-danger code,
+table.m-table tr.m-info pre, table.m-table tr.m-info code,
+table.m-table td.m-info pre, table.m-table td.m-info code,
+table.m-table th.m-info pre, table.m-table th.m-info code,
+table.m-table tr.m-dim pre, table.m-table tr.m-dim code,
+table.m-table td.m-dim pre, table.m-table td.m-dim code,
+table.m-table th.m-dim pre, table.m-table th.m-dim code {
+ background-color: rgba(251, 240, 236, 0.5);
}
-.m-block.m-info h3 a:hover, .m-block.m-info h3 a:focus, .m-block.m-info h3 a:active,
-.m-block.m-info h4 a:hover, .m-block.m-info h4 a:focus, .m-block.m-info h4 a:active,
-.m-block.m-info h5 a:hover, .m-block.m-info h5 a:focus, .m-block.m-info h5 a:active,
-.m-block.m-info h6 a:hover, .m-block.m-info h6 a:focus, .m-block.m-info h6 a:active {
- color: #c6ddf2;
+
+img.m-image, svg.m-image {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
}
-div.m-button a, .m-label { color: #ffffff; }
-div.m-button.m-flat a { color: #000000; }
-div.m-button.m-flat a:hover, div.m-button.m-default a:focus, div.m-button.m-default a:active {
- color: #2f73a3;
-}
-div.m-button.m-default a, .m-label:not(.m-flat).m-default { background-color: #000000; }
-div.m-button.m-primary a, .m-label:not(.m-flat).m-primary { background-color: #205275; }
-div.m-button.m-success a, .m-label:not(.m-flat).m-success { background-color: #31c25d; }
-div.m-button.m-warning a, .m-label:not(.m-flat).m-warning { background-color: #d19600; }
-div.m-button.m-danger a, .m-label:not(.m-flat).m-danger { background-color: #f60000; }
-div.m-button.m-info a, .m-label:not(.m-flat).m-info { background-color: #2e7dc5; }
-div.m-button.m-dim a, .m-label:not(.m-flat).m-dim { background-color: #bdbdbd; }
-div.m-button.m-default a:hover, div.m-button.m-default a:focus, div.m-button.m-default a:active {
- background-color: #205275;
+
+div.m-image {
+ text-align: center;
}
-div.m-button.m-primary a:hover, div.m-button.m-primary a:focus, div.m-button.m-primary a:active {
- background-color: #000000;
+
+img.m-image, svg.m-image, div.m-image img, div.m-image svg {
+ max-width: 100%;
+ border-radius: 0.2rem;
}
-div.m-button.m-success a:hover, div.m-button.m-success a:focus, div.m-button.m-success a:active {
- background-color: #dcf6e3;
+
+div.m-image.m-fullwidth img, div.m-image.m-fullwidth svg {
+ width: 100%;
}
-div.m-button.m-warning a:hover, div.m-button.m-warning a:focus, div.m-button.m-warning a:active {
- background-color: #fff1cc;
+
+img.m-image.m-badge, div.m-image.m-badge img {
+ border-radius: 50%;
}
-div.m-button.m-danger a:hover, div.m-button.m-danger a:focus, div.m-button.m-danger a:active {
- background-color: #f6dddc;
+
+figure.m-figure {
+ max-width: 100%;
+ margin-top: 0;
+ margin-left: auto;
+ margin-right: auto;
+ position: relative;
+ display: table;
}
-div.m-button.m-info a:hover, div.m-button.m-info a:focus, div.m-button.m-info a:active {
- background-color: #c6ddf2;
+
+figure.m-figure:before {
+ position: absolute;
+ content: ' ';
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: -1;
+ border-style: solid;
+ border-width: 0.125rem;
+ border-radius: 0.2rem;
+ border-color: #c7cfd9;
}
-div.m-button.m-dim a:hover, div.m-button.m-dim a:focus, div.m-button.m-dim a:active {
- background-color: #c0c0c0;
+
+figure.m-figure.m-flat:before {
+ border-color: transparent;
}
-.m-note.m-default { background-color: #f2f7fa; }
-.m-note.m-default,
-table.m-table tr.m-default td, table.m-table td.m-default,
-table.m-table tr.m-default th, table.m-table th.m-default {
- color: #000000;
+
+figure.m-figure > * {
+ margin-left: 1rem;
+ margin-right: 1rem;
+ display: table-caption;
+ caption-side: bottom;
}
-.m-note.m-default a:hover,
-table.m-table tr.m-default td a:hover, table.m-table td.m-default a:hover,
-table.m-table tr.m-default th a:hover, table.m-table th.m-default a:hover,
-.m-note.m-default a:focus,
-table.m-table tr.m-default td a:focus, table.m-table td.m-default a:focus,
-table.m-table tr.m-default th a:focus, table.m-table th.m-default a:focus,
-.m-note.m-default a:active,
-table.m-table tr.m-default td a:active, table.m-table td.m-default a:active,
-table.m-table tr.m-default th a:active, table.m-table th.m-default a:active {
- color: #205275;
+
+figure.m-figure > *:first-child {
+ display: inline;
}
-.m-note.m-primary a,
-table.m-table tr.m-primary td a, table.m-table td.m-primary a,
-table.m-table tr.m-primary th a, table.m-table th.m-primary a {
- color: #2f73a3;
+
+figure.m-figure > *:last-child {
+ margin-bottom: 1rem !important;
}
-.m-note.m-primary,
-table.m-table tr.m-primary td, table.m-table td.m-primary,
-table.m-table tr.m-primary th, table.m-table th.m-primary {
- background-color: #ef9069;
- color: #fbe4d9;
+
+figure.m-figure img, figure.m-figure svg {
+ position: relative;
+ margin-left: 0;
+ margin-right: 0;
+ margin-bottom: 0;
+ border-top-left-radius: 0.2rem;
+ border-top-right-radius: 0.2rem;
+ max-width: 100%;
}
-.m-note.m-primary a,
-table.m-table tr.m-primary td a, table.m-table td.m-primary a,
-table.m-table tr.m-primary th a, table.m-table th.m-primary a {
- color: #782f0d;
+
+figure.m-figure.m-flat img, figure.m-figure.m-flat svg {
+ border-bottom-left-radius: 0.2rem;
+ border-bottom-right-radius: 0.2rem;
}
-.m-note.m-primary a:hover,
-table.m-table tr.m-primary td a:hover, table.m-table td.m-primary a:hover,
-table.m-table tr.m-primary th a:hover, table.m-table th.m-primary a:hover,
-.m-note.m-primary a:focus,
-table.m-table tr.m-primary td a:focus, table.m-table td.m-primary a:focus,
-table.m-table tr.m-primary th a:focus, table.m-table th.m-primary a:focus,
-.m-note.m-primary a:active,
-table.m-table tr.m-primary td a:active, table.m-table td.m-primary a:active,
-table.m-table tr.m-primary th a:active, table.m-table th.m-primary a:active {
- color: #2f1205;
+
+figure.m-figure a img, figure.m-figure a svg {
+ margin-left: -1rem;
+ margin-right: -1rem;
}
-.m-note.m-success,
-table.m-table tr.m-success td, table.m-table td.m-success,
-table.m-table tr.m-success th, table.m-table th.m-success {
- background-color: #4dd376;
- color: #f4fcf6;
+
+figure.m-figure.m-fullwidth, figure.m-figure.m-fullwidth > * {
+ display: block;
}
-.m-note.m-success a,
-table.m-table tr.m-success td a, table.m-table td.m-success a,
-table.m-table tr.m-success th a, table.m-table th.m-success a {
- color: #c5f2d1;
+
+figure.m-figure.m-fullwidth > *:first-child {
+ display: inline;
}
-.m-note.m-success a:hover,
-table.m-table tr.m-success td a:hover, table.m-table td.m-success a:hover,
-table.m-table tr.m-success th a:hover, table.m-table th.m-success a:hover,
-.m-note.m-success a:focus,
-table.m-table tr.m-success td a:focus, table.m-table td.m-success a:focus,
-table.m-table tr.m-success th a:focus, table.m-table th.m-success a:focus,
-.m-note.m-success a:active,
-table.m-table tr.m-success td a:active, table.m-table td.m-success a:active,
-table.m-table tr.m-success th a:active, table.m-table th.m-success a:active {
- color: #dcf6e3;
+
+figure.m-figure.m-fullwidth img, figure.m-figure.m-fullwidth svg {
+ width: 100%;
}
-.m-note.m-warning, table.m-table tr.m-warning td, table.m-table td.m-warning,
- table.m-table tr.m-warning th, table.m-table th.m-warning {
- background-color: #d19600;
- color: #fff7e3;
+
+figure.m-figure.m-fullwidth:after {
+ content: ' ';
+ display: block;
+ margin-top: 1rem;
+ height: 1px;
}
-.m-note.m-warning a, table.m-table tr.m-warning td a, table.m-table td.m-warning a,
- table.m-table tr.m-warning th a, table.m-table th.m-warning a {
- color: #fff1cc;
+
+.m-code-figure, .m-console-figure {
+ margin-top: 0;
+ margin-left: 0;
+ margin-right: 0;
+ position: relative;
+ padding: 1rem;
}
-.m-note.m-warning a:hover,
-table.m-table tr.m-warning td a:hover, table.m-table td.m-warning a:hover,
-table.m-table tr.m-warning th a:hover, table.m-table th.m-warning a:hover,
-.m-note.m-warning a:focus,
-table.m-table tr.m-warning td a:focus, table.m-table td.m-warning a:focus,
-table.m-table tr.m-warning th a:focus, table.m-table th.m-warning a:focus,
-.m-note.m-warning a:active,
-table.m-table tr.m-warning td a:active, table.m-table td.m-warning a:active,
-table.m-table tr.m-warning th a:active, table.m-table th.m-warning a:active {
- color: #fff7e3;
+
+.m-code-figure:before, .m-console-figure:before {
+ position: absolute;
+ content: ' ';
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: -1;
+ border-style: solid;
+ border-width: 0.125rem;
+ border-radius: 0.2rem;
}
-.m-note.m-danger,
-table.m-table tr.m-danger td, table.m-table td.m-danger,
-table.m-table tr.m-danger th, table.m-table th.m-danger {
- background-color: #e23e3e;
- color: #fdf3f3;
+
+.m-code-figure:before {
+ border-color: #f2f7fa;
}
-.m-note.m-danger a,
-table.m-table tr.m-danger td a, table.m-table td.m-danger a,
-table.m-table tr.m-danger th a, table.m-table th.m-danger a {
- color: #f2c7c6;
+
+.m-console-figure:before {
+ border-color: #000000;
}
-.m-note.m-danger a:hover,
-table.m-table tr.m-danger td a:hover, table.m-table td.m-danger a:hover,
-table.m-table tr.m-danger th a:hover, table.m-table th.m-danger a:hover,
-.m-note.m-danger a:focus,
-table.m-table tr.m-danger td a:focus, table.m-table td.m-danger a:focus,
-table.m-table tr.m-danger th a:focus, table.m-table th.m-danger a:focus,
-.m-note.m-danger a:active,
-table.m-table tr.m-danger td a:active, table.m-table td.m-danger a:active,
-table.m-table tr.m-danger th a:active, table.m-table th.m-danger a:active {
- color: #f6dddc;
+
+.m-code-figure.m-flat:before, .m-console-figure.m-flat:before {
+ border-color: transparent;
}
-.m-note.m-info,
-table.m-table tr.m-info td, table.m-table td.m-info,
-table.m-table tr.m-info th, table.m-table th.m-info {
- background-color: #4c93d3;
- color: #f4f8fc;
+
+.m-code-figure > pre:first-child, .m-console-figure > pre:first-child {
+ position: relative;
+ margin: -1rem -1rem 1rem -1rem;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
}
-.m-note.m-info a,
-table.m-table tr.m-info td a, table.m-table td.m-info a,
-table.m-table tr.m-info th a, table.m-table th.m-info a {
- color: #c6ddf2;
+
+.m-code-figure > pre.m-nopad, .m-console-figure > pre.m-nopad {
+ margin-left: -0.875rem;
+ margin-right: -0.875rem;
+ margin-top: -1rem;
+ margin-bottom: -0.875rem;
+ padding-left: 0.875rem;
}
-.m-note.m-info a:hover,
-table.m-table tr.m-info td a:hover, table.m-table td.m-info a:hover,
-table.m-table tr.m-info th a:hover, table.m-table th.m-info a:hover,
-.m-note.m-info a:focus,
-table.m-table tr.m-info td a:focus, table.m-table td.m-info a:focus,
-table.m-table tr.m-info th a:focus, table.m-table th.m-info a:focus,
-.m-note.m-info a:active,
-table.m-table tr.m-info td a:active, table.m-table td.m-info a:active,
-table.m-table tr.m-info th a:active, table.m-table th.m-info a:active {
- color: #dbeaf7;
+
+figure.m-figure figcaption, .m-code-figure figcaption, .m-console-figure figcaption {
+ margin-top: 0.5rem;
+ margin-bottom: 0.5rem;
+ font-weight: normal;
+ font-size: 1.17rem;
}
-.m-note.m-dim,
-table.m-table tr.m-dim td, table.m-table td.m-dim,
-table.m-table tr.m-dim th, table.m-table th.m-dim {
- background-color: #f1f1f1;
- color: #7c7c7c;
+
+.m-imagegrid > div {
+ background-color: #ffffff;
}
-.m-note.m-dim a,
-table.m-table tr.m-dim td a, table.m-table td.m-dim a,
-table.m-table tr.m-dim th a, table.m-table th.m-dim a {
- color: #c0c0c0;
+
+.m-imagegrid > div > figure {
+ display: block;
+ float: left;
+ position: relative;
+ margin: 0;
}
-.m-note.m-dim a:hover,
-table.m-table tr.m-dim td a:hover, table.m-table td.m-dim a:hover,
-table.m-table tr.m-dim th a:hover, table.m-table th.m-dim a:hover,
-.m-note.m-dim a:focus,
-table.m-table tr.m-dim td a:focus, table.m-table td.m-dim a:focus,
-table.m-table tr.m-dim th a:focus, table.m-table th.m-dim a:focus,
-.m-note.m-dim a:active,
-table.m-table tr.m-dim td a:active, table.m-table td.m-dim a:active,
-table.m-table tr.m-dim th a:active, table.m-table th.m-dim a:active {
- color: #949494;
-}
-figure.m-figure.m-default:before { border-color: #f2f7fa; }
-figure.m-figure.m-default figcaption { color: #000000; }
-figure.m-figure.m-primary:before { border-color: #ef9069; }
-figure.m-figure.m-primary figcaption { color: #205275; }
-figure.m-figure.m-success:before { border-color: #4dd376; }
-figure.m-figure.m-success figcaption { color: #31c25d; }
-figure.m-figure.m-warning:before { border-color: #d19600; }
-figure.m-figure.m-warning figcaption { color: #d19600; }
-figure.m-figure.m-danger:before { border-color: #e23e3e; }
-figure.m-figure.m-danger figcaption { color: #f60000; }
-figure.m-figure.m-info:before { border-color: #4c93d3; }
-figure.m-figure.m-info figcaption { color: #2e7dc5; }
-figure.m-figure.m-dim:before { border-color: #f1f1f1; }
-figure.m-figure.m-dim { color: #bdbdbd; }
-figure.m-figure.m-dim a { color: #c0c0c0; }
-figure.m-figure.m-dim a:hover, figure.m-figure.m-dim a:focus, figure.m-figure.m-dim a:active {
- color: #949494;
+
+.m-imagegrid > div > figure > div,
+.m-imagegrid > div > figure > figcaption,
+.m-imagegrid > div > figure > a > div,
+.m-imagegrid > div > figure > a > figcaption {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border-color: #ffffff;
+ border-style: solid;
+ border-width: 0.25rem;
+ padding: 0.5rem;
}
-.m-math { fill: #000000; }
-.m-math.m-default, .m-math g.m-default, .m-math rect.m-default,
-div.m-plot svg .m-bar.m-default,
-.m-graph g.m-edge polygon,
-.m-graph g.m-node:not(.m-flat) ellipse,
-.m-graph g.m-node:not(.m-flat) polygon,
-.m-graph g.m-edge text,
-.m-graph g.m-node.m-flat text,
-.m-graph.m-default g.m-edge polygon,
-.m-graph.m-default g.m-node:not(.m-flat) ellipse,
-.m-graph.m-default g.m-node:not(.m-flat) polygon,
-.m-graph.m-default g.m-edge text,
-.m-graph.m-default g.m-node.m-flat text {
- fill: #000000;
+
+.m-imagegrid > div > figure:first-child > div,
+.m-imagegrid > div > figure:first-child > figcaption,
+.m-imagegrid > div > figure:first-child > a > div,
+.m-imagegrid > div > figure:first-child > a > figcaption {
+ border-left-width: 0;
}
+
+.m-imagegrid > div > figure:last-child > div,
+.m-imagegrid > div > figure:last-child > figcaption,
+.m-imagegrid > div > figure:last-child > a > div,
+.m-imagegrid > div > figure:last-child > a > figcaption {
+ border-right-width: 0;
+}
+
+.m-imagegrid > div > figure > figcaption,
+.m-imagegrid > div > figure > a > figcaption {
+ color: transparent;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ font-size: 0.75rem;
+}
+
+.m-imagegrid > div > figure > div::before,
+.m-imagegrid > div > figure > figcaption::before,
+.m-imagegrid > div > figure > a > div::before,
+.m-imagegrid > div > figure > a > figcaption::before {
+ content: '';
+ display: inline-block;
+ height: 100%;
+ vertical-align: bottom;
+ width: 0;
+}
+
+.m-imagegrid > div > figure:hover > figcaption,
+.m-imagegrid > div > figure:hover > a > figcaption {
+ background: linear-gradient(transparent 0%, transparent 75%, rgba(0, 0, 0, 0.85) 100%);
+ color: #ffffff;
+}
+
+.m-imagegrid > div > figure > img,
+.m-imagegrid > div > figure > a > img {
+ width: 100%;
+ height: 100%;
+}
+
+.m-imagegrid > div::after {
+ display: block;
+ content: ' ';
+ clear: both;
+}
+
+@media screen and (max-width: 767px) {
+ .m-imagegrid > div > figure {
+ float: none;
+ width: 100% !important;
+ }
+
+ .m-imagegrid > div > figure > div,
+ .m-imagegrid > div > figure > figcaption,
+ .m-imagegrid > div > figure > a > div,
+ .m-imagegrid > div > figure > a > figcaption {
+ border-left-width: 0;
+ border-right-width: 0;
+ }
+}
+
+.m-container-inflatable > .m-row > [class*='m-col-'] > .m-note,
+.m-container-inflatable > .m-row > [class*='m-col-'] > .m-frame,
+.m-container-inflatable > .m-row > [class*='m-col-'] > .m-block,
+.m-container-inflatable > .m-row > [class*='m-col-'] > .m-imagegrid,
+.m-container-inflatable > .m-row > [class*='m-col-'] > pre,
+.m-container-inflatable > .m-row > [class*='m-col-'] > .m-code-figure,
+.m-container-inflatable > .m-row > [class*='m-col-'] > .m-console-figure,
+.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-note,
+.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-frame,
+.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-block,
+.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-imagegrid,
+.m-container-inflatable > .m-row > [class*='m-col-'] section > pre,
+.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-code-figure,
+.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-console-figure,
+.m-container-inflatable [class*='m-center-'] > .m-note,
+.m-container-inflatable [class*='m-center-'] > .m-frame,
+.m-container-inflatable [class*='m-center-'] > .m-block,
+.m-container-inflatable [class*='m-center-'] > .m-imagegrid,
+.m-container-inflatable [class*='m-center-'] > pre,
+.m-container-inflatable [class*='m-center-'] > .m-code-figure,
+.m-container-inflatable [class*='m-center-'] > .m-console-figure,
+.m-container-inflatable [class*='m-left-'] > .m-note,
+.m-container-inflatable [class*='m-left-'] > .m-frame,
+.m-container-inflatable [class*='m-left-'] > .m-block,
+.m-container-inflatable [class*='m-left-'] > .m-imagegrid,
+.m-container-inflatable [class*='m-left-'] > pre,
+.m-container-inflatable [class*='m-left-'] > .m-code-figure,
+.m-container-inflatable [class*='m-left-'] > .m-console-figure,
+.m-container-inflatable [class*='m-right-'] > .m-note,
+.m-container-inflatable [class*='m-right-'] > .m-frame,
+.m-container-inflatable [class*='m-right-'] > .m-block,
+.m-container-inflatable [class*='m-right-'] > .m-imagegrid,
+.m-container-inflatable [class*='m-right-'] > pre,
+.m-container-inflatable [class*='m-right-'] > .m-code-figure,
+.m-container-inflatable [class*='m-right-'] > .m-console-figure,
+.m-container-inflatable .m-container-inflate > .m-note,
+.m-container-inflatable .m-container-inflate > .m-frame,
+.m-container-inflatable .m-container-inflate > .m-block,
+.m-container-inflatable .m-container-inflate > .m-imagegrid,
+.m-container-inflatable .m-container-inflate > pre,
+.m-container-inflatable .m-container-inflate > .m-code-figure,
+.m-container-inflatable .m-container-inflate > .m-console-figure {
+ margin-left: -1rem;
+ margin-right: -1rem;
+}
+
+@media screen and (min-width: 576px) {
+ .m-container-inflatable .m-center-s > .m-note,
+ .m-container-inflatable .m-center-s > .m-frame,
+ .m-container-inflatable .m-center-s > .m-block,
+ .m-container-inflatable .m-center-s > .m-imagegrid,
+ .m-container-inflatable .m-center-s > pre,
+ .m-container-inflatable .m-center-s > .m-code-figure,
+ .m-container-inflatable .m-center-s > .m-console-figure {
+ margin-left: -1rem;
+ margin-right: -1rem;
+ }
+
+ .m-container-inflatable .m-left-s > .m-note,
+ .m-container-inflatable .m-left-s > .m-frame,
+ .m-container-inflatable .m-left-s > .m-block,
+ .m-container-inflatable .m-left-s > .m-imagegrid,
+ .m-container-inflatable .m-left-s > pre,
+ .m-container-inflatable .m-left-s > .m-code-figure,
+ .m-container-inflatable .m-left-s > .m-console-figure {
+ margin-left: -1rem;
+ margin-right: 0;
+ }
+
+ .m-container-inflatable .m-right-s > .m-note,
+ .m-container-inflatable .m-right-s > .m-frame,
+ .m-container-inflatable .m-right-s > .m-block,
+ .m-container-inflatable .m-right-s > .m-imagegrid,
+ .m-container-inflatable .m-right-s > pre,
+ .m-container-inflatable .m-right-s > .m-code-figure,
+ .m-container-inflatable .m-right-s > .m-console-figure {
+ margin-left: 0;
+ margin-right: -1rem;
+ }
+
+ .m-container-inflatable > .m-row > .m-col-s-10 > .m-imagegrid.m-container-inflate,
+ .m-container-inflatable > .m-row > .m-col-s-10 section > .m-imagegrid.m-container-inflate {
+ margin-left: -10%;
+ margin-right: -10%;
+ }
+}
+
+@media screen and (min-width: 768px) {
+ .m-container-inflatable .m-center-m > .m-note,
+ .m-container-inflatable .m-center-m > .m-frame,
+ .m-container-inflatable .m-center-m > .m-block,
+ .m-container-inflatable .m-center-m > .m-imagegrid,
+ .m-container-inflatable .m-center-m > pre,
+ .m-container-inflatable .m-center-m > .m-code-figure,
+ .m-container-inflatable .m-center-m > .m-console-figure {
+ margin-left: -1rem;
+ margin-right: -1rem;
+ }
+
+ .m-container-inflatable .m-left-m > .m-note,
+ .m-container-inflatable .m-left-m > .m-frame,
+ .m-container-inflatable .m-left-m > .m-block,
+ .m-container-inflatable .m-left-m > .m-imagegrid,
+ .m-container-inflatable .m-left-m > pre,
+ .m-container-inflatable .m-left-m > .m-code-figure,
+ .m-container-inflatable .m-left-m > .m-console-figure {
+ margin-left: -1rem;
+ margin-right: 0;
+ }
+
+ .m-container-inflatable .m-right-m > .m-note,
+ .m-container-inflatable .m-right-m > .m-frame,
+ .m-container-inflatable .m-right-m > .m-block,
+ .m-container-inflatable .m-right-m > .m-imagegrid,
+ .m-container-inflatable .m-right-m > pre,
+ .m-container-inflatable .m-right-m > .m-code-figure,
+ .m-container-inflatable .m-right-m > .m-console-figure {
+ margin-left: 0;
+ margin-right: -1rem;
+ }
+
+ .m-container-inflatable > .m-row > .m-col-m-10 > .m-imagegrid.m-container-inflate,
+ .m-container-inflatable > .m-row > .m-col-m-10 section > .m-imagegrid.m-container-inflate {
+ margin-left: -10%;
+ margin-right: -10%;
+ }
+}
+
+@media screen and (min-width: 992px) {
+ .m-container-inflatable .m-center-l > .m-note,
+ .m-container-inflatable .m-center-l > .m-frame,
+ .m-container-inflatable .m-center-l > .m-block,
+ .m-container-inflatable .m-center-l > .m-imagegrid,
+ .m-container-inflatable .m-center-l > pre,
+ .m-container-inflatable .m-center-l > .m-code-figure,
+ .m-container-inflatable .m-center-l > .m-console-figure {
+ margin-left: -1rem;
+ margin-right: -1rem;
+ }
+
+ .m-container-inflatable .m-left-l > .m-note,
+ .m-container-inflatable .m-left-l > .m-frame,
+ .m-container-inflatable .m-left-l > .m-block,
+ .m-container-inflatable .m-left-l > .m-imagegrid,
+ .m-container-inflatable .m-left-l > pre,
+ .m-container-inflatable .m-left-l > .m-code-figure,
+ .m-container-inflatable .m-left-l > .m-console-figure {
+ margin-left: -1rem;
+ margin-right: 0;
+ }
+
+ .m-container-inflatable .m-right-l > .m-note,
+ .m-container-inflatable .m-right-l > .m-frame,
+ .m-container-inflatable .m-right-l > .m-block,
+ .m-container-inflatable .m-right-l > .m-imagegrid,
+ .m-container-inflatable .m-right-l > pre,
+ .m-container-inflatable .m-right-l > .m-code-figure,
+ .m-container-inflatable .m-right-l > .m-console-figure {
+ margin-left: 0;
+ margin-right: -1rem;
+ }
+
+ .m-container-inflatable > .m-row > .m-col-l-10 > .m-imagegrid.m-container-inflate,
+ .m-container-inflatable > .m-row > .m-col-l-10 section > .m-imagegrid.m-container-inflate {
+ margin-left: -10%;
+ margin-right: -10%;
+ }
+}
+
+pre.m-code span.hll {
+ margin-left: -1.0rem;
+ margin-right: -1.0rem;
+ padding-left: 1.0rem;
+}
+
+.m-code.m-inverted > span, .m-console.m-inverted > span {
+ opacity: 0.3333;
+}
+
+.m-code.m-inverted > span.hll, .m-console.m-inverted > span.hll {
+ opacity: 1;
+ background-color: transparent;
+ border-color: transparent;
+}
+
+.m-code.m-inverted {
+ color: rgba(91, 91, 91, 0.33);
+}
+
+.m-console.m-inverted {
+ color: rgba(91, 91, 91, 0.33);
+}
+
+.m-code.m-inverted > span.hll {
+ color: #000000;
+}
+
+.m-cosole.m-inverted > span.hll {
+ color: #000000;
+}
+
+.m-code-color {
+ display: inline-block;
+ width: 0.75rem;
+ height: 0.75rem;
+ vertical-align: -0.05rem;
+ margin-left: 0.2rem;
+ margin-right: 0.1rem;
+ border-radius: 0.1rem;
+}
+
+div.m-math {
+ overflow-x: auto;
+ overflow-y: hidden;
+}
+
+div.m-math svg {
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+}
+
+div.m-button a svg.m-math {
+ fill: #ffffff;
+}
+
+div.m-button.m-flat a svg.m-math {
+ fill: #000000;
+}
+
+div.m-button.m-flat a:hover svg.m-math, div.m-button.m-default a:focus svg.m-math,
+div.m-button.m-default a:active svg.m-math {
+ fill: #2f73a3;
+}
+
+.m-graph {
+ font-size: 1em;
+}
+
+div.m-plot svg, div.m-graph svg {
+ max-width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+}
+
+div.m-plot .m-background {
+ fill: #f2f7fa;
+}
+
+div.m-plot svg .m-label {
+ font-size: 11px;
+}
+
+div.m-plot svg .m-title {
+ font-size: 13px;
+}
+
+div.m-plot svg .m-label, div.m-plot svg .m-title {
+ fill: #000000;
+}
+
+div.m-plot svg .m-line {
+ stroke: #000000;
+ stroke-width: 0.8;
+}
+
+div.m-plot svg .m-error {
+ stroke: #000000;
+ stroke-width: 1.5;
+}
+
+div.m-plot svg .m-label.m-dim {
+ fill: #bdbdbd;
+}
+
+.m-graph g.m-edge path, .m-graph g.m-node.m-flat ellipse,
+.m-graph g.m-node.m-flat polygon {
+ fill: none;
+}
+
+.m-graph g.m-node:not(.m-flat) text {
+ fill: #ffffff;
+}
+
+figure.m-figure > svg.m-math:first-child,
+figure.m-figure > svg.m-graph:first-child {
+ padding: 1rem;
+ box-sizing: content-box;
+}
+
+figure.m-figure:not(.m-flat) > svg.m-math:first-child,
+figure.m-figure:not(.m-flat) > svg.m-graph:first-child {
+ background-color: #c7cfd9;
+}
+
+.m-block.m-default {
+ border-left-color: #c7cfd9;
+}
+
+.m-block.m-default h3, .m-block.m-default h4, .m-block.m-default h5, .m-block.m-default h6,
+.m-text.m-default, .m-label.m-flat.m-default {
+ color: #000000;
+}
+
+.m-block.m-default h3 a, .m-block.m-default h4 a, .m-block.m-default h5 a, .m-block.m-default h6 a {
+ color: #205275;
+}
+
+.m-block.m-primary {
+ border-left-color: #205275;
+}
+
+.m-block.m-primary h3, .m-block.m-primary h4, .m-block.m-primary h5, .m-block.m-primary h6,
+.m-block.m-primary h3 a, .m-block.m-primary h4 a, .m-block.m-primary h5 a, .m-block.m-primary h6 a,
+.m-text.m-primary, .m-label.m-flat.m-primary {
+ color: #205275;
+}
+
+.m-block.m-success {
+ border-left-color: #31c25d;
+}
+
+.m-block.m-success h3, .m-block.m-success h4, .m-block.m-success h5, .m-block.m-success h6,
+.m-block.m-success h3 a, .m-block.m-success h4 a, .m-block.m-success h5 a, .m-block.m-success h6 a,
+.m-text.m-success, .m-label.m-flat.m-success {
+ color: #31c25d;
+}
+
+.m-block.m-warning {
+ border-left-color: #d19600;
+}
+
+.m-block.m-warning h3, .m-block.m-warning h4, .m-block.m-warning h5, .m-block.m-warning h6,
+.m-block.m-warning h3 a, .m-block.m-warning h4 a, .m-block.m-warning h5 a, .m-block.m-warning h6 a,
+.m-text.m-warning, .m-label.m-flat.m-warning {
+ color: #d19600;
+}
+
+.m-block.m-danger {
+ border-left-color: #f60000;
+}
+
+.m-block.m-danger h3, .m-block.m-danger h4, .m-block.m-danger h5, .m-block.m-danger h6,
+.m-block.m-danger h3 a, .m-block.m-danger h4 a, .m-block.m-danger h5 a, .m-block.m-danger h6 a,
+.m-text.m-danger, .m-label.m-flat.m-danger {
+ color: #f60000;
+}
+
+.m-block.m-info {
+ border-left-color: #2e7dc5;
+}
+
+.m-block.m-info h3, .m-block.m-info h4, .m-block.m-info h5, .m-block.m-info h6,
+.m-block.m-info h3 a, .m-block.m-info h4 a, .m-block.m-info h5 a, .m-block.m-info h6 a,
+.m-text.m-info, .m-label.m-flat.m-info {
+ color: #2e7dc5;
+}
+
+.m-block.m-dim {
+ border-left-color: #bdbdbd;
+}
+
+.m-block.m-dim, .m-text.m-dim, .m-label.m-flat.m-dim {
+ color: #bdbdbd;
+}
+
+.m-block.m-dim a, .m-text.m-dim a {
+ color: #c0c0c0;
+}
+
+.m-block.m-dim a:hover, .m-block.m-dim a:focus, .m-block.m-dim a:active,
+.m-text.m-dim a:hover, .m-text.m-dim a:focus, .m-text.m-dim a:active {
+ color: #949494;
+}
+
+.m-block.m-flat {
+ border-color: transparent;
+}
+
+.m-block.m-flat h3, .m-block.m-flat h4, .m-block.m-flat h5, .m-block.m-flat h6 {
+ color: #000000;
+}
+
+.m-block.m-default h3 a:hover, .m-block.m-default h3 a:focus, .m-block.m-default h3 a:active,
+.m-block.m-default h4 a:hover, .m-block.m-default h4 a:focus, .m-block.m-default h4 a:active,
+.m-block.m-default h5 a:hover, .m-block.m-default h5 a:focus, .m-block.m-default h5 a:active,
+.m-block.m-default h6 a:hover, .m-block.m-default h6 a:focus, .m-block.m-default h6 a:active {
+ color: #205275;
+}
+
+.m-block.m-primary h3 a:hover, .m-block.m-primary h3 a:focus, .m-block.m-primary h3 a:active,
+.m-block.m-primary h4 a:hover, .m-block.m-primary h4 a:focus, .m-block.m-primary h4 a:active,
+.m-block.m-primary h5 a:hover, .m-block.m-primary h5 a:focus, .m-block.m-primary h5 a:active,
+.m-block.m-primary h6 a:hover, .m-block.m-primary h6 a:focus, .m-block.m-primary h6 a:active {
+ color: #000000;
+}
+
+.m-block.m-success h3 a:hover, .m-block.m-success h3 a:focus, .m-block.m-success h3 a:active,
+.m-block.m-success h4 a:hover, .m-block.m-success h4 a:focus, .m-block.m-success h4 a:active,
+.m-block.m-success h5 a:hover, .m-block.m-success h5 a:focus, .m-block.m-success h5 a:active,
+.m-block.m-success h6 a:hover, .m-block.m-success h6 a:focus, .m-block.m-success h6 a:active {
+ color: #dcf6e3;
+}
+
+.m-block.m-warning h3 a:hover, .m-block.m-warning h3 a:focus, .m-block.m-warning h3 a:active,
+.m-block.m-warning h4 a:hover, .m-block.m-warning h4 a:focus, .m-block.m-warning h4 a:active,
+.m-block.m-warning h5 a:hover, .m-block.m-warning h5 a:focus, .m-block.m-warning h5 a:active,
+.m-block.m-warning h6 a:hover, .m-block.m-warning h6 a:focus, .m-block.m-warning h6 a:active {
+ color: #fff1cc;
+}
+
+.m-block.m-danger h3 a:hover, .m-block.m-danger h3 a:focus, .m-block.m-danger h3 a:active,
+.m-block.m-danger h4 a:hover, .m-block.m-danger h4 a:focus, .m-block.m-danger h4 a:active,
+.m-block.m-danger h5 a:hover, .m-block.m-danger h5 a:focus, .m-block.m-danger h5 a:active,
+.m-block.m-danger h6 a:hover, .m-block.m-danger h6 a:focus, .m-block.m-danger h6 a:active {
+ color: #f6dddc;
+}
+
+.m-block.m-info h3 a:hover, .m-block.m-info h3 a:focus, .m-block.m-info h3 a:active,
+.m-block.m-info h4 a:hover, .m-block.m-info h4 a:focus, .m-block.m-info h4 a:active,
+.m-block.m-info h5 a:hover, .m-block.m-info h5 a:focus, .m-block.m-info h5 a:active,
+.m-block.m-info h6 a:hover, .m-block.m-info h6 a:focus, .m-block.m-info h6 a:active {
+ color: #c6ddf2;
+}
+
+div.m-button a, .m-label {
+ color: #ffffff;
+}
+
+div.m-button.m-flat a {
+ color: #000000;
+}
+
+div.m-button.m-flat a:hover, div.m-button.m-default a:focus, div.m-button.m-default a:active {
+ color: #2f73a3;
+}
+
+div.m-button.m-default a, .m-label:not(.m-flat).m-default {
+ background-color: #000000;
+}
+
+div.m-button.m-primary a, .m-label:not(.m-flat).m-primary {
+ background-color: #205275;
+}
+
+div.m-button.m-success a, .m-label:not(.m-flat).m-success {
+ background-color: #31c25d;
+}
+
+div.m-button.m-warning a, .m-label:not(.m-flat).m-warning {
+ background-color: #d19600;
+}
+
+div.m-button.m-danger a, .m-label:not(.m-flat).m-danger {
+ background-color: #f60000;
+}
+
+div.m-button.m-info a, .m-label:not(.m-flat).m-info {
+ background-color: #2e7dc5;
+}
+
+div.m-button.m-dim a, .m-label:not(.m-flat).m-dim {
+ background-color: #bdbdbd;
+}
+
+div.m-button.m-default a:hover, div.m-button.m-default a:focus, div.m-button.m-default a:active {
+ background-color: #205275;
+}
+
+div.m-button.m-primary a:hover, div.m-button.m-primary a:focus, div.m-button.m-primary a:active {
+ background-color: #000000;
+}
+
+div.m-button.m-success a:hover, div.m-button.m-success a:focus, div.m-button.m-success a:active {
+ background-color: #dcf6e3;
+}
+
+div.m-button.m-warning a:hover, div.m-button.m-warning a:focus, div.m-button.m-warning a:active {
+ background-color: #fff1cc;
+}
+
+div.m-button.m-danger a:hover, div.m-button.m-danger a:focus, div.m-button.m-danger a:active {
+ background-color: #f6dddc;
+}
+
+div.m-button.m-info a:hover, div.m-button.m-info a:focus, div.m-button.m-info a:active {
+ background-color: #c6ddf2;
+}
+
+div.m-button.m-dim a:hover, div.m-button.m-dim a:focus, div.m-button.m-dim a:active {
+ background-color: #c0c0c0;
+}
+
+.m-note.m-default {
+ background-color: #f2f7fa;
+}
+
+.m-note.m-default,
+table.m-table tr.m-default td, table.m-table td.m-default,
+table.m-table tr.m-default th, table.m-table th.m-default {
+ color: #000000;
+}
+
+.m-note.m-default a:hover,
+table.m-table tr.m-default td a:hover, table.m-table td.m-default a:hover,
+table.m-table tr.m-default th a:hover, table.m-table th.m-default a:hover,
+.m-note.m-default a:focus,
+table.m-table tr.m-default td a:focus, table.m-table td.m-default a:focus,
+table.m-table tr.m-default th a:focus, table.m-table th.m-default a:focus,
+.m-note.m-default a:active,
+table.m-table tr.m-default td a:active, table.m-table td.m-default a:active,
+table.m-table tr.m-default th a:active, table.m-table th.m-default a:active {
+ color: #205275;
+}
+
+.m-note.m-primary a,
+table.m-table tr.m-primary td a, table.m-table td.m-primary a,
+table.m-table tr.m-primary th a, table.m-table th.m-primary a {
+ color: #2f73a3;
+}
+
+.m-note.m-primary,
+table.m-table tr.m-primary td, table.m-table td.m-primary,
+table.m-table tr.m-primary th, table.m-table th.m-primary {
+ background-color: #ef9069;
+ color: #fbe4d9;
+}
+
+.m-note.m-primary a,
+table.m-table tr.m-primary td a, table.m-table td.m-primary a,
+table.m-table tr.m-primary th a, table.m-table th.m-primary a {
+ color: #782f0d;
+}
+
+.m-note.m-primary a:hover,
+table.m-table tr.m-primary td a:hover, table.m-table td.m-primary a:hover,
+table.m-table tr.m-primary th a:hover, table.m-table th.m-primary a:hover,
+.m-note.m-primary a:focus,
+table.m-table tr.m-primary td a:focus, table.m-table td.m-primary a:focus,
+table.m-table tr.m-primary th a:focus, table.m-table th.m-primary a:focus,
+.m-note.m-primary a:active,
+table.m-table tr.m-primary td a:active, table.m-table td.m-primary a:active,
+table.m-table tr.m-primary th a:active, table.m-table th.m-primary a:active {
+ color: #2f1205;
+}
+
+.m-note.m-success,
+table.m-table tr.m-success td, table.m-table td.m-success,
+table.m-table tr.m-success th, table.m-table th.m-success {
+ background-color: #4dd376;
+ color: #f4fcf6;
+}
+
+.m-note.m-success a,
+table.m-table tr.m-success td a, table.m-table td.m-success a,
+table.m-table tr.m-success th a, table.m-table th.m-success a {
+ color: #c5f2d1;
+}
+
+.m-note.m-success a:hover,
+table.m-table tr.m-success td a:hover, table.m-table td.m-success a:hover,
+table.m-table tr.m-success th a:hover, table.m-table th.m-success a:hover,
+.m-note.m-success a:focus,
+table.m-table tr.m-success td a:focus, table.m-table td.m-success a:focus,
+table.m-table tr.m-success th a:focus, table.m-table th.m-success a:focus,
+.m-note.m-success a:active,
+table.m-table tr.m-success td a:active, table.m-table td.m-success a:active,
+table.m-table tr.m-success th a:active, table.m-table th.m-success a:active {
+ color: #dcf6e3;
+}
+
+.m-note.m-warning, table.m-table tr.m-warning td, table.m-table td.m-warning,
+table.m-table tr.m-warning th, table.m-table th.m-warning {
+ background-color: #d19600;
+ color: #fff7e3;
+}
+
+.m-note.m-warning a, table.m-table tr.m-warning td a, table.m-table td.m-warning a,
+table.m-table tr.m-warning th a, table.m-table th.m-warning a {
+ color: #fff1cc;
+}
+
+.m-note.m-warning a:hover,
+table.m-table tr.m-warning td a:hover, table.m-table td.m-warning a:hover,
+table.m-table tr.m-warning th a:hover, table.m-table th.m-warning a:hover,
+.m-note.m-warning a:focus,
+table.m-table tr.m-warning td a:focus, table.m-table td.m-warning a:focus,
+table.m-table tr.m-warning th a:focus, table.m-table th.m-warning a:focus,
+.m-note.m-warning a:active,
+table.m-table tr.m-warning td a:active, table.m-table td.m-warning a:active,
+table.m-table tr.m-warning th a:active, table.m-table th.m-warning a:active {
+ color: #fff7e3;
+}
+
+.m-note.m-danger,
+table.m-table tr.m-danger td, table.m-table td.m-danger,
+table.m-table tr.m-danger th, table.m-table th.m-danger {
+ background-color: #e23e3e;
+ color: #fdf3f3;
+}
+
+.m-note.m-danger a,
+table.m-table tr.m-danger td a, table.m-table td.m-danger a,
+table.m-table tr.m-danger th a, table.m-table th.m-danger a {
+ color: #f2c7c6;
+}
+
+.m-note.m-danger a:hover,
+table.m-table tr.m-danger td a:hover, table.m-table td.m-danger a:hover,
+table.m-table tr.m-danger th a:hover, table.m-table th.m-danger a:hover,
+.m-note.m-danger a:focus,
+table.m-table tr.m-danger td a:focus, table.m-table td.m-danger a:focus,
+table.m-table tr.m-danger th a:focus, table.m-table th.m-danger a:focus,
+.m-note.m-danger a:active,
+table.m-table tr.m-danger td a:active, table.m-table td.m-danger a:active,
+table.m-table tr.m-danger th a:active, table.m-table th.m-danger a:active {
+ color: #f6dddc;
+}
+
+.m-note.m-info,
+table.m-table tr.m-info td, table.m-table td.m-info,
+table.m-table tr.m-info th, table.m-table th.m-info {
+ background-color: #4c93d3;
+ color: #f4f8fc;
+}
+
+.m-note.m-info a,
+table.m-table tr.m-info td a, table.m-table td.m-info a,
+table.m-table tr.m-info th a, table.m-table th.m-info a {
+ color: #c6ddf2;
+}
+
+.m-note.m-info a:hover,
+table.m-table tr.m-info td a:hover, table.m-table td.m-info a:hover,
+table.m-table tr.m-info th a:hover, table.m-table th.m-info a:hover,
+.m-note.m-info a:focus,
+table.m-table tr.m-info td a:focus, table.m-table td.m-info a:focus,
+table.m-table tr.m-info th a:focus, table.m-table th.m-info a:focus,
+.m-note.m-info a:active,
+table.m-table tr.m-info td a:active, table.m-table td.m-info a:active,
+table.m-table tr.m-info th a:active, table.m-table th.m-info a:active {
+ color: #dbeaf7;
+}
+
+.m-note.m-dim,
+table.m-table tr.m-dim td, table.m-table td.m-dim,
+table.m-table tr.m-dim th, table.m-table th.m-dim {
+ background-color: #f1f1f1;
+ color: #7c7c7c;
+}
+
+.m-note.m-dim a,
+table.m-table tr.m-dim td a, table.m-table td.m-dim a,
+table.m-table tr.m-dim th a, table.m-table th.m-dim a {
+ color: #c0c0c0;
+}
+
+.m-note.m-dim a:hover,
+table.m-table tr.m-dim td a:hover, table.m-table td.m-dim a:hover,
+table.m-table tr.m-dim th a:hover, table.m-table th.m-dim a:hover,
+.m-note.m-dim a:focus,
+table.m-table tr.m-dim td a:focus, table.m-table td.m-dim a:focus,
+table.m-table tr.m-dim th a:focus, table.m-table th.m-dim a:focus,
+.m-note.m-dim a:active,
+table.m-table tr.m-dim td a:active, table.m-table td.m-dim a:active,
+table.m-table tr.m-dim th a:active, table.m-table th.m-dim a:active {
+ color: #949494;
+}
+
+figure.m-figure.m-default:before {
+ border-color: #f2f7fa;
+}
+
+figure.m-figure.m-default figcaption {
+ color: #000000;
+}
+
+figure.m-figure.m-primary:before {
+ border-color: #ef9069;
+}
+
+figure.m-figure.m-primary figcaption {
+ color: #205275;
+}
+
+figure.m-figure.m-success:before {
+ border-color: #4dd376;
+}
+
+figure.m-figure.m-success figcaption {
+ color: #31c25d;
+}
+
+figure.m-figure.m-warning:before {
+ border-color: #d19600;
+}
+
+figure.m-figure.m-warning figcaption {
+ color: #d19600;
+}
+
+figure.m-figure.m-danger:before {
+ border-color: #e23e3e;
+}
+
+figure.m-figure.m-danger figcaption {
+ color: #f60000;
+}
+
+figure.m-figure.m-info:before {
+ border-color: #4c93d3;
+}
+
+figure.m-figure.m-info figcaption {
+ color: #2e7dc5;
+}
+
+figure.m-figure.m-dim:before {
+ border-color: #f1f1f1;
+}
+
+figure.m-figure.m-dim {
+ color: #bdbdbd;
+}
+
+figure.m-figure.m-dim a {
+ color: #c0c0c0;
+}
+
+figure.m-figure.m-dim a:hover, figure.m-figure.m-dim a:focus, figure.m-figure.m-dim a:active {
+ color: #949494;
+}
+
+.m-math {
+ fill: #000000;
+}
+
+.m-math.m-default, .m-math g.m-default, .m-math rect.m-default,
+div.m-plot svg .m-bar.m-default,
+.m-graph g.m-edge polygon,
+.m-graph g.m-node:not(.m-flat) ellipse,
+.m-graph g.m-node:not(.m-flat) polygon,
+.m-graph g.m-edge text,
+.m-graph g.m-node.m-flat text,
+.m-graph.m-default g.m-edge polygon,
+.m-graph.m-default g.m-node:not(.m-flat) ellipse,
+.m-graph.m-default g.m-node:not(.m-flat) polygon,
+.m-graph.m-default g.m-edge text,
+.m-graph.m-default g.m-node.m-flat text {
+ fill: #000000;
+}
+
.m-graph g.m-edge polygon,
.m-graph g.m-edge path,
.m-graph g.m-node ellipse,
@@ -1528,1087 +2445,1668 @@ div.m-plot svg .m-bar.m-default,
.m-graph.m-default g.m-node ellipse,
.m-graph.m-default g.m-node polygon,
.m-graph.m-default g.m-node polyline {
- stroke: #000000;
+ stroke: #000000;
+}
+
+.m-math.m-primary, .m-math g.m-primary, .m-math rect.m-primary,
+div.m-plot svg .m-bar.m-primary,
+.m-graph.m-primary g.m-edge polygon,
+.m-graph.m-primary g.m-node:not(.m-flat) ellipse,
+.m-graph.m-primary g.m-node:not(.m-flat) polygon,
+.m-graph.m-primary g.m-edge text,
+.m-graph.m-primary g.m-node.m-flat text {
+ fill: #205275;
+}
+
+.m-graph.m-primary g.m-edge polygon,
+.m-graph.m-primary g.m-edge path,
+.m-graph.m-primary g.m-node ellipse,
+.m-graph.m-primary g.m-node polygon,
+.m-graph.m-primary g.m-node polyline {
+ stroke: #205275;
+}
+
+.m-math.m-success, .m-math g.m-success, .m-math rect.m-success,
+div.m-plot svg .m-bar.m-success,
+.m-graph.m-success g.m-edge polygon,
+.m-graph.m-success g.m-node:not(.m-flat) ellipse,
+.m-graph.m-success g.m-node:not(.m-flat) polygon,
+.m-graph.m-success g.m-edge text,
+.m-graph.m-success g.m-node.m-flat text {
+ fill: #31c25d;
+}
+
+.m-graph.m-success g.m-edge polygon,
+.m-graph.m-success g.m-edge path,
+.m-graph.m-success g.m-node ellipse,
+.m-graph.m-success g.m-node polygon,
+.m-graph.m-success g.m-node polyline {
+ stroke: #31c25d;
+}
+
+.m-math.m-warning, .m-math g.m-warning, .m-math rect.m-warning,
+div.m-plot svg .m-bar.m-warning,
+.m-graph.m-warning g.m-edge polygon,
+.m-graph.m-warning g.m-node:not(.m-flat) ellipse,
+.m-graph.m-warning g.m-node:not(.m-flat) polygon,
+.m-graph.m-warning g.m-edge text,
+.m-graph.m-warning g.m-node.m-flat text {
+ fill: #d19600;
+}
+
+.m-graph.m-warning g.m-edge polygon,
+.m-graph.m-warning g.m-edge path,
+.m-graph.m-warning g.m-node ellipse,
+.m-graph.m-warning g.m-node polygon,
+.m-graph.m-warning g.m-node polyline {
+ stroke: #d19600;
+}
+
+.m-math.m-danger, .m-math g.m-danger, .m-math rect.m-danger,
+div.m-plot svg .m-bar.m-danger,
+.m-graph.m-danger g.m-edge polygon,
+.m-graph.m-danger g.m-node:not(.m-flat) ellipse,
+.m-graph.m-danger g.m-node:not(.m-flat) polygon,
+.m-graph.m-danger g.m-edge text,
+.m-graph.m-danger g.m-node.m-flat text {
+ fill: #f60000;
+}
+
+.m-graph.m-danger g.m-edge polygon,
+.m-graph.m-danger g.m-edge path,
+.m-graph.m-danger g.m-node ellipse,
+.m-graph.m-danger g.m-node polygon,
+.m-graph.m-danger g.m-node polyline {
+ stroke: #f60000;
+}
+
+.m-math.m-info, .m-math g.m-info, .m-math rect.m-info,
+div.m-plot svg .m-bar.m-info,
+.m-graph.m-info g.m-edge polygon,
+.m-graph.m-info g.m-node:not(.m-flat) ellipse,
+.m-graph.m-info g.m-node:not(.m-flat) polygon,
+.m-graph.m-info g.m-edge text,
+.m-graph.m-info g.m-node.m-flat text {
+ fill: #2e7dc5;
+}
+
+.m-graph.m-info g.m-edge polygon,
+.m-graph.m-info g.m-edge path,
+.m-graph.m-info g.m-node ellipse,
+.m-graph.m-info g.m-node polygon,
+.m-graph.m-info g.m-node polyline {
+ stroke: #2e7dc5;
+}
+
+.m-math.m-dim, .m-math g.m-dim, .m-math rect.m-dim,
+div.m-plot svg .m-bar.m-dim,
+.m-graph.m-dim g.m-edge polygon,
+.m-graph.m-dim g.m-node:not(.m-flat) ellipse,
+.m-graph.m-dim g.m-node:not(.m-flat) polygon,
+.m-graph.m-dim g.m-edge text,
+.m-graph.m-dim g.m-node.m-flat text {
+ fill: #bdbdbd;
+}
+
+.m-graph.m-dim g.m-edge polygon,
+.m-graph.m-dim g.m-edge path,
+.m-graph.m-dim g.m-node ellipse,
+.m-graph.m-dim g.m-node polygon,
+.m-graph.m-dim g.m-node polyline {
+ stroke: #bdbdbd;
+}
+
+.m-graph g.m-edge.m-default polygon,
+.m-graph g.m-node.m-default:not(.m-flat) ellipse,
+.m-graph g.m-node.m-default:not(.m-flat) polygon,
+.m-graph g.m-edge.m-default text,
+.m-graph g.m-node.m-default.m-flat text {
+ fill: #000000;
+}
+
+.m-graph g.m-edge.m-default polygon,
+.m-graph g.m-edge.m-default path,
+.m-graph g.m-node.m-default ellipse,
+.m-graph g.m-node.m-default polygon,
+.m-graph g.m-node.m-default polyline {
+ stroke: #000000;
+}
+
+.m-graph g.m-edge.m-primary polygon,
+.m-graph g.m-node.m-primary:not(.m-flat) ellipse,
+.m-graph g.m-node.m-primary:not(.m-flat) polygon,
+.m-graph g.m-edge.m-primary text,
+.m-graph g.m-node.m-primary.m-flat text {
+ fill: #205275;
+}
+
+.m-graph g.m-edge.m-primary polygon,
+.m-graph g.m-edge.m-primary path,
+.m-graph g.m-node.m-primary ellipse,
+.m-graph g.m-node.m-primary polygon,
+.m-graph g.m-node.m-primary polyline {
+ stroke: #205275;
+}
+
+.m-graph g.m-edge.m-success polygon,
+.m-graph g.m-node.m-success:not(.m-flat) ellipse,
+.m-graph g.m-node.m-success:not(.m-flat) polygon,
+.m-graph g.m-edge.m-success text,
+.m-graph g.m-node.m-success.m-flat text {
+ fill: #31c25d;
+}
+
+.m-graph g.m-edge.m-success polygon,
+.m-graph g.m-edge.m-success path,
+.m-graph g.m-node.m-success ellipse,
+.m-graph g.m-node.m-success polygon,
+.m-graph g.m-node.m-success polyline {
+ stroke: #31c25d;
+}
+
+.m-graph g.m-edge.m-warning polygon,
+.m-graph g.m-node.m-warning:not(.m-flat) ellipse,
+.m-graph g.m-node.m-warning:not(.m-flat) polygon,
+.m-graph g.m-edge.m-warning text,
+.m-graph g.m-node.m-warning.m-flat text {
+ fill: #d19600;
+}
+
+.m-graph g.m-edge.m-warning polygon,
+.m-graph g.m-edge.m-warning path,
+.m-graph g.m-node.m-warning ellipse,
+.m-graph g.m-node.m-warning polygon,
+.m-graph g.m-node.m-warning polyline {
+ stroke: #d19600;
+}
+
+.m-graph g.m-edge.m-danger polygon,
+.m-graph g.m-node.m-danger:not(.m-flat) ellipse,
+.m-graph g.m-node.m-danger:not(.m-flat) polygon,
+.m-graph g.m-edge.m-danger text,
+.m-graph g.m-node.m-danger.m-flat text {
+ fill: #f60000;
+}
+
+.m-graph g.m-edge.m-danger polygon,
+.m-graph g.m-edge.m-danger path,
+.m-graph g.m-node.m-danger ellipse,
+.m-graph g.m-node.m-danger polygon,
+.m-graph g.m-node.m-danger polyline {
+ stroke: #f60000;
+}
+
+.m-graph g.m-edge.m-info polygon,
+.m-graph g.m-node.m-info:not(.m-flat) ellipse,
+.m-graph g.m-node.m-info:not(.m-flat) polygon,
+.m-graph g.m-edge.m-info text,
+.m-graph g.m-node.m-info.m-flat text {
+ fill: #2e7dc5;
+}
+
+.m-graph g.m-edge.m-info polygon,
+.m-graph g.m-edge.m-info path,
+.m-graph g.m-node.m-info ellipse,
+.m-graph g.m-node.m-info polygon,
+.m-graph g.m-node.m-info polyline {
+ stroke: #2e7dc5;
+}
+
+.m-graph g.m-edge.m-dim polygon,
+.m-graph g.m-node.m-dim:not(.m-flat) ellipse,
+.m-graph g.m-node.m-dim:not(.m-flat) polygon,
+.m-graph g.m-edge.m-dim text,
+.m-graph g.m-node.m-dim.m-flat text {
+ fill: #bdbdbd;
+}
+
+.m-graph g.m-edge.m-dim polygon,
+.m-graph g.m-edge.m-dim path,
+.m-graph g.m-node.m-dim ellipse,
+.m-graph g.m-node.m-dim polygon,
+.m-graph g.m-node.m-dim polyline {
+ stroke: #bdbdbd;
+}
+
+p, ul, ol, dl, blockquote, pre, .m-code-figure, .m-console-figure, hr, .m-note,
+.m-frame, .m-block, div.m-button, div.m-scroll, table.m-table, div.m-image,
+img.m-image, svg.m-image, figure.m-figure, .m-imagegrid, div.m-math,
+div.m-graph, div.m-plot {
+ margin-bottom: 1rem;
+}
+
+p:last-child, p.m-nopadb, ul:last-child, ul.m-nopadb,
+ol:last-child, ol.m-nopadb, dl:last-child, dl.m-nopadb,
+blockquote:last-child, blockquote.m-nopadb, pre:last-child, pre.m-nopadb,
+.m-code-figure:last-child, .m-code-figure.m-nopadb,
+.m-console-figure:last-child, .m-console-figure.m-nopadb,
+hr:last-child, hr.m-nopadb, .m-note:last-child, .m-note.m-nopadb,
+.m-frame:last-child, .m-frame.m-nopadb, .m-block:last-child, .m-block.m-nopadb,
+div.m-button:last-child, div.m-button.m-nopadb,
+div.m-scroll:last-child, div.m-scroll.m-nopadb,
+table.m-table:last-child, table.m-table.m-nopadb,
+img.m-image:last-child, img.m-image.m-nopadb,
+svg.m-image:last-child, svg.m-image.m-nopadb,
+div.m-image:last-child, div.m-image.m-nopadb,
+figure.m-figure:last-child, figure.m-figure.m-nopadb,
+.m-imagegrid:last-child, .m-imagegrid.m-nopadb,
+div.m-math:last-child, div.m-math.m-nopadb,
+div.m-graph:last-child, div.m-graph.m-nopadb,
+div.m-plot:last-child, div.m-plot.m-nopadb {
+ margin-bottom: 0;
+}
+
+li > p:last-child, li > blockquote:last-child, li > pre:last-child,
+li > .m-code-figure:last-child, li > .m-console-figure:last-child,
+li > .m-note:last-child, li > .m-frame:last-child, li > .m-block:last-child,
+li > div.m-button:last-child, li > div.m-scroll:last-child, li > table.m-table:last-child,
+li > img.m-image:last-child, li > svg.m-image:last-child, li > div.m-image:last-child,
+li > figure.m-figure:last-child, li > div.m-math:last-child,
+li > div.m-graph:last-child, li > div.m-plot:last-child {
+ margin-bottom: 1rem;
+}
+
+li:last-child > p:last-child, li:last-child > p.m-nopadb,
+li:last-child > blockquote:last-child, li:last-child > blockquote.m-nopadb,
+li:last-child > pre:last-child, li:last-child > pre.m-nopadb,
+li:last-child > .m-code-figure:last-child, li:last-child > .m-code-figure.m-nopadb,
+li:last-child > .m-console-figure:last-child, li:last-child > .m-console-figure.m-nopadb,
+li:last-child > .m-note:last-child, li:last-child > .m-note.m-nopadb,
+li:last-child > .m-frame:last-child, li:last-child > .m-frame.m-nopadb,
+li:last-child > .m-block:last-child, li:last-child > .m-block.m-nopadb,
+li:last-child > div.m-button:last-child, li:last-child > div.m-button.m-nopadb,
+li:last-child > div.m-scroll:last-child, li:last-child > div.m-scroll.m-nopadb,
+li:last-child > table.m-table:last-child, li:last-child > table.m-table.m-nopadb,
+li:last-child > img.m-image:last-child, li:last-child > img.m-image.m-nopadb,
+li:last-child > svg.m-image:last-child, li:last-child > svg.m-image.m-nopadb,
+li:last-child > div.m-image:last-child, li:last-child > div.m-image.m-nopadb,
+li:last-child > figure.m-figure:last-child, li:last-child > figure.m-figure.m-nopadb,
+li:last-child > div.m-math:last-child, li:last-child > div.m-math.m-nopadb,
+li:last-child > div.m-graph:last-child, li:last-child > div.m-graph.m-nopadb,
+li:last-child > div.m-plot:last-child, li:last-child > div.m-plot.m-nopadb {
+ margin-bottom: 0;
+}
+
+body > header > nav {
+ width: 100%;
+ background-color: #ffffff;
+ min-height: 3rem;
+}
+
+body > header > nav.m-navbar-landing,
+body > header > nav.m-navbar-cover {
+ background-color: transparent;
+ position: relative;
+}
+
+body > header > nav.m-navbar-landing {
+ opacity: 0.8;
+}
+
+body > header > nav.m-navbar-cover {
+ background-color: rgba(255, 255, 255, 0.25);
+ opacity: 1;
+}
+
+body > header > nav.m-navbar-landing:hover,
+body > header > nav.m-navbar-cover:hover {
+ background-color: rgba(255, 255, 255, 0.75);
+ opacity: 1;
+}
+
+body > header > nav.m-navbar-landing:target,
+body > header > nav.m-navbar-cover:target {
+ background-color: #ffffff;
+ opacity: 1;
+}
+
+body > header > nav.m-navbar-landing #m-navbar-brand.m-navbar-brand-hidden {
+ visibility: hidden;
+}
+
+body > header > nav.m-navbar-landing:target #m-navbar-brand.m-navbar-brand-hidden {
+ visibility: visible;
+}
+
+body > header > nav {
+ margin-left: auto;
+ margin-right: auto;
+ color: #000000;
+}
+
+body > header > nav a {
+ text-decoration: none;
+ text-transform: lowercase;
+ display: inline-block;
+ vertical-align: middle;
+ line-height: 2.75rem;
+ color: #000000;
+}
+
+body > header > nav #m-navbar-brand, body > header > nav a#m-navbar-show, body > header > nav a#m-navbar-hide {
+ font-weight: normal;
+ font-size: 1.125rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+body > header > nav a#m-navbar-brand, body > header > nav #m-navbar-brand a {
+ text-transform: lowercase;
+}
+
+body > header > nav a#m-navbar-brand img, body > header > nav #m-navbar-brand a img {
+ width: 1.75rem;
+ height: 1.75rem;
+ vertical-align: -22.5%;
+ margin-right: 0.5rem;
+}
+
+body > header > nav #m-navbar-brand a {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+body > header > nav #m-navbar-brand .m-thin {
+ font-weight: normal;
+}
+
+body > header > nav #m-navbar-brand .m-breadcrumb {
+ color: #bdbdbd;
+}
+
+body > header > nav a#m-navbar-show:before, body > header > nav a#m-navbar-hide:before {
+ content: '\2630';
+}
+
+body > header > nav #m-navbar-collapse {
+ padding-bottom: 1rem;
+}
+
+body > header > nav #m-navbar-collapse li {
+ border-style: solid;
+ border-color: transparent;
+ border-width: 0 0 0 0.25rem;
+ margin-left: -1rem;
+}
+
+body > header > nav #m-navbar-collapse li a {
+ border-style: solid;
+ border-color: transparent;
+ line-height: 1.5rem;
+ margin-left: -0.25rem;
+ padding-left: 0.75rem;
+ border-width: 0 0 0 0.25rem;
+ width: 100%;
+}
+
+body > header > nav #m-navbar-collapse li a#m-navbar-current {
+ color: #2f73a3;
+ border-color: #2f73a3;
+}
+
+body > header > nav ol {
+ list-style-type: none;
+ margin: 0;
+}
+
+body > header > nav ol ol {
+ padding-left: 1.5rem;
+}
+
+body > header > nav .m-row > [class*='m-col-'] {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+body > header > nav a:hover, body > header > nav a:focus, body > header > nav a:active {
+ color: #205275;
+}
+
+body > header > nav #m-navbar-collapse li:hover {
+ border-color: #205275;
+}
+
+body > header > nav #m-navbar-collapse li a:hover,
+body > header > nav #m-navbar-collapse li a:focus,
+body > header > nav #m-navbar-collapse li a:active {
+ border-color: #205275;
+ background-color: rgba(255, 255, 255, 0.5);
+}
+
+body > header > nav.m-navbar-landing #m-navbar-collapse li a:hover,
+body > header > nav.m-navbar-cover #m-navbar-collapse li a:hover,
+body > header > nav.m-navbar-landing #m-navbar-collapse li a:focus,
+body > header > nav.m-navbar-cover #m-navbar-collapse li a:focus,
+body > header > nav.m-navbar-landing #m-navbar-collapse li a:active,
+body > header > nav.m-navbar-cover #m-navbar-collapse li a:active {
+ background-color: var(--header-link-active-background-color-semi);
+}
+
+body > header > nav #m-navbar-hide {
+ display: none;
+}
+
+body > header > nav:target #m-navbar-collapse {
+ display: block;
+}
+
+body > header > nav:target #m-navbar-show {
+ display: none;
+}
+
+body > header > nav:target #m-navbar-hide {
+ display: inline-block;
+}
+
+@media screen and (min-width: 768px) {
+ body > header > nav #m-navbar-show, body > header > nav #m-navbar-hide,
+ body > header > nav:target #m-navbar-show, body > header > nav:target #m-navbar-hide {
+ display: none;
+ }
+
+ body > header > nav #m-navbar-collapse li a {
+ line-height: 2.75rem;
+ }
+
+ body > header > nav a, body > header > nav #m-navbar-collapse li a {
+ margin-left: 0;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ white-space: nowrap;
+ }
+
+ body > header > nav #m-navbar-collapse {
+ padding-bottom: 0;
+ }
+
+ body > header > nav #m-navbar-collapse li ol {
+ background-color: #ffffff;
+ }
+
+ body > header > nav #m-navbar-collapse ol ol li {
+ margin-left: 0;
+ padding-left: 0;
+ border-left-width: 0;
+ }
+
+ body > header > nav #m-navbar-collapse ol ol li a {
+ padding-left: 0.75rem;
+ }
+
+ body > header > nav #m-navbar-collapse > .m-row > ol > li {
+ margin-left: 0;
+ border-left-width: 0;
+ }
+
+ body > header > nav #m-navbar-collapse > .m-row > ol > li > a {
+ border-width: 0.25rem 0 0 0;
+ }
+
+ body > header > nav #m-navbar-collapse ol {
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ body > header > nav #m-navbar-collapse > .m-row > ol, body > header > nav #m-navbar-collapse > .m-row > ol > li {
+ float: left;
+ }
+
+ body > header > nav #m-navbar-collapse ol ol {
+ z-index: 99999;
+ position: absolute;
+ visibility: hidden;
+ }
+
+ body > header > nav #m-navbar-collapse li:hover ol {
+ visibility: visible;
+ }
+}
+
+body > footer {
+ width: 100%;
+}
+
+body > footer > nav {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+ font-size: 0.85rem;
+ text-align: center;
+ color: #7c7c7c;
+ background-color: #eeeeee;
+}
+
+body > footer > nav h3, body > footer > nav h3 a {
+ text-transform: uppercase;
+ font-weight: normal;
+}
+
+body > footer > nav ul {
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+}
+
+body > footer > nav a {
+ text-decoration: none;
+ text-transform: lowercase;
+ color: #191919;
+}
+
+body > footer > nav a:hover, body > footer > nav a:focus, body > footer > nav a:active {
+ color: #494949;
+}
+
+body > main {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+
+article h1 {
+ font-size: 1.75rem;
+}
+
+article h1 .m-breadcrumb {
+ color: #bdbdbd;
+ font-weight: normal;
+}
+
+article h1 .m-breadcrumb a {
+ color: #205275;
+}
+
+article h1 .m-breadcrumb a:hover, article h1 a:focus, article h1 a:active {
+ color: #2e73a3;
+}
+
+article > header h1 {
+ font-size: 2rem;
+ margin-bottom: 0.5rem;
+}
+
+article h1 a, article > header h1, article > header h1 a,
+article section > h2, article section > h2 a,
+article section > h3, article section > h3 a,
+article section > h4, article section > h4 a,
+article section > h5, article section > h5 a,
+article section > h6, article section > h6 a {
+ color: #205275;
+}
+
+article h1 a:hover, article > header h1 a:hover, article > header h1 a:focus, article > header h1 a:active,
+article section > h2 a:hover, article section > h2 a:focus, article section > h2 a:active,
+article section > h3 a:hover, article section > h3 a:focus, article section > h3 a:active,
+article section > h4 a:hover, article section > h4 a:focus, article section > h4 a:active,
+article section > h5 a:hover, article section > h5 a:focus, article section > h5 a:active,
+article section > h6 a:hover, article section > h6 a:focus, article section > h6 a:active {
+ color: #2e73a3;
+}
+
+article > header .m-date {
+ display: block;
+ width: 2.5rem;
+ float: left;
+ text-align: center;
+ line-height: 95%;
+ font-size: 0.75rem;
+ font-weight: normal;
+ white-space: nowrap;
+ border-right-style: solid;
+ border-right-width: 0.125rem;
+ border-color: #205275;
+ padding-right: 0.75rem;
+ margin-top: -0.1rem;
+ margin-right: 0.75rem;
+ margin-bottom: 0.25rem;
+}
+
+article > header .m-date-day {
+ display: block;
+ font-weight: bold;
+ padding-top: 0.2rem;
+ padding-bottom: 0.15rem;
+ font-size: 1.25rem;
+}
+
+article > header p {
+ color: #7a7a7a;
+ font-size: 1.125rem;
+}
+
+article > header h1::after {
+ content: " ";
+ clear: both;
+ display: table;
+}
+
+article > footer {
+ color: #969696;
+}
+
+article > footer p {
+ font-style: italic;
+ font-size: 0.85rem;
+ text-indent: 0;
+}
+
+article section:target {
+ margin-left: -1.0rem;
+ border-left-style: solid;
+ border-left-width: 0.25rem;
+ padding-left: 0.75rem;
+ border-color: #205275;
+}
+
+article h1 a, article > header h1 a, article section > h2 a, article section > h3 a,
+article section > h4 a, article section > h5 a, article section > h6 a {
+ text-decoration: none;
+}
+
+#m-landing-image, #m-cover-image, article#m-jumbo > header #m-jumbo-image {
+ background-size: cover;
+ background-color: #666666;
+ background-position: center center;
+ background-repeat: no-repeat;
+ margin-top: -4rem;
+ padding-top: 5rem;
+}
+
+#m-landing-image {
+ color: #ffffff;
+}
+
+#m-cover-image {
+ height: 30rem;
+ margin-bottom: -26rem;
+}
+
+#m-landing-cover h1 {
+ font-size: 2.8rem;
+ margin-top: -0.5rem;
+ padding-left: 1.5rem;
+ padding-bottom: 1rem;
+ text-transform: lowercase;
+}
+
+#m-landing-cover {
+ padding-bottom: 10rem;
+ margin-bottom: -6rem;
+}
+
+article#m-jumbo {
+ margin-top: -1rem;
+}
+
+#m-landing-cover, #m-cover-image > div, article#m-jumbo > header #m-jumbo-cover {
+ background: linear-gradient(transparent 0%, transparent 50%, #ffffff 100%);
+ width: 100%;
+ height: 100%;
+}
+
+article#m-jumbo > header h1, article#m-jumbo > header h2 {
+ text-align: center;
+ font-weight: bold;
+}
+
+article#m-jumbo > header a {
+ text-decoration: none;
+}
+
+article#m-jumbo > header #m-jumbo-cover {
+ padding-bottom: 5rem;
+}
+
+article#m-jumbo > header #m-jumbo-image {
+ font-size: 2.5vmin;
+ margin-bottom: -3rem;
+}
+
+article#m-jumbo > header h1 {
+ font-size: 10vmin;
+}
+
+article#m-jumbo > header h2 {
+ font-size: 3vmin;
+}
+
+@media screen and (max-height: 640px) , screen and (max-width: 640px) {
+ article#m-jumbo > header h1 {
+ font-size: 3rem;
+ }
+
+ article#m-jumbo > header #m-jumbo-image, article#m-jumbo > header h2 {
+ font-size: 1rem;
+ }
+}
+
+article#m-jumbo > header, article#m-jumbo > header h1, article#m-jumbo > header a {
+ color: #ffffff;
+}
+
+article#m-jumbo > header a:hover, article#m-jumbo > header a:focus, article#m-jumbo > header a:active {
+ color: #f0f0f0;
+}
+
+article#m-jumbo.m-inverted > header, article#m-jumbo.m-inverted > header h1, article#m-jumbo.m-inverted > header a {
+ color: #000000;
+}
+
+article#m-jumbo.m-inverted > header a:hover, article#m-jumbo.m-inverted > header a:focus, article#m-jumbo.m-inverted > header a:active {
+ color: #0f0f0f;
+}
+
+.m-landing-news h3 a {
+ color: #000000;
+ text-decoration: none;
+ text-transform: uppercase;
+}
+
+.m-landing-news h3 a:hover, .m-landing-news h3 a:hover, .m-landing-news h3 a:focus, .m-landing-news h3 a:active {
+ color: #205275;
+}
+
+.m-landing-news time {
+ display: inline-block;
+ margin-left: 1rem;
+ float: right;
+}
+
+.m-article-pagination {
+ text-align: center;
+ padding: 1rem;
+}
+
+nav.m-navpanel {
+ text-align: center;
+}
+
+nav.m-navpanel h3 {
+ text-transform: uppercase;
+ font-weight: normal;
+}
+
+nav.m-navpanel ol {
+ text-transform: lowercase;
+}
+
+nav.m-navpanel ol, nav.m-navpanel ul {
+ list-style-type: none;
+ padding: 0;
+}
+
+nav.m-navpanel a {
+ color: #292929;
+ text-decoration: none;
+}
+
+nav.m-navpanel a:hover, nav.m-navpanel a:focus, nav.m-navpanel a:active {
+ color: #205275;
+}
+
+ul.m-tagcloud li {
+ display: inline;
+}
+
+ul.m-tagcloud li.m-tag-1 {
+ font-size: 0.75rem;
+}
+
+ul.m-tagcloud li.m-tag-2 {
+ font-size: 0.825rem;
+}
+
+ul.m-tagcloud li.m-tag-3 {
+ font-size: 1rem;
+}
+
+ul.m-tagcloud li.m-tag-4 {
+ font-size: 1.25rem;
+}
+
+ul.m-tagcloud li.m-tag-5 {
+ font-size: 1.5rem;
+}
+
+article section:target figure.m-code-figure, article section:target figure.m-console-figure {
+ z-index: 1;
+}
+
+article, article > header, article section {
+ margin-bottom: 1rem;
+}
+
+article:last-child, article section:last-child {
+ margin-bottom: 0;
+}
+
+.m-container-inflatable section:target > .m-note,
+.m-container-inflatable section:target > .m-frame,
+.m-container-inflatable section:target > .m-block,
+.m-container-inflatable section:target > pre,
+.m-container-inflatable section:target > .m-code-figure > pre:first-child,
+.m-container-inflatable section:target > .m-console-figure > pre:first-child,
+.m-container-inflatable section:target section > .m-note,
+.m-container-inflatable section:target section > .m-frame,
+.m-container-inflatable section:target section > .m-block,
+.m-container-inflatable section:target section > pre,
+.m-container-inflatable section:target section > .m-code-figure > pre:first-child,
+.m-container-inflatable section:target section > .m-console-figure > pre:first-child,
+.m-container-inflatable section:target [class*='m-center-'] > .m-note,
+.m-container-inflatable section:target [class*='m-center-'] > .m-frame,
+.m-container-inflatable section:target [class*='m-center-'] > .m-block,
+.m-container-inflatable section:target [class*='m-center-'] > pre,
+.m-container-inflatable section:target [class*='m-center-'] > .m-code-figure > pre:first-child,
+.m-container-inflatable section:target [class*='m-center-'] > .m-console-figure > pre:first-child,
+.m-container-inflatable section:target [class*='m-left-'] > .m-note,
+.m-container-inflatable section:target [class*='m-left-'] > .m-frame,
+.m-container-inflatable section:target [class*='m-left-'] > .m-block,
+.m-container-inflatable section:target [class*='m-left-'] > pre,
+.m-container-inflatable section:target [class*='m-left-'] > .m-code-figure > pre:first-child,
+.m-container-inflatable section:target [class*='m-left-'] > .m-console-figure > pre:first-child,
+.m-container-inflatable section:target [class*='m-right-'] > .m-note,
+.m-container-inflatable section:target [class*='m-right-'] > .m-frame,
+.m-container-inflatable section:target [class*='m-right-'] > .m-block,
+.m-container-inflatable section:target [class*='m-right-'] > pre,
+.m-container-inflatable section:target [class*='m-right-'] > .m-code-figure > pre:first-child,
+.m-container-inflatable section:target [class*='m-right-'] > .m-console-figure > pre:first-child,
+.m-container-inflatable section:target .m-container-inflate > .m-note,
+.m-container-inflatable section:target .m-container-inflate > .m-frame,
+.m-container-inflatable section:target .m-container-inflate > .m-block,
+.m-container-inflatable section:target .m-container-inflate > pre,
+.m-container-inflatable section:target .m-container-inflate > .m-code-figure > pre:first-child,
+.m-container-inflatable section:target .m-container-inflate > .m-console-figure > pre:first-child {
+ margin-left: -1.0rem;
+ border-left-style: solid;
+ border-left-width: 0.25rem;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ padding-left: 0.75rem;
}
-.m-math.m-primary, .m-math g.m-primary, .m-math rect.m-primary,
-div.m-plot svg .m-bar.m-primary,
-.m-graph.m-primary g.m-edge polygon,
-.m-graph.m-primary g.m-node:not(.m-flat) ellipse,
-.m-graph.m-primary g.m-node:not(.m-flat) polygon,
-.m-graph.m-primary g.m-edge text,
-.m-graph.m-primary g.m-node.m-flat text {
- fill: #205275;
+
+.m-container-inflatable section:target > .m-code-figure::before,
+.m-container-inflatable section:target > .m-console-figure::before,
+.m-container-inflatable section:target section > .m-code-figure::before,
+.m-container-inflatable section:target section > .m-console-figure::before,
+.m-container-inflatable section:target [class*='m-center-'] > .m-code-figure::before,
+.m-container-inflatable section:target [class*='m-center-'] > .m-console-figure::before,
+.m-container-inflatable section:target [class*='m-left-'] > .m-code-figure::before,
+.m-container-inflatable section:target [class*='m-left-'] > .m-console-figure::before,
+.m-container-inflatable section:target [class*='m-right-'] > .m-code-figure::before,
+.m-container-inflatable section:target [class*='m-right-'] > .m-console-figure::before,
+.m-container-inflatable section:target .m-container-inflate > .m-code-figure::before,
+.m-container-inflatable section:target .m-container-inflate > .m-console-figure::before {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-left-width: 0.25rem;
}
-.m-graph.m-primary g.m-edge polygon,
-.m-graph.m-primary g.m-edge path,
-.m-graph.m-primary g.m-node ellipse,
-.m-graph.m-primary g.m-node polygon,
-.m-graph.m-primary g.m-node polyline {
- stroke: #205275;
+
+.m-container-inflatable section:target > .m-code-figure > pre.m-nopad,
+.m-container-inflatable section:target > .m-console-figure > pre.m-nopad {
+ margin-left: -0.75rem;
+ padding-left: -0.75rem;
}
-.m-math.m-success, .m-math g.m-success, .m-math rect.m-success,
-div.m-plot svg .m-bar.m-success,
-.m-graph.m-success g.m-edge polygon,
-.m-graph.m-success g.m-node:not(.m-flat) ellipse,
-.m-graph.m-success g.m-node:not(.m-flat) polygon,
-.m-graph.m-success g.m-edge text,
-.m-graph.m-success g.m-node.m-flat text {
- fill: #31c25d;
+
+@media screen and (min-width: 576px) {
+ .m-container-inflatable section:target .m-center-s > .m-note,
+ .m-container-inflatable section:target .m-center-s > pre,
+ .m-container-inflatable section:target .m-center-s > figure.m-code-figure > pre:first-child,
+ .m-container-inflatable section:target .m-center-s > figure.m-console-figure > pre:first-child,
+ .m-container-inflatable section:target .m-right-s > figure.m-code-figure > pre:first-child,
+ .m-container-inflatable section:target .m-right-s > figure.m-console-figure > pre:first-child {
+ border-left-width: 0;
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ padding-left: 1rem;
+ }
+
+ .m-container-inflatable section:target .m-center-s > .m-block,
+ .m-container-inflatable section:target .m-right-s > .m-block {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ }
+
+ .m-container-inflatable section:target .m-center-s > .m-frame,
+ .m-container-inflatable section:target .m-right-s > .m-frame {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ border-left-width: 0.125rem;
+ padding-left: 0.875rem;
+ }
+
+ .m-container-inflatable section:target .m-right-s > .m-block,
+ .m-container-inflatable section:target .m-right-s > .m-frame {
+ margin-left: 0;
+ }
+
+ .m-container-inflatable section:target .m-right-s > .m-note,
+ .m-container-inflatable section:target .m-right-s > pre {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ margin-left: 0;
+ border-left-width: 0;
+ padding-left: 1rem;
+ }
+
+ .m-container-inflatable section:target .m-center-s > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-center-s > figure.m-console-figure::before,
+ .m-container-inflatable section:target .m-right-s > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-right-s > figure.m-console-figure::before {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ border-left-width: 0.125rem;
+ }
}
-.m-graph.m-success g.m-edge polygon,
-.m-graph.m-success g.m-edge path,
-.m-graph.m-success g.m-node ellipse,
-.m-graph.m-success g.m-node polygon,
-.m-graph.m-success g.m-node polyline {
- stroke: #31c25d;
+
+@media screen and (min-width: 768px) {
+ .m-container-inflatable section:target .m-center-m > .m-note,
+ .m-container-inflatable section:target .m-center-m > pre,
+ .m-container-inflatable section:target .m-center-m > figure.m-code-figure > pre:first-child,
+ .m-container-inflatable section:target .m-center-m > figure.m-console-figure > pre:first-child,
+ .m-container-inflatable section:target .m-right-m > figure.m-code-figure > pre:first-child,
+ .m-container-inflatable section:target .m-right-m > figure.m-console-figure > pre:first-child {
+ border-left-width: 0;
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ padding-left: 1rem;
+ }
+
+ .m-container-inflatable section:target .m-center-m > .m-block,
+ .m-container-inflatable section:target .m-right-m > .m-block {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ }
+
+ .m-container-inflatable section:target .m-center-m > .m-frame,
+ .m-container-inflatable section:target .m-right-m > .m-frame {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ border-left-width: 0.125rem;
+ padding-left: 0.875rem;
+ }
+
+ .m-container-inflatable section:target .m-right-m > .m-block,
+ .m-container-inflatable section:target .m-right-m > .m-frame {
+ margin-left: 0;
+ }
+
+ .m-container-inflatable section:target .m-right-m > .m-note,
+ .m-container-inflatable section:target .m-right-m > pre {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ margin-left: 0;
+ border-left-width: 0;
+ padding-left: 1rem;
+ }
+
+ .m-container-inflatable section:target .m-center-m > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-center-m > figure.m-console-figure::before,
+ .m-container-inflatable section:target .m-right-m > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-right-m > figure.m-console-figure::before {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ border-left-width: 0.125rem;
+ }
}
-.m-math.m-warning, .m-math g.m-warning, .m-math rect.m-warning,
-div.m-plot svg .m-bar.m-warning,
-.m-graph.m-warning g.m-edge polygon,
-.m-graph.m-warning g.m-node:not(.m-flat) ellipse,
-.m-graph.m-warning g.m-node:not(.m-flat) polygon,
-.m-graph.m-warning g.m-edge text,
-.m-graph.m-warning g.m-node.m-flat text {
- fill: #d19600;
+
+@media screen and (min-width: 992px) {
+ .m-container-inflatable section:target .m-center-l > .m-note,
+ .m-container-inflatable section:target .m-center-l > pre,
+ .m-container-inflatable section:target .m-center-l > figure.m-code-figure > pre:first-child,
+ .m-container-inflatable section:target .m-center-l > figure.m-console-figure > pre:first-child,
+ .m-container-inflatable section:target .m-right-l > figure.m-code-figure > pre:first-child,
+ .m-container-inflatable section:target .m-right-l > figure.m-console-figure > pre:first-child {
+ border-left-width: 0;
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ padding-left: 1rem;
+ }
+
+ .m-container-inflatable section:target .m-center-l > .m-block,
+ .m-container-inflatable section:target .m-right-l > .m-block {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ }
+
+ .m-container-inflatable section:target .m-center-l > .m-frame,
+ .m-container-inflatable section:target .m-right-l > .m-frame {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ border-left-width: 0.125rem;
+ padding-left: 0.875rem;
+ }
+
+ .m-container-inflatable section:target .m-right-l > .m-block,
+ .m-container-inflatable section:target .m-right-l > .m-frame {
+ margin-left: 0;
+ }
+
+ .m-container-inflatable section:target .m-right-l > .m-note,
+ .m-container-inflatable section:target .m-right-l > pre {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ margin-left: 0;
+ border-left-width: 0;
+ padding-left: 1rem;
+ }
+
+ .m-container-inflatable section:target .m-center-l > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-center-l > figure.m-console-figure::before,
+ .m-container-inflatable section:target .m-right-l > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-right-l > figure.m-console-figure::before {
+ border-top-left-radius: 0.2rem;
+ border-bottom-left-radius: 0.2rem;
+ border-left-width: 0.125rem;
+ }
}
-.m-graph.m-warning g.m-edge polygon,
-.m-graph.m-warning g.m-edge path,
-.m-graph.m-warning g.m-node ellipse,
-.m-graph.m-warning g.m-node polygon,
-.m-graph.m-warning g.m-node polyline {
- stroke: #d19600;
+
+.m-container-inflatable section:target > figure.m-code-figure::before,
+.m-container-inflatable section:target > figure.m-console-figure::before,
+.m-container-inflatable section:target section > figure.m-code-figure::before,
+.m-container-inflatable section:target section > figure.m-console-figure::before,
+.m-container-inflatable section:target [class*='m-center-'] > figure.m-code-figure::before,
+.m-container-inflatable section:target [class*='m-center-'] > figure.m-console-figure::before,
+.m-container-inflatable section:target [class*='m-left-'] > figure.m-code-figure::before,
+.m-container-inflatable section:target [class*='m-left-'] > figure.m-console-figure::before,
+.m-container-inflatable section:target [class*='m-right-'] > figure.m-code-figure::before,
+.m-container-inflatable section:target [class*='m-right-'] > figure.m-console-figure::before,
+.m-container-inflatable section:target .m-container-inflatable > figure.m-code-figure::before,
+.m-container-inflatable section:target .m-container-inflatable > figure.m-console-figure::before {
+ border-left-color: #c7cfd9;
}
-.m-math.m-danger, .m-math g.m-danger, .m-math rect.m-danger,
-div.m-plot svg .m-bar.m-danger,
-.m-graph.m-danger g.m-edge polygon,
-.m-graph.m-danger g.m-node:not(.m-flat) ellipse,
-.m-graph.m-danger g.m-node:not(.m-flat) polygon,
-.m-graph.m-danger g.m-edge text,
-.m-graph.m-danger g.m-node.m-flat text {
- fill: #f60000;
+
+@media screen and (min-width: 576px) {
+ .m-container-inflatable section:target .m-center-s > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-right-s > figure.m-code-figure::before {
+ border-color: #f2f7fa;
+ }
+
+ .m-container-inflatable section:target .m-center-s > figure.m-console-figure::before,
+ .m-container-inflatable section:target .m-right-s > figure.m-console-figure::before {
+ border-color: #000000;
+ }
}
-.m-graph.m-danger g.m-edge polygon,
-.m-graph.m-danger g.m-edge path,
-.m-graph.m-danger g.m-node ellipse,
-.m-graph.m-danger g.m-node polygon,
-.m-graph.m-danger g.m-node polyline {
- stroke: #f60000;
+
+@media screen and (min-width: 768px) {
+ .m-container-inflatable section:target .m-center-m > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-right-m > figure.m-code-figure::before {
+ border-color: #f2f7fa;
+ }
+
+ .m-container-inflatable section:target .m-center-m > figure.m-console-figure::before,
+ .m-container-inflatable section:target .m-right-m > figure.m-console-figure::before {
+ border-color: #000000;
+ }
}
-.m-math.m-info, .m-math g.m-info, .m-math rect.m-info,
-div.m-plot svg .m-bar.m-info,
-.m-graph.m-info g.m-edge polygon,
-.m-graph.m-info g.m-node:not(.m-flat) ellipse,
-.m-graph.m-info g.m-node:not(.m-flat) polygon,
-.m-graph.m-info g.m-edge text,
-.m-graph.m-info g.m-node.m-flat text {
- fill: #2e7dc5;
+
+@media screen and (min-width: 992px) {
+ .m-container-inflatable section:target .m-center-l > figure.m-code-figure::before,
+ .m-container-inflatable section:target .m-right-l > figure.m-code-figure::before {
+ border-color: #f2f7fa;
+ }
+
+ .m-container-inflatable section:target .m-center-l > figure.m-console-figure::before,
+ .m-container-inflatable section:target .m-right-l > figure.m-console-figure::before {
+ border-color: #000000;
+ }
}
-.m-graph.m-info g.m-edge polygon,
-.m-graph.m-info g.m-edge path,
-.m-graph.m-info g.m-node ellipse,
-.m-graph.m-info g.m-node polygon,
-.m-graph.m-info g.m-node polyline {
- stroke: #2e7dc5;
+
+.m-container-inflatable section:target pre,
+.m-container-inflatable section:target figure.m-code-figure > pre:first-child,
+.m-container-inflatable section:target figure.m-console-figure > pre:first-child {
+ border-color: #c7cfd9;
}
-.m-math.m-dim, .m-math g.m-dim, .m-math rect.m-dim,
-div.m-plot svg .m-bar.m-dim,
-.m-graph.m-dim g.m-edge polygon,
-.m-graph.m-dim g.m-node:not(.m-flat) ellipse,
-.m-graph.m-dim g.m-node:not(.m-flat) polygon,
-.m-graph.m-dim g.m-edge text,
-.m-graph.m-dim g.m-node.m-flat text {
- fill: #bdbdbd;
+
+.m-container-inflatable section:target .m-note.m-default {
+ border-color: #c7cfd9;
}
-.m-graph.m-dim g.m-edge polygon,
-.m-graph.m-dim g.m-edge path,
-.m-graph.m-dim g.m-node ellipse,
-.m-graph.m-dim g.m-node polygon,
-.m-graph.m-dim g.m-node polyline {
- stroke: #bdbdbd;
+
+.m-container-inflatable section:target .m-note.m-primary {
+ border-color: #205275;
}
-.m-graph g.m-edge.m-default polygon,
-.m-graph g.m-node.m-default:not(.m-flat) ellipse,
-.m-graph g.m-node.m-default:not(.m-flat) polygon,
-.m-graph g.m-edge.m-default text,
-.m-graph g.m-node.m-default.m-flat text {
- fill: #000000;
+
+.m-container-inflatable section:target .m-note.m-success {
+ border-color: #31c25d;
}
-.m-graph g.m-edge.m-default polygon,
-.m-graph g.m-edge.m-default path,
-.m-graph g.m-node.m-default ellipse,
-.m-graph g.m-node.m-default polygon,
-.m-graph g.m-node.m-default polyline {
- stroke: #000000;
+
+.m-container-inflatable section:target .m-note.m-warning {
+ border-color: #d19600;
}
-.m-graph g.m-edge.m-primary polygon,
-.m-graph g.m-node.m-primary:not(.m-flat) ellipse,
-.m-graph g.m-node.m-primary:not(.m-flat) polygon,
-.m-graph g.m-edge.m-primary text,
-.m-graph g.m-node.m-primary.m-flat text {
- fill: #205275;
+
+.m-container-inflatable section:target .m-note.m-danger {
+ border-color: #f60000;
}
-.m-graph g.m-edge.m-primary polygon,
-.m-graph g.m-edge.m-primary path,
-.m-graph g.m-node.m-primary ellipse,
-.m-graph g.m-node.m-primary polygon,
-.m-graph g.m-node.m-primary polyline {
- stroke: #205275;
+
+.m-container-inflatable section:target .m-note.m-info {
+ border-color: #2e7dc5;
}
-.m-graph g.m-edge.m-success polygon,
-.m-graph g.m-node.m-success:not(.m-flat) ellipse,
-.m-graph g.m-node.m-success:not(.m-flat) polygon,
-.m-graph g.m-edge.m-success text,
-.m-graph g.m-node.m-success.m-flat text {
- fill: #31c25d;
+
+.m-container-inflatable section:target .m-note.m-dim {
+ border-color: #bdbdbd;
}
-.m-graph g.m-edge.m-success polygon,
-.m-graph g.m-edge.m-success path,
-.m-graph g.m-node.m-success ellipse,
-.m-graph g.m-node.m-success polygon,
-.m-graph g.m-node.m-success polyline {
- stroke: #31c25d;
+
+.m-code .hll {
+ background-color: #ffffcc
}
-.m-graph g.m-edge.m-warning polygon,
-.m-graph g.m-node.m-warning:not(.m-flat) ellipse,
-.m-graph g.m-node.m-warning:not(.m-flat) polygon,
-.m-graph g.m-edge.m-warning text,
-.m-graph g.m-node.m-warning.m-flat text {
- fill: #d19600;
+
+.m-code {
+ background: #f8f8f8;
}
-.m-graph g.m-edge.m-warning polygon,
-.m-graph g.m-edge.m-warning path,
-.m-graph g.m-node.m-warning ellipse,
-.m-graph g.m-node.m-warning polygon,
-.m-graph g.m-node.m-warning polyline {
- stroke: #d19600;
+
+.m-code .c {
+ color: #8f5902;
+ font-style: italic
}
-.m-graph g.m-edge.m-danger polygon,
-.m-graph g.m-node.m-danger:not(.m-flat) ellipse,
-.m-graph g.m-node.m-danger:not(.m-flat) polygon,
-.m-graph g.m-edge.m-danger text,
-.m-graph g.m-node.m-danger.m-flat text {
- fill: #f60000;
+
+.m-code .err {
+ color: #a40000;
+ border: 1px solid #ef2929
}
-.m-graph g.m-edge.m-danger polygon,
-.m-graph g.m-edge.m-danger path,
-.m-graph g.m-node.m-danger ellipse,
-.m-graph g.m-node.m-danger polygon,
-.m-graph g.m-node.m-danger polyline {
- stroke: #f60000;
+
+.m-code .g {
+ color: #000000
}
-.m-graph g.m-edge.m-info polygon,
-.m-graph g.m-node.m-info:not(.m-flat) ellipse,
-.m-graph g.m-node.m-info:not(.m-flat) polygon,
-.m-graph g.m-edge.m-info text,
-.m-graph g.m-node.m-info.m-flat text {
- fill: #2e7dc5;
+
+.m-code .k {
+ color: #204a87;
+ font-weight: bold
}
-.m-graph g.m-edge.m-info polygon,
-.m-graph g.m-edge.m-info path,
-.m-graph g.m-node.m-info ellipse,
-.m-graph g.m-node.m-info polygon,
-.m-graph g.m-node.m-info polyline {
- stroke: #2e7dc5;
+
+.m-code .l {
+ color: #000000
}
-.m-graph g.m-edge.m-dim polygon,
-.m-graph g.m-node.m-dim:not(.m-flat) ellipse,
-.m-graph g.m-node.m-dim:not(.m-flat) polygon,
-.m-graph g.m-edge.m-dim text,
-.m-graph g.m-node.m-dim.m-flat text {
- fill: #bdbdbd;
+
+.m-code .n {
+ color: #000000
+}
+
+.m-code .o {
+ color: #ce5c00;
+ font-weight: bold
+}
+
+.m-code .x {
+ color: #000000
+}
+
+.m-code .p {
+ color: #000000;
+ font-weight: bold
}
-.m-graph g.m-edge.m-dim polygon,
-.m-graph g.m-edge.m-dim path,
-.m-graph g.m-node.m-dim ellipse,
-.m-graph g.m-node.m-dim polygon,
-.m-graph g.m-node.m-dim polyline {
- stroke: #bdbdbd;
+
+.m-code .ch {
+ color: #8f5902;
+ font-style: italic
}
-p, ul, ol, dl, blockquote, pre, .m-code-figure, .m-console-figure, hr, .m-note,
-.m-frame, .m-block, div.m-button, div.m-scroll, table.m-table, div.m-image,
-img.m-image, svg.m-image, figure.m-figure, .m-imagegrid, div.m-math,
-div.m-graph, div.m-plot {
- margin-bottom: 1rem;
+
+.m-code .cm {
+ color: #8f5902;
+ font-style: italic
}
-p:last-child, p.m-nopadb, ul:last-child, ul.m-nopadb,
-ol:last-child, ol.m-nopadb, dl:last-child, dl.m-nopadb,
-blockquote:last-child, blockquote.m-nopadb, pre:last-child, pre.m-nopadb,
-.m-code-figure:last-child, .m-code-figure.m-nopadb,
-.m-console-figure:last-child, .m-console-figure.m-nopadb,
-hr:last-child, hr.m-nopadb, .m-note:last-child, .m-note.m-nopadb,
-.m-frame:last-child, .m-frame.m-nopadb, .m-block:last-child, .m-block.m-nopadb,
-div.m-button:last-child, div.m-button.m-nopadb,
-div.m-scroll:last-child, div.m-scroll.m-nopadb,
-table.m-table:last-child, table.m-table.m-nopadb,
-img.m-image:last-child, img.m-image.m-nopadb,
-svg.m-image:last-child, svg.m-image.m-nopadb,
-div.m-image:last-child, div.m-image.m-nopadb,
-figure.m-figure:last-child, figure.m-figure.m-nopadb,
-.m-imagegrid:last-child, .m-imagegrid.m-nopadb,
-div.m-math:last-child, div.m-math.m-nopadb,
-div.m-graph:last-child, div.m-graph.m-nopadb,
-div.m-plot:last-child, div.m-plot.m-nopadb {
- margin-bottom: 0;
+
+.m-code .cp {
+ color: #8f5902;
+ font-style: italic
}
-li > p:last-child, li > blockquote:last-child, li > pre:last-child,
-li > .m-code-figure:last-child, li > .m-console-figure:last-child,
-li > .m-note:last-child, li > .m-frame:last-child, li > .m-block:last-child,
-li > div.m-button:last-child, li > div.m-scroll:last-child, li > table.m-table:last-child,
-li > img.m-image:last-child, li > svg.m-image:last-child, li > div.m-image:last-child,
-li > figure.m-figure:last-child, li > div.m-math:last-child,
-li > div.m-graph:last-child, li > div.m-plot:last-child {
- margin-bottom: 1rem;
+
+.m-code .cpf {
+ color: #8f5902;
+ font-style: italic
}
-li:last-child > p:last-child, li:last-child > p.m-nopadb,
-li:last-child > blockquote:last-child, li:last-child > blockquote.m-nopadb,
-li:last-child > pre:last-child, li:last-child > pre.m-nopadb,
-li:last-child > .m-code-figure:last-child, li:last-child > .m-code-figure.m-nopadb,
-li:last-child > .m-console-figure:last-child, li:last-child > .m-console-figure.m-nopadb,
-li:last-child > .m-note:last-child, li:last-child > .m-note.m-nopadb,
-li:last-child > .m-frame:last-child, li:last-child > .m-frame.m-nopadb,
-li:last-child > .m-block:last-child, li:last-child > .m-block.m-nopadb,
-li:last-child > div.m-button:last-child, li:last-child > div.m-button.m-nopadb,
-li:last-child > div.m-scroll:last-child, li:last-child > div.m-scroll.m-nopadb,
-li:last-child > table.m-table:last-child, li:last-child > table.m-table.m-nopadb,
-li:last-child > img.m-image:last-child, li:last-child > img.m-image.m-nopadb,
-li:last-child > svg.m-image:last-child, li:last-child > svg.m-image.m-nopadb,
-li:last-child > div.m-image:last-child, li:last-child > div.m-image.m-nopadb,
-li:last-child > figure.m-figure:last-child, li:last-child > figure.m-figure.m-nopadb,
-li:last-child > div.m-math:last-child, li:last-child > div.m-math.m-nopadb,
-li:last-child > div.m-graph:last-child, li:last-child > div.m-graph.m-nopadb,
-li:last-child > div.m-plot:last-child, li:last-child > div.m-plot.m-nopadb {
- margin-bottom: 0;
+
+.m-code .c1 {
+ color: #8f5902;
+ font-style: italic
}
-body > header > nav {
- width: 100%;
- background-color: #ffffff;
- min-height: 3rem;
+.m-code .cs {
+ color: #8f5902;
+ font-style: italic
}
-body > header > nav.m-navbar-landing,
-body > header > nav.m-navbar-cover {
- background-color: transparent;
- position: relative;
+
+.m-code .gd {
+ color: #a40000
}
-body > header > nav.m-navbar-landing {
- opacity: 0.8;
+
+.m-code .ge {
+ color: #000000;
+ font-style: italic
}
-body > header > nav.m-navbar-cover {
- background-color: rgba(255, 255, 255, 0.25);
- opacity: 1;
+
+.m-code .gr {
+ color: #ef2929
}
-body > header > nav.m-navbar-landing:hover,
-body > header > nav.m-navbar-cover:hover {
- background-color: rgba(255, 255, 255, 0.75);
- opacity: 1;
+
+.m-code .gh {
+ color: #000080;
+ font-weight: bold
}
-body> header > nav.m-navbar-landing:target,
-body> header > nav.m-navbar-cover:target {
- background-color: #ffffff;
- opacity: 1;
+
+.m-code .gi {
+ color: #00A000
}
-body > header > nav.m-navbar-landing #m-navbar-brand.m-navbar-brand-hidden {
- visibility: hidden;
+
+.m-code .go {
+ color: #000000;
+ font-style: italic
}
-body > header > nav.m-navbar-landing:target #m-navbar-brand.m-navbar-brand-hidden {
- visibility: visible;
+
+.m-code .gp {
+ color: #8f5902
}
-body > header > nav {
- margin-left: auto;
- margin-right: auto;
- color: #000000;
+
+.m-code .gs {
+ color: #000000;
+ font-weight: bold
}
-body > header > nav a {
- text-decoration: none;
- text-transform: lowercase;
- display: inline-block;
- vertical-align: middle;
- line-height: 2.75rem;
- color: #000000;
+
+.m-code .gu {
+ color: #800080;
+ font-weight: bold
}
-body > header > nav #m-navbar-brand, body > header > nav a#m-navbar-show, body > header > nav a#m-navbar-hide {
- font-weight: normal;
- font-size: 1.125rem;
- padding-left: 1rem;
- padding-right: 1rem;
+
+.m-code .gt {
+ color: #a40000;
+ font-weight: bold
}
-body > header > nav a#m-navbar-brand, body > header > nav #m-navbar-brand a {
- text-transform: lowercase;
+
+.m-code .kc {
+ color: #204a87;
+ font-weight: bold
}
-body > header > nav a#m-navbar-brand img, body > header > nav #m-navbar-brand a img {
- width: 1.75rem;
- height: 1.75rem;
- vertical-align: -22.5%;
- margin-right: 0.5rem;
+
+.m-code .kd {
+ color: #204a87;
+ font-weight: bold
}
-body > header > nav #m-navbar-brand a {
- padding-left: 0;
- padding-right: 0;
+
+.m-code .kn {
+ color: #204a87;
+ font-weight: bold
}
-body > header > nav #m-navbar-brand .m-thin {
- font-weight: normal;
+
+.m-code .kp {
+ color: #204a87;
+ font-weight: bold
}
-body > header > nav #m-navbar-brand .m-breadcrumb {
- color: #bdbdbd;
+
+.m-code .kr {
+ color: #204a87;
+ font-weight: bold
}
-body > header > nav a#m-navbar-show:before, body > header > nav a#m-navbar-hide:before {
- content:'\2630';
+
+.m-code .kt {
+ color: #204a87;
+ font-weight: bold
}
-body > header > nav #m-navbar-collapse {
- padding-bottom: 1rem;
+
+.m-code .ld {
+ color: #000000
}
-body > header > nav #m-navbar-collapse li {
- border-style: solid;
- border-color: transparent;
- border-width: 0 0 0 0.25rem;
- margin-left: -1rem;
+
+.m-code .m {
+ color: #0000cf;
+ font-weight: bold
}
-body > header > nav #m-navbar-collapse li a {
- border-style: solid;
- border-color: transparent;
- line-height: 1.5rem;
- margin-left: -0.25rem;
- padding-left: 0.75rem;
- border-width: 0 0 0 0.25rem;
- width: 100%;
+
+.m-code .s {
+ color: #4e9a06
}
-body > header > nav #m-navbar-collapse li a#m-navbar-current {
- color: #2f73a3;
- border-color: #2f73a3;
+
+.m-code .na {
+ color: #c4a000
}
-body > header > nav ol {
- list-style-type: none;
- margin: 0;
+
+.m-code .nb {
+ color: #204a87
}
-body > header > nav ol ol {
- padding-left: 1.5rem;
+
+.m-code .nc {
+ color: #000000
}
-body > header > nav .m-row > [class*='m-col-'] {
- padding-top: 0;
- padding-bottom: 0;
+
+.m-code .no {
+ color: #000000
}
-body > header > nav a:hover, body > header > nav a:focus, body > header > nav a:active {
- color: #205275;
+
+.m-code .nd {
+ color: #5c35cc;
+ font-weight: bold
}
-body > header > nav #m-navbar-collapse li:hover {
- border-color: #205275;
+
+.m-code .ni {
+ color: #ce5c00
}
-body > header > nav #m-navbar-collapse li a:hover,
-body > header > nav #m-navbar-collapse li a:focus,
-body > header > nav #m-navbar-collapse li a:active {
- border-color: #205275;
- background-color: rgba(255, 255, 255, 0.5);
+
+.m-code .ne {
+ color: #cc0000;
+ font-weight: bold
}
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:hover,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:hover,
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:focus,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:focus,
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:active,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:active {
- background-color: var(--header-link-active-background-color-semi);
+
+.m-code .nf {
+ color: #000000
}
-body > header > nav #m-navbar-hide {
- display: none;
+
+.m-code .nl {
+ color: #f57900
}
-body > header > nav:target #m-navbar-collapse {
- display: block;
+
+.m-code .nn {
+ color: #000000
}
-body > header > nav:target #m-navbar-show {
- display: none;
+
+.m-code .nx {
+ color: #000000
}
-body > header > nav:target #m-navbar-hide {
- display: inline-block;
+
+.m-code .py {
+ color: #000000
}
-@media screen and (min-width: 768px) {
- body > header > nav #m-navbar-show, body > header > nav #m-navbar-hide,
- body > header > nav:target #m-navbar-show, body > header > nav:target #m-navbar-hide {
- display: none;
- }
- body > header > nav #m-navbar-collapse li a {
- line-height: 2.75rem;
- }
- body > header > nav a, body > header > nav #m-navbar-collapse li a {
- margin-left: 0;
- padding-left: 1rem;
- padding-right: 1rem;
- white-space: nowrap;
- }
- body > header > nav #m-navbar-collapse {
- padding-bottom: 0;
- }
- body > header > nav #m-navbar-collapse li ol {
- background-color: #ffffff;
- }
- body > header > nav #m-navbar-collapse ol ol li {
- margin-left: 0;
- padding-left: 0;
- border-left-width: 0;
- }
- body > header > nav #m-navbar-collapse ol ol li a {
- padding-left: 0.75rem;
- }
- body > header > nav #m-navbar-collapse > .m-row > ol > li {
- margin-left: 0;
- border-left-width: 0;
- }
- body > header > nav #m-navbar-collapse > .m-row > ol > li > a {
- border-width: 0.25rem 0 0 0;
- }
- body > header > nav #m-navbar-collapse ol {
- padding-left: 0;
- padding-right: 0;
- }
- body > header > nav #m-navbar-collapse > .m-row > ol, body > header > nav #m-navbar-collapse > .m-row > ol > li {
- float: left;
- }
- body > header > nav #m-navbar-collapse ol ol {
- z-index: 99999;
- position: absolute;
- visibility: hidden;
- }
- body > header > nav #m-navbar-collapse li:hover ol {
- visibility: visible;
- }
+
+.m-code .nt {
+ color: #204a87;
+ font-weight: bold
}
-body > footer {
- width: 100%;
+
+.m-code .nv {
+ color: #000000
}
-body > footer > nav {
- padding-top: 1rem;
- padding-bottom: 1rem;
- font-size: 0.85rem;
- text-align: center;
- color: #7c7c7c;
- background-color: #eeeeee;
+
+.m-code .ow {
+ color: #204a87;
+ font-weight: bold
}
-body > footer > nav h3, body > footer > nav h3 a {
- text-transform: uppercase;
- font-weight: normal;
+
+.m-code .w {
+ color: #f8f8f8;
+ text-decoration: underline
}
-body > footer > nav ul {
- list-style-type: none;
- padding: 0;
- margin: 0;
+
+.m-code .mb {
+ color: #0000cf;
+ font-weight: bold
}
-body > footer > nav a {
- text-decoration: none;
- text-transform: lowercase;
- color: #191919;
+
+.m-code .mf {
+ color: #0000cf;
+ font-weight: bold
}
-body > footer > nav a:hover, body > footer > nav a:focus, body > footer > nav a:active {
- color: #494949;
+
+.m-code .mh {
+ color: #0000cf;
+ font-weight: bold
}
-body > main {
- padding-top: 1rem;
- padding-bottom: 1rem;
+
+.m-code .mi {
+ color: #0000cf;
+ font-weight: bold
}
-article h1 {
- font-size: 1.75rem;
+
+.m-code .mo {
+ color: #0000cf;
+ font-weight: bold
}
-article h1 .m-breadcrumb {
- color: #bdbdbd;
- font-weight: normal;
+
+.m-code .sa {
+ color: #4e9a06
}
-article h1 .m-breadcrumb a {
- color: #205275;
+
+.m-code .sb {
+ color: #4e9a06
}
-article h1 .m-breadcrumb a:hover, article h1 a:focus, article h1 a:active {
- color: #2e73a3;
+
+.m-code .sc {
+ color: #4e9a06
}
-article > header h1 {
- font-size: 2rem;
- margin-bottom: 0.5rem;
+
+.m-code .dl {
+ color: #4e9a06
}
-article h1 a, article > header h1, article > header h1 a,
-article section > h2, article section > h2 a,
-article section > h3, article section > h3 a,
-article section > h4, article section > h4 a,
-article section > h5, article section > h5 a,
-article section > h6, article section > h6 a {
- color: #205275;
+
+.m-code .sd {
+ color: #8f5902;
+ font-style: italic
}
-article h1 a:hover, article > header h1 a:hover, article > header h1 a:focus, article > header h1 a:active,
-article section > h2 a:hover, article section > h2 a:focus, article section > h2 a:active,
-article section > h3 a:hover, article section > h3 a:focus, article section > h3 a:active,
-article section > h4 a:hover, article section > h4 a:focus, article section > h4 a:active,
-article section > h5 a:hover, article section > h5 a:focus, article section > h5 a:active,
-article section > h6 a:hover, article section > h6 a:focus, article section > h6 a:active {
- color: #2e73a3;
+
+.m-code .s2 {
+ color: #4e9a06
}
-article > header .m-date {
- display: block;
- width: 2.5rem;
- float: left;
- text-align: center;
- line-height: 95%;
- font-size: 0.75rem;
- font-weight: normal;
- white-space: nowrap;
- border-right-style: solid;
- border-right-width: 0.125rem;
- border-color: #205275;
- padding-right: 0.75rem;
- margin-top: -0.1rem;
- margin-right: 0.75rem;
- margin-bottom: 0.25rem;
+
+.m-code .se {
+ color: #4e9a06
}
-article > header .m-date-day {
- display: block;
- font-weight: bold;
- padding-top: 0.2rem;
- padding-bottom: 0.15rem;
- font-size: 1.25rem;
+
+.m-code .sh {
+ color: #4e9a06
}
-article > header p {
- color: #7a7a7a;
- font-size: 1.125rem;
+
+.m-code .si {
+ color: #4e9a06
}
-article > header h1::after {
- content: " ";
- clear: both;
- display: table;
+
+.m-code .sx {
+ color: #4e9a06
}
-article > footer {
- color: #969696;
+
+.m-code .sr {
+ color: #4e9a06
}
-article > footer p {
- font-style: italic;
- font-size: 0.85rem;
- text-indent: 0;
+
+.m-code .s1 {
+ color: #4e9a06
}
-article section:target {
- margin-left: -1.0rem;
- border-left-style: solid;
- border-left-width: 0.25rem;
- padding-left: 0.75rem;
- border-color: #205275;
+
+.m-code .ss {
+ color: #4e9a06
}
-article h1 a, article > header h1 a, article section > h2 a, article section > h3 a,
-article section > h4 a, article section > h5 a, article section > h6 a {
- text-decoration: none;
+
+.m-code .bp {
+ color: #3465a4
}
-#m-landing-image, #m-cover-image, article#m-jumbo > header #m-jumbo-image {
- background-size: cover;
- background-color: #666666;
- background-position: center center;
- background-repeat: no-repeat;
- margin-top: -4rem;
- padding-top: 5rem;
+
+.m-code .fm {
+ color: #000000
}
-#m-landing-image {
- color: #ffffff;
+
+.m-code .vc {
+ color: #000000
}
-#m-cover-image {
- height: 30rem;
- margin-bottom: -26rem;
+
+.m-code .vg {
+ color: #000000
}
-#m-landing-cover h1 {
- font-size: 2.8rem;
- margin-top: -0.5rem;
- padding-left: 1.5rem;
- padding-bottom: 1rem;
- text-transform: lowercase;
+
+.m-code .vi {
+ color: #000000
}
-#m-landing-cover {
- padding-bottom: 10rem;
- margin-bottom: -6rem;
+
+.m-code .vm {
+ color: #000000
}
-article#m-jumbo {
- margin-top: -1rem;
+
+.m-code .il {
+ color: #0000cf;
+ font-weight: bold
}
-#m-landing-cover, #m-cover-image > div, article#m-jumbo > header #m-jumbo-cover {
- background: linear-gradient(transparent 0%, transparent 50%, #ffffff 100%);
- width: 100%;
- height: 100%;
+
+.m-console .hll {
+ background-color: #ffffcc
}
-article#m-jumbo > header h1, article#m-jumbo > header h2 {
- text-align: center;
- font-weight: bold;
+
+.m-console .g-AnsiBackgroundBlack {
+ background-color: #232627
}
-article#m-jumbo > header a {
- text-decoration: none;
+
+.m-console .g-AnsiBackgroundBlue {
+ background-color: #1d99f3
}
-article#m-jumbo > header #m-jumbo-cover {
- padding-bottom: 5rem;
+
+.m-console .g-AnsiBackgroundBrightBlack {
+ background-color: #7f8c8d
}
-article#m-jumbo > header #m-jumbo-image {
- font-size: 2.5vmin;
- margin-bottom: -3rem;
+
+.m-console .g-AnsiBackgroundBrightBlue {
+ background-color: #3daee9
}
-article#m-jumbo > header h1 {
- font-size: 10vmin;
+
+.m-console .g-AnsiBackgroundBrightCyan {
+ background-color: #16a085
}
-article#m-jumbo > header h2 {
- font-size: 3vmin;
+
+.m-console .g-AnsiBackgroundBrightGreen {
+ background-color: #1cdc9a
}
-@media screen and (max-height: 640px) , screen and (max-width: 640px) {
- article#m-jumbo > header h1 {
- font-size: 3rem;
- }
- article#m-jumbo > header #m-jumbo-image, article#m-jumbo > header h2 {
- font-size: 1rem;
- }
+
+.m-console .g-AnsiBackgroundBrightMagenta {
+ background-color: #8e44ad
}
-article#m-jumbo > header, article#m-jumbo > header h1, article#m-jumbo > header a {
- color: #ffffff;
+
+.m-console .g-AnsiBackgroundBrightRed {
+ background-color: #c0392b
}
-article#m-jumbo > header a:hover, article#m-jumbo > header a:focus, article#m-jumbo > header a:active {
- color: #f0f0f0;
+
+.m-console .g-AnsiBackgroundBrightWhite {
+ background-color: #ffffff
}
-article#m-jumbo.m-inverted > header, article#m-jumbo.m-inverted > header h1, article#m-jumbo.m-inverted > header a {
- color: #000000;
+
+.m-console .g-AnsiBackgroundBrightYellow {
+ background-color: #fdbc4b
}
-article#m-jumbo.m-inverted > header a:hover, article#m-jumbo.m-inverted > header a:focus, article#m-jumbo.m-inverted > header a:active {
- color: #0f0f0f;
+
+.m-console .g-AnsiBackgroundCyan {
+ background-color: #1abc9c
}
-.m-landing-news h3 a {
- color: #000000;
- text-decoration: none;
- text-transform: uppercase;
+
+.m-console .g-AnsiBackgroundDefault {
+ background-color: #fcfcfc
}
-.m-landing-news h3 a:hover, .m-landing-news h3 a:hover, .m-landing-news h3 a:focus, .m-landing-news h3 a:active {
- color: #205275;
+
+.m-console .g-AnsiBackgroundGreen {
+ background-color: #11d116
}
-.m-landing-news time {
- display: inline-block;
- margin-left: 1rem;
- float: right;
+
+.m-console .g-AnsiBackgroundMagenta {
+ background-color: #9b59b6
}
-.m-article-pagination {
- text-align: center;
- padding: 1rem;
+
+.m-console .g-AnsiBackgroundRed {
+ background-color: #ed1515
}
-nav.m-navpanel {
- text-align: center;
+
+.m-console .g-AnsiBackgroundWhite {
+ background-color: #fcfcfc
}
-nav.m-navpanel h3 {
- text-transform: uppercase;
- font-weight: normal;
+
+.m-console .g-AnsiBackgroundYellow {
+ background-color: #f67400
}
-nav.m-navpanel ol {
- text-transform: lowercase;
+
+.m-console .g-AnsiBlack {
+ color: #232627
}
-nav.m-navpanel ol, nav.m-navpanel ul {
- list-style-type: none;
- padding: 0;
+
+.m-console .g-AnsiBlue {
+ color: #1d99f3
}
-nav.m-navpanel a {
- color: #292929;
- text-decoration: none;
+
+.m-console .g-AnsiBrightBlack {
+ color: #7f8c8d;
+ font-weight: bold
}
-nav.m-navpanel a:hover, nav.m-navpanel a:focus, nav.m-navpanel a:active {
- color: #205275;
-}
-ul.m-tagcloud li { display: inline; }
-ul.m-tagcloud li.m-tag-1 { font-size: 0.75rem; }
-ul.m-tagcloud li.m-tag-2 { font-size: 0.825rem; }
-ul.m-tagcloud li.m-tag-3 { font-size: 1rem; }
-ul.m-tagcloud li.m-tag-4 { font-size: 1.25rem; }
-ul.m-tagcloud li.m-tag-5 { font-size: 1.5rem; }
-article section:target figure.m-code-figure, article section:target figure.m-console-figure {
- z-index: 1;
+
+.m-console .g-AnsiBrightBlue {
+ color: #3daee9;
+ font-weight: bold
}
-article, article > header, article section { margin-bottom: 1rem; }
-article:last-child, article section:last-child { margin-bottom: 0; }
-.m-container-inflatable section:target > .m-note,
-.m-container-inflatable section:target > .m-frame,
-.m-container-inflatable section:target > .m-block,
-.m-container-inflatable section:target > pre,
-.m-container-inflatable section:target > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target > .m-console-figure > pre:first-child,
-.m-container-inflatable section:target section > .m-note,
-.m-container-inflatable section:target section > .m-frame,
-.m-container-inflatable section:target section > .m-block,
-.m-container-inflatable section:target section > pre,
-.m-container-inflatable section:target section > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target section > .m-console-figure > pre:first-child,
-.m-container-inflatable section:target [class*='m-center-'] > .m-note,
-.m-container-inflatable section:target [class*='m-center-'] > .m-frame,
-.m-container-inflatable section:target [class*='m-center-'] > .m-block,
-.m-container-inflatable section:target [class*='m-center-'] > pre,
-.m-container-inflatable section:target [class*='m-center-'] > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target [class*='m-center-'] > .m-console-figure > pre:first-child,
-.m-container-inflatable section:target [class*='m-left-'] > .m-note,
-.m-container-inflatable section:target [class*='m-left-'] > .m-frame,
-.m-container-inflatable section:target [class*='m-left-'] > .m-block,
-.m-container-inflatable section:target [class*='m-left-'] > pre,
-.m-container-inflatable section:target [class*='m-left-'] > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target [class*='m-left-'] > .m-console-figure > pre:first-child,
-.m-container-inflatable section:target [class*='m-right-'] > .m-note,
-.m-container-inflatable section:target [class*='m-right-'] > .m-frame,
-.m-container-inflatable section:target [class*='m-right-'] > .m-block,
-.m-container-inflatable section:target [class*='m-right-'] > pre,
-.m-container-inflatable section:target [class*='m-right-'] > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target [class*='m-right-'] > .m-console-figure > pre:first-child,
-.m-container-inflatable section:target .m-container-inflate > .m-note,
-.m-container-inflatable section:target .m-container-inflate > .m-frame,
-.m-container-inflatable section:target .m-container-inflate > .m-block,
-.m-container-inflatable section:target .m-container-inflate > pre,
-.m-container-inflatable section:target .m-container-inflate > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target .m-container-inflate > .m-console-figure > pre:first-child {
- margin-left: -1.0rem;
- border-left-style: solid;
- border-left-width: 0.25rem;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- padding-left: 0.75rem;
+
+.m-console .g-AnsiBrightCyan {
+ color: #16a085;
+ font-weight: bold
}
-.m-container-inflatable section:target > .m-code-figure::before,
-.m-container-inflatable section:target > .m-console-figure::before,
-.m-container-inflatable section:target section > .m-code-figure::before,
-.m-container-inflatable section:target section > .m-console-figure::before,
-.m-container-inflatable section:target [class*='m-center-'] > .m-code-figure::before,
-.m-container-inflatable section:target [class*='m-center-'] > .m-console-figure::before,
-.m-container-inflatable section:target [class*='m-left-'] > .m-code-figure::before,
-.m-container-inflatable section:target [class*='m-left-'] > .m-console-figure::before,
-.m-container-inflatable section:target [class*='m-right-'] > .m-code-figure::before,
-.m-container-inflatable section:target [class*='m-right-'] > .m-console-figure::before,
-.m-container-inflatable section:target .m-container-inflate > .m-code-figure::before,
-.m-container-inflatable section:target .m-container-inflate > .m-console-figure::before {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- border-left-width: 0.25rem;
+
+.m-console .g-AnsiBrightDefault {
+ color: #ffffff;
+ font-weight: bold
}
-.m-container-inflatable section:target > .m-code-figure > pre.m-nopad,
-.m-container-inflatable section:target > .m-console-figure > pre.m-nopad {
- margin-left: -0.75rem;
- padding-left: -0.75rem;
+
+.m-console .g-AnsiBrightGreen {
+ color: #1cdc9a;
+ font-weight: bold
}
-@media screen and (min-width: 576px) {
- .m-container-inflatable section:target .m-center-s > .m-note,
- .m-container-inflatable section:target .m-center-s > pre,
- .m-container-inflatable section:target .m-center-s > figure.m-code-figure > pre:first-child,
- .m-container-inflatable section:target .m-center-s > figure.m-console-figure > pre:first-child,
- .m-container-inflatable section:target .m-right-s > figure.m-code-figure > pre:first-child,
- .m-container-inflatable section:target .m-right-s > figure.m-console-figure > pre:first-child {
- border-left-width: 0;
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- padding-left: 1rem;
- }
- .m-container-inflatable section:target .m-center-s > .m-block,
- .m-container-inflatable section:target .m-right-s > .m-block {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- }
- .m-container-inflatable section:target .m-center-s > .m-frame,
- .m-container-inflatable section:target .m-right-s > .m-frame {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- border-left-width: 0.125rem;
- padding-left: 0.875rem;
- }
- .m-container-inflatable section:target .m-right-s > .m-block,
- .m-container-inflatable section:target .m-right-s > .m-frame {
- margin-left: 0;
- }
- .m-container-inflatable section:target .m-right-s > .m-note,
- .m-container-inflatable section:target .m-right-s > pre {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- margin-left: 0;
- border-left-width: 0;
- padding-left: 1rem;
- }
- .m-container-inflatable section:target .m-center-s > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-center-s > figure.m-console-figure::before,
- .m-container-inflatable section:target .m-right-s > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-right-s > figure.m-console-figure::before {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- border-left-width: 0.125rem;
- }
+
+.m-console .g-AnsiBrightMagenta {
+ color: #8e44ad;
+ font-weight: bold
}
-@media screen and (min-width: 768px) {
- .m-container-inflatable section:target .m-center-m > .m-note,
- .m-container-inflatable section:target .m-center-m > pre,
- .m-container-inflatable section:target .m-center-m > figure.m-code-figure > pre:first-child,
- .m-container-inflatable section:target .m-center-m > figure.m-console-figure > pre:first-child,
- .m-container-inflatable section:target .m-right-m > figure.m-code-figure > pre:first-child,
- .m-container-inflatable section:target .m-right-m > figure.m-console-figure > pre:first-child {
- border-left-width: 0;
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- padding-left: 1rem;
- }
- .m-container-inflatable section:target .m-center-m > .m-block,
- .m-container-inflatable section:target .m-right-m > .m-block {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- }
- .m-container-inflatable section:target .m-center-m > .m-frame,
- .m-container-inflatable section:target .m-right-m > .m-frame {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- border-left-width: 0.125rem;
- padding-left: 0.875rem;
- }
- .m-container-inflatable section:target .m-right-m > .m-block,
- .m-container-inflatable section:target .m-right-m > .m-frame {
- margin-left: 0;
- }
- .m-container-inflatable section:target .m-right-m > .m-note,
- .m-container-inflatable section:target .m-right-m > pre {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- margin-left: 0;
- border-left-width: 0;
- padding-left: 1rem;
- }
- .m-container-inflatable section:target .m-center-m > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-center-m > figure.m-console-figure::before,
- .m-container-inflatable section:target .m-right-m > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-right-m > figure.m-console-figure::before {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- border-left-width: 0.125rem;
- }
+
+.m-console .g-AnsiBrightRed {
+ color: #c0392b;
+ font-weight: bold
}
-@media screen and (min-width: 992px) {
- .m-container-inflatable section:target .m-center-l > .m-note,
- .m-container-inflatable section:target .m-center-l > pre,
- .m-container-inflatable section:target .m-center-l > figure.m-code-figure > pre:first-child,
- .m-container-inflatable section:target .m-center-l > figure.m-console-figure > pre:first-child,
- .m-container-inflatable section:target .m-right-l > figure.m-code-figure > pre:first-child,
- .m-container-inflatable section:target .m-right-l > figure.m-console-figure > pre:first-child {
- border-left-width: 0;
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- padding-left: 1rem;
- }
- .m-container-inflatable section:target .m-center-l > .m-block,
- .m-container-inflatable section:target .m-right-l > .m-block {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- }
- .m-container-inflatable section:target .m-center-l > .m-frame,
- .m-container-inflatable section:target .m-right-l > .m-frame {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- border-left-width: 0.125rem;
- padding-left: 0.875rem;
- }
- .m-container-inflatable section:target .m-right-l > .m-block,
- .m-container-inflatable section:target .m-right-l > .m-frame {
- margin-left: 0;
- }
- .m-container-inflatable section:target .m-right-l > .m-note,
- .m-container-inflatable section:target .m-right-l > pre {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- margin-left: 0;
- border-left-width: 0;
- padding-left: 1rem;
- }
- .m-container-inflatable section:target .m-center-l > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-center-l > figure.m-console-figure::before,
- .m-container-inflatable section:target .m-right-l > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-right-l > figure.m-console-figure::before {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
- border-left-width: 0.125rem;
- }
+
+.m-console .g-AnsiBrightWhite {
+ color: #ffffff;
+ font-weight: bold
}
-.m-container-inflatable section:target > figure.m-code-figure::before,
-.m-container-inflatable section:target > figure.m-console-figure::before,
-.m-container-inflatable section:target section > figure.m-code-figure::before,
-.m-container-inflatable section:target section > figure.m-console-figure::before,
-.m-container-inflatable section:target [class*='m-center-'] > figure.m-code-figure::before,
-.m-container-inflatable section:target [class*='m-center-'] > figure.m-console-figure::before,
-.m-container-inflatable section:target [class*='m-left-'] > figure.m-code-figure::before,
-.m-container-inflatable section:target [class*='m-left-'] > figure.m-console-figure::before,
-.m-container-inflatable section:target [class*='m-right-'] > figure.m-code-figure::before,
-.m-container-inflatable section:target [class*='m-right-'] > figure.m-console-figure::before,
-.m-container-inflatable section:target .m-container-inflatable > figure.m-code-figure::before,
-.m-container-inflatable section:target .m-container-inflatable > figure.m-console-figure::before {
- border-left-color: #c7cfd9;
+
+.m-console .g-AnsiBrightYellow {
+ color: #fdbc4b;
+ font-weight: bold
}
-@media screen and (min-width: 576px) {
- .m-container-inflatable section:target .m-center-s > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-right-s > figure.m-code-figure::before {
- border-color: #f2f7fa;
- }
- .m-container-inflatable section:target .m-center-s > figure.m-console-figure::before,
- .m-container-inflatable section:target .m-right-s > figure.m-console-figure::before {
- border-color: #000000;
- }
+
+.m-console .g-AnsiCyan {
+ color: #1abc9c
}
-@media screen and (min-width: 768px) {
- .m-container-inflatable section:target .m-center-m > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-right-m > figure.m-code-figure::before {
- border-color: #f2f7fa;
- }
- .m-container-inflatable section:target .m-center-m > figure.m-console-figure::before,
- .m-container-inflatable section:target .m-right-m > figure.m-console-figure::before {
- border-color: #000000;
- }
+
+.m-console .g-AnsiDefault {
+ color: #fcfcfc
}
-@media screen and (min-width: 992px) {
- .m-container-inflatable section:target .m-center-l > figure.m-code-figure::before,
- .m-container-inflatable section:target .m-right-l > figure.m-code-figure::before {
- border-color: #f2f7fa;
- }
- .m-container-inflatable section:target .m-center-l > figure.m-console-figure::before,
- .m-container-inflatable section:target .m-right-l > figure.m-console-figure::before {
- border-color: #000000;
- }
+
+.m-console .g-AnsiGreen {
+ color: #11d116
}
-.m-container-inflatable section:target pre,
-.m-container-inflatable section:target figure.m-code-figure > pre:first-child,
-.m-container-inflatable section:target figure.m-console-figure > pre:first-child {
- border-color: #c7cfd9;
+
+.m-console .g-AnsiMagenta {
+ color: #9b59b6
}
-.m-container-inflatable section:target .m-note.m-default {
- border-color: #c7cfd9;
+
+.m-console .g-AnsiRed {
+ color: #ed1515
}
-.m-container-inflatable section:target .m-note.m-primary {
- border-color: #205275;
+
+.m-console .g-AnsiWhite {
+ color: #fcfcfc
}
-.m-container-inflatable section:target .m-note.m-success {
- border-color: #31c25d;
+
+.m-console .g-AnsiYellow {
+ color: #f67400
}
-.m-container-inflatable section:target .m-note.m-warning {
- border-color: #d19600;
+
+.m-console .go {
+ color: #fcfcfc
}
-.m-container-inflatable section:target .m-note.m-danger {
- border-color: #f60000;
+
+.m-console .gp {
+ color: #16a085;
+ font-weight: bold
}
-.m-container-inflatable section:target .m-note.m-info {
- border-color: #2e7dc5;
+
+.m-console .w {
+ color: #fcfcfc
}
-.m-container-inflatable section:target .m-note.m-dim {
- border-color: #bdbdbd;
-}
-
-.m-code .hll { background-color: #ffffcc }
-.m-code { background: #f8f8f8; }
-.m-code .c { color: #8f5902; font-style: italic }
-.m-code .err { color: #a40000; border: 1px solid #ef2929 }
-.m-code .g { color: #000000 }
-.m-code .k { color: #204a87; font-weight: bold }
-.m-code .l { color: #000000 }
-.m-code .n { color: #000000 }
-.m-code .o { color: #ce5c00; font-weight: bold }
-.m-code .x { color: #000000 }
-.m-code .p { color: #000000; font-weight: bold }
-.m-code .ch { color: #8f5902; font-style: italic }
-.m-code .cm { color: #8f5902; font-style: italic }
-.m-code .cp { color: #8f5902; font-style: italic }
-.m-code .cpf { color: #8f5902; font-style: italic }
-.m-code .c1 { color: #8f5902; font-style: italic }
-.m-code .cs { color: #8f5902; font-style: italic }
-.m-code .gd { color: #a40000 }
-.m-code .ge { color: #000000; font-style: italic }
-.m-code .gr { color: #ef2929 }
-.m-code .gh { color: #000080; font-weight: bold }
-.m-code .gi { color: #00A000 }
-.m-code .go { color: #000000; font-style: italic }
-.m-code .gp { color: #8f5902 }
-.m-code .gs { color: #000000; font-weight: bold }
-.m-code .gu { color: #800080; font-weight: bold }
-.m-code .gt { color: #a40000; font-weight: bold }
-.m-code .kc { color: #204a87; font-weight: bold }
-.m-code .kd { color: #204a87; font-weight: bold }
-.m-code .kn { color: #204a87; font-weight: bold }
-.m-code .kp { color: #204a87; font-weight: bold }
-.m-code .kr { color: #204a87; font-weight: bold }
-.m-code .kt { color: #204a87; font-weight: bold }
-.m-code .ld { color: #000000 }
-.m-code .m { color: #0000cf; font-weight: bold }
-.m-code .s { color: #4e9a06 }
-.m-code .na { color: #c4a000 }
-.m-code .nb { color: #204a87 }
-.m-code .nc { color: #000000 }
-.m-code .no { color: #000000 }
-.m-code .nd { color: #5c35cc; font-weight: bold }
-.m-code .ni { color: #ce5c00 }
-.m-code .ne { color: #cc0000; font-weight: bold }
-.m-code .nf { color: #000000 }
-.m-code .nl { color: #f57900 }
-.m-code .nn { color: #000000 }
-.m-code .nx { color: #000000 }
-.m-code .py { color: #000000 }
-.m-code .nt { color: #204a87; font-weight: bold }
-.m-code .nv { color: #000000 }
-.m-code .ow { color: #204a87; font-weight: bold }
-.m-code .w { color: #f8f8f8; text-decoration: underline }
-.m-code .mb { color: #0000cf; font-weight: bold }
-.m-code .mf { color: #0000cf; font-weight: bold }
-.m-code .mh { color: #0000cf; font-weight: bold }
-.m-code .mi { color: #0000cf; font-weight: bold }
-.m-code .mo { color: #0000cf; font-weight: bold }
-.m-code .sa { color: #4e9a06 }
-.m-code .sb { color: #4e9a06 }
-.m-code .sc { color: #4e9a06 }
-.m-code .dl { color: #4e9a06 }
-.m-code .sd { color: #8f5902; font-style: italic }
-.m-code .s2 { color: #4e9a06 }
-.m-code .se { color: #4e9a06 }
-.m-code .sh { color: #4e9a06 }
-.m-code .si { color: #4e9a06 }
-.m-code .sx { color: #4e9a06 }
-.m-code .sr { color: #4e9a06 }
-.m-code .s1 { color: #4e9a06 }
-.m-code .ss { color: #4e9a06 }
-.m-code .bp { color: #3465a4 }
-.m-code .fm { color: #000000 }
-.m-code .vc { color: #000000 }
-.m-code .vg { color: #000000 }
-.m-code .vi { color: #000000 }
-.m-code .vm { color: #000000 }
-.m-code .il { color: #0000cf; font-weight: bold }
-
-.m-console .hll { background-color: #ffffcc }
-.m-console .g-AnsiBackgroundBlack { background-color: #232627 }
-.m-console .g-AnsiBackgroundBlue { background-color: #1d99f3 }
-.m-console .g-AnsiBackgroundBrightBlack { background-color: #7f8c8d }
-.m-console .g-AnsiBackgroundBrightBlue { background-color: #3daee9 }
-.m-console .g-AnsiBackgroundBrightCyan { background-color: #16a085 }
-.m-console .g-AnsiBackgroundBrightGreen { background-color: #1cdc9a }
-.m-console .g-AnsiBackgroundBrightMagenta { background-color: #8e44ad }
-.m-console .g-AnsiBackgroundBrightRed { background-color: #c0392b }
-.m-console .g-AnsiBackgroundBrightWhite { background-color: #ffffff }
-.m-console .g-AnsiBackgroundBrightYellow { background-color: #fdbc4b }
-.m-console .g-AnsiBackgroundCyan { background-color: #1abc9c }
-.m-console .g-AnsiBackgroundDefault { background-color: #fcfcfc }
-.m-console .g-AnsiBackgroundGreen { background-color: #11d116 }
-.m-console .g-AnsiBackgroundMagenta { background-color: #9b59b6 }
-.m-console .g-AnsiBackgroundRed { background-color: #ed1515 }
-.m-console .g-AnsiBackgroundWhite { background-color: #fcfcfc }
-.m-console .g-AnsiBackgroundYellow { background-color: #f67400 }
-.m-console .g-AnsiBlack { color: #232627 }
-.m-console .g-AnsiBlue { color: #1d99f3 }
-.m-console .g-AnsiBrightBlack { color: #7f8c8d; font-weight: bold }
-.m-console .g-AnsiBrightBlue { color: #3daee9; font-weight: bold }
-.m-console .g-AnsiBrightCyan { color: #16a085; font-weight: bold }
-.m-console .g-AnsiBrightDefault { color: #ffffff; font-weight: bold }
-.m-console .g-AnsiBrightGreen { color: #1cdc9a; font-weight: bold }
-.m-console .g-AnsiBrightMagenta { color: #8e44ad; font-weight: bold }
-.m-console .g-AnsiBrightRed { color: #c0392b; font-weight: bold }
-.m-console .g-AnsiBrightWhite { color: #ffffff; font-weight: bold }
-.m-console .g-AnsiBrightYellow { color: #fdbc4b; font-weight: bold }
-.m-console .g-AnsiCyan { color: #1abc9c }
-.m-console .g-AnsiDefault { color: #fcfcfc }
-.m-console .g-AnsiGreen { color: #11d116 }
-.m-console .g-AnsiMagenta { color: #9b59b6 }
-.m-console .g-AnsiRed { color: #ed1515 }
-.m-console .g-AnsiWhite { color: #fcfcfc }
-.m-console .g-AnsiYellow { color: #f67400 }
-.m-console .go { color: #fcfcfc }
-.m-console .gp { color: #16a085; font-weight: bold }
-.m-console .w { color: #fcfcfc }
a.m-doc, a.m-doc-self, a.m-doc-external,
ul.m-doc li.m-doc-expansible > a:first-child, ul.m-doc li.m-doc-collapsible > a:first-child,
.m-code.m-inverted.m-doc-include > a {
- text-decoration: none;
+ text-decoration: none;
}
+
a.m-doc, a.m-doc-self {
- font-weight: bold;
+ font-weight: bold;
}
+
.m-thin a.m-doc, .m-thin a.m-doc-self {
- font-weight: normal;
+ font-weight: normal;
}
+
ul.m-doc li.m-doc-expansible > a:first-child,
ul.m-doc li.m-doc-collapsible > a:first-child,
ul.m-doc li.m-doc-expansible > a:first-child:hover,
@@ -2617,13 +4115,15 @@ ul.m-doc li.m-doc-expansible > a:first-child:active,
ul.m-doc li.m-doc-collapsible > a:first-child:hover,
ul.m-doc li.m-doc-collapsible > a:first-child:focus,
ul.m-doc li.m-doc-collapsible > a:first-child:active {
- color: #000000;
+ color: #000000;
}
+
a.m-doc-self,
ul.m-doc li.m-doc-expansible > a:first-child:before,
ul.m-doc li.m-doc-collapsible > a:first-child:before {
- color: #205275;
+ color: #205275;
}
+
a.m-doc-self:hover, a.m-doc-self:focus, a.m-doc-self:active,
ul.m-doc li.m-doc-expansible > a:first-child:hover::before,
ul.m-doc li.m-doc-expansible > a:first-child:focus::before,
@@ -2631,258 +4131,324 @@ ul.m-doc li.m-doc-expansible > a:first-child:active::before,
ul.m-doc li.m-doc-collapsible > a:first-child:hover::before,
ul.m-doc li.m-doc-collapsible > a:first-child:focus::before,
ul.m-doc li.m-doc-collapsible > a:first-child:active::before {
- color: #2e73a3;
+ color: #2e73a3;
}
+
h3 a.m-doc-external {
- font-weight: normal;
+ font-weight: normal;
}
+
span.m-doc-wrap-bumper {
- margin-right: -1rem;
+ margin-right: -1rem;
}
+
span.m-doc-wrap {
- padding-left: 1rem;
- display: inline-block;
- vertical-align: text-top;
- white-space: pre-line;
- max-width: 100%;
+ padding-left: 1rem;
+ display: inline-block;
+ vertical-align: text-top;
+ white-space: pre-line;
+ max-width: 100%;
}
+
dl.m-doc dd {
- margin-bottom: 0.5rem;
+ margin-bottom: 0.5rem;
}
+
dl.m-doc dd {
- margin-left: 0;
- padding-left: 2.5rem;
+ margin-left: 0;
+ padding-left: 2.5rem;
}
+
dl.m-doc dt:target, dl.m-doc dt:target + dd {
- margin-left: -1.0rem;
- border-left-style: solid;
- border-left-width: 0.25rem;
- border-color: #205275;
+ margin-left: -1.0rem;
+ border-left-style: solid;
+ border-left-width: 0.25rem;
+ border-color: #205275;
+}
+
+dl.m-doc dt:target {
+ padding-left: 0.75rem;
}
-dl.m-doc dt:target { padding-left: 0.75rem; }
-dl.m-doc dt:target + dd { padding-left: 3.25rem; }
+
+dl.m-doc dt:target + dd {
+ padding-left: 3.25rem;
+}
+
ul.m-doc {
- list-style: none;
- margin-left: 1.0375rem;
- padding-left: 0.9rem;
- border-left-color: #c7cfd9;
- border-left-width: 0.0625rem;
- border-left-style: solid;
+ list-style: none;
+ margin-left: 1.0375rem;
+ padding-left: 0.9rem;
+ border-left-color: #c7cfd9;
+ border-left-width: 0.0625rem;
+ border-left-style: solid;
}
+
ul.m-doc li {
- text-indent: -1rem;
- padding-left: 1rem;
+ text-indent: -1rem;
+ padding-left: 1rem;
}
+
ul.m-doc li.m-doc-expansible > ul {
- display: none;
+ display: none;
}
+
ul.m-doc li.m-doc-expansible, ul.m-doc li.m-doc-collapsible {
- padding-left: 0.6rem;
+ padding-left: 0.6rem;
}
+
ul.m-doc li.m-doc-expansible > ul.m-doc, ul.m-doc li.m-doc-collapsible > ul.m-doc {
- margin-left: 0.5rem;
+ margin-left: 0.5rem;
}
+
ul.m-doc li.m-doc-expansible > a:first-child:before, ul.m-doc li.m-doc-collapsible > a:first-child:before {
- background-color: #ffffff;
- display: inline-block;
- width: 0.4rem;
- font-weight: bold;
+ background-color: #ffffff;
+ display: inline-block;
+ width: 0.4rem;
+ font-weight: bold;
+}
+
+ul.m-doc li.m-doc-expansible > a:first-child:before {
+ content: '⊕';
+}
+
+ul.m-doc li.m-doc-collapsible > a:first-child:before {
+ content: '⊖';
}
-ul.m-doc li.m-doc-expansible > a:first-child:before { content: '⊕'; }
-ul.m-doc li.m-doc-collapsible > a:first-child:before { content: '⊖'; }
+
h1 .m-doc-template, h1 .m-doc-include {
- font-size: 1.3rem;
- font-weight: normal;
+ font-size: 1.3rem;
+ font-weight: normal;
}
+
h1 .m-doc-include:last-child {
- margin-bottom: -0.5rem;
+ margin-bottom: -0.5rem;
}
+
h3 .m-doc-template, h3 .m-doc-include {
- font-size: 1rem;
- font-weight: normal;
+ font-size: 1rem;
+ font-weight: normal;
}
+
.m-doc-template, dl.m-doc dd, ul.m-doc li > span.m-doc {
- color: #bdbdbd;
+ color: #bdbdbd;
}
+
dl.m-doc dd svg.m-math, ul.m-doc li > span.m-doc svg.m-math {
- fill: #bdbdbd;
+ fill: #bdbdbd;
}
+
.m-doc-template a, dl.m-doc dd a, ul.m-doc li > span.m-doc a {
- color: #c0c0c0;
+ color: #c0c0c0;
}
+
.m-doc-template a:hover, .m-doc-template a:focus, .m-doc-template a:active,
dl.m-doc dd a:hover, dl.m-doc dd a:focus, dl.m-doc dd a:active,
ul.m-doc li > span.m-doc a:hover, ul.m-doc li > span.m-doc a:focus, ul.m-doc li > span.m-doc a:active {
- color: #949494;
+ color: #949494;
}
+
.m-code.m-inverted.m-doc-include > a:link,
.m-code.m-inverted.m-doc-include > a:visited {
- opacity: 0.6666;
+ opacity: 0.6666;
}
+
.m-code.m-inverted.m-doc-include > a:hover,
.m-code.m-inverted.m-doc-include > a:focus,
.m-code.m-inverted.m-doc-include > a:active {
- opacity: 1;
+ opacity: 1;
}
+
article section.m-doc-details > div {
- margin-top: 0;
- margin-left: 0;
- margin-right: 0;
- position: relative;
- padding: 1rem;
+ margin-top: 0;
+ margin-left: 0;
+ margin-right: 0;
+ position: relative;
+ padding: 1rem;
}
+
article section.m-doc-details > div::before {
- position: absolute;
- content: ' ';
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: -1;
- border-style: solid;
- border-width: 0.125rem;
- border-radius: 0.2rem;
- border-color: #f2f7fa;
+ position: absolute;
+ content: ' ';
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: -1;
+ border-style: solid;
+ border-width: 0.125rem;
+ border-radius: 0.2rem;
+ border-color: #f2f7fa;
}
+
article section.m-doc-details > div > h3:first-child {
- position: relative;
- margin: -1rem -1rem 1rem -1rem;
- padding: 0.5rem 1rem;
- background-color: #f2f7fa;
- border-top-left-radius: 0.2rem;
- border-top-right-radius: 0.2rem;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
+ position: relative;
+ margin: -1rem -1rem 1rem -1rem;
+ padding: 0.5rem 1rem;
+ background-color: #f2f7fa;
+ border-top-left-radius: 0.2rem;
+ border-top-right-radius: 0.2rem;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
}
+
article section.m-doc-details:target {
- border-color: transparent;
+ border-color: transparent;
}
+
article section.m-doc-details:target > div {
- z-index: 1;
+ z-index: 1;
}
+
.m-container-inflatable > .m-row > [class*='m-col-'] section.m-doc-details > div {
- margin-left: -1rem;
- margin-right: -1rem;
+ margin-left: -1rem;
+ margin-right: -1rem;
}
+
.m-container-inflatable section.m-doc-details:target > div > h3:first-child,
.m-container-inflatable section.m-doc-details:target section > div > h3:first-child {
- margin-left: -1.0rem;
- border-left-style: solid;
- border-left-color: #2e73a3;
- border-left-width: 0.25rem;
- padding-left: 0.75rem;
+ margin-left: -1.0rem;
+ border-left-style: solid;
+ border-left-color: #2e73a3;
+ border-left-width: 0.25rem;
+ padding-left: 0.75rem;
}
+
.m-container-inflatable section.m-doc-details:target > div::before,
.m-container-inflatable section-dox-details:target section > div.m::before {
- border-left-width: 0.25rem;
- border-left-color: #205275;
+ border-left-width: 0.25rem;
+ border-left-color: #205275;
}
+
a.m-doc-search-icon {
- padding-left: 1rem;
- padding-right: 1rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
}
+
a.m-doc-search-icon svg {
- fill: #000000;
+ fill: #000000;
}
+
body > header > nav #m-navbar-collapse a.m-doc-search-icon svg {
- vertical-align: -5%;
+ vertical-align: -5%;
}
+
a.m-doc-search-icon:focus svg, a.m-doc-search-icon:hover svg, a.m-doc-search-icon:active svg {
- fill: #205275;
+ fill: #205275;
}
+
.m-doc-search {
- display: none;
- z-index: 10;
- position: fixed;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- background-color: rgba(255, 255, 255, 0.75);
+ display: none;
+ z-index: 10;
+ position: fixed;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ background-color: rgba(255, 255, 255, 0.75);
}
+
.m-doc-search:target {
- display: block;
+ display: block;
}
+
.m-doc-search > a {
- display: block;
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
+ display: block;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
}
+
.m-doc-search-header {
- margin-top: 2.5rem;
- padding: 0.5rem 1rem;
- height: 2rem;
+ margin-top: 2.5rem;
+ padding: 0.5rem 1rem;
+ height: 2rem;
}
+
.m-doc-search-header > div:first-child {
- float: right;
+ float: right;
}
+
.m-doc-search-content {
- background-color: #ffffff;
- border-radius: 0.2rem;
- padding: 1rem;
+ background-color: #ffffff;
+ border-radius: 0.2rem;
+ padding: 1rem;
}
+
.m-doc-search input {
- width: 100%;
- height: 3rem;
- font-size: 1.2rem;
- border-width: 0;
- color: #000000;
- background-color: #f2f7fa;
- border-radius: 0.2rem;
- margin-bottom: 1rem;
- padding: 0 1rem;
+ width: 100%;
+ height: 3rem;
+ font-size: 1.2rem;
+ border-width: 0;
+ color: #000000;
+ background-color: #f2f7fa;
+ border-radius: 0.2rem;
+ margin-bottom: 1rem;
+ padding: 0 1rem;
}
+
.m-doc-search #search-notfound {
- display: none;
+ display: none;
}
+
.m-doc-search ul#search-results {
- list-style-type: none;
- padding-left: 0;
- max-height: calc(100vh - 12.5rem);
- overflow-y: auto;
- display: none;
+ list-style-type: none;
+ padding-left: 0;
+ max-height: calc(100vh - 12.5rem);
+ overflow-y: auto;
+ display: none;
}
+
.m-doc-search ul#search-results li a {
- display: block;
- padding-left: 1rem;
- padding-right: 1rem;
- text-decoration: none;
- width: 100%;
- line-height: 1.5rem;
- color: #000000;
+ display: block;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ text-decoration: none;
+ width: 100%;
+ line-height: 1.5rem;
+ color: #000000;
}
+
.m-doc-search ul#search-results li a > div {
- white-space: nowrap;
- overflow: hidden;
+ white-space: nowrap;
+ overflow: hidden;
}
+
.m-doc-search ul#search-results li a > div:not(.m-doc-search-alias) {
- direction: rtl;
+ direction: rtl;
}
+
.m-doc-search ul#search-results li a .m-label {
- float: right;
- line-height: 1rem;
- margin-top: 0.1rem;
- margin-left: 0.25rem;
+ float: right;
+ line-height: 1rem;
+ margin-top: 0.1rem;
+ margin-left: 0.25rem;
}
+
.m-doc-search ul#search-results li a .m-label.m-flat {
- margin-right: -0.75rem;
+ margin-right: -0.75rem;
}
+
.m-doc-search ul#search-results li#search-current a {
- background-color: #f2f7fa;
+ background-color: #f2f7fa;
}
+
.m-doc-search ul#search-results li#search-current.m-doc-search-copied a {
- background-color: #4dd376;
+ background-color: #4dd376;
}
+
.m-doc-search-typed {
- color: #205275;
+ color: #205275;
}
-.m-doc-search input[type="search"] { -webkit-appearance: textfield; }
+
+.m-doc-search input[type="search"] {
+ -webkit-appearance: textfield;
+}
+
.m-doc-search input[type="search"]::-webkit-search-decoration,
.m-doc-search input[type="search"]::-webkit-search-cancel-button,
.m-doc-search input[type="search"]::-webkit-search-results-button,
.m-doc-search input[type="search"]::-webkit-search-results-decoration {
- display: none;
+ display: none;
}
diff --git a/docs/dev-coding-style.dox b/docs/dev-coding-style.dox
index 994a8a36f..9191506c7 100644
--- a/docs/dev-coding-style.dox
+++ b/docs/dev-coding-style.dox
@@ -39,9 +39,28 @@ Eigen::Vector3d p_IinC; //=> 3d position of the IMU frame in the camera frame
Eigen::Vector3d p_FinG; //=> position of feature F in the global frame G
@endcode
+@section coding-style-printing Print Statements
+The code uses a simple print statement level logic that allows the user to enable and disable the verbosity.
+In general the user can specify the following (see [ov_core/src/utils/print.h](ov_core/src/utils/print.h) file for details):
+- PrintLevel::ALL : All PRINT_XXXX will output to the console
+- PrintLevel::DEBUG : "DEBUG", "INFO", "WARNING" and "ERROR" will be printed. "ALL" will be silenced
+- PrintLevel::INFO : "INFO", "WARNING" and "ERROR" will be printed. "ALL" and "DEBUG" will be silenced
+- PrintLevel::WARNING : "WARNING" and "ERROR" will be printed. "ALL", "DEBUG" and "INFO" will be silenced
+- PrintLevel::ERROR : Only "ERROR" will be printed. All the rest are silenced
+- PrintLevel::SILENT : All PRINT_XXXX will be silenced.
+To use these, you can specify the following using the [printf](https://www.cplusplus.com/reference/cstdio/printf/) standard input logic.
+A user can also specify colors (see [ov_core/src/utils/colors.h](ov_core/src/utils/colors.h) file for details):
+
+@code{.cpp}
+PRINT_ALL("the value is %.2f\n", variable);
+PRINT_DEBUG("the value is %.2f\n", variable);
+PRINT_INFO("the value is %.2f\n", variable);
+PRINT_WARNING("the value is %.2f\n", variable);
+PRINT_ERROR(RED "the value is %.2f\n" RESET, variable);
+@endcode
*/
\ No newline at end of file
diff --git a/docs/dev-docker.dox b/docs/dev-docker.dox
index 33d50b437..f95617dc1 100644
--- a/docs/dev-docker.dox
+++ b/docs/dev-docker.dox
@@ -1,7 +1,7 @@
/**
-@page dev-docker Developing with Docker
+@page dev-docker Building with Docker
@tableofcontents
@@ -62,16 +62,18 @@ docker run -it --net=host --gpus all \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
osrf/ros:noetic-desktop-full \
bash
-# you should be able to launch rviz once in bash
-rviz
+rviz # you should be able to launch rviz once in bash
@endcode
+
+
@section dev-docker-openvins Running OpenVINS with Docker
Clone the OpenVINS repository, build the container and then launch it.
-The [Dockerfile](https://github.com/rpng/open_vins/blob/master/Dockerfile) will not build the repo by default, thus you will need to build the project.
-
+The [Dockerfile](https://docs.docker.com/engine/reference/builder/) will not build the repo by default, thus you will need to build the project.
+We have a few docker files for each version of ROS and operating system we support.
+In the following we will use the [Dockerfile_ros1_20_04](https://github.com/rpng/open_vins/blob/master/Dockerfile_ros1_20_04) which is for a ROS1 install with a 20.04 system.
@m_class{m-block m-warning}
@@ -85,15 +87,15 @@ mkdir -p ~/workspace/catkin_ws_ov/src
cd ~/workspace/catkin_ws_ov/src
git clone https://github.com/rpng/open_vins.git
cd open_vins
-docker build -t openvins .
-cd ~/workspace/catkin_ws_ov
+export VERSION=ros1_20_04 # which docker file version you want (ROS1 vs ROS2 and ubuntu version)
+docker build -t ov_$VERSION -f Dockerfile_$VERSION .
@endcode
-If the dockerfile breaks, you can remove the image and reinstall using the above
+If the dockerfile breaks, you can remove the image and reinstall using the following:
@code{.shell-session}
docker image list
-docker image rm openvins --force
+docker image rm ov_ros1_20_04 --force
@endcode
From here it is a good idea to create a nice helper command which will launch the docker and also pass the GUI to your host machine.
@@ -108,8 +110,7 @@ Here you can append it to the bottom of the ~/.bashrc so that we always have it
can add and remove mounts from this command as you see the need.
@code{.shell-session}
-nano ~/.bashrc
-# add to the bashrc file
+nano ~/.bashrc # add to the bashrc file
xhost + &> /dev/null
export DOCKER_CATKINWS=/home/username/workspace/catkin_ws_ov
export DOCKER_DATASETS=/home/username/datasets
@@ -117,19 +118,23 @@ alias ov_docker="docker run -it --net=host --gpus all \
--env=\"NVIDIA_DRIVER_CAPABILITIES=all\" --env=\"DISPLAY\" \
--env=\"QT_X11_NO_MITSHM=1\" --volume=\"/tmp/.X11-unix:/tmp/.X11-unix:rw\" \
--mount type=bind,source=$DOCKER_CATKINWS,target=/catkin_ws \
- --mount type=bind,source=$DOCKER_DATASETS,target=/datasets \
- openvins $1"
-# save and exit
-source ~/.bashrc
+ --mount type=bind,source=$DOCKER_DATASETS,target=/datasets $1"
+source ~/.bashrc # after you save and exit
@endcode
Now we can launch RVIZ and also compile the OpenVINS codebase.
-From two different terminals on the host machine one can run the following:
+From two different terminals on the host machine one can run the following (ROS 1):
+
+@code{.shell-session}
+ov_docker ov_ros1_20_04 roscore
+ov_docker ov_ros1_20_04 rosrun rviz rviz -d /catkin_ws/src/open_vins/ov_msckf/launch/display.rviz
+@endcode
+
+To actually get a bash environment that we can use to build and run things with we can do the following.
+Note that any install or changes to operating system variables will not persist, thus only edit within your workspace which is linked as a volume.
@code{.shell-session}
-ov_docker roscore
-ov_docker rosrun rviz rviz -d /catkin_ws/src/open_vins/ov_msckf/launch/display.rviz
-ov_docker bash
+ov_docker ov_ros1_20_04 bash
@endcode
Now once inside the docker with the bash shell we can build and launch an example simulation:
@@ -138,9 +143,21 @@ Now once inside the docker with the bash shell we can build and launch an exampl
cd catkin_ws
catkin build
source devel/setup.bash
-roslaunch ov_msckf pgeneva_sim.launch
+rosrun ov_eval plot_trajectories none src/open_vins/ov_data/sim/udel_gore.txt
+roslaunch ov_msckf simulation.launch
@endcode
+And a version for ROS 2 we can do the following:
+
+@code{.shell-session}
+cd catkin_ws
+colcon build --event-handlers console_cohesion+
+source install/setup.bash
+ros2 run ov_eval plot_trajectories none src/open_vins/ov_data/sim/udel_gore.txt
+ros2 run ov_msckf run_simulation src/open_vins/config/rpng_sim/estimator_config.yaml
+@endcode
+
+
@m_class{m-block m-danger}
@par Real-time Performance
@@ -149,6 +166,8 @@ roslaunch ov_msckf pgeneva_sim.launch
the "serial" nodes which allows for the same parameters to be used as when installing directly on an OS.
+
+
@section dev-docker-clion Using Jetbrains Clion and Docker
Jetbrains provides some instructions on their side and a youtube video.
@@ -163,7 +182,7 @@ After building the OpenVINS image (as above) we can do the following which will
This process will allow us to connect Clion to it.
@code{.shell-session}
-docker run -d --cap-add sys_ptrace -p127.0.0.1:2222:22 --name clion_remote_env openvins
+docker run -d --cap-add sys_ptrace -p127.0.0.1:2222:22 --name clion_remote_env ov_ros1_20_04
@endcode
We can now change Clion to use the docker remote:
diff --git a/docs/dev-ros1-to-ros2.dox b/docs/dev-ros1-to-ros2.dox
new file mode 100644
index 000000000..6589faaf0
--- /dev/null
+++ b/docs/dev-ros1-to-ros2.dox
@@ -0,0 +1,49 @@
+/**
+
+
+@page dev-ros1-to-ros2 ROS1 to ROS2 Bag Conversion Guide
+
+
+
+@section gs-ros1-to-ros2-option-1 rosbags
+
+[rosbags](https://gitlab.com/ternaris/rosbags) is the simplest utility which does not depend on ROS installs at all.
+ROS bag conversion is a hard problem since you need to have both ROS1 and ROS2 dependencies.
+This is what was used to generate the converted ROS2 bag files for standard datasets.
+To do a conversion of a bag file we can do the following:
+
+@code{.shell-session}
+pip install rosbags
+rosbags-convert V1_01_easy.bag
+@endcode
+
+
+
+
+@section dev-ros1-to-ros2-option-2 rosbag2 play
+
+To do this conversion you will need to have both ROS1 and ROS2 installed on your system.
+Also ensure that you have installed all dependencies and backends required.
+The main [rosbag2](https://github.com/ros2/rosbag2) readme has a lot of good details.
+
+@code{.shell-session}
+sudo apt-get install ros-$ROS2_DISTRO-ros2bag ros-$ROS2_DISTRO-rosbag2*
+sudo apt install ros-$ROS2_DISTRO-rosbag2-bag-v2-plugins
+@endcode
+
+From here we can do the following.
+This is based on [this issue](https://github.com/ros2/rosbag2/issues/139#issuecomment-516167831).
+You might run into issues with the .so files being corrupted (see [this issue](https://github.com/ros2/rosbag2/issues/94))
+Not sure if there is a fix besides building it from scratch yourself.
+
+@code{.shell-session}
+source_ros1
+source_ros2
+ros2 bag play -s rosbag_v2 V1_01_easy.bag
+@endcode
+
+
+
+
+
+*/
diff --git a/docs/dev-welcome.dox b/docs/dev-welcome.dox
index cc9bc2fa3..7e0dff983 100644
--- a/docs/dev-welcome.dox
+++ b/docs/dev-welcome.dox
@@ -4,11 +4,11 @@
@page dev-welcome Internals and Developers
- @subpage dev-coding-style --- General coding styles and conventions
-- @subpage dev-docker --- How to use docker images to develop with
- @subpage dev-docs --- Developer guide on how documentation can be built
+- @subpage dev-ros1-to-ros2 --- Some notes on ROS bag conversion
- @subpage dev-index --- Description of the covariance index system
-- @subpage dev-roadmap --- Where we plan to go in the future
- @subpage dev-profiling --- Some notes on performing profiling
+- @subpage dev-roadmap --- Where we plan to go in the future
*/
\ No newline at end of file
diff --git a/docs/getting-started.dox b/docs/getting-started.dox
index 858259009..0098ce60a 100644
--- a/docs/getting-started.dox
+++ b/docs/getting-started.dox
@@ -35,6 +35,7 @@ The ov_eval library has a bunch of evaluation methods and scripts that one can u
@section getting-started-more Getting Started Guides
- @subpage gs-installing --- Installation guide for OpenVINS and dependencies
+- @subpage dev-docker --- Installing with Docker instead of from source
- @subpage gs-tutorial --- Simple tutorial on getting OpenVINS running out of the box.
- @subpage gs-datasets --- Links to supported datasets and configuration files
- @subpage gs-calibration --- Guide to how to calibration your own visual-inertial sensors.
diff --git a/docs/gs-calibration.dox b/docs/gs-calibration.dox
index 9a49c9f4f..364abdbd9 100644
--- a/docs/gs-calibration.dox
+++ b/docs/gs-calibration.dox
@@ -29,7 +29,7 @@ Within this *OpenVINS* project we address these by advocating the *online* estim
The first task is to calibrate the camera intrinsic values such as the focal length, camera center, and distortion coefficients.
-Our group often uses the [Kalibr](https://github.com/ethz-asl/kalibr/) @cite Furgale2013ICRA calibration toolbox to perform both intrinsic and extrinsic offline calibrations, by proceeding the following steps:
+Our group often uses the [Kalibr](https://github.com/ethz-asl/kalibr/) @cite Furgale2013IROS calibration toolbox to perform both intrinsic and extrinsic offline calibrations, by proceeding the following steps:
1. Clone and build the [Kalibr](https://github.com/ethz-asl/kalibr/) toolbox
2. Print out a calibration board to use (we normally use the [Aprilgrid 6x6 0.8x0.8 m (A0 page)](https://drive.google.com/file/d/0B0T1sizOvRsUdjFJem9mQXdiMTQ/edit?usp=sharing))
diff --git a/docs/gs-datasets.dox b/docs/gs-datasets.dox
index 951d21586..cf829e0f1 100644
--- a/docs/gs-datasets.dox
+++ b/docs/gs-datasets.dox
@@ -14,6 +14,7 @@ The ETH ASL [EuRoC MAV dataset](https://projects.asl.ethz.ch/datasets/doku.php?i
The reason for this is the synchronised inertial+camera sensor data and the high quality groundtruth.
The dataset contains different sequences of varying difficulty of a Micro Aerial Vehicle (MAV) flying in an indoor room.
Monochrome stereo images are collected by a two Aptina MT9V034 global shutter cameras at 20 frames per seconds, while a ADIS16448 MEMS inertial unit provides linear accelerations and angular velocities at a rate of 200 samples per second.
+
We recommend that most users start testing on this dataset before moving on to the other datasets that our system support or before trying with your own collected data.
The machine hall datasets have the MAV being picked up in the beginning and then set down, we normally skip this part, but it should be able to be handled by the filter if SLAM features are enabled.
Please take a look at the [run_ros_eth.sh](https://github.com/rpng/open_vins/blob/master/ov_msckf/scripts/run_ros_eth.sh) script for some reasonable default values (they might still need to be tuned).
@@ -27,14 +28,19 @@ Please take a look at the [run_ros_eth.sh](https://github.com/rpng/open_vins/blo
You can find the output at this [link](https://drive.google.com/drive/folders/1d62Q_RQwHzKLcIdUlTeBmojr7j0UL4sM?usp=sharing) and is what we normally use to evaluate the error on this dataset.
@m_div{m-text-center}
-| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Example Launch |
+| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Config |
|-------------:|--------|--------------|------------------|------------------|
-| Vicon Room 1 01 | 58 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_01_easy/V1_01_easy.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_eth.launch) |
-| Vicon Room 1 02 | 76 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_02_medium/V1_02_medium.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_eth.launch) |
-| Vicon Room 1 03 | 79 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_03_difficult/V1_03_difficult.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_eth.launch) |
-| Vicon Room 2 01 | 37 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room2/V2_01_easy/V2_01_easy.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_eth.launch) |
-| Vicon Room 2 02 | 83 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room2/V2_02_medium/V2_02_medium.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_eth.launch) |
-| Vicon Room 2 03 | 86 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room2/V2_03_difficult/V2_03_difficult.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_eth.launch) |
+| Vicon Room 1 01 | 58 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_01_easy/V1_01_easy.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Vicon Room 1 02 | 76 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_02_medium/V1_02_medium.bag) , [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing)| [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Vicon Room 1 03 | 79 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_03_difficult/V1_03_difficult.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Vicon Room 2 01 | 37 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room2/V2_01_easy/V2_01_easy.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Vicon Room 2 02 | 83 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room2/V2_02_medium/V2_02_medium.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Vicon Room 2 03 | 86 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room2/V2_03_difficult/V2_03_difficult.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Machine Hall 01 | 80 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Machine Hall 02 | 73 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_02_easy/MH_02_easy.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Machine Hall 03 | 131 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_03_medium/MH_03_medium.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Machine Hall 04 | 92 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_04_difficult/MH_04_difficult.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
+| Machine Hall 05 | 98 | [rosbag](http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_05_difficult/MH_05_difficult.bag), [rosbag2](https://drive.google.com/drive/folders/1xQ1KcZhZ5pioPXTyrZBN6Mjxkfpcd_B3?usp=sharing) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/euroc_mav) | [config](https://github.com/rpng/open_vins/blob/master/config/euroc_mav) |
@m_enddiv
@@ -59,14 +65,14 @@ Note that we focus on the room datasets as full 6 dof pose collection is availab
@m_div{m-text-center}
-| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Example Launch |
+| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Config |
|-------------:|--------|--------------|------------------|------------------|
-| room1 | 147 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room1_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_tum.launch) |
-| room2 | 142 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room2_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_tum.launch) |
-| room3 | 136 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room3_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_tum.launch) |
-| room4 | 69 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room4_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_tum.launch) |
-| room5 | 132 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room5_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_tum.launch) |
-| room6 | 67 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room6_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_tum.launch) |
+| room1 | 147 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room1_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [config](https://github.com/rpng/open_vins/blob/master/config/tum_vi) |
+| room2 | 142 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room2_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [config](https://github.com/rpng/open_vins/blob/master/config/tum_vi) |
+| room3 | 136 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room3_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [config](https://github.com/rpng/open_vins/blob/master/config/tum_vi) |
+| room4 | 69 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room4_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [config](https://github.com/rpng/open_vins/blob/master/config/tum_vi) |
+| room5 | 132 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room5_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [config](https://github.com/rpng/open_vins/blob/master/config/tum_vi) |
+| room6 | 67 | [rosbag](http://vision.in.tum.de/tumvi/calibrated/512_16/dataset-room6_512_16.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/tum_vi) | [config](https://github.com/rpng/open_vins/blob/master/config/tum_vi) |
@m_enddiv
@@ -96,14 +102,14 @@ Thus, please ensure that you have enabled online calibration of these parameters
Additionally, there is no groundtruth for these datasets, but some do include GPS messages if you wish to compare relative to something.
@m_div{m-text-center}
-| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Example Launch |
+| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Config |
|-------------:|--------|--------------|------------------|------------------|
-| ArUco Room 01 | 27 | [rosbag](https://drive.google.com/file/d/1ytjo8V6pCroaVd8-QSop7R4DbsvvKyRQ/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
-| ArUco Room 02 | 93 | [rosbag](https://drive.google.com/file/d/1l_hnPUW6ufqxPtrLqRRHHI4mfGRZB1ha/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
-| ArUco Hallway 01 | 190 | [rosbag](https://drive.google.com/file/d/1FQBo3uHqRd0qm8GUb50Q-sj5gukcwaoU/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
-| ArUco Hallway 02 | 105 | [rosbag](https://drive.google.com/file/d/1oAbnV3MPOeaUSjnSc3g8t-pWV1nVjbys/view?usp=sharing) | none | [launch aruco](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_aruco.launch) |
-| Neighborhood 01 | 2300 | [rosbag](https://drive.google.com/file/d/1N07SDbaLEkq9pVEvi6oiHpavaRuFs3j2/view?usp=sharing) | none | [launch ironsides](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_ironsides.launch) |
-| Neighborhood 02 | 7400 | [rosbag](https://drive.google.com/file/d/1QEUi40sO8OkVXEGF5JojiiZMHMSiSqtg/view?usp=sharing) | none | [launch ironsides](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_serial_ironsides.launch) |
+| ArUco Room 01 | 27 | [rosbag](https://drive.google.com/file/d/1ytjo8V6pCroaVd8-QSop7R4DbsvvKyRQ/view?usp=sharing) | none | [config aruco](https://github.com/rpng/open_vins/blob/master/config/rpng_aruco) |
+| ArUco Room 02 | 93 | [rosbag](https://drive.google.com/file/d/1l_hnPUW6ufqxPtrLqRRHHI4mfGRZB1ha/view?usp=sharing) | none | [config aruco](https://github.com/rpng/open_vins/blob/master/config/rpng_aruco) |
+| ArUco Hallway 01 | 190 | [rosbag](https://drive.google.com/file/d/1FQBo3uHqRd0qm8GUb50Q-sj5gukcwaoU/view?usp=sharing) | none | [config aruco](https://github.com/rpng/open_vins/blob/master/config/rpng_aruco) |
+| ArUco Hallway 02 | 105 | [rosbag](https://drive.google.com/file/d/1oAbnV3MPOeaUSjnSc3g8t-pWV1nVjbys/view?usp=sharing) | none | [config aruco](https://github.com/rpng/open_vins/blob/master/config/rpng_aruco) |
+| Neighborhood 01 | 2300 | [rosbag](https://drive.google.com/file/d/1N07SDbaLEkq9pVEvi6oiHpavaRuFs3j2/view?usp=sharing) | none | [config ironsides](https://github.com/rpng/open_vins/blob/master/config/rpng_ironsides) |
+| Neighborhood 02 | 7400 | [rosbag](https://drive.google.com/file/d/1QEUi40sO8OkVXEGF5JojiiZMHMSiSqtg/view?usp=sharing) | none | [config ironsides](https://github.com/rpng/open_vins/blob/master/config/rpng_ironsides) |
@m_enddiv
@@ -113,7 +119,7 @@ Additionally, there is no groundtruth for these datasets, but some do include GP
@section gs-data-uzhfpv UZH-FPV Drone Racing Dataset
-The [UZH-FPV Drone Racing Dataset](http://rpg.ifi.uzh.ch/uzh-fpv.html) @cite Schubert2018IROS is a dataset focused on high-speed agressive 6dof motion with very high levels of optical flow as compared to other datasets.
+The [UZH-FPV Drone Racing Dataset](https://fpv.ifi.uzh.ch/) @cite Schubert2018IROS is a dataset focused on high-speed agressive 6dof motion with very high levels of optical flow as compared to other datasets.
A FPV drone racing quadrotor has on board a Qualcomm Snapdragon Flight board which can provide inertial measurement and has two 640x480 grayscale global shutter fisheye camera's attached.
The groundtruth is collected with a Leica Nova MS60 laser tracker.
There are four total sensor configurations and calibration provides including: indoor forward facing stereo, indoor 45 degree stereo, outdoor forward facing, and outdoor 45 degree.
@@ -124,24 +130,26 @@ Please take a look at the [run_ros_uzhfpv.sh](https://github.com/rpng/open_vins/
@m_class{m-block m-warning}
-@par Outdoor Dataset Support
- These outdoor datasets seem to give strange relative pose errors (RPE) and thus, while we can run on them, we don't recommend comparing methods on these.
- Please see the below indoor datasets that we are able to run on and the error results look reasonable.
+@par Dataset Groundtruthing
+ Only the Absolute Trajectory Error (ATE) should be used as a metric for this dataset.
+ This is due to inaccurate groundtruth orientation estimates which are explain in their [report](https://fpv.ifi.uzh.ch/wp-content/uploads/2020/11/Ground-Truth-Rotation-Issue-Report.pdf) on the issue.
+ The basic summary is that it is hard to get an accurate orientation information due to the point-based Leica measurements used to groundtruth.
+
@m_div{m-text-center}
-| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Example Launch |
+| Dataset Name | Length (m) | Dataset Link | Groundtruth Traj. | Config |
|-------------:|--------|--------------|------------------|------------------|
-| Indoor 5 | 157 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_forward_5_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 6 | 204 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_forward_6_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 7 | 314 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_forward_7_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 9 | 136 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_forward_9_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 10 | 129 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_forward_10_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 45deg 2 | 207 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_45_2_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 45deg 4 | 164 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_45_4_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 45deg 12 | 112 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_45_12_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 45deg 13 | 159 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_45_13_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
-| Indoor 45deg 14 | 211 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv/indoor_45_14_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_uzhfpv.launch) |
+| Indoor 5 | 157 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_forward_5_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor) |
+| Indoor 6 | 204 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_forward_6_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor) |
+| Indoor 7 | 314 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_forward_7_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor) |
+| Indoor 9 | 136 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_forward_9_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor) |
+| Indoor 10 | 129 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_forward_10_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor) |
+| Indoor 45deg 2 | 207 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_45_2_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor_45) |
+| Indoor 45deg 4 | 164 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_45_4_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor_45) |
+| Indoor 45deg 12 | 112 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_45_12_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor_45) |
+| Indoor 45deg 13 | 159 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_45_13_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor_45) |
+| Indoor 45deg 14 | 211 | [rosbag](http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/indoor_45_14_snapdragon_with_gt.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/uzh_fpv) | [config](https://github.com/rpng/open_vins/blob/master/config/uzhfpv_indoor_45) |
@m_enddiv
@@ -149,10 +157,9 @@ Please take a look at the [run_ros_uzhfpv.sh](https://github.com/rpng/open_vins/
-
@section gs-data-kaist KAIST Urban Dataset
-The [KAIST urban dataset](https://irap.kaist.ac.kr/dataset/index.html) @cite Jeong2019IJRR is a dataset focus on autonomous driving and localization in challenging complex urban environments.
+The [KAIST urban dataset](https://sites.google.com/view/complex-urban-dataset) @cite Jeong2019IJRR is a dataset focus on autonomous driving and localization in challenging complex urban environments.
The dataset was collected in Korea with a vehicle equipped with stereo camera pair, 2d SICK LiDARs, 3d Velodyne LiDAR, Xsens IMU, fiber optic gyro (FoG), wheel encoders, and RKT GPS.
The camera is 10 Hz, while the Xsens IMU is 100 Hz sensing rate.
A groundtruth "baseline" trajectory is also provided which is the resulting output from fusion of the FoG, RKT GPS, and wheel encoders.
@@ -181,9 +188,9 @@ Typically we process the datasets at 1.5x rate so we get a ~20 Hz image feed and
@m_div{m-text-center}
| Dataset Name | Length (km) | Dataset Link | Groundtruth Traj. | Example Launch |
|-------------:|--------|--------------|------------------|------------------|
-| Urban 28 | 11.47 | [download](https://irap.kaist.ac.kr/dataset/download_2.html) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaist.launch) |
-| Urban 38 | 11.42 | [download](https://irap.kaist.ac.kr/dataset/download_2.html) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaist.launch) |
-| Urban 39 | 11.06 | [download](https://irap.kaist.ac.kr/dataset/download_2.html) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaist.launch) |
+| Urban 28 | 11.47 | [download](https://sites.google.com/view/complex-urban-dataset/download-lidar-stereo?authuser=0) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist) |
+| Urban 38 | 11.42 | [download](https://sites.google.com/view/complex-urban-dataset/download-lidar-stereo?authuser=0) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist) |
+| Urban 39 | 11.06 | [download](https://sites.google.com/view/complex-urban-dataset/download-lidar-stereo?authuser=0) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist) |
@m_enddiv
@@ -197,17 +204,17 @@ This topic has been provided in ov_data for convinces sake.
@m_div{m-text-center}
| Dataset Name | Length (km) | Dataset Link | Groundtruth Traj. | Example Launch |
|-------------:|--------|--------------|------------------|------------------|
-| circle | 29.99 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/circle/circle.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| circle_fast | 64.15 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/circle/circle_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| circle_head | 35.05 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/circle/circle_head.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| infinite | 29.35 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/infinite/infinite.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| infinite_fast | 54.24 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/infinite/infinite_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| infinite_head | 37.45 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/infinite/infinite_head.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| rotation | 7.82 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/rotation/rotation.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| rotation_fast | 14.55 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/rotation/rotation_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| square | 41.94 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/square/square.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| square_fast | 44.07 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/square/square_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
-| square_head | 50.00 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/square/square_head.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [launch](https://github.com/rpng/open_vins/blob/master/ov_msckf/launch/pgeneva_ros_kaistvio.launch) |
+| circle | 29.99 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/circle/circle.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| circle_fast | 64.15 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/circle/circle_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| circle_head | 35.05 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/circle/circle_head.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| infinite | 29.35 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/infinite/infinite.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| infinite_fast | 54.24 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/infinite/infinite_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| infinite_head | 37.45 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/infinite/infinite_head.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| rotation | 7.82 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/rotation/rotation.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| rotation_fast | 14.55 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/rotation/rotation_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| square | 41.94 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/square/square.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| square_fast | 44.07 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/square/square_fast.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
+| square_head | 50.00 | [download](https://urserver.kaist.ac.kr/publicdata/KAIST_VIO_Dataset/square/square_head.bag) | [link](https://github.com/rpng/open_vins/tree/master/ov_data/kaist_vio) | [config](https://github.com/rpng/open_vins/blob/master/config/kaist_vio) |
@m_enddiv
diff --git a/docs/gs-installing.dox b/docs/gs-installing.dox
index 7fe56c797..f560780e7 100644
--- a/docs/gs-installing.dox
+++ b/docs/gs-installing.dox
@@ -2,6 +2,7 @@
@page gs-installing Installation Guide
+@tableofcontents
@section gs-install-ros ROS Dependency
@@ -13,51 +14,99 @@ See the [opencv_contrib](https://github.com/opencv/opencv_contrib) readme on how
We have tested building with OpenCV 3.2, 3.3, 3.4, 4.2, and 4.5.
Please see the official instructions to install ROS:
-- [Ubuntu 16.04 ROS Kinetic](http://wiki.ros.org/kinetic/Installation/Ubuntu) (uses OpenCV 3.3)
-- [Ubuntu 18.04 ROS Melodic](http://wiki.ros.org/melodic/Installation/Ubuntu) (uses OpenCV 3.2)
-- [Ubuntu 20.04 ROS Noetic](http://wiki.ros.org/noetic/Installation/Ubuntu) (uses OpenCV 4.2)
+- [Ubuntu 16.04 ROS 1 Kinetic](http://wiki.ros.org/kinetic/Installation/Ubuntu) (uses OpenCV 3.3)
+- [Ubuntu 18.04 ROS 1 Melodic](http://wiki.ros.org/melodic/Installation/Ubuntu) (uses OpenCV 3.2)
+- [Ubuntu 20.04 ROS 1 Noetic](http://wiki.ros.org/noetic/Installation/Ubuntu) (uses OpenCV 4.2)
+- [Ubuntu 18.04 ROS 2 Dashing](https://docs.ros.org/en/dashing/) (uses OpenCV 3.2)
+- [Ubuntu 20.04 ROS 2 Galactic](https://docs.ros.org/en/galactic/) (uses OpenCV 4.2)
-@m_class{m-block m-warning}
+We do support ROS-free builds, but don't recommend using this interface as we have limited support for it.
+You will need to ensure you have installed OpenCV and Eigen3 which are the only dependencies.
+If ROS is not found on the system, one can use command line options to run the simulation without any visualization or `cmake -DENABLE_ROS=OFF ..`.
+If you are using the ROS-free interface, you will need to properly construct the @ref ov_msckf::VioManagerOptions struct with proper information and feed inertial and image data into the correct functions.
+The simulator can give you and example on how to do this.
+
+@subsection gs-install-ros-1 ROS1 Install
-@par ROS Usage in OpenVINS
- We do support ROS-free builds, but don't recommend using this interface as we have limited support for it.
- You will need to ensure you have installed OpenCV and Eigen3 which are the only dependencies.
- If ROS is not found on the system, one can use command line options to run the simulation without any visualization or `cmake -DENABLE_CATKIN_ROS=OFF ..`.
- If you are using the ROS-free interface, you will need to properly construct the @ref ov_msckf::VioManagerOptions struct with proper information and feed inertial and image data into the correct functions.
+To install we can perform the following:
@code{.shell-session}
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
-export ROS_DISTRO=noetic # kinetic=16.04, melodic=18.04, noetic=20.04
-sudo apt-get install ros-$ROS_DISTRO-desktop-full
-echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc
-source ~/.bashrc
-sudo apt-get install libeigen3-dev python-catkin-tools # ubuntu 16.04 or 18.04
+export ROS1_DISTRO=noetic # kinetic=16.04, melodic=18.04, noetic=20.04
+sudo apt-get install ros-$ROS1_DISTRO-desktop-full
+sudo apt-get install libeigen3-dev python-catkin-tools # ubuntu 16.04, 18.04
sudo apt-get install libeigen3-dev python3-catkin-tools python3-osrf-pycommon # ubuntu 20.04
@endcode
+If you only have ROS1 on your system and are not cross installing ROS2, then you can run the following to append this to your bashrc file.
+Every time a terminal is open, thus will load the ROS1 environmental variables required to find all dependencies for building and system installed packages.
-@section gs-install-opencv OpenCV Dependency (from source)
+@code{.shell-session}
+echo "source /opt/ros/$ROS1_DISTRO/setup.bash" >> ~/.bashrc
+source ~/.bashrc
+@endcode
-We leverage [OpenCV](https://opencv.org/) for this project which you can typically use the install from ROS.
-If these do not work (or are using non-ROS building), then you can try building OpenCV from source ensuring you include the contrib modules.
-One should make sure you can see some of the "contrib" (e.g. aruco) when you cmake to ensure you have linked to the contrib modules.
+Otherwise, if you want to also install ROS2, you must *NOT* have a global source.
+Instead we can have a nice helper command which can be used when we build a ROS1 workspace.
+Additionally, the `source_devel` command can be used when in your workspace root to source built packages.
+Once appended simply run `source_ros1` to load your ROS1 environmental variables.
@code{.shell-session}
-git clone https://github.com/opencv/opencv/
-git clone https://github.com/opencv/opencv_contrib/
-mkdir opencv/build/
-cd opencv/build/
-cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
-make -j8
-sudo make install
+echo "alias source_ros1=\"source /opt/ros/$ROS1_DISTRO/setup.bash\"" >> ~/.bashrc
+echo "alias source_devel=\"source devel/setup.bash\"" >> ~/.bashrc
+source ~/.bashrc
+@endcode
+
+
+@subsection gs-install-ros-2 ROS2 Install
+
+To install we can perform the following:
+
+@code{.shell-session}
+sudo apt update && sudo apt install curl gnupg lsb-release
+sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
+echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
+sudo apt-get update
+export ROS2_DISTRO=galactic # dashing=18.04, galactic=20.04
+sudo apt install ros-$ROS2_DISTRO-desktop
+sudo apt-get install ros-$ROS2_DISTRO-ros2bag ros-$ROS2_DISTRO-rosbag2* # rosbag utilities (seems to be separate)
+@endcode
+
+If you only have ROS2 on your system and are not cross installing ROS1, then you can run the following to append this to your bashrc file.
+Every time a terminal is open, thus will load the ROS2 environmental variables required to find all dependencies for building and system installed packages.
+
+@code{.shell-session}
+echo "source /opt/ros/$ROS2_DISTRO/setup.bash" >> ~/.bashrc
+source ~/.bashrc
+@endcode
+
+Otherwise, if you want to also install ROS1, you must *NOT* have a global source.
+Instead we can have a nice helper command which can be used when we build a ROS1 workspace.
+Additionally, the `source_install` command can be used when in your workspace root to source built packages.
+Once appended simply run `source_ros2` to load your ROS1 environmental variables.
+
+@code{.shell-session}
+echo "alias source_ros2=\"source /opt/ros/$ROS2_DISTRO/setup.bash\"" >> ~/.bashrc
+echo "alias source_install=\"source install/setup.bash\"" >> ~/.bashrc
+source ~/.bashrc
@endcode
-If you do not want to build the modules, you should also be able to do this (while it is not as well tested).
-The ArucoTag tracker depends on a non-free module in the contrib repository, thus this will need to be disabled.
-You can disable this with `catkin build -DENABLE_ARUCO_TAGS=OFF` or `cmake -DENABLE_ARUCO_TAGS=OFF ..` in your build folder.
+
+@section gs-install-cmake Upgrading CMake to Version 3.12
+
+We use a newer version of [cmake](https://cmake.org/download/) so you will probably need to upgrade your system if you are on an old ubuntu version.
+You can run the following which downloads a script and will install it for you.
+
+@code{.shell-session}
+wget https://cmake.org/files/v3.13/cmake-3.13.5-Linux-x86_64.sh
+sudo mkdir /opt/cmake
+sudo sh cmake-3.13.5-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
+sudo ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
+cmake --version
+@endcode
@section gs-install-openvins Cloning the OpenVINS Project
@@ -67,31 +116,69 @@ If you did not install the catkin_tools build system, you should be able to buil
If you run into any problems please google search the issue first and if you are unable to find a solution please open an issue on our github page.
After the build is successful please following the @ref gs-tutorial guide on getting a dataset and running the system.
+There are additional options that users might be interested in.
+Configure these with `catkin build -D=OFF` or `cmake -D=ON ..` in the ROS free case.
+
+- `ENABLE_ROS` - (default ON) - Enable or disable building with ROS (if it is found)
+- `ENABLE_ARUCO_TAGS` - (default ON) - Enable or disable aruco tag (disable if no contrib modules)
+- `BUILD_OV_EVAL` - (default ON) - Enable or disable building of ov_eval
+- `DISABLE_MATPLOTLIB` - (default OFF) - Disable or enable matplotlib plot scripts in ov_eval
+
@code{.shell-session}
-sudo apt-get install python-catkin-tools
mkdir -p ~/workspace/catkin_ws_ov/src/
cd ~/workspace/catkin_ws_ov/src/
git clone https://github.com/rpng/open_vins/
cd ..
-catkin build
+catkin build # ROS1
+colcon build # ROS2
+colcon build --event-handlers console_cohesion+ # ROS2 with verbose output
@endcode
+
@section gs-install-oveval Additional Evaluation Requirements
-If you want to use the plotting utility wrapper of [matplotlib-cpp](https://github.com/lava/matplotlib-cpp) to generate plots directly from running the cpp code in ov_eval you will need to make sure you have a valid Python 2.7 install of matplotlib.
+If you want to use the plotting utility wrapper of [matplotlib-cpp](https://github.com/lava/matplotlib-cpp) to generate plots directly from running the cpp code in ov_eval you will need to make sure you have a valid Python 2.7 or 3 install of matplotlib.
On ubuntu 16.04 you can do the following command which should take care of everything you need.
If you can't link properly, make sure you can call it from Python normally (i.e. that your Python environment is not broken).
You can disable this visualization if it is broken for you by passing the -DDISABLE_MATPLOTLIB=ON parameter to your catkin build.
Additionally if you wish to record CPU and memory usage of the node, you will need to install the [psutil](https://github.com/giampaolo/psutil) library.
@code{.shell-session}
-sudo apt-get install python-matplotlib python-numpy python2.7-dev python-psutil
+sudo apt-get install python2.7-dev python-matplotlib python-numpy python-psutil # for python2 systems
+sudo apt-get install python3-dev python3-matplotlib python3-numpy python3-psutil python3-tk # for python3 systems
catkin build -DDISABLE_MATPLOTLIB=OFF # build with viz (default)
catkin build -DDISABLE_MATPLOTLIB=ON # build without viz
@endcode
+@section gs-install-opencv OpenCV Dependency (from source)
+
+We leverage [OpenCV](https://opencv.org/) for this project which you can typically use the install from ROS.
+If the ROS version of [cv_bridge](http://wiki.ros.org/cv_bridge) does not work (or are using non-ROS building), then you can try building OpenCV from source ensuring you include the contrib modules.
+One should make sure you can see some of the "contrib" (e.g. aruco) when you cmake to ensure you have linked to the contrib modules.
+
+
+@m_class{m-block m-warning}
+
+@par OpenCV Install
+ Try to first build with your system / ROS OpenCV.
+ Only fall back onto this if it does not allow you to compile, or want a newer version!
+
+@code{.shell-session}
+git clone https://github.com/opencv/opencv/
+git clone https://github.com/opencv/opencv_contrib/
+mkdir opencv/build/
+cd opencv/build/
+cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
+make -j8
+sudo make install
+@endcode
+
+If you do not want to build the modules, you should also be able to do this (while it is not as well tested).
+The ArucoTag tracker depends on a non-free module in the contrib repository, thus this will need to be disabled.
+You can disable this with `catkin build -DENABLE_ARUCO_TAGS=OFF` or `cmake -DENABLE_ARUCO_TAGS=OFF ..` in your build folder.
+
*/
diff --git a/docs/gs-tutorial.dox b/docs/gs-tutorial.dox
index b8eaf6f84..246793389 100644
--- a/docs/gs-tutorial.dox
+++ b/docs/gs-tutorial.dox
@@ -2,135 +2,159 @@
@page gs-tutorial Simple Tutorial
+@tableofcontents
This guide assumes that you have already built the project successfully and are now ready to run the program on some datasets.
If you have not compiled the program yet please follow the @ref gs-installing guide.
The first that we will download is a dataset to run the program on.
In this tutorial we will run on the [EuRoC MAV Dataset](https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets) @cite Burri2016IJRR which provides monochrome stereo images at 20Hz with a MEMS ADIS16448 IMU at 200Hz.
-
-
-@m_div{m-button m-primary}
+@m_div{m-col-m-6 m-button m-primary}
-@m_div{m-big}Download ROS Bag@m_enddiv
-@m_div{m-small} Vicon Room 1 01 @m_enddiv
+@m_div{m-big}Download ROS 1 Bag@m_enddiv
+@m_div{m-small}Vicon Room 1 01 Easy @m_enddiv
+
+@m_enddiv
+
+@m_div{m-col-m-6 m-button m-primary}
+
+@m_div{m-big}Download ROS 2 Bag@m_enddiv
+@m_div{m-small}Vicon Room 1 01 Easy @m_enddiv
@m_enddiv
-All configuration information for the system is exposed to the user in the launch file.
-We will create a launch file that will launch our MSCKF estimation node and feed the ROS bag into the system in serial.
+All configuration information for the system is exposed to the user in the configuration file, and can be overridden in the launch file.
+We will create a launch file that will launch our MSCKF estimation node and feed the ROS bag into the system.
One can take a look in the [launch](https://github.com/rpng/open_vins/tree/master/ov_msckf/launch) folder for more examples.
+For OpenVINS we need to define a series of files:
+- `estimator_config.yaml` - Contains OpenVINS specific configuration files. Each of these can be overridden in the launch file.
+- `kalibr_imu_chain.yaml` - IMU noise parameters and topic information based on the sensor in the dataset. This should be the same as Kalibr's (see @ref gs-calib-imu-static).
+- `kalibr_imucam_chain.yaml` - Camera to IMU transformation and camera intrinsics. This should be the same as Kalibr's (see @ref gs-calib-cam-static).
+
+
+
+@section gs-tutorial-ros1 ROS 1 Tutorial
+
+The ROS1 system uses the [roslaunch](http://wiki.ros.org/roslaunch) system to manage and launch nodes.
+These files can launch multiple nodes, and each node can their own set of parameters set.
+Consider the below launch file.
+We can see the main parameter that is being passed into the estimator is the `config_path` file which has all configuration for this specific dataset.
+Additionally, we can see that we are launching the `run_subscribe_msckf` ROS 1 node, and are going to be overriding the `use_stereo` and `max_cameras` with the specificed values.
+ROS parameters always have priority, and you should see in the console that they have been successfully overridden.
@m_div{m-container-inflate}
@code{.xml}
-
-
-
-
-
-
- [0,1]
-
-
-
-
-
-
-
-
-
-
-
-
- [0.0,0.0,9.81]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [458.654,457.296,367.215,248.375]
- [-0.28340811,0.07395907,0.00019359,1.76187114e-05]
- [457.587,456.134,379.999,255.238]
- [-0.28368365,0.07451284,-0.00010473,-3.55590700e-05]
-
-
-
- [
- 0.0148655429818, -0.999880929698, 0.00414029679422, -0.0216401454975,
- 0.999557249008, 0.0149672133247, 0.025715529948, -0.064676986768,
- -0.0257744366974, 0.00375618835797, 0.999660727178, 0.00981073058949,
- 0.0, 0.0, 0.0, 1.0
- ]
-
-
- [
- 0.0125552670891, -0.999755099723, 0.0182237714554, -0.0198435579556,
- 0.999598781151, 0.0130119051815, 0.0251588363115, 0.0453689425024,
- -0.0253898008918, 0.0179005838253, 0.999517347078, 0.00786212447038,
- 0.0, 0.0, 0.0, 1.0
- ]
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
@endcode
@m_enddiv
+Since the configuration file for the EurocMav dataset has already been created, we can simply do the following.
+Note it is good practice to run a `roscore` that stays active so that you do not need to relaunch rviz or other packages.
+@code{.shell-session}
+roscore # term 0
+source devel/setup.bash # term 1
+roslaunch ov_msckf subscribe.launch config:=euroc_mav
+@endcode
+
+In another two terminals we can run the following.
+For RVIZ, one can open the `ov_msckf/launch/display.rviz` configuration file.
+You should see the system publishing features and a state estimate.
-One will need to edit the path to the ROS bag that was downloaded from the [EuRoC MAV Dataset](https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets) website.
-Lets now look at the different sections in this launch file in more detail.
-A lot of the parameters that are exposed have not been included in the above file and will instead be set to their default values.
-Please take a look at the other launch files or the ov_msckf::VioManager constructor for more details on what parameters are exposed.
+@code{.shell-session}
+rviz # term 2
+rosbag play V1_01_easy.bag # term 3
+@endcode
-| Group | Description |
-|---|---|
-| bag topics | ROS topics that we will parse the IMU and camera data from. If we are only using one camera, i.e. monocular, then only the first camera topic is used. |
-| stereo pairs | Even set of camera ids, which stereo tracking will be tried to be performed on. For example a 0,1,2,3 means that you want to perform stereo tracking of the 0,1 and 2,3 camera pairs. |
-| bag params. | Location of the bag we will read along with the start time, in seconds, and duration we want to run on. |
-| world/filter params. | This has most of the core parameters that can be tuned to improve filter performance including the sliding window size, representation, gravity, and number of environmental SLAM features. One can also change the number of cameras from 1 to 2 to do stereo matching and update. |
-| tracker/extractor params. | For our visual front-end tracker we have a few key parameters that we can tune, most importantly is the number of features extracted. |
-| sensor noise values | Since our feature measurement function is on the raw pixels (see @ref update-feat), the pixel noise should be 1 pixel if we have good calibration. We additionally have the *continuous time* white noise and random walk values for our IMU. |
-| camera intrinsics | Camera intrinsic values from the EurocMav dataset. |
-| camera extrinsics | Camera extrinsics values from the EurocMav dataset. Note that they have the rotation from camera to imu and position of the imu in the camera in the imu frame. |
+@section gs-tutorial-ros2 ROS 2 Tutorial
+For ROS 2, launch files and nodes have become a bit more combersom due to the removal of a centralized communication method.
+This both allows for more distributed systems, but causes a bit more on the developer to perform integration.
+The launch system is described in [this](https://design.ros2.org/articles/roslaunch.html) design article.
+Consider the following launch file which does the same as the ROS 1 launch file above.
+@m_div{m-container-inflate}
+@code{.py}
+from launch import LaunchDescription
+from launch.actions import DeclareLaunchArgument, LogInfo, OpaqueFunction
+from launch.conditions import IfCondition
+from launch.substitutions import LaunchConfiguration, TextSubstitution
+from launch_ros.actions import Node
+from ament_index_python.packages import get_package_share_directory, get_package_prefix
+import os
+import sys
+
+launch_args = [
+ DeclareLaunchArgument(name='namespace', default_value='', description='namespace'),
+ DeclareLaunchArgument(name='config', default_value='euroc_mav', description='euroc_mav, tum_vi, rpng_aruco...'),
+ DeclareLaunchArgument(name='verbosity', default_value='INFO', description='ALL, DEBUG, INFO, WARNING, ERROR, SILENT'),
+ DeclareLaunchArgument(name='use_stereo', default_value='true', description=''),
+ DeclareLaunchArgument(name='max_cameras', default_value='2', description='')
+]
+
+def launch_setup(context):
+ configs_dir=os.path.join(get_package_share_directory('ov_msckf'),'..','config')
+ available_configs = os.listdir(configs_dir)
+ config = LaunchConfiguration('config').perform(context)
+ if not config in available_configs:
+ return[LogInfo(msg='ERROR: unknown config: \'{}\' - Available configs are: {} - not starting OpenVINS'.format(config,', '.join(available_configs)))]
+ config_path = os.path.join(get_package_share_directory('ov_msckf'),'config',config,'estimator_config.yaml')
+ node1 = Node(package = 'ov_msckf',
+ executable = 'run_subscribe_msckf',
+ namespace = LaunchConfiguration('namespace'),
+ parameters =[{'verbosity': LaunchConfiguration('verbosity')},
+ {'use_stereo': LaunchConfiguration('use_stereo')},
+ {'max_cameras': LaunchConfiguration('max_cameras')},
+ {'config_path': config_path}])
+ return [node1]
+
+def generate_launch_description():
+ opfunc = OpaqueFunction(function = launch_setup)
+ ld = LaunchDescription(launch_args)
+ ld.add_action(opfunc)
+ return ld
-If we create a launch file `tutorial.launch` in our `/ov_msckf/launch/` folder with the above contents and have replaced the bag path to the downloaded bag location, we can do the following.
+@endcode
+@m_enddiv
+We can see that first the `launch_setup` function defines the nodes that we will be launching from this file.
+Then the `LaunchDescription` is created given the launch arguments and the node is added to it and returned to ROS.
+We can the launch it using the following:
@code{.shell-session}
-source devel/setup.bash
-roslaunch ov_msckf tutorial.launch
+source install/setup.bash
+ros2 launch ov_msckf subscribe.launch.py config:=euroc_mav
@endcode
+We can then use the ROS2 rosbag file.
+First make sure you have installed the rosbag2 and all its backends.
+If you downloaded the bag above you should already have a valid bag format.
+Otherwise, you will need to convert it following @ref dev-ros1-to-ros2 .
+A "bag" is now defined by a db3 sqlite database and config yaml file in a folder.
+In another terminal we can run the following:
+@code{.shell-session}
+ros2 bag play V1_01_easy
+@endcode
diff --git a/docs/img/splineframes.svg b/docs/img/splineframes.svg
index 807c852e7..42d6adc6c 100644
--- a/docs/img/splineframes.svg
+++ b/docs/img/splineframes.svg
@@ -1,142 +1,214 @@
-