├── .gitignore ├── .ignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── src ├── cli.rs ├── document.rs ├── included.rs ├── ioutil.rs ├── log.rs ├── main.rs ├── paths.rs ├── server.rs ├── service.rs ├── themes.rs └── watcher.rs ├── templates └── template.hbs └── vendor ├── js ├── reconnecting-websocket.js └── script.js └── themes ├── air.css ├── awsm.css ├── axist.css ├── latex.css ├── modest.css ├── pico.css ├── retro.css ├── sakura-dark.css ├── sakura.css ├── splendor.css ├── tacit.css ├── tufte.css └── yorha.css /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | 3 | ######### 4 | # macOS # 5 | ######### 6 | 7 | # General 8 | .DS_Store 9 | .AppleDouble 10 | .LSOverride 11 | 12 | # Icon must end with two \r 13 | Icon 14 | 15 | # Thumbnails 16 | ._* 17 | 18 | # Files that might appear in the root of a volume 19 | .DocumentRevisions-V100 20 | .fseventsd 21 | .Spotlight-V100 22 | .TemporaryItems 23 | .Trashes 24 | .VolumeIcon.icns 25 | .com.apple.timemachine.donotpresent 26 | 27 | # Directories potentially created on remote AFP share 28 | .AppleDB 29 | .AppleDesktop 30 | Network Trash Folder 31 | Temporary Items 32 | .apdisk 33 | 34 | # Devenv 35 | .devenv* 36 | devenv.local.nix 37 | .direnv* 38 | .pre-commit-config.yaml 39 | -------------------------------------------------------------------------------- /.ignore: -------------------------------------------------------------------------------- 1 | vendor -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "marky" 3 | version = "0.9.0" 4 | edition = "2021" 5 | description = "Markdown Magician 🧙" 6 | license = "MIT" 7 | repository = "https://github.com/metafates/marky" 8 | authors = ["metafates"] 9 | categories = ["command-line-utilities", "parsing", "visualization"] 10 | keywords = ["markdown", "html", "cli", "image"] 11 | 12 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 13 | 14 | [dependencies] 15 | anyhow = "1.0.68" 16 | atty = "0.2.14" 17 | clap = { version = "4.1.4", features = ["cargo", "derive", "env"] } 18 | clap_complete = "4.1.1" 19 | colored = "2.0.0" 20 | dirs = "4.0.0" 21 | humansize = "2.1.3" 22 | include_dir = "0.7.3" 23 | levenshtein = "1.0.5" 24 | markdown = "1.0.0-alpha.5" 25 | notify = "5.1.0" 26 | open = "3.2.0" 27 | serde = { version = "1.0.152", features = ["derive"] } 28 | tempfile = "3.3.0" 29 | toml = "0.7.0" 30 | tokio = { version = "1.25.0", features = [ 31 | "rt-multi-thread", 32 | "macros", 33 | "io-util", 34 | ] } 35 | axum = { version = "0.6.4", default-features = false, features = [ 36 | "headers", 37 | "http1", 38 | "ws", 39 | ] } 40 | handlebars = "4.3.6" 41 | tower = "0.4.13" 42 | tower-http = { version = "0.3.4", features = ["fs", "trace"] } 43 | minify-js = "0.4.3" 44 | minifier = "0.2.2" 45 | lol_html = "0.3.2" 46 | base64 = "0.13" 47 | image = "0.24" 48 | reqwest = { version = "0.11", features = ["blocking"] } 49 | oxipng = "8.0.0" 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Marky 2 | 3 | Markdown Magician 🧙 4 | 5 | **Features** 6 | 7 | - Hot reload previewing 🔥 8 | - Conversion to **HTML** 🏭 9 | - Themes! ✨ 10 | - Extensions - Math, diagrams, syntax-highlighting 🧩 11 | - Download base64 encoded images (png, jpg, svg) 12 | 13 | 14 | 15 | - [Examples](#examples) 16 | - [Install](#install) 17 | - [Help](#help) 18 | - [Build](#build) 19 | - [Screenshots](#screenshots) 20 | 21 | 22 | 23 | ## Examples 24 | 25 | Convert `doc.md` to `doc.html` 26 | 27 | ```bash 28 | marky doc.md 29 | ``` 30 | 31 | Start a local preview server with hot-reload 32 | 33 | ```bash 34 | marky doc.md --live 35 | ``` 36 | 37 | Enable extensions 38 | 39 | ```bash 40 | # Or use --all to enable all 41 | marky doc.md --math --diagrams --highlight 42 | ``` 43 | 44 | Include local images as base64 encoded and compress them (beta) 45 | 46 | ```bash 47 | # possible values: local, remote, all 48 | marky doc.md --include-images "local" --optimize-images 49 | # or short 50 | marky doc.md -zI local 51 | ``` 52 | 53 | Select and use a different theme with fzf 54 | 55 | ```bash 56 | marky doc.md --theme $(marky --themes | fzf) 57 | ``` 58 | 59 | Pipe from stdout and open compiled file 60 | 61 | ```bash 62 | cat doc.md | marky --out doc.html --open 63 | ``` 64 | 65 | > See `--help` for more info 66 | 67 | ## Install 68 | 69 | Install using [cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html) 70 | 71 | ```bash 72 | cargo install marky 73 | ``` 74 | 75 | ## Help 76 | 77 | ``` 78 | Markdown Magician 🧙 79 | 80 | Usage: marky [OPTIONS] [PATH] 81 | 82 | Arguments: 83 | [PATH] Read input from file 84 | 85 | Options: 86 | --completion 87 | [possible values: bash, elvish, fish, powershell, zsh] 88 | -t, --theme 89 | Theme to use 90 | --string 91 | Read input from string 92 | --themes 93 | List available themes 94 | --where-config 95 | Print config path 96 | -o, --out 97 | Output file 98 | --stdout 99 | Output to stdout 100 | -H, --highlight 101 | Enable syntax highligting with highlight.js 102 | -M, --math 103 | Enable math rendering with KaTeX 104 | -D, --diagrams 105 | Enable UML diagrams rendering with Mermaid 106 | -I, --include-images 107 | Include images into file as base64 encoded [possible values: local, remote, all] 108 | -z, --optimize-images 109 | Optimize included images to make them smaller 110 | -A, --all 111 | Enable all extra renderers 112 | -w, --watch 113 | Recompile file on save 114 | -l, --live 115 | Live preview in the browser 116 | --port 117 | Port of the live server [default: 8080] 118 | -O, --open 119 | Open output file in the default app 120 | -h, --help 121 | Print help 122 | -V, --version 123 | Print version 124 | ``` 125 | 126 | ## Build 127 | 128 | ```bash 129 | git clone https://github.com/metafates/marky.git 130 | cd marky 131 | cargo install --path . 132 | ``` 133 | 134 | ## Screenshots 135 | 136 | Some examples... 137 | 138 | ```bash 139 | marky README.md --theme sakura # default theme 140 | ``` 141 | 142 | ![sakura](https://user-images.githubusercontent.com/62389790/216391306-ecd73229-6342-4a79-8f7f-5f632a231a6f.png) 143 | 144 | ```bash 145 | marky README.md --theme air 146 | ``` 147 | 148 | ![air](https://user-images.githubusercontent.com/62389790/216391415-46ca090a-801d-423e-a523-dc3e59ed1f77.png) 149 | 150 | ```bash 151 | marky README.md --theme retro 152 | ``` 153 | 154 | ![retro](https://user-images.githubusercontent.com/62389790/216391465-ddfff1ad-3cd6-43b8-a193-fc9c664ec018.png) 155 | 156 | See `marky --themes` to show all available themes. 157 | 158 | You can also add your own themes, but it's not documented yet... 😴 159 | -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | use crate::{die, document, error, ioutil, note, themes}; 2 | use clap::{ArgGroup, Command, Parser, ValueHint}; 3 | use clap_complete::{Generator, Shell}; 4 | use colored::Colorize; 5 | use std::{io, path::PathBuf}; 6 | 7 | #[derive(Parser)] 8 | #[command(name = "marky", author, version, about, long_about = None)] 9 | #[clap(group( 10 | ArgGroup::new("input") 11 | .args(&["path", "string"]) 12 | .conflicts_with("info") 13 | ))] 14 | #[clap(group( 15 | ArgGroup::new("output") 16 | .args(&["out", "stdout"]) 17 | .conflicts_with("info") 18 | ))] 19 | #[clap(group( 20 | ArgGroup::new("watchers") 21 | .args(&["watch", "live"]) 22 | .conflicts_with("info") 23 | ))] 24 | pub struct Cli { 25 | #[arg(long = "completion", value_enum)] 26 | pub generator: Option, 27 | 28 | #[arg(short, long, help = "Theme to use")] 29 | pub theme: Option, 30 | 31 | #[arg(help = "Read input from file", value_hint = ValueHint::FilePath)] 32 | pub path: Option, 33 | 34 | #[arg(long, help = "Read input from string")] 35 | pub string: Option, 36 | 37 | #[arg(long, group = "info", help = "List available themes")] 38 | pub themes: bool, 39 | 40 | #[arg(long, group = "info", help = "Print config path")] 41 | pub where_config: bool, 42 | 43 | #[arg(short, long, help = "Output file", value_hint = ValueHint::FilePath)] 44 | pub out: Option, 45 | 46 | #[arg(long, help = "Output to stdout")] 47 | pub stdout: bool, 48 | 49 | #[arg( 50 | short = 'H', 51 | long, 52 | help = "Enable syntax highligting with highlight.js" 53 | )] 54 | pub highlight: bool, 55 | 56 | #[arg(short = 'M', long, help = "Enable math rendering with KaTeX")] 57 | pub math: bool, 58 | 59 | #[arg(short = 'D', long, help = "Enable UML diagrams rendering with Mermaid")] 60 | pub diagrams: bool, 61 | 62 | #[arg( 63 | short = 'I', 64 | long, 65 | value_enum, 66 | help = "Include images into file as base64 encoded" 67 | )] 68 | pub include_images: Option, 69 | 70 | #[arg( 71 | short = 'z', 72 | long, 73 | help = "Optimize included images to make them smaller" 74 | )] 75 | pub optimize_images: bool, 76 | 77 | #[arg(short = 'A', long, help = "Enable all extra renderers")] 78 | pub all: bool, 79 | 80 | #[arg(short, long, help = "Recompile file on save")] 81 | pub watch: bool, 82 | 83 | #[arg(short, long, help = "Live preview in the browser")] 84 | pub live: bool, 85 | 86 | #[arg(long, default_value = "8080", help = "Port of the live server")] 87 | pub port: u16, 88 | 89 | #[arg(short = 'O', long, help = "Open output file in the default app")] 90 | pub open: bool, 91 | } 92 | 93 | pub fn print_completions(gen: G, cmd: &mut Command) { 94 | clap_complete::generate(gen, cmd, cmd.get_name().to_string(), &mut io::stdout()) 95 | } 96 | 97 | impl Cli { 98 | pub fn get_markdown(&self) -> io::Result { 99 | if atty::isnt(atty::Stream::Stdin) { 100 | return ioutil::read_stdin(); 101 | } 102 | 103 | if let Some(path) = &self.path { 104 | return ioutil::read_path(&path); 105 | } 106 | 107 | if let Some(string) = &self.string { 108 | return Ok(string.clone()); 109 | } 110 | 111 | die!("no input is given, see {}", "--help".yellow()); 112 | } 113 | 114 | pub fn get_theme(&self) -> Result> { 115 | match &self.theme { 116 | Some(name) => { 117 | let available = themes::available_themes()?; 118 | 119 | match available.by_name(name) { 120 | Some(theme) => Ok(theme), 121 | None => { 122 | error!("unknown theme {}", name.cyan()); 123 | 124 | if let Some(closest) = available.closest_match(name) { 125 | note!("theme {} exists", closest.name.cyan()); 126 | } 127 | 128 | die!(); 129 | } 130 | } 131 | } 132 | None => Ok(themes::Theme::default()), 133 | } 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /src/document.rs: -------------------------------------------------------------------------------- 1 | use std::fs; 2 | 3 | use crate::info; 4 | use anyhow::Result; 5 | use colored::Colorize; 6 | use handlebars::Handlebars; 7 | use image::{DynamicImage, ImageOutputFormat}; 8 | use lol_html::{element, HtmlRewriter, Settings}; 9 | use serde::Serialize; 10 | use std::ffi::OsStr; 11 | use std::io::Cursor; 12 | use std::path::Path; 13 | 14 | use crate::included::{TEMPLATES_DIR, VENDOR_DIR}; 15 | use crate::themes::Theme; 16 | 17 | pub struct Document { 18 | pub text: String, 19 | pub options: RenderOptions, 20 | } 21 | 22 | #[derive(clap::ValueEnum, Clone, Copy, Debug, PartialEq)] 23 | pub enum IncludeLevel { 24 | Local, 25 | Remote, 26 | All, 27 | } 28 | 29 | #[derive(Clone)] 30 | pub struct RenderOptions { 31 | pub theme: Theme, 32 | pub highlight: bool, 33 | pub math: bool, 34 | pub diagrams: bool, 35 | pub live: bool, 36 | pub include_images: Option, 37 | pub optimize_images: bool, 38 | } 39 | 40 | #[derive(Serialize)] 41 | pub struct TemplateData { 42 | pub theme: String, 43 | pub highlight: bool, 44 | pub math: bool, 45 | pub diagrams: bool, 46 | pub compiled: String, 47 | pub title: String, 48 | pub websocket: String, 49 | pub script: String, 50 | pub live: bool, 51 | } 52 | 53 | impl Document { 54 | fn handlebars() -> Handlebars<'static> { 55 | let mut reg = Handlebars::new(); 56 | let template_string = TEMPLATES_DIR 57 | .get_file("template.hbs") 58 | .expect("must be present") 59 | .contents_utf8() 60 | .expect("template must be a valid utf8"); 61 | 62 | reg.register_template_string("html", template_string) 63 | .expect("must be a valid handlebars template"); 64 | 65 | reg 66 | } 67 | 68 | pub fn render_body(&self) -> String { 69 | let markdown_options = markdown::Options { 70 | parse: markdown::ParseOptions { 71 | constructs: markdown::Constructs { 72 | html_flow: true, 73 | html_text: true, 74 | math_flow: self.options.math, 75 | math_text: self.options.math, 76 | definition: true, 77 | ..markdown::Constructs::gfm() 78 | }, 79 | ..markdown::ParseOptions::gfm() 80 | }, 81 | compile: markdown::CompileOptions { 82 | allow_dangerous_html: true, 83 | ..markdown::CompileOptions::gfm() 84 | }, 85 | }; 86 | 87 | let html = markdown::to_html_with_options(self.text.as_str(), &markdown_options) 88 | .expect("never errors with MDX disabled"); 89 | 90 | if self.options.include_images.is_some() { 91 | self.include_images(html).unwrap() // TODO 92 | } else { 93 | html 94 | } 95 | } 96 | 97 | pub fn render(&self) -> Result> { 98 | let body = self.render_body(); 99 | 100 | let script: String = { 101 | let mut minified_script = Vec::new(); 102 | let script = VENDOR_DIR 103 | .get_file("js/script.js") 104 | .unwrap() 105 | .contents() 106 | .to_vec(); 107 | 108 | match minify_js::minify( 109 | minify_js::TopLevelMode::Global, 110 | script.clone(), 111 | &mut minified_script, 112 | ) { 113 | Ok(()) => String::from_utf8_lossy(minified_script.as_slice()).to_string(), 114 | Err(_) => String::from_utf8_lossy(script.as_slice()).to_string(), 115 | } 116 | }; 117 | 118 | let html = Self::handlebars().render( 119 | "html", 120 | &TemplateData { 121 | theme: self.options.theme.resolve()?, 122 | highlight: self.options.highlight, 123 | math: self.options.math, 124 | diagrams: self.options.diagrams, 125 | compiled: body, 126 | title: self.title().unwrap_or("Document".into()), 127 | live: self.options.live, 128 | websocket: VENDOR_DIR 129 | .get_file("js/reconnecting-websocket.js") 130 | .unwrap() 131 | .contents_utf8() 132 | .unwrap() 133 | .to_string(), 134 | script, 135 | }, 136 | )?; 137 | 138 | Ok(html.into_bytes()) 139 | } 140 | 141 | pub fn title(&self) -> Option { 142 | match markdown::to_mdast(&self.text, &markdown::ParseOptions::gfm()) { 143 | Ok(node) => Document::get_title_from_node(&node), 144 | Err(_) => None, 145 | } 146 | } 147 | 148 | fn get_title_from_node(node: &markdown::mdast::Node) -> Option { 149 | match node { 150 | markdown::mdast::Node::Heading(_) => Some(node.to_string()), 151 | _ => match node.children() { 152 | Some(children) => { 153 | for child in children.iter() { 154 | if let Some(title) = Self::get_title_from_node(&child) { 155 | return Some(title); 156 | } 157 | 158 | return None; 159 | } 160 | 161 | None 162 | } 163 | None => None, 164 | }, 165 | } 166 | } 167 | 168 | fn include_images(&self, html_page: String) -> anyhow::Result { 169 | let mut output = vec![]; 170 | 171 | let mut rewriter = HtmlRewriter::new( 172 | Settings { 173 | element_content_handlers: vec![element!("img[src]", |el| { 174 | let src = el.get_attribute("src").expect("src was required"); 175 | 176 | let data = { 177 | let level = self.options.include_images.expect("must be not none"); 178 | 179 | let include_remote = 180 | level == IncludeLevel::All || level == IncludeLevel::Remote; 181 | 182 | let include_local = 183 | level == IncludeLevel::All || level == IncludeLevel::Local; 184 | 185 | let is_remote = src.starts_with("http"); 186 | 187 | if is_remote && include_remote { 188 | info!("Downloading {}", src); 189 | 190 | if src.ends_with(".svg") { 191 | let svg_data = download_image(src.as_str())?; 192 | let base64_svg = base64::encode(&svg_data); 193 | el.set_attribute( 194 | "src", 195 | &format!("data:image/svg+xml;base64,{}", base64_svg), 196 | )?; 197 | None 198 | } else { 199 | Some(download_image(src.as_str())?) 200 | } 201 | } else if !is_remote && include_local { 202 | info!("Reading {}", src); 203 | 204 | let path = Path::new(&src); 205 | let is_svg = path.extension() == Some(OsStr::new("svg")); 206 | 207 | if is_svg { 208 | let svg_data = self.svg_to_base64(path)?; 209 | el.set_attribute("src", &svg_data)?; 210 | None 211 | } else { 212 | Some(fs::read(src)?) 213 | } 214 | } else { 215 | info!("Skipping {}", src); 216 | None 217 | } 218 | }; 219 | 220 | if let Some(data) = data { 221 | info!("Encoding to base64",); 222 | let img = image::load_from_memory(data.as_slice())?; 223 | el.set_attribute("src", &self.image_to_base64(&img)?)?; 224 | } 225 | 226 | Ok(()) 227 | })], 228 | ..Settings::default() 229 | }, 230 | |c: &[u8]| output.extend_from_slice(c), 231 | ); 232 | 233 | rewriter.write(html_page.as_bytes())?; 234 | rewriter.end()?; 235 | 236 | Ok(String::from_utf8(output)?) 237 | } 238 | 239 | fn image_to_base64(&self, img: &DynamicImage) -> anyhow::Result { 240 | let mut image_data: Vec = Vec::new(); 241 | img.write_to(&mut Cursor::new(&mut image_data), ImageOutputFormat::Png) 242 | .unwrap(); 243 | 244 | if self.options.optimize_images { 245 | info!("Optimizing image"); 246 | match oxipng::optimize_from_memory(image_data.as_slice(), &oxipng::Options::default()) { 247 | Ok(optimized) => image_data = optimized, 248 | Err(e) => return Err(anyhow::Error::new(e)), 249 | } 250 | } 251 | 252 | let res_base64 = base64::encode(image_data); 253 | Ok(format!("data:image/png;base64,{}", res_base64)) 254 | } 255 | 256 | fn svg_to_base64(&self, path: &Path) -> anyhow::Result { 257 | let svg_data = fs::read(path)?; 258 | let base64_svg = base64::encode(svg_data); 259 | let svg_data_uri = format!("data:image/svg+xml;base64,{}", base64_svg); 260 | Ok(svg_data_uri) 261 | } 262 | } 263 | 264 | fn download_image(url: &str) -> anyhow::Result> { 265 | Ok(reqwest::blocking::get(url)?.bytes()?.into()) 266 | } 267 | -------------------------------------------------------------------------------- /src/included.rs: -------------------------------------------------------------------------------- 1 | use include_dir::{include_dir, Dir}; 2 | 3 | pub static VENDOR_DIR: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/vendor"); 4 | pub static TEMPLATES_DIR: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/templates"); 5 | -------------------------------------------------------------------------------- /src/ioutil.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | fs::File, 3 | io::{self, Read}, 4 | path::PathBuf, 5 | }; 6 | 7 | pub fn read_stdin() -> io::Result { 8 | let mut buffer = Vec::new(); 9 | let mut stdin = io::stdin(); 10 | stdin.read_to_end(&mut buffer)?; 11 | 12 | Ok(String::from_utf8(buffer).unwrap()) 13 | } 14 | 15 | pub fn read_path(path: &PathBuf) -> io::Result { 16 | let mut buffer = String::new(); 17 | let mut file = File::open(path)?; 18 | file.read_to_string(&mut buffer)?; 19 | 20 | Ok(buffer) 21 | } 22 | -------------------------------------------------------------------------------- /src/log.rs: -------------------------------------------------------------------------------- 1 | #[macro_export] 2 | macro_rules! error { 3 | () => { 4 | eprintln!("{}", "error".red()) 5 | }; 6 | ($($arg:tt)*) => { 7 | eprintln!("{} {}", "error:".red(), format!($($arg)*)) 8 | }; 9 | } 10 | 11 | #[macro_export] 12 | macro_rules! success { 13 | () => { 14 | eprintln!("{}", "success".green()) 15 | }; 16 | ($($arg:tt)*) => { 17 | eprintln!("{} {}", "success:".green(), format!($($arg)*)) 18 | }; 19 | } 20 | 21 | #[macro_export] 22 | macro_rules! die { 23 | () => {{ 24 | std::process::exit(1); 25 | }}; 26 | ($($arg:tt)*) => {{ 27 | error!($($arg)*); 28 | std::process::exit(1); 29 | }}; 30 | } 31 | 32 | #[macro_export] 33 | macro_rules! info { 34 | () => { 35 | eprintln!("{}", "info".blue()) 36 | }; 37 | ($($arg:tt)*) => { 38 | eprintln!("{} {}", "info:".blue(), format!($($arg)*)) 39 | }; 40 | } 41 | 42 | #[macro_export] 43 | macro_rules! warn { 44 | () => { 45 | eprintln!("{}", "warning".yellow()) 46 | }; 47 | ($($arg:tt)*) => { 48 | eprintln!("{} {}", "warning:".yellow(), format!($($arg)*)) 49 | }; 50 | } 51 | 52 | #[macro_export] 53 | macro_rules! note { 54 | () => { 55 | eprintln!("{}", "note".yellow()) 56 | }; 57 | ($($arg:tt)*) => { 58 | eprintln!("{} {}", "note:".yellow(), format!($($arg)*)) 59 | }; 60 | } 61 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use clap::{CommandFactory, Parser}; 2 | use colored::Colorize; 3 | use std::path::PathBuf; 4 | 5 | mod cli; 6 | mod document; 7 | mod included; 8 | mod ioutil; 9 | mod log; 10 | mod paths; 11 | mod server; 12 | mod service; 13 | mod themes; 14 | mod watcher; 15 | 16 | async fn run() -> Result<(), Box> { 17 | let cli = cli::Cli::parse(); 18 | 19 | if let Some(generator) = cli.generator { 20 | let mut cmd = cli::Cli::command(); 21 | cli::print_completions(generator, &mut cmd); 22 | return Ok(()); 23 | } 24 | 25 | if cli.themes { 26 | for theme in themes::available_themes()?.themes.into_iter() { 27 | println!("{}", theme.name); 28 | } 29 | 30 | return Ok(()); 31 | } 32 | 33 | if cli.where_config { 34 | println!("{}", paths::dirs::config().display()); 35 | 36 | return Ok(()); 37 | } 38 | 39 | if let Some(path) = &cli.path { 40 | if path.is_dir() { 41 | die!("Path is a directory") 42 | } 43 | 44 | if !path.exists() { 45 | die!("No such file") 46 | } 47 | } 48 | 49 | let options = document::RenderOptions { 50 | theme: cli.get_theme()?, 51 | math: cli.all || cli.math, 52 | highlight: cli.all || cli.highlight, 53 | diagrams: cli.all || cli.diagrams, 54 | live: cli.live, 55 | include_images: cli.include_images, 56 | optimize_images: cli.optimize_images, 57 | }; 58 | 59 | info!("Using theme {}", options.theme.name.cyan()); 60 | if options.highlight { 61 | info!("Highlight.js syntax highlighting is enabled"); 62 | } 63 | 64 | if options.math { 65 | info!("KaTeX math rendering is enabled"); 66 | } 67 | 68 | if options.diagrams { 69 | info!("Mermaid diagrams rendering is enabled"); 70 | } 71 | 72 | let out = { 73 | let auto_extension = "html"; 74 | 75 | if let Some(out) = &cli.out { 76 | out.clone() 77 | } else if let Some(path) = &cli.path { 78 | path.with_extension(auto_extension) 79 | } else { 80 | PathBuf::new() 81 | .with_file_name("out") 82 | .with_extension(auto_extension) 83 | } 84 | }; 85 | 86 | if cli.watch || cli.live { 87 | if cli.path.is_none() { 88 | die!("watcher needs a file to watch"); 89 | } 90 | 91 | let path = &cli.path.unwrap(); 92 | 93 | if cli.live { 94 | watcher::watch_live(path, &options, cli.port).await?; 95 | } else { 96 | watcher::watch_file(path, &out, &options).await?; 97 | } 98 | 99 | return Ok(()); 100 | } 101 | 102 | let doc = document::Document { 103 | text: cli.get_markdown()?, 104 | options, 105 | }; 106 | let buffer = doc.render()?; 107 | 108 | if cli.stdout { 109 | let string = String::from_utf8(buffer).unwrap(); 110 | println!("{}", string); 111 | } else { 112 | std::fs::write(&out, &buffer)?; 113 | info!( 114 | "wrote {} to {}", 115 | humansize::format_size(buffer.len(), humansize::DECIMAL), 116 | &out.display().to_string().cyan(), 117 | ); 118 | 119 | if cli.open { 120 | open::that(&out)?; 121 | } 122 | } 123 | 124 | Ok(()) 125 | } 126 | 127 | #[tokio::main] 128 | async fn main() { 129 | let execution_start = std::time::Instant::now(); 130 | 131 | match run().await { 132 | Ok(_) => { 133 | let execution_duration = execution_start.elapsed(); 134 | 135 | success!( 136 | "took {}", 137 | format!("{}ms", execution_duration.as_millis()).yellow(), 138 | ) 139 | } 140 | Err(e) => die!("{}", e.to_string()), 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /src/paths.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | pub mod dirs { 4 | use super::PathBuf; 5 | 6 | pub fn config() -> PathBuf { 7 | let config_dir = dirs::config_dir().unwrap_or(".".into()); 8 | 9 | config_dir.join("marky") 10 | } 11 | } 12 | 13 | pub mod files { 14 | use super::PathBuf; 15 | 16 | pub fn themes() -> PathBuf { 17 | super::dirs::config().join("themes.toml") 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/server.rs: -------------------------------------------------------------------------------- 1 | use std::{cell::RefCell, net::SocketAddr, path::PathBuf}; 2 | 3 | use crate::document; 4 | use crate::{info, service, warn}; 5 | use axum::{routing::get, Extension, Router}; 6 | use colored::Colorize; 7 | use tokio::sync::{ 8 | oneshot, 9 | watch::{self, Sender}, 10 | }; 11 | 12 | #[derive(Clone)] 13 | pub struct Config { 14 | pub root_dir: PathBuf, 15 | pub render_options: document::RenderOptions, 16 | } 17 | 18 | /// Code is taken from the https://github.com/euclio/aurelius/ 19 | 20 | /// Markdown preview server. 21 | /// 22 | /// Listens for HTTP connections and serves a page containing a live markdown preview. The page 23 | /// contains JavaScript to open a websocket connection back to the server for rendering updates. 24 | #[derive(Debug)] 25 | pub struct Server { 26 | pub addr: SocketAddr, 27 | output: RefCell, 28 | tx: Sender, 29 | _shutdown_tx: oneshot::Sender<()>, 30 | } 31 | 32 | impl Server { 33 | pub fn bind(addr: &SocketAddr, config: Config) -> Self { 34 | let (tx, rx) = watch::channel(String::new()); 35 | let (shutdown_tx, shutdown_rx) = oneshot::channel(); 36 | 37 | let app = Router::new() 38 | .route("/", get(service::websocket_handler)) 39 | .fallback_service(get(service::serve_static_file)) 40 | .layer(Extension(rx)) 41 | .layer(Extension(config)); 42 | 43 | let http_server = axum::Server::bind(addr).serve(app.into_make_service()); 44 | let addr = http_server.local_addr(); 45 | 46 | info!("Listening on {}", addr); 47 | info!("Opening in browser"); 48 | 49 | if let Err(e) = open::that(format!("http://{}", addr)) { 50 | warn!("Failed to open the page: {}", e); 51 | } 52 | 53 | let http_server = http_server.with_graceful_shutdown(async move { 54 | let _ = shutdown_rx.await; 55 | }); 56 | 57 | tokio::spawn(http_server); 58 | 59 | Server { 60 | addr, 61 | output: RefCell::new(String::new()), 62 | tx, 63 | _shutdown_tx: shutdown_tx, 64 | } 65 | } 66 | 67 | pub async fn send(&self, document: &crate::document::Document) { 68 | self.output 69 | .replace(self.tx.send_replace(document.render_body())); 70 | } 71 | 72 | // TODO: use it 73 | pub async fn _shutdown(self) -> Result<(), ()> { 74 | self._shutdown_tx.send(()) 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/service.rs: -------------------------------------------------------------------------------- 1 | use axum::{ 2 | body::Body, 3 | extract::{ 4 | ws::{Message as AxumMessage, WebSocket, WebSocketUpgrade}, 5 | Extension, 6 | }, 7 | http::{Request, StatusCode}, 8 | response::{Html, IntoResponse}, 9 | }; 10 | use tokio::sync::watch::Receiver; 11 | use tower::util::ServiceExt; 12 | use tower_http::services::ServeDir; 13 | 14 | pub async fn websocket_handler( 15 | ws: Option, 16 | Extension(config): Extension, 17 | Extension(html_rx): Extension>, 18 | ) -> impl IntoResponse { 19 | if let Some(ws) = ws { 20 | return ws.on_upgrade(|ws| async { handle_websocket(ws, html_rx).await }); 21 | } 22 | 23 | let doc = crate::document::Document { 24 | text: "😴 Waiting for changes".into(), 25 | options: config.render_options, 26 | }; 27 | 28 | let buffer = doc.render().expect("Document with empty text must render"); 29 | let html = String::from_utf8(buffer).expect("Must be a valid utf8"); 30 | (StatusCode::OK, Html(html)).into_response() 31 | } 32 | 33 | async fn handle_websocket(mut socket: WebSocket, mut html_rx: Receiver) { 34 | while html_rx.changed().await.is_ok() { 35 | let html = html_rx.borrow().clone(); 36 | socket.send(AxumMessage::Text(html)).await.unwrap(); 37 | } 38 | 39 | let _ = socket.send(AxumMessage::Close(None)).await; 40 | } 41 | 42 | pub async fn serve_static_file( 43 | Extension(config): Extension, 44 | req: Request, 45 | ) -> impl IntoResponse { 46 | let service = ServeDir::new(config.root_dir); 47 | 48 | service 49 | .oneshot(req) 50 | .await 51 | .map_err(|e| (StatusCode::NOT_FOUND, e.to_string())) 52 | } 53 | -------------------------------------------------------------------------------- /src/themes.rs: -------------------------------------------------------------------------------- 1 | use crate::warn; 2 | use crate::{included::VENDOR_DIR, paths}; 3 | use anyhow::Result; 4 | use colored::Colorize; 5 | 6 | use std::fs::File; 7 | use std::io::{self, prelude::*}; 8 | use std::path::PathBuf; 9 | 10 | #[derive(serde::Deserialize, Clone)] 11 | pub struct Theme { 12 | pub name: String, 13 | 14 | path: Option, 15 | inline: Option, 16 | } 17 | 18 | impl Theme { 19 | pub fn resolve(&self) -> Result { 20 | let css = { 21 | if self.inline.is_some() { 22 | self.resolve_inline()? 23 | } else if self.path.is_some() { 24 | self.resolve_path()? 25 | } else { 26 | return Err(anyhow::Error::new(io::Error::new( 27 | std::io::ErrorKind::Other, 28 | "theme source is not specified", 29 | ))); 30 | } 31 | }; 32 | 33 | let result = minifier::css::minify(css.as_str()) 34 | .map(|m| m.to_string()) 35 | .unwrap_or(css); 36 | 37 | Ok(result) 38 | } 39 | 40 | fn resolve_inline(&self) -> std::io::Result { 41 | assert!(self.inline.is_some()); 42 | 43 | let inline = self.inline.as_ref().unwrap().to_string(); 44 | Ok(inline) 45 | } 46 | 47 | fn resolve_path(&self) -> std::io::Result { 48 | assert!(self.path.is_some()); 49 | 50 | let path = { 51 | let path = self.path.as_ref().unwrap(); 52 | 53 | if path.is_relative() { 54 | paths::dirs::config().join(path) 55 | } else { 56 | path.clone() 57 | } 58 | }; 59 | 60 | let mut file = File::open(path)?; 61 | let mut contents = String::new(); 62 | file.read_to_string(&mut contents)?; 63 | 64 | Ok(contents) 65 | } 66 | } 67 | 68 | impl Default for Theme { 69 | fn default() -> Self { 70 | Themes::default().by_name("sakura").unwrap() 71 | } 72 | } 73 | 74 | #[derive(serde::Deserialize)] 75 | pub struct Themes { 76 | pub themes: Vec, 77 | } 78 | 79 | impl Themes { 80 | pub fn by_name(&self, name: &str) -> Option { 81 | self.themes.iter().find(|theme| theme.name == name).cloned() 82 | } 83 | 84 | pub fn closest_match(&self, name: &str) -> Option { 85 | use levenshtein::levenshtein; 86 | 87 | self.themes 88 | .iter() 89 | .min_by(|a, b| { 90 | levenshtein(name, a.name.as_str()).cmp(&levenshtein(name, b.name.as_str())) 91 | }) 92 | .cloned() 93 | } 94 | } 95 | 96 | impl Default for Themes { 97 | fn default() -> Self { 98 | let themes: Vec = VENDOR_DIR 99 | .get_dir("themes") 100 | .expect("themes directory in vendor/ must be present") 101 | .entries() 102 | .into_iter() 103 | .filter_map(|entry| entry.as_file()) 104 | .filter_map(|file| { 105 | let path = file.path(); 106 | 107 | if path.extension().map(|ext| ext != "css").unwrap_or(true) { 108 | return None; 109 | } 110 | 111 | let name = path.file_stem().unwrap().to_str().unwrap().to_string(); 112 | match std::str::from_utf8(file.contents()) { 113 | Ok(contents) => Some((name, contents)), 114 | Err(e) => { 115 | warn!("can't parse theme {}: {}", name.cyan(), e); 116 | None 117 | } 118 | } 119 | }) 120 | .map(|(name, contents)| Theme { 121 | name, 122 | inline: Some(contents.to_string()), 123 | path: None, 124 | }) 125 | .collect(); 126 | 127 | Themes { themes } 128 | } 129 | } 130 | 131 | pub fn available_themes() -> Result { 132 | let mut default = Themes::default(); 133 | 134 | let themes_path = paths::files::themes(); 135 | if !themes_path.exists() { 136 | return Ok(default); 137 | } 138 | 139 | let mut file = File::open(themes_path)?; 140 | let mut contents = String::new(); 141 | file.read_to_string(&mut contents)?; 142 | 143 | let mut custom: Themes = toml::from_str(contents.as_str())?; 144 | 145 | default.themes.append(&mut custom.themes); 146 | 147 | Ok(default) 148 | } 149 | -------------------------------------------------------------------------------- /src/watcher.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | use colored::Colorize; 3 | use notify::Watcher; 4 | 5 | use crate::{document, error, info, ioutil}; 6 | use std::{ 7 | io, net, 8 | path::{Path, PathBuf}, 9 | }; 10 | 11 | fn recompile(path: &PathBuf, options: &document::RenderOptions) -> io::Result { 12 | match ioutil::read_path(path) { 13 | Ok(contents) => Ok(document::Document { 14 | text: contents, 15 | options: options.clone(), 16 | }), 17 | Err(e) => Err(e), 18 | } 19 | } 20 | 21 | macro_rules! watch { 22 | ($path: ident, $options:ident, $on_update:ident$(.$field:ident)*$( $arg:ident)*) => {{ 23 | info!("waiting for changes on {}", $path.display().to_string().cyan()); 24 | 25 | let (tx, rx) = std::sync::mpsc::channel(); 26 | let mut watcher = notify::RecommendedWatcher::new(tx, notify::Config::default())?; 27 | 28 | watcher.watch($path.as_path(), notify::RecursiveMode::NonRecursive)?; 29 | 30 | if let Ok(compiled) = recompile($path, $options) { 31 | $on_update$(.$field)*($($arg,)* &compiled).await; 32 | } 33 | 34 | for res in rx { 35 | match res { 36 | Ok(event) => { 37 | if event.kind.is_modify() { 38 | match recompile($path, $options) { 39 | Ok(compiled) => { 40 | $on_update$(.$field)*($($arg,)* &compiled).await; 41 | info!("updated") 42 | }, 43 | Err(e) => error!("compilation failed: {}", e) 44 | } 45 | } 46 | } 47 | Err(e) => error!("{}", e.to_string()), 48 | } 49 | } 50 | 51 | Ok(()) 52 | }}; 53 | } 54 | 55 | pub async fn watch_live( 56 | path: &PathBuf, 57 | options: &document::RenderOptions, 58 | port: u16, 59 | ) -> Result<(), Box> { 60 | let addr = net::SocketAddr::V4(net::SocketAddrV4::new( 61 | net::Ipv4Addr::new(127, 0, 0, 1), 62 | port, 63 | )); 64 | 65 | let config = crate::server::Config { 66 | root_dir: path 67 | .clone() 68 | .parent() 69 | .unwrap_or(Path::new(".")) 70 | .to_path_buf(), 71 | render_options: options.clone(), 72 | }; 73 | 74 | let server = crate::server::Server::bind(&addr, config); 75 | 76 | watch!(path, options, server.send) 77 | } 78 | 79 | pub async fn watch_file( 80 | path: &PathBuf, 81 | output: &PathBuf, 82 | options: &document::RenderOptions, 83 | ) -> Result<(), Box> { 84 | watch!(path, options, write_to_file output) 85 | } 86 | 87 | async fn write_to_file(path: &PathBuf, document: &document::Document) { 88 | match document.render() { 89 | Ok(rendered) => { 90 | if let Err(e) = std::fs::write(path, rendered) { 91 | error!("{}", e); 92 | } 93 | } 94 | Err(e) => error!("{}", e), 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /templates/template.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{#if highlight}} 9 | 10 | 11 | {{/if}} 12 | 13 | {{#if math}} 14 | 15 | 16 | {{/if}} 17 | 18 | {{#if diagrams}} 19 | 20 | {{/if}} 21 | 22 | 23 | 24 | {{ title }} 25 | 26 | 27 | 28 |
29 | {{{ compiled }}} 30 |
31 | 32 | {{#if live}} 33 | 34 | {{/if}} 35 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /vendor/js/reconnecting-websocket.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /vendor/js/script.js: -------------------------------------------------------------------------------- 1 | function setupDiagrams() { 2 | if (typeof mermaid === 'undefined') { 3 | return 4 | } 5 | 6 | mermaid.initialize({ startOnLoad: false }) 7 | const e = document.querySelectorAll("code.language-mermaid"); 8 | let n = 0; 9 | for (const t of e) { 10 | const e = `mermaid${n}`; 11 | n++; 12 | const o = (e) => { t.innerHTML = e } 13 | const d = t.textContent; 14 | mermaid.mermaidAPI.render(e, d, o) 15 | } 16 | } 17 | 18 | function setupMath() { 19 | if (typeof katex === 'undefined') { 20 | return 21 | } 22 | 23 | for (const e of document.querySelectorAll(".language-math")) { 24 | katex.render(e.textContent, e) 25 | } 26 | } 27 | 28 | function setupHighlight() { 29 | if (typeof hljs === 'undefined') { 30 | return 31 | } 32 | 33 | hljs.highlightAll(); 34 | } 35 | 36 | function setup() { 37 | setupMath() 38 | setupDiagrams() 39 | setupHighlight() 40 | } 41 | 42 | function setupWebSockets() { 43 | if (typeof ReconnectingWebSocket === 'undefined') { 44 | return 45 | } 46 | 47 | var webSocketUrl = 'ws://' + window.location.host; 48 | 49 | var socket = new ReconnectingWebSocket(webSocketUrl); 50 | socket.maxReconnectInterval = 5000; 51 | 52 | socket.onmessage = event => { 53 | document.getElementById('root').innerHTML = event.data; 54 | setup() 55 | } 56 | 57 | socket.onclose = () => { 58 | // Close the browser window. 59 | window.open('', '_self', ''); 60 | window.close(); 61 | } 62 | } 63 | 64 | document.addEventListener('DOMContentLoaded', () => { 65 | setup() 66 | setupWebSockets() 67 | }); 68 | -------------------------------------------------------------------------------- /vendor/themes/air.css: -------------------------------------------------------------------------------- 1 | @media print { 2 | *, 3 | *:before, 4 | *:after { 5 | background: transparent !important; 6 | color: #000 !important; 7 | box-shadow: none !important; 8 | text-shadow: none !important; 9 | } 10 | 11 | a, 12 | a:visited { 13 | text-decoration: underline; 14 | } 15 | 16 | a[href]:after { 17 | content: " (" attr(href) ")"; 18 | } 19 | 20 | abbr[title]:after { 21 | content: " (" attr(title) ")"; 22 | } 23 | 24 | a[href^="#"]:after, 25 | a[href^="javascript:"]:after { 26 | content: ""; 27 | } 28 | 29 | pre, 30 | blockquote { 31 | border: 1px solid #999; 32 | page-break-inside: avoid; 33 | } 34 | 35 | thead { 36 | display: table-header-group; 37 | } 38 | 39 | tr, 40 | img { 41 | page-break-inside: avoid; 42 | } 43 | 44 | img { 45 | max-width: 100% !important; 46 | } 47 | 48 | p, 49 | h2, 50 | h3 { 51 | orphans: 3; 52 | widows: 3; 53 | } 54 | 55 | h2, 56 | h3 { 57 | page-break-after: avoid; 58 | } 59 | } 60 | 61 | html { 62 | font-size: 12px; 63 | } 64 | 65 | @media screen and (min-width: 32rem) and (max-width: 48rem) { 66 | html { 67 | font-size: 15px; 68 | } 69 | } 70 | 71 | @media screen and (min-width: 48rem) { 72 | html { 73 | font-size: 16px; 74 | } 75 | } 76 | 77 | body { 78 | line-height: 1.85; 79 | } 80 | 81 | p, 82 | .air-p { 83 | font-size: 1rem; 84 | margin-bottom: 1.3rem; 85 | } 86 | 87 | h1, 88 | .air-h1, 89 | h2, 90 | .air-h2, 91 | h3, 92 | .air-h3, 93 | h4, 94 | .air-h4 { 95 | margin: 1.414rem 0 .5rem; 96 | font-weight: inherit; 97 | line-height: 1.42; 98 | } 99 | 100 | h1, 101 | .air-h1 { 102 | margin-top: 0; 103 | font-size: 3.998rem; 104 | } 105 | 106 | h2, 107 | .air-h2 { 108 | font-size: 2.827rem; 109 | } 110 | 111 | h3, 112 | .air-h3 { 113 | font-size: 1.999rem; 114 | } 115 | 116 | h4, 117 | .air-h4 { 118 | font-size: 1.414rem; 119 | } 120 | 121 | h5, 122 | .air-h5 { 123 | font-size: 1.121rem; 124 | } 125 | 126 | h6, 127 | .air-h6 { 128 | font-size: .88rem; 129 | } 130 | 131 | small, 132 | .air-small { 133 | font-size: .707em; 134 | } 135 | 136 | /* https://github.com/mrmrs/fluidity */ 137 | 138 | img, 139 | canvas, 140 | iframe, 141 | video, 142 | svg, 143 | select, 144 | textarea { 145 | max-width: 100%; 146 | } 147 | 148 | @import url(http://fonts.googleapis.com/css?family=Open+Sans:300italic,300); 149 | 150 | body { 151 | color: #444; 152 | font-family: 'Open Sans', Helvetica, sans-serif; 153 | font-weight: 300; 154 | margin: 6rem auto 1rem; 155 | max-width: 48rem; 156 | text-align: center; 157 | } 158 | 159 | img { 160 | border-radius: 50%; 161 | height: 200px; 162 | margin: 0 auto; 163 | width: 200px; 164 | } 165 | 166 | a, 167 | a:visited { 168 | color: #3498db; 169 | } 170 | 171 | a:hover, 172 | a:focus, 173 | a:active { 174 | color: #2980b9; 175 | } 176 | 177 | pre { 178 | background-color: #fafafa; 179 | padding: 1rem; 180 | text-align: left; 181 | } 182 | 183 | blockquote { 184 | margin: 0; 185 | border-left: 5px solid #7a7a7a; 186 | font-style: italic; 187 | padding: 1.33em; 188 | text-align: left; 189 | } 190 | 191 | ul, 192 | ol, 193 | li { 194 | text-align: left; 195 | } 196 | 197 | p { 198 | color: #777; 199 | } -------------------------------------------------------------------------------- /vendor/themes/awsm.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /*! 3 | * awsm.css v3.0.7 (https://igoradamenko.github.io/awsm.css/) 4 | * Copyright 2015 Igor Adamenko (https://igoradamenko.com) 5 | * Licensed under MIT (https://github.com/igoradamenko/awsm.css/blob/master/LICENSE.md) 6 | */ 7 | html{ 8 | font-family:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "PT Sans", "Open Sans", "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 9 | font-size:100%; 10 | line-height:1.4; 11 | background:white; 12 | color:black; 13 | -webkit-overflow-scrolling:touch; 14 | } 15 | 16 | body{ 17 | margin:1.2em; 18 | font-size:1rem; 19 | } 20 | @media (min-width: 20rem){ 21 | body{ 22 | font-size:calc(1rem + 0.00625 * (100vw - 20rem)); 23 | } 24 | } 25 | @media (min-width: 40rem){ 26 | body{ 27 | font-size:1.125rem; 28 | } 29 | } 30 | body header, 31 | body main, 32 | body footer, 33 | body article{ 34 | position:relative; 35 | max-width:40rem; 36 | margin:0 auto; 37 | } 38 | body > header{ 39 | margin-bottom:3.5em; 40 | } 41 | body > header h1{ 42 | margin:0; 43 | font-size:1.5em; 44 | } 45 | body > header p{ 46 | margin:0; 47 | font-size:0.85em; 48 | } 49 | body > footer{ 50 | margin-top:6em; 51 | padding-bottom:1.5em; 52 | text-align:center; 53 | font-size:0.8rem; 54 | color:#aaaaaa; 55 | } 56 | 57 | nav{ 58 | margin:1em 0; 59 | } 60 | nav ul{ 61 | list-style:none; 62 | margin:0; 63 | padding:0; 64 | } 65 | nav li{ 66 | display:inline-block; 67 | margin-right:1em; 68 | margin-bottom:0.25em; 69 | } 70 | nav li:last-child{ 71 | margin-right:0; 72 | } 73 | nav a:visited{ 74 | color:#0064c1; 75 | } 76 | nav a:hover{ 77 | color:#f00000; 78 | } 79 | 80 | ul, ol{ 81 | margin-top:0; 82 | padding-top:0; 83 | padding-left:2.5em; 84 | } 85 | ul li + li, ol li + li{ 86 | margin-top:0.25em; 87 | } 88 | ul li > details, ol li > details{ 89 | margin:0; 90 | } 91 | 92 | p{ 93 | margin:1em 0; 94 | -webkit-hyphens:auto; 95 | -ms-hyphens:auto; 96 | hyphens:auto; 97 | } 98 | p:first-child{ 99 | margin-top:0; 100 | } 101 | p:last-child{ 102 | margin-bottom:0; 103 | } 104 | p + ul, p + ol{ 105 | margin-top:-0.75em; 106 | } 107 | p img, p picture{ 108 | float:right; 109 | margin-bottom:0.5em; 110 | margin-left:0.5em; 111 | } 112 | p picture img{ 113 | float:none; 114 | margin:0; 115 | } 116 | 117 | dd{ 118 | margin-bottom:1em; 119 | margin-left:0; 120 | padding-left:2.5em; 121 | } 122 | 123 | dt{ 124 | font-weight:700; 125 | } 126 | 127 | blockquote{ 128 | margin:0; 129 | padding-left:2.5em; 130 | } 131 | 132 | aside{ 133 | margin:0.5em 0; 134 | font-style:italic; 135 | color:#aaaaaa; 136 | } 137 | @media (min-width: 65rem){ 138 | aside{ 139 | position:absolute; 140 | right:-12.5rem; 141 | width:9.375rem; 142 | max-width:9.375rem; 143 | margin:0; 144 | padding-left:0.5em; 145 | font-size:0.8em; 146 | border-left:1px solid #f2f2f2; 147 | } 148 | } 149 | aside:first-child{ 150 | margin-top:0; 151 | } 152 | aside:last-child{ 153 | margin-bottom:0; 154 | } 155 | 156 | section + section{ 157 | margin-top:2em; 158 | } 159 | 160 | h1, h2, h3, h4, h5, h6{ 161 | margin:1.25em 0 0; 162 | line-height:1.2; 163 | } 164 | h1:hover > a[href^="#"][id]:empty, h1:focus > a[href^="#"][id]:empty, h2:hover > a[href^="#"][id]:empty, h2:focus > a[href^="#"][id]:empty, h3:hover > a[href^="#"][id]:empty, h3:focus > a[href^="#"][id]:empty, h4:hover > a[href^="#"][id]:empty, h4:focus > a[href^="#"][id]:empty, h5:hover > a[href^="#"][id]:empty, h5:focus > a[href^="#"][id]:empty, h6:hover > a[href^="#"][id]:empty, h6:focus > a[href^="#"][id]:empty{ 165 | opacity:1; 166 | } 167 | h1 + p, h1 + details, h2 + p, h2 + details, h3 + p, h3 + details, h4 + p, h4 + details, h5 + p, h5 + details, h6 + p, h6 + details{ 168 | margin-top:0.5em; 169 | } 170 | h1 > a[href^="#"][id]:empty, h2 > a[href^="#"][id]:empty, h3 > a[href^="#"][id]:empty, h4 > a[href^="#"][id]:empty, h5 > a[href^="#"][id]:empty, h6 > a[href^="#"][id]:empty{ 171 | position:absolute; 172 | left:-0.65em; 173 | opacity:0; 174 | text-decoration:none; 175 | font-weight:400; 176 | line-height:1; 177 | color:#aaaaaa; 178 | } 179 | @media (min-width: 40rem){ 180 | h1 > a[href^="#"][id]:empty, h2 > a[href^="#"][id]:empty, h3 > a[href^="#"][id]:empty, h4 > a[href^="#"][id]:empty, h5 > a[href^="#"][id]:empty, h6 > a[href^="#"][id]:empty{ 181 | left:-0.8em; 182 | } 183 | } 184 | h1 > a[href^="#"][id]:empty:target, h1 > a[href^="#"][id]:empty:hover, h1 > a[href^="#"][id]:empty:focus, h2 > a[href^="#"][id]:empty:target, h2 > a[href^="#"][id]:empty:hover, h2 > a[href^="#"][id]:empty:focus, h3 > a[href^="#"][id]:empty:target, h3 > a[href^="#"][id]:empty:hover, h3 > a[href^="#"][id]:empty:focus, h4 > a[href^="#"][id]:empty:target, h4 > a[href^="#"][id]:empty:hover, h4 > a[href^="#"][id]:empty:focus, h5 > a[href^="#"][id]:empty:target, h5 > a[href^="#"][id]:empty:hover, h5 > a[href^="#"][id]:empty:focus, h6 > a[href^="#"][id]:empty:target, h6 > a[href^="#"][id]:empty:hover, h6 > a[href^="#"][id]:empty:focus{ 185 | opacity:1; 186 | box-shadow:none; 187 | color:black; 188 | } 189 | h1 > a[href^="#"][id]:empty:target:focus, h2 > a[href^="#"][id]:empty:target:focus, h3 > a[href^="#"][id]:empty:target:focus, h4 > a[href^="#"][id]:empty:target:focus, h5 > a[href^="#"][id]:empty:target:focus, h6 > a[href^="#"][id]:empty:target:focus{ 190 | outline:none; 191 | } 192 | h1 > a[href^="#"][id]:empty::before, h2 > a[href^="#"][id]:empty::before, h3 > a[href^="#"][id]:empty::before, h4 > a[href^="#"][id]:empty::before, h5 > a[href^="#"][id]:empty::before, h6 > a[href^="#"][id]:empty::before{ 193 | content:"§ "; 194 | } 195 | 196 | h1{ 197 | font-size:2.5em; 198 | } 199 | 200 | h2{ 201 | font-size:1.75em; 202 | } 203 | 204 | h3{ 205 | font-size:1.25em; 206 | } 207 | 208 | h4{ 209 | font-size:1.15em; 210 | } 211 | 212 | h5{ 213 | font-size:1em; 214 | } 215 | 216 | h6{ 217 | margin-top:1em; 218 | font-size:1em; 219 | color:#aaaaaa; 220 | } 221 | 222 | article + article{ 223 | margin-top:4em; 224 | } 225 | article header p{ 226 | font-size:0.6em; 227 | color:#aaaaaa; 228 | } 229 | article header p + h1, article header p + h2{ 230 | margin-top:-0.25em; 231 | } 232 | article header h1 + p, article header h2 + p{ 233 | margin-top:0.25em; 234 | } 235 | article header h1 a, article header h2 a{ 236 | color:black; 237 | } 238 | article header h1 a:visited, article header h2 a:visited{ 239 | color:#aaaaaa; 240 | } 241 | article header h1 a:visited:hover, article header h2 a:visited:hover{ 242 | color:#f00000; 243 | } 244 | article > footer{ 245 | margin-top:1.5em; 246 | font-size:0.85em; 247 | } 248 | 249 | a{ 250 | color:#0064c1; 251 | } 252 | a:visited{ 253 | color:#8d39d0; 254 | } 255 | a:hover, a:active{ 256 | outline-width:0; 257 | } 258 | a:hover{ 259 | color:#f00000; 260 | } 261 | a abbr{ 262 | font-size:1em; 263 | } 264 | 265 | abbr{ 266 | margin-right:-0.075em; 267 | text-decoration:none; 268 | -webkit-hyphens:none; 269 | -ms-hyphens:none; 270 | hyphens:none; 271 | letter-spacing:0.075em; 272 | font-size:0.9em; 273 | } 274 | 275 | img, picture{ 276 | display:block; 277 | max-width:100%; 278 | margin:0 auto; 279 | } 280 | 281 | audio, video{ 282 | width:100%; 283 | max-width:100%; 284 | } 285 | 286 | figure{ 287 | margin:1em 0 0.5em; 288 | padding:0; 289 | } 290 | figure + p{ 291 | margin-top:0.5em; 292 | } 293 | figure figcaption{ 294 | opacity:0.65; 295 | font-size:0.85em; 296 | } 297 | 298 | table{ 299 | display:inline-block; 300 | border-spacing:0; 301 | border-collapse:collapse; 302 | overflow-x:auto; 303 | max-width:100%; 304 | text-align:left; 305 | vertical-align:top; 306 | background:linear-gradient(rgba(0, 0, 0, 0.15) 0%, rgba(0, 0, 0, 0.15) 100%) 0 0, linear-gradient(rgba(0, 0, 0, 0.15) 0%, rgba(0, 0, 0, 0.15) 100%) 100% 0; 307 | background-attachment:scroll, scroll; 308 | background-size:1px 100%, 1px 100%; 309 | background-repeat:no-repeat, no-repeat; 310 | } 311 | table caption{ 312 | font-size:0.9em; 313 | background:white; 314 | } 315 | table td, table th{ 316 | padding:0.35em 0.75em; 317 | vertical-align:top; 318 | font-size:0.9em; 319 | border:1px solid #f2f2f2; 320 | border-top:0; 321 | border-left:0; 322 | } 323 | table td:first-child, table th:first-child{ 324 | padding-left:0; 325 | background-image:linear-gradient(to right, white 50%, rgba(255, 255, 255, 0) 100%); 326 | background-size:2px 100%; 327 | background-repeat:no-repeat; 328 | } 329 | table td:last-child, table th:last-child{ 330 | padding-right:0; 331 | border-right:0; 332 | background-image:linear-gradient(to left, white 50%, rgba(255, 255, 255, 0) 100%); 333 | background-position:100% 0; 334 | background-size:2px 100%; 335 | background-repeat:no-repeat; 336 | } 337 | table td:only-child, table th:only-child{ 338 | background-image:linear-gradient(to right, white 50%, rgba(255, 255, 255, 0) 100%), linear-gradient(to left, white 50%, rgba(255, 255, 255, 0) 100%); 339 | background-position:0 0, 100% 0; 340 | background-size:2px 100%, 2px 100%; 341 | background-repeat:no-repeat, no-repeat; 342 | } 343 | table th{ 344 | line-height:1.2; 345 | } 346 | 347 | form{ 348 | margin-right:auto; 349 | margin-left:auto; 350 | } 351 | @media (min-width: 40rem){ 352 | form{ 353 | max-width:80%; 354 | } 355 | } 356 | form select, form label{ 357 | display:block; 358 | } 359 | form label:not(:first-child){ 360 | margin-top:1em; 361 | } 362 | form p label{ 363 | display:inline; 364 | } 365 | form p label + label{ 366 | margin-left:1em; 367 | } 368 | form legend:first-child + label{ 369 | margin-top:0; 370 | } 371 | form select, form input[type], form textarea{ 372 | margin-bottom:1em; 373 | } 374 | form input[type=checkbox], form input[type=radio]{ 375 | margin-bottom:0; 376 | } 377 | 378 | fieldset{ 379 | margin:0; 380 | padding:0.5em 1em; 381 | border:1px solid #aaaaaa; 382 | } 383 | 384 | legend{ 385 | color:#aaaaaa; 386 | } 387 | 388 | button{ 389 | outline:none; 390 | box-sizing:border-box; 391 | height:2em; 392 | margin:0; 393 | padding:calc(.25em - 1px) 0.5em; 394 | font-family:inherit; 395 | font-size:1em; 396 | border:1px solid #aaaaaa; 397 | border-radius:2px; 398 | background:white; 399 | color:black; 400 | display:inline-block; 401 | width:auto; 402 | background:#f2f2f2; 403 | color:black; 404 | cursor:pointer; 405 | } 406 | button:focus{ 407 | border:1px solid black; 408 | } 409 | button:not([disabled]):hover{ 410 | border:1px solid black; 411 | } 412 | button:active{ 413 | background-color:#aaaaaa; 414 | } 415 | button[disabled]{ 416 | color:#aaaaaa; 417 | cursor:not-allowed; 418 | } 419 | 420 | select{ 421 | outline:none; 422 | box-sizing:border-box; 423 | height:2em; 424 | margin:0; 425 | padding:calc(.25em - 1px) 0.5em; 426 | font-family:inherit; 427 | font-size:1em; 428 | border:1px solid #aaaaaa; 429 | border-radius:2px; 430 | background:white; 431 | color:black; 432 | display:inline-block; 433 | width:auto; 434 | background:#f2f2f2; 435 | color:black; 436 | cursor:pointer; 437 | padding-right:1.2em; 438 | background-position:top 55% right 0.35em; 439 | background-size:0.5em; 440 | background-repeat:no-repeat; 441 | -webkit-appearance:none; 442 | -moz-appearance:none; 443 | appearance:none; 444 | background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 3 2'%3E%3Cpath fill='rgb(170, 170, 170)' fill-rule='nonzero' d='M1.5 2L3 0H0z'/%3E%3C/svg%3E"); 445 | } 446 | select:focus{ 447 | border:1px solid black; 448 | } 449 | select:not([disabled]):hover{ 450 | border:1px solid black; 451 | } 452 | select:active{ 453 | background-color:#aaaaaa; 454 | } 455 | select[disabled]{ 456 | color:#aaaaaa; 457 | cursor:not-allowed; 458 | } 459 | select:not([disabled]):focus, select:not([disabled]):hover{ 460 | background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 3 2'%3E%3Cpath fill='rgb(0, 0, 0)' fill-rule='nonzero' d='M1.5 2L3 0H0z'/%3E%3C/svg%3E"); 461 | } 462 | 463 | input[type=text], input[type=password], input[type^=date], input[type=email], input[type=number], input[type=search], input[type=tel], input[type=time], input[type=month], input[type=week], input[type=url]{ 464 | outline:none; 465 | box-sizing:border-box; 466 | height:2em; 467 | margin:0; 468 | padding:calc(.25em - 1px) 0.5em; 469 | font-family:inherit; 470 | font-size:1em; 471 | border:1px solid #aaaaaa; 472 | border-radius:2px; 473 | background:white; 474 | color:black; 475 | display:block; 476 | width:100%; 477 | line-height:calc(2em - 1px * 2 - (.25em - 1px) * 2); 478 | -webkit-appearance:none; 479 | -moz-appearance:none; 480 | appearance:none; 481 | } 482 | input[type=text]:focus, input[type=password]:focus, input[type^=date]:focus, input[type=email]:focus, input[type=number]:focus, input[type=search]:focus, input[type=tel]:focus, input[type=time]:focus, input[type=month]:focus, input[type=week]:focus, input[type=url]:focus{ 483 | border:1px solid black; 484 | } 485 | input[type=text]::-moz-placeholder, input[type=password]::-moz-placeholder, input[type^=date]::-moz-placeholder, input[type=email]::-moz-placeholder, input[type=number]::-moz-placeholder, input[type=search]::-moz-placeholder, input[type=tel]::-moz-placeholder, input[type=time]::-moz-placeholder, input[type=month]::-moz-placeholder, input[type=week]::-moz-placeholder, input[type=url]::-moz-placeholder{ 486 | color:#aaaaaa; 487 | } 488 | input[type=text]::-webkit-input-placeholder, input[type=password]::-webkit-input-placeholder, input[type^=date]::-webkit-input-placeholder, input[type=email]::-webkit-input-placeholder, input[type=number]::-webkit-input-placeholder, input[type=search]::-webkit-input-placeholder, input[type=tel]::-webkit-input-placeholder, input[type=time]::-webkit-input-placeholder, input[type=month]::-webkit-input-placeholder, input[type=week]::-webkit-input-placeholder, input[type=url]::-webkit-input-placeholder{ 489 | color:#aaaaaa; 490 | } 491 | input[type=text]:-ms-input-placeholder, input[type=password]:-ms-input-placeholder, input[type^=date]:-ms-input-placeholder, input[type=email]:-ms-input-placeholder, input[type=number]:-ms-input-placeholder, input[type=search]:-ms-input-placeholder, input[type=tel]:-ms-input-placeholder, input[type=time]:-ms-input-placeholder, input[type=month]:-ms-input-placeholder, input[type=week]:-ms-input-placeholder, input[type=url]:-ms-input-placeholder{ 492 | color:#aaaaaa; 493 | } 494 | input[type=submit], input[type=button], input[type=reset]{ 495 | outline:none; 496 | box-sizing:border-box; 497 | height:2em; 498 | margin:0; 499 | padding:calc(.25em - 1px) 0.5em; 500 | font-family:inherit; 501 | font-size:1em; 502 | border:1px solid #aaaaaa; 503 | border-radius:2px; 504 | background:white; 505 | color:black; 506 | display:inline-block; 507 | width:auto; 508 | background:#f2f2f2; 509 | color:black; 510 | cursor:pointer; 511 | -webkit-appearance:none; 512 | -moz-appearance:none; 513 | appearance:none; 514 | } 515 | input[type=submit]:focus, input[type=button]:focus, input[type=reset]:focus{ 516 | border:1px solid black; 517 | } 518 | input[type=submit]:not([disabled]):hover, input[type=button]:not([disabled]):hover, input[type=reset]:not([disabled]):hover{ 519 | border:1px solid black; 520 | } 521 | input[type=submit]:active, input[type=button]:active, input[type=reset]:active{ 522 | background-color:#aaaaaa; 523 | } 524 | input[type=submit][disabled], input[type=button][disabled], input[type=reset][disabled]{ 525 | color:#aaaaaa; 526 | cursor:not-allowed; 527 | } 528 | input[type=color]{ 529 | outline:none; 530 | box-sizing:border-box; 531 | height:2em; 532 | margin:0; 533 | padding:calc(.25em - 1px) 0.5em; 534 | font-family:inherit; 535 | font-size:1em; 536 | border:1px solid #aaaaaa; 537 | border-radius:2px; 538 | background:white; 539 | color:black; 540 | display:block; 541 | width:100%; 542 | line-height:calc(2em - 1px * 2 - (.25em - 1px) * 2); 543 | -webkit-appearance:none; 544 | -moz-appearance:none; 545 | appearance:none; 546 | width:6em; 547 | } 548 | input[type=color]:focus{ 549 | border:1px solid black; 550 | } 551 | input[type=color]::-moz-placeholder{ 552 | color:#aaaaaa; 553 | } 554 | input[type=color]::-webkit-input-placeholder{ 555 | color:#aaaaaa; 556 | } 557 | input[type=color]:-ms-input-placeholder{ 558 | color:#aaaaaa; 559 | } 560 | input[type=color]:hover{ 561 | border:1px solid black; 562 | } 563 | input[type=file]{ 564 | outline:none; 565 | box-sizing:border-box; 566 | height:2em; 567 | margin:0; 568 | padding:calc(.25em - 1px) 0.5em; 569 | font-family:inherit; 570 | font-size:1em; 571 | border:1px solid #aaaaaa; 572 | border-radius:2px; 573 | background:white; 574 | color:black; 575 | display:inline-block; 576 | width:auto; 577 | background:#f2f2f2; 578 | color:black; 579 | cursor:pointer; 580 | display:block; 581 | width:100%; 582 | height:auto; 583 | padding:0.75em 0.5em; 584 | font-size:12px; 585 | line-height:1; 586 | } 587 | input[type=file]:focus{ 588 | border:1px solid black; 589 | } 590 | input[type=file]:not([disabled]):hover{ 591 | border:1px solid black; 592 | } 593 | input[type=file]:active{ 594 | background-color:#aaaaaa; 595 | } 596 | input[type=file][disabled]{ 597 | color:#aaaaaa; 598 | cursor:not-allowed; 599 | } 600 | input[type=checkbox], input[type=radio]{ 601 | margin:-0.2em 0.75em 0 0; 602 | vertical-align:middle; 603 | } 604 | 605 | textarea{ 606 | outline:none; 607 | box-sizing:border-box; 608 | height:2em; 609 | margin:0; 610 | padding:calc(.25em - 1px) 0.5em; 611 | font-family:inherit; 612 | font-size:1em; 613 | border:1px solid #aaaaaa; 614 | border-radius:2px; 615 | background:white; 616 | color:black; 617 | display:block; 618 | width:100%; 619 | line-height:calc(2em - 1px * 2 - (.25em - 1px) * 2); 620 | -webkit-appearance:none; 621 | -moz-appearance:none; 622 | appearance:none; 623 | height:4.5em; 624 | resize:vertical; 625 | padding-top:0.5em; 626 | padding-bottom:0.5em; 627 | } 628 | textarea:focus{ 629 | border:1px solid black; 630 | } 631 | textarea::-moz-placeholder{ 632 | color:#aaaaaa; 633 | } 634 | textarea::-webkit-input-placeholder{ 635 | color:#aaaaaa; 636 | } 637 | textarea:-ms-input-placeholder{ 638 | color:#aaaaaa; 639 | } 640 | 641 | output{ 642 | display:block; 643 | } 644 | 645 | code, kbd, var, samp{ 646 | font-family:Consolas, "Lucida Console", Monaco, monospace; 647 | font-style:normal; 648 | } 649 | 650 | pre{ 651 | overflow-x:auto; 652 | font-size:0.8em; 653 | background:linear-gradient(rgba(0, 0, 0, 0.15) 0%, rgba(0, 0, 0, 0.15) 100%) 0 0, linear-gradient(rgba(0, 0, 0, 0.15) 0%, rgba(0, 0, 0, 0.15) 100%) 100% 0; 654 | background-attachment:scroll, scroll; 655 | background-size:1px 100%, 1px 100%; 656 | background-repeat:no-repeat, no-repeat; 657 | } 658 | pre > code{ 659 | display:inline-block; 660 | overflow-x:visible; 661 | box-sizing:border-box; 662 | min-width:100%; 663 | border-right:3px solid white; 664 | border-left:1px solid white; 665 | } 666 | 667 | hr{ 668 | height:1px; 669 | margin:2em 0; 670 | border:0; 671 | background:#f2f2f2; 672 | } 673 | 674 | details{ 675 | margin:1em 0; 676 | } 677 | details[open]{ 678 | padding-bottom:0.5em; 679 | border-bottom:1px solid #f2f2f2; 680 | } 681 | 682 | summary{ 683 | display:inline-block; 684 | font-weight:700; 685 | border-bottom:1px dashed; 686 | cursor:pointer; 687 | } 688 | summary::-webkit-details-marker{ 689 | display:none; 690 | } 691 | 692 | noscript{ 693 | color:#d00000; 694 | } 695 | 696 | ::selection{ 697 | background:rgba(0, 100, 193, 0.25); 698 | } -------------------------------------------------------------------------------- /vendor/themes/axist.css: -------------------------------------------------------------------------------- 1 | /* 2 | - 3.815rem 3 | - 3.052rem 4 | - 2.441rem 5 | - 1.953rem 6 | - 1.563rem 7 | - 1.25rem 8 | - 1rem 9 | - 0.8rem 10 | - 0.64rem 11 | - 0.512rem 12 | - 0.41rem 13 | - 0.328rem 14 | - 0.262rem 15 | - 0.209rem 16 | */ 17 | 18 | :root { 19 | --primary: #1524d9; 20 | --light-primary: #2332ea; 21 | --secondary: #ff2e88; 22 | --light-secondary: #fc77b1; 23 | --red: red; 24 | --black: #212529; 25 | --white: #fdfdfd; 26 | --dark-gray: #343334; 27 | --gray: #616060; 28 | --light-gray: #ccc; 29 | --lighter-gray: #f6f6f6; 30 | --font-sans-serif: 31 | system-ui, 32 | -apple-system, 33 | segoe ui, 34 | roboto, 35 | ubuntu, 36 | helvetica, 37 | cantarell, 38 | noto sans, 39 | sans-serif; 40 | --font-monospace: 41 | menlo, 42 | monaco, 43 | lucida console, 44 | liberation mono, 45 | dejavu sans mono, 46 | bitstream vera sans mono, 47 | courier new, 48 | monospace, 49 | serif; 50 | --boder-radius: 0.2rem; 51 | } 52 | 53 | * { 54 | box-sizing: border-box; 55 | margin: 0; 56 | padding: 0; 57 | text-rendering: geometricPrecision; 58 | -webkit-font-smoothing: antialiased; 59 | -moz-osx-font-smoothing: grayscale; 60 | -webkit-tap-highlight-color: transparent; 61 | font-family: var(--font-sans-serif); 62 | } 63 | 64 | html { 65 | font-size: calc(16px + ((100vw - 600px) / 250)); 66 | padding: 0; 67 | text-decoration-skip-ink: "auto"; 68 | line-height: 1.953rem; 69 | margin: auto; 70 | min-height: 100%; 71 | overflow-x: hidden; 72 | max-width: 1140px; 73 | } 74 | 75 | body { 76 | padding: 0; 77 | margin: calc((100vh / 25) * 1.563) calc((100vw / 25) * 1.563); 78 | background-color: var(--white); 79 | color: var(--black); 80 | caret-color: var(--black); 81 | word-wrap: break-word; 82 | } 83 | 84 | h1, 85 | h2, 86 | h3, 87 | h4, 88 | h5, 89 | h6 { 90 | margin-bottom: 1rem; 91 | margin-top: 1em; 92 | font-weight: bold; 93 | } 94 | 95 | h1 { 96 | font-size: 3.052rem; 97 | letter-spacing: -0.15rem; 98 | line-height: 1; 99 | } 100 | 101 | h2 { 102 | font-size: 2.441rem; 103 | letter-spacing: -0.12rem; 104 | line-height: 1.2; 105 | } 106 | 107 | h3 { 108 | font-size: 1.953rem; 109 | letter-spacing: -0.09rem; 110 | line-height: 1.2; 111 | } 112 | 113 | h4 { 114 | font-size: 1.563rem; 115 | letter-spacing: -0.06rem; 116 | line-height: 1.3; 117 | } 118 | 119 | h5 { 120 | font-size: 1.25rem; 121 | letter-spacing: -0.03rem; 122 | line-height: 1.4; 123 | } 124 | 125 | h6 { 126 | font-size: 1rem; 127 | letter-spacing: 0; 128 | line-height: 1.5; 129 | } 130 | 131 | p { 132 | margin-bottom: 1.563rem; 133 | } 134 | 135 | p > *:last-child { 136 | margin-bottom: 0; 137 | } 138 | 139 | blockquote { 140 | border-left: 1px solid var(--light-gray); 141 | padding: 0 1rem; 142 | margin-bottom: 1.563rem; 143 | } 144 | 145 | a { 146 | color: var(--primary); 147 | text-decoration: none; 148 | } 149 | 150 | @media (hover: hover) { 151 | a:hover { 152 | text-decoration: underline; 153 | } 154 | } 155 | 156 | small { 157 | font-size: 0.888rem; 158 | } 159 | 160 | hr { 161 | border: 0; 162 | height: 2px; 163 | margin: 1rem 0; 164 | background: var(--light-gray); 165 | } 166 | 167 | fieldset { 168 | border: none; 169 | padding: 0; 170 | margin: 0; 171 | } 172 | 173 | label, 174 | legend { 175 | font-weight: bold; 176 | display: inline-block; 177 | } 178 | 179 | input[type="email"], 180 | input[type="text"], 181 | input[type="number"], 182 | input[type="password"], 183 | input[type="date"], 184 | input[type="month"], 185 | input[type="week"], 186 | input[type="datetime"], 187 | input[type="datetime-local"], 188 | input[type="url"], 189 | input[type="search"], 190 | input[type="tel"], 191 | input:not([type]) { 192 | display: block; 193 | padding: 1rem; 194 | font-size: 1rem; 195 | border: 2px solid var(--lighter-gray); 196 | color: var(--black); 197 | appearance: none; 198 | border-radius: var(--boder-radius); 199 | background-color: var(--lighter-gray); 200 | -webkit-appearance: none; 201 | -moz-appearance: none; 202 | } 203 | 204 | select { 205 | display: block; 206 | padding: 1rem; 207 | font-size: 1em; 208 | border: 2px solid var(--lighter-gray); 209 | border-radius: var(--boder-radius); 210 | color: var(--black); 211 | background-color: var(--lighter-gray); 212 | appearance: none; 213 | -webkit-appearance: none; 214 | -moz-appearance: none; 215 | } 216 | 217 | textarea { 218 | display: block; 219 | font-size: 1rem; 220 | padding: 1rem; 221 | line-height: 1rem; 222 | color: var(--black); 223 | border-radius: var(--boder-radius); 224 | border: 2px solid var(--lighter-gray); 225 | background-color: var(--lighter-gray); 226 | box-sizing: border-box; 227 | resize: none; 228 | appearance: none; 229 | -webkit-appearance: none; 230 | -moz-appearance: none; 231 | } 232 | 233 | input:focus, 234 | select:focus, 235 | textarea:focus { 236 | outline: none; 237 | border: 2px solid var(--primary); 238 | } 239 | 240 | input:invalid, 241 | select:invalid, 242 | textarea:invalid { 243 | border: 2px solid var(--red); 244 | outline: none; 245 | } 246 | 247 | input[type="checkbox"]:hover, 248 | input[type="radio"]:hover { 249 | cursor: pointer; 250 | } 251 | 252 | input[type="submit"], 253 | input[type="reset"], 254 | input[type="button"], 255 | button { 256 | padding: 0.5rem 1.25rem; 257 | font-size: 1rem; 258 | border: 0; 259 | border-radius: var(--boder-radius); 260 | color: var(--lighter-gray); 261 | height: 2.5rem; 262 | background-color: var(--primary); 263 | -webkit-appearance: none; 264 | -moz-appearance: none; 265 | font-weight: bold; 266 | } 267 | 268 | @media (hover: hover) { 269 | input[type="reset"]:hover, 270 | input[type="submit"]:hover, 271 | input[type="button"]:hover, 272 | button:hover { 273 | cursor: pointer; 274 | background-color: var(--light-primary); 275 | } 276 | } 277 | 278 | button:focus-visible, 279 | input[type="submit"]:focus-visible, 280 | input[type="reset"]:focus-visible, 281 | input[type="button"]:focus-visible { 282 | border-color: var(--light-primary); 283 | outline: none; 284 | } 285 | 286 | input[disabled], 287 | button:disabled { 288 | background-color: var(--gray); 289 | } 290 | 291 | table { 292 | width: 100%; 293 | border-collapse: collapse; 294 | margin: 1.75rem 0; 295 | font-variant-numeric: tabular-nums; 296 | } 297 | 298 | th, 299 | td { 300 | vertical-align: top; 301 | border-bottom: 2px solid var(--light-gray); 302 | line-height: 15px; 303 | padding: 15px; 304 | } 305 | 306 | th { 307 | font-weight: bold; 308 | text-align: left; 309 | color: var(--dark-gray); 310 | } 311 | 312 | code, 313 | pre { 314 | font-family: var(--font-monospace); 315 | color: var(--dark-gray); 316 | background-color: var(--lighter-gray); 317 | font-size: 0.8rem; 318 | vertical-align: middle; 319 | overflow: scroll; 320 | border-radius: var(--boder-radius); 321 | } 322 | 323 | code { 324 | white-space: nowrap; 325 | vertical-align: baseline; 326 | padding: 0 0.328rem; 327 | } 328 | 329 | pre { 330 | white-space: pre; 331 | margin: 0.262rem 0; 332 | padding: 0.64rem 1rem; 333 | } 334 | 335 | pre::after { 336 | content: " "; 337 | } 338 | 339 | ul { 340 | margin: 0; 341 | padding: 0 1px; 342 | list-style: disc outside; 343 | font-variant-numeric: tabular-nums; 344 | } 345 | 346 | ol { 347 | list-style: decimal outside; 348 | } 349 | 350 | ol, 351 | ul { 352 | padding-left: 1rem; 353 | margin-bottom: 1rem; 354 | } 355 | 356 | li { 357 | list-style-position: inside; 358 | } 359 | 360 | kbd { 361 | display: inline-block; 362 | padding: 0 0.328rem; 363 | font-family: 364 | "SFMono-Regular", 365 | Consolas, 366 | "Liberation Mono", 367 | Menlo, 368 | Courier, 369 | monospace; 370 | font-size: 0.64rem; 371 | color: var(--dark-gray); 372 | vertical-align: middle; 373 | background-color: #f9f9f9; 374 | border: solid 1px #d8d8d8; 375 | border-bottom: solid 2px #a6a5a6; 376 | border-radius: 5px; 377 | } 378 | 379 | abbr { 380 | text-decoration: none; 381 | border-bottom: 2px dashed #949394; 382 | } 383 | 384 | @media (hover: hover) { 385 | abbr:hover { 386 | cursor: help; 387 | } 388 | } -------------------------------------------------------------------------------- /vendor/themes/modest.css: -------------------------------------------------------------------------------- 1 | @media print { 2 | *, 3 | *:before, 4 | *:after { 5 | background: transparent !important; 6 | color: #000 !important; 7 | box-shadow: none !important; 8 | text-shadow: none !important; 9 | } 10 | 11 | a, 12 | a:visited { 13 | text-decoration: underline; 14 | } 15 | 16 | a[href]:after { 17 | content: " (" attr(href) ")"; 18 | } 19 | 20 | abbr[title]:after { 21 | content: " (" attr(title) ")"; 22 | } 23 | 24 | a[href^="#"]:after, 25 | a[href^="javascript:"]:after { 26 | content: ""; 27 | } 28 | 29 | pre, 30 | blockquote { 31 | border: 1px solid #999; 32 | page-break-inside: avoid; 33 | } 34 | 35 | thead { 36 | display: table-header-group; 37 | } 38 | 39 | tr, 40 | img { 41 | page-break-inside: avoid; 42 | } 43 | 44 | img { 45 | max-width: 100% !important; 46 | } 47 | 48 | p, 49 | h2, 50 | h3 { 51 | orphans: 3; 52 | widows: 3; 53 | } 54 | 55 | h2, 56 | h3 { 57 | page-break-after: avoid; 58 | } 59 | } 60 | 61 | pre, 62 | code { 63 | font-family: Menlo, Monaco, "Courier New", monospace; 64 | } 65 | 66 | pre { 67 | padding: .5rem; 68 | line-height: 1.25; 69 | overflow-x: scroll; 70 | } 71 | 72 | a, 73 | a:visited { 74 | color: #3498db; 75 | } 76 | 77 | a:hover, 78 | a:focus, 79 | a:active { 80 | color: #2980b9; 81 | } 82 | 83 | .modest-no-decoration { 84 | text-decoration: none; 85 | } 86 | 87 | html { 88 | font-size: 12px; 89 | } 90 | 91 | @media screen and (min-width: 32rem) and (max-width: 48rem) { 92 | html { 93 | font-size: 15px; 94 | } 95 | } 96 | 97 | @media screen and (min-width: 48rem) { 98 | html { 99 | font-size: 16px; 100 | } 101 | } 102 | 103 | body { 104 | line-height: 1.85; 105 | } 106 | 107 | p, 108 | .modest-p { 109 | font-size: 1rem; 110 | margin-bottom: 1.3rem; 111 | } 112 | 113 | h1, 114 | .modest-h1, 115 | h2, 116 | .modest-h2, 117 | h3, 118 | .modest-h3, 119 | h4, 120 | .modest-h4 { 121 | margin: 1.414rem 0 .5rem; 122 | font-weight: inherit; 123 | line-height: 1.42; 124 | } 125 | 126 | h1, 127 | .modest-h1 { 128 | margin-top: 0; 129 | font-size: 3.998rem; 130 | } 131 | 132 | h2, 133 | .modest-h2 { 134 | font-size: 2.827rem; 135 | } 136 | 137 | h3, 138 | .modest-h3 { 139 | font-size: 1.999rem; 140 | } 141 | 142 | h4, 143 | .modest-h4 { 144 | font-size: 1.414rem; 145 | } 146 | 147 | h5, 148 | .modest-h5 { 149 | font-size: 1.121rem; 150 | } 151 | 152 | h6, 153 | .modest-h6 { 154 | font-size: .88rem; 155 | } 156 | 157 | small, 158 | .modest-small { 159 | font-size: .707em; 160 | } 161 | 162 | /* https://github.com/mrmrs/fluidity */ 163 | 164 | img, 165 | canvas, 166 | iframe, 167 | video, 168 | svg, 169 | select, 170 | textarea { 171 | max-width: 100%; 172 | } 173 | 174 | @import url(http://fonts.googleapis.com/css?family=Open+Sans+Condensed:300,300italic,700); 175 | 176 | @import url(http://fonts.googleapis.com/css?family=Arimo:700,700italic); 177 | 178 | html { 179 | font-size: 18px; 180 | max-width: 100%; 181 | } 182 | 183 | body { 184 | color: #444; 185 | font-family: 'Open Sans Condensed', sans-serif; 186 | font-weight: 300; 187 | margin: 0 auto; 188 | max-width: 48rem; 189 | line-height: 1.45; 190 | padding: .25rem; 191 | } 192 | 193 | h1, 194 | h2, 195 | h3, 196 | h4, 197 | h5, 198 | h6 { 199 | font-family: Arimo, Helvetica, sans-serif; 200 | } 201 | 202 | h1, 203 | h2, 204 | h3 { 205 | border-bottom: 2px solid #fafafa; 206 | margin-bottom: 1.15rem; 207 | padding-bottom: .5rem; 208 | text-align: center; 209 | } 210 | 211 | blockquote { 212 | border-left: 8px solid #fafafa; 213 | padding: 1rem; 214 | } 215 | 216 | pre, 217 | code { 218 | background-color: #fafafa; 219 | } -------------------------------------------------------------------------------- /vendor/themes/pico.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";/*! 2 | * Pico.css v1.5.7 (https://picocss.com) 3 | * Copyright 2019-2023 - Licensed under MIT 4 | */:root{--font-family:system-ui,-apple-system,"Segoe UI","Roboto","Ubuntu","Cantarell","Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--line-height:1.5;--font-weight:400;--font-size:16px;--border-radius:0.25rem;--border-width:1px;--outline-width:3px;--spacing:1rem;--typography-spacing-vertical:1.5rem;--block-spacing-vertical:calc(var(--spacing) * 2);--block-spacing-horizontal:var(--spacing);--grid-spacing-vertical:0;--grid-spacing-horizontal:var(--spacing);--form-element-spacing-vertical:0.75rem;--form-element-spacing-horizontal:1rem;--nav-element-spacing-vertical:1rem;--nav-element-spacing-horizontal:0.5rem;--nav-link-spacing-vertical:0.5rem;--nav-link-spacing-horizontal:0.5rem;--form-label-font-weight:var(--font-weight);--transition:0.2s ease-in-out;--modal-overlay-backdrop-filter:blur(0.25rem)}@media (min-width:576px){:root{--font-size:17px}}@media (min-width:768px){:root{--font-size:18px}}@media (min-width:992px){:root{--font-size:19px}}@media (min-width:1200px){:root{--font-size:20px}}@media (min-width:576px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 2.5)}}@media (min-width:768px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 3)}}@media (min-width:992px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 3.5)}}@media (min-width:1200px){body>footer,body>header,body>main,section{--block-spacing-vertical:calc(var(--spacing) * 4)}}@media (min-width:576px){article{--block-spacing-horizontal:calc(var(--spacing) * 1.25)}}@media (min-width:768px){article{--block-spacing-horizontal:calc(var(--spacing) * 1.5)}}@media (min-width:992px){article{--block-spacing-horizontal:calc(var(--spacing) * 1.75)}}@media (min-width:1200px){article{--block-spacing-horizontal:calc(var(--spacing) * 2)}}dialog>article{--block-spacing-vertical:calc(var(--spacing) * 2);--block-spacing-horizontal:var(--spacing)}@media (min-width:576px){dialog>article{--block-spacing-vertical:calc(var(--spacing) * 2.5);--block-spacing-horizontal:calc(var(--spacing) * 1.25)}}@media (min-width:768px){dialog>article{--block-spacing-vertical:calc(var(--spacing) * 3);--block-spacing-horizontal:calc(var(--spacing) * 1.5)}}a{--text-decoration:none}a.contrast,a.secondary{--text-decoration:underline}small{--font-size:0.875em}h1,h2,h3,h4,h5,h6{--font-weight:700}h1{--font-size:2rem;--typography-spacing-vertical:3rem}h2{--font-size:1.75rem;--typography-spacing-vertical:2.625rem}h3{--font-size:1.5rem;--typography-spacing-vertical:2.25rem}h4{--font-size:1.25rem;--typography-spacing-vertical:1.874rem}h5{--font-size:1.125rem;--typography-spacing-vertical:1.6875rem}[type=checkbox],[type=radio]{--border-width:2px}[type=checkbox][role=switch]{--border-width:3px}tfoot td,tfoot th,thead td,thead th{--border-width:3px}:not(thead,tfoot)>*>td{--font-size:0.875em}code,kbd,pre,samp{--font-family:"Menlo","Consolas","Roboto Mono","Ubuntu Monospace","Noto Mono","Oxygen Mono","Liberation Mono",monospace,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}kbd{--font-weight:bolder}:root:not([data-theme=dark]),[data-theme=light]{--background-color:#fff;--color:hsl(205deg, 20%, 32%);--h1-color:hsl(205deg, 30%, 15%);--h2-color:#24333e;--h3-color:hsl(205deg, 25%, 23%);--h4-color:#374956;--h5-color:hsl(205deg, 20%, 32%);--h6-color:#4d606d;--muted-color:hsl(205deg, 10%, 50%);--muted-border-color:hsl(205deg, 20%, 94%);--primary:hsl(195deg, 85%, 41%);--primary-hover:hsl(195deg, 90%, 32%);--primary-focus:rgba(16, 149, 193, 0.125);--primary-inverse:#fff;--secondary:hsl(205deg, 15%, 41%);--secondary-hover:hsl(205deg, 20%, 32%);--secondary-focus:rgba(89, 107, 120, 0.125);--secondary-inverse:#fff;--contrast:hsl(205deg, 30%, 15%);--contrast-hover:#000;--contrast-focus:rgba(89, 107, 120, 0.125);--contrast-inverse:#fff;--mark-background-color:#fff2ca;--mark-color:#543a26;--ins-color:#388e3c;--del-color:#c62828;--blockquote-border-color:var(--muted-border-color);--blockquote-footer-color:var(--muted-color);--button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--form-element-background-color:transparent;--form-element-border-color:hsl(205deg, 14%, 68%);--form-element-color:var(--color);--form-element-placeholder-color:var(--muted-color);--form-element-active-background-color:transparent;--form-element-active-border-color:var(--primary);--form-element-focus-color:var(--primary-focus);--form-element-disabled-background-color:hsl(205deg, 18%, 86%);--form-element-disabled-border-color:hsl(205deg, 14%, 68%);--form-element-disabled-opacity:0.5;--form-element-invalid-border-color:#c62828;--form-element-invalid-active-border-color:#d32f2f;--form-element-invalid-focus-color:rgba(211, 47, 47, 0.125);--form-element-valid-border-color:#388e3c;--form-element-valid-active-border-color:#43a047;--form-element-valid-focus-color:rgba(67, 160, 71, 0.125);--switch-background-color:hsl(205deg, 16%, 77%);--switch-color:var(--primary-inverse);--switch-checked-background-color:var(--primary);--range-border-color:hsl(205deg, 18%, 86%);--range-active-border-color:hsl(205deg, 16%, 77%);--range-thumb-border-color:var(--background-color);--range-thumb-color:var(--secondary);--range-thumb-hover-color:var(--secondary-hover);--range-thumb-active-color:var(--primary);--table-border-color:var(--muted-border-color);--table-row-stripped-background-color:#f6f8f9;--code-background-color:hsl(205deg, 20%, 94%);--code-color:var(--muted-color);--code-kbd-background-color:var(--contrast);--code-kbd-color:var(--contrast-inverse);--code-tag-color:hsl(330deg, 40%, 50%);--code-property-color:hsl(185deg, 40%, 40%);--code-value-color:hsl(40deg, 20%, 50%);--code-comment-color:hsl(205deg, 14%, 68%);--accordion-border-color:var(--muted-border-color);--accordion-close-summary-color:var(--color);--accordion-open-summary-color:var(--muted-color);--card-background-color:var(--background-color);--card-border-color:var(--muted-border-color);--card-box-shadow:0.0145rem 0.029rem 0.174rem rgba(27, 40, 50, 0.01698),0.0335rem 0.067rem 0.402rem rgba(27, 40, 50, 0.024),0.0625rem 0.125rem 0.75rem rgba(27, 40, 50, 0.03),0.1125rem 0.225rem 1.35rem rgba(27, 40, 50, 0.036),0.2085rem 0.417rem 2.502rem rgba(27, 40, 50, 0.04302),0.5rem 1rem 6rem rgba(27, 40, 50, 0.06),0 0 0 0.0625rem rgba(27, 40, 50, 0.015);--card-sectionning-background-color:#fbfbfc;--dropdown-background-color:#fbfbfc;--dropdown-border-color:#e1e6eb;--dropdown-box-shadow:var(--card-box-shadow);--dropdown-color:var(--color);--dropdown-hover-background-color:hsl(205deg, 20%, 94%);--modal-overlay-background-color:rgba(213, 220, 226, 0.7);--progress-background-color:hsl(205deg, 18%, 86%);--progress-color:var(--primary);--loading-spinner-opacity:0.5;--tooltip-background-color:var(--contrast);--tooltip-color:var(--contrast-inverse);--icon-checkbox:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(198, 40, 40)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(56, 142, 60)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:light}@media only screen and (prefers-color-scheme:dark){:root:not([data-theme]){--background-color:#11191f;--color:hsl(205deg, 16%, 77%);--h1-color:hsl(205deg, 20%, 94%);--h2-color:#e1e6eb;--h3-color:hsl(205deg, 18%, 86%);--h4-color:#c8d1d8;--h5-color:hsl(205deg, 16%, 77%);--h6-color:#afbbc4;--muted-color:hsl(205deg, 10%, 50%);--muted-border-color:#1f2d38;--primary:hsl(195deg, 85%, 41%);--primary-hover:hsl(195deg, 80%, 50%);--primary-focus:rgba(16, 149, 193, 0.25);--primary-inverse:#fff;--secondary:hsl(205deg, 15%, 41%);--secondary-hover:hsl(205deg, 10%, 50%);--secondary-focus:rgba(115, 130, 140, 0.25);--secondary-inverse:#fff;--contrast:hsl(205deg, 20%, 94%);--contrast-hover:#fff;--contrast-focus:rgba(115, 130, 140, 0.25);--contrast-inverse:#000;--mark-background-color:#d1c284;--mark-color:#11191f;--ins-color:#388e3c;--del-color:#c62828;--blockquote-border-color:var(--muted-border-color);--blockquote-footer-color:var(--muted-color);--button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--form-element-background-color:#11191f;--form-element-border-color:#374956;--form-element-color:var(--color);--form-element-placeholder-color:var(--muted-color);--form-element-active-background-color:var(--form-element-background-color);--form-element-active-border-color:var(--primary);--form-element-focus-color:var(--primary-focus);--form-element-disabled-background-color:hsl(205deg, 25%, 23%);--form-element-disabled-border-color:hsl(205deg, 20%, 32%);--form-element-disabled-opacity:0.5;--form-element-invalid-border-color:#b71c1c;--form-element-invalid-active-border-color:#c62828;--form-element-invalid-focus-color:rgba(198, 40, 40, 0.25);--form-element-valid-border-color:#2e7d32;--form-element-valid-active-border-color:#388e3c;--form-element-valid-focus-color:rgba(56, 142, 60, 0.25);--switch-background-color:#374956;--switch-color:var(--primary-inverse);--switch-checked-background-color:var(--primary);--range-border-color:#24333e;--range-active-border-color:hsl(205deg, 25%, 23%);--range-thumb-border-color:var(--background-color);--range-thumb-color:var(--secondary);--range-thumb-hover-color:var(--secondary-hover);--range-thumb-active-color:var(--primary);--table-border-color:var(--muted-border-color);--table-row-stripped-background-color:rgba(115, 130, 140, 0.05);--code-background-color:#18232c;--code-color:var(--muted-color);--code-kbd-background-color:var(--contrast);--code-kbd-color:var(--contrast-inverse);--code-tag-color:hsl(330deg, 30%, 50%);--code-property-color:hsl(185deg, 30%, 50%);--code-value-color:hsl(40deg, 10%, 50%);--code-comment-color:#4d606d;--accordion-border-color:var(--muted-border-color);--accordion-active-summary-color:var(--primary);--accordion-close-summary-color:var(--color);--accordion-open-summary-color:var(--muted-color);--card-background-color:#141e26;--card-border-color:var(--card-background-color);--card-box-shadow:0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698),0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024),0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03),0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036),0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302),0.5rem 1rem 6rem rgba(0, 0, 0, 0.06),0 0 0 0.0625rem rgba(0, 0, 0, 0.015);--card-sectionning-background-color:#18232c;--dropdown-background-color:hsl(205deg, 30%, 15%);--dropdown-border-color:#24333e;--dropdown-box-shadow:var(--card-box-shadow);--dropdown-color:var(--color);--dropdown-hover-background-color:rgba(36, 51, 62, 0.75);--modal-overlay-background-color:rgba(36, 51, 62, 0.8);--progress-background-color:#24333e;--progress-color:var(--primary);--loading-spinner-opacity:0.5;--tooltip-background-color:var(--contrast);--tooltip-color:var(--contrast-inverse);--icon-checkbox:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}}[data-theme=dark]{--background-color:#11191f;--color:hsl(205deg, 16%, 77%);--h1-color:hsl(205deg, 20%, 94%);--h2-color:#e1e6eb;--h3-color:hsl(205deg, 18%, 86%);--h4-color:#c8d1d8;--h5-color:hsl(205deg, 16%, 77%);--h6-color:#afbbc4;--muted-color:hsl(205deg, 10%, 50%);--muted-border-color:#1f2d38;--primary:hsl(195deg, 85%, 41%);--primary-hover:hsl(195deg, 80%, 50%);--primary-focus:rgba(16, 149, 193, 0.25);--primary-inverse:#fff;--secondary:hsl(205deg, 15%, 41%);--secondary-hover:hsl(205deg, 10%, 50%);--secondary-focus:rgba(115, 130, 140, 0.25);--secondary-inverse:#fff;--contrast:hsl(205deg, 20%, 94%);--contrast-hover:#fff;--contrast-focus:rgba(115, 130, 140, 0.25);--contrast-inverse:#000;--mark-background-color:#d1c284;--mark-color:#11191f;--ins-color:#388e3c;--del-color:#c62828;--blockquote-border-color:var(--muted-border-color);--blockquote-footer-color:var(--muted-color);--button-box-shadow:0 0 0 rgba(0, 0, 0, 0);--button-hover-box-shadow:0 0 0 rgba(0, 0, 0, 0);--form-element-background-color:#11191f;--form-element-border-color:#374956;--form-element-color:var(--color);--form-element-placeholder-color:var(--muted-color);--form-element-active-background-color:var(--form-element-background-color);--form-element-active-border-color:var(--primary);--form-element-focus-color:var(--primary-focus);--form-element-disabled-background-color:hsl(205deg, 25%, 23%);--form-element-disabled-border-color:hsl(205deg, 20%, 32%);--form-element-disabled-opacity:0.5;--form-element-invalid-border-color:#b71c1c;--form-element-invalid-active-border-color:#c62828;--form-element-invalid-focus-color:rgba(198, 40, 40, 0.25);--form-element-valid-border-color:#2e7d32;--form-element-valid-active-border-color:#388e3c;--form-element-valid-focus-color:rgba(56, 142, 60, 0.25);--switch-background-color:#374956;--switch-color:var(--primary-inverse);--switch-checked-background-color:var(--primary);--range-border-color:#24333e;--range-active-border-color:hsl(205deg, 25%, 23%);--range-thumb-border-color:var(--background-color);--range-thumb-color:var(--secondary);--range-thumb-hover-color:var(--secondary-hover);--range-thumb-active-color:var(--primary);--table-border-color:var(--muted-border-color);--table-row-stripped-background-color:rgba(115, 130, 140, 0.05);--code-background-color:#18232c;--code-color:var(--muted-color);--code-kbd-background-color:var(--contrast);--code-kbd-color:var(--contrast-inverse);--code-tag-color:hsl(330deg, 30%, 50%);--code-property-color:hsl(185deg, 30%, 50%);--code-value-color:hsl(40deg, 10%, 50%);--code-comment-color:#4d606d;--accordion-border-color:var(--muted-border-color);--accordion-active-summary-color:var(--primary);--accordion-close-summary-color:var(--color);--accordion-open-summary-color:var(--muted-color);--card-background-color:#141e26;--card-border-color:var(--card-background-color);--card-box-shadow:0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698),0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024),0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03),0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036),0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302),0.5rem 1rem 6rem rgba(0, 0, 0, 0.06),0 0 0 0.0625rem rgba(0, 0, 0, 0.015);--card-sectionning-background-color:#18232c;--dropdown-background-color:hsl(205deg, 30%, 15%);--dropdown-border-color:#24333e;--dropdown-box-shadow:var(--card-box-shadow);--dropdown-color:var(--color);--dropdown-hover-background-color:rgba(36, 51, 62, 0.75);--modal-overlay-background-color:rgba(36, 51, 62, 0.8);--progress-background-color:#24333e;--progress-color:var(--primary);--loading-spinner-opacity:0.5;--tooltip-background-color:var(--contrast);--tooltip-color:var(--contrast-inverse);--icon-checkbox:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-chevron-button-inverse:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--icon-close:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");--icon-date:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");--icon-invalid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");--icon-minus:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");--icon-search:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");--icon-time:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");--icon-valid:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");color-scheme:dark}[type=checkbox],[type=radio],[type=range],progress{accent-color:var(--primary)}*,::after,::before{box-sizing:border-box;background-repeat:no-repeat}::after,::before{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--background-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);line-height:var(--line-height);font-family:var(--font-family);text-rendering:optimizeLegibility;overflow-wrap:break-word;cursor:default;-moz-tab-size:4;-o-tab-size:4;tab-size:4}main{display:block}body{width:100%;margin:0}body>footer,body>header,body>main{width:100%;margin-right:auto;margin-left:auto;padding:var(--block-spacing-vertical) 0}.container,.container-fluid{width:100%;margin-right:auto;margin-left:auto;padding-right:var(--spacing);padding-left:var(--spacing)}@media (min-width:576px){.container{max-width:510px;padding-right:0;padding-left:0}}@media (min-width:768px){.container{max-width:700px}}@media (min-width:992px){.container{max-width:920px}}@media (min-width:1200px){.container{max-width:1130px}}section{margin-bottom:var(--block-spacing-vertical)}.grid{grid-column-gap:var(--grid-spacing-horizontal);grid-row-gap:var(--grid-spacing-vertical);display:grid;grid-template-columns:1fr;margin:0}@media (min-width:992px){.grid{grid-template-columns:repeat(auto-fit,minmax(0%,1fr))}}.grid>*{min-width:0}figure{display:block;margin:0;padding:0;overflow-x:auto}figure figcaption{padding:calc(var(--spacing) * .5) 0;color:var(--muted-color)}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}address,blockquote,dl,figure,form,ol,p,pre,table,ul{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-style:normal;font-weight:var(--font-weight);font-size:var(--font-size)}[role=link],a{--color:var(--primary);--background-color:transparent;outline:0;background-color:var(--background-color);color:var(--color);-webkit-text-decoration:var(--text-decoration);text-decoration:var(--text-decoration);transition:background-color var(--transition),color var(--transition),box-shadow var(--transition),-webkit-text-decoration var(--transition);transition:background-color var(--transition),color var(--transition),text-decoration var(--transition),box-shadow var(--transition);transition:background-color var(--transition),color var(--transition),text-decoration var(--transition),box-shadow var(--transition),-webkit-text-decoration var(--transition)}[role=link]:is([aria-current],:hover,:active,:focus),a:is([aria-current],:hover,:active,:focus){--color:var(--primary-hover);--text-decoration:underline}[role=link]:focus,a:focus{--background-color:var(--primary-focus)}[role=link].secondary,a.secondary{--color:var(--secondary)}[role=link].secondary:is([aria-current],:hover,:active,:focus),a.secondary:is([aria-current],:hover,:active,:focus){--color:var(--secondary-hover)}[role=link].secondary:focus,a.secondary:focus{--background-color:var(--secondary-focus)}[role=link].contrast,a.contrast{--color:var(--contrast)}[role=link].contrast:is([aria-current],:hover,:active,:focus),a.contrast:is([aria-current],:hover,:active,:focus){--color:var(--contrast-hover)}[role=link].contrast:focus,a.contrast:focus{--background-color:var(--contrast-focus)}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--typography-spacing-vertical);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);font-family:var(--font-family)}h1{--color:var(--h1-color)}h2{--color:var(--h2-color)}h3{--color:var(--h3-color)}h4{--color:var(--h4-color)}h5{--color:var(--h5-color)}h6{--color:var(--h6-color)}:where(address,blockquote,dl,figure,form,ol,p,pre,table,ul)~:is(h1,h2,h3,h4,h5,h6){margin-top:var(--typography-spacing-vertical)}.headings,hgroup{margin-bottom:var(--typography-spacing-vertical)}.headings>*,hgroup>*{margin-bottom:0}.headings>:last-child,hgroup>:last-child{--color:var(--muted-color);--font-weight:unset;font-size:1rem;font-family:unset}p{margin-bottom:var(--typography-spacing-vertical)}small{font-size:var(--font-size)}:where(dl,ol,ul){padding-right:0;padding-left:var(--spacing);-webkit-padding-start:var(--spacing);padding-inline-start:var(--spacing);-webkit-padding-end:0;padding-inline-end:0}:where(dl,ol,ul) li{margin-bottom:calc(var(--typography-spacing-vertical) * .25)}:where(dl,ol,ul) :is(dl,ol,ul){margin:0;margin-top:calc(var(--typography-spacing-vertical) * .25)}ul li{list-style:square}mark{padding:.125rem .25rem;background-color:var(--mark-background-color);color:var(--mark-color);vertical-align:baseline}blockquote{display:block;margin:var(--typography-spacing-vertical) 0;padding:var(--spacing);border-right:none;border-left:.25rem solid var(--blockquote-border-color);-webkit-border-start:0.25rem solid var(--blockquote-border-color);border-inline-start:0.25rem solid var(--blockquote-border-color);-webkit-border-end:none;border-inline-end:none}blockquote footer{margin-top:calc(var(--typography-spacing-vertical) * .5);color:var(--blockquote-footer-color)}abbr[title]{border-bottom:1px dotted;text-decoration:none;cursor:help}ins{color:var(--ins-color);text-decoration:none}del{color:var(--del-color)}::-moz-selection{background-color:var(--primary-focus)}::selection{background-color:var(--primary-focus)}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}:where(iframe){border-style:none}img{max-width:100%;height:auto;border-style:none}:where(svg:not([fill])){fill:currentColor}svg:not(:root){overflow:hidden}button{margin:0;overflow:visible;font-family:inherit;text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}button{display:block;width:100%;margin-bottom:var(--spacing)}[role=button]{display:inline-block;text-decoration:none}[role=button],button,input[type=button],input[type=reset],input[type=submit]{--background-color:var(--primary);--border-color:var(--primary);--color:var(--primary-inverse);--box-shadow:var(--button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[role=button]:is([aria-current],:hover,:active,:focus),button:is([aria-current],:hover,:active,:focus),input[type=button]:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus),input[type=submit]:is([aria-current],:hover,:active,:focus){--background-color:var(--primary-hover);--border-color:var(--primary-hover);--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));--color:var(--primary-inverse)}[role=button]:focus,button:focus,input[type=button]:focus,input[type=reset]:focus,input[type=submit]:focus{--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--outline-width) var(--primary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).secondary,input[type=reset]{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);cursor:pointer}:is(button,input[type=submit],input[type=button],[role=button]).secondary:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover);--color:var(--secondary-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).secondary:focus,input[type=reset]:focus{--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--outline-width) var(--secondary-focus)}:is(button,input[type=submit],input[type=button],[role=button]).contrast{--background-color:var(--contrast);--border-color:var(--contrast);--color:var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:is([aria-current],:hover,:active,:focus){--background-color:var(--contrast-hover);--border-color:var(--contrast-hover);--color:var(--contrast-inverse)}:is(button,input[type=submit],input[type=button],[role=button]).contrast:focus{--box-shadow:var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--outline-width) var(--contrast-focus)}:is(button,input[type=submit],input[type=button],[role=button]).outline,input[type=reset].outline{--background-color:transparent;--color:var(--primary)}:is(button,input[type=submit],input[type=button],[role=button]).outline:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--background-color:transparent;--color:var(--primary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary,input[type=reset].outline{--color:var(--secondary)}:is(button,input[type=submit],input[type=button],[role=button]).outline.secondary:is([aria-current],:hover,:active,:focus),input[type=reset].outline:is([aria-current],:hover,:active,:focus){--color:var(--secondary-hover)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast{--color:var(--contrast)}:is(button,input[type=submit],input[type=button],[role=button]).outline.contrast:is([aria-current],:hover,:active,:focus){--color:var(--contrast-hover)}:where(button,[type=submit],[type=button],[type=reset],[role=button])[disabled],:where(fieldset[disabled]) :is(button,[type=submit],[type=button],[type=reset],[role=button]),a[role=button]:not([href]){opacity:.5;pointer-events:none}input,optgroup,select,textarea{margin:0;font-size:1rem;line-height:var(--line-height);font-family:inherit;letter-spacing:inherit}input{overflow:visible}select{text-transform:none}legend{max-width:100%;padding:0;color:inherit;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{padding:0;border-style:none}:-moz-focusring{outline:0}:-moz-ui-invalid{box-shadow:none}::-ms-expand{display:none}[type=file],[type=range]{padding:0;border-width:0}input:not([type=checkbox],[type=radio],[type=range]){height:calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2)}fieldset{margin:0;margin-bottom:var(--spacing);padding:0;border:0}fieldset legend,label{display:block;margin-bottom:calc(var(--spacing) * .25);font-weight:var(--form-label-font-weight,var(--font-weight))}input:not([type=checkbox],[type=radio]),select,textarea{width:100%}input:not([type=checkbox],[type=radio],[type=range],[type=file]),select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal)}input,select,textarea{--background-color:var(--form-element-background-color);--border-color:var(--form-element-border-color);--color:var(--form-element-color);--box-shadow:none;border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}:where(select,textarea):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[readonly]):is(:active,:focus){--background-color:var(--form-element-active-background-color)}:where(select,textarea):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[role=switch],[readonly]):is(:active,:focus){--border-color:var(--form-element-active-border-color)}input:not([type=submit],[type=button],[type=reset],[type=range],[type=file],[readonly]):focus,select:focus,textarea:focus{--box-shadow:0 0 0 var(--outline-width) var(--form-element-focus-color)}:where(fieldset[disabled]) :is(input:not([type=submit],[type=button],[type=reset]),select,textarea),input:not([type=submit],[type=button],[type=reset])[disabled],select[disabled],textarea[disabled]{--background-color:var(--form-element-disabled-background-color);--border-color:var(--form-element-disabled-border-color);opacity:var(--form-element-disabled-opacity);pointer-events:none}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid]{padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem)!important;padding-left:var(--form-element-spacing-horizontal);-webkit-padding-start:var(--form-element-spacing-horizontal)!important;padding-inline-start:var(--form-element-spacing-horizontal)!important;-webkit-padding-end:calc(var(--form-element-spacing-horizontal) + 1.5rem)!important;padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem)!important;background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=false]{background-image:var(--icon-valid)}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week])[aria-invalid=true]{background-image:var(--icon-invalid)}:where(input,select,textarea)[aria-invalid=false]{--border-color:var(--form-element-valid-border-color)}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus){--border-color:var(--form-element-valid-active-border-color)!important;--box-shadow:0 0 0 var(--outline-width) var(--form-element-valid-focus-color)!important}:where(input,select,textarea)[aria-invalid=true]{--border-color:var(--form-element-invalid-border-color)}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus){--border-color:var(--form-element-invalid-active-border-color)!important;--box-shadow:0 0 0 var(--outline-width) var(--form-element-invalid-focus-color)!important}[dir=rtl] :where(input,select,textarea):not([type=checkbox],[type=radio]):is([aria-invalid],[aria-invalid=true],[aria-invalid=false]){background-position:center left .75rem}input::-webkit-input-placeholder,input::placeholder,select:invalid,textarea::-webkit-input-placeholder,textarea::placeholder{color:var(--form-element-placeholder-color);opacity:1}input:not([type=checkbox],[type=radio]),select,textarea{margin-bottom:var(--spacing)}select::-ms-expand{border:0;background-color:transparent}select:not([multiple],[size]){padding-right:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-left:var(--form-element-spacing-horizontal);-webkit-padding-start:var(--form-element-spacing-horizontal);padding-inline-start:var(--form-element-spacing-horizontal);-webkit-padding-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);padding-inline-end:calc(var(--form-element-spacing-horizontal) + 1.5rem);background-image:var(--icon-chevron);background-position:center right .75rem;background-size:1rem auto;background-repeat:no-repeat}[dir=rtl] select:not([multiple],[size]){background-position:center left .75rem}:where(input,select,textarea,.grid)+small{display:block;width:100%;margin-top:calc(var(--spacing) * -.75);margin-bottom:var(--spacing);color:var(--muted-color)}label>:where(input,select,textarea){margin-top:calc(var(--spacing) * .25)}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:1.25em;height:1.25em;margin-top:-.125em;margin-right:.375em;margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:.375em;margin-inline-end:.375em;border-width:var(--border-width);font-size:inherit;vertical-align:middle;cursor:pointer}[type=checkbox]::-ms-check,[type=radio]::-ms-check{display:none}[type=checkbox]:checked,[type=checkbox]:checked:active,[type=checkbox]:checked:focus,[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--background-color:var(--primary);--border-color:var(--primary);background-image:var(--icon-checkbox);background-position:center;background-size:.75em auto;background-repeat:no-repeat}[type=checkbox]~label,[type=radio]~label{display:inline-block;margin-right:.375em;margin-bottom:0;cursor:pointer}[type=checkbox]:indeterminate{--background-color:var(--primary);--border-color:var(--primary);background-image:var(--icon-minus);background-position:center;background-size:.75em auto;background-repeat:no-repeat}[type=radio]{border-radius:50%}[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--background-color:var(--primary-inverse);border-width:.35em;background-image:none}[type=checkbox][role=switch]{--background-color:var(--switch-background-color);--border-color:var(--switch-background-color);--color:var(--switch-color);width:2.25em;height:1.25em;border:var(--border-width) solid var(--border-color);border-radius:1.25em;background-color:var(--background-color);line-height:1.25em}[type=checkbox][role=switch]:focus{--background-color:var(--switch-background-color);--border-color:var(--switch-background-color)}[type=checkbox][role=switch]:checked{--background-color:var(--switch-checked-background-color);--border-color:var(--switch-checked-background-color)}[type=checkbox][role=switch]:before{display:block;width:calc(1.25em - (var(--border-width) * 2));height:100%;border-radius:50%;background-color:var(--color);content:"";transition:margin .1s ease-in-out}[type=checkbox][role=switch]:checked{background-image:none}[type=checkbox][role=switch]:checked::before{margin-left:calc(1.125em - var(--border-width));-webkit-margin-start:calc(1.125em - var(--border-width));margin-inline-start:calc(1.125em - var(--border-width))}[type=checkbox]:checked[aria-invalid=false],[type=checkbox][aria-invalid=false],[type=checkbox][role=switch]:checked[aria-invalid=false],[type=checkbox][role=switch][aria-invalid=false],[type=radio]:checked[aria-invalid=false],[type=radio][aria-invalid=false]{--border-color:var(--form-element-valid-border-color)}[type=checkbox]:checked[aria-invalid=true],[type=checkbox][aria-invalid=true],[type=checkbox][role=switch]:checked[aria-invalid=true],[type=checkbox][role=switch][aria-invalid=true],[type=radio]:checked[aria-invalid=true],[type=radio][aria-invalid=true]{--border-color:var(--form-element-invalid-border-color)}[type=color]::-webkit-color-swatch-wrapper{padding:0}[type=color]::-moz-focus-inner{padding:0}[type=color]::-webkit-color-swatch{border:0;border-radius:calc(var(--border-radius) * .5)}[type=color]::-moz-color-swatch{border:0;border-radius:calc(var(--border-radius) * .5)}input:not([type=checkbox],[type=radio],[type=range],[type=file]):is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){--icon-position:0.75rem;--icon-width:1rem;padding-right:calc(var(--icon-width) + var(--icon-position));background-image:var(--icon-date);background-position:center right var(--icon-position);background-size:var(--icon-width) auto;background-repeat:no-repeat}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=time]{background-image:var(--icon-time)}[type=date]::-webkit-calendar-picker-indicator,[type=datetime-local]::-webkit-calendar-picker-indicator,[type=month]::-webkit-calendar-picker-indicator,[type=time]::-webkit-calendar-picker-indicator,[type=week]::-webkit-calendar-picker-indicator{width:var(--icon-width);margin-right:calc(var(--icon-width) * -1);margin-left:var(--icon-position);opacity:0}[dir=rtl] :is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){text-align:right}[type=file]{--color:var(--muted-color);padding:calc(var(--form-element-spacing-vertical) * .5) 0;border:0;border-radius:0;background:0 0}[type=file]::file-selector-button{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);margin-right:calc(var(--spacing)/ 2);margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:calc(var(--spacing)/ 2);margin-inline-end:calc(var(--spacing)/ 2);padding:calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[type=file]::file-selector-button:is(:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover)}[type=file]::-webkit-file-upload-button{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);margin-right:calc(var(--spacing)/ 2);margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:calc(var(--spacing)/ 2);margin-inline-end:calc(var(--spacing)/ 2);padding:calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;-webkit-transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[type=file]::-webkit-file-upload-button:is(:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover)}[type=file]::-ms-browse{--background-color:var(--secondary);--border-color:var(--secondary);--color:var(--secondary-inverse);margin-right:calc(var(--spacing)/ 2);margin-left:0;margin-inline-start:0;margin-inline-end:calc(var(--spacing)/ 2);padding:calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);outline:0;background-color:var(--background-color);box-shadow:var(--box-shadow);color:var(--color);font-weight:var(--font-weight);font-size:1rem;line-height:var(--line-height);text-align:center;cursor:pointer;-ms-transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}[type=file]::-ms-browse:is(:hover,:active,:focus){--background-color:var(--secondary-hover);--border-color:var(--secondary-hover)}[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:1.25rem;background:0 0}[type=range]::-webkit-slider-runnable-track{width:100%;height:.25rem;border-radius:var(--border-radius);background-color:var(--range-border-color);-webkit-transition:background-color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),box-shadow var(--transition)}[type=range]::-moz-range-track{width:100%;height:.25rem;border-radius:var(--border-radius);background-color:var(--range-border-color);-moz-transition:background-color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),box-shadow var(--transition)}[type=range]::-ms-track{width:100%;height:.25rem;border-radius:var(--border-radius);background-color:var(--range-border-color);-ms-transition:background-color var(--transition),box-shadow var(--transition);transition:background-color var(--transition),box-shadow var(--transition)}[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.5rem;border:2px solid var(--range-thumb-border-color);border-radius:50%;background-color:var(--range-thumb-color);cursor:pointer;-webkit-transition:background-color var(--transition),transform var(--transition);transition:background-color var(--transition),transform var(--transition)}[type=range]::-moz-range-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.5rem;border:2px solid var(--range-thumb-border-color);border-radius:50%;background-color:var(--range-thumb-color);cursor:pointer;-moz-transition:background-color var(--transition),transform var(--transition);transition:background-color var(--transition),transform var(--transition)}[type=range]::-ms-thumb{-webkit-appearance:none;width:1.25rem;height:1.25rem;margin-top:-.5rem;border:2px solid var(--range-thumb-border-color);border-radius:50%;background-color:var(--range-thumb-color);cursor:pointer;-ms-transition:background-color var(--transition),transform var(--transition);transition:background-color var(--transition),transform var(--transition)}[type=range]:focus,[type=range]:hover{--range-border-color:var(--range-active-border-color);--range-thumb-color:var(--range-thumb-hover-color)}[type=range]:active{--range-thumb-color:var(--range-thumb-active-color)}[type=range]:active::-webkit-slider-thumb{transform:scale(1.25)}[type=range]:active::-moz-range-thumb{transform:scale(1.25)}[type=range]:active::-ms-thumb{transform:scale(1.25)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{-webkit-padding-start:calc(var(--form-element-spacing-horizontal) + 1.75rem);padding-inline-start:calc(var(--form-element-spacing-horizontal) + 1.75rem);border-radius:5rem;background-image:var(--icon-search);background-position:center left 1.125rem;background-size:1rem auto;background-repeat:no-repeat}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{-webkit-padding-start:calc(var(--form-element-spacing-horizontal) + 1.75rem)!important;padding-inline-start:calc(var(--form-element-spacing-horizontal) + 1.75rem)!important;background-position:center left 1.125rem,center right .75rem}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=false]{background-image:var(--icon-search),var(--icon-valid)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=true]{background-image:var(--icon-search),var(--icon-invalid)}[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;display:none}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{background-position:center right 1.125rem}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{background-position:center right 1.125rem,center left .75rem}:where(table){width:100%;border-collapse:collapse;border-spacing:0;text-indent:0}td,th{padding:calc(var(--spacing)/ 2) var(--spacing);border-bottom:var(--border-width) solid var(--table-border-color);color:var(--color);font-weight:var(--font-weight);font-size:var(--font-size);text-align:left;text-align:start}tfoot td,tfoot th{border-top:var(--border-width) solid var(--table-border-color);border-bottom:0}table[role=grid] tbody tr:nth-child(odd){background-color:var(--table-row-stripped-background-color)}code,kbd,pre,samp{font-size:.875em;font-family:var(--font-family)}pre{-ms-overflow-style:scrollbar;overflow:auto}code,kbd,pre{border-radius:var(--border-radius);background:var(--code-background-color);color:var(--code-color);font-weight:var(--font-weight);line-height:initial}code,kbd{display:inline-block;padding:.375rem .5rem}pre{display:block;margin-bottom:var(--spacing);overflow-x:auto}pre>code{display:block;padding:var(--spacing);background:0 0;font-size:14px;line-height:var(--line-height)}code b{color:var(--code-tag-color);font-weight:var(--font-weight)}code i{color:var(--code-property-color);font-style:normal}code u{color:var(--code-value-color);text-decoration:none}code em{color:var(--code-comment-color);font-style:normal}kbd{background-color:var(--code-kbd-background-color);color:var(--code-kbd-color);vertical-align:baseline}hr{height:0;border:0;border-top:1px solid var(--muted-border-color);color:inherit}[hidden],template{display:none!important}canvas{display:inline-block}details{display:block;margin-bottom:var(--spacing);padding-bottom:var(--spacing);border-bottom:var(--border-width) solid var(--accordion-border-color)}details summary{line-height:1rem;list-style-type:none;cursor:pointer;transition:color var(--transition)}details summary:not([role]){color:var(--accordion-close-summary-color)}details summary::-webkit-details-marker{display:none}details summary::marker{display:none}details summary::-moz-list-bullet{list-style-type:none}details summary::after{display:block;width:1rem;height:1rem;-webkit-margin-start:calc(var(--spacing,1rem) * 0.5);margin-inline-start:calc(var(--spacing,1rem) * .5);float:right;transform:rotate(-90deg);background-image:var(--icon-chevron);background-position:right center;background-size:1rem auto;background-repeat:no-repeat;content:"";transition:transform var(--transition)}details summary:focus{outline:0}details summary:focus:not([role=button]){color:var(--accordion-active-summary-color)}details summary[role=button]{width:100%;text-align:left}details summary[role=button]::after{height:calc(1rem * var(--line-height,1.5));background-image:var(--icon-chevron-button)}details summary[role=button]:not(.outline).contrast::after{background-image:var(--icon-chevron-button-inverse)}details[open]>summary{margin-bottom:calc(var(--spacing))}details[open]>summary:not([role]):not(:focus){color:var(--accordion-open-summary-color)}details[open]>summary::after{transform:rotate(0)}[dir=rtl] details summary{text-align:right}[dir=rtl] details summary::after{float:left;background-position:left center}article{margin:var(--block-spacing-vertical) 0;padding:var(--block-spacing-vertical) var(--block-spacing-horizontal);border-radius:var(--border-radius);background:var(--card-background-color);box-shadow:var(--card-box-shadow)}article>footer,article>header{margin-right:calc(var(--block-spacing-horizontal) * -1);margin-left:calc(var(--block-spacing-horizontal) * -1);padding:calc(var(--block-spacing-vertical) * .66) var(--block-spacing-horizontal);background-color:var(--card-sectionning-background-color)}article>header{margin-top:calc(var(--block-spacing-vertical) * -1);margin-bottom:var(--block-spacing-vertical);border-bottom:var(--border-width) solid var(--card-border-color);border-top-right-radius:var(--border-radius);border-top-left-radius:var(--border-radius)}article>footer{margin-top:var(--block-spacing-vertical);margin-bottom:calc(var(--block-spacing-vertical) * -1);border-top:var(--border-width) solid var(--card-border-color);border-bottom-right-radius:var(--border-radius);border-bottom-left-radius:var(--border-radius)}:root{--scrollbar-width:0px}dialog{display:flex;z-index:999;position:fixed;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center;width:inherit;min-width:100%;height:inherit;min-height:100%;padding:var(--spacing);border:0;-webkit-backdrop-filter:var(--modal-overlay-backdrop-filter);backdrop-filter:var(--modal-overlay-backdrop-filter);background-color:var(--modal-overlay-background-color);color:var(--color)}dialog article{max-height:calc(100vh - var(--spacing) * 2);overflow:auto}@media (min-width:576px){dialog article{max-width:510px}}@media (min-width:768px){dialog article{max-width:700px}}dialog article>footer,dialog article>header{padding:calc(var(--block-spacing-vertical) * .5) var(--block-spacing-horizontal)}dialog article>header .close{margin:0;margin-left:var(--spacing);float:right}dialog article>footer{text-align:right}dialog article>footer [role=button]{margin-bottom:0}dialog article>footer [role=button]:not(:first-of-type){margin-left:calc(var(--spacing) * .5)}dialog article p:last-of-type{margin:0}dialog article .close{display:block;width:1rem;height:1rem;margin-top:calc(var(--block-spacing-vertical) * -.5);margin-bottom:var(--typography-spacing-vertical);margin-left:auto;background-image:var(--icon-close);background-position:center;background-size:auto 1rem;background-repeat:no-repeat;opacity:.5;transition:opacity var(--transition)}dialog article .close:is([aria-current],:hover,:active,:focus){opacity:1}dialog:not([open]),dialog[open=false]{display:none}.modal-is-open{padding-right:var(--scrollbar-width,0);overflow:hidden;pointer-events:none;touch-action:none}.modal-is-open dialog{pointer-events:auto}:where(.modal-is-opening,.modal-is-closing) dialog,:where(.modal-is-opening,.modal-is-closing) dialog>article{animation-duration:.2s;animation-timing-function:ease-in-out;animation-fill-mode:both}:where(.modal-is-opening,.modal-is-closing) dialog{animation-duration:.8s;animation-name:modal-overlay}:where(.modal-is-opening,.modal-is-closing) dialog>article{animation-delay:.2s;animation-name:modal}.modal-is-closing dialog,.modal-is-closing dialog>article{animation-delay:0s;animation-direction:reverse}@keyframes modal-overlay{from{-webkit-backdrop-filter:none;backdrop-filter:none;background-color:transparent}}@keyframes modal{from{transform:translateY(-100%);opacity:0}}:where(nav li)::before{float:left;content:"​"}nav,nav ul{display:flex}nav{justify-content:space-between}nav ol,nav ul{align-items:center;margin-bottom:0;padding:0;list-style:none}nav ol:first-of-type,nav ul:first-of-type{margin-left:calc(var(--nav-element-spacing-horizontal) * -1)}nav ol:last-of-type,nav ul:last-of-type{margin-right:calc(var(--nav-element-spacing-horizontal) * -1)}nav li{display:inline-block;margin:0;padding:var(--nav-element-spacing-vertical) var(--nav-element-spacing-horizontal)}nav li>*{--spacing:0}nav :where(a,[role=link]){display:inline-block;margin:calc(var(--nav-link-spacing-vertical) * -1) calc(var(--nav-link-spacing-horizontal) * -1);padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal);border-radius:var(--border-radius);text-decoration:none}nav :where(a,[role=link]):is([aria-current],:hover,:active,:focus){text-decoration:none}nav[aria-label=breadcrumb]{align-items:center;justify-content:start}nav[aria-label=breadcrumb] ul li:not(:first-child){-webkit-margin-start:var(--nav-link-spacing-horizontal);margin-inline-start:var(--nav-link-spacing-horizontal)}nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{position:absolute;width:calc(var(--nav-link-spacing-horizontal) * 2);-webkit-margin-start:calc(var(--nav-link-spacing-horizontal)/ 2);margin-inline-start:calc(var(--nav-link-spacing-horizontal)/ 2);content:"/";color:var(--muted-color);text-align:center}nav[aria-label=breadcrumb] a[aria-current]{background-color:transparent;color:inherit;text-decoration:none;pointer-events:none}nav [role=button]{margin-right:inherit;margin-left:inherit;padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal)}aside li,aside nav,aside ol,aside ul{display:block}aside li{padding:calc(var(--nav-element-spacing-vertical) * .5) var(--nav-element-spacing-horizontal)}aside li a{display:block}aside li [role=button]{margin:inherit}[dir=rtl] nav[aria-label=breadcrumb] ul li:not(:last-child) ::after{content:"\\"}progress{display:inline-block;vertical-align:baseline}progress{-webkit-appearance:none;-moz-appearance:none;display:inline-block;appearance:none;width:100%;height:.5rem;margin-bottom:calc(var(--spacing) * .5);overflow:hidden;border:0;border-radius:var(--border-radius);background-color:var(--progress-background-color);color:var(--progress-color)}progress::-webkit-progress-bar{border-radius:var(--border-radius);background:0 0}progress[value]::-webkit-progress-value{background-color:var(--progress-color)}progress::-moz-progress-bar{background-color:var(--progress-color)}@media (prefers-reduced-motion:no-preference){progress:indeterminate{background:var(--progress-background-color) linear-gradient(to right,var(--progress-color) 30%,var(--progress-background-color) 30%) top left/150% 150% no-repeat;animation:progress-indeterminate 1s linear infinite}progress:indeterminate[value]::-webkit-progress-value{background-color:transparent}progress:indeterminate::-moz-progress-bar{background-color:transparent}}@media (prefers-reduced-motion:no-preference){[dir=rtl] progress:indeterminate{animation-direction:reverse}}@keyframes progress-indeterminate{0%{background-position:200% 0}100%{background-position:-200% 0}}details[role=list],li[role=list]{position:relative}details[role=list] summary+ul,li[role=list]>ul{display:flex;z-index:99;position:absolute;top:auto;right:0;left:0;flex-direction:column;margin:0;padding:0;border:var(--border-width) solid var(--dropdown-border-color);border-radius:var(--border-radius);border-top-right-radius:0;border-top-left-radius:0;background-color:var(--dropdown-background-color);box-shadow:var(--card-box-shadow);color:var(--dropdown-color);white-space:nowrap}details[role=list] summary+ul li,li[role=list]>ul li{width:100%;margin-bottom:0;padding:calc(var(--form-element-spacing-vertical) * .5) var(--form-element-spacing-horizontal);list-style:none}details[role=list] summary+ul li:first-of-type,li[role=list]>ul li:first-of-type{margin-top:calc(var(--form-element-spacing-vertical) * .5)}details[role=list] summary+ul li:last-of-type,li[role=list]>ul li:last-of-type{margin-bottom:calc(var(--form-element-spacing-vertical) * .5)}details[role=list] summary+ul li a,li[role=list]>ul li a{display:block;margin:calc(var(--form-element-spacing-vertical) * -.5) calc(var(--form-element-spacing-horizontal) * -1);padding:calc(var(--form-element-spacing-vertical) * .5) var(--form-element-spacing-horizontal);overflow:hidden;color:var(--dropdown-color);text-decoration:none;text-overflow:ellipsis}details[role=list] summary+ul li a:hover,li[role=list]>ul li a:hover{background-color:var(--dropdown-hover-background-color)}details[role=list] summary::after,li[role=list]>a::after{display:block;width:1rem;height:calc(1rem * var(--line-height,1.5));-webkit-margin-start:0.5rem;margin-inline-start:.5rem;float:right;transform:rotate(0);background-position:right center;background-size:1rem auto;background-repeat:no-repeat;content:""}details[role=list]{padding:0;border-bottom:none}details[role=list] summary{margin-bottom:0}details[role=list] summary:not([role]){height:calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2);padding:var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal);border:var(--border-width) solid var(--form-element-border-color);border-radius:var(--border-radius);background-color:var(--form-element-background-color);color:var(--form-element-placeholder-color);line-height:inherit;cursor:pointer;transition:background-color var(--transition),border-color var(--transition),color var(--transition),box-shadow var(--transition)}details[role=list] summary:not([role]):active,details[role=list] summary:not([role]):focus{border-color:var(--form-element-active-border-color);background-color:var(--form-element-active-background-color)}details[role=list] summary:not([role]):focus{box-shadow:0 0 0 var(--outline-width) var(--form-element-focus-color)}details[role=list][open] summary{border-bottom-right-radius:0;border-bottom-left-radius:0}details[role=list][open] summary::before{display:block;z-index:1;position:fixed;top:0;right:0;bottom:0;left:0;background:0 0;content:"";cursor:default}nav details[role=list] summary,nav li[role=list] a{display:flex;direction:ltr}nav details[role=list] summary+ul,nav li[role=list]>ul{min-width:-moz-fit-content;min-width:fit-content;border-radius:var(--border-radius)}nav details[role=list] summary+ul li a,nav li[role=list]>ul li a{border-radius:0}nav details[role=list] summary,nav details[role=list] summary:not([role]){height:auto;padding:var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal)}nav details[role=list][open] summary{border-radius:var(--border-radius)}nav details[role=list] summary+ul{margin-top:var(--outline-width);-webkit-margin-start:0;margin-inline-start:0}nav details[role=list] summary[role=link]{margin-bottom:calc(var(--nav-link-spacing-vertical) * -1);line-height:var(--line-height)}nav details[role=list] summary[role=link]+ul{margin-top:calc(var(--nav-link-spacing-vertical) + var(--outline-width));-webkit-margin-start:calc(var(--nav-link-spacing-horizontal) * -1);margin-inline-start:calc(var(--nav-link-spacing-horizontal) * -1)}li[role=list] a:active~ul,li[role=list] a:focus~ul,li[role=list]:hover>ul{display:flex}li[role=list]>ul{display:none;margin-top:calc(var(--nav-link-spacing-vertical) + var(--outline-width));-webkit-margin-start:calc(var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal));margin-inline-start:calc(var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal))}li[role=list]>a::after{background-image:var(--icon-chevron)}[aria-busy=true]{cursor:progress}[aria-busy=true]:not(input,select,textarea)::before{display:inline-block;width:1em;height:1em;border:.1875em solid currentColor;border-radius:1em;border-right-color:transparent;content:"";vertical-align:text-bottom;vertical-align:-.125em;animation:spinner .75s linear infinite;opacity:var(--loading-spinner-opacity)}[aria-busy=true]:not(input,select,textarea):not(:empty)::before{margin-right:calc(var(--spacing) * .5);margin-left:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:calc(var(--spacing) * .5);margin-inline-end:calc(var(--spacing) * .5)}[aria-busy=true]:not(input,select,textarea):empty{text-align:center}a[aria-busy=true],button[aria-busy=true],input[type=button][aria-busy=true],input[type=reset][aria-busy=true],input[type=submit][aria-busy=true]{pointer-events:none}@keyframes spinner{to{transform:rotate(360deg)}}[data-tooltip]{position:relative}[data-tooltip]:not(a,button,input){border-bottom:1px dotted;text-decoration:none;cursor:help}[data-tooltip]::after,[data-tooltip]::before,[data-tooltip][data-placement=top]::after,[data-tooltip][data-placement=top]::before{display:block;z-index:99;position:absolute;bottom:100%;left:50%;padding:.25rem .5rem;overflow:hidden;transform:translate(-50%,-.25rem);border-radius:var(--border-radius);background:var(--tooltip-background-color);content:attr(data-tooltip);color:var(--tooltip-color);font-style:normal;font-weight:var(--font-weight);font-size:.875rem;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;opacity:0;pointer-events:none}[data-tooltip]::after,[data-tooltip][data-placement=top]::after{padding:0;transform:translate(-50%,0);border-top:.3rem solid;border-right:.3rem solid transparent;border-left:.3rem solid transparent;border-radius:0;background-color:transparent;content:"";color:var(--tooltip-background-color)}[data-tooltip][data-placement=bottom]::after,[data-tooltip][data-placement=bottom]::before{top:100%;bottom:auto;transform:translate(-50%,.25rem)}[data-tooltip][data-placement=bottom]:after{transform:translate(-50%,-.3rem);border:.3rem solid transparent;border-bottom:.3rem solid}[data-tooltip][data-placement=left]::after,[data-tooltip][data-placement=left]::before{top:50%;right:100%;bottom:auto;left:auto;transform:translate(-.25rem,-50%)}[data-tooltip][data-placement=left]:after{transform:translate(.3rem,-50%);border:.3rem solid transparent;border-left:.3rem solid}[data-tooltip][data-placement=right]::after,[data-tooltip][data-placement=right]::before{top:50%;right:auto;bottom:auto;left:100%;transform:translate(.25rem,-50%)}[data-tooltip][data-placement=right]:after{transform:translate(-.3rem,-50%);border:.3rem solid transparent;border-right:.3rem solid}[data-tooltip]:focus::after,[data-tooltip]:focus::before,[data-tooltip]:hover::after,[data-tooltip]:hover::before{opacity:1}@media (hover:hover) and (pointer:fine){[data-tooltip]:hover::after,[data-tooltip]:hover::before,[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:focus::before,[data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::after,[data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::before{animation-duration:.2s;animation-name:tooltip-slide-top}[data-tooltip]:hover::after,[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::after{animation-name:tooltip-caret-slide-top}[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:focus::before,[data-tooltip][data-placement=bottom]:hover::after,[data-tooltip][data-placement=bottom]:hover::before{animation-duration:.2s;animation-name:tooltip-slide-bottom}[data-tooltip][data-placement=bottom]:focus::after,[data-tooltip][data-placement=bottom]:hover::after{animation-name:tooltip-caret-slide-bottom}[data-tooltip][data-placement=left]:focus::after,[data-tooltip][data-placement=left]:focus::before,[data-tooltip][data-placement=left]:hover::after,[data-tooltip][data-placement=left]:hover::before{animation-duration:.2s;animation-name:tooltip-slide-left}[data-tooltip][data-placement=left]:focus::after,[data-tooltip][data-placement=left]:hover::after{animation-name:tooltip-caret-slide-left}[data-tooltip][data-placement=right]:focus::after,[data-tooltip][data-placement=right]:focus::before,[data-tooltip][data-placement=right]:hover::after,[data-tooltip][data-placement=right]:hover::before{animation-duration:.2s;animation-name:tooltip-slide-right}[data-tooltip][data-placement=right]:focus::after,[data-tooltip][data-placement=right]:hover::after{animation-name:tooltip-caret-slide-right}}@keyframes tooltip-slide-top{from{transform:translate(-50%,.75rem);opacity:0}to{transform:translate(-50%,-.25rem);opacity:1}}@keyframes tooltip-caret-slide-top{from{opacity:0}50%{transform:translate(-50%,-.25rem);opacity:0}to{transform:translate(-50%,0);opacity:1}}@keyframes tooltip-slide-bottom{from{transform:translate(-50%,-.75rem);opacity:0}to{transform:translate(-50%,.25rem);opacity:1}}@keyframes tooltip-caret-slide-bottom{from{opacity:0}50%{transform:translate(-50%,-.5rem);opacity:0}to{transform:translate(-50%,-.3rem);opacity:1}}@keyframes tooltip-slide-left{from{transform:translate(.75rem,-50%);opacity:0}to{transform:translate(-.25rem,-50%);opacity:1}}@keyframes tooltip-caret-slide-left{from{opacity:0}50%{transform:translate(.05rem,-50%);opacity:0}to{transform:translate(.3rem,-50%);opacity:1}}@keyframes tooltip-slide-right{from{transform:translate(-.75rem,-50%);opacity:0}to{transform:translate(.25rem,-50%);opacity:1}}@keyframes tooltip-caret-slide-right{from{opacity:0}50%{transform:translate(-.05rem,-50%);opacity:0}to{transform:translate(-.3rem,-50%);opacity:1}}[aria-controls]{cursor:pointer}[aria-disabled=true],[disabled]{cursor:not-allowed}[aria-hidden=false][hidden]{display:initial}[aria-hidden=false][hidden]:not(:focus){clip:rect(0,0,0,0);position:absolute}[tabindex],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation}[dir=rtl]{direction:rtl}@media (prefers-reduced-motion:reduce){:not([aria-busy=true]),:not([aria-busy=true])::after,:not([aria-busy=true])::before{background-attachment:initial!important;animation-duration:1ms!important;animation-delay:-1ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-delay:0s!important;transition-duration:0s!important}} 5 | /*# sourceMappingURL=pico.min.css.map */ -------------------------------------------------------------------------------- /vendor/themes/retro.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | pre, 4 | code { 5 | font-family: Menlo, Monaco, "Courier New", monospace; 6 | } 7 | 8 | pre { 9 | padding: .5rem; 10 | line-height: 1.25; 11 | overflow-x: scroll; 12 | } 13 | 14 | @media print { 15 | *, 16 | *:before, 17 | *:after { 18 | background: transparent !important; 19 | color: #000 !important; 20 | box-shadow: none !important; 21 | text-shadow: none !important; 22 | } 23 | 24 | a, 25 | a:visited { 26 | text-decoration: underline; 27 | } 28 | 29 | a[href]:after { 30 | content: " (" attr(href) ")"; 31 | } 32 | 33 | abbr[title]:after { 34 | content: " (" attr(title) ")"; 35 | } 36 | 37 | a[href^="#"]:after, 38 | a[href^="javascript:"]:after { 39 | content: ""; 40 | } 41 | 42 | pre, 43 | blockquote { 44 | border: 1px solid #999; 45 | page-break-inside: avoid; 46 | } 47 | 48 | thead { 49 | display: table-header-group; 50 | } 51 | 52 | tr, 53 | img { 54 | page-break-inside: avoid; 55 | } 56 | 57 | img { 58 | max-width: 100% !important; 59 | } 60 | 61 | p, 62 | h2, 63 | h3 { 64 | orphans: 3; 65 | widows: 3; 66 | } 67 | 68 | h2, 69 | h3 { 70 | page-break-after: avoid; 71 | } 72 | } 73 | 74 | a, 75 | a:visited { 76 | color: #01ff70; 77 | } 78 | 79 | a:hover, 80 | a:focus, 81 | a:active { 82 | color: #2ecc40; 83 | } 84 | 85 | .retro-no-decoration { 86 | text-decoration: none; 87 | } 88 | 89 | html { 90 | font-size: 12px; 91 | } 92 | 93 | @media screen and (min-width: 32rem) and (max-width: 48rem) { 94 | html { 95 | font-size: 15px; 96 | } 97 | } 98 | 99 | @media screen and (min-width: 48rem) { 100 | html { 101 | font-size: 16px; 102 | } 103 | } 104 | 105 | body { 106 | line-height: 1.85; 107 | } 108 | 109 | p, 110 | .retro-p { 111 | font-size: 1rem; 112 | margin-bottom: 1.3rem; 113 | } 114 | 115 | h1, 116 | .retro-h1, 117 | h2, 118 | .retro-h2, 119 | h3, 120 | .retro-h3, 121 | h4, 122 | .retro-h4 { 123 | margin: 1.414rem 0 .5rem; 124 | font-weight: inherit; 125 | line-height: 1.42; 126 | } 127 | 128 | h1, 129 | .retro-h1 { 130 | margin-top: 0; 131 | font-size: 3.998rem; 132 | } 133 | 134 | h2, 135 | .retro-h2 { 136 | font-size: 2.827rem; 137 | } 138 | 139 | h3, 140 | .retro-h3 { 141 | font-size: 1.999rem; 142 | } 143 | 144 | h4, 145 | .retro-h4 { 146 | font-size: 1.414rem; 147 | } 148 | 149 | h5, 150 | .retro-h5 { 151 | font-size: 1.121rem; 152 | } 153 | 154 | h6, 155 | .retro-h6 { 156 | font-size: .88rem; 157 | } 158 | 159 | small, 160 | .retro-small { 161 | font-size: .707em; 162 | } 163 | 164 | /* https://github.com/mrmrs/fluidity */ 165 | 166 | img, 167 | canvas, 168 | iframe, 169 | video, 170 | svg, 171 | select, 172 | textarea { 173 | max-width: 100%; 174 | } 175 | 176 | html, 177 | body { 178 | background-color: #222; 179 | min-height: 100%; 180 | } 181 | 182 | html { 183 | font-size: 18px; 184 | } 185 | 186 | body { 187 | color: #fafafa; 188 | font-family: "Courier New"; 189 | line-height: 1.45; 190 | margin: 6rem auto 1rem; 191 | max-width: 48rem; 192 | padding: .25rem; 193 | } 194 | 195 | pre { 196 | background-color: #333; 197 | } 198 | 199 | blockquote { 200 | border-left: 3px solid #01ff70; 201 | padding-left: 1rem; 202 | } -------------------------------------------------------------------------------- /vendor/themes/sakura-dark.css: -------------------------------------------------------------------------------- 1 | /* $color-text: #dedce5; */ 2 | /* Sakura.css v1.4.1 3 | * ================ 4 | * Minimal css theme. 5 | * Project: https://github.com/oxalorg/sakura/ 6 | */ 7 | /* Body */ 8 | html { 9 | font-size: 62.5%; 10 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; 11 | } 12 | 13 | body { 14 | font-size: 1.8rem; 15 | line-height: 1.618; 16 | max-width: 38em; 17 | margin: auto; 18 | color: #c9c9c9; 19 | background-color: #222222; 20 | padding: 13px; 21 | } 22 | 23 | @media (max-width: 684px) { 24 | body { 25 | font-size: 1.53rem; 26 | } 27 | } 28 | @media (max-width: 382px) { 29 | body { 30 | font-size: 1.35rem; 31 | } 32 | } 33 | h1, h2, h3, h4, h5, h6 { 34 | line-height: 1.1; 35 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; 36 | font-weight: 700; 37 | margin-top: 3rem; 38 | margin-bottom: 1.5rem; 39 | overflow-wrap: break-word; 40 | word-wrap: break-word; 41 | -ms-word-break: break-all; 42 | word-break: break-word; 43 | } 44 | 45 | h1 { 46 | font-size: 2.35em; 47 | } 48 | 49 | h2 { 50 | font-size: 2em; 51 | } 52 | 53 | h3 { 54 | font-size: 1.75em; 55 | } 56 | 57 | h4 { 58 | font-size: 1.5em; 59 | } 60 | 61 | h5 { 62 | font-size: 1.25em; 63 | } 64 | 65 | h6 { 66 | font-size: 1em; 67 | } 68 | 69 | p { 70 | margin-top: 0px; 71 | margin-bottom: 2.5rem; 72 | } 73 | 74 | small, sub, sup { 75 | font-size: 75%; 76 | } 77 | 78 | hr { 79 | border-color: #ffffff; 80 | } 81 | 82 | a { 83 | text-decoration: none; 84 | color: #ffffff; 85 | } 86 | a:visited { 87 | color: #e6e6e6; 88 | } 89 | a:hover { 90 | color: #c9c9c9; 91 | border-bottom: 2px solid #c9c9c9; 92 | } 93 | 94 | ul { 95 | padding-left: 1.4em; 96 | margin-top: 0px; 97 | margin-bottom: 2.5rem; 98 | } 99 | 100 | li { 101 | margin-bottom: 0.4em; 102 | } 103 | 104 | blockquote { 105 | margin-left: 0px; 106 | margin-right: 0px; 107 | padding-left: 1em; 108 | padding-top: 0.8em; 109 | padding-bottom: 0.8em; 110 | padding-right: 0.8em; 111 | border-left: 5px solid #ffffff; 112 | margin-bottom: 2.5rem; 113 | background-color: #4a4a4a; 114 | } 115 | 116 | blockquote p { 117 | margin-bottom: 0; 118 | } 119 | 120 | img, video { 121 | height: auto; 122 | max-width: 100%; 123 | margin-top: 0px; 124 | margin-bottom: 2.5rem; 125 | } 126 | 127 | /* Pre and Code */ 128 | pre { 129 | background-color: #4a4a4a; 130 | display: block; 131 | padding: 1em; 132 | overflow-x: auto; 133 | margin-top: 0px; 134 | margin-bottom: 2.5rem; 135 | font-size: 0.9em; 136 | } 137 | 138 | code, kbd, samp { 139 | font-size: 0.9em; 140 | padding: 0 0.5em; 141 | background-color: #4a4a4a; 142 | white-space: pre-wrap; 143 | } 144 | 145 | pre > code { 146 | padding: 0; 147 | background-color: transparent; 148 | white-space: pre; 149 | font-size: 1em; 150 | } 151 | 152 | /* Tables */ 153 | table { 154 | text-align: justify; 155 | width: 100%; 156 | border-collapse: collapse; 157 | } 158 | 159 | td, th { 160 | padding: 0.5em; 161 | border-bottom: 1px solid #4a4a4a; 162 | } 163 | 164 | /* Buttons, forms and input */ 165 | input, textarea { 166 | border: 1px solid #c9c9c9; 167 | } 168 | input:focus, textarea:focus { 169 | border: 1px solid #ffffff; 170 | } 171 | 172 | textarea { 173 | width: 100%; 174 | } 175 | 176 | .button, button, input[type=submit], input[type=reset], input[type=button] { 177 | display: inline-block; 178 | padding: 5px 10px; 179 | text-align: center; 180 | text-decoration: none; 181 | white-space: nowrap; 182 | background-color: #ffffff; 183 | color: #222222; 184 | border-radius: 1px; 185 | border: 1px solid #ffffff; 186 | cursor: pointer; 187 | box-sizing: border-box; 188 | } 189 | .button[disabled], button[disabled], input[type=submit][disabled], input[type=reset][disabled], input[type=button][disabled] { 190 | cursor: default; 191 | opacity: 0.5; 192 | } 193 | .button:focus:enabled, .button:hover:enabled, button:focus:enabled, button:hover:enabled, input[type=submit]:focus:enabled, input[type=submit]:hover:enabled, input[type=reset]:focus:enabled, input[type=reset]:hover:enabled, input[type=button]:focus:enabled, input[type=button]:hover:enabled { 194 | background-color: #c9c9c9; 195 | border-color: #c9c9c9; 196 | color: #222222; 197 | outline: 0; 198 | } 199 | 200 | textarea, select, input { 201 | color: #c9c9c9; 202 | padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ 203 | margin-bottom: 10px; 204 | background-color: #4a4a4a; 205 | border: 1px solid #4a4a4a; 206 | border-radius: 4px; 207 | box-shadow: none; 208 | box-sizing: border-box; 209 | } 210 | textarea:focus, select:focus, input:focus { 211 | border: 1px solid #ffffff; 212 | outline: 0; 213 | } 214 | 215 | input[type=checkbox]:focus { 216 | outline: 1px dotted #ffffff; 217 | } 218 | 219 | label, legend, fieldset { 220 | display: block; 221 | margin-bottom: 0.5rem; 222 | font-weight: 600; 223 | } -------------------------------------------------------------------------------- /vendor/themes/sakura.css: -------------------------------------------------------------------------------- 1 | /* Sakura.css v1.4.1 2 | * ================ 3 | * Minimal css theme. 4 | * Project: https://github.com/oxalorg/sakura/ 5 | */ 6 | /* Body */ 7 | html { 8 | font-size: 62.5%; 9 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; 10 | } 11 | 12 | body { 13 | font-size: 1.8rem; 14 | line-height: 1.618; 15 | max-width: 38em; 16 | margin: auto; 17 | color: #4a4a4a; 18 | background-color: #f9f9f9; 19 | padding: 13px; 20 | } 21 | 22 | @media (max-width: 684px) { 23 | body { 24 | font-size: 1.53rem; 25 | } 26 | } 27 | @media (max-width: 382px) { 28 | body { 29 | font-size: 1.35rem; 30 | } 31 | } 32 | h1, h2, h3, h4, h5, h6 { 33 | line-height: 1.1; 34 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; 35 | font-weight: 700; 36 | margin-top: 3rem; 37 | margin-bottom: 1.5rem; 38 | overflow-wrap: break-word; 39 | word-wrap: break-word; 40 | -ms-word-break: break-all; 41 | word-break: break-word; 42 | } 43 | 44 | h1 { 45 | font-size: 2.35em; 46 | } 47 | 48 | h2 { 49 | font-size: 2em; 50 | } 51 | 52 | h3 { 53 | font-size: 1.75em; 54 | } 55 | 56 | h4 { 57 | font-size: 1.5em; 58 | } 59 | 60 | h5 { 61 | font-size: 1.25em; 62 | } 63 | 64 | h6 { 65 | font-size: 1em; 66 | } 67 | 68 | p { 69 | margin-top: 0px; 70 | margin-bottom: 2.5rem; 71 | } 72 | 73 | small, sub, sup { 74 | font-size: 75%; 75 | } 76 | 77 | hr { 78 | border-color: #1d7484; 79 | } 80 | 81 | a { 82 | text-decoration: none; 83 | color: #1d7484; 84 | } 85 | a:visited { 86 | color: #144f5a; 87 | } 88 | a:hover { 89 | color: #982c61; 90 | border-bottom: 2px solid #4a4a4a; 91 | } 92 | 93 | ul { 94 | padding-left: 1.4em; 95 | margin-top: 0px; 96 | margin-bottom: 2.5rem; 97 | } 98 | 99 | li { 100 | margin-bottom: 0.4em; 101 | } 102 | 103 | blockquote { 104 | margin-left: 0px; 105 | margin-right: 0px; 106 | padding-left: 1em; 107 | padding-top: 0.8em; 108 | padding-bottom: 0.8em; 109 | padding-right: 0.8em; 110 | border-left: 5px solid #1d7484; 111 | margin-bottom: 2.5rem; 112 | background-color: #f1f1f1; 113 | } 114 | 115 | blockquote p { 116 | margin-bottom: 0; 117 | } 118 | 119 | img, video { 120 | height: auto; 121 | max-width: 100%; 122 | margin-top: 0px; 123 | margin-bottom: 2.5rem; 124 | } 125 | 126 | /* Pre and Code */ 127 | pre { 128 | background-color: #f1f1f1; 129 | display: block; 130 | padding: 1em; 131 | overflow-x: auto; 132 | margin-top: 0px; 133 | margin-bottom: 2.5rem; 134 | font-size: 0.9em; 135 | } 136 | 137 | code, kbd, samp { 138 | font-size: 0.9em; 139 | padding: 0 0.5em; 140 | background-color: #f1f1f1; 141 | white-space: pre-wrap; 142 | } 143 | 144 | pre > code { 145 | padding: 0; 146 | background-color: transparent; 147 | white-space: pre; 148 | font-size: 1em; 149 | } 150 | 151 | /* Tables */ 152 | table { 153 | text-align: justify; 154 | width: 100%; 155 | border-collapse: collapse; 156 | } 157 | 158 | td, th { 159 | padding: 0.5em; 160 | border-bottom: 1px solid #f1f1f1; 161 | } 162 | 163 | /* Buttons, forms and input */ 164 | input, textarea { 165 | border: 1px solid #4a4a4a; 166 | } 167 | input:focus, textarea:focus { 168 | border: 1px solid #1d7484; 169 | } 170 | 171 | textarea { 172 | width: 100%; 173 | } 174 | 175 | .button, button, input[type=submit], input[type=reset], input[type=button] { 176 | display: inline-block; 177 | padding: 5px 10px; 178 | text-align: center; 179 | text-decoration: none; 180 | white-space: nowrap; 181 | background-color: #1d7484; 182 | color: #f9f9f9; 183 | border-radius: 1px; 184 | border: 1px solid #1d7484; 185 | cursor: pointer; 186 | box-sizing: border-box; 187 | } 188 | .button[disabled], button[disabled], input[type=submit][disabled], input[type=reset][disabled], input[type=button][disabled] { 189 | cursor: default; 190 | opacity: 0.5; 191 | } 192 | .button:focus:enabled, .button:hover:enabled, button:focus:enabled, button:hover:enabled, input[type=submit]:focus:enabled, input[type=submit]:hover:enabled, input[type=reset]:focus:enabled, input[type=reset]:hover:enabled, input[type=button]:focus:enabled, input[type=button]:hover:enabled { 193 | background-color: #982c61; 194 | border-color: #982c61; 195 | color: #f9f9f9; 196 | outline: 0; 197 | } 198 | 199 | textarea, select, input { 200 | color: #4a4a4a; 201 | padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ 202 | margin-bottom: 10px; 203 | background-color: #f1f1f1; 204 | border: 1px solid #f1f1f1; 205 | border-radius: 4px; 206 | box-shadow: none; 207 | box-sizing: border-box; 208 | } 209 | textarea:focus, select:focus, input:focus { 210 | border: 1px solid #1d7484; 211 | outline: 0; 212 | } 213 | 214 | input[type=checkbox]:focus { 215 | outline: 1px dotted #1d7484; 216 | } 217 | 218 | label, legend, fieldset { 219 | display: block; 220 | margin-bottom: 0.5rem; 221 | font-weight: 600; 222 | } -------------------------------------------------------------------------------- /vendor/themes/splendor.css: -------------------------------------------------------------------------------- 1 | @media print { 2 | *, 3 | *:before, 4 | *:after { 5 | background: transparent !important; 6 | color: #000 !important; 7 | box-shadow: none !important; 8 | text-shadow: none !important; 9 | } 10 | 11 | a, 12 | a:visited { 13 | text-decoration: underline; 14 | } 15 | 16 | a[href]:after { 17 | content: " (" attr(href) ")"; 18 | } 19 | 20 | abbr[title]:after { 21 | content: " (" attr(title) ")"; 22 | } 23 | 24 | a[href^="#"]:after, 25 | a[href^="javascript:"]:after { 26 | content: ""; 27 | } 28 | 29 | pre, 30 | blockquote { 31 | border: 1px solid #999; 32 | page-break-inside: avoid; 33 | } 34 | 35 | thead { 36 | display: table-header-group; 37 | } 38 | 39 | tr, 40 | img { 41 | page-break-inside: avoid; 42 | } 43 | 44 | img { 45 | max-width: 100% !important; 46 | } 47 | 48 | p, 49 | h2, 50 | h3 { 51 | orphans: 3; 52 | widows: 3; 53 | } 54 | 55 | h2, 56 | h3 { 57 | page-break-after: avoid; 58 | } 59 | } 60 | 61 | html { 62 | font-size: 12px; 63 | } 64 | 65 | @media screen and (min-width: 32rem) and (max-width: 48rem) { 66 | html { 67 | font-size: 15px; 68 | } 69 | } 70 | 71 | @media screen and (min-width: 48rem) { 72 | html { 73 | font-size: 16px; 74 | } 75 | } 76 | 77 | body { 78 | line-height: 1.85; 79 | } 80 | 81 | p, 82 | .splendor-p { 83 | font-size: 1rem; 84 | margin-bottom: 1.3rem; 85 | } 86 | 87 | h1, 88 | .splendor-h1, 89 | h2, 90 | .splendor-h2, 91 | h3, 92 | .splendor-h3, 93 | h4, 94 | .splendor-h4 { 95 | margin: 1.414rem 0 .5rem; 96 | font-weight: inherit; 97 | line-height: 1.42; 98 | } 99 | 100 | h1, 101 | .splendor-h1 { 102 | margin-top: 0; 103 | font-size: 3.998rem; 104 | } 105 | 106 | h2, 107 | .splendor-h2 { 108 | font-size: 2.827rem; 109 | } 110 | 111 | h3, 112 | .splendor-h3 { 113 | font-size: 1.999rem; 114 | } 115 | 116 | h4, 117 | .splendor-h4 { 118 | font-size: 1.414rem; 119 | } 120 | 121 | h5, 122 | .splendor-h5 { 123 | font-size: 1.121rem; 124 | } 125 | 126 | h6, 127 | .splendor-h6 { 128 | font-size: .88rem; 129 | } 130 | 131 | small, 132 | .splendor-small { 133 | font-size: .707em; 134 | } 135 | 136 | /* https://github.com/mrmrs/fluidity */ 137 | 138 | img, 139 | canvas, 140 | iframe, 141 | video, 142 | svg, 143 | select, 144 | textarea { 145 | max-width: 100%; 146 | } 147 | 148 | @import url(http://fonts.googleapis.com/css?family=Merriweather:300italic,300); 149 | 150 | html { 151 | font-size: 18px; 152 | max-width: 100%; 153 | } 154 | 155 | body { 156 | color: #444; 157 | font-family: 'Merriweather', Georgia, serif; 158 | margin: 0; 159 | max-width: 100%; 160 | } 161 | 162 | /* === A bit of a gross hack so we can have bleeding divs/blockquotes. */ 163 | 164 | p, 165 | *:not(div):not(img):not(body):not(html):not(li):not(blockquote):not(p) { 166 | margin: 1rem auto 1rem; 167 | max-width: 36rem; 168 | padding: .25rem; 169 | } 170 | 171 | div { 172 | width: 100%; 173 | } 174 | 175 | div img { 176 | width: 100%; 177 | } 178 | 179 | blockquote p { 180 | font-size: 1.5rem; 181 | font-style: italic; 182 | margin: 1rem auto 1rem; 183 | max-width: 48rem; 184 | } 185 | 186 | li { 187 | margin-left: 2rem; 188 | } 189 | 190 | /* Counteract the specificity of the gross *:not() chain. */ 191 | 192 | h1 { 193 | padding: 4rem 0 !important; 194 | } 195 | 196 | /* === End gross hack */ 197 | 198 | p { 199 | color: #555; 200 | height: auto; 201 | line-height: 1.45; 202 | } 203 | 204 | pre, 205 | code { 206 | font-family: Menlo, Monaco, "Courier New", monospace; 207 | } 208 | 209 | pre { 210 | background-color: #fafafa; 211 | font-size: .8rem; 212 | overflow-x: scroll; 213 | padding: 1.125em; 214 | } 215 | 216 | a, 217 | a:visited { 218 | color: #3498db; 219 | } 220 | 221 | a:hover, 222 | a:focus, 223 | a:active { 224 | color: #2980b9; 225 | } -------------------------------------------------------------------------------- /vendor/themes/tacit.css: -------------------------------------------------------------------------------- 1 | input, 2 | textarea, 3 | select, 4 | button, 5 | option, 6 | body { 7 | font: normal 400 normal 1.125rem/1.85625rem system-ui, "Helvetica Neue", Helvetica, Arial, sans-serif 8 | } 9 | 10 | th { 11 | font-weight: 600 12 | } 13 | 14 | td, 15 | th { 16 | border-bottom: 0 solid #595959; 17 | padding: 0.928125rem 1.125rem; 18 | text-align: left; 19 | vertical-align: top 20 | } 21 | 22 | thead th { 23 | border-bottom-width: 0.135rem; 24 | padding-bottom: 0.39375rem 25 | } 26 | 27 | table { 28 | display: table; 29 | width: 100% 30 | } 31 | 32 | @media all and (max-width:1024px) { 33 | table { 34 | display: none 35 | } 36 | } 37 | 38 | @media all and (max-width:1024px) { 39 | table thead { 40 | display: none 41 | } 42 | } 43 | 44 | table tr { 45 | border-bottom-width: 0.135rem 46 | } 47 | 48 | table tr th { 49 | border-bottom-width: 0.135rem 50 | } 51 | 52 | table tr td, 53 | table tr th { 54 | overflow: hidden; 55 | padding: 0.3375rem 0.225rem 56 | } 57 | 58 | @media all and (max-width:1024px) { 59 | 60 | table tr td, 61 | table tr th { 62 | border: 0; 63 | display: inline-block 64 | } 65 | } 66 | 67 | @media all and (max-width:1024px) { 68 | table tr { 69 | display: inline-block; 70 | margin: 0.675rem 0 71 | } 72 | } 73 | 74 | @media all and (max-width:1024px) { 75 | table { 76 | display: inline-block 77 | } 78 | } 79 | 80 | fieldset label, 81 | fieldset legend { 82 | display: block 83 | } 84 | 85 | fieldset legend { 86 | margin: 1.125rem 0 87 | } 88 | 89 | input, 90 | textarea, 91 | select, 92 | button { 93 | border-radius: 3.6px; 94 | display: inline-block; 95 | padding: 0.61875rem 96 | } 97 | 98 | input+label, 99 | input+input[type="checkbox"], 100 | input+input[type="radio"], 101 | textarea+label, 102 | textarea+input[type="checkbox"], 103 | textarea+input[type="radio"], 104 | select+label, 105 | select+input[type="checkbox"], 106 | select+input[type="radio"], 107 | button+label, 108 | button+input[type="checkbox"], 109 | button+input[type="radio"] { 110 | page-break-before: always 111 | } 112 | 113 | input, 114 | select, 115 | label { 116 | margin-right: 0.225rem 117 | } 118 | 119 | textarea { 120 | min-height: 5.625rem; 121 | min-width: 22.5rem 122 | } 123 | 124 | label { 125 | display: inline-block; 126 | margin-bottom: 0.7875rem 127 | } 128 | 129 | label+* { 130 | page-break-before: always 131 | } 132 | 133 | label>input { 134 | margin-bottom: 0 135 | } 136 | 137 | input[type="submit"], 138 | input[type="reset"], 139 | button { 140 | background: #f2f2f2; 141 | color: #191919; 142 | cursor: pointer; 143 | display: inline; 144 | margin-bottom: 1.125rem; 145 | margin-right: 0.45rem; 146 | padding: 0.4078125rem 1.4625rem; 147 | text-align: center 148 | } 149 | 150 | input[type="submit"]:hover, 151 | input[type="reset"]:hover, 152 | button:hover { 153 | background: #d9d9d9; 154 | color: #000 155 | } 156 | 157 | input[type="submit"][disabled], 158 | input[type="reset"][disabled], 159 | button[disabled] { 160 | background: #e6e5e5; 161 | color: #403f3f; 162 | cursor: not-allowed 163 | } 164 | 165 | input[type="submit"], 166 | button[type="submit"] { 167 | background: #275a90; 168 | color: #fff 169 | } 170 | 171 | input[type="submit"]:hover, 172 | button[type="submit"]:hover { 173 | background: #173454; 174 | color: #bfbfbf 175 | } 176 | 177 | input, 178 | select, 179 | textarea { 180 | margin-bottom: 1.125rem 181 | } 182 | 183 | input[type="text"], 184 | input[type="password"], 185 | input[type="email"], 186 | input[type="url"], 187 | input[type="phone"], 188 | input[type="tel"], 189 | input[type="number"], 190 | input[type="datetime"], 191 | input[type="date"], 192 | input[type="month"], 193 | input[type="week"], 194 | input[type="color"], 195 | input[type="time"], 196 | input[type="search"], 197 | input[type="range"], 198 | input[type="file"], 199 | input[type="datetime-local"], 200 | select, 201 | textarea { 202 | border: 1px solid #595959; 203 | padding: 0.3375rem 0.39375rem 204 | } 205 | 206 | input[type="checkbox"], 207 | input[type="radio"] { 208 | flex-grow: 0; 209 | height: 1.85625rem; 210 | margin-left: 0; 211 | margin-right: 9px; 212 | vertical-align: middle 213 | } 214 | 215 | input[type="checkbox"]+label, 216 | input[type="radio"]+label { 217 | page-break-before: avoid 218 | } 219 | 220 | select[multiple] { 221 | min-width: 270px 222 | } 223 | 224 | pre, 225 | code, 226 | kbd, 227 | samp, 228 | var, 229 | output { 230 | font: 0.9rem Menlo, Monaco, Consolas, "Courier New", monospace 231 | } 232 | 233 | pre { 234 | border-left: 0 solid #59c072; 235 | line-height: 1.575rem; 236 | overflow: auto; 237 | padding-left: 18px 238 | } 239 | 240 | pre code { 241 | background: none; 242 | border: 0; 243 | line-height: 1.85625rem; 244 | padding: 0 245 | } 246 | 247 | code, 248 | kbd { 249 | background: #daf1e0; 250 | border-radius: 3.6px; 251 | color: #2a6f3b; 252 | display: inline-block; 253 | line-height: 1.125rem; 254 | padding: 0.225rem 0.39375rem 0.16875rem 255 | } 256 | 257 | kbd { 258 | background: #2a6f3b; 259 | color: #fff 260 | } 261 | 262 | mark { 263 | background: #ffc; 264 | padding: 0 0.225rem 265 | } 266 | 267 | h1, 268 | h2, 269 | h3, 270 | h4, 271 | h5, 272 | h6 { 273 | color: #000; 274 | margin-bottom: 1.125rem 275 | } 276 | 277 | h1 { 278 | font-size: 2.25rem; 279 | font-weight: 500; 280 | line-height: 2.7rem; 281 | margin-top: 4.5rem 282 | } 283 | 284 | h2 { 285 | font-size: 1.575rem; 286 | font-weight: 400; 287 | line-height: 2.1375rem; 288 | margin-top: 3.375rem 289 | } 290 | 291 | h3 { 292 | font-size: 1.35rem; 293 | line-height: 1.6875rem; 294 | margin-top: 2.25rem 295 | } 296 | 297 | h4 { 298 | font-size: 1.125rem; 299 | line-height: 1.4625rem; 300 | margin-top: 1.125rem 301 | } 302 | 303 | h5 { 304 | font-size: 0.9rem; 305 | font-weight: bold; 306 | line-height: 1.35rem; 307 | text-transform: uppercase 308 | } 309 | 310 | h6 { 311 | color: #595959; 312 | font-size: 0.9rem; 313 | font-weight: bold; 314 | line-height: 1.125rem; 315 | text-transform: uppercase 316 | } 317 | 318 | a { 319 | color: #275a90; 320 | text-decoration: none 321 | } 322 | 323 | a:hover { 324 | text-decoration: underline 325 | } 326 | 327 | hr { 328 | border-bottom: 1px solid #595959 329 | } 330 | 331 | figcaption, 332 | small { 333 | font-size: 0.95625rem 334 | } 335 | 336 | figcaption { 337 | color: #595959 338 | } 339 | 340 | var, 341 | em, 342 | i { 343 | font-style: italic 344 | } 345 | 346 | dt, 347 | strong, 348 | b { 349 | font-weight: 600 350 | } 351 | 352 | del, 353 | s { 354 | text-decoration: line-through 355 | } 356 | 357 | ins, 358 | u { 359 | text-decoration: underline 360 | } 361 | 362 | sub, 363 | sup { 364 | font-size: 75%; 365 | line-height: 0; 366 | position: relative; 367 | vertical-align: baseline 368 | } 369 | 370 | sup { 371 | top: -.5em 372 | } 373 | 374 | sub { 375 | bottom: -.25em 376 | } 377 | 378 | * { 379 | border: 0; 380 | border-collapse: separate; 381 | border-spacing: 0; 382 | box-sizing: border-box; 383 | margin: 0; 384 | max-width: 100%; 385 | padding: 0; 386 | vertical-align: baseline 387 | } 388 | 389 | html, 390 | body { 391 | width: 100% 392 | } 393 | 394 | html { 395 | height: 100% 396 | } 397 | 398 | body { 399 | background: #fff; 400 | color: #1a1919; 401 | padding: 36px 402 | } 403 | 404 | p, 405 | ul, 406 | ol, 407 | dl, 408 | blockquote, 409 | hr, 410 | pre, 411 | table, 412 | form, 413 | fieldset, 414 | figure, 415 | address { 416 | margin-bottom: 1.85625rem 417 | } 418 | 419 | section { 420 | margin-left: auto; 421 | margin-right: auto; 422 | width: 900px 423 | } 424 | 425 | aside { 426 | float: right; 427 | width: 285px 428 | } 429 | 430 | article, 431 | header, 432 | footer { 433 | padding: 43.2px 434 | } 435 | 436 | article { 437 | background: #fff; 438 | border: 1px solid #d9d9d9 439 | } 440 | 441 | nav { 442 | text-align: center 443 | } 444 | 445 | nav ul { 446 | list-style: none; 447 | margin-left: 0; 448 | text-align: center 449 | } 450 | 451 | nav ul li { 452 | display: inline-block; 453 | margin-left: 9px; 454 | margin-right: 9px; 455 | vertical-align: middle 456 | } 457 | 458 | nav ul li:first-child { 459 | margin-left: 0 460 | } 461 | 462 | nav ul li:last-child { 463 | margin-right: 0 464 | } 465 | 466 | ol, 467 | ul { 468 | margin-left: 31.5px 469 | } 470 | 471 | li dl, 472 | li ol, 473 | li ul { 474 | margin-bottom: 0 475 | } 476 | 477 | dl { 478 | display: inline-block 479 | } 480 | 481 | dt { 482 | padding: 0 1.125rem 483 | } 484 | 485 | dd { 486 | padding: 0 1.125rem 0.28125rem 487 | } 488 | 489 | dd:last-of-type { 490 | border-bottom: 0 solid #595959 491 | } 492 | 493 | dd+dt { 494 | border-top: 0 solid #595959; 495 | padding-top: 0.5625rem 496 | } 497 | 498 | blockquote { 499 | border-left: 0 solid #595959; 500 | padding: 0.28125rem 1.125rem 0.28125rem 0.99rem 501 | } 502 | 503 | blockquote footer { 504 | color: #595959; 505 | font-size: 0.84375rem; 506 | margin: 0 507 | } 508 | 509 | blockquote p { 510 | margin-bottom: 0 511 | } 512 | 513 | img { 514 | height: auto; 515 | margin: 0 auto 516 | } 517 | 518 | figure img { 519 | display: block 520 | } 521 | 522 | @media (max-width:767px) { 523 | body { 524 | padding: 18px 0 525 | } 526 | 527 | article { 528 | border: 0; 529 | padding: 18px 530 | } 531 | 532 | header, 533 | footer { 534 | padding: 18px 535 | } 536 | 537 | textarea, 538 | input, 539 | select { 540 | min-width: 0 541 | } 542 | 543 | fieldset { 544 | min-width: 0 545 | } 546 | 547 | fieldset * { 548 | flex-grow: 1; 549 | page-break-before: auto 550 | } 551 | 552 | section { 553 | width: auto 554 | } 555 | 556 | x:-moz-any-link { 557 | display: table-cell 558 | } 559 | } -------------------------------------------------------------------------------- /vendor/themes/tufte.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /* Import ET Book styles 4 | adapted from https://github.com/edwardtufte/et-book/blob/gh-pages/et-book.css */ 5 | 6 | @font-face { 7 | font-family: "et-book"; 8 | src: url("et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot"); 9 | src: url("et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix") format("embedded-opentype"), url("et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff") format("woff"), url("et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf") format("truetype"), url("et-book/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbookromanosf") format("svg"); 10 | font-weight: normal; 11 | font-style: normal; 12 | font-display: swap; 13 | } 14 | 15 | @font-face { 16 | font-family: "et-book"; 17 | src: url("et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot"); 18 | src: url("et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix") format("embedded-opentype"), url("et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff"), url("et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype"), url("et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbookromanosf") format("svg"); 19 | font-weight: normal; 20 | font-style: italic; 21 | font-display: swap; 22 | } 23 | 24 | @font-face { 25 | font-family: "et-book"; 26 | src: url("et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot"); 27 | src: url("et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix") format("embedded-opentype"), url("et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff"), url("et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype"), url("et-book/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbookromanosf") format("svg"); 28 | font-weight: bold; 29 | font-style: normal; 30 | font-display: swap; 31 | } 32 | 33 | @font-face { 34 | font-family: "et-book-roman-old-style"; 35 | src: url("et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot"); 36 | src: url("et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix") format("embedded-opentype"), url("et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff"), url("et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype"), url("et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbookromanosf") format("svg"); 37 | font-weight: normal; 38 | font-style: normal; 39 | font-display: swap; 40 | } 41 | 42 | /* Tufte CSS styles */ 43 | html { 44 | font-size: 15px; 45 | } 46 | 47 | body { 48 | width: 87.5%; 49 | margin-left: auto; 50 | margin-right: auto; 51 | padding-left: 12.5%; 52 | font-family: et-book, Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif; 53 | background-color: #fffff8; 54 | color: #111; 55 | max-width: 1400px; 56 | counter-reset: sidenote-counter; 57 | } 58 | 59 | /* Adds dark mode */ 60 | @media (prefers-color-scheme: dark) { 61 | body { 62 | background-color: #151515; 63 | color: #ddd; 64 | } 65 | } 66 | 67 | h1 { 68 | font-weight: 400; 69 | margin-top: 4rem; 70 | margin-bottom: 1.5rem; 71 | font-size: 3.2rem; 72 | line-height: 1; 73 | } 74 | 75 | h2 { 76 | font-style: italic; 77 | font-weight: 400; 78 | margin-top: 2.1rem; 79 | margin-bottom: 1.4rem; 80 | font-size: 2.2rem; 81 | line-height: 1; 82 | } 83 | 84 | h3 { 85 | font-style: italic; 86 | font-weight: 400; 87 | font-size: 1.7rem; 88 | margin-top: 2rem; 89 | margin-bottom: 1.4rem; 90 | line-height: 1; 91 | } 92 | 93 | hr { 94 | display: block; 95 | height: 1px; 96 | width: 55%; 97 | border: 0; 98 | border-top: 1px solid #ccc; 99 | margin: 1em 0; 100 | padding: 0; 101 | } 102 | 103 | p.subtitle { 104 | font-style: italic; 105 | margin-top: 1rem; 106 | margin-bottom: 1rem; 107 | font-size: 1.8rem; 108 | display: block; 109 | line-height: 1; 110 | } 111 | 112 | .numeral { 113 | font-family: et-book-roman-old-style; 114 | } 115 | 116 | .danger { 117 | color: red; 118 | } 119 | 120 | article { 121 | padding: 5rem 0rem; 122 | } 123 | 124 | section { 125 | padding-top: 1rem; 126 | padding-bottom: 1rem; 127 | } 128 | 129 | p, 130 | dl, 131 | ol, 132 | ul { 133 | font-size: 1.4rem; 134 | line-height: 2rem; 135 | } 136 | 137 | p { 138 | margin-top: 1.4rem; 139 | margin-bottom: 1.4rem; 140 | padding-right: 0; 141 | vertical-align: baseline; 142 | } 143 | 144 | /* Chapter Epigraphs */ 145 | div.epigraph { 146 | margin: 5em 0; 147 | } 148 | 149 | div.epigraph > blockquote { 150 | margin-top: 3em; 151 | margin-bottom: 3em; 152 | } 153 | 154 | div.epigraph > blockquote, 155 | div.epigraph > blockquote > p { 156 | font-style: italic; 157 | } 158 | 159 | div.epigraph > blockquote > footer { 160 | font-style: normal; 161 | } 162 | 163 | div.epigraph > blockquote > footer > cite { 164 | font-style: italic; 165 | } 166 | /* end chapter epigraphs styles */ 167 | 168 | blockquote { 169 | font-size: 1.4rem; 170 | } 171 | 172 | blockquote p { 173 | width: 55%; 174 | margin-right: 40px; 175 | } 176 | 177 | blockquote footer { 178 | width: 55%; 179 | font-size: 1.1rem; 180 | text-align: right; 181 | } 182 | 183 | section > p, 184 | section > footer, 185 | section > table { 186 | width: 55%; 187 | } 188 | 189 | /* 50 + 5 == 55, to be the same width as paragraph */ 190 | section > dl, 191 | section > ol, 192 | section > ul { 193 | width: 50%; 194 | -webkit-padding-start: 5%; 195 | } 196 | 197 | dt:not(:first-child), 198 | li:not(:first-child) { 199 | margin-top: 0.25rem; 200 | } 201 | 202 | figure { 203 | padding: 0; 204 | border: 0; 205 | font-size: 100%; 206 | font: inherit; 207 | vertical-align: baseline; 208 | max-width: 55%; 209 | -webkit-margin-start: 0; 210 | -webkit-margin-end: 0; 211 | margin: 0 0 3em 0; 212 | } 213 | 214 | figcaption { 215 | float: right; 216 | clear: right; 217 | margin-top: 0; 218 | margin-bottom: 0; 219 | font-size: 1.1rem; 220 | line-height: 1.6; 221 | vertical-align: baseline; 222 | position: relative; 223 | max-width: 40%; 224 | } 225 | 226 | figure.fullwidth figcaption { 227 | margin-right: 24%; 228 | } 229 | 230 | /* Links: replicate underline that clears descenders */ 231 | a:link, 232 | a:visited { 233 | color: inherit; 234 | } 235 | 236 | .no-tufte-underline:link { 237 | background: unset; 238 | text-shadow: unset; 239 | } 240 | 241 | a:link, .tufte-underline, .hover-tufte-underline:hover { 242 | text-decoration: none; 243 | background: -webkit-linear-gradient(#fffff8, #fffff8), -webkit-linear-gradient(#fffff8, #fffff8), -webkit-linear-gradient(currentColor, currentColor); 244 | background: linear-gradient(#fffff8, #fffff8), linear-gradient(#fffff8, #fffff8), linear-gradient(currentColor, currentColor); 245 | -webkit-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; 246 | -moz-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; 247 | background-size: 0.05em 1px, 0.05em 1px, 1px 1px; 248 | background-repeat: no-repeat, no-repeat, repeat-x; 249 | text-shadow: 0.03em 0 #fffff8, -0.03em 0 #fffff8, 0 0.03em #fffff8, 0 -0.03em #fffff8, 0.06em 0 #fffff8, -0.06em 0 #fffff8, 0.09em 0 #fffff8, -0.09em 0 #fffff8, 0.12em 0 #fffff8, -0.12em 0 #fffff8, 0.15em 0 #fffff8, -0.15em 0 #fffff8; 250 | background-position: 0% 93%, 100% 93%, 0% 93%; 251 | } 252 | 253 | @media screen and (-webkit-min-device-pixel-ratio: 0) { 254 | a:link, .tufte-underline, .hover-tufte-underline:hover { 255 | background-position-y: 87%, 87%, 87%; 256 | } 257 | } 258 | 259 | /* Adds dark mode */ 260 | @media (prefers-color-scheme: dark) { 261 | a:link, .tufte-underline, .hover-tufte-underline:hover { 262 | text-shadow: 0.03em 0 #151515, -0.03em 0 #151515, 0 0.03em #151515, 0 -0.03em #151515, 0.06em 0 #151515, -0.06em 0 #151515, 0.09em 0 #151515, -0.09em 0 #151515, 0.12em 0 #151515, -0.12em 0 #151515, 0.15em 0 #151515, -0.15em 0 #151515; 263 | } 264 | } 265 | 266 | a:link::selection, 267 | a:link::-moz-selection { 268 | text-shadow: 0.03em 0 #b4d5fe, -0.03em 0 #b4d5fe, 0 0.03em #b4d5fe, 0 -0.03em #b4d5fe, 0.06em 0 #b4d5fe, -0.06em 0 #b4d5fe, 0.09em 0 #b4d5fe, -0.09em 0 #b4d5fe, 0.12em 0 #b4d5fe, -0.12em 0 #b4d5fe, 0.15em 0 #b4d5fe, -0.15em 0 #b4d5fe; 269 | background: #b4d5fe; 270 | } 271 | 272 | /* Sidenotes, margin notes, figures, captions */ 273 | img { 274 | max-width: 100%; 275 | } 276 | 277 | .sidenote, 278 | .marginnote { 279 | float: right; 280 | clear: right; 281 | margin-right: -60%; 282 | width: 50%; 283 | margin-top: 0.3rem; 284 | margin-bottom: 0; 285 | font-size: 1.1rem; 286 | line-height: 1.3; 287 | vertical-align: baseline; 288 | position: relative; 289 | } 290 | 291 | .sidenote-number { 292 | counter-increment: sidenote-counter; 293 | } 294 | 295 | .sidenote-number:after, 296 | .sidenote:before { 297 | font-family: et-book-roman-old-style; 298 | position: relative; 299 | vertical-align: baseline; 300 | } 301 | 302 | .sidenote-number:after { 303 | content: counter(sidenote-counter); 304 | font-size: 1rem; 305 | top: -0.5rem; 306 | left: 0.1rem; 307 | } 308 | 309 | .sidenote:before { 310 | content: counter(sidenote-counter) " "; 311 | font-size: 1rem; 312 | top: -0.5rem; 313 | } 314 | 315 | blockquote .sidenote, 316 | blockquote .marginnote { 317 | margin-right: -82%; 318 | min-width: 59%; 319 | text-align: left; 320 | } 321 | 322 | div.fullwidth, 323 | table.fullwidth { 324 | width: 100%; 325 | } 326 | 327 | div.table-wrapper { 328 | overflow-x: auto; 329 | font-family: "Trebuchet MS", "Gill Sans", "Gill Sans MT", sans-serif; 330 | } 331 | 332 | .sans { 333 | font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif; 334 | letter-spacing: .03em; 335 | } 336 | 337 | code, pre > code { 338 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; 339 | font-size: 1.0rem; 340 | line-height: 1.42; 341 | -webkit-text-size-adjust: 100%; /* Prevent adjustments of font size after orientation changes in iOS. See https://github.com/edwardtufte/tufte-css/issues/81#issuecomment-261953409 */ 342 | } 343 | 344 | .sans > code { 345 | font-size: 1.2rem; 346 | } 347 | 348 | h1 > code, 349 | h2 > code, 350 | h3 > code { 351 | font-size: 0.80em; 352 | } 353 | 354 | .marginnote > code, 355 | .sidenote > code { 356 | font-size: 1rem; 357 | } 358 | 359 | pre > code { 360 | font-size: 0.9rem; 361 | width: 52.5%; 362 | margin-left: 2.5%; 363 | overflow-x: auto; 364 | display: block; 365 | } 366 | 367 | pre.fullwidth > code { 368 | width: 90%; 369 | } 370 | 371 | .fullwidth { 372 | max-width: 90%; 373 | clear:both; 374 | } 375 | 376 | span.newthought { 377 | font-variant: small-caps; 378 | font-size: 1.2em; 379 | } 380 | 381 | input.margin-toggle { 382 | display: none; 383 | } 384 | 385 | label.sidenote-number { 386 | display: inline-block; 387 | max-height: 2rem; /* should be less than or equal to paragraph line-height */ 388 | } 389 | 390 | label.margin-toggle:not(.sidenote-number) { 391 | display: none; 392 | } 393 | 394 | .iframe-wrapper { 395 | position: relative; 396 | padding-bottom: 56.25%; /* 16:9 */ 397 | padding-top: 25px; 398 | height: 0; 399 | } 400 | 401 | .iframe-wrapper iframe { 402 | position: absolute; 403 | top: 0; 404 | left: 0; 405 | width: 100%; 406 | height: 100%; 407 | } 408 | 409 | @media (max-width: 760px) { 410 | body { 411 | width: 84%; 412 | padding-left: 8%; 413 | padding-right: 8%; 414 | } 415 | 416 | hr, 417 | section > p, 418 | section > footer, 419 | section > table { 420 | width: 100%; 421 | } 422 | 423 | pre > code { 424 | width: 97%; 425 | } 426 | 427 | section > dl, 428 | section > ol, 429 | section > ul { 430 | width: 90%; 431 | } 432 | 433 | figure { 434 | max-width: 90%; 435 | } 436 | 437 | figcaption, 438 | figure.fullwidth figcaption { 439 | margin-right: 0%; 440 | max-width: none; 441 | } 442 | 443 | blockquote { 444 | margin-left: 1.5em; 445 | margin-right: 0em; 446 | } 447 | 448 | blockquote p, 449 | blockquote footer { 450 | width: 100%; 451 | } 452 | 453 | label.margin-toggle:not(.sidenote-number) { 454 | display: inline; 455 | } 456 | 457 | .sidenote, 458 | .marginnote { 459 | display: none; 460 | } 461 | 462 | .margin-toggle:checked + .sidenote, 463 | .margin-toggle:checked + .marginnote { 464 | display: block; 465 | float: left; 466 | left: 1rem; 467 | clear: both; 468 | width: 95%; 469 | margin: 1rem 2.5%; 470 | vertical-align: baseline; 471 | position: relative; 472 | } 473 | 474 | label { 475 | cursor: pointer; 476 | } 477 | 478 | div.table-wrapper, 479 | table { 480 | width: 85%; 481 | } 482 | 483 | img { 484 | width: 100%; 485 | } 486 | } -------------------------------------------------------------------------------- /vendor/themes/yorha.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: #d1cdb7; 3 | -webkit-background-size: 0.3rem 0.3rem; 4 | -moz-background-size: 0.3rem 0.3rem; 5 | background-size: 0.3rem 0.3rem; 6 | background-image: -webkit-linear-gradient(left, #ccc8b1 1px, rgba(204,200,177,0) 1px), -webkit-linear-gradient(top, #ccc8b1 1px, rgba(204,200,177,0) 1px); 7 | background-image: -moz-linear-gradient(left, #ccc8b1 1px, rgba(204,200,177,0) 1px), -moz-linear-gradient(top, #ccc8b1 1px, rgba(204,200,177,0) 1px); 8 | background-image: -o-linear-gradient(left, #ccc8b1 1px, rgba(204,200,177,0) 1px), -o-linear-gradient(top, #ccc8b1 1px, rgba(204,200,177,0) 1px); 9 | background-image: -ms-linear-gradient(left, #ccc8b1 1px, rgba(204,200,177,0) 1px), -ms-linear-gradient(top, #ccc8b1 1px, rgba(204,200,177,0) 1px); 10 | background-image: linear-gradient(to right, #ccc8b1 1px, rgba(204,200,177,0) 1px), linear-gradient(to bottom, #ccc8b1 1px, rgba(204,200,177,0) 1px); 11 | font-family: helvetica, sans-serif; 12 | letter-spacing: 0.03rem; 13 | font-weight: lighter; 14 | color: #454138; 15 | } 16 | ::selection { 17 | background-color: #bab5a1; 18 | } 19 | a { 20 | color: inherit; 21 | } 22 | p { 23 | margin: 0 0 1rem 0; 24 | } 25 | mark { 26 | background-color: #454138; 27 | color: #dcd8c0; 28 | } 29 | h1 { 30 | font-weight: normal; 31 | text-transform: uppercase; 32 | letter-spacing: 0.5rem; 33 | text-shadow: 0.3rem 0.3rem 0 #bab5a1; 34 | } 35 | h2 { 36 | font-weight: lighter; 37 | border: solid #454138; 38 | border-width: 0.1rem 0; 39 | padding: 0.1rem 1rem; 40 | } 41 | h3, 42 | h4, 43 | h5, 44 | h6 { 45 | font-weight: lighter; 46 | letter-spacing: 0.1rem; 47 | } 48 | blockquote { 49 | position: relative; 50 | padding: 0.5rem; 51 | } 52 | blockquote:before { 53 | content: ''; 54 | position: absolute; 55 | top: 0; 56 | left: -1.5rem; 57 | bottom: 0; 58 | height: 100%; 59 | width: 0.3rem; 60 | border: solid #bab5a1; 61 | border-width: 0 0.2rem 0 0.6rem; 62 | } 63 | cite { 64 | position: relative; 65 | padding-left: 2rem; 66 | } 67 | cite:before { 68 | content: ''; 69 | position: absolute; 70 | width: 0.7rem; 71 | height: 0.7rem; 72 | background-color: #454138; 73 | margin-left: -1rem; 74 | top: 0.25em; 75 | } 76 | hr { 77 | margin: 1rem 0; 78 | border-top: solid #bab5a1; 79 | border-width: 0.1rem 0 0 0; 80 | } 81 | table { 82 | border-collapse: collapse; 83 | font-weight: inherit; 84 | } 85 | td, 86 | th { 87 | padding: 0.5rem; 88 | } 89 | th { 90 | font-weight: normal; 91 | text-align: left; 92 | border-bottom: 0.1rem solid #454138; 93 | } 94 | pre { 95 | background-color: #dcd8c0; 96 | padding: 1rem; 97 | } 98 | fieldset { 99 | padding: 1rem; 100 | padding-top: 0.5rem; 101 | border: 0.1rem solid #bab5a1; 102 | } 103 | legend { 104 | padding: 0 0.5rem; 105 | } 106 | label { 107 | display: inline-block; 108 | margin: 0.5rem 0; 109 | } 110 | textarea, 111 | input[type=text], 112 | input[type=password], 113 | input[type=url], 114 | input[type=email], 115 | input[type=tel], 116 | input[type=search], 117 | input[type=number], 118 | input[type=color], 119 | input[type=date], 120 | input[type=month], 121 | input[type=week], 122 | input[type=datetime], 123 | input[type=datetime-local] { 124 | padding: 0.5rem; 125 | font-size: 1em; 126 | border: none; 127 | outline: none; 128 | -webkit-appearance: none; 129 | -moz-appearance: none; 130 | appearance: none; 131 | border-radius: 0; 132 | background-color: #dcd8c0; 133 | color: inherit; 134 | font-family: inherit; 135 | letter-spacing: inherit; 136 | font-weight: inherit; 137 | } 138 | select { 139 | background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIwLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA0LjkgMTAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQuOSAxMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiM0NDQ0NDQ7fQo8L3N0eWxlPgo8dGl0bGU+YXJyb3dzPC90aXRsZT4KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxLjQsNC43IDIuNSwzLjIgMy41LDQuNyAiLz4KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIzLjUsNS4zIDIuNSw2LjggMS40LDUuMyAiLz4KPC9zdmc+Cg==") no-repeat right; 140 | padding: 0.5rem; 141 | font-size: 1em; 142 | border: none; 143 | outline: none; 144 | -webkit-appearance: none; 145 | -moz-appearance: none; 146 | appearance: none; 147 | border-radius: 0; 148 | background-color: #dcd8c0; 149 | color: inherit; 150 | font-family: inherit; 151 | letter-spacing: inherit; 152 | font-weight: inherit; 153 | } 154 | input[type=submit]:not(:disabled), 155 | input[type=button]:not(:disabled), 156 | input[type=reset]:not(:disabled) { 157 | padding: 0.5rem; 158 | font-size: 1em; 159 | border: none; 160 | outline: none; 161 | -webkit-appearance: none; 162 | -moz-appearance: none; 163 | appearance: none; 164 | border-radius: 0; 165 | background-color: #bab5a1; 166 | color: inherit; 167 | font-family: inherit; 168 | letter-spacing: inherit; 169 | font-weight: inherit; 170 | cursor: pointer; 171 | -webkit-transition-duration: 0.2s; 172 | -moz-transition-duration: 0.2s; 173 | -o-transition-duration: 0.2s; 174 | -ms-transition-duration: 0.2s; 175 | transition-duration: 0.2s; 176 | -webkit-transition-property: color, background-color, box-shadow; 177 | -moz-transition-property: color, background-color, box-shadow; 178 | -o-transition-property: color, background-color, box-shadow; 179 | -ms-transition-property: color, background-color, box-shadow; 180 | transition-property: color, background-color, box-shadow; 181 | } 182 | input[type=submit]:not(:disabled):hover, 183 | input[type=button]:not(:disabled):hover, 184 | input[type=reset]:not(:disabled):hover { 185 | -webkit-box-shadow: 0.2em 0.2em 0.1em 0 #bab5a1; 186 | box-shadow: 0.2em 0.2em 0.1em 0 #bab5a1; 187 | } 188 | input[type=submit]:not(:disabled):hover, 189 | input[type=button]:not(:disabled):hover, 190 | input[type=reset]:not(:disabled):hover { 191 | background-color: #454138; 192 | color: #dcd8c0; 193 | } 194 | input[type=submit]:not(:disabled):active, 195 | input[type=button]:not(:disabled):active, 196 | input[type=reset]:not(:disabled):active { 197 | background-color: #dcd8c0; 198 | color: #454138; 199 | } 200 | input:disabled, 201 | button:disabled, 202 | .button-disabled { 203 | padding: 0.5rem; 204 | font-size: 1em; 205 | border: none; 206 | outline: none; 207 | -webkit-appearance: none; 208 | -moz-appearance: none; 209 | appearance: none; 210 | border-radius: 0; 211 | background-color: #dcd8c0; 212 | color: inherit; 213 | font-family: inherit; 214 | letter-spacing: inherit; 215 | font-weight: inherit; 216 | color: #bab5a1; 217 | cursor: not-allowed; 218 | } 219 | button:not(:disabled), 220 | .button { 221 | padding: 0.5rem; 222 | font-size: 1em; 223 | border: none; 224 | outline: none; 225 | -webkit-appearance: none; 226 | -moz-appearance: none; 227 | appearance: none; 228 | border-radius: 0; 229 | background-color: #bab5a1; 230 | color: inherit; 231 | font-family: inherit; 232 | letter-spacing: inherit; 233 | font-weight: inherit; 234 | cursor: pointer; 235 | -webkit-transition-duration: 0.2s; 236 | -moz-transition-duration: 0.2s; 237 | -o-transition-duration: 0.2s; 238 | -ms-transition-duration: 0.2s; 239 | transition-duration: 0.2s; 240 | -webkit-transition-property: color, background-color, box-shadow; 241 | -moz-transition-property: color, background-color, box-shadow; 242 | -o-transition-property: color, background-color, box-shadow; 243 | -ms-transition-property: color, background-color, box-shadow; 244 | transition-property: color, background-color, box-shadow; 245 | position: relative; 246 | z-index: 1; 247 | } 248 | button:not(:disabled):hover, 249 | .button:hover { 250 | -webkit-box-shadow: 0.2em 0.2em 0.1em 0 #bab5a1; 251 | box-shadow: 0.2em 0.2em 0.1em 0 #bab5a1; 252 | } 253 | button:not(:disabled):before, 254 | .button:before { 255 | content: ''; 256 | -webkit-transition: all 0.2s; 257 | -moz-transition: all 0.2s; 258 | -o-transition: all 0.2s; 259 | -ms-transition: all 0.2s; 260 | transition: all 0.2s; 261 | position: absolute; 262 | top: 0; 263 | bottom: 0; 264 | left: 0; 265 | right: 0; 266 | } 267 | button:not(:disabled):after, 268 | .button:after { 269 | content: ''; 270 | -webkit-transition: all 0.2s; 271 | -moz-transition: all 0.2s; 272 | -o-transition: all 0.2s; 273 | -ms-transition: all 0.2s; 274 | transition: all 0.2s; 275 | -webkit-transition-timing-function: ease-out; 276 | -moz-transition-timing-function: ease-out; 277 | -o-transition-timing-function: ease-out; 278 | -ms-transition-timing-function: ease-out; 279 | transition-timing-function: ease-out; 280 | position: absolute; 281 | top: 0; 282 | bottom: 0; 283 | left: 0; 284 | width: 0; 285 | background-color: #454138; 286 | z-index: -1; 287 | } 288 | button:not(:disabled):hover, 289 | .button:hover { 290 | background-color: transparent; 291 | color: #dcd8c0; 292 | } 293 | button:not(:disabled):hover:before, 294 | .button:hover:before { 295 | top: -0.2rem; 296 | bottom: -0.2rem; 297 | border: solid #454138; 298 | border-width: 0.1rem 0; 299 | } 300 | button:not(:disabled):hover:after, 301 | .button:hover:after { 302 | width: 100%; 303 | } 304 | button:not(:disabled):active, 305 | .button:active { 306 | color: #454138; 307 | } 308 | button:not(:disabled):active:after, 309 | .button:active:after { 310 | background-color: #dcd8c0; 311 | } 312 | ::-webkit-input-placeholder, 313 | ::-moz-placeholder, 314 | ::-ms-input-placeholder { 315 | opacity: 1; 316 | -ms-filter: none; 317 | filter: none; 318 | color: #bab5a1; 319 | font-weight: lighter; 320 | } 321 | figure { 322 | display: -webkit-box; 323 | display: -moz-box; 324 | display: -webkit-flex; 325 | display: -ms-flexbox; 326 | display: box; 327 | display: flex; 328 | -webkit-box-orient: vertical; 329 | -moz-box-orient: vertical; 330 | -o-box-orient: vertical; 331 | -webkit-flex-direction: column; 332 | -ms-flex-direction: column; 333 | flex-direction: column; 334 | margin: 0; 335 | margin-bottom: 1rem; 336 | background-color: #dcd8c0; 337 | padding: 0.5rem; 338 | } 339 | figure > :not(figcaption) { 340 | margin: 0.5rem; 341 | } 342 | figure > figcaption { 343 | -webkit-box-ordinal-group: -1; 344 | -moz-box-ordinal-group: -1; 345 | -o-box-ordinal-group: -1; 346 | -ms-flex-order: -1; 347 | -webkit-order: -1; 348 | order: -1; 349 | margin: -0.5rem; 350 | margin-bottom: 0.5rem; 351 | padding: 0.5rem 1rem; 352 | font-size: 1.2rem; 353 | background-color: #454138; 354 | color: #bab5a1; 355 | } 356 | iframe { 357 | border: 0.1rem solid #bab5a1; 358 | } --------------------------------------------------------------------------------