[
  {
    "path": ".eslintrc.cjs",
    "content": "/* eslint-env node */\nmodule.exports = {\n  extends: [\n    'eslint:recommended',\n    'plugin:@typescript-eslint/recommended',\n    'plugin:astro/recommended',\n    'prettier'\n  ],\n  env: {\n    browser: true // enables window, document, etc\n  },\n  parser: '@typescript-eslint/parser',\n  plugins: ['@typescript-eslint'],\n  root: true,\n  ignorePatterns: ['dist/**'],\n\n  overrides: [\n    {\n      files: ['*.test.ts'],\n      rules: {\n        '@typescript-eslint/no-explicit-any': 'off'\n      }\n    },\n    {\n      files: ['*.astro'],\n      parser: 'astro-eslint-parser',\n      parserOptions: {\n        parser: '@typescript-eslint/parser',\n        extraFileExtensions: ['.astro']\n      }\n      // rules: {\n      // override/add rules settings here, such as:\n      // \"astro/no-set-html-directive\": \"error\"\n      // },\n    }\n  ]\n}\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: Run tests\non:\n  push:\n    branches: [main, master]\n  pull_request:\n    branches: [main, master]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: ruby/setup-ruby@v1\n        with:\n          bundler-cache: true\n      - uses: actions/setup-node@v4\n        with:\n          node-version-file: .node-version\n      - uses: pnpm/action-setup@v3\n        with: { run_install: false }\n\n      # https://github.com/pnpm/action-setup?tab=readme-ov-file#use-cache-to-reduce-installation-time\n      - name: Get pnpm store directory\n        shell: bash\n        run: |\n          echo \"STORE_PATH=$(pnpm store path --silent)\" >> $GITHUB_ENV\n      - uses: actions/cache@v4\n        name: Setup pnpm cache\n        with:\n          path: ${{ env.STORE_PATH }}\n          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}\n          restore-keys: |\n            ${{ runner.os }}-pnpm-store-\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n      - name: Install playwright browsers\n        run: pnpm playwright install --with-deps chromium\n      - name: Run tests\n        run: pnpm run ci\n"
  },
  {
    "path": ".gitignore",
    "content": "# build output\ndist/\n# generated types\n.astro/\n\n# dependencies\nnode_modules/\n\n# logs\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n\n# environment variables\n.env\n.env.production\n\n# macOS-specific files\n.DS_Store\n\n.cache\n\n# playwright\ntest-results\n"
  },
  {
    "path": ".node-version",
    "content": "22.21.1\n"
  },
  {
    "path": ".prettierignore",
    "content": "src/sass/vendor\nvendor\n.cache\ndist\n*.md\npnpm-lock.yaml\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"semi\": false,\n  \"singleQuote\": true,\n  \"trailingComma\": \"none\",\n  \"plugins\": [\"prettier-plugin-astro\"]\n}\n"
  },
  {
    "path": ".ruby-version",
    "content": "3.2.2\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\"astro-build.astro-vscode\"],\n  \"unwantedRecommendations\": []\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"command\": \"./node_modules/.bin/astro dev\",\n      \"name\": \"Development server\",\n      \"request\": \"launch\",\n      \"type\": \"node-terminal\"\n    }\n  ]\n}\n"
  },
  {
    "path": ".vscode/markdown.code-snippets",
    "content": "{\n  \"Test snip\": {\n    \"prefix\": [\"about\"],\n    \"body\": \"Copyright. Foo Corp 2028\",\n    \"description\": \"Adds copyright...\",\n    \"scope\": \"markdown\"\n  }\n}\n"
  },
  {
    "path": "101.md",
    "content": "---\ntitle: 101\ncategory: JavaScript libraries\nupdated: 2017-09-21\nintro: |\n  [101](https://www.npmjs.com/package/101) is a JavaScript library for dealing with immutable data in a functional manner.\n---\n\n### Usage\n\n```js\nconst isObject = require('101/isObject')\nisObject({}) // → true\n```\n\nEvery function is exposed as a module.\n\nSee: [101](https://github.com/tjmehta/101)\n\n### Type checking\n\n```js\nisObject({})\nisString('str')\nisRegExp(/regexp/)\nisBoolean(true)\nisEmpty({})\nisfunction(x => x)\nisInteger(10)\nisNumber(10.1)\ninstanceOf(obj, 'string')\n```\n\n## Objects\n{: .-three-column}\n\n### Example\n{: .-prime}\n\n```js\nlet obj = {}\n```\n\n#### Update\n\n```js\nobj = put(obj, 'user.name', 'John')\n// → { user: { name: 'John' } }\n```\n\n#### Read\n\n```js\npluck(name, 'user.name')\n// → 'John'\n```\n\n#### Delete\n\n```js\nobj = del(obj, 'user')\n// → { }\n```\n\n### Getting\n\n```js\npluck(state, 'user.profile.name')\n```\n\n```js\npick(state, ['user', 'ui'])\npick(state, /^_/)\n```\n\n`pluck` returns values, `pick` returns subsets of objects.\n\nSee:\n[pluck](https://github.com/tjmehta/101#pluck),\n[pick](https://github.com/tjmehta/101#pick)\n\n### Setting\n\n```js\nput(state, 'user.profile.name', 'john')\n```\n\nSee:\n[put](https://github.com/tjmehta/101#put)\n\n### Deleting\n\n```js\ndel(state, 'user.profile')\nomit(state, ['user', 'data'])\n```\n\n`omit` is like `del`, but supports multiple keys to be deleted.\n\nSee:\n[omit](https://github.com/tjmehta/101#omit),\n[del](https://github.com/tjmehta/101#del)\n\n### Keypath check\n\n```js\nhasKeypaths(state, ['user'])\nhasKeypaths(state, { 'user.profile.name': 'john' })\n```\n\nSee:\n[hasKeypaths](https://github.com/tjmehta/101#haskeypaths)\n\n### Get values\n\n```js\nvalues(state)\n```\n\n## Functions\n\n### Simple functions\n\n| `and(x, y)` | `x && y` |\n| `or(x, y)` | `x || y` |\n| `xor(x, y)` | `!(!x && !y) && !(x && y)` |\n| `equals(x, y)` | `x === y` |\n| `exists(x)` | `!!x` |\n| `not(x)` | `!x` |\n\nUseful for function composition.\n\nSee:\n[and](https://github.com/tjmehta/101#and),\n[equals](https://github.com/tjmehta/101#equals),\n[exists](https://github.com/tjmehta/101#exists)\n\n### Composition\n\n```js\ncompose(f, g)       // x => f(g(x))\ncurry(f)            // x => y => f(x, y)\nflip(f)             // f(x, y) --> f(y, x)\n```\n\nSee:\n[compose](https://github.com/tjmehta/101#compose),\n[curry](https://github.com/tjmehta/101#curry),\n[flip](https://github.com/tjmehta/101#flip)\n\n### And/or\n\n```js\npassAll(f, g)       // x => f(x) && g(x)\npassAny(f, g)       // x => f(x) || g(x)\n```\n\nSee:\n[passAll](https://github.com/tjmehta/101#passall),\n[passAny](https://github.com/tjmehta/101#passany)\n\n### Converge\n\n```js\nconverge(and, [pluck('a'), pluck('b')])(x)\n```\n\n```js\n// → and(pluck(x, 'a'), pluck(x, 'b'))\n```\n\nSee:\n[converge](https://github.com/tjmehta/101#converge)\n\n## Arrays\n\n### Finding\n\n```js\nfind(list, x => x.y === 2)\nfindIndex(list, x => ...)\nincludes(list, 'item')\nlast(list)\n```\n\n```js\nfind(list, hasProps('id'))\n```\n\n### Grouping\n\n```js\ngroupBy(list, 'id')\nindexBy(list, 'id')\n```\n\n## Examples\n\n### Function composition\n\n```js\nisFloat = passAll(isNumber, compose(isInteger, not))\n// n => isNumber(n) && not(isInteger(n))\n```\n\n```js\nfunction doStuff (object, options) { ... }\n\ndoStuffForce = curry(flip(doStuff))({ force: true })\n```\n\n## Reference\n\n- <https://github.com/tjmehta/101>\n"
  },
  {
    "path": "AGENTS.md",
    "content": "# Agent guidelines for devhints.io\n\n## Commands\n\n- **Dev server**: `pnpm dev` (requires Ruby for markdown caching)\n- **Build**: `pnpm build`\n- **Test**: `pnpm test` (runs Vitest in watch mode)\n- **Run single test**: `pnpm vitest run <file-path>` or `pnpm vitest <file-path>` (watch mode)\n- **All tests (CI)**: `pnpm ci` (runs all linters, tests, and build)\n- **Lint**: `pnpm eslint:check` or `pnpm prettier:check`\n- **Format**: `pnpm format` (runs both ESLint and Prettier fixes)\n\n## Code style\n\n- **Package manager**: pnpm (v8.15.4+)\n- **Framework**: Astro with TypeScript (strict mode), Tailwind CSS\n- **Imports**: Use `~/` alias for `src/` directory; Prettier organizes imports automatically\n- **Types**: Use Zod schemas for runtime validation (see `SheetFrontmatter.ts`); TypeScript strict mode enabled\n- **Naming**: camelCase for variables/functions, PascalCase for components/types\n- **Error handling**: Distinguish operational (expected) vs unexpected errors; return error objects for operational errors\n- **Testing**: Vitest with globals enabled; use `it.each()` for repeated test cases; prefer object constants over helper functions\n\n## Markdown files\n\nConsult @_docs/writing-guidelines.md for formatting *.md files.\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Developer notes\n\n## Runtimes\n\nRequires Node.js, Ruby, Yarn v1.\n\nSee `.ruby-version` and `.node-version` for supported versions.\n\n## Gitpod\n\nThis repository supports contribution using [gitpod](https://gitpod.io) which is online IDE using [Theia](https://github.com/eclipse-theia/theia).\n\nTo open-up the environment simple natigate on https://gitpod.io/#https://github.com/rstacruz/cheatsheets\n\nOr using a button:<br>\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rstacruz/cheatsheets)\n\n### Preview built website\n\nTo preview the website you need to first build it then you can navigate to file that you are trying to contribute and preview directly.\n\n<img src='.github/images/gitpod_preview_tut.png' width=828 height=459/>\n\n## Starting a local instance\n\nThis starts Jekyll and Parcel. This requires recent versions of [Node.js], [Yarn], [Ruby] and [Bundler] installed.\n\n```bash\nyarn install\nbundle install\nenv PORT=4001 yarn run dev\n```\n\n[node.js]: https://nodejs.org/en/download/package-manager/\n[ruby]: https://www.ruby-lang.org/en/documentation/installation/\n[yarn]: https://yarnpkg.com/en/docs/install\n[bundler]: https://bundler.io/\n\n### Docker\n\nYou can also run a local instance using Docker. This is the preferred method, especially for Windows.\nYou only need to install Docker ([macOS](https://docs.docker.com/docker-for-mac/install/), [Windows](https://docs.docker.com/docker-for-windows/install/), [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/), [Arch Linux](https://www.archlinux.org/packages/community/x86_64/docker/), [other](https://www.docker.com/community-edition#download)).\n\nFirst time setup:\n\n```bash\n# Build images (takes ~12mins)\ndocker-compose build\n\n# First-time setup\ndocker-compose run --rm web bundle install && docker-compose run --rm web yarn install\n```\n\nStarting the server:\n\n```bash\ndocker-compose up\n```\n\n## CSS classes\n\nSee <https://devhints.io/cheatsheet-styles> for a reference on styling.\n\n## JavaScript\n\nWhen updating JavaScript, be sure Parcel is running (`yarn dev` takes care of this).\n\nThis auto-updates `/assets/packed/` and `_includes/2017/critical/` with sources in `_parcel/`.\n\nBefore committing, run `yarn parcel:build` first.\n\n## JavaScript tests\n\nThere are also automated tests:\n\n```\nyarn run test --watch\n```\n\n## Frontmatter\n\nEach sheet supports these metadata:\n\n```yml\n---\ntitle: React.js\n# Optional:\ncategory: React\nupdated: 2020-06-14\nads: false # Add this to disable ads\nweight: -5 # lower number = higher in related posts list\ndeprecated: true # Don't show in related posts\ndeprecated_by: /enzyme # Point to latest version\nprism_languages: [vim] # Extra syntax highlighting\nintro: |\n  This is some *Markdown* at the beginning of the article.\ntags:\n  - WIP\n  - Featured\n\n# Special pages:\n# (don't set these for cheatsheets)\ntype: home # home | article | error\nog_type: website # opengraph type\n---\n\n```\n\n## Prism languages\n\nFor supported prism languages:\n\n- <https://github.com/PrismJS/prism/tree/gh-pages/components>\n\n## Setting up redirects\n\nThis example sets up a redirect from `es2015` to `es6`:\n\n```yml\n# /es2015.md\n---\ntitle: ES2015\ncategory: Hidden\nredirect_to: /es6\n---\n\n```\n\n## Localizations\n\nSee `_data/content.yml` for chrome strings.\n\n## Forking\n\nSo you want to fork this repo? Sure, here's what you need to know to whitelabel this:\n\n- It's all GitHub pages, so the branch has to be `gh-pages`.\n- All other GitHub pages gotchas apply (CNAME, etc).\n- Edit everything in `_data/` - this holds all 'config' for the site: ad IDs, strings, etc.\n- Edit `_config.yml` as well, lots of things may not apply to you.\n\n## CloudFlare purging\n\nThe site devhints.io is backed by CloudFlare. Updates will take 2 days to propagate to the website by default. To make sure recent changes will propagate, use this helper script. It will give instructions on how manual selective cache purging can be done.\n\n```bash\n./_support/cf-purge.sh\n```\n\n## SEO description\n\nThere are multiple ways to set meta description.\n\n### Keywords (and intro)\n\nSet `keywords` (and optionally `intro`). This is the easiest and the preferred\nway for now.\n\n```\nReact cheatsheet - devhints.io\n------------------------------\nhttps://devhints.io/react ▼\nReact.Component · render() · componentDidMount() · props/state · React is a\nJavaScript library for building web...\n```\n\n### Description (and intro)\n\nSet `description` (and optionally `intro`)\n\n```\nReact cheatsheet - devhints.io\n------------------------------\nhttps://devhints.io/react ▼\nOne-page reference to React and its API. React is a JavaScript library for\nbuilding web user interfaces...\n```\n\n### Intro only\n\nIf you left out `description` or `keywords`, a default description will be added.\n"
  },
  {
    "path": "Gemfile",
    "content": "source \"https://rubygems.org\"\ngem \"minitest\"\ngem \"kramdown\"\ngem \"kramdown-parser-gfm\"\n"
  },
  {
    "path": "README.md",
    "content": "<h1 align='center'>Devhints</h1>\n\n<blockquote align='center'>\nTL;DR for developer documentation - a ridiculous collection of cheatsheets\n</blockquote>\n\n<br>\n\n<p align='center'>\n<a href='https://devhints.io/'><img src='.github/images/screenshot.png' width=600></a>\n<br>\n✨ <b><a href='https://devhints.io/'>devhints.io</a></b> ✨\n</p>\n\n<br>\n\n---\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for developer notes.\n\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rstacruz/cheatsheets)\n\n<h2 align='center'>Similar projects</h1>\n\n- [Command Line Interface Pages](https://github.com/command-line-interface-pages)\n- [tldr-pages](https://github.com/tldr-pages/tldr)\n- [Cheat](https://github.com/cheat/cheat)\n- [Eg](https://github.com/srsudar/eg)\n"
  },
  {
    "path": "_docs/writing-guidelines.md",
    "content": "# Cheatsheet guidelines\n\n## Content organisation\n\n- **Progressive complexity:** Start with basics, move to advanced\n- **Logical sections:** Group related functionality together\n- **H2 and H3:** Organise documents into H2 and H3 sections\n\nH2 content length:\n\n- Short H2s: 2-4 H3s (e.g., \"Installing\", \"Getting started\")\n- Medium H2s: 4-7 H3s (e.g., \"Components\", \"Lifecycle\")  \n- Long H2s: 7+ H3s (use column layouts)\n\nH3 content length:\n\n- Focused: One main concept + examples\n- Consistent: Similar depth within each H2\n- Self-contained: Each H3 should be understandable independently\n\n## Format\n\n- Documentation is in the format of Markdown with Kramdown class extensions\n- H3's can have the following class names:\n  - `{: .-prime}` - Visually highlighted section. Only use once per document at most.\n- PRE elements can have:\n  - `{: .-setup}` - Visually muted section. Used for sections with less importance. Deprecated, use sparingly.\n- H2's can have:\n  - `{: .-three-column}` - use if the H3's are short, and if there are at least 3 H3's in the H2.\n  - `{: .-two-column}` - the default\n\n## Writing guidelines\n\n- Aim for brevity\n- Sentence case headings, never Title Case\n- Omit explanations if they are obvious\n\n## Content priorities\n\n1. **Essential first**: Most commonly used 20% of functionality\n2. **Progressive disclosure**: Basic → intermediate → advanced\n3. **Practical examples**: Real-world use cases over theoretical\n4. **Quick reference**: Dense information for experienced developers\n5. **Learning path**: Logical progression for newcomers\n\n## H3 writing guidelines\n\n- Place documentation links in the end. (see next for example)\n- Prefer to write explanations *after* a pre/table. Example:\n\n  ````markdown\n  ### Setting default props\n  \n  ```jsx\n  Hello.defaultProps = {\n    color: 'blue'\n  }\n  ```\n  \n  Default properties are used if no properties are given.\n  \n  See: [defaultProps](https://reactjs.org/docs/react-component.html#defaultprops)\n  ````\n\n- When an example has multiple files, use H4 as filename markers. Example:\n\n  ````markdown\n  ### via Data Attributes\n  \n  #### index.html.erb\n  \n  ```html\n  <a\n    href=\"#\"\n    data-reflex=\"click->CounterReflex#increment\"\n    data-step=\"1\"\n    data-count=\"<%= @count.to_i %>\"\n    >Increment <%= @count.to_i %></a\n  >\n  ```\n  \n  #### counter_reflex.rb\n  \n  ```ruby\n  class CounterReflex < StimulusReflex::Reflex\n    def increment\n      @count = element.dataset[:count].to_i + element.dataset[:step].to_i\n    end\n  end\n  ```\n  \n  Trigger reflexes without writing any javascript with the `data-reflex` attribute.\n  \n  ````\n\n- When showing reference information, use tables for quick scanning. Example:\n\n  ````markdown\n  ### Primitives\n\n  | Sample                  | Type            |\n  | ---                     | ---             |\n  | `nil`                   | Nil/null        |\n  | `true` _/_ `false`      | Boolean         |\n  | ---                     | ---             |\n  | `23`                    | Integer         |\n  | `3.14`                  | Float           |\n  | ---                     | ---             |\n  | `\"hello\"`               | Binary string   |\n  | `:hello`                | Atom            |\n\n  These are the basic data types in Elixir.\n  ````\n\n- Use inline comments to explain results, equivalents, or provide context. Example:\n\n  ````markdown\n  ### Pattern matching\n\n  ```elixir\n  user = %{name: \"Tom\", age: 23}\n  %{name: username} = user  # → username = \"Tom\"\n  ```\n\n  ### Piping\n\n  ```elixir\n  source\n  |> transform(:hello)     # Step 1: transform the data\n  |> print()               # Step 2: output the result\n  ```\n\n  ```elixir\n  # Same as:\n  print(transform(source, :hello))\n  ```\n\n  ### Type conversions\n\n  ```elixir\n  Integer.parse(\"34\")      # → {34, \"\"}\n  Float.parse(\"34.1\")      # → {34.1, \"\"}\n  ```\n  ````\n\n```\n"
  },
  {
    "path": "_includes/common/moment_format.md",
    "content": "## {{ include.title }}\n{: .-three-column}\n\n### Examples\n\n#### Date\n\n| Example                   | Output                 |\n| ------------------------- | ---------------------- |\n| `YYYY-MM-DD`              | 2014-01-01             |\n| `dddd, MMMM Do YYYY`      | Friday, May 16th 2014  |\n| `dddd [the] Do [of] MMMM` | Friday the 16th of May |\n\n#### Time\n\n| Example   | Output   |\n| --------- | -------- |\n| `hh:mm a` | 12:30 pm |\n\nUsed by [Moment.js](http://momentjs.com/docs/#/displaying/) and [date-fns/format](https://date-fns.org/v1.28.5/docs/format). Similar to Java [SimpleDateFormat](https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html).\n\n### Date\n\n| Symbol | Example                 | Area             |\n| ---    | ---                     | ---              |\n| `d`    | `0`..`6`                | **Weekday**      |\n| `dd`   | `Su`                    |                  |\n| `ddd`  | `Sun`                   |                  |\n| `dddd` | `Sunday`                |                  |\n| ---    | ---                     | ---              |\n| `YY`   | `13`                    | **Year**         |\n| `YYYY` | `2013`                  |                  |\n| ---    | ---                     | ---              |\n| `M`    | `1`..`12` _(Jan is 1)_  | **Month**        |\n| `Mo`   | `1st`..`12th`           |                  |\n| `MM`   | `01`..`12` _(Jan is 1)_ |                  |\n| `MMM`  | `Jan`                   |                  |\n| `MMMM` | `January`               |                  |\n| ---    | ---                     | ---              |\n| `Q`    | `1`..`4`                | **Quarter**      |\n| `Qo`   | `1st`..`4th`            |                  |\n| ---    | ---                     | ---              |\n| `D`    | `1`..`31`               | **Day**          |\n| `Do`   | `1st`..`31st`           |                  |\n| `DD`   | `01`..`31`              |                  |\n| ---    | ---                     | ---              |\n| `DDD`  | `1`..`365`              | **Day of year**  |\n| `DDDo` | `1st`..`365th`          |                  |\n| `DDDD` | `001`..`365`            |                  |\n| ---    | ---                     | ---              |\n| `w`    | `1`..`53`               | **Week of year** |\n| `wo`   | `1st`..`53rd`           |                  |\n| `ww`   | `01`..`53`              |                  |\n{: .-shortcuts}\n\n### Time\n\n| Symbol | Example      | Area                       |\n| ---    | ---          | ---                        |\n| `H`    | `0`..`23`    | **24h hour**               |\n| `HH`   | `00`..`23`   |                            |\n| ---    | ---          | ---                        |\n| `h`    | `1`..`12`    | **12h hour**               |\n| `hh`   | `01`..`12`   |                            |\n| ---    | ---          | ---                        |\n| `m`    | `0`..`59`    | **Minutes**                |\n| `mm`   | `00`..`59`   |                            |\n| ---    | ---          | ---                        |\n| `s`    | `0`..`59`    | **Seconds**                |\n| `ss`   | `00`..`59`   |                            |\n| ---    | ---          | ---                        |\n| `a`    | `am`         | **AM/PM**                  |\n| `A`    | `AM`         |                            |\n| ---    | ---          | ---                        |\n| `Z`    | `+07:00`     | **Timezone offset**        |\n| `ZZ`   | `+0730`      |                            |\n| ---    | ---          | ---                        |\n| `S`    | `0`..`9`     | Deciseconds                |\n| `SS`   | `00`..`99`   | Centiseconds               |\n| `SSS`  | `000`..`999` | Milliseconds               |\n| ---    | ---          | ---                        |\n| `X`    |              | Unix timestamp             |\n| `x`    |              | Millisecond Unix timestamp |\n{: .-shortcuts}\n\n### Presets\n\n| Example | Output                           |\n| ------- | -------------------------------- |\n| `LT`    | 8:30 PM                          |\n| `LTS`   | 8:30:25 PM                       |\n| ---     | ---                              |\n| `LL`    | August 2 1985                    |\n| `ll`    | Aug 2 1985                       |\n| ---     | ---                              |\n| `LLL`   | August 2 1985 08:30 PM           |\n| `lll`   | Aug 2 1985 08:30 PM              |\n| ---     | ---                              |\n| `LLLL`  | Thursday, August 2 1985 08:30 PM |\n| `llll`  | Thu, Aug 2 1985 08:30 PM         |\n"
  },
  {
    "path": "_includes/common/strftime_format.md",
    "content": "## {{ include.title }}\n{: .-three-column}\n\n### Presets\n\n#### Date\n\n| Example         | Output                 |\n| ---             | ---                    |\n| `%m/%d/%Y`      | `06/05/2013`           |\n| `%A, %B %e, %Y` | `Sunday, June 5, 2013` |\n| `%b %e %a`      | `Jun 5 Sun`            |\n{: .-shortcuts}\n\n#### Time\n\n| Example         | Output                 |\n| ---             | ---                    |\n| `%H:%M`         | `23:05`                |\n| `%I:%M %p`      | `11:05 PM`             |\n{: .-shortcuts}\n\nUsed by Ruby, UNIX `date`, and many more.\n\n### Date\n\n| Symbol | Example                  | Area        |\n| ---    | ---                      | ---         |\n| `%a`   | `Sun`                    | **Weekday** |\n| `%A`   | `Sunday`                 |             |\n| `%w`   | `0`..`6` _(Sunday is 0)_ |             |\n| ---    | ---                      | ---         |\n| `%y`   | `13`                     | **Year**    |\n| `%Y`   | `2013`                   |             |\n| ---    | ---                      | ---         |\n| `%b`   | `Jan`                    | **Month**   |\n| `%B`   | `January`                |             |\n| `%m`   | `01`..`12`               |             |\n| ---    | ---                      | ---         |\n| `%d`   | `01`..`31`               | **Day**     |\n| `%e`   | `1`..`31`                |             |\n{: .-shortcuts}\n\n### Time\n\n| Symbol | Example      | Area                |\n| ---    | ---          | ---                 |\n| `%l`   | `1`          | Hour                |\n| `%H`   | `00`..`23`   | 24h Hour            |\n| `%I`   | `01`..`12`   | 12h Hour            |\n| --     | ---          | ---                 |\n| `%M`   | `00`..`59`   | Minute              |\n| `%S`   | `00`..`60`   | Second              |\n| ---    | ---          | ---                 |\n| `%p`   | `AM`         | AM or PM            |\n| `%Z`   | `+08`        | Time zone           |\n| ---    | ---          | ---                 |\n| `%j`   | `001`..`366` | Day of the year     |\n| `%%`   | `%`          | Literal % character |\n{: .-shortcuts}\n"
  },
  {
    "path": "absinthe.md",
    "content": "---\ntitle: Absinthe\ncategory: Hidden\ntags: [WIP]\nupdated: 2017-10-10\nintro: |\n  [Absinthe](http://absinthe-graphql.org/) allows you to write GraphQL servers in Elixir.\n---\n\n## Introduction\n\n### Concepts\n\n- `Schema` - The root. Defines what queries you can do, and what types they return.\n- `Resolver` - Functions that return data.\n- `Type` - A type definition describing the shape of the data you'll return.\n\n### Plug\n\n#### web/router.ex\n\n```elixir\ndefmodule Blog.Web.Router do\n  use Phoenix.Router\n\n  forward \"/\", Absinthe.Plug,\n    schema: Blog.Schema\nend\n```\n{: data-line=\"4,5\"}\n\nAbsinthe is a Plug, and you pass it one **Schema**.\n\nSee: [Our first query](http://absinthe-graphql.org/tutorial/our-first-query/)\n\n## Main concepts\n{: .-three-column}\n\n### Schema\n\n#### web/schema.ex\n\n```elixir\ndefmodule Blog.Schema do\n  use Absinthe.Schema\n  import_types Blog.Schema.Types\n\n  query do\n    @desc \"Get a list of blog posts\"\n    field :posts, list_of(:post) do\n      resolve &Blog.PostResolver.all/2\n    end\n  end\nend\n```\n{: data-line=\"5,6,7,8,9,10\"}\n\nThis schema will account for `{ posts { ··· } }`. It returns a **Type** of `:post`, and delegates to a **Resolver**.\n\n### Resolver\n\n#### web/resolvers/post_resolver.ex\n\n```elixir\ndefmodule Blog.PostResolver do\n  def all(_args, _info) do\n    {:ok, Blog.Repo.all(Blog.Post)}\n  end\nend\n```\n{: data-line=\"3\"}\n\nThis is the function that the schema delegated the `posts` query to.\n\n### Type\n\n#### web/schema/types.ex\n\n```elixir\ndefmodule Blog.Schema.Types do\n  use Absinthe.Schema.Notation\n\n  @desc \"A blog post\"\n  object :post do\n    field :id, :id\n    field :title, :string\n    field :body, :string\n  end\nend\n```\n{: data-line=\"4,5,6,7,8,9\"}\n\nThis defines a type `:post`, which is used by the resolver.\n\n## Schema\n\n### Query arguments\n\n#### GraphQL query\n\n```\n{ user(id: \"1\") { ··· } }\n```\n\n#### web/schema.ex\n\n```elixir\nquery do\n  field :user, type: :user do\n    arg :id, non_null(:id)\n    resolve &Blog.UserResolver.find/2\n  end\nend\n```\n{: data-line=\"3\"}\n\n#### Resolver\n\n```elixir\ndef find(%{id: id} = args, _info) do\n  ···\nend\n```\n{: data-line=\"1\"}\n\nSee: [Query arguments](http://absinthe-graphql.org/tutorial/query-arguments/)\n\n### Mutations\n\n#### GraphQL query\n\n```\n{\n  mutation CreatePost {\n    post(title: \"Hello\") { id }\n  }\n}\n```\n\n#### web/schema.ex\n\n```elixir\nmutation do\n  @desc \"Create a post\"\n  field :post, type: :post do\n    arg :title, non_null(:string)\n    resolve &Blog.PostResolver.create/2\n  end\nend\n```\n{: data-line=\"1\"}\n\nSee: [Mutations](http://absinthe-graphql.org/tutorial/mutations/)\n\n## References\n\n  - [Absinthe website](http://absinthe-graphql.org/) _(absinthe-graphql.org)_\n  - [GraphQL cheatsheet](./graphql) _(devhints.io)_\n"
  },
  {
    "path": "activeadmin.md",
    "content": "---\ntitle: ActiveAdmin\ncategory: Ruby\n---\n\n### Listing scopes\n\nAllows you to filter listings by a certain scope.\n{: .-setup}\n\n```ruby\nscope :draft\nscope :for_approval\n```\n\n```ruby\nscope :public, if: ->{ current_admin_user.can?(...) }\nscope \"Unapproved\", :pending\nscope(\"Published\") { |books| books.where(:published: true) }\n```\n\n### Sidebar filters\n\n```ruby\nfilter :email\nfilter :username\n```\n\n### Custom actions\n\nYou can define custom actions for models.\n{: .-setup}\n\n```ruby\nbefore_filter only: [:show, :edit, :publish] do\n  @post = Post.find(params[:id])\nend\n```\n\n#### Make the route\n\n```ruby\nmember_action :publish, method: :put do\n  @post.publish!\n  redirect_to admin_posts_path, notice: \"The post '#{@post}' has been published!\"\nend\n```\n\n#### Link it in the index\n\n```ruby\nindex do\n  column do |post|\n    link_to 'Publish', publish_admin_post_path(post), method: :put\n  end\nend\n```\n\n#### And link it in show/edit\n\n```ruby\naction_item only: [:edit, :show] do\n  @post = Post.find(params[:id])\n  link_to 'Publish', publish_admin_post_path(post), method: :put\nend\n```\n\n### Columns\n\n```ruby\ncolumn :foo\n```\n\n```ruby\ncolumn :title, sortable: :name do |post|\n  strong post.title\nend\n```\n\n### Other helpers\n\n```ruby\nstatus_tag \"Done\"           # Gray\nstatus_tag \"Finished\", :ok  # Green\nstatus_tag \"You\", :warn     # Orange\nstatus_tag \"Failed\", :error # Red\n```\n\n### Disabling 'new post'\n\n```ruby\nActiveAdmin.register Post do\n  actions :index, :edit\n  # or: config.clear_action_items!\nend\n```\n"
  },
  {
    "path": "adb.md",
    "content": "---\ntitle: adb (Android Debug Bridge)\ncategory: CLI\nweight: -1\nauthors:\n  - github: ZackNeyland\nupdated: 2018-03-06\n---\n\n### Device Basics\n\n| Command                           | Description                                 |\n| ---                               | ---                                         |\n| `adb devices`                     | Lists connected devices                     |\n| `adb devices -l`                  | Lists connected devices and kind            |\n| ---                               | ---                                         |\n| `adb root`                        | Restarts adbd with root permissions         |\n| `adb start-server`                | Starts the adb server                       |\n| `adb kill-server`                 | Kills the adb server                        |\n| `adb remount`                     | Remounts file system with read/write access |\n| `adb reboot`                      | Reboots the device                          |\n| `adb reboot bootloader`           | Reboots the device into fastboot            |\n| `adb disable-verity`              | Reboots the device into fastboot            |\n\n`wait-for-device` can be specified after `adb` to ensure that the command will run once the device is connected.\n\n`-s` can be used to send the commands to a specific device when multiple are connected.\n\n#### Examples\n\n```\n$ adb wait-for-device devices\n List of devices attached\n somedevice-1234 device\n someotherdevice-1234 device\n```\n\n```\n$ adb -s somedevice-1234 root\n```\n\n### Logcat\n\n| Command                              | Description                            |\n| ---                                  | ---                                    |\n| `adb logcat`                         | Starts printing log messages to stdout |\n| `adb logcat -g`                      | Displays current log buffer sizes      |\n| `adb logcat -G <size>`               | Sets the buffer size (K or M)          |\n| `adb logcat -c`                      | Clears the log buffers                 |\n| `adb logcat *:V`                     | Enables ALL log messages (verbose)     |\n| `adb logcat -f <filename>`           | Dumps to specified file                |\n\n#### Examples\n```\n$ adb logcat -G 16M\n$ adb logcat *:V > output.log\n```\n\n### File Management\n\n| Command                              | Description                       |\n| ---                                  | ---                               |\n| `adb push <local> <remote>` | Copies the local to the device at remote   |\n| `adb pull <remote> <local>` | Copies the remote from the device to local |\n\n#### Examples\n\n```\n$ echo \"This is a test\" > test.txt\n$ adb push  test.txt /sdcard/test.txt\n$ adb pull /sdcard/test.txt pulledTest.txt\n```\n\n### Remote Shell\n\n| Command                                | Description                                                           |\n| ---                                    | ---                                                                   |\n| `adb shell <command>`                  | Runs the specified command on device (most unix commands work here)   |\n| `adb shell wm size`                    | Displays the current screen resolution                                |\n| `adb shell wm size WxH`                | Sets the resolution to WxH                                            |\n| `adb shell pm list packages`           | Lists all installed packages                                          |\n| `adb shell pm list packages -3`        | Lists all installed 3rd-party packages                                |\n| `adb shell monkey -p app.package.name` | Starts the specified package                                          |\n"
  },
  {
    "path": "analytics.js.md",
    "content": "---\ntitle: Google Analytics's analytics.js\ncategory: Analytics\nupdated: 2017-10-29\nintro: |\n  Google Analytics's analytics.js is deprecated.\n---\n\n### Page view\n\n```js\nga('create', 'UA-XXXX-Y', 'auto')\nga('create', 'UA-XXXX-Y', { userId: 'USER_ID' })\n```\n\n```js\nga('send', 'pageview')\nga('send', 'pageview', { 'dimension15': 'My custom dimension' })\n```\n\n### Events\n\n```js\nga('send', 'event', 'button',  'click', {color: 'red'});\n```\n\n```js\nga('send', 'event', 'button',  'click', 'nav buttons',  4);\n/*                  ^category  ^action  ^label          ^value */\n```\n\n### Exceptions\n\n```js\nga('send', 'exception', {\n  exDescription: 'DatabaseError',\n  exFatal: false,\n  appName: 'myapp',\n  appVersion: '0.1.2'\n})\n```\n"
  },
  {
    "path": "analytics.md",
    "content": "---\ntitle: Analytics libraries\ncategory: Analytics\n---\n\n### Mixpanel\n\n```js\nmixpanel.identify('284');\nmixpanel.people.set({ $email: 'hi@gmail.com' });\nmixpanel.register({ age: 28, gender: 'male' }); /* set common properties */\n```\n\n[mixpanel](./mixpanel)\n{: .-crosslink}\n\n### Google Analytics's analytics.js\n\n```js\nga('create', 'UA-XXXX-Y', 'auto');\nga('create', 'UA-XXXX-Y', { userId: 'USER_ID' });\n```\n\n```js\nga('send', 'pageview');\nga('send', 'pageview', { 'dimension15': 'My custom dimension' });\n```\n\n[analytics.js](./analytics.js)\n{: .-crosslink}\n"
  },
  {
    "path": "angularjs.md",
    "content": "---\ntitle: Angular.js\ncategory: JavaScript libraries\ntags: [Archived]\narchived: This describes an older version of Angular.\n---\n\n### About\n{: .-intro}\n\n * <https://github.com/angular/angular-seed>\n * <https://angularjs.org/>\n\n### ng-app\n\n```html\n    <html ng-app=\"nameApp\">\n```\n\n### Lists (ng-repeat)\n```html\n    <ul ng-controller=\"MyListCtrl\">\n      <li ng-repeat=\"phone in phones\">\n        {{phone.name}}\n      </li>\n    </ul>\n```\n\n### Model (ng-model)\n\n```html\n    <select ng-model=\"orderProp\">\n      <option value=\"name\">Alphabetical</option>\n      <option value=\"age\">Newest</option>\n    </select>\n```\n\n### Defining a module\n```js\n    App = angular.module('myApp', []);\n\n    App.controller('MyListCtrl', function ($scope) {\n      $scope.phones = [ ... ];\n    });\n```\n\n### Controller with protection from minification\n```js\n    App.controller('Name', [\n      '$scope',\n      '$http',\n      function ($scope, $http) {\n      }\n    ]);\n\n    a.c 'name', [\n      '$scope'\n      '$http'\n      ($scope, $http) ->\n    ]\n```\n\n### Service\n```js\n    App.service('NameService', function($http){\n      return {\n        get: function(){\n          return $http.get(url);\n        }\n      }\n    });\n```\nIn controller you call with parameter and will use promises to return data from server.\n\n```js\n    App.controller('controllerName',\n    function(NameService){\n      NameService.get()\n      .then(function(){})\n    })\n```\n\n### Directive\n```js\n    App.directive('name', function(){\n      return {\n        template: '<h1>Hello</h1>'\n      }\n    });\n```\n\nIn HTML will use `<name></name>` to render your template `<h1>Hello</h1>`\n\n### HTTP\n```js\n    App.controller('PhoneListCtrl', function ($scope, $http) {\n        $http.get('/data.json').success(function (data) {\n            $scope.phones = data;\n        })\n    });\n```\n"
  },
  {
    "path": "animated_gif.md",
    "content": "---\ntitle: Animated GIFs\ncategory: CLI\n---\n\n## Animated GIFs\n{: .-one-column}\n\n### Convert MP4 to GIF\n\n```bash\nmkdir -p gif\nmplayer -ao null -vo gif89a:outdir=gif $INPUT\nmogrify -format gif *.png\ngifsicle --colors=256 --delay=4 --loopcount=0 --dither -O3 gif/*.gif > ${INPUT%.*}.gif\nrm -rf gif\n```\n\nYou'll need `mplayer`, `imagemagick` and `gifsicle`. This converts frames to .png, then turns them into an animated gif.\n\n### A given range\n\n```bash\nmplayer -ao null -ss 0:02:06 -endpos 0:05:00 -vo gif89a:outdir=gif videofile.mp4\n```\n\nSee `-ss` and `-endpos`.\n"
  },
  {
    "path": "ansi.md",
    "content": "---\ntitle: Ansi codes\ncategory: CLI\nintro: |\n  Quick reference to ANSI color codes.\n---\n\n### Format\n\n```\n\\033[#m\n```\n\n### ANSI codes\n\n```\n0      clear\n1      bold\n4      underline\n5      blink\n\n30-37  fg color\n40-47  bg color\n\n1K     clear line (to beginning of line)\n2K     clear line (entire line)\n2J     clear screen\n0;0H   move cursor to 0;0\n\n1A     move up 1 line\n```\n\n### Colors\n\n```\n0      black\n1      red\n2      green\n3      yellow\n4      blue\n5      magenta\n6      cyan\n7      white\n```\n\n### Bash utilities\n\n```sh\nhide_cursor() { printf \"\\e[?25l\"; }\nshow_cursor() { printf \"\\e[?25h\"; }\n```\n"
  },
  {
    "path": "ansible-examples.md",
    "content": "---\ntitle: Ansible examples\ncategory: Ansible\n---\n\n### Examples\n\n * [Ruby installation](https://github.com/chelsea/ansible-example-ruby/blob/master/roles/webserver/tasks/main.yml) _(github.com)_\n * [Postgres installation](https://github.com/chelsea/ansible-example-ruby/blob/master/roles/db/tasks/main.yml)  _(github.com)_\n * [GitLab installation](https://github.com/tingtun/ansible-playbook-gitlab) _(github.com)_\n"
  },
  {
    "path": "ansible-guide.md",
    "content": "---\ntitle: \"Ansible quickstart\"\ncategory: Ansible\ndescription: |\n  A quick guide to getting started with your first Ansible playbook.\n---\n\n### Install Ansible\n\n```bash\n$ brew install ansible            # OSX\n$ [sudo] apt install ansible      # elsewhere\n```\n\nAnsible is available as a package in most OS's.\n\nSee: [Installation](http://docs.ansible.com/ansible/latest/intro_installation.html)\n\n### Start your project\n\n```bash\n~$ mkdir setup\n~$ cd setup\n```\n\nMake a folder for your Ansible files.\n\nSee: [Getting started](http://docs.ansible.com/ansible/latest/intro_getting_started.html)\n\n## Creating your files\n\n### Inventory file\n\n#### ~/setup/hosts\n\n```dosini\n[sites]\n127.0.0.1\n192.168.0.1\n192.168.0.2\n192.168.0.3\n```\n\nThis is a list of hosts you want to manage, grouped into groups. (Hint: try\nusing `localhost ansible_connection=local` to deploy to your local machine.)\n\nSee: [Intro to Inventory](http://docs.ansible.com/ansible/latest/intro_inventory.html)\n\n### Playbook\n\n#### ~/setup/playbook.yml\n\n```yaml\n- hosts: 127.0.0.1\n  user: root\n  tasks:\n    - name: install nginx\n      apt: pkg=nginx state=present\n\n    - name: start nginx every bootup\n      service: name=nginx state=started enabled=yes\n\n    - name: do something in the shell\n      shell: echo hello > /tmp/abc.txt\n\n    - name: install bundler\n      gem: name=bundler state=latest\n```\n\nSee: [Intro to Playbooks](http://docs.ansible.com/ansible/latest/playbooks_intro.html)\n\n## Running\n\n### Running ansible-playbook\n\n```\n~/setup$ ls\nhosts\nplaybook.yml\n```\n\n#### Running the playbook\n\n```\n~/setup$ ansible-playbook -i hosts playbook.yml\nPLAY [all] ********************************************************************\n\nGATHERING FACTS ***************************************************************\nok: [127.0.0.1]\n\nTASK: [install nginx] *********************************************************\nok: [127.0.0.1]\n\nTASK: start nginx every bootup] ***********************************************\nok: [127.0.0.1]\n...\n```\n\n## Read more\n\n* [Getting started with Ansible](http://lowendbox.com/blog/getting-started-with-ansible/) _(lowendbox.com)_\n* [Getting started](http://docs.ansible.com/ansible/latest/intro_getting_started.html) _(docs.ansible.com)_\n* [Intro to Inventory](http://docs.ansible.com/ansible/latest/intro_inventory.html) _(docs.ansible.com)_\n* [Intro to Playbooks](http://docs.ansible.com/ansible/latest/playbooks_intro.html) _(docs.ansible.com)_\n* [Ansible Tutorial for Beginners: Playbook & Examples](https://spacelift.io/blog/ansible-tutorial) _(spacelift.io)_\n* [Working with Ansible Playbooks – Tips & Tricks with Examples](https://spacelift.io/blog/ansible-playbooks) _(spacelift.io)_\n"
  },
  {
    "path": "ansible-modules.md",
    "content": "---\ntitle: Ansible modules\ncategory: Ansible\nprism_languages: [yaml]\nupdated: 2017-10-03\n---\n\n{% raw %}\n\n## Format\n\n### Basic file\n\n```yaml\n---\n- hosts: production\n  remote_user: root\n  tasks:\n  - ···\n```\n\nPlace your modules inside `tasks`.\n\n### Task formats\n\n#### One-line\n\n```yaml\n- apt: pkg=vim state=present\n```\n\n#### Map\n\n```yaml\n- apt:\n    pkg: vim\n    state: present\n```\n\n#### Foldable scalar\n\n```yaml\n- apt: >\n    pkg=vim\n    state=present\n```\n\nDefine your tasks in any of these formats. One-line format is preferred for short declarations, while maps are preferred for longer.\n\n## Modules\n\n### Aptitude\n\n#### Packages\n\n```yaml\n- apt:\n    pkg: nodejs\n    state: present # absent | latest\n    update_cache: yes\n    force: no\n```\n\n#### Deb files\n\n```yaml\n- apt:\n    deb: \"https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb\"\n```\n\n#### Repositories\n\n```yaml\n- apt_repository:\n    repo: \"deb https://··· raring main\"\n    state: present\n```\n\n#### Repository keys\n\n```yaml\n- apt_key:\n    id: AC40B2F7\n    url: \"http://···\"\n    state: present\n```\n\n### git\n\n```yaml\n- git:\n    repo: git://github.com/\n    dest: /srv/checkout\n    version: master\n    depth: 10\n    bare: yes\n```\n\nSee: [git module](https://devdocs.io/ansible/git_module)\n\n### git_config\n\n```yaml\n- git_config:\n    name: user.email\n    scope: global # local | system\n    value: hi@example.com\n```\n\nSee: [git_config module](https://devdocs.io/ansible/git_config_module)\n\n### user\n\n```yaml\n- user:\n    state: present\n    name: git\n    system: yes\n    shell: /bin/sh\n    groups: admin\n    comment: \"Git Version Control\"\n```\n\nSee: [user module](https://devdocs.io/ansible/user_module)\n\n### service\n\n```yaml\n- service:\n    name: nginx\n    state: started\n    enabled: yes     # optional\n```\n\nSee: [service module](https://devdocs.io/ansible/service_module)\n\n## Shell\n\n### shell\n\n```yaml\n- shell: apt-get install nginx -y\n```\n\n#### Extra options\n\n```yaml\n- shell: echo hello\n  args:\n    creates: /path/file  # skip if this exists\n    removes: /path/file  # skip if this is missing\n    chdir: /path         # cd here before running\n```\n\n#### Multiline example\n\n```yaml\n- shell: |\n    echo \"hello there\"\n    echo \"multiple lines\"\n```\n\nSee: [shell module](https://devdocs.io/ansible/shell_module)\n\n### script\n\n```yaml\n- script: /x/y/script.sh\n  args:\n    creates: /path/file  # skip if this exists\n    removes: /path/file  # skip if this is missing\n    chdir: /path         # cd here before running\n```\n\nSee: [script module](https://devdocs.io/ansible/script_module)\n\n## Files\n\n### file\n\n```yaml\n- file:\n    path: /etc/dir\n    state: directory # file | link | hard | touch | absent\n\n    # Optional:\n    owner: bin\n    group: wheel\n    mode: 0644\n    recurse: yes  # mkdir -p\n    force: yes    # ln -nfs\n```\n\nSee: [file module](https://devdocs.io/ansible/file_module)\n\n### copy\n\n```yaml\n- copy:\n    src: /app/config/nginx.conf\n    dest: /etc/nginx/nginx.conf\n\n    # Optional:\n    owner: user\n    group: user\n    mode: 0644\n    backup: yes\n```\n\nSee: [copy module](https://devdocs.io/ansible/copy_module)\n\n### template\n\n```yaml\n- template:\n    src: config/redis.j2\n    dest: /etc/redis.conf\n\n    # Optional:\n    owner: user\n    group: user\n    mode: 0644\n    backup: yes\n```\n\nSee: [template module](https://devdocs.io/ansible/template_module)\n\n## Local actions\n\n### local_action\n\n```yaml\n- name: do something locally\n  local_action: shell echo hello\n```\n\n### debug\n\n```yaml\n- debug:\n    msg: \"Hello {{ var }}\"\n```\n\nSee: [debug module](https://devdocs.io/ansible/debug_module)\n{% endraw %}\n\n"
  },
  {
    "path": "ansible-roles.md",
    "content": "---\ntitle: Ansible roles\ncategory: Ansible\n---\n\n### Structure\n\n    roles/\n      common/\n        tasks/\n        handlers/\n        files/              # 'copy' will refer to this\n        templates/          # 'template' will refer to this\n        meta/               # Role dependencies here\n        vars/\n        defaults/\n          main.yml\n\n### References\n\n * http://www.ansibleworks.com/docs/playbooks_roles.html\n"
  },
  {
    "path": "ansible.md",
    "content": "---\ntitle: Ansible\ncategory: Ansible\n---\n\n{% raw %}\n\n## Getting started\n\n### About\n{: .-intro}\n\n- <https://www.ansible.com/>\n\n### Hosts\n\n    $ sudo mkdir /etc/ansible\n    $ sudo vim /etc/ansible/hosts\n\n    [example]\n    192.0.2.101\n    192.0.2.102\n\n### Running a playbook\n\n    $ ansible-playbook playbook.yml\n\n## Playbook files\n\n### Tasks\n\n    - hosts: all\n      user: root\n      sudo: no\n      vars:\n        aaa: bbb\n      tasks:\n        - ...\n      handlers:\n        - ...\n\n### Includes\n\n    tasks:\n      - include: db.yml\n    handlers:\n      - include: db.yml user=timmy\n\n### Handlers\n\n    handlers:\n      - name: start apache2\n        action: service name=apache2 state=started\n\n    tasks:\n      - name: install apache\n        action: apt pkg=apache2 state=latest\n        notify:\n          - start apache2\n\n### Vars\n\n    - host: lol\n      vars_files:\n        - vars.yml\n      vars:\n        project_root: /etc/xyz\n      tasks:\n        - name: Create the SSH directory.\n          file: state=directory path=${project_root}/home/.ssh/\n          only_if: \"$vm == 0\"\n\n### Roles\n\n    - host: xxx\n      roles:\n        - db\n        - { role:ruby, sudo_user:$user }\n        - web\n\n    # Uses:\n    # roles/db/tasks/*.yml\n    # roles/db/handlers/*.yml\n\n### Task: Failures\n\n    - name: my task\n      command: ...\n      register: result\n      failed_when: \"'FAILED' in result.stderr\"\n\n      ignore_errors: yes\n\n      changed_when: \"result.rc != 2\"\n\n### Env vars\n\n    vars:\n      local_home: \"{{ lookup('env','HOME') }}\"\n\n{% endraw %}\n"
  },
  {
    "path": "appcache.md",
    "content": "---\ntitle: Appcache\ncategory: HTML\n---\n\n### Format\n\n```\nCACHE MANIFEST\n# version\n\nCACHE:\nhttps://www.google.com/jsapi\n/assets/app.js\n/assets/bg.png\n\nNETWORK:\n*\n```\n\nNote that Appcache is deprecated!\n\nSee: [Using the application cache](https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache) _(developer.mozilla.org)_\n"
  },
  {
    "path": "applescript.md",
    "content": "---\ntitle: AppleScript\nupdated: 2018-12-06\ncategory: macOS\nprism_languages: [applescript]\n---\n\n### Running\n\n```applescript\nosascript -e \"...\"\n```\n\n```applescript\ndisplay notification \"X\" with title \"Y\"\n```\n\n### Comments\n\n```applescript\n-- This is a single line comment\n```\n\n```applescript\n# This is another single line comment\n```\n\n```applescript\n(*\nThis is\na multi\nline comment\n*)\n```\n\n### Say\n\n```applescript\n-- default voice\nsay \"Hi I am a Mac\"\n```\n\n```applescript\n-- specified voice\nsay \"Hi I am a Mac\" using \"Zarvox\"\n```\n\n### Beep\n\n```applescript\n-- beep once\nbeep\n```\n\n```applescript\n-- beep 10 times\nbeep 10\n```\n\n### Delay\n\n```applescript\n-- delay for 5 seconds\ndelay 5\n```\n\n### Handlers\n\n```applescript\non doubleNumber(n)\n\treturn n * 2\nend doubleNumber\n\nset doubledValue to my doubleNumber(2)\n```\n"
  },
  {
    "path": "applinks.md",
    "content": "---\ntitle: Applinks\ncategory: HTML\n---\n\n### About\n\n- <http://applinks.org/>\n\n### Applinks\n\n    <meta property=\"al:ios:url\" content=\"applinks://docs\" />\n    <meta property=\"al:ios:app_store_id\" content=\"12345\" />\n    <meta property=\"al:ios:app_name\" content=\"App Links\" />\n\n    <meta property=\"al:android:url\" content=\"applinks://docs\" />\n    <meta property=\"al:android:app_name\" content=\"App Links\" />\n    <meta property=\"al:android:package\" content=\"org.applinks\" />\n\n    <meta property=\"al:web:url\" content=\"http://applinks.org/documentation\" />\n\n### Device types\n\n * `ios`\n * `ipad`\n * `iphone`\n * `android`\n * `windows_phone`\n * `web`\n\n### Reference\n\n * [applinks.org](http://applinks.org/documentation/)\n"
  },
  {
    "path": "arel.md",
    "content": "---\ntitle: Arel\ncategory: Rails\n---\n\n### About\n{: .-intro}\n\nArel is an SQL abstraction library built into Ruby on Rails.\n\n* <https://github.com/rails/arel>\n\n### Tables\n\n```rb\nusers = Arel::Table.new(:users)\nusers = User.arel_table  # ActiveRecord model\n```\n\n### Fields\n\n```rb\nusers[:name]\nusers[:id]\n```\n\n### `where` (restriction)\n\n```rb\nusers.where(users[:name].eq('amy'))\n# SELECT * FROM users WHERE users.name = 'amy'\n```\n\n### `select` (projection)\n\n```rb\nusers.project(users[:id])\n# SELECT users.id FROM users\n```\n\n### `join`\n#### basic join\nIn ActiveRecord (without Arel), if `:photos` is the name of the association, use `joins`\n```rb\nusers.joins(:photos)\n```\n\nIn Arel, if `photos` is defined as the Arel table,\n```rb\nphotos = Photo.arel_table\nusers.join(photos) \nusers.join(photos, Arel::Nodes::OuterJoin).on(users[:id].eq(photos[:user_id]))\n```\n\n#### join with conditions\n```rb\nusers.joins(:photos).merge(Photo.where(published: true))\n```\n\nIf the simpler version doesn't help and you want to add more SQL statements to it:\n```rb\nusers.join(\n   users.join(photos, Arel::Nodes::OuterJoin)\n   .on(photos[:user_id].eq(users[:id]).and(photos[:published].eq(true)))\n)\n```\n\n#### advanced join\nmultiple `joins` with the same table but different meanings and/or conditions\n```rb\ncreators = User.arel_table.alias('creators')\nupdaters = User.arel_table.alias('updaters')\nphotos = Photo.arel_table\n\nphotos_with_credits = photos\n.join(photos.join(creators, Arel::Nodes::OuterJoin).on(photos[:created_by_id].eq(creators[:id])))\n.join(photos.join(updaters, Arel::Nodes::OuterJoin).on(photos[:assigned_id].eq(updaters[:id])))\n.project(photos[:name], photos[:created_at], creators[:name].as('creator'), updaters[:name].as('editor'))\n\nphotos_with_credits.to_sql\n# => \"SELECT `photos`.`name`, `photos`.`created_at`, `creators`.`name` AS creator, `updaters`.`name` AS editor FROM `photos` INNER JOIN (SELECT FROM `photos` LEFT OUTER JOIN `users` `creators` ON `photos`.`created_by_id` = `creators`.`id`) INNER JOIN (SELECT FROM `photos` LEFT OUTER JOIN `users` `updaters` ON `photos`.`updated_by_id` = `updaters`.`id`)\"\n\n# after the request is done, you can use the attributes you named\n# it's as if every Photo record you got has \"creator\" and \"editor\" fields, containing creator name and editor name\nphotos_with_credits.map{|x|\n  \"#{photo.name} - copyright #{photo.created_at.year} #{photo.creator}, edited by #{photo.editor}\"\n}.join('; ')\n```\n\n### `limit` / `offset`\n\n```rb\nusers.take(5) # => SELECT * FROM users LIMIT 5\nusers.skip(4) # => SELECT * FROM users OFFSET 4\n```\n\n### Aggregates\n\n```rb\nusers.project(users[:age].sum) # .average .minimum .maximum\nusers.project(users[:id].count)\nusers.project(users[:id].count.as('user_count'))\n```\n\n### `order`\n\n```rb\nusers.order(users[:name])\nusers.order(users[:name], users[:age].desc)\nusers.reorder(users[:age])\n```\n\n### With ActiveRecord\n\n```rb\nUser.arel_table\nUser.where(id: 1).arel\n```\n\n### Clean code with arel\n\nMost of the clever stuff should be in scopes, e.g. the code above could become:\n```rb\nphotos_with_credits = Photo.with_creator.with_editor\n```\n\nYou can store requests in variables then add SQL segments:\n```rb\nall_time      = photos_with_credits.count\nthis_month    = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month))\nrecent_photos = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month)).limit(5)\n```\n"
  },
  {
    "path": "astro.config.mjs",
    "content": "import { defineConfig } from 'astro/config'\nimport partytown from '@astrojs/partytown'\n\n/*\n * https://astro.build/config\n */\nimport tailwind from '@astrojs/tailwind'\n\n// https://astro.build/config\nexport default defineConfig({\n  site: 'https://devhints.io',\n  build: {\n    format: 'file' /* generate /my-post.html instead of /my-post/index.html */,\n    inlineStylesheets: 'always'\n  },\n  prefetch: {\n    prefetchAll: true\n  },\n  server: {\n    host: true\n  } /* access from https://192.168.x.x/ */,\n  integrations: [\n    partytown({\n      config: {\n        forward: ['dataLayer.push']\n      }\n    }),\n    tailwind()\n  ],\n  markdown: {\n    // Syntax highlighting is handled by render()\n    syntaxHighlight: false\n  }\n})\n"
  },
  {
    "path": "atom.md",
    "content": "---\ntitle: Atom\ncategory: Apps\nupdated: 2021-09-10\n---\n\n## Shortcuts\n{: .-three-column}\n\n### Tree\n\n| Shortcut | Description         |\n| -------- | ------------------- |\n| `⌘\\`     | Toggle tree         |\n| `⌘⇧\\`    | Reveal current file |\n{: .-shortcuts}\n\n### Comments\n\n| Shortcut | Description     |\n| -------- | --------------- |\n| `⌘/`     | Toggle comments |\n{: .-shortcuts}\n\n### View\n\n| Shortcut             | Description                                     |\n| --------             | ----------------------                          |\n| `⌘k` `←,→,↑,↓`       | Split pane to the left, right, up, or down      |\n| ---                  | ---                                             |\n| `⌘⌥=`                | Grow pane                                       |\n| `⌘⌥-`                | Shrink pane                                     |\n| ---                  | ---                                             |\n| `^⇧←`/`^⇧→`          | Move tab to left/right                          |\n{: .-shortcuts}\n\n### Bracket matcher\n\n| Shortcut | Description                    |\n| -------- | ------------------------------ |\n| `^m`     | Go to matching bracket         |\n| `^⌫`     | Remove brackets from selection |\n| `^⌘m`    | Select inside brackets         |\n| `⌥⌘.`    | Close tag                      |\n{: .-shortcuts}\n\n### Symbols view\n\n| Shortcut | Description                      |\n| -------- | -------------------------------- |\n| `⌥⌘↓`    | Jump to declaration under cursor |\n| `^⇧r`    | Show tags                        |\n{: .-shortcuts}\n\nSymbols view enables Ctags support for Atom.\n\nSee: [Symbols view](https://atom.io/packages/symbols-view)\n\n### Git\n\n| Shortcut | Description                    |\n| -------- | ------------------------------ |\n| `^⇧9` | Show Git pane |\n| `^⇧8` | Show GitHub pane |\n{: .-shortcuts}\n\n### Editing\n\n| Shortcut | Description    |\n| -------- | -------------- |\n| `⌘d`     | Select word    |\n| `⌘l`     | Select line    |\n| ---      | ---            |\n| `^⌘↑`     | Move line up   |\n| `^⌘↓`     | Move line down |\n| ---      | ---            |\n| `⌘⏎`     | New line below |\n| `⌘⇧⏎`    | New line above |\n| ---      | ---            |\n| `^⇧k`    | Delete line    |\n| `⌘⇧d`    | Duplicate line |\n{: .-shortcuts}\n\n### Project\n\n| Shortcut | Description             |\n| -------- | ----------------------- |\n| `⌘⇧p`    | Command palette         |\n| `⌘⇧o`    | Add project folder      |\n| ---      | ---                     |\n| `⌘n`     | New file                |\n| `⌘⇧n`    | New window              |\n| ---      | ---                     |\n| `⌘f`     | Find in file            |\n| `⌘⇧f`    | Find in project         |\n| `⌘t`     | Search files in project |\n{: .-shortcuts}\n\n## Notes\n\n### ⌘\n\n- For Windows and Linux, `⌘` is the `Control` key.\n- For macOS, it's the `Command` key.\n\n### ⌥\n\n- For Windows and Linux, `⌥` is the `Alt` key.\n- For macOS, it's the `Option` key.\n"
  },
  {
    "path": "awesome-redux.md",
    "content": "---\ntitle: Awesome Redux\ncategory: React\nupdated: 2017-11-19\n---\n\n### redux-actions\n\nCreate action creators in flux standard action format.\n{: .-setup}\n\n```js\nincrement = createAction('INCREMENT', amount => amount)\nincrement = createAction('INCREMENT')  // same\n```\n\n```js\nincrement(42) === { type: 'INCREMENT', payload: 42 }\n```\n\n```js\n// Errors are handled for you:\nerr = new Error()\nincrement(err) === { type: 'INCREMENT', payload: err, error: true }\n```\n\n[redux-actions](https://www.npmjs.com/package/redux-actions)\n{: .-crosslink}\n\n### flux-standard-action\n\nA standard for flux action objects. An action may have an `error`, `payload` and `meta` and nothing else.\n{: .-setup}\n\n```js\n{ type: 'ADD_TODO', payload: { text: 'Work it' } }\n{ type: 'ADD_TODO', payload: new Error(), error: true }\n```\n\n[flux-standard-action](https://github.com/acdlite/flux-standard-action)\n{: .-crosslink}\n\n### redux-multi\n\nDispatch multiple actions in one action creator.\n{: .-setup}\n\n```js\nstore.dispatch([\n  { type: 'INCREMENT', payload: 2 },\n  { type: 'INCREMENT', payload: 3 }\n])\n```\n\n[redux-multi](https://github.com/ashaffer/redux-multi)\n{: .-crosslink}\n\n### reduce-reducers\nCombines reducers (like *combineReducers()*), but without namespacing magic.\n{: .-setup}\n\n```js\nre = reduceReducers(\n  (state, action) => state + action.number,\n  (state, action) => state + action.number\n)\n\nre(10, { number: 2 })  //=> 14\n```\n\n[reduce-reducers](https://www.npmjs.com/package/reduce-reducers)\n{: .-crosslink}\n\n### redux-logger\n\nLogs actions to your console.\n{: .-setup}\n\n```js\n// Nothing to see here\n```\n\n[redux-logger](https://github.com/evgenyrodionov/redux-logger)\n{: .-crosslink}\n\nAsync\n-----\n\n### redux-promise\n\nPass promises to actions. Dispatches a flux-standard-action.\n{: .-setup}\n\n```js\nincrement = createAction('INCREMENT')  // redux-actions\nincrement(Promise.resolve(42))\n```\n\n[redux-promise](https://github.com/acdlite/redux-promise)\n{: .-crosslink}\n\n### redux-promises\n\nSorta like that, too. Works by letting you pass *thunks* (functions) to `dispatch()`. Also has 'idle checking'.\n{: .-setup}\n\n```js\nfetchData = (url) => (dispatch) => {\n  dispatch({ type: 'FETCH_REQUEST' })\n  fetch(url)\n    .then((data) => dispatch({ type: 'FETCH_DONE', data })\n    .catch((error) => dispatch({ type: 'FETCH_ERROR', error })\n})\n\nstore.dispatch(fetchData('/posts'))\n```\n\n```js\n// That's actually shorthand for:\nfetchData('/posts')(store.dispatch)\n```\n\n[redux-promises](https://www.npmjs.com/package/redux-promises)\n{: .-crosslink}\n\n### redux-effects\n\nPass side effects declaratively to keep your actions pure.\n{: .-setup}\n\n```js\n{\n  type: 'EFFECT_COMPOSE',\n  payload: {\n    type: 'FETCH'\n    payload: {url: '/some/thing', method: 'GET'}\n  },\n  meta: {\n    steps: [ [success, failure] ]\n  }\n}\n```\n\n[redux-effects](https://www.npmjs.com/package/redux-effects)\n{: .-crosslink}\n\n### redux-thunk\n\nPass \"thunks\" to as actions. Extremely similar to redux-promises, but has support for getState.\n{: .-setup}\n\n```js\nfetchData = (url) => (dispatch, getState) => {\n  dispatch({ type: 'FETCH_REQUEST' })\n  fetch(url)\n    .then((data) => dispatch({ type: 'FETCH_DONE', data })\n    .catch((error) => dispatch({ type: 'FETCH_ERROR', error })\n})\n\nstore.dispatch(fetchData('/posts'))\n```\n\n```js\n// That's actually shorthand for:\nfetchData('/posts')(store.dispatch, store.getState)\n```\n\n```js\n// Optional: since fetchData returns a promise, it can be chained\n// for server-side rendering\nstore.dispatch(fetchPosts()).then(() => {\n  ReactDOMServer.renderToString(<MyApp store={store} />)\n})\n```\n\n[redux-thunk](https://www.npmjs.com/package/redux-thunk)\n{: .-crosslink}\n"
  },
  {
    "path": "awscli.md",
    "content": "---\ntitle: AWS CLI\ncategory: Devops\n---\n\n### EC2\n\n```\naws ec2 describe-instances\naws ec2 start-instances --instance-ids i-12345678c\naws ec2 terminate-instances --instance-ids i-12345678c\n```\n\n### S3\n\n```\naws s3 ls s3://mybucket\naws s3 rm s3://mybucket/folder --recursive\naws s3 cp myfolder s3://mybucket/folder --recursive\naws s3 sync myfolder s3://mybucket/folder --exclude *.tmp\n```\n\n### ECS\n\n```\naws ecs create-cluster\n  --cluster-name=NAME\n  --generate-cli-skeleton\n\naws ecs create-service\n```\n\n### Homebrew\n\n```\nbrew install awscli\naws configure\n```\n\n### Configuration profiles\n\n```\naws configure --profile project1\naws configure --profile project2\n```\n\n## Elastic Beanstalk\n\n### Configuration\n\n* .elasticbeanstalk/config.yml - application config\n* .elasticbeanstalk/dev-env.env.yml - environment config\n\n```\neb config\n```\n\nSee: <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html>\n\n## ebextensions\n\n* <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html>\n* <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html>\n\n## Also see\n\n* [AWS CLI](https://aws.amazon.com/cli/)\n* [Documentation](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)\n* [All commands](https://docs.aws.amazon.com/cli/latest/reference/#available-services)\n"
  },
  {
    "path": "backbone.md",
    "content": "---\ntitle: Backbone.js\nupdated: 2018-12-06\ncategory: JavaScript libraries\n---\n\n### Binding events\n\n```js\n.on('event', callback)\n.on('event', callback, context)\n```\n\n```js\n.on({\n  'event1': callback,\n  'event2': callback\n})\n```\n\n```js\n.on('all', callback)\n```\n\n```js\n.once('event', callback)   // Only happens once\n```\n\n### Unbinding events\n\n```js\nobject.off('change', onChange)    // just the `onChange` callback\nobject.off('change')              // all 'change' callbacks\nobject.off(null, onChange)        // `onChange` callback for all events\nobject.off(null, null, context)   // all callbacks for `context` all events\nobject.off()                      // all\n```\n\n### Events\n\n```js\nobject.trigger('event')\n```\n\n```js\nview.listenTo(object, event, callback)\nview.stopListening()\n```\n\n### List of events\n\n  * Collection:\n    * `add` (model, collection, options)\n    * `remove` (model, collection, options)\n    * `reset` (collection, options)\n    * `sort` (collection, options)\n\n  * Model:\n    * `change` (model, options)\n    * `change:[attr]` (model, value, options)\n    * `destroy` (model, collection, options)\n    * `error` (model, xhr, options)\n\n  * Model and collection:\n    * `request` (model, xhr, options)\n    * `sync` (model, resp, options)\n\n  * Router:\n    * `route:[name]` (params)\n    * `route` (router, route, params)\n\n## Views\n\n### Defining\n\n```js\n// All attributes are optional\nvar View = Backbone.View.extend({\n  model: doc,\n```\n\n```js\n  tagName: 'div',\n  className: 'document-item',\n  id: \"document-\" + doc.id,\n  attributes: { href: '#' },\n```\n\n```js\n  el: 'body',\n```\n\n```js\n  events: {\n    'click button.save': 'save',\n    'click .cancel': function() { ··· },\n    'click': 'onclick'\n  },\n```\n\n```js\n  constructor: function() { ··· },\n  render: function() { ··· }\n})\n```\n### Instantiating\n\n```js\nview = new View()\nview = new View({ el: ··· })\n```\n\n### Methods\n\n```js\nview.$el.show()\nview.$('input')\n```\n\n```js\nview.remove()\n```\n\n```js\nview.delegateEvents()\nview.undelegateEvents()\n```\n\n## Models\n\n### Defining\n\n```js\n// All attributes are optional\nvar Model = Backbone.Model.extend({\n  defaults: {\n    'author': 'unknown'\n  },\n  idAttribute: '_id',\n  parse: function() { ··· }\n})\n```\n\n### Instantiating\n\n```js\nvar obj = new Model({ title: 'Lolita', author: 'Nabokov' })\n```\n\n```js\nvar obj = new Model({ collection: ··· })\n```\n\n### Methods\n\n```js\nobj.id\nobj.cid   // → 'c38' (client-side ID)\n```\n\n```js\nobj.clone()\n```\n\n```js\nobj.hasChanged('title')\nobj.changedAttributes()  // false, or hash\nobj.previousAttributes() // false, or hash\nobj.previous('title')\n```\n\n```js\nobj.isNew()\n```\n\n```js\nobj.set({ title: 'A Study in Pink' })\nobj.set({ title: 'A Study in Pink' }, { validate: true, silent: true })\nobj.unset('title')\n```\n\n```js\nobj.get('title')\nobj.has('title')\nobj.escape('title')     /* Like .get() but HTML-escaped */\n```\n\n```js\nobj.clear()\nobj.clear({ silent: true })\n```\n\n```js\nobj.save()\nobj.save({ attributes })\nobj.save(null, {\n  silent: true, patch: true, wait: true,\n  success: callback, error: callback\n})\n```\n\n```js\nobj.destroy()\nobj.destroy({\n  wait: true,\n  success: callback, error: callback\n})\n```\n\n```js\nobj.toJSON()\n```\n\n```js\nobj.fetch()\nobj.fetch({ success: callback, error: callback })\n```\n\n### Validation\n\n```js\nvar Model = Backbone.Model.extend({\n  validate: function(attrs, options) {\n    if (attrs.end < attrs.start) {\n      return \"Can't end before it starts\"\n    }\n  }\n})\n```\n{: data-line=\"2\"}\n\n```js\nobj.validationError  //=> \"Can't end before it starts\"\nobj.isValid()\nobj.on('invalid', function (model, error) { ··· })\n```\n\n```js\n// Triggered on:\nobj.save()\nobj.set({ ··· }, { validate: true })\n```\n\n### Custom URLs\n\n```js\nvar Model = Backbone.Model.extend({\n  // Single URL (string or function)\n  url: '/account',\n  url: function() { return '/account' },\n```\n\n```js\n  // Both of these two work the same way\n  url: function() { return '/books/' + this.id }),\n  urlRoot: '/books'\n})\n```\n\n```js\nvar obj = new Model({ url: ··· })\nvar obj = new Model({ urlRoot: ··· })\n```\n\n## References\n{: .-one-column}\n\n- [Backbone website](http://backbonejs.org/) _(backbonejs.org)_\n- [Backbone patterns](http://ricostacruz.com/backbone-patterns/) _(ricostacruz.com)_\n"
  },
  {
    "path": "bash.md",
    "content": "---\ntitle: Bash scripting\ncategory: CLI\ntags: [Featured]\nupdated: 2020-07-05\nkeywords:\n  - Variables\n  - Functions\n  - Interpolation\n  - Brace expansions\n  - Loops\n  - Conditional execution\n  - Command substitution\n---\n\n## Getting started\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\nThis is a quick reference to getting started with Bash scripting.\n\n- [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_\n- [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_\n- [Bash Hackers Wiki](https://web.archive.org/web/20230406205817/https://wiki.bash-hackers.org/) _(wiki.bash-hackers.org)_\n\n### Example\n\n```bash\n#!/usr/bin/env bash\n\nname=\"John\"\necho \"Hello $name!\"\n```\n\n### Variables\n\n```bash\nname=\"John\"\necho $name  # see below\necho \"$name\"\necho \"${name}!\"\n```\n\nGenerally quote your variables unless they contain wildcards to expand or command fragments.\n\n```bash\nwildcard=\"*.txt\"\noptions=\"iv\"\ncp -$options $wildcard /tmp\n```\n\n### String quotes\n\n```bash\nname=\"John\"\necho \"Hi $name\"  #=> Hi John\necho 'Hi $name'  #=> Hi $name\n```\n\n### Shell execution\n\n```bash\necho \"I'm in $(pwd)\"\necho \"I'm in `pwd`\"  # obsolescent\n# Same\n```\n\nSee [Command substitution](https://web.archive.org/web/20230326081741/https://wiki.bash-hackers.org/syntax/expansion/cmdsubst)\n\n### Conditional execution\n\n```bash\ngit commit && git push\ngit commit || echo \"Commit failed\"\n```\n\n### Functions\n{: id='functions-example'}\n\n```bash\nget_name() {\n  echo \"John\"\n}\n\necho \"You are $(get_name)\"\n```\n\nSee: [Functions](#functions)\n\n### Conditionals\n{: id='conditionals-example'}\n\n```bash\nif [[ -z \"$string\" ]]; then\n  echo \"String is empty\"\nelif [[ -n \"$string\" ]]; then\n  echo \"String is not empty\"\nfi\n```\n\nSee: [Conditionals](#conditionals)\n\n### Strict mode\n\n```bash\nset -euo pipefail\nIFS=$'\\n\\t'\n```\n\nSee: [Unofficial bash strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/)\n\n### Brace expansion\n\n```bash\necho {A,B}.js\n```\n\n| Expression             | Description           |\n| ---------------------- | --------------------- |\n| `{A,B}`                | Same as `A B`         |\n| `{A,B}.js`             | Same as `A.js B.js`   |\n| `{1..5}`               | Same as `1 2 3 4 5`   |\n| <code>&lcub;{1..3},{7..9}}</code> | Same as `1 2 3 7 8 9` |\n\nSee: [Brace expansion](https://web.archive.org/web/20230207192110/https://wiki.bash-hackers.org/syntax/expansion/brace)\n\n## Parameter expansions\n{: .-three-column}\n\n### Basics\n\n```bash\nname=\"John\"\necho \"${name}\"\necho \"${name/J/j}\"    #=> \"john\" (substitution)\necho \"${name:0:2}\"    #=> \"Jo\" (slicing)\necho \"${name::2}\"     #=> \"Jo\" (slicing)\necho \"${name::-1}\"    #=> \"Joh\" (slicing)\necho \"${name:(-1)}\"   #=> \"n\" (slicing from right)\necho \"${name:(-2):1}\" #=> \"h\" (slicing from right)\necho \"${food:-Cake}\"  #=> $food or \"Cake\"\n```\n\n```bash\nlength=2\necho \"${name:0:length}\"  #=> \"Jo\"\n```\n\nSee: [Parameter expansion](https://web.archive.org/web/20230408142504/https://wiki.bash-hackers.org/syntax/pe)\n\n```bash\nstr=\"/path/to/foo.cpp\"\necho \"${str%.cpp}\"    # /path/to/foo\necho \"${str%.cpp}.o\"  # /path/to/foo.o\necho \"${str%/*}\"      # /path/to\n\necho \"${str##*.}\"     # cpp (extension)\necho \"${str##*/}\"     # foo.cpp (basepath)\n\necho \"${str#*/}\"      # path/to/foo.cpp\necho \"${str##*/}\"     # foo.cpp\n\necho \"${str/foo/bar}\" # /path/to/bar.cpp\n```\n\n```bash\nstr=\"Hello world\"\necho \"${str:6:5}\"    # \"world\"\necho \"${str: -5:5}\"  # \"world\"\n```\n\n```bash\nsrc=\"/path/to/foo.cpp\"\nbase=${src##*/}   #=> \"foo.cpp\" (basepath)\ndir=${src%$base}  #=> \"/path/to/\" (dirpath)\ndir=${src%/*}     #=> \"/path/to\" (dirpath)\n```\n\n### Prefix name expansion\n\n```bash\nprefix_a=one\nprefix_b=two\necho ${!prefix_*}  # all variables names starting with `prefix_`\nprefix_a prefix_b\n```\n\n### Indirection\n\n```bash\nname=joe\npointer=name\necho ${!pointer}\njoe\n```\n\n### Substitution\n\n| Code              | Description         |\n| ----------------- | ------------------- |\n| `${foo%suffix}`   | Remove suffix       |\n| `${foo#prefix}`   | Remove prefix       |\n| ---               | ---                 |\n| `${foo%%suffix}`  | Remove long suffix  |\n| `${foo/%suffix}`  | Remove long suffix  |\n| `${foo##prefix}`  | Remove long prefix  |\n| `${foo/#prefix}`  | Remove long prefix  |\n| ---               | ---                 |\n| `${foo/from/to}`  | Replace first match |\n| `${foo//from/to}` | Replace all         |\n| ---               | ---                 |\n| `${foo/%from/to}` | Replace suffix      |\n| `${foo/#from/to}` | Replace prefix      |\n\n### Comments\n\n```bash\n# Single line comment\n```\n\n```bash\n: '\nThis is a\nmulti line\ncomment\n'\n```\n\n### Substrings\n\n| Expression      | Description                    |\n| --------------- | ------------------------------ |\n| `${foo:0:3}`    | Substring _(position, length)_ |\n| `${foo:(-3):3}` | Substring from the right       |\n\n### Length\n\n| Expression | Description      |\n| ---------- | ---------------- |\n| `${#foo}`  | Length of `$foo` |\n\n### Manipulation\n\n```bash\nstr=\"HELLO WORLD!\"\necho \"${str,}\"   #=> \"hELLO WORLD!\" (lowercase 1st letter)\necho \"${str,,}\"  #=> \"hello world!\" (all lowercase)\n\nstr=\"hello world!\"\necho \"${str^}\"   #=> \"Hello world!\" (uppercase 1st letter)\necho \"${str^^}\"  #=> \"HELLO WORLD!\" (all uppercase)\n```\n\n### Default values\n\n| Expression        | Description                                              |\n| ----------------- | -------------------------------------------------------- |\n| `${foo:-val}`     | `$foo`, or `val` if unset (or null)                      |\n| `${foo:=val}`     | Set `$foo` to `val` if unset (or null)                   |\n| `${foo:+val}`     | `val` if `$foo` is set (and not null)                    |\n| `${foo:?message}` | Show error message and exit if `$foo` is unset (or null) |\n\nOmitting the `:` removes the (non)nullity checks, e.g. `${foo-val}` expands to `val` if unset otherwise `$foo`.\n\n## Loops\n{: .-three-column}\n\n### Basic for loop\n\n```bash\nfor i in /etc/rc.*; do\n  echo \"$i\"\ndone\n```\n\n### C-like for loop\n\n```bash\nfor ((i = 0 ; i < 100 ; i++)); do\n  echo \"$i\"\ndone\n```\n\n### Ranges\n\n```bash\nfor i in {1..5}; do\n    echo \"Welcome $i\"\ndone\n```\n\n#### With step size\n\n```bash\nfor i in {5..50..5}; do\n    echo \"Welcome $i\"\ndone\n```\n\n### Reading lines\n\n```bash\nwhile read -r line; do\n  echo \"$line\"\ndone <file.txt\n```\n\n### Forever\n\n```bash\nwhile true; do\n  ···\ndone\n```\n\n## Functions\n{: .-three-column}\n\n### Defining functions\n\n```bash\nmyfunc() {\n    echo \"hello $1\"\n}\n```\n\n```bash\n# Same as above (alternate syntax)\nfunction myfunc {\n    echo \"hello $1\"\n}\n```\n\n```bash\nmyfunc \"John\"\n```\n\n### Returning values\n\n```bash\nmyfunc() {\n    local myresult='some value'\n    echo \"$myresult\"\n}\n```\n\n```bash\nresult=$(myfunc)\n```\n\n### Raising errors\n\n```bash\nmyfunc() {\n  return 1\n}\n```\n\n```bash\nif myfunc; then\n  echo \"success\"\nelse\n  echo \"failure\"\nfi\n```\n\n### Arguments\n\n| Expression | Description                                    |\n| ---------- | ---------------------------------------------- |\n| `$#`       | Number of arguments                            |\n| `$*`       | All positional arguments (as a single word)    |\n| `$@`       | All positional arguments (as separate strings) |\n| `$1`       | First argument                                 |\n| `$_`       | Last argument of the previous command          |\n\n**Note**: `$@` and `$*` must be quoted in order to perform as described.\nOtherwise, they do exactly the same thing (arguments as separate strings).\n\nSee [Special parameters](https://web.archive.org/web/20230318164746/https://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables).\n\n## Conditionals\n{: .-three-column}\n\n### Conditions\n\nNote that `[[` is actually a command/program that returns either `0` (true) or `1` (false). Any program that obeys the same logic (like all base utils, such as `grep(1)` or `ping(1)`) can be used as condition, see examples.\n\n| Condition                | Description           |\n| ------------------------ | --------------------- |\n| `[[ -z STRING ]]`        | Empty string          |\n| `[[ -n STRING ]]`        | Not empty string      |\n| `[[ STRING == STRING ]]` | Equal                 |\n| `[[ STRING != STRING ]]` | Not Equal             |\n| ---                      | ---                   |\n| `[[ NUM -eq NUM ]]`      | Equal                 |\n| `[[ NUM -ne NUM ]]`      | Not equal             |\n| `[[ NUM -lt NUM ]]`      | Less than             |\n| `[[ NUM -le NUM ]]`      | Less than or equal    |\n| `[[ NUM -gt NUM ]]`      | Greater than          |\n| `[[ NUM -ge NUM ]]`      | Greater than or equal |\n| ---                      | ---                   |\n| `[[ STRING =~ STRING ]]` | Regexp                |\n| ---                      | ---                   |\n| `(( NUM < NUM ))`        | Numeric conditions    |\n\n#### More conditions\n\n| Condition            | Description              |\n| -------------------- | ------------------------ |\n| `[[ -o noclobber ]]` | If OPTIONNAME is enabled |\n| ---                  | ---                      |\n| `[[ ! EXPR ]]`       | Not                      |\n| `[[ X && Y ]]`       | And                      |\n| `[[ X || Y ]]`       | Or                       |\n\n### File conditions\n\n| Condition               | Description             |\n| ----------------------- | ----------------------- |\n| `[[ -e FILE ]]`         | Exists                  |\n| `[[ -r FILE ]]`         | Readable                |\n| `[[ -h FILE ]]`         | Symlink                 |\n| `[[ -d FILE ]]`         | Directory               |\n| `[[ -w FILE ]]`         | Writable                |\n| `[[ -s FILE ]]`         | Size is > 0 bytes       |\n| `[[ -f FILE ]]`         | File                    |\n| `[[ -x FILE ]]`         | Executable              |\n| ---                     | ---                     |\n| `[[ FILE1 -nt FILE2 ]]` | 1 is more recent than 2 |\n| `[[ FILE1 -ot FILE2 ]]` | 2 is more recent than 1 |\n| `[[ FILE1 -ef FILE2 ]]` | Same files              |\n\n### Example\n\n```bash\n# String\nif [[ -z \"$string\" ]]; then\n  echo \"String is empty\"\nelif [[ -n \"$string\" ]]; then\n  echo \"String is not empty\"\nelse\n  echo \"This never happens\"\nfi\n```\n\n```bash\n# Combinations\nif [[ X && Y ]]; then\n  ...\nfi\n```\n\n```bash\n# Equal\nif [[ \"$A\" == \"$B\" ]]\n```\n\n```bash\n# Regex\nif [[ \"A\" =~ . ]]\n```\n\n```bash\nif (( $a < $b )); then\n   echo \"$a is smaller than $b\"\nfi\n```\n\n```bash\nif [[ -e \"file.txt\" ]]; then\n  echo \"file exists\"\nfi\n```\n\n## Arrays\n\n### Defining arrays\n\n```bash\nFruits=('Apple' 'Banana' 'Orange')\n```\n\n```bash\nFruits[0]=\"Apple\"\nFruits[1]=\"Banana\"\nFruits[2]=\"Orange\"\n```\n\n### Working with arrays\n\n```bash\necho \"${Fruits[0]}\"           # Element #0\necho \"${Fruits[-1]}\"          # Last element\necho \"${Fruits[@]}\"           # All elements, space-separated\necho \"${#Fruits[@]}\"          # Number of elements\necho \"${#Fruits}\"             # String length of the 1st element\necho \"${#Fruits[3]}\"          # String length of the Nth element\necho \"${Fruits[@]:3:2}\"       # Range (from position 3, length 2)\necho \"${!Fruits[@]}\"          # Keys of all elements, space-separated\n```\n\n### Operations\n\n```bash\nFruits=(\"${Fruits[@]}\" \"Watermelon\")    # Push\nFruits+=('Watermelon')                  # Also Push\nFruits=( \"${Fruits[@]/Ap*/}\" )          # Remove by regex match\nunset Fruits[2]                         # Remove one item\nFruits=(\"${Fruits[@]}\")                 # Duplicate\nFruits=(\"${Fruits[@]}\" \"${Veggies[@]}\") # Concatenate\nwords=($(< datafile))                   # From file (split by IFS)\n```\n\n### Iteration\n\n```bash\nfor i in \"${arrayName[@]}\"; do\n  echo \"$i\"\ndone\n```\n\n## Dictionaries\n{: .-three-column}\n\n### Defining\n\n```bash\ndeclare -A sounds\n```\n\n```bash\nsounds[dog]=\"bark\"\nsounds[cow]=\"moo\"\nsounds[bird]=\"tweet\"\nsounds[wolf]=\"howl\"\n```\n\nDeclares `sound` as a Dictionary object (aka associative array).\n\n### Working with dictionaries\n\n```bash\necho \"${sounds[dog]}\" # Dog's sound\necho \"${sounds[@]}\"   # All values\necho \"${!sounds[@]}\"  # All keys\necho \"${#sounds[@]}\"  # Number of elements\nunset sounds[dog]     # Delete dog\n```\n\n### Iteration\n\n#### Iterate over values\n\n```bash\nfor val in \"${sounds[@]}\"; do\n  echo \"$val\"\ndone\n```\n\n#### Iterate over keys\n\n```bash\nfor key in \"${!sounds[@]}\"; do\n  echo \"$key\"\ndone\n```\n\n## Options\n\n### Options\n\n```bash\nset -o noclobber  # Avoid overlay files (echo \"hi\" > foo)\nset -o errexit    # Used to exit upon error, avoiding cascading errors\nset -o pipefail   # Unveils hidden failures\nset -o nounset    # Exposes unset variables\n```\n\n### Glob options\n\n```bash\nshopt -s nullglob    # Non-matching globs are removed  ('*.foo' => '')\nshopt -s failglob    # Non-matching globs throw errors\nshopt -s nocaseglob  # Case insensitive globs\nshopt -s dotglob     # Wildcards match dotfiles (\"*.sh\" => \".foo.sh\")\nshopt -s globstar    # Allow ** for recursive matches ('lib/**/*.rb' => 'lib/a/b/c.rb')\n```\n\nSet `GLOBIGNORE` as a colon-separated list of patterns to be removed from glob\nmatches.\n\n## History\n\n### Commands\n\n| Command               | Description                               |\n| --------------------- | ----------------------------------------- |\n| `history`             | Show history                              |\n| `shopt -s histverify` | Don't execute expanded result immediately |\n\n### Expansions\n\n| Expression   | Description                                          |\n| ------------ | ---------------------------------------------------- |\n| `!$`         | Expand last parameter of most recent command         |\n| `!*`         | Expand all parameters of most recent command         |\n| `!-n`        | Expand `n`th most recent command                     |\n| `!n`         | Expand `n`th command in history                      |\n| `!<command>` | Expand most recent invocation of command `<command>` |\n\n### Operations\n\n| Code                 | Description                                                           |\n| -------------------- | --------------------------------------------------------------------- |\n| `!!`                 | Execute last command again                                            |\n| `!!:s/<FROM>/<TO>/`  | Replace first occurrence of `<FROM>` to `<TO>` in most recent command |\n| `!!:gs/<FROM>/<TO>/` | Replace all occurrences of `<FROM>` to `<TO>` in most recent command  |\n| `!$:t`               | Expand only basename from last parameter of most recent command       |\n| `!$:h`               | Expand only directory from last parameter of most recent command      |\n\n`!!` and `!$` can be replaced with any valid expansion.\n\n### Slices\n\n| Code     | Description                                                                              |\n| -------- | ---------------------------------------------------------------------------------------- |\n| `!!:n`   | Expand only `n`th token from most recent command (command is `0`; first argument is `1`) |\n| `!^`     | Expand first argument from most recent command                                           |\n| `!$`     | Expand last token from most recent command                                               |\n| `!!:n-m` | Expand range of tokens from most recent command                                          |\n| `!!:n-$` | Expand `n`th token to last from most recent command                                      |\n\n`!!` can be replaced with any valid expansion i.e. `!cat`, `!-2`, `!42`, etc.\n\n## Miscellaneous\n\n### Numeric calculations\n\n```bash\n$((a + 200))      # Add 200 to $a\n```\n\n```bash\n$(($RANDOM%200))  # Random number 0..199\n```\n\n```bash\ndeclare -i count  # Declare as type integer\ncount+=1          # Increment\n```\n\n### Subshells\n\n```bash\n(cd somedir; echo \"I'm now in $PWD\")\npwd # still in first directory\n```\n\n### Redirection\n\n```bash\npython hello.py > output.txt            # stdout to (file)\npython hello.py >> output.txt           # stdout to (file), append\npython hello.py 2> error.log            # stderr to (file)\npython hello.py 2>&1                    # stderr to stdout\npython hello.py 2>/dev/null             # stderr to (null)\npython hello.py >output.txt 2>&1        # stdout and stderr to (file), equivalent to &>\npython hello.py &>/dev/null             # stdout and stderr to (null)\necho \"$0: warning: too many users\" >&2  # print diagnostic message to stderr\n```\n\n```bash\npython hello.py < foo.txt      # feed foo.txt to stdin for python\ndiff <(ls -r) <(ls)            # Compare two stdout without files\n```\n\n### Inspecting commands\n\n```bash\ncommand -V cd\n#=> \"cd is a function/alias/whatever\"\n```\n\n### Trap errors\n\n```bash\ntrap 'echo Error at about $LINENO' ERR\n```\n\nor\n\n```bash\ntraperr() {\n  echo \"ERROR: ${BASH_SOURCE[1]} at about ${BASH_LINENO[0]}\"\n}\n\nset -o errtrace\ntrap traperr ERR\n```\n\n### Case/switch\n\n```bash\ncase \"$1\" in\n  start | up)\n    vagrant up\n    ;;\n\n  *)\n    echo \"Usage: $0 {start|stop|ssh}\"\n    ;;\nesac\n```\n\n### Source relative\n\n```bash\nsource \"${0%/*}/../share/foo.sh\"\n```\n\n### printf\n\n```bash\nprintf \"Hello %s, I'm %s\" Sven Olga\n#=> \"Hello Sven, I'm Olga\n\nprintf \"1 + 1 = %d\" 2\n#=> \"1 + 1 = 2\"\n\nprintf \"This is how you print a float: %f\" 2\n#=> \"This is how you print a float: 2.000000\"\n\nprintf '%s\\n' '#!/bin/bash' 'echo hello' >file\n# format string is applied to each group of arguments\nprintf '%i+%i=%i\\n' 1 2 3  4 5 9\n```\n\n### Transform strings\n\n| Command option | Description                                         |\n| -------------- | --------------------------------------------------- |\n| `-c`           | Operations apply to characters not in the given set |\n| `-d`           | Delete characters                                   |\n| `-s`           | Replaces repeated characters with single occurrence |\n| `-t`           | Truncates                                           |\n| `[:upper:]`    | All upper case letters                              |\n| `[:lower:]`    | All lower case letters                              |\n| `[:digit:]`    | All digits                                          |\n| `[:space:]`    | All whitespace                                      |\n| `[:alpha:]`    | All letters                                         |\n| `[:alnum:]`    | All letters and digits                              |\n\n#### Example\n\n```bash\necho \"Welcome To Devhints\" | tr '[:lower:]' '[:upper:]'\nWELCOME TO DEVHINTS\n```\n\n### Directory of script\n\n```bash\ndir=${0%/*}\n```\n\n### Getting options\n\n```bash\nwhile [[ \"$1\" =~ ^- && ! \"$1\" == \"--\" ]]; do case $1 in\n  -V | --version )\n    echo \"$version\"\n    exit\n    ;;\n  -s | --string )\n    shift; string=$1\n    ;;\n  -f | --flag )\n    flag=1\n    ;;\nesac; shift; done\nif [[ \"$1\" == '--' ]]; then shift; fi\n```\n\n### Heredoc\n\n```sh\ncat <<END\nhello world\nEND\n```\n\nHeredoc allows a section of your source code to be treated as a file. See [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Redirections.html#Here-Documents).\n\n### Herestring\n\n```sh\ntr '[:lower:]' '[:upper:]' <<< \"Will be uppercased, even $variable\"\n```\n\nHerestring allows a string to be treated as a standard input (stdin). See [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Redirections.html#Here-Strings).\n\n### Process substitution\n\n```sh \n# loop on myfunc output lines\nwhile read -r line; do\n  echo \"$line\"\ndone < <(myfunc)\n\n# compare content of two folders\ndiff <(ls \"$dir1\") <(ls \"$dir2\")\n```\n\nProcess substitution allows the input (or output) of a command to be treated as a file. See [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html).\n\n### Reading input\n\n```bash\necho -n \"Proceed? [y/n]: \"\nread -r ans\necho \"$ans\"\n```\n\nThe `-r` option disables a peculiar legacy behavior with backslashes.\n\n```bash\nread -n 1 ans    # Just one character\n```\n\n### Special variables\n\n| Expression         | Description                            |\n| ------------------ | -------------------------------------- |\n| `$?`               | Exit status of last task               |\n| `$!`               | PID of last background task            |\n| `$$`               | PID of shell                           |\n| `$0`               | Filename of the shell script           |\n| `$_`               | Last argument of the previous command  |\n| `${PIPESTATUS[n]}` | return value of piped commands (array) |\n\nSee [Special parameters](https://web.archive.org/web/20230318164746/https://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables).\n\n### Go to previous directory\n\n```bash\npwd # /home/user/foo\ncd bar/\npwd # /home/user/foo/bar\ncd -\npwd # /home/user/foo\n```\n\n### Check for command's result\n\n```bash\nif ping -c 1 google.com; then\n  echo \"It appears you have a working internet connection\"\nfi\n```\n\n### Grep check\n\n```bash\nif grep -q 'foo' ~/.bash_history; then\n  echo \"You appear to have typed 'foo' in the past\"\nfi\n```\n\n## Also see\n{: .-one-column}\n\n- [Bash-hackers wiki](https://web.archive.org/web/20230406205817/https://wiki.bash-hackers.org/) _(bash-hackers.org)_\n- [Shell vars](https://web.archive.org/web/20230318164746/https://wiki.bash-hackers.org/syntax/shellvars) _(bash-hackers.org)_\n- [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_\n- [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_\n- [ShellCheck](https://www.shellcheck.net/) _(shellcheck.net)_\n"
  },
  {
    "path": "blessed.md",
    "content": "---\ntitle: Blessed\ncategory: JavaScript libraries\n---\n\n### Screen\n\n```js\nscreen = blessed.screen({\n  smartCSR: true       // optimize for flickering\n  autoPadding: true    // ..\n})\n\nscreen.append(Element)\nscreen.destroy()\n\nscreen.width\nscreen.height\nscreen.title = 'My window title'\nscreen.key(['escape', 'q', 'C-c'], (ch, key) => { ... })\n```\n\n### Element\n\n```js\nbox = blessed.box({\n  style: { fg, bg, border.fg, scrollbar.bg, focus.bg, hover.bg },\n  border: { type: 'line'|'bg', bg, fg, bold, underline }\n  tags: true,  // parse {bold}tags{/bold}\n\n  top, left, width, height,\n  width: '100%',\n  height: '100%-1',\n  top: 'center'\n})\n```\n\n### Tags\n\n```\n{bold}\n{right} {center}\n{|}    left-right separator\n{#c0ff33-fg}{/}\n```\n\n```\nblessed.escape('...')\n```\n"
  },
  {
    "path": "bluebird.md",
    "content": "---\ntitle: bluebird.js\ncategory: JavaScript libraries\nweight: -1\nupdated: 2017-09-08\n---\n\n### Also see\n\nAlso see the [promise cheatsheet](promise.html) and [Bluebird.js API](https://github.com/petkaantonov/bluebird/blob/master/API.md) (github.com).\n\n### Example\n\n```js\npromise\n  .then(okFn, errFn)\n  .spread(okFn, errFn)        // *\n  .catch(errFn)\n  .catch(TypeError, errFn)    // *\n  .finally(fn)\n  .map(function (e) { ··· })  // *\n  .each(function (e) { ··· }) // *\n```\n\nThose marked with `*` are non-standard Promise API that only work with Bluebird promises.\n\n### Multiple return values\n\n```js\n.then(function () {\n  return [ 'abc', 'def' ]\n})\n.spread(function (abc, def) {\n  ···\n})\n```\n{: data-line=\"4\"}\n\nUse [Promise.spread](http://bluebirdjs.com/docs/api/promise.spread.html)\n\n### Multiple promises\n\n```js\nPromise.join(\n  getPictures(),\n  getMessages(),\n  getTweets(),\n  function (pics, msgs, tweets) {\n    return ···\n  }\n)\n```\n{: data-line=\"1\"}\n\nUse [Promise.join](http://bluebirdjs.com/docs/api/promise.join.html)\n\n### Multiple promises (array)\n\n- [Promise.all](http://bluebirdjs.com/docs/api/promise.all.html)([p]) - expect all to pass\n- [Promise.some](http://bluebirdjs.com/docs/api/promise.some.html)([p], count) - expect `count` to pass\n- [Promise.any](http://bluebirdjs.com/docs/api/promise.any.html)([p]) - same as `some([p], 1)`\n- [Promise.race](http://bluebirdjs.com/docs/api/promise.race.html)([p], count) - use `.any` instead\n- [Promise.map](http://bluebirdjs.com/docs/api/promise.map.html)([p], fn, options) - supports concurrency\n\n```js\nPromise.all([ promise1, promise2 ])\n  .then(results => {\n    results[0]\n    results[1]\n  })\n\n// succeeds if one succeeds first\nPromise.any(promises)\n  .then(results => {\n  })\n```\n{: data-line=\"1,8\"}\n\n```js\nPromise.map(urls, url => fetch(url))\n  .then(···)\n```\n{: data-line=\"1\"}\n\nUse [Promise.map](http://bluebirdjs.com/docs/api/promise.map.html) to \"promisify\" a list of values.\n\n### Object\n\n```js\nPromise.props({\n  photos: get('photos'),\n  posts: get('posts')\n})\n.then(res => {\n  res.photos\n  res.posts\n})\n```\n{: data-line=\"1\"}\n\nUse [Promise.props](http://bluebirdjs.com/docs/api/promise.props.html).\n\n### Chain of promises\n\n```js\nfunction getPhotos() {\n  return Promise.try(() => {\n    if (err) throw new Error(\"boo\")\n    return result\n  })\n}\n\ngetPhotos().then(···)\n```\n{: data-line=\"2\"}\n\nUse [Promise.try](http://bluebirdjs.com/docs/api/promise.try.html).\n\n### Node-style functions\n\n```js\nvar readFile = Promise.promisify(fs.readFile)\nvar fs = Promise.promisifyAll(require('fs'))\n```\n{: data-line=\"2\"}\n\nSee [Promisification](http://bluebirdjs.com/docs/api/promisification.html).\n\n### Promise-returning methods\n\n```js\nUser.login = Promise.method((email, password) => {\n  if (!valid)\n    throw new Error(\"Email not valid\")\n\n  return /* promise */\n})\n```\n{: data-line=\"1\"}\n\nSee [Promise.method](http://bluebirdjs.com/docs/api/promise.method.html).\n\n### Generators\n\n```js\nUser.login = Promise.coroutine(function* (email, password) {\n  let user = yield User.find({email: email}).fetch()\n  return user\n})\n```\n{: data-line=\"1\"}\n\nSee [Promise.coroutine](http://bluebirdjs.com/docs/api/promise.coroutine.html).\n\n## Reference\n\n<http://bluebirdjs.com/docs/api-reference.html>\n"
  },
  {
    "path": "bolt.md",
    "content": "---\ntitle: Bolt Quickstart\ncategory: Bolt\nupdated: 2018-12-25\nauthors:\n  - github: lucywyman\nkeywords:\n    - Puppet\n    - tasks\n    - modules\ndescription: |\n  A quick guide to getting started writing Bolt tasks\n---\n\n### Install Bolt\n\n```bash\n# On MacOS\nbrew cask install puppetlabs/puppet/puppet-bolt\n# On Windows\nchoco install puppet-bolt\n```\n\nBolt is available as a package for most platforms. See [installing bolt](https://puppet.com/docs/bolt/latest/bolt_installing.html)\n\n### Create a module with a task\n\n```bash\nmkdir -p ~/.puppetlabs/bolt/modules/mymodule/tasks\ncp myscript.sh ~/.puppetlabs/bolt/modules/mymodule/tasks/\n```\n\nTasks can be written in any language your targets can run. See [writing tasks](https://puppet.com/docs/bolt/latest/writing_tasks.html) for more details.\n\n### Run Bolt\n\n```bash\nbolt task run mymodule::myscript -n node1.example.com,node2.example.com --private-key ~/.ssh/id_rsa-private\n```\n\nSee `bolt task run --help` for more information and command line options.\n"
  },
  {
    "path": "bookshelf.md",
    "content": "---\ntitle: Bookshelf.js\ncategory: JavaScript libraries\n---\n\nModel\n-----\n\n### Model\n```js\nSummary = bookshelf.Model.extend({\n  tableName: 'summaries',\n  hasTimestamps: true,\n  hasTimestamps: ['created_at', 'updated_at'],\n})\n```\n\n### Associations\n\n```js\nSummary = bookshelf.Model.extend({\n  book () {\n    return this.belongsTo(Book)\n  },\n  author () {\n    return this.hasOne(Author)\n  }\n  // belongsToMany\n  // hasMany\n  // hasMany().through()\n})\n```\n\n### CRUD\n\n```js\nBook.create({ title: '..' }).save()\nnew Book({ title: '..' }).save()\n\nnew Book({ id: 1 }).fetch()\n\nBook.where({ id: 1 }).fetch()\nBook.where('favorite_color', 'red').fetch()\nBook.where('favorite_color', '<>', 'red').fetch()\nBook\n  .query((q) => q.orderBy('updated_at')\n```\n"
  },
  {
    "path": "bootstrap.md",
    "content": "---\ntitle: Bootstrap\nprism_languages: [scss, haml, html]\nweight: -1\ncategory: CSS\ndescription: |\n  .container .row .col-md-6, @screen-sm-min, .form-control, grids, .modal-content, tooltips, and other Bootstrap CSS examples.\n---\n\n### Screen sizes\n\n```\n         768          992                1200\n'     '     '     '     '     '     '     '     '\n<---------^------------^------------------^--------->\n     xs         sm              md             lg\n   (phone)   (tablet)        (laptop)       (desktop)\n```\n\nMin:\n\n```scss\n@media (min-width: @screen-sm-min) // >= 768px (small tablet)\n@media (min-width: @screen-md-min) // >= 992px (medium laptop)\n@media (min-width: @screen-lg-min) // >= 1200px (large desktop)\n```\n\nMax:\n\n```scss\n@media (max-width: @screen-xs-max) { // < 768px (xsmall phone)\n@media (max-width: @screen-sm-max) { // < 992px (small tablet)\n@media (max-width: @screen-md-max) { // < 1200px (medium laptop)\n```\n\n### Columns\n\n```scss\n.container\n.container-fluid\n```\n\n```scss\n.col-xs-1\n.col-sm-1\n.col-md-1\n.col-lg-1\n.col-md-offset-1\n```\n\nMixins:\n\n```scss\n@include make-xs-column(12);\n@include make-sm-column(6);\n@include make-md-column(3);\n@include make-lg-column(3);\n```\n\n```scss\n@include make-sm-column-offset(1);\n@include make-sm-column-push(1);\n@include make-sm-column-pull(1);\n```\n\n### Utilities\n\n```scss\n.pull-left\n.pull-right\n```\n\n```scss\n.hidden-{xs,sm,md,lg}\n.visible-{xs,sm,md,lg}\n.visible-{xs,sm,md,lg,print}-{block,inline,inline-block}\n```\n\n```scss\n.center-block  /* margin: auto */\n.clearfix\n.text-{center,left,right,justify,nowrap}\n.text-{lowercase,uppercase,capitalize}\n```\n\n```scss\n.show\n.hidden\n```\n\n### Modal\n\n```html\n<a data-toggle='modal' data-target='#new'>\n```\n\n```haml\n#new.modal.fade(role='dialog')\n  .modal-dialog // .modal-lg, .modal-sm\n    .modal-content\n      .modal-header\n        %h4.modal-title hello\n        %button.close{type: 'button', data: { dismiss: 'modal' }}\n          %span{'aria-hidden' => true}!= \"&times;\"\n          %span.sr-only Close\n      .modal-body\n        ...\n      .modal-footer\n        ...\n```\n\n### Modal via ajax (Rails)\n\n```haml\n%button.btn{data: { |\n  toggle: 'modal', |\n  target: '#chooseTheme', |\n  remote: '/path/to/remote'}\n  Change Theme\n```\n\n```haml\n.modal.fade#chooseTheme\n  .modal-dialog.modal-xl\n    .modal-content\n      .modal-header\n        %h4.modal-title Choose a theme\n\n      .modal-body\n        .spinner-panel.-lg\n          %i\n```\n\n### Tooltip\n\n```html\n<span\n  data-toggle='tooltip'\n  title='tooltip'\n  data-placement='left|top|bottom|right'>\n```\n\n```js\n$(function () {\n  $('[data-toogle~=\"tooltip\"]').tooltip()\n})\n```\n\n### Input groups\n\n```haml\n.input-group\n    input.form-control(type='text')\n    .input-group-addon years\n```\n"
  },
  {
    "path": "browser-sync.md",
    "content": "---\ntitle: Browsersync\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\n`npm i -g browser-sync`\n\n* [browsersync.io](https://browsersync.io)\n\n### Start a server\n\n```sh\nbrowser-sync start --server <path> --files='**/*.html, **/*.css'\n```\n\n### Options\n\n```sh\n  --port=N\n  --proxy=\"http://127.0.0.1:3000\"\n```\n"
  },
  {
    "path": "browserify.md",
    "content": "---\ntitle: Browserify\ncategory: JavaScript libraries\ntags: [Archived]\narchived: Browserify has not been in active development.\n---\n\n### About\n{: .-intro}\n\nBrowserify is a bundler for JavaScript.\n\n- <https://browserify.org/>\n\n### Usage\n\n    browserify input.js\n      -o output.js\n      -t coffeeify\n      -t [ coffeeify --extension coffee ]\n\n      -u react (--exclude: omit a file)\n      -x react (--external: reference in another bundle)\n      -i react (--ignore: stub a file)\n      -s Myapp (--standalone: generate a UMD bundle)\n      --debug\n\n### Programmatic usage\n\n    browserify = require('browserify')\n    browserify()\n      .add('main.js')\n      .bundle()\n      .transform(coffeeify)\n      .transform({extensions: '.coffee'}, coffeeify)\n      .pipe(process.stdout)\n\n    browserify({})\n\n### Tools\n\n  * watchify (recompiles on demand)\n  * beefy (http server)\n  * debowerify\n  * es6ify (es6 to es5)\n\nTransforms\n\n  * coffeeify\n  * ractify\n  * reactify\n  * brfs\n  * cssify\n  * https://github.com/substack/node-browserify/wiki/list-of-transforms\n\n"
  },
  {
    "path": "bulma.md",
    "content": "---\ntitle: Bulma\ncategory: CSS\nprism_languages: [css, html]\nweight: -1\nupdated: 2018-11-19\nauthors:\n  - github: benolot\ndescription: |\n  Basic guide on how to use Bulma, the lightweight css flexbox framework.\n---\n\n### Screen sizes\n\n```\n         768         1024                1216         1408\n'     '     '     '     '     '     '     '     '     '     '     '\n<---------^------------^------------------^-------------^------------->\n  mobile      tablet         desktop         widescreen      fullhd\n```\n\n### Columns\n\n```css\n.container\n```\nWrap as many `.column`'s' as you like in a `.columns` wrapper\n```html\n<div class=\"columns\">\n    <div class=\"column\"></div>\n    <div class=\"column\"></div>\n    <div class=\"column\"></div>\n    <div class=\"column\"></div>\n    <div class=\"column\"></div>\n</div>\n```\n\n### Modifiers\n\nThe following CSS classes affect the **colour**.\n\n```css\n.is-primary\n.is-link\n.is-info\n.is-success\n.is-warning\n.is-danger\n```\n\nThe following classes modify the **size**.\n```css\n.is-small\n.is-medium\n.is-large\n```\n\nThe following classes modify the **state**.\n```scss\n.is-outlined\n.is-loading\n```\n\n### Typography Helpers\n\nThe following classes modify the **font-size**\n\n| Class         | Font-size             |\n| ---           | ---                   |\n| `.is-size-1`  | 3rem                  |\n| `.is-size-2`  | 2.5rem                |\n| `.is-size-3`  | 2rem                  |\n| `.is-size-4`  | 1.5rem                |\n| `.is-size-5`  | 1.25rem               |\n| `.is-size-6`  | 1rem                  |\n| `.is-size-7`  | 0.75rem               |\n\nThe following classes **align** the text\n\n| Class                 | Alignment                             |\n| ---                   | ---                                   |\n| `.has-text-centered`  | Makes the text **centered**           |\n| `.has-text-justified` | Makes the text **justified**          |\n| `.has-text-left`.     | Makes the text align to the **left**  |\n| `.has-text-right`     | Makes the text align to the **right** |\n\nThe following classes **transform** the text\n\n| Class              | Transformation        |\n| ---                | ---                   |\n| `.is-capitalized`  | Transforms the **first character** of each word to **uppercase**   |\n| `.is-lowercase`    | Transforms **all** characters to **lowercase**                     |\n| `.is-uppercase`    | Transforms **all** characters to **uppercase**                     |\n\n### WYSIWYG Content\n\n```html\n<div class=\"content\">\n  <!-- start WYSIWYG contents -->\n  <h1>Heading</h1>\n  <p>Paragraph</p>\n\n  <ul>\n    <li>Item 1</li>\n    <li>Item 2</li>\n  </ul>\n  <!-- end WYSIWYG contents -->\n</div>\n```\n\nTo provide default stylings for commonly generated WYSIWYG contents, use the `.content` class.\n"
  },
  {
    "path": "bundler.md",
    "content": "---\ntitle: Bundler\ncategory: Ruby\n---\n\n### Commands\n\n    bundle                  # same as bundle install\n    bundle install          # installs gems\n    bundle install -j3      # faster (3 jobs)\n    bundle update           # update all gems\n    bundle update --source gemname  # update specified gem\n\n    bundle outdated         # show outdated gems\n    cd `bundle show rails`  # inspect a gem's dir\n\n    bundle gem              # new gem skeleton\n\n### Gems\n\n    gem 'hello'\n    gem 'hello', group: 'development'\n\n### Github support\n\n    gem 'hello', github: 'rstacruz/hello'\n    gem 'hello', github: 'rstacruz/hello', 'branch: master'\n\n### Grouping\n\n    group :development do\n      gem 'hello'\n    end\n\n### Deployment\n\n    $ bundle install --without=test,development --deployment\n\n### Local gem development\n\nIn your Gemfile, define a Git source and a branch:\n\n    gem 'hello', github: 'rstacruz/hello', branch: 'master'\n\nAnd then:\n\n    $ bundle config --global local.xxx ~/projects/xxx\n\n### Rake Gem tasks\n\n    # Rakefile\n    require 'bundler/gem_tasks'\n\nTerminal:\n\n    $ rake release\n    $ rake build\n"
  },
  {
    "path": "c_preprocessor.md",
    "content": "---\ntitle: C Preprocessor\ncategory: C-like\nintro: |\n  Quick reference for the [C macro preprocessor](https://en.m.wikipedia.org/wiki/C_preprocessor), which can be used independent of C/C++.\n---\n\n## Reference\n{: .-three-column}\n\n### Compiling\n\n```\n$ cpp -P file > outfile\n```\n\n### Includes\n\n```\n#include \"file\"\n```\n\n### Defines\n\n```\n#define FOO\n#define FOO \"hello\"\n\n#undef FOO\n```\n\n### If\n\n```\n#ifdef DEBUG\n  console.log('hi');\n#elif defined VERBOSE\n  ...\n#else\n  ...\n#endif\n```\n\n### Error\n\n```\n#if VERSION == 2.0\n  #error Unsupported\n  #warning Not really supported\n#endif\n```\n\n### Macro\n\n```\n#define DEG(x) ((x) * 57.29)\n```\n\n### Token concat\n\n```\n#define DST(name) name##_s name##_t\nDST(object);   #=> object_s object_t;\n```\n\n### Stringification\n\n```\n#define STR(name) #name\nchar * a = STR(object);   #=> char * a = \"object\";\n```\n\n### file and line\n\n```\n#define LOG(msg) console.log(__FILE__, __LINE__, msg)\n#=> console.log(\"file.txt\", 3, \"hey\")\n```\n"
  },
  {
    "path": "camp.md",
    "content": "---\ntitle: Camp\ncategory: JavaScript libraries\nupdated: 2017-09-21\nweight: -1\nintro: |\n  [Camp](https://github.com/espadrine/sc/) is a Node.js web server framework. This guide targets Camp v17.x.\n---\n\nGetting started\n---------------\n{: .-three-column}\n\n### Quick start\n{: .-prime}\n\n#### app.js\n{: .-file}\n\n```js\nconst Camp = require('camp')\nconst camp = Camp.start({ port: 1234 })\n```\n\n#### web/index.html\n{: .-file}\n\n```html\n<!doctype html>\n<body>Hello world!</body>\n```\n\nCamp serves files in `web/` by default.\n\n### Routes\n\n#### Handles `/search?q=rainbows`\n\n```js\ncamp.path('/search', (req, res) => {\n  const q = res.query.q\n  res.json({ results: ··· })\n})\n```\n{: data-line=\"2\"}\n\nAlso available: `camp.post`, `camp.get`.\n\n### Templates\n\n```js\nconst tpl = Camp.template('./templates/post.html')\n\ncamp.path('/blog/:post.html', (req, res) => {\n  res.template({\n    text: 'Hello world'\n  }, tpl)\n})\n```\n{: data-line=\"1,4\"}\n\nSee: [Templates](https://github.com/espadrine/sc/blob/master/doc/Readme.md#templates)\n\n### Not found\n\n```js\ncamp.notFound('/*.lol', (req, res) => {\n  res.file('/404.html')\n})\n```\n{: data-line=\"1\"}\n\nSee: [Fall through](https://github.com/espadrine/sc/blob/master/doc/Readme.md#fall-through)\n\n### Low level handler\n\n```js\ncamp.handle((req, res, next) => {\n  res.setHeader('X-Hello', 'world')\n  next()\n})\n```\n{: data-line=\"1\"}\n\nSee: [Handlers](https://github.com/espadrine/sc/blob/master/doc/Readme.md#handlers)\n\nTemplates\n---------\n\n### Basic templates\n\n```js\nconst tpl = Camp.template('/templates/post.html')\n\ncamp.path('/blog/:post.html', (req, res) => {\n  res.template({\n    text: 'Hello world'\n  }, tpl)\n})\n```\n{: data-line=\"1,4,5,6\"}\n\n### Implicit templates\n\n```js\ncamp.path('blog.html')\n```\n\nUses `blog.html` as a template.\n\nSee: [Templates](https://github.com/espadrine/sc/blob/master/doc/Readme.md#templates)\n\nAdvanced features\n-----------------\n\n### Web sockets\n\n```js\ncamp.ws('/path', (socket) => { ··· })\n```\n\n```js\ncamp.wsChannels[path]\n```\n\n```js\ncamp.wsBroadcast('/path', (req, res) => {\n})\n```\n\nSorry I don't completely understand this yet, but check it out in their docs.\n\nSee: [WebSocket](https://github.com/espadrine/sc/blob/master/doc/Readme.md#websocket)\n"
  },
  {
    "path": "canvas.md",
    "content": "---\ntitle: Canvas\ncategory: JavaScript\n---\n\n### Getting the context\n\n```js\nvar canvas = document.getElementById('c')\nvar c = canvas.getContext('2d')\n```\n\n### Basic drawing\n\n```js\n// x = 10, y = 20, width = 200, height = 100\nc.fillStyle = '#ff0000'\nc.strokeStyle = '#ff00ff'\n```\n\n```js\nc.lineWidth = 5\nc.lineCap = 'round'\n```\n\n```js\nc.fillRect(10, 20, 200, 100)\n```\n\n```js\nc.stroke()\nc.fill()\n```\n\n### Saving and restoring\n\n```js\nc.save()\n```\n\n```js\nc.restore()\n```\n\nSaves: `strokeStyle` `fillStyle` `globalAlpha` `lineWidth` `lineCap` `lineJoin` `miterLimit` `shadowOffsetX` `shadowOffsetY` `shadowBlur` `shadowColor`\n`globalCompositeOperation`, Transformations (`translate` `rotate` `scale` `transform` `setTransform`), Clipping path\n\n\n### Animation\n\n```js\nonframe: function() {\n  c.clearRect(0, 0, w, h)\n}\n```\n\n### Transformations\n\n```js\nc.translate(0, 0)\nc.rotate(Math.PI*2/5)\nc.scale(1.0, 1.0)\n```\n\nTo rotate along origin:\n\n```js\nc.translate(ox, oy)\nc.rotate(theta)\nc.translate(-ox, -oy)\n```\n\nTo scale along origin:\n\n```js\nc.translate(-ox*x, -oy*y)\nc.scale(x, y)\nc.translate(ox/x, oy/y)\n```\n\nSee [MDN: Transformations][xform].\n\n### Image drawing\n\n```js\nc.drawImage(image, dx, dy, [dw, dh]);\n/* `image` can be HTML Image/Canvas/Video */\n```\n\nSee [MDN: Images][images].\n\n### Colors, styles shadows\n\n```js\nc.strokeStyle = '#ff00ff';\nc.fillStyle = '#ff00ff';\n```\n\n```js\nc.shadowOffsetX = 0;\nc.shadowOffsetY = 0;\nc.shadowOffsetBlur = 3.0;\nc.shadowColor = 'rgba(0,0,0,0.2)';\n```\n\nSee [MDN: Styles][styles]\n\n### Gradients\n\n```js\ngr = c.createLinearGradient(x0,y0,x1,y1)\ngr = c.createRadialGradient(x0,y0,r0,x1,y1,r1)\npat = c.createPattern(image, 'repeat-x')\n```\n\n```js\nc.fillStyle = gr\n```\n\n### Drawing\n\n```js\nc.beginPath()\nc.moveTo(x,y)\nc.lineTo(x,y)\nc.quadraticCurveTo(cpx,cpy,x,y)\nc.bezierCurveTo(cp1x,cp1y,cp2x,cp2y)\nc.arcTo(...)\nc.arc(...)\nc.closePath()\n```\n\n### More resources\n\n  * [Canvas Cheatsheet PDF][pdf]\n\n[pdf]: http://www.nihilogic.dk/labs/canvas_sheet/HTML5_Canvas_Cheat_Sheet.pdf\n[xform]: https://developer.mozilla.org/en-US/docs/Canvas_tutorial/Transformations\n[styles]: https://developer.mozilla.org/en-US/docs/Canvas_tutorial/Applying_styles_and_colors\n[images]: https://developer.mozilla.org/en-US/docs/Canvas_tutorial/Using_images\n"
  },
  {
    "path": "capybara.md",
    "content": "---\ntitle: Capybara\ncategory: Ruby libraries\nweight: -5\nupdated: 2020-06-13\ntags: [Featurable]\n---\n\n### Navigating\n\n    visit articles_path\n\n### Clicking links and buttons\n\n```ruby\nclick_on 'Link Text'\nclick_button\nclick_link\n```\n\n### Interacting with forms\n\n```ruby\nattach_file 'Image', '/path/to/image.jpg'\nfill_in 'First Name', with: 'John'\n```\n\n```ruby\ncheck 'A checkbox'\nuncheck 'A checkbox'\n```\n\n```ruby\nchoose 'A radio button'\n```\n\n```ruby\nselect 'Option', from: 'Select box'\nunselect\n```\n\n### Limiting\n\n```ruby\nwithin '.classname' do\n  click '...'\nend\n```\n\n```ruby\nwithin_fieldset :id do\n  ...\nend\n```\n\n## Querying\n\n### Predicates\n\n```ruby\npage.has_css?('.button')\nexpect(page).to have_css('.button')\npage.should have_css('.button')\n```\n{: .-setup}\n\n| Positive                          | Negative               |\n| ---                               | ---                    |\n| `has_content?`                    | `has_no_content?`      |\n| ---                               | ---                    |\n| `has_css?` _(selector)_           | `has_no_css?`          |\n| ---                               | ---                    |\n| `has_xpath?` _(path)_             | `has_no_xpath?`        |\n| ---                               | ---                    |\n| `has_link?` _(selector)_          | `has_no_link?`         |\n| ---                               | ---                    |\n| `has_button?` _(selector)_        | `has_no_button?`       |\n| ---                               | ---                    |\n| `has_field?` _(selector)_         | `has_no_field?`        |\n| ---                               | ---                    |\n| `has_checked_field?` _(selector)_ | `has_unchecked_field?` |\n| ---                               | ---                    |\n| `has_table?` _(selector)_         | `has_no_table?`        |\n| ---                               | ---                    |\n| `has_select?` _(selector)_        | `has_no_select?`       |\n{: .-headers.-left-align}\n\nIn Rspec, these also map to matchers like `page.should have_content`.\n\n### Selectors\n\n```ruby\nexpect(page).to have_button('Save')\n```\n\n```ruby\nexpect(page).to have_button('#submit')\n```\n\n```ruby\nexpect(page).to have_button('//[@id=\"submit\"]')\n```\n\nThe `selector` arguments can be text, CSS selector, or XPath expression.\n\n### RSpec assertions\n\n```ruby\npage.has_button?('Save')\n```\n\n```ruby\nexpect(page).to have_no_button('Save')\n```\n\nIn RSpec, you can use `page.should` assertions.\n\n### About negatives\n\n```ruby\nexpect(page).to have_no_button('Save')\n```\n\n```ruby\nexpect(page).not_to have_button('Save')\n```\n\nThe two above statements are functionally equivalent.\n\n## RSpec\n\n### Matchers\n\n```ruby\nexpect(page).to \\\n```\n{: .-setup}\n\n```ruby\n  have_current_path(expected_path)\n  have_selector '.blank-state'\n  have_selector 'h1#hola', text: 'Welcome'\n  have_button 'Save'\n  have_checked_field '#field'\n  have_unchecked_field\n  have_css '.class'\n  have_field '#field'\n  have_table '#table'\n  have_xpath '//div'\n```\n\n```ruby\n  have_link 'Logout', href: logout_path\n```\n\n```ruby\n  have_select 'Language',\n    selected: 'German'\n    options: ['Engish', 'German']\n    with_options: ['Engish', 'German'] # partial match\n```\n\n```ruby\n  have_text 'Hello',\n    type: :visible # or :all\n    # alias: have_content\n```\n\n### Common options\n\nAll matchers have these options:\n{: .-setup}\n\n```ruby\n  text: 'welcome'\n  text: /Hello/\n  visible: true\n  count: 4\n  between: 2..5\n  minimum: 2\n  maximum: 5\n  wait: 10\n```\n\n## Other features\n\n### Finding\n\n```ruby\nfind(selector)\nfind_button(selector)\nfind_by_id(id)\nfind_field(selector)\nfind_link(selector)\nlocate\n```\n\n### Scoping\n\n```ruby\nwithin '#delivery' do\n  fill_in 'Street', with: 'Hello'\nend\n```\n\n```ruby\nwithin :xpath, '//article'\nwithin_fieldset\nwithin_table\nwithin_frame\nscope_to\n```\n\n```ruby\nfind('#x').fill_in('Street', with: 'Hello')\n# same as within\n```\n\n### Scripting\n\n```ruby\nexecute_script('$(\"input\").trigger(\"change\")')\nevaluate_script('window.ga')\n```\n\nExecutes JavaScript.\n\n### Debugging\n\n```ruby\nsave_and_open_page\n```\n\nOpens the webpage in your browser.\n\n### Page\n\n```ruby\npage\n  .all('h3')\n  .body\n  .html\n  .source\n  .current_host\n  .current_path\n  .current_url\n```\n\n### AJAX\n\n```ruby\nusing_wait_time 10 do\n  ...\nend\n```\n\n### Misc\n\n    drag\n    field_labeled\n\n### Page object\n\n```ruby\npage.status_code == 200\npage.response_headers\n```\n\nSee: <https://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Session>\n\n### Poltergeist\n\n```ruby\nCapybara.register_driver :poltergeist do |app|\n  Capybara::Poltergeist::Driver.new(app, :inspector => true)\nend\nCapybara.javascript_driver = :poltergeist\n```\n\nUse [poltergeist](https://github.com/teampoltergeist/poltergeist) to integrate PhantomJS.\n\n### Blacklist\n\n```ruby\nconfig.before :each, :js do\n  page.driver.browser.url_blacklist = [\n    'fonts.googleapis.com',\n    'use.typekit.net',\n    'f.vimeocdn.com',\n    'player.vimeo.com',\n    'www.googletagmanager.com'\n  ].flat_map { |domain| [ \"http://#{domain}\", \"https://#{domain}\" ] }\nend\n```\n\n### Debugging\n\nEnable `inspector: true` and then:\n{: .-setup}\n\n```ruby\npage.driver.debug\n```\n\nTo pause execution for a while:\n\n```ruby\npage.driver.pause\n```\n\n## Selenium\n\n### Accepting confirm() and alert()\n\n```ruby\naccept_alert { ... }\ndismiss_confirm { ... }\naccept_prompt(with: 'hi') { ... }\n```\n\nAlternatively:\n\n```ruby\npage.driver.browser.switch_to.alert.accept\n```\n\n### Updating session\n\n```ruby\npage.set_rack_session(foo: 'bar')\n```\n\n## See also\n{: .-one-column}\n\n- <https://rubydoc.info/github/jnicklas/capybara/Capybara/RSpecMatchers>\n- <https://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers>\n"
  },
  {
    "path": "cask-index.md",
    "content": "---\ntitle: Caskroom index\ntags: [Archived]\narchived: This sheet may have outdated information.\n---\n\n\n\n#### A\n\n- [a-better-finder-attributes](http://www.publicspace.net/ABetterFinderAttributes/)\n- [a-better-finder-rename](http://www.publicspace.net/ABetterFinderRename/)\n- [a-slower-speed-of-light](http://gamelab.mit.edu/games/a-slower-speed-of-light/)\n- [abgx360](http://abgx360.net/)\n- [abscissa](http://rbruehl.macbay.de/Abscissa)\n- [accessmenubarapps](http://www.ortisoft.de/accessmenubarapps/)\n- [acorn](http://flyingmeat.com/acorn/)\n- [actions-server](http://getactionsapp.com)\n- [actiontastic](http://actiontastic.com)\n- [activity-audit](https://www.dssw.co.uk/activityaudit)\n- [actotracker](http://onflapp.wordpress.com/actotracker)\n- [actprinter](http://houdah.com/ACTPrinter/)\n- [actual-odbc-pack](http://www.actualtech.com/products.php)\n- [adapter](http://www.macroplant.com/adapter/)\n- [adium](https://www.adium.im/)\n- [adobe-air](https://get.adobe.com/air/)\n- [adobe-arh](http://help.adobe.com/en_US/air/redist/WS485a42d56cd19641-70d979a8124ef20a34b-8000.html)\n- [adobe-creative-cloud](https://creative.adobe.com/products/creative-cloud)\n- [adobe-digital-editions](http://www.adobe.com/pt/products/digital-editions.html)\n- [adobe-dng-converter](http://www.adobe.com/support/downloads/product.jsp?product=106&platform=Macintosh)\n- [adobe-photoshop-lightroom](http://www.adobe.com/products/photoshop-lightroom.html)\n- [adobe-reader](http://www.adobe.com/products/reader.html)\n- [adventure](http://www.lobotomo.com/products/Adventure/index.html)\n- [aegisub](http://www.aegisub.org/)\n- [aerofs](https://www.aerofs.com/)\n- [affinity-designer](https://affinity.serif.com/)\n- [air-connect](http://www.avatron.com/get-air-connect/)\n- [air-video-server-hd](http://www.inmethod.com/airvideohd)\n- [air-video-server](http://www.inmethod.com/air-video/)\n- [airdisplay](http://avatron.com/apps/air-display/)\n- [airfoil](http://www.rogueamoeba.com/airfoil/mac/)\n- [airmail-amt](http://airmailapp.com/amt/)\n- [airparrot](http://www.airsquirrels.com/airparrot/)\n- [airserver](http://www.airserver.com)\n- [airstream](http://airstream.io/download/)\n- [alarm-clock](http://wayback.archive.org/web/20130123192255/http://www.robbiehanson.com/alarmclock/index.html)\n- [alfred](http://www.alfredapp.com/)\n- [alib1](http://presstube.com/blog/2011/alib1/)\n- [alinof-timer](http://www.alinofsoftware.ch/en/products/products-timer/index.html)\n- [aliwangwang](http://wangwang.taobao.com)\n- [all-the-gifs](https://github.com/orta/GIFs)\n- [all2mp3](http://www.tresrrr.com/All2MP3/ENGLISH.html)\n- [amadeus-pro](http://www.hairersoft.com/pro.html)\n- [amazon-cloud-drive](https://www.amazon.com/clouddrive)\n- [amazon-music](https://www.amazon.com/gp/feature.html/ref=dm_mo_cpw_fb_lm?docId=1001067901)\n- [amethyst](http://ianyh.com/amethyst)\n- [ampps](http://www.ampps.com)\n- [android-file-transfer](http://www.android.com/filetransfer/)\n- [android-studio-bundle](http://developer.android.com/sdk/installing/studio.html)\n- [android-studio](https://developer.android.com/sdk/installing/studio.html)\n- [angry-ip-scanner](http://angryip.org)\n- [anki](http://ankisrs.net/)\n- [anonym](http://www.hanynet.com/anonym/index.html)\n- [antetype](http://antetype.com)\n- [antirsi](http://sabi.net/nriley/software/#antirsi)\n- [anvil](http://anvilformac.com/)\n- [anxiety](http://www.anxietyapp.com/)\n- [anypass](http://icyblaze.com/anypass)\n- [ap-grapher](https://www.macupdate.com/app/mac/11859/ap-grapher)\n- [apache-directory-studio](http://directory.apache.org/studio/)\n- [apikitchen](http://apikitchen.com/)\n- [apns-pusher](https://github.com/blommegard/APNS-Pusher)\n- [appcleaner](http://www.freemacsoft.net/appcleaner/)\n- [appcode](http://www.jetbrains.com/objc/)\n- [appdelete](http://www.reggieashworth.com/appdelete)\n- [appfresh](http://metaquark.de/appfresh/mac)\n- [appium](http://appium.io)\n- [appmenuboy](https://code.google.com/p/appmenuboy/)\n- [apptivate](http://www.apptivateapp.com)\n- [apptrap](http://onnati.net/apptrap)\n- [appzapper](http://www.appzapper.com/)\n- [aptanastudio](http://www.aptana.com/)\n- [aquamacs](http://aquamacs.org/)\n- [aquaterm](http://aquaterm.sourceforge.net/)\n- [araxis-merge](http://www.araxis.com/merge)\n- [archiver](http://archiverapp.com/)\n- [arduino-galileo](https://communities.intel.com/docs/DOC-22226)\n- [arduino](http://arduino.cc/)\n- [aria-maestosa](http://ariamaestosa.sourceforge.net)\n- [armitage](http://www.fastandeasyhacking.com/)\n- [armory](https://bitcoinarmory.com/)\n- [arora](https://code.google.com/p/arora/)\n- [arq](http://www.haystacksoftware.com/arq/)\n- [arranger](http://bucketomac.de/arranger/arranger/)\n- [arrsync](http://arrsync.sourceforge.net)\n- [aseprite](http://www.aseprite.org)\n- [asepsis](http://asepsis.binaryage.com/)\n- [asteroid](http://www.asteroidapp.com/)\n- [atext](http://www.trankynam.com/atext/)\n- [atlantis](http://www.riverdark.net/atlantis/)\n- [atmonitor](http://www.atpurpose.com/atMonitor/)\n- [atom](http://atom.io)\n- [atraci](https://github.com/Atraci/Atraci)\n- [au-lab](http://www.apple.com/itunes/mastered-for-itunes/)\n- [audacity](http://audacity.sourceforge.net/)\n- [audio-editor](http://www.macsome.com/audio-editor-mac/index.html)\n- [audio-hijack-pro](http://www.rogueamoeba.com/audiohijackpro/)\n- [audio-mate](http://audiomateapp.com/)\n- [audiobookbinder](http://bluezbox.com/audiobookbinder.html)\n- [audioscrobbler](https://github.com/mxcl/Audioscrobbler.app)\n- [audioslicer](http://audioslicer.sourceforge.net)\n- [aurora](http://www.oneperiodic.com/products/aurora/)\n- [authbuddy](https://www.dssw.co.uk/authbuddy)\n- [authoxy](http://www.hrsoftworks.net)\n- [authy-bluetooth](https://www.authy.com)\n- [autodmg](https://github.com/MagerValp/AutoDMG)\n- [automatic](http://codingcurious.com/automatic/)\n- [aviator](https://www.whitehatsec.com/aviator/)\n- [avidemux](http://www.avidemux.org/)\n- [avogadro](http://avogadro.openmolecules.net/)\n- [awareness](http://iamfutureproof.com/tools/awareness/)\n- [ax88179](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=131;71;112&PLine=71)\n- [ax88772](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=86;71;101&PLine=71)\n- [axure-rp-pro](http://www.axure.com/)\n\n#### B\n\n- [b2designer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)\n- [back-in-time](http://www.tri-edre.fr/english/backintime.html)\n- [backblaze-downloader](http://www.backblaze.com/)\n- [backblaze](https://www.backblaze.com/)\n- [backtobed](http://backtobed.dadiugames.dk/)\n- [backuploupe](http://www.soma-zone.com/BackupLoupe/)\n- [bahamut](https://github.com/sdegutis/bahamut)\n- [baiducloud](http://pan.baidu.com)\n- [baiduinput](http://wuxian.baidu.com/input/mac.html)\n- [baidumusic](http://music.baidu.com/)\n- [balsamiq-mockups](http://balsamiq.com/)\n- [bankid](http://www.bankid.com/)\n- [banshee](http://banshee.fm)\n- [bar-magnet](http://qata.cc/Site/Bar_Magnet.html)\n- [baretorrent](http://baretorrent.org)\n- [bartender](http://www.macbartender.com/)\n- [base](http://menial.co.uk/base/)\n- [basecamp](http://www.garmin.com/en-US/shop/downloads/basecamp)\n- [basex](http://basex.org/home/)\n- [basictex](http://www.tug.org/mactex/morepackages.html)\n- [bassjump](http://www.twelvesouth.com/product/bassjump-2-for-macbook)\n- [bassshapes](http://yellquietly.com/bass-shapes/)\n- [bathyscaphe](http://bathyscaphe.sourceforge.jp/)\n- [battery-guardian](https://www.dssw.co.uk/batteryguardian)\n- [battery-report](https://www.dssw.co.uk/batteryreport)\n- [battery-time-remaining](http://yap.nu/battery-time-remaining/)\n- [baygenie](http://www.baygenie.com/)\n- [bbc-iplayer-downloads](http://www.bbc.co.uk/iplayer/install)\n- [bbedit](http://www.barebones.com/products/bbedit/)\n- [beacon-scanner](https://github.com/mlwelles/BeaconScanner/)\n- [beamer](http://beamer-app.com)\n- [bean](http://www.bean-osx.com)\n- [beardedspice](http://www.beardedspice.com)\n- [beatport-pro](http://pro.beatport.com/)\n- [bee](http://neat.io/bee/)\n- [bettertouchtool](http://blog.boastr.net/)\n- [betterzip](http://macitbetter.com)\n- [betterzipql](http://macitbetter.com/BetterZip-Quick-Look-Generator/)\n- [bibdesk](http://bibdesk.sourceforge.net/)\n- [big-mean-folder-machine](http://www.publicspace.net/BigMeanFolderMachine/)\n- [bill](http://billtheapp.com/)\n- [bino](http://bino3d.org)\n- [binreader](http://www.binreader.com/)\n- [bit-slicer](https://github.com/zorgiepoo/bit-slicer/)\n- [bitcasa](https://www.bitcasa.com)\n- [bitcoin-core](https://bitcoin.org/)\n- [bitlord](http://www.bitlord.com)\n- [bitmessage](https://bitmessage.org/)\n- [bittorrent-sync](http://www.bittorrent.com/sync)\n- [black-ink](http://www.red-sweater.com/blackink/)\n- [black-light](http://michelf.ca/projects/black-light)\n- [blender](http://www.blender.org/)\n- [blink1control](http://blink1.thingm.com/)\n- [blu-ray-player](http://www.macblurayplayer.com/)\n- [bluegriffon](http://bluegriffon.org)\n- [blueharvest](http://zeroonetwenty.com/blueharvest/)\n- [bluej](http://www.bluej.org)\n- [bob](https://github.com/casperstorm/Bob)\n- [bodega](http://appbodega.com/)\n- [bonjour-browser](http://www.tildesoft.com/)\n- [boom](http://www.globaldelight.com/boom/)\n- [boot2docker](https://github.com/boot2docker/osx-installer)\n- [bootchamp](http://www.kainjow.com/)\n- [bootxchanger](http://namedfork.net/bootxchanger)\n- [bowtie](http://bowtieapp.com/)\n- [box-sync](https://sites.box.com/sync4/)\n- [boxcryptor-classic](https://www.boxcryptor.com/en/boxcryptor-classic)\n- [boxer](http://boxerapp.com/)\n- [brackets](http://brackets.io)\n- [brain-workshop](http://brainworkshop.sourceforge.net/)\n- [breach](http://breach.cc)\n- [breakaway](http://mutablecode.com/apps/breakaway.html)\n- [brightness](http://www.bergdesign.com/brightness/)\n- [brogue](https://sites.google.com/site/broguegame/)\n- [broomstick](http://www.zibity.com/broomstick)\n- [brow](http://www.timschroeder.net/brow/)\n- [browserstacklocal](http://www.browserstack.com/)\n- [brushviewql](http://brushviewer.sourceforge.net/)\n- [brytonbridge](http://www.brytonsport.com/help/start)\n- [buddi](http://buddi.digitalcave.ca/index.jsp)\n- [burn](http://burn-osx.sourceforge.net/)\n- [butter](http://harukasan.jp)\n- [bzflag](http://bzflag.org/)\n\n#### C\n\n- [c3](http://www.downloadc3.com/)\n- [caffeine](http://lightheadsw.com/caffeine/)\n- [cakebrew](http://www.cakebrew.com)\n- [calcservice](http://www.devontechnologies.com/products/freeware.html#c1111)\n- [calibre](http://calibre-ebook.com/)\n- [calibre2opds](http://calibre2opds.com/)\n- [callnote](http://www.kandasoft.com/home/kanda-apps/skype-call-recorder.html)\n- [camed](http://sourceforge.net/apps/mediawiki/camprocessor/index.php?title=Main_Page)\n- [camerabag](http://nevercenter.com/camerabag/desktop/)\n- [camino](http://caminobrowser.org/)\n- [camranger](http://www.camranger.com/downloads/#fbox_5594)\n- [camtasia](http://www.techsmith.com/camtasia.html)\n- [camtwist](http://camtwiststudio.com/)\n- [candybar](http://www.panic.com/blog/candybar-mountain-lion-and-beyond)\n- [capo](http://supermegaultragroovy.com/products/Capo/)\n- [capsee](http://www.threemagination.com/capsee/)\n- [carbon-copy-cloner](http://bombich.com/)\n- [carlson-minot](http://www.carlson-minot.com)\n- [cartao-de-cidadao](http://www.cartaodecidadao.pt/)\n- [catch](http://www.giorgiocalderolla.com/index.html)\n- [catchmouse](http://ftnew.com/catchmouse.html)\n- [cathode](http://www.secretgeometry.com/apps/cathode)\n- [ccleaner](http://www.piriform.com/ccleaner)\n- [ccmenu](http://ccmenu.sourceforge.net/)\n- [cd-to](https://github.com/jbtule/cdto)\n- [cdock](http://sourceforge.net/projects/cdock)\n- [celestia](http://sourceforge.net/projects/celestia)\n- [cert-quicklook](https://code.google.com/p/cert-quicklook/)\n- [cfxr](http://thirdcog.eu/apps/cfxr)\n- [chainsaw](http://logging.apache.org/chainsaw/)\n- [chameleon-ssd-optimizer](http://chameleon.alessandroboschini.it/)\n- [changes-meter](http://intuiware.com/apps/changes-meter)\n- [changes](http://bitbq.com/changes/)\n- [charles](http://www.charlesproxy.com/)\n- [chatology](http://flexibits.com/chatology)\n- [cheatsheet](http://www.cheatsheetapp.com/CheatSheet/)\n- [cheetah3d](http://www.cheetah3d.com)\n- [chefdk](http://www.getchef.com/downloads/chef-dk/mac/)\n- [chemdoodle](http://www.chemdoodle.com)\n- [chicken](http://sourceforge.net/projects/chicken/)\n- [chirp](http://chirp.danplanet.com/)\n- [chocolat](http://chocolatapp.com/)\n- [choosy](http://www.choosyosx.com/)\n- [chromatic](https://mrgeckosmedia.com/applications/info/Chromatic)\n- [chrome-remote-desktop-host](https://chrome.google.com/remotedesktop)\n- [chromecast](http://www.google.ca/intl/en/chrome/devices/chromecast/)\n- [chromium](http://www.freesmug.org/chromium)\n- [chronicle](http://chronicleapp.com/)\n- [chronoagent](http://www.econtechnologies.com)\n- [chronomate](http://chronomateapp.com/)\n- [chronosync](http://www.econtechnologies.com)\n- [chunkulus](http://presstube.com/blog/2011/chunkulus/)\n- [cinch](http://www.irradiatedsoftware.com/cinch/)\n- [citrix-receiver](http://www.citrix.com/receiver)\n- [clamxav](http://www.clamxav.com/)\n- [clarify](http://www.clarify-it.com/)\n- [cleanmymac](http://macpaw.com/cleanmymac)\n- [clementine](http://www.clementine-player.org/)\n- [clion-eap](http://www.jetbrains.com/clion/)\n- [clipmenu](http://www.clipmenu.com/)\n- [clix](http://rixstep.com/4/0/clix/index.shtml)\n- [cloak](https://www.getcloak.com)\n- [clock](http://zachwaugh.me/clock/)\n- [clonk](http://www.clonk.de/cr.php)\n- [cloud](http://getcloudapp.com/)\n- [cloudera-hive-odbc](http://www.cloudera.com)\n- [cloudfoundry-cli](https://github.com/cloudfoundry/cli)\n- [cloudpull](http://www.goldenhillsoftware.com/)\n- [cloudup](https://cloudup.com/download)\n- [cloudytabs](https://github.com/josh-/CloudyTabs/)\n- [cn3d](http://www.ncbi.nlm.nih.gov/Structure/CN3D/cn3d.shtml)\n- [coccinellida](http://coccinellida.sourceforge.net/)\n- [cockatrice](http://www.woogerworks.com/)\n- [cocktail](http://maintain.se/cocktail)\n- [cocoadialog](http://mstratman.github.io/cocoadialog/)\n- [cocoapacketanalyzer](http://www.tastycocoabytes.com/cpa/)\n- [cocoarestclient](http://mmattozzi.github.io/cocoa-rest-client/)\n- [cocoaspell](http://cocoaspell.leuski.net/)\n- [cocoasplit](http://krylon.rsdio.com/zakk/cocoasplit/)\n- [coconutbattery](http://www.coconut-flavour.com/coconutbattery/)\n- [coda](https://panic.com/Coda/)\n- [codebox](https://www.codebox.io)\n- [codebug](http://www.codebugapp.com/)\n- [codekit](http://incident57.com/codekit/)\n- [codelite](http://codelite.org)\n- [cog](http://cogx.org)\n- [colloquy](http://colloquy.info/)\n- [color-oracle](http://colororacle.org/)\n- [color-picker-pro](https://github.com/oscardelben/Color-Picker-Pro)\n- [colorpicker-antetype](http://www.antetype.com/blog/2013/12/updated-antetype-os-x-color-picker-1-3-1/)\n- [colorpicker-developer](http://download.panic.com/picker/)\n- [colorpicker-hex](http://wafflesoftware.net/hexpicker/)\n- [colorpicker-propicker](http://www.irradiated.net/?page=pro-picker)\n- [colorpicker-rcwebcolorpicker](http://www.rubicode.com/Software/RCWebColorPicker)\n- [colorpicker-skalacolor](http://bjango.com/mac/skalacolor/)\n- [colorpicker](http://www.northernspysoftware.com/software/colorpicker)\n- [colors](http://mattpatenaude.com/)\n- [colorschemer-studio](http://www.colorschemer.com)\n- [comicbooklover](http://www.bitcartel.com/comicbooklover/)\n- [comicbookloversync](http://www.bitcartel.com/comicbooklover)\n- [comictagger](http://code.google.com/p/comictagger/)\n- [commandq](http://clickontyler.com/commandq/)\n- [concentrate](http://www.getconcentrating.com/)\n- [connected-desktop](http://www.filetransporter.com/)\n- [connector](http://mediaware.sk/connector)\n- [consul](http://www.consul.io/)\n- [contexts](http://contextsformac.com/)\n- [controllermate](http://www.orderedbytes.com/controllermate/)\n- [controlplane](http://www.controlplaneapp.com/)\n- [coolterm](http://freeware.the-meiers.org/)\n- [cooviewer](http://www.geocities.jp/coo_ona/viewer.html)\n- [copy](https://www.copy.com/)\n- [coqide](http://coq.inria.fr/)\n- [cord](http://cord.sourceforge.net/)\n- [cornerstone](http://www.zennaware.com/cornerstone/index.php)\n- [corsixth](http://th.corsix.org)\n- [coteditor](http://coteditor.github.io/)\n- [couchbase-server-community](http://www.couchbase.com/)\n- [couchbase-server-enterprise](http://www.couchbase.com/)\n- [craftstudio](http://craftstud.io)\n- [crashlytics](http://crashlytics.com)\n- [crashplan](http://www.crashplan.com/)\n- [crosspack-avr](http://www.obdev.at/products/crosspack/)\n- [crushftp](https://www.crushftp.com)\n- [crypt](http://voluntary.net/crypt/)\n- [cryptol](http://cryptol.net/)\n- [ctivo](https://github.com/dscottbuch/cTiVo)\n- [cuda-z](http://cuda-z.sourceforge.net)\n- [cuppa](http://www.nathanatos.com/software)\n- [cups-pdf](http://www.cups-pdf.de)\n- [cura](http://daid.github.com/Cura/)\n- [curb](http://mrrsoftware.com/curb)\n- [curse-client](http://www.curse.com/client)\n- [cursorcerer](http://doomlaser.com/cursorcerer-hide-your-cursor-at-will/)\n- [cutesdr](http://sourceforge.net/projects/cutesdr)\n- [cx](http://www.cx.com)\n- [cyberduck](http://cyberduck.io/)\n- [cycling74-max](http://cycling74.com)\n\n#### D\n\n- [daemon-tools-lite](http://www.daemon-tools.cc/products/dtMacLite)\n- [daisydisk](http://www.daisydiskapp.com)\n- [darktable](http://www.darktable.org/)\n- [darteditor](https://www.dartlang.org/tools/editor/)\n- [dash](http://kapeli.com/dash)\n- [dashlane](https://www.dashlane.com/)\n- [datagraph](http://www.visualdatatools.com/DataGraph/)\n- [dataurlmaker](https://github.com/sveinbjornt/Data-URL-Toolkit)\n- [day-o](http://www.shauninman.com/archive/2011/10/20/day_o_mac_menu_bar_clock)\n- [dbeaver](http://dbeaver.jkiss.org/)\n- [dealalert](http://dealalertapp.com/)\n- [deathtodsstore](http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/)\n- [debookee](http://www.iwaxx.com/debookee/)\n- [debt-quencher](http://nothirst.com/debtquencher/)\n- [decitime](http://www.tinbert.com/DeciTimeMac/)\n- [deeper](http://www.titanium.free.fr/downloaddeeper.php)\n- [deeq](http://deeqapp.com)\n- [default-folder-x](http://www.stclairsoft.com/DefaultFolderX)\n- [delibar](http://www.delibarapp.com/)\n- [delicious-library](http://delicious-monster.com/)\n- [delivery-status](http://junecloud.com/software/mac/delivery-status.html)\n- [deltawalker](http://www.deltopia.com/compare-merge-sync/macosx/)\n- [deluge](http://deluge-torrent.org/)\n- [deskfun](http://www.furrysoft.de/?page=deskfun)\n- [desktop-log](http://www.nightproductions.net/desklog.html)\n- [desmume](http://www.desmume.org)\n- [detune](http://headlightsoft.com/detune/)\n- [devonthink-pro-office](http://www.devontechnologies.com/products/devonthink/devonthink-pro-office.html)\n- [devonthink-pro](http://www.devontechnologies.com/products/devonthink/devonthink-pro.html)\n- [dewdrop](http://dewdrop.dangelov.com/)\n- [dfontsplitter](http://peter.upfold.org.uk/projects/dfontsplitter)\n- [dia](http://dia-installer.de/)\n- [diashapes](http://dia-installer.de/)\n- [dictunifier](http://code.google.com/p/mac-dictionary-kit/)\n- [diffmerge](http://www.sourcegear.com/diffmerge)\n- [disk-drill](http://www.cleverfiles.com/)\n- [disk-inventory-x](http://www.derlien.com/)\n- [diskaid](http://www.digidna.net/diskaid)\n- [diskmaker-x](http://diskmakerx.com/)\n- [diskwave](http://diskwave.barthe.ph/)\n- [dispcalgui](http://dispcalgui.hoech.net)\n- [displaperture](http://manytricks.com/displaperture)\n- [displaylink](http://www.displaylink.com)\n- [diumoo](http://diumoo.net/)\n- [divvy](http://mizage.com/divvy/)\n- [djay](http://algoriddim.com/djay-mac)\n- [djv](http://djv.sourceforge.net)\n- [djview](http://djvu.sourceforge.net/)\n- [dmm](http://www.dmm.com/dc/book/)\n- [dnscrypt](http://opendns.github.io/dnscrypt-osx-client/)\n- [docear](http://docear.org)\n- [dockmod](http://spyresoft.com/dockmod/)\n- [dogecoin](http://dogecoin.com/)\n- [dolphin](http://www.dolphin-emu.org/)\n- [dosbox](http://www.dosbox.com)\n- [doubanradio](http://douban.fm)\n- [double-commander](http://doublecmd.sourceforge.net/)\n- [doublecommand](http://doublecommand.sourceforge.net)\n- [doubletwist](http://www.doubletwist.com/)\n- [doxie](http://www.getdoxie.com/)\n- [doxygen](http://www.stack.nl/~dimitri/doxygen/index.html)\n- [dradio](http://dradio.me)\n- [dragondisk](http://www.dragondisk.com/)\n- [dragthing](http://www.dragthing.com)\n- [drobo-dashboard](http://www.drobo.com)\n- [dropbox-encore](http://www.joyofmacs.com/software/dropboxencore/)\n- [dropbox](https://www.dropbox.com/)\n- [dropin](http://excitedatom.com/dropin/)\n- [dropletmanager](https://github.com/deivuh/DODropletManager-OSX)\n- [droplr](https://www.droplr.com/)\n- [dropzone](https://aptonic.com)\n- [dsp-radio](http://dl2sdr.homepage.t-online.de/)\n- [dterm](http://decimus.net/DTerm)\n- [dukto](https://code.google.com/p/dukto/)\n- [dump-truck](http://www.goldenfrog.com/dumptruck)\n- [dungeon-crawl-stone-soup-console](http://crawl.develz.org)\n- [dungeon-crawl-stone-soup-tiles](http://crawl.develz.org)\n- [dupeguru-me](http://www.hardcoded.net/dupeguru_me/)\n- [dupeguru-pe](http://www.hardcoded.net/dupeguru_pe/)\n- [dupeguru](http://www.hardcoded.net/dupeguru/)\n- [duplicate-annihilator](http://brattoo.com/propaganda/)\n- [duplicati](http://www.duplicati.com/)\n- [dupscanub](http://www5.wind.ne.jp/miko/mac_soft/dup_scan/index.html)\n- [dvdstyler](http://dvdstyler.org)\n- [dwarf-fortress](http://www.bay12games.com/dwarves/)\n\n#### E\n\n- [eagle](http://www.cadsoftusa.com/)\n- [eaglefiler](http://c-command.com/eaglefiler/)\n- [easyfind](http://www.devontechnologies.com/download/products.html)\n- [easysimbl](https://github.com/norio-nomura/EasySIMBL/)\n- [easyvpn](http://www.squashedsoftware.com/products-easyvpn.php)\n- [eclipse-ide](http://eclipse.org/)\n- [eclipse-java](http://eclipse.org/)\n- [eclipse-jee](http://eclipse.org/)\n- [eclipse-platform](http://eclipse.org)\n- [ecoute](http://pixiapps.com/ecouteosx/)\n- [eid-mw](https://code.google.com/p/eid-mw/)\n- [ejector](http://www.jeb.com.fr/en/ejector.shtml)\n- [electric-sheep](http://www.electricsheep.org)\n- [electrum-ltc](http://electrum-ltc.org)\n- [electrum](http://electrum.org/)\n- [elm-platform](http://www.elm-lang.org)\n- [eloquent](https://launchpad.net/eloquent)\n- [elyse](http://silkwoodsoftware.com/)\n- [emacs](http://emacsformacosx.com/)\n- [ember](http://realmacsoftware.com/ember)\n- [emin-webpquicklook](https://github.com/emin/WebPQuickLook)\n- [enfusegui](http://software.bergmark.com/enfusegui/Main.html)\n- [enjoyable](http://yukkurigames.com/enjoyable/)\n- [entropy](http://www.eigenlogik.com/entropy/)\n- [epic](http://www.epicbrowser.com)\n- [epub-to-pdf](https://code.google.com/p/epub-2-pdf)\n- [epubquicklook](http://people.ict.usc.edu/~leuski/programming/epub-quickview.php)\n- [escritorio-movistar](http://www.movistar.es/particulares/servicios/descargaaplicaciones)\n- [espionage](https://www.espionageapp.com/)\n- [espresso](http://macrabbit.com/espresso/)\n- [etrecheck](http://www.etresoft.com/etrecheck)\n- [evasi0n](http://evasi0n.com)\n- [eve](http://www.hotkey-eve.com/)\n- [evernote](https://evernote.com/)\n- [everweb](http://www.everwebapp.com/)\n- [evom](http://thelittleappfactory.com/evom/)\n- [exhaust](https://mrgeckosmedia.com/applications/info/Exhaust)\n- [exist-db](http://exist-db.org/)\n- [expandrive](http://www.expandrive.com/expandrive)\n- [eye-fi](http://support.eye.fi/downloads)\n- [eyetv](http://www.elgato.com/)\n\n#### F\n\n- [facebook-ios-sdk](https://developers.facebook.com/docs/ios)\n- [factor](http://factorcode.org/)\n- [fairmount](https://github.com/BoxOfSnoo/Fairmount)\n- [fake](http://fakeapp.com/)\n- [fakethunder](http://martianz.cn/fakethunder/)\n- [fantastical](http://flexibits.com/fantastical)\n- [fastest-free-youtube-downloader](https://www.fastestvideodownloader.com/)\n- [fastscripts](http://www.red-sweater.com/fastscripts/)\n- [faux-pas](http://fauxpasapp.com)\n- [fdt](http://fdt.powerflasher.com/)\n- [feedbinnotifier](http://kmikael.github.io/FeedbinNotifier)\n- [feeder](http://reinventedsoftware.com/feeder/)\n- [feeds](http://www.feedsapp.com/)\n- [fender-amp-drivers](https://fuse.fender.com/)\n- [fender-fuse](https://fuse.fender.com/)\n- [fenix](http://fenixwebserver.com/)\n- [fetch](http://fetchsoftworks.com/)\n- [ffmpegx](http://www.ffmpegx.com/download.html)\n- [figtree](http://tree.bio.ed.ac.uk/software/figtree/)\n- [fiji](http://fiji.sc)\n- [file-juicer](http://echoone.com/filejuicer/)\n- [filebot](http://www.filebot.net/)\n- [filedrop](http://www.filedropme.com/)\n- [fileshuttle](http://fileshuttle.io/)\n- [filezilla](https://filezilla-project.org/)\n- [find-any-file](http://apps.tempel.org/FindAnyFile/)\n- [findings](http://findingsapp.com)\n- [firefox](https://www.mozilla.org/en-US/firefox/)\n- [firewall-builder](http://www.fwbuilder.org)\n- [fission](http://rogueamoeba.com/fission/)\n- [fitbit-connect](http://www.fitbit.com/)\n- [fivedetails-flow](http://fivedetails.com)\n- [flame](http://husk.org/apps/flame/)\n- [flash-decompiler-trillix](http://www.flash-decompiler.com/mac.html)\n- [flash-player-debugger](https://www.adobe.com/support/flashplayer/downloads.html)\n- [flash-player](https://www.adobe.com/support/flashplayer/downloads.html)\n- [flash](https://www.adobe.com/products/flashplayer/distribution3.html)\n- [flavours](http://flavours.interacto.net/)\n- [flexiglass](http://nulana.com/flexiglass/)\n- [flickr-uploadr](http://www.flickr.com/tools/)\n- [flightgear](http://www.flightgear.org/)\n- [flip4mac](http://www.telestream.net/flip4mac/)\n- [fliqlo](http://fliqlo.com/)\n- [flow](http://www.getflow.com/)\n- [flowdock](https://www.flowdock.com/)\n- [fluid](http://fluidapp.com/)\n- [fluke](https://code.google.com/p/flukeformac/)\n- [flux](http://justgetflux.com)\n- [fm-fw-installer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)\n- [focus](http://www.heyfocus.com/)\n- [focuswriter](http://gottcode.org/focuswriter/)\n- [folding-text](http://www.foldingtext.com)\n- [foldit](http://fold.it)\n- [folx](http://mac.eltima.com/de/download-manager.html)\n- [fontexplorer-x-pro](http://www.fontexplorerx.com/)\n- [fontprep](http://fontprep.com)\n- [forklift](http://www.binarynights.com/)\n- [fotomagico](http://www.boinx.com/fotomagico/)\n- [fotowall](http://www.enricoros.com/opensource/fotowall/)\n- [fourk-video-downloader](http://www.4kdownload.com/products/product-videodownloader)\n- [fourk-youtube-to-mp3](http://www.4kdownload.com/products/product-youtubetomp3)\n- [fourpeaks](http://nucleobytes.com/index.php/4peaks)\n- [foxmail](http://www.foxmail.com)\n- [fpc](http://www.freepascal.org/)\n- [framer-studio](http://framerjs.com/)\n- [free-ruler](http://www.pascal.com/software/freeruler/)\n- [freecad](http://sourceforge.net/projects/free-cad/)\n- [freecol](http://freecol.org)\n- [freedv](http://freedv.org/tiki-index.php)\n- [freefilesync](http://freefilesync.sourceforge.net/)\n- [freemind](freemind.sourceforge.net)\n- [freezer](https://mrgeckosmedia.com/applications/info/Freezer)\n- [fritzing](http://fritzing.org/)\n- [frizzix](http://mac.frizzix.de/)\n- [frostwire](http://www.frostwire.com)\n- [fs-uae](http://fs-uae.net/)\n- [fseventer](http://www.fernlightning.com/doku.php?id=software:fseventer:start)\n- [fugu](http://rsug.itd.umich.edu/software/fugu/)\n- [functionflip](http://kevingessner.com/software/functionflip/)\n- [fuze](https://www.fuzemeeting.com)\n\n#### G\n\n- [gambit-c](http://gambitscheme.org/wiki/index.php/Main_Page)\n- [gamesalad](http://gamesalad.com)\n- [ganttproject](http://www.ganttproject.biz)\n- [garagebuy](http://www.iwascoding.com/GarageBuy)\n- [garagesale](http://www.iwascoding.com/GarageSale/index.html)\n- [gargoyle](https://code.google.com/p/garglk/)\n- [garmin-ant-agent](http://www8.garmin.com/support/download_details.jsp?id=4417)\n- [garmin-communicator](http://www8.garmin.com/support/download_details.jsp?id=3739)\n- [garmin-express](http://www.garmin.com/express)\n- [garmin-training-center](http://www.garmin.com/garmin/cms/intosports/training_center)\n- [gas-mask](http://www.clockwise.ee/gasmask/)\n- [gawker](http://gawker.sourceforge.net/Gawker.html)\n- [gdal-framework](http://www.kyngchaos.com/software/frameworks)\n- [geekbench](http://www.primatelabs.com/geekbench/)\n- [geektool](http://projects.tynsoe.org/en/geektool/)\n- [genymotion](http://www.genymotion.com/)\n- [gephi](http://gephi.org/)\n- [geppetto](http://puppetlabs.github.io/geppetto/)\n- [gfxcardstatus](http://gfx.io/)\n- [ghc](http://ghcformacosx.github.io/)\n- [ghostlab](http://vanamco.com/ghostlab/)\n- [giffun](http://www.stone.com/GIFfun/)\n- [gifrocket](http://www.gifrocket.com/)\n- [gimp-lisanet](http://gimp.lisanet.de)\n- [gimp](http://www.gimp.org)\n- [gingr](http://harvest.readthedocs.org/en/latest/content/gingr.html)\n- [gisto](http://www.gistoapp.com/)\n- [git-annex](http://git-annex.branchable.com/)\n- [gitbook](https://www.gitbook.io/)\n- [gitbox](http://gitboxapp.com/)\n- [github](http://mac.github.com)\n- [gitifier](http://psionides.github.io/Gitifier/)\n- [gitter](https://gitter.im/)\n- [gitx-l](http://gitx.laullon.com/)\n- [gitx-rowanj](http://rowanj.github.io/gitx/)\n- [gitx](http://gitx.frim.nl/)\n- [gity](http://gityapp.com/)\n- [glcplayer](http://www.glc-player.net)\n- [glimmerblocker](http://glimmerblocker.org)\n- [glo](http://globible.com/gloformac/)\n- [globalsync](http://www.usglobalsat.com/)\n- [gmail-notifier](https://github.com/jashephe/Gmail-Notifier)\n- [gmail-notifr](http://ashchan.com/projects/gmail-notifr)\n- [gnucash](http://www.gnucash.org)\n- [go-agent](http://www.go.cd)\n- [go-server](http://www.go.cd/)\n- [goagentx](http://goagentx.com/)\n- [gog-downloader](http://www.gog.com/downloader)\n- [golly](http://golly.sourceforge.net/)\n- [google-adwords-editor](http://www.google.com/intl/en_US/adwordseditor/)\n- [google-chrome](https://www.google.com/chrome/)\n- [google-drive](https://drive.google.com/)\n- [google-earth-web-plugin](http://www.google.com/intl/en/earth/explore/products/plugin.html)\n- [google-earth](https://www.google.com/earth/)\n- [google-hangouts](https://www.google.com/tools/dlpage/hangoutplugin)\n- [google-japanese-ime](https://www.google.co.jp/ime/)\n- [google-nik-collection](https://www.google.com/nikcollection/)\n- [google-notifier](http://toolbar.google.com/gmail-helper/notifier_mac.html)\n- [google-plus-auto-backup](http://picasa.google.com/)\n- [google-refine](http://openrefine.org/)\n- [google-web-designer](https://www.google.com/webdesigner/)\n- [googleappenginelauncher](https://developers.google.com/appengine/)\n- [gopanda](http://pandanet-igs.com/communities/gopanda2)\n- [gpgtools](https://gpgtools.org/index.html)\n- [gpower](http://www.gpower.hhu.de/)\n- [gqrx](http://gqrx.dk/)\n- [grabbox](http://grabbox.devsoft.no/)\n- [grafx2](http://pulkomandy.tk/projects/GrafX2)\n- [grandperspective](http://grandperspectiv.sourceforge.net/)\n- [grandtotal](http://www.mediaatelier.com/GrandTotal3/)\n- [graphsketcher](https://github.com/graphsketcher/GraphSketcher)\n- [graphviz](http://www.graphviz.org/)\n- [gravit](http://gravit.io/)\n- [gridwars](http://gridwars.marune.de/)\n- [grooveshark](http://www.grooveshark.com)\n- [groovesquid](http://groovesquid.com/)\n- [growl-fork](https://www.macupdate.com/app/mac/41038/growl-fork)\n- [growler](http://wafflesoftware.net/growlergn/)\n- [growlnotify](http://growl.info/downloads)\n- [growlvoice](http://www.growlvoice.com/)\n- [guitar-tuner](http://www.gieson.com/Library/projects/utilities/tuner/)\n- [gulp](https://github.com/sindresorhus/gulp-app)\n- [gurps-character-sheet](http://gurpscharactersheet.com)\n- [gyazo](https://gyazo.com/)\n\n#### H\n\n- [hall](https://hall.com/download-hall/hall-for-mac)\n- [handbrake](http://handbrake.fr/)\n- [handbrakebatch](http://www.osomac.com/apps/osx/handbrake-batch/)\n- [handbrakecli](http://handbrake.fr)\n- [hands-off](http://www.metakine.com/products/handsoff/)\n- [happygrep](https://github.com/happypeter/happygrep)\n- [haroopad](http://pad.haroopress.com/)\n- [harvest](http://www.getharvest.com/mac)\n- [hashcat](https://hashcat.net/hashcat/)\n- [haskell-platform](http://www.haskell.org/platform/)\n- [hazel](http://www.noodlesoft.com/hazel.php)\n- [hbuilder](http://dcloud.io/)\n- [hear](http://www.prosofteng.com/products/hear.php)\n- [heart](http://presstube.com/blog/2011/heart/)\n- [hedgewars](http://hedgewars.org)\n- [hermes](http://hermesapp.org/)\n- [heroku-toolbelt](https://toolbelt.heroku.com/)\n- [hex-fiend](http://ridiculousfish.com/hexfiend/)\n- [hex](http://hextcg.com/)\n- [hexchat](http://hexchat.github.io)\n- [hexels](http://hexraystudios.com/hexels/)\n- [hipchat](https://www.hipchat.com/)\n- [hippoconnect](http://hipporemote.com/)\n- [hiss](http://collect3.com.au/hiss/)\n- [historyhound](http://www.stclairsoft.com/HistoryHound/)\n- [hive](http://www.hivewallet.com)\n- [hockeyapp](http://hockeyapp.net/releases/mac/)\n- [homestream](http://www.sony.co.uk/hub/1237485339460)\n- [honer](https://github.com/puffnfresh/Honer.app)\n- [hopper-disassembler](http://www.hopperapp.com/)\n- [hoppergdbserver](http://www.hopperapp.com/HopperGDBServer/index.html)\n- [horndis](http://joshuawise.com/horndis)\n- [hostbuddy](http://clickontyler.com)\n- [hoster](http://www.redwinder.com/macapp/hoster/)\n- [hosts](http://permanentmarkers.nl/software.html)\n- [houdahgeo](http://houdah.com/houdahGeo/)\n- [houdahspot](http://www.houdah.com/houdahSpot/)\n- [hpuload](http://www.fernlightning.com/doku.php?id=software:hpuload:start)\n- [hr](http://www.hrmacapp.com/)\n- [hsang](http://lushi.163.com/)\n- [httpscoop](http://www.tuffcode.com)\n- [hubic](https://hubic.com)\n- [hugin](http://hugin.sourceforge.net/)\n- [hush](http://coffitivity.com/hush/)\n- [hype](http://tumult.com/hype/)\n- [hyperdock](http://hyperdock.bahoom.com/)\n- [hyperswitch](http://bahoom.com/hyperswitch)\n- [hyro](http://jawerty.github.io/Hyro/)\n\n#### I\n\n- [iannix](http://www.iannix.org/)\n- [ibabel](http://www.macinchem.org/ibabel/ibabel3.php)\n- [ibackup](http://www.grapefruit.ch/iBackup)\n- [ibank](http://www.iggsoftware.com/ibank)\n- [ibettercharge](http://softorino.com/ibettercharge/)\n- [iboostup](http://www.iboostup.com)\n- [ibrowse](http://www.ibrowseapp.com/)\n- [icefloor](http://www.hanynet.com/icefloor/)\n- [ichm](https://code.google.com/p/ichm/)\n- [icolors](http://www.fadingred.com/icolors/)\n- [icompta](http://www.icompta-app.com/)\n- [iconping](http://antirez.com/iconping/)\n- [icursor](https://www.macupdate.com/app/mac/17059/icursor)\n- [id3-editor](http://www.pa-software.com/id3editor/)\n- [identify](http://identify2.arrmihardies.com/)\n- [ideskcal](http://www.hashbangind.com)\n- [idocument-plus](http://www.icyblaze.com/idocument/)\n- [idris](http://www.idris-lang.org)\n- [iexplorer](http://www.macroplant.com/)\n- [ifilex](http://www.osxbytes.com/page3/index.html)\n- [ifunbox](http://www.i-funbox.com/)\n- [igetter](http://www.igetter.net/)\n- [iloc](http://derailer.org/iloc)\n- [imagealpha](http://pngmini.com/)\n- [imagemin](https://github.com/kevva/imagemin-app)\n- [imageoptim](http://imageoptim.com/)\n- [img2icns](http://www.img2icnsapp.com/)\n- [imitone](http://imitone.com/)\n- [inboard](http://inboardapp.com/beta)\n- [inc](https://sendtoinc.com/apps/)\n- [indigo](http://www.perceptiveautomation.com/indigo/index.html)\n- [induction](http://inductionapp.com/)\n- [infinit](https://infinit.io/)\n- [inform](http://inform7.com/)\n- [injection](http://injectionforxcode.com/)\n- [inkscape](http://inkscape.org)\n- [inky](http://inky.com)\n- [insertpic](http://www.getinsertpic.com/)\n- [instabridge](http://instabridge.com/)\n- [instacast](http://vemedio.com/products/instacast-mac)\n- [instead](http://instead.syscall.ru/)\n- [insync](https://insynchq.com/)\n- [integrity](http://peacockmedia.co.uk/integrity/)\n- [intel-haxm](https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager)\n- [intel-power-gadget](https://software.intel.com/en-us/articles/intel-power-gadget-20)\n- [intel-xdk](http://xdk-software.intel.com/)\n- [intellij-idea-ce](https://www.jetbrains.com/idea/index.html)\n- [intellij-idea](https://www.jetbrains.com/idea/index.html)\n- [intermission](http://rogueamoeba.com/intermission/)\n- [invisiblix](http://www.read-write.fr/invisiblix/)\n- [invisionsync](http://invisionapp.com/)\n- [invisorql](http://www.pozdeev.com/invisor/)\n- [iograph](http://iographica.com/)\n- [ionu](https://ionu.com)\n- [ioquake3](http://ioquake3.org/)\n- [ios7-screensaver](http://bodysoulspirit.weebly.com/ios-7-screensaver-for-mac-os-x-by-bodysoulspirit.html)\n- [ipalette](http://ipalette.info/)\n- [ipaql](http://ipaql.com/)\n- [iphone-configuration-utility](http://support.apple.com/kb/DL1465)\n- [iphoney](https://www.marketcircle.com/iphoney)\n- [ireadfast](http://www.gengis.net/prodotti/iReadFast_Mac/en/index.php)\n- [irip](http://thelittleappfactory.com/irip/)\n- [isabelle](http://www.cl.cam.ac.uk/research/hvg/Isabelle/)\n- [isolator](http://willmore.eu/software/isolator)\n- [istat-menus](http://bjango.com/mac/istatmenus/)\n- [istat-server](http://bjango.com/mac/istatserver/)\n- [isteg](http://www.hanynet.com/isteg/)\n- [istopmotion](http://www.boinx.com/istopmotion/mac/)\n- [istumbler](http://istumbler.net/)\n- [iswiff](http://echoone.com/iswiff/)\n- [iterm2](http://www.iterm2.com/)\n- [itools](http://www.itools.cn/download.php?v=mac_en)\n- [itsycal](http://www.mowglii.com/itsycal/)\n- [itunes-volume-control](https://github.com/alberti42/iTunes-Volume-Control)\n- [itunesscrobbler](http://www.easyclasspage.de/lastfm/seite-19.html)\n- [itweax](http://www.itweax.net/)\n- [iupx](http://iupx.sourceforge.net)\n- [ivolume](http://www.mani.de/en/ivolume/)\n- [izip](http://www.izip.com)\n\n#### J\n\n- [jabber-video](https://www.ciscojabbervideo.com/)\n- [jabref](http://jabref.sourceforge.net/)\n- [jaikoz](http://jthink.net/jaikoz)\n- [jameica](http://www.willuhn.de/products/jameica/)\n- [jaspersoft-studio](http://community.jaspersoft.com/project/jaspersoft-studio)\n- [java](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)\n- [javafx-scene-builder](http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-info-2157684.html)\n- [jawbone-updater](http://jawbone.com/)\n- [jbidwatcher](http://www.jbidwatcher.com)\n- [jd-gui](http://jd.benow.ca/)\n- [jdiskreport](http://www.jgoodies.com/freeware/jdiskreport/)\n- [jdownloader](http://jdownloader.org/)\n- [jedit](http://www.jedit.org)\n- [jenkins-menu](http://qvacua.com)\n- [jetphoto-studio](http://www.jetphotosoft.com/web/home/)\n- [jewelrybox](http://jewelrybox.unfiniti.com/)\n- [jiggler](http://www.sticksoftware.com/software/Jiggler.html)\n- [jing](http://www.techsmith.com/jing.html)\n- [jitouch](http://www.jitouch.com)\n- [jitsi](https://jitsi.org/)\n- [joinme](https://join.me/)\n- [josm](http://josm.openstreetmap.de)\n- [jsonlook](https://github.com/rjregenold/jsonlook)\n- [jubler](http://www.jubler.org/)\n- [julia](http://julialang.org/)\n- [juliastudio](http://forio.com/labs/julia-studio/)\n- [jumpcut](http://jumpcut.sourceforge.net/)\n- [jumpshare](https://jumpshare.com/)\n- [justlooking](http://chipmunkninja.com/JustLooking)\n- [jxplorer](http://jxplorer.org)\n\n#### K\n\n- [kaleidoscope](http://www.kaleidoscopeapp.com/)\n- [kamakiri](https://mochidev.com/apps/kamakiri)\n- [karabiner](https://pqrs.org/osx/karabiner/)\n- [katana](http://katana.witiz.com/)\n- [kdiff3](http://kdiff3.sourceforge.net/)\n- [keepassx](http://www.keepassx.org)\n- [keka](http://kekaosx.com/)\n- [kensington-trackball-works](http://www.kensington.com/)\n- [kext-drop](http://www.groths.org/software/kextdrop/)\n- [kext-utility](http://cvad-mac.narod.ru/index/0-4)\n- [kext-wizard](http://www.insanelymac.com/forum/topic/253395-kext-wizard-easy-to-use-kext-installer-and-more/)\n- [key-codes](http://manytricks.com/keycodes/)\n- [keyboard-cleaner](http://jan.prima.de/~jan/plok/archives/48-Keyboard-Cleaner.html)\n- [keyboard-maestro](http://www.keyboardmaestro.com/)\n- [keyboardcleantool](http://bettertouchtool.net)\n- [keycastr](https://github.com/sdeken/keycastr)\n- [keycue](http://www.ergonis.com/products/keycue/)\n- [keyfinder](http://www.ibrahimshaath.co.uk/keyfinder/)\n- [keymo](http://manytricks.com/keymo)\n- [keystore-explorer](http://keystore-explorer.sourceforge.net/index.php)\n- [kid3](http://kid3.sourceforge.net/)\n- [kindle-previewer](http://www.amazon.com/gp/feature.html/?docId=1000765261)\n- [kindle](http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000464931)\n- [kindlegen](http://www.amazon.com/gp/feature.html?docId=1000765211)\n- [kismac](http://kismac-ng.org/)\n- [kitematic](https://kitematic.com/)\n- [kivy](http://kivy.org)\n- [kiwi](http://kiwi-app.net/)\n- [kkbox](http://www.kkbox.com/)\n- [klayout](http://www.klayout.de/index.html)\n- [knock](http://knocktounlock.com)\n- [knox](https://agilebits.com/knox)\n- [kobito](http://kobito.qiita.com/)\n- [kobo](http://www.kobo.com/)\n- [kod](https://github.com/rsms/kod/)\n- [komanda](https://github.com/mephux/komanda)\n- [komodo-edit](http://komodoide.com/komodo-edit)\n- [komodo-ide](http://komodoide.com/)\n- [kompozer](http://www.kompozer.net/)\n- [ksdiff](http://www.kaleidoscopeapp.com/ksdiff2)\n- [kuaipan](http://www.kuaipan.cn/d/mac)\n- [kugoumusic](http://www.kugou.com)\n- [kvirc](http://www.kvirc.net)\n- [kylo](http://kylo.tv)\n\n#### L\n\n- [lastfm](http://www.lastfm.com)\n- [lastpass-universal](https://lastpass.com/)\n- [latexian](http://tacosw.com/latexian/)\n- [latexit](http://www.chachatelier.fr/latexit)\n- [launchbar](http://www.obdev.at/products/launchbar/)\n- [launchcontrol](http://www.soma-zone.com/LaunchControl/)\n- [launchrocket](https://github.com/jimbojsb/launchrocket)\n- [launchy](http://www.launchy.net)\n- [layervault](http://layervault.com/)\n- [lazarus](http://lazarus.freepascal.org/)\n- [league-of-legends](http://signup.leagueoflegends.com/)\n- [leap-motion](https://www.leapmotion.com/setup)\n- [less](http://incident57.com/less/)\n- [levelator](http://www.conversationsnetwork.org/levelator/)\n- [librecad](http://librecad.org/)\n- [libreoffice](https://www.libreoffice.org/)\n- [licecap](http://www.cockos.com/licecap/)\n- [licensed](http://amarsagoo.info/licensed)\n- [lightpaper](http://clockworkengine.com/lightpaper-mac/)\n- [lighttable](http://www.lighttable.com/)\n- [lilypond](http://lilypond.org)\n- [limechat](http://limechat.net/mac/)\n- [lincastor](http://onflapp.wordpress.com/lincastor/)\n- [linein](http://www.rogueamoeba.com/freebies/)\n- [lingon-x](http://www.peterborgapps.com/lingon/)\n- [lingrradar](http://radar.lingr.com/)\n- [linkinus](http://conceited.net/products/linkinus)\n- [linkliar](https://github.com/halo/LinkLiar)\n- [linphone](http://www.linphone.org/)\n- [liquifile](http://www.liquifile.info/)\n- [litecoin](https://litecoin.org/)\n- [liteicon](http://www.freemacsoft.net/liteicon/)\n- [liteide](https://github.com/visualfc/liteide)\n- [little-snitch](http://www.obdev.at/products/littlesnitch/index.html)\n- [littleipsum](http://littleipsum.com)\n- [livereload](http://www.livereload.com)\n- [livestation](http://www.livestation.com)\n- [loadmytracks](http://www.cluetrust.com/loadmytracks.html)\n- [locko](http://www.binarynights.com/)\n- [logic](http://www.saleae.com/)\n- [logisim](http://ozark.hendrix.edu/~burch/logisim/)\n- [logitech-control-center](http://www.logitech.com)\n- [logitech-gaming-software](http://www.logitech.com/en-us/support/gaming-software?section=downloads&bit=&osid=36)\n- [logitech-harmony](http://www.logitech.com/en-us/support/universal-remotes)\n- [logitech-myharmony](https://setup.myharmony.com/)\n- [logitech-unifying](http://www.logitech.com/en-us/promotions/6072)\n- [logmein-client](https://secure.logmein.com/products/pro/learnmore/desktopapp.aspx)\n- [logmein-hamachi](http://vpn.net)\n- [logoist](http://www.syniumsoftware.com/logoist/)\n- [loom](http://loom.com/)\n- [love](http://love2d.org)\n- [lpk25-editor](http://www.akaipro.com/index.php/product/lpk25)\n- [ltspice](http://www.linear.com/designtools/software/)\n- [lucidor](http://lucidor.org)\n- [luminance-hdr](http://qtpfsgui.sourceforge.net/)\n- [lyn](http://www.lynapp.com/)\n- [lynxlet](http://habilis.net/lynxlet/)\n- [lyrics-master](http://www.kenichimaehashi.com/lyricsmaster/)\n- [lyx](http://www.lyx.org)\n\n#### M\n\n- [mac-informer](http://macdownload.informer.com/landing/)\n- [mac-linux-usb-loader](http://sevenbits.github.io/Mac-Linux-USB-Loader/)\n- [macaw](http://macaw.co/)\n- [macbreakz](http://www.publicspace.net/MacBreakZ/)\n- [macdown](http://macdown.uranusjr.com/)\n- [macdrops](http://interfacelift.com/apps/macdrops/v1)\n- [macfusion](http://macfusionapp.org/)\n- [macgdbp](https://www.bluestatic.org/software/macgdbp/)\n- [machacha](http://www.julifos.com/soft/machacha/index.html)\n- [machg](http://jasonfharris.com/machg/)\n- [macintosh-explorer](http://www.ragesw.com/products/explorer.html)\n- [macmoney](http://www.devon.riceball.net/display.php?file=m01)\n- [macpar-deluxe](http://gp.home.xs4all.nl/Site/MacPAR_deLuxe.html)\n- [macpass](http://mstarke.github.io/MacPass/)\n- [macpaw-gemini](http://macpaw.com/gemini)\n- [macpilot](http://www.koingosw.com/products/macpilot.php)\n- [macports](http://www.macports.org)\n- [macs-fan-control](http://www.crystalidea.com/macs-fan-control)\n- [macterm](http://www.macterm.net/)\n- [mactex](http://www.tug.org/mactex/)\n- [mactracker](http://mactracker.ca/)\n- [mactubes](http://macapps.sakura.ne.jp/mactubes/index_en.html)\n- [macupdate-desktop](https://www.macupdate.com/desktop)\n- [macvim](http://code.google.com/p/macvim/)\n- [macwinzipper](http://tidajapan.com/macwinzipper)\n- [maczip4win](http://ynomura.com/home/?page_id=116)\n- [madruby](http://www.wingsforpigs.com/MadRuby/MadRuby.html)\n- [magic-launch](http://www.oneperiodic.com/products/magiclaunch/)\n- [magican](http://www.magicansoft.com/)\n- [mail-plugin-manager](http://www.chungwasoft.com/mailpluginmanager/)\n- [mailbox](http://www.mailboxapp.com/)\n- [mailfollowup](http://www.cs.unc.edu/~welch/MailFollowup/)\n- [mailmate](http://freron.com/)\n- [mailplane](http://mailplaneapp.com)\n- [majic](http://erikhinterbichler.com/apps/majic/)\n- [makehuman](http://www.makehuman.org/)\n- [makemkv](http://www.makemkv.com/)\n- [makerware](http://www.makerbot.com/makerware/)\n- [mame](http://mameosx.sourceforge.net/)\n- [mamp](http://www.mamp.info/en/index.html)\n- [manager](http://manager.io)\n- [manico](http://manico.im/)\n- [mapture](http://anatoo.jp/mapture/)\n- [maratis](http://www.maratis3d.org/)\n- [marble](http://www.marble.kde.org)\n- [marked](http://marked2app.com)\n- [marsedit](http://www.red-sweater.com/marsedit/)\n- [master-key](http://macinmind.com/?area=app&app=masterkey&pg=info)\n- [matplotlib](http://www.kyngchaos.com/software/python)\n- [mauve](http://gel.ahabs.wisc.edu/mauve/)\n- [mavensmate](http://mavensmate.com)\n- [max](http://sbooth.org/Max/)\n- [maxthon](http://www.maxthon.com/)\n- [mcedit](http://www.mcedit.net)\n- [mcs783x](http://www.asix.com.tw/products.php?op=ProductList&PLine=74&PSeries=109)\n- [mdrp](http://www.macdvdripperpro.com/)\n- [media-converter](http://media-converter.sourceforge.net/)\n- [mediaelch](http://www.mediaelch.de/)\n- [mediafire-desktop](https://www.mediafire.com/software/desktop/)\n- [mediainfo](http://mediaarea.net/en/MediaInfo)\n- [mediathekview](http://sourceforge.net/projects/zdfmediathk/)\n- [meerkat](http://codesorcery.net/meerkat)\n- [memorytamer](http://www.memorytamer.com/)\n- [mendeley-desktop](http://www.mendeley.com/)\n- [menubar-countdown](http://capablehands.net/menubarcountdown)\n- [menubarfilter](http://wez.github.com/MenuBarFilter/)\n- [menucalendarclock-ical](http://www.objectpark.net/en/mcc.html)\n- [menumeters](http://www.ragingmenace.com/software/menumeters/)\n- [menuola](http://www.geocom.co.nz)\n- [meocloud](https://meocloud.pt)\n- [mercurymover](http://www.heliumfoot.com/mercurymover)\n- [mesasqlite](http://www.desertsandsoftware.com)\n- [meshlab](http://meshlab.sourceforge.net/)\n- [metanota](http://www.metanota.com/)\n- [meteorologist](http://heat-meteo.sourceforge.net/)\n- [mi](http://www.mimikaki.net/)\n- [microsoft-intellipoint](http://www.microsoft.com/hardware/en-us/mice)\n- [microsoft-intellitype](http://www.microsoft.com/hardware/en-us/keyboards)\n- [microsoft-lync-plugin](http://office.microsoft.com/Lync)\n- [middleclick](http://clement.beffa.org/labs/projects/middleclick)\n- [midikeys](http://www.manyetas.com/creed/midikeys.html)\n- [miditrail](http://en.sourceforge.jp/projects/miditrail/)\n- [mikogo](http://www.mikogo.com/)\n- [milkytracker](http://www.milkytracker.org/)\n- [minbox](https://minbox.com)\n- [minco](http://www.celmaro.com/minco/)\n- [mindnode-pro](https://mindnode.com/)\n- [minecraft](http://minecraft.net)\n- [mini-metro](http://dinopoloclub.com/minimetro/)\n- [minilyrics](http://www.crintsoft.com/)\n- [minimalclock](http://ilovecolorz.net/minimalclock/)\n- [minitimer](http://kevingessner.com/software/minitimer/)\n- [minitube](http://flavio.tordini.org/minitube)\n- [miro-video-converter](http://www.mirovideoconverter.com/)\n- [miro](http://www.getmiro.com/)\n- [mirrordisplays](http://www.fabiancanas.com/Projects/MirrorDisplays)\n- [mixlr](http://mixlr.com)\n- [mixture](http://mixture.io/)\n- [mixxx](http://www.mixxx.org)\n- [mjolnir](http://mjolnir.io)\n- [mkvtoolnix](http://www.bunkus.org/videotools/mkvtoolnix/)\n- [mnemosyne](http://mnemosyne-proj.org/)\n- [mocksmtp](http://mocksmtpapp.com/)\n- [money](http://www.jumsoft.com/money/)\n- [moneyguru](http://www.hardcoded.net/moneyguru/)\n- [moneymoney](http://moneymoney-app.com/)\n- [moneyplex](http://www.matrica.de/)\n- [moneywell](http://nothirst.com/moneywell/)\n- [mongodb](http://mongodbx-app.orelord.com/)\n- [mongodbpreferencepane](https://github.com/remysaissy/mongodb-macosx-prefspane)\n- [mongohub](https://github.com/fotonauts/MongoHub-Mac)\n- [mono-mdk](http://mono-project.com/)\n- [mono-mre](http://mono-project.com)\n- [monochrome](http://lucianmarin.com/monochrome/)\n- [monolingual](http://monolingual.sourceforge.net/)\n- [monotype-skyfonts](http://www.fonts.com/web-fonts/google)\n- [moom](http://manytricks.com/moom/)\n- [moreamp](http://sourceforge.net/projects/moreamp/)\n- [mosh](http://mosh.mit.edu/)\n- [mou](http://mouapp.com/)\n- [mountain](http://appgineers.de/mountain/)\n- [mover](http://www.themaninhat.com/mover.html)\n- [movieply](http://www.movieply.com/)\n- [movist](https://github.com/samiamwork/Movist)\n- [mozart](http://www.mozart-oz.org)\n- [mp4tools](http://www.emmgunn.com/mp4tools/mp4toolshome.html)\n- [mpeg-streamclip](http://www.squared5.com/)\n- [mpfreaker](http://www.lairware.com/mpfreaker/)\n- [mplayer-osx-extended](http://www.mplayerosx.ch/)\n- [mplayerx](http://mplayerx.org/)\n- [mpv](http://mpv.io/)\n- [mucommander](http://www.mucommander.com/index.php)\n- [mudlet](http://www.mudlet.org)\n- [multibit](https://multibit.org/)\n- [multibrowser](https://sites.google.com/site/tesseractsoftware/multibrowser)\n- [multidoge](http://multidoge.org/)\n- [multifirefox](http://davemartorana.com/multifirefox)\n- [mumble](http://mumble.sourceforge.net)\n- [murasaki](http://genjiapp.com/mac/murasaki/index_en.html)\n- [musescore](http://musescore.org/)\n- [music-manager](https://play.google.com/music/)\n- [musicbrainz-picard](http://musicbrainz.org/doc/MusicBrainz_Picard)\n- [musicplayer](http://ufd.dk/musicplayer)\n- [musictube](http://flavio.tordini.org/musictube)\n- [musique](http://flavio.tordini.org/musique)\n- [myphonedesktop](http://www.myphonedesktop.com/)\n- [mysqlworkbench](http://www.mysql.com/products/workbench)\n\n#### N\n\n- [nally](http://yllan.org/app/Nally/)\n- [name-mangler](http://manytricks.com/namemangler/)\n- [namebench](https://code.google.com/p/namebench/)\n- [namechanger](http://www.mrrsoftware.com/MRRSoftware/NameChanger.html)\n- [namely](http://amarsagoo.info/namely)\n- [narrative-uploader](http://getnarrative.com)\n- [navicat-data-modeler](http://www.navicat.com/products/navicat-data-modeler)\n- [navicat-for-mariadb](http://www.navicat.com/products/navicat-for-mariadb)\n- [navicat-for-mysql](http://www.navicat.com/products/navicat-for-mysql)\n- [navicat-for-oracle](http://www.navicat.com/products/navicat-for-oracle)\n- [navicat-for-postgresql](http://www.navicat.com/products/navicat-for-postgresql)\n- [navicat-for-sql-server](http://www.navicat.com/products/navicat-for-sqlserver)\n- [navicat-for-sqlite](http://www.navicat.com/products/navicat-for-sqlite)\n- [navicat-premium](http://www.navicat.com/products/navicat-premium)\n- [neofinder](http://www.cdfinder.de)\n- [netbeans-cpp](https://netbeans.org/)\n- [netbeans-php](https://netbeans.org/)\n- [netbeans](https://netbeans.org/)\n- [nethackcocoa](https://code.google.com/p/nethack-cocoa/)\n- [netlogo](http://ccl.northwestern.edu/netlogo/)\n- [netnewswire](http://netnewswireapp.com/)\n- [netshade](http://raynersoftware.com/netshade/)\n- [netspot](http://www.netspotapp.com)\n- [neu](http://www.elegantchaos.com/neu/)\n- [ngrok](https://ngrok.com/)\n- [nicecast](http://rogueamoeba.com/nicecast)\n- [nide](http://coreh.github.io/nide/)\n- [nightingale](http://getnightingale.com/)\n- [nike-plus-connect](http://nikeplus.nike.com)\n- [nimbus](https://github.com/jnordberg/irccloudapp)\n- [ninjablocks](http://forums.ninjablocks.com/index.php?p=/discussion/1655/ninja-osx-client/p1)\n- [nitroshare](https://quickmediasolutions.com/apps/14/nitroshare)\n- [nitrous-desktop](https://www.nitrous.io/mac)\n- [nmap](http://nmap.org/)\n- [no-ip-duc](http://www.noip.com/download?page=mac)\n- [nocturne](http://code.google.com/p/blacktree-nocturne/)\n- [node-webkit](https://github.com/rogerwang/node-webkit)\n- [node](http://nodejs.org)\n- [nodebox](http://nodebox.net/node/)\n- [nodeclipse](http://www.nodeclipse.org/)\n- [noejectdelay](https://pqrs.org/macosx/keyremap4macbook/noejectdelay.html.en)\n- [noisy](https://github.com/jonshea/Noisy)\n- [noiz2sa](http://workram.com/games/noiz2sa/)\n- [nomachine](http://www.nomachine.com)\n- [nomacs](http://www.nomacs.org/)\n- [noobproof](http://www.hanynet.com/noobproof/index.html)\n- [nosleep](https://code.google.com/p/macosx-nosleep-extension/)\n- [notational-velocity](http://notational.net)\n- [nothing-to-hide](https://back.nothingtohide.cc/)\n- [notifyr](http://getnotifyr.com)\n- [nottingham](https://clickontyler.com/nottingham/)\n- [ntfs-free](http://sourceforge.net/projects/ntfsfree/)\n- [nutstore](https://jianguoyun.com)\n- [nvalt](http://brettterpstra.com/project/nvalt/)\n- [nzbvortex](http://www.nzbvortex.com/)\n\n#### O\n\n- [objektiv](http://nthloop.github.io/Objektiv/)\n- [obs](http://obsproject.com/)\n- [obsidian-menu-bar-mountain-lion](http://www.obsidianmenubar.com)\n- [ocenaudio](http://www.ocenaudio.com.br/en)\n- [oclint](http://oclint.org)\n- [octave](https://gnu.org/software/octave/)\n- [odesk](https://www.odesk.com/)\n- [omnidazzle](http://www.omnigroup.com/more)\n- [omnidisksweeper](http://www.omnigroup.com/products/omnidisksweeper/)\n- [omnifocus](http://www.omnigroup.com/products/omnifocus/)\n- [omnigraffle](http://www.omnigroup.com/products/omnigraffle)\n- [omnioutliner](http://www.omnigroup.com/omnioutliner/)\n- [omniplan](http://www.omnigroup.com/products/omniplan/)\n- [omnipresence](http://www.omnigroup.com/omnipresence)\n- [omniweb](http://www.omnigroup.com/products/omniweb/)\n- [onepassword](https://agilebits.com/onepassword)\n- [oneswarm](http://www.oneswarm.org/)\n- [onionshare](https://onionshare.org/)\n- [onlive-client](http://games.onlive.com)\n- [onyx](http://www.titanium.free.fr/downloadonyx.php)\n- [oovoo](http://www.oovoo.com)\n- [openarena](http://openarena.ws)\n- [opendns-updater](https://support.opendns.com/entries/23218654-Where-do-I-download-an-OpenDNS-Dynamic-IP-updater-client-)\n- [openemu](http://openemu.org/)\n- [openlp](http://openlp.org)\n- [opennx](http://opennx.net/)\n- [openoffice](http://www.openoffice.org/)\n- [openra](http://www.openra.net/)\n- [openscad](http://www.openscad.org/)\n- [opensesame](http://osdoc.cogsci.nl/)\n- [opensong](http://www.opensong.org/)\n- [openttd](http://openttd.org)\n- [openvanilla](http://openvanilla.org/)\n- [opera-mail](http://www.opera.com/computer/mail)\n- [opera-mobile-emulator](http://www.opera.com/developer/mobile-emulator)\n- [opera-next](http://www.opera.com/computer/next)\n- [opera](http://www.opera.com/)\n- [optimal-layout](http://most-advantageous.com/optimal-layout/)\n- [orange](http://orange.biolab.si/)\n- [orbit](http://orbitapp.net)\n- [origin](http://origin.com)\n- [ormr](http://getormr.com/home/)\n- [osculator](http://www.osculator.net)\n- [osirix](http://www.osirix-viewer.com)\n- [osxfuse](https://osxfuse.github.io/)\n- [outwit-hub](http://www.outwit.com)\n- [owasp-zap](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project)\n- [owncloud](http://owncloud.com)\n\n#### P\n\n- [p4merge](http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools)\n- [p4v](http://www.perforce.com/product/components/perforce-visual-client)\n- [p5](http://p5js.org/download/#editor)\n- [pacifist](http://www.charlessoft.com/)\n- [packer](http://www.packer.io/)\n- [padre](http://padre.perlide.org)\n- [pagico](http://pagico.com/)\n- [paintbrush](http://paintbrush.sourceforge.net/)\n- [paintcode](http://www.paintcodeapp.com/)\n- [pandoc](http://johnmacfarlane.net/pandoc)\n- [pandora-one](http://www.pandora.com/)\n- [pangu](http://en.pangu.io/)\n- [panic-unison](http://panic.com/unison/)\n- [panini](http://sourceforge.net/projects/pvqt/)\n- [paparazzi](http://derailer.org/paparazzi/)\n- [papers](http://www.papersapp.com/papers/)\n- [paragon-extfs](http://www.paragon-software.com/home/extfs-mac/)\n- [paragon-ntfs](http://www.paragon-software.com/home/ntfs-mac/)\n- [parallels](http://www.parallels.com/products/desktop/)\n- [paraview](http://www.paraview.org/)\n- [parse](https://parse.com)\n- [pashua](http://www.bluem.net/en/mac/pashua/)\n- [password-gorilla](https://github.com/zdia/gorilla)\n- [password-practice](https://mrgeckosmedia.com/applications/info/PasswordPractice)\n- [pastor](http://mehlau.net/pastor)\n- [path-finder](http://www.cocoatech.com/pathfinder/)\n- [paw](http://luckymarmot.com/paw)\n- [paye-tools](http://www.hmrc.gov.uk/payerti/payroll/bpt/paye-tools.htm)\n- [pcalc](http://www.pcalc.com/index.html)\n- [pcsxr](https://pcsxr.codeplex.com)\n- [pd-extended](http://puredata.info/downloads/pd-extended)\n- [pdfinfo](http://www.sybrex.com/products/macgui/infomanager/)\n- [pdfmasher](http://www.hardcoded.net/pdfmasher/)\n- [pdfpen](http://smilesoftware.com/PDFpen/index.html)\n- [pdfpenpro](http://www.smilesoftware.com/PDFpenPro/index.html)\n- [pdfsam](http://www.pdfsam.org/)\n- [pdfshaver](https://github.com/tparry/PDFShaver.app)\n- [pdftk](http://www.pdflabs.com/tools/pdftk-server/)\n- [peepopen](http://topfunky.github.io/PeepOpen/)\n- [pemdas-widget](http://www.donkeyengineering.com/pemdaswidget/)\n- [pencil](http://pencil.evolus.vn)\n- [pentaho-data-integration](http://community.pentaho.com)\n- [perian](http://www.perian.org/)\n- [pester](http://sabi.net/nriley/software/index.html#pester)\n- [petite-chez-scheme](http://www.scheme.com/petitechezscheme.html)\n- [pflists](http://www.hanynet.com/pflists/index.html)\n- [pg-commander](http://eggerapps.at/pgcommander/)\n- [pgadmin3](http://pgadmin.org)\n- [pgloader](http://pgloader.io)\n- [phantomjs](http://phantomjs.org/)\n- [pharo](http://www.pharo-project.org/home)\n- [phoenix-slides](http://blyt.net/phxslides)\n- [phoenix](https://github.com/sdegutis/Phoenix)\n- [phoneclean](http://www.imobie.com/phoneclean/)\n- [photoninja](http://www.picturecode.com/index.php)\n- [phpstorm](http://www.jetbrains.com/phpstorm/)\n- [pi-filler](http://ivanx.com/raspberrypi)\n- [pianopub](http://dev.kunugiken.com/Pianopub/)\n- [picasa](http://picasa.google.com/)\n- [picturesque](http://www.acqualia.com/picturesque/)\n- [piezo](http://rogueamoeba.com/piezo/)\n- [pinegrow-web-designer](http://pinegrow.com/)\n- [pingmenu](https://github.com/kalleboo/PingMenu)\n- [pins](http://pinsapp.com/)\n- [pinta](http://pinta-project.com/)\n- [pivotalbooster](http://pivotalbooster.com/)\n- [pixel-check](http://macguitar.me/apps/pixelcheck/)\n- [pixel-winch](http://ricciadams.com/projects/pixel-winch)\n- [pixelpeeper](http://www.irradiatedsoftware.com/labs)\n- [pixelstick](http://plumamazing.com/mac/pixelstick)\n- [pixi-paint](http://www.danielx.net/pixel-editor/docs/download)\n- [pixlr](https://pixlr.com)\n- [placeit](https://placeit.net/)\n- [plain-clip](http://www.bluem.net/en/mac/plain-clip)\n- [plainview](http://barbariangroup.com/)\n- [platypus](http://sveinbjorn.org/platypus)\n- [playonmac](http://www.playonmac.com/en)\n- [pleasesleep](http://www.dragonone.com/products/macosx/pleasesleep/)\n- [plex-home-theater](https://plex.tv)\n- [plex-media-server](https://plex.tv/)\n- [pliny](http://pliny.cch.kcl.ac.uk)\n- [plover](http://stenoknight.com/wiki/Main_Page)\n- [plug](http://www.plugformac.com/)\n- [plycounter](http://www.plycount.com)\n- [pngcommentator](http://www.echomist.co.uk/software/PNGCommentator.html)\n- [pngyu](http://nukesaq88.github.io/Pngyu/)\n- [poedit](http://www.poedit.net)\n- [poison](http://tox.im)\n- [pokemon-showdown](http://pokemonshowdown.com)\n- [pokerstars](http://www.pokerstars.com/)\n- [pokertracker](https://www.pokertracker.com)\n- [port-map](http://www.codingmonkeys.de/portmap)\n- [porthole](http://getporthole.com/)\n- [postbox](http://www.postbox-inc.com/)\n- [postgres](http://postgresapp.com/)\n- [power-manager-pro](https://www.dssw.co.uk/powermanager)\n- [power-manager](https://www.dssw.co.uk/powermanager)\n- [powerkey](http://pkamb.github.io/PowerKey/)\n- [powerword](http://mac.iciba.com)\n- [praat](http://www.fon.hum.uva.nl/praat/)\n- [preen](http://anomiesoftware.com/Anomie_Software/Preen.html)\n- [pref-setter](http://www.nightproductions.net/prefsetter.html)\n- [preference-manager](http://www.digitalrebellion.com/prefman)\n- [preferencecleaner](http://www.echomist.co.uk/software/PreferenceCleaner.shtml)\n- [prefs-editor](http://www.tempel.org/PrefsEditor)\n- [prepros](http://alphapixels.com/prepros/)\n- [prey](https://preyproject.com)\n- [prezi](http://www.prezi.com/)\n- [printrun](https://github.com/kliment/Printrun)\n- [prismatik](http://lightpack.tv/)\n- [private-eye](http://radiosilenceapp.com/private-eye)\n- [private-internet-access](https://www.privateinternetaccess.com)\n- [prizmo](http://www.creaceed.com/prizmo)\n- [processing](http://processing.org/)\n- [programmer-dvorak](http://kaufmann.no/roland/dvorak/)\n- [projectlibre](http://www.projectlibre.org/)\n- [prolific-usb-serial-driver](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41)\n- [propane](http://propaneapp.com/)\n- [propresenter](http://www.renewedvision.com/propresenter.php)\n- [protege](http://protege.stanford.edu/)\n- [provisioning](https://github.com/chockenberry/Provisioning)\n- [provisionql](https://github.com/ealeksandrov/ProvisionQL)\n- [proxifier](http://www.proxifier.com/mac/)\n- [proximity](https://code.google.com/p/reduxcomputing-proximity/)\n- [proxpn](http://proxpn.com)\n- [ps3-media-server](http://www.ps3mediaserver.org/)\n- [psi](http://psi-im.org/)\n- [psychopy](http://www.psychopy.org/)\n- [punto-switcher](http://punto.yandex.ru)\n- [pupil](http://pupil.io/)\n- [pusher](https://github.com/noodlewerk/NWPusher)\n- [putio-adder](https://github.com/nicoSWD/put.io-adder)\n- [puush](http://puush.me/)\n- [puzzles](http://www.chiark.greenend.org.uk/~sgtatham/puzzles/)\n- [pwnagetool](http://blog.iphone-dev.org/tagged/PwnageTool)\n- [pycharm-ce](http://www.jetbrains.com/pycharm)\n- [pycharm](http://www.jetbrains.com/pycharm/)\n\n#### Q\n\n- [qbittorrent](http://www.qbittorrent.org)\n- [qdesktop](http://qvacua.com)\n- [qgis](http://www.kyngchaos.com/software/qgis)\n- [qgroundcontrol](http://qgroundcontrol.org)\n- [qiyimedia](http://www.iqiyi.com)\n- [qlcolorcode](https://code.google.com/p/qlcolorcode/)\n- [qlimagesize](https://github.com/Nyx0uf/qlImageSize)\n- [qlmarkdown](https://github.com/toland/qlmarkdown)\n- [qlprettypatch](https://github.com/atnan/QLPrettyPatch)\n- [qlrest](https://github.com/cluther/qlrest)\n- [qlstephen](http://whomwah.github.io/qlstephen/)\n- [qmind](http://qvacua.com)\n- [qq](http://im.qq.com/macqq/index.shtml)\n- [qqbrowser](http://browser.qq.com/mac/)\n- [qqinput](http://qq.pinyin.cn/)\n- [qqmusic](http://y.qq.com)\n- [qrfcview](https://saghul.github.io/qrfcview-osx)\n- [qrq](http://fkurz.net/ham/qrq.html)\n- [qt-creator](http://qt-project.org/)\n- [qtspim](http://spimsimulator.sourceforge.net/)\n- [quassel-client](http://quassel-irc.org)\n- [querious](http://www.araelium.com/querious/)\n- [quick-search-box](http://www.google.com/quicksearchbox/)\n- [quickcast](http://quickcast.io/)\n- [quickhue](https://github.com/danparsons/QuickHue)\n- [quicklook-csv](https://github.com/p2/quicklook-csv)\n- [quicklook-json](http://www.sagtau.com/quicklookjson.html)\n- [quicklook-pfm](https://code.google.com/p/quicklook-pfm/)\n- [quicknfo](https://github.com/planbnet/QuickNFO)\n- [quickradar](http://www.quickradar.com/)\n- [quicksilver](http://qsapp.com/)\n- [quiterss](http://quiterss.org/)\n- [quotefixformac](https://github.com/robertklep/quotefixformac)\n- [qvod-player](http://www.qvodcd.com/)\n\n#### R\n\n- [r-name](http://www.jacek-dom.net/software/R-Name/)\n- [r](http://www.r-project.org/)\n- [racket](http://racket-lang.org/)\n- [radbeacon](http://store.radiusnetworks.com/collections/all/products/radbeacon-config)\n- [radiant-player](http://kbhomes.github.io/google-music-mac/)\n- [rapidweaver](http://realmacsoftware.com/rapidweaver)\n- [raw-photo-processor](http://www.raw-photo-processor.com/RPP/Overview.html)\n- [raw-therapee](http://rawtherapee.com)\n- [razer-synapse](http://www.razerzone.com/synapse2)\n- [razorsql](http://razorsql.com/download_mac.html)\n- [rcdefaultapp](http://www.rubicode.com/Software/RCDefaultApp/)\n- [rcenvironment](http://www.rubicode.com/Software/RCEnvironment/)\n- [rdio](http://www.rdio.com)\n- [rdm](http://redisdesktop.com)\n- [readefine-desktop](http://readefine.anirudhsasikumar.net/)\n- [readytalk](https://www.readytalk.com/)\n- [reaper](http://www.reaper.fm/)\n- [recordit](http://recordit.co/)\n- [recovery-disk-assistant](http://support.apple.com/kb/HT4848)\n- [reeddit](http://mac.reedditapp.com)\n- [reflector](http://www.airsquirrels.com/reflector/)\n- [refresh-finder](http://soderhavet.com/refresh/refresh-finder/)\n- [reggy](http://reggyapp.com/)\n- [rekordbox](http://rekordbox.com/en/)\n- [remonit](http://zef.io/remonit/)\n- [remote-desktop-connection](http://www.microsoft.com/en-us/download/details.aspx?id=18140)\n- [renamer](http://renamer.com)\n- [repetier-host](http://www.repetier.com/)\n- [rescuetime](https://www.rescuetime.com)\n- [retinacapture](http://www.retinacapture.com)\n- [retinizer](http://retinizer.mikelpr.com/)\n- [retroshare](http://retroshare.sourceforge.net/)\n- [reveal](http://revealapp.com/)\n- [rftg](http://keldon.net/rftg/)\n- [ridibooks](http://ridibooks.com/support/introduce_appdown)\n- [riffworkst4](http://www.sonomawireworks.com/T4/)\n- [rightzoom](http://www.blazingtools.com/right_zoom_mac.html)\n- [ringtones](http://thelittleappfactory.com/ringtones/)\n- [ripit](http://thelittleappfactory.com/ripit/)\n- [robomongo](http://robomongo.org)\n- [rocks-n-diamonds](http://www.artsoft.org/rocksndiamonds/)\n- [royal-tsx](http://www.royaltsx.com)\n- [rrootage](http://workram.com/games/rrootage/)\n- [rss](http://www.rssapplication.com/)\n- [rstudio](http://www.rstudio.com/)\n- [rtx](http://www.rtxapp.com/mac/)\n- [rubitrack](http://www.rubitrack.com/)\n- [rubymine](http://www.jetbrains.com/ruby/)\n- [runtastic-connect](https://www.runtastic.com/connect)\n- [runtimebrowser](https://github.com/nst/RuntimeBrowser)\n- [rust](http://www.rust-lang.org/)\n- [rythem](https://github.com/AlloyTeam/Rythem)\n\n#### S\n\n- [sabnzbd](http://sabnzbd.org/)\n- [safaritabswitching](https://github.com/rs/SafariTabSwitching)\n- [safe-in-cloud](http://www.safe-in-cloud.com)\n- [safemonk](https://www.safemonk.com/)\n- [sage](http://www.sagemath.org/)\n- [sandbox](http://www.mikey-san.net/sandbox/)\n- [sandvox](http://www.karelia.com/products/sandvox/)\n- [satellite-eyes](http://satelliteeyes.tomtaylor.co.uk/)\n- [sauce](https://saucelabs.com/mac)\n- [sauerbraten](http://sauerbraten.org)\n- [scala-ide](http://scala-ide.org/)\n- [scansnap-manager](http://www.fujitsu.com/global/support/computing/peripheral/scanners/software/)\n- [scapple](https://www.literatureandlatte.com/scapple.php)\n- [schnapps](http://schnappsformac.com/)\n- [scilab](https://www.scilab.org)\n- [scout](http://mhs.github.io/scout-app/)\n- [scratch](http://scratch.mit.edu/scratch2download/)\n- [screenflick](http://www.araelium.com/screenflick/)\n- [screenflow](http://www.telestream.net/screenflow/)\n- [screenhero](http://screenhero.com)\n- [screenmailer](http://www.screenmailer.com)\n- [screens-connect](https://screensconnect.com)\n- [screenstagram](http://screenstagram.s3.amazonaws.com/download.html)\n- [screensteps](http://www.bluemangolearning.com/)\n- [scribbleton](http://scribbleton.com/)\n- [scribus](http://www.scribus.net/canvas/Scribus)\n- [scriptql](http://www.kainjow.com/)\n- [scrivener](http://literatureandlatte.com/scrivener.php)\n- [scroll-reverser](https://pilotmoon.com/scrollreverser/)\n- [scrup](https://github.com/rsms/scrup)\n- [scummvm](http://scummvm.org/)\n- [sdformatter](https://www.sdcard.org)\n- [sdrdx](http://fyngyrz.com/?p=915)\n- [seafile-client](http://seafile.com/)\n- [seamonkey](http://www.seamonkey-project.org/)\n- [seashore](http://seashore.sourceforge.net/)\n- [second-life-viewer](http://secondlife.com/)\n- [secondbar](http://blog.boastr.net/?page_id=79)\n- [secrets](http://secrets.blacktree.com)\n- [seil](https://pqrs.org/macosx/keyremap4macbook/seil.html.en)\n- [selfcontrol](http://selfcontrolapp.com/)\n- [selflanguage-self-control](http://selflanguage.org/)\n- [semulov](http://www.kainjow.com)\n- [send-to-kindle](http://www.amazon.com/gp/sendtokindle/mac)\n- [sensiolabsdesktop](http://desktop.sensiolabs.org)\n- [sente](http://www.thirdstreetsoftware.com)\n- [sequel-pro](http://www.sequelpro.com/)\n- [sequential](http://sequentialx.com)\n- [serf](http://www.serfdom.io/)\n- [serial-tools](http://www.w7ay.net/site/Applications/Serial%20Tools/)\n- [serialcloner](http://serialbasics.free.fr/Serial_Cloner.html)\n- [servetome](http://zqueue.com/servetome/)\n- [serviio](http://serviio.org/)\n- [servus](https://servus.io/)\n- [sevenzx](http://sixtyfive.xmghosting.com/products/7zx/)\n- [shades](http://www.charcoaldesign.co.uk/shades)\n- [shadowsocksx](https://github.com/shadowsocks/shadowsocks-iOS/wiki/Shadowsocks-for-OSX-Help)\n- [shadowsweeper](http://www.irradiatedsoftware.com/labs/)\n- [sharetool](http://bainsware.com/)\n- [shelf-leveler](https://mrgeckosmedia.com/applications/info/Shelf-Leveler)\n- [shiftit](https://github.com/fikovnik/ShiftIt)\n- [shimo](http://www.chungwasoft.com/shimo/)\n- [shiori](http://aki-null.net/shiori/)\n- [shoes](http://shoesrb.com/)\n- [shortcat](http://shortcatapp.com/)\n- [shotcut](http://www.shotcut.org/)\n- [shuttle](http://fitztrev.github.io/shuttle/)\n- [sickbeard-anime](http://sickbeard.lad1337.de/)\n- [sickbeard](http://sickbeard.lad1337.de/)\n- [sidekick](http://oomphalot.com/sidekick/)\n- [sidestep](http://chetansurpur.com/projects/sidestep)\n- [sidplay](http://www.sidmusic.org/sidplay/mac/)\n- [sigil](http://code.google.com/p/sigil/)\n- [silo](http://nevercenter.com/silo/)\n- [silverback](http://silverbackapp.com/)\n- [silverlight](http://www.microsoft.com/silverlight/)\n- [simon](http://www.dejal.com/simon/)\n- [simpholders](http://simpholders.com/)\n- [simple-comic](http://dancingtortoise.com/simplecomic/)\n- [simple-css](http://www.hostm.com/css)\n- [simplecap](http://xcatsan.com/simplecap-en/)\n- [simplefloatingclock](http://www.splook.com/Software/Simple_Floating_Clock.html)\n- [simpless](http://wearekiss.com/simpless)\n- [simplesynth](http://notahat.com/simplesynth/)\n- [simpletag](http://sourceforge.net/projects/simpletag/)\n- [simulator-folders](http://nimbleworks.co.uk/blog/simulator-folders/)\n- [sitesucker](http://www.sitesucker.us/mac/mac.html)\n- [sixtyforce](http://sixtyforce.com/)\n- [sizeup](http://www.irradiatedsoftware.com/sizeup/index.html)\n- [sizzlingkeys](http://www.yellowmug.com/sk4it/)\n- [sketch-tool](http://bohemiancoding.com/sketch/tool/)\n- [sketch-toolbox](http://sketchtoolbox.com)\n- [sketch](http://www.bohemiancoding.com/sketch/)\n- [sketchup](http://www.sketchup.com/intl/en/)\n- [sketchupviewer](http://www.sketchup.com/intl/en/)\n- [skim](http://skim-app.sourceforge.net/)\n- [skitch](http://evernote.com/skitch/)\n- [skreenics](https://code.google.com/p/skreenics/)\n- [skydrive](http://windows.microsoft.com/en-us/skydrive/download)\n- [skype](http://www.skype.com)\n- [slack](http://slack.com)\n- [slate](https://github.com/jigish/slate)\n- [sleep-monitor](https://www.dssw.co.uk/sleepmonitor)\n- [slender](http://dragonforged.com/slender/)\n- [slic3r](http://slic3r.org/)\n- [slice](http://sliceeq.com/)\n- [slicy](http://macrabbit.com/slicy/)\n- [slidemode](http://teaksoftware.com/app/slidemode)\n- [slimbatterymonitor](http://www.orange-carb.org/SBM/)\n- [slimboat](http://www.slimboat.com)\n- [slingshot](http://www.airsquirrels.com/slingshot/)\n- [sloth](http://sveinbjorn.org/sloth)\n- [slowy](http://slowyapp.com/)\n- [smaller](http://smallerapp.com/)\n- [smartgithg](http://www.syntevo.com)\n- [smartloader](http://picturelife.com)\n- [smartsynchronize](http://www.syntevo.com)\n- [smcfancontrol](http://www.eidac.de/?p=243)\n- [smoothmouse](http://smoothmouse.com)\n- [snagit](http://www.techsmith.com/snagit.html)\n- [snes9x](http://www.snes9x.com/)\n- [snip](http://snip.qq.com/)\n- [snippet-edit](http://cocoaholic.com/snippet_edit/)\n- [snippets](http://snippets.me/)\n- [sococo](http://www.sococo.com)\n- [sofortbild](http://www.sofortbildapp.com/)\n- [sogouinput](http://pinyin.sogou.com/mac/)\n- [soleol](http://eduo.info/apps/soleol)\n- [sonic-visualiser](http://www.sonicvisualiser.org/)\n- [sonora](http://getsonora.com/)\n- [sonos](http://www.sonos.com/)\n- [sopcast](http://www.sopcast.org)\n- [sophos-anti-virus-home-edition](http://www.sophos.com/en-us/products/free-tools/sophos-antivirus-for-mac-home-edition.aspx/)\n- [soqlxplorer](http://www.pocketsoap.com/osx/soqlx/)\n- [soulseek](http://www.soulseekqt.net/)\n- [soulver](http://www.acqualia.com/soulver/)\n- [soundcleod](http://salomvary.github.io/soundcleod/)\n- [soundflower](https://code.google.com/p/soundflower/)\n- [soundnote](https://mrgeckosmedia.com/applications/info/SoundNote)\n- [sourcetree](http://www.sourcetreeapp.com/)\n- [spacemonkey](https://www.spacemonkey.com)\n- [spacious](http://www.iospirit.com/products/spacious)\n- [spark-inspector](http://sparkinspector.com/)\n- [spark](http://www.shadowlab.org/softwares/spark.php)\n- [sparkbox](http://www.icyblaze.com/sparkbox)\n- [sparkle](http://sparkle-project.org/)\n- [sparkleshare](http://sparkleshare.org/)\n- [sparrow](http://www.sparrowmailapp.com/)\n- [spectacle](http://spectacleapp.com/)\n- [speedcrunch](http://www.speedcrunch.org)\n- [speedlimit](http://mschrag.github.io/)\n- [speedtao](http://www.speedtao.net/)\n- [spek](http://spek.cc)\n- [spideroak](http://spideroak.com)\n- [spillo](http://bananafishsoftware.com/products/spillo/)\n- [spirited-away](http://drikin.com/2010/11/spirited-away.html)\n- [splashtop-personal](http://www.splashtop.com/personal)\n- [splashtop-streamer](http://www.splashtop.com/downloads)\n- [splayerx](https://bitbucket.org/Tomasen/splayerx/wiki/Home)\n- [spotdox](http://spotdox.com/get-started/)\n- [spotifree](http://spotifree.gordinskiy.com)\n- [spotify-menubar](http://lifeupnorth.co.uk/Spotify-Menubar/)\n- [spotify-notifications](http://spotify-notifications.citruspi.io/)\n- [spotify](https://www.spotify.com)\n- [spyder](https://code.google.com/p/spyderlib/)\n- [sqleditor](http://www.malcolmhardie.com/sqleditor/)\n- [sqlexplorer](http://eclipsesql.sourceforge.net/)\n- [sqlite-database-browser](http://sqlitebrowser.org)\n- [sqlite-professional](https://www.sqlitepro.com)\n- [sqlitestudio](http://sqlitestudio.pl)\n- [squidman](http://squidman.net/squidman/)\n- [squire](http://squireapp.com)\n- [squirrel](https://github.com/lotem/squirrel)\n- [sqwiggle](https://www.sqwiggle.com)\n- [srclib](https://srclib.org/)\n- [sshfs](http://osxfuse.github.io/)\n- [ssx](http://chris.schleifer.net/ssX/index.cgi/index.html)\n- [stackato](http://docs.stackato.com/user/client/index.html)\n- [stackroom](http://www.geocities.jp/aromaticssoft/stackroom/index.html)\n- [startninja](http://www.allvu.com/index.php/products/startninja.html)\n- [stay](http://cordlessdog.com/stay/)\n- [steam](http://store.steampowered.com/about/)\n- [steermouse](http://plentycom.jp/en/steermouse/)\n- [stella](http://stella.sourceforge.net)\n- [stellarium](http://stellarium.org)\n- [stockbarjp](http://midnightsuyama.org)\n- [streamtools](https://github.com/nytlabs/streamtools)\n- [strongvpn-client](http://strongvpn.com/vpnclient.shtml)\n- [sts](http://spring.io/tools/sts)\n- [subclassed-mnemosyne](http://www.subclassed.com/apps/mnemosyne/details)\n- [subl](https://github.com/dhoulb/subl)\n- [subler](https://code.google.com/p/subler/)\n- [sublercli](https://code.google.com/p/subler/)\n- [sublime-text](http://www.sublimetext.com/2)\n- [subnetcalc](http://subnetcalc.free.fr/)\n- [subsmarine](http://www.cocoawithchurros.com/subsmarine.php)\n- [subsurface](http://subsurface.hohndel.org/)\n- [subtitle-master](http://subtitlemaster.com/)\n- [subtitles](http://subtitlesapp.com)\n- [sunlogin-remote](http://sunlogin.oray.com)\n- [super-otr](http://apfel-a.macbay.de/super-otr/)\n- [supercollider](http://supercollider.sourceforge.net/)\n- [superduper](http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html)\n- [supersync](http://supersync.com/)\n- [supertuxkart](http://supertuxkart.sourceforge.net)\n- [surplusmeter](http://www.skoobysoft.com/utilities/utilities.html#surplusmeter)\n- [suspicious-package](http://www.mothersruin.com/software/SuspiciousPackage/)\n- [svnx](https://code.google.com/p/svnx/)\n- [sweet-home3d](http://www.sweethome3d.com/)\n- [swingfish](http://cloakedcode.com/swingfish.html)\n- [swinsian](http://swinsian.com)\n- [switchresx](http://www.madrau.com)\n- [switchup](http://www.irradiatedsoftware.com/switchup/)\n- [synergy](http://synergy-foss.org/)\n- [synology-assistant](http://www.synology.com/)\n- [synology-cloud-station](http://www.synology.com/)\n- [synology-photo-station-uploader](http://www.synology.com/)\n- [synthesia](http://www.synthesiagame.com)\n\n#### T\n\n- [tabula](http://tabula.nerdpower.org)\n- [tactor](http://onflapp.wordpress.com/tactor/)\n- [tag](http://sbooth.org/Tag/)\n- [tagalicious](http://thelittleappfactory.com/tagalicious/)\n- [tagger](http://bilalh.github.io/projects/tagger/)\n- [tagoman](http://onflapp.wordpress.com/tagoman)\n- [tagr](http://www.entwicklungsfreu.de/tagr.html)\n- [tagspaces](http://www.tagspaces.org)\n- [tapaal](http://www.tapaal.net)\n- [taskpaper](http://www.hogbaysoftware.com/products/taskpaper)\n- [tau](http://tau.uoregon.edu/)\n- [tcpblock](http://tcpblock.wordpress.com/)\n- [td-agent](http://www.fluentd.org/)\n- [td-toolbelt](http://toolbelt.treasuredata.com/)\n- [teamspeak-client](http://www.teamspeak.com/)\n- [teamviewer](http://www.teamviewer.com/)\n- [teamviz](http://www.teamviz.com/)\n- [teensy](http://pjrc.com/teensy/loader_mac.html)\n- [teeworlds](https://www.teeworlds.com/)\n- [telegram](https://vk.com/telegram_osx)\n- [telephone](https://code.google.com/p/telephone/)\n- [teleport](http://www.abyssoft.com/software/teleport/)\n- [testflight](http://testflightapp.com)\n- [tex-live-utility](https://code.google.com/p/mactlmgr/)\n- [texmacs](http://www.texmacs.org/)\n- [texmaker](http://www.xm1math.net/texmaker)\n- [texnicle](http://www.bobsoft-mac.de/texnicle/texnicle.html)\n- [texpad](https://www.texpadapp.com/osx)\n- [texshop](http://pages.uoregon.edu/koch/texshop)\n- [texstudio](http://texstudio.sourceforge.net/)\n- [textadept](http://foicica.com/textadept/)\n- [textexpander](http://www.smilesoftware.com/TextExpander/index.html)\n- [textmate](http://macromates.com/)\n- [textroom](https://code.google.com/p/textroom/)\n- [texts](http://www.texts.io)\n- [textsoap](http://www.unmarked.com/textsoap/)\n- [texturepacker](http://www.codeandweb.com/texturepacker)\n- [textwrangler](http://www.barebones.com/products/textwrangler)\n- [tftpserver](http://ww2.unime.it/flr/tftpserver/)\n- [thaiwitter](https://tw3.herokuapp.com/)\n- [the-archive-browser](http://archivebrowser.c3.cx)\n- [the-brain](http://www.thebrain.com/)\n- [the-escapers-flux](http://www.theescapers.com/flux/)\n- [the-hit-list](http://www.potionfactory.com/thehitlist)\n- [the-unarchiver](http://unarchiver.c3.cx/)\n- [theremin](https://github.com/TheStalwart/Theremin)\n- [thetube](http://www.equinux.com/us/products/thetube/index.html)\n- [things](http://culturedcode.com/things/)\n- [thinkorswim](http://mediaserver.thinkorswim.com/installer/install.html#macosx)\n- [thirty-three-rpm](http://www.edenwaith.com/products/33rpm/)\n- [thisservice](http://wafflesoftware.net/thisservice/)\n- [thong](http://thong.fousa.be/)\n- [thumbsup](http://www.devontechnologies.com/products/freeware.html#c966)\n- [thunder](http://mac.xunlei.com/)\n- [thunderbird](http://www.mozilla.org/en-US/thunderbird/)\n- [thyme](http://joaomoreno.github.io/thyme/)\n- [tickets](http://www.irradiatedsoftware.com/tickets/)\n- [tiddlywiki](https://github.com/Jermolene/TiddlyDesktop)\n- [tikz-editor](https://github.com/fredokun/TikZ-Editor)\n- [tiled](http://www.mapeditor.org/)\n- [tilemill](http://www.mapbox.com/tilemill/)\n- [time-out](http://www.dejal.com/timeout/)\n- [time-sink](http://manytricks.com/timesink/)\n- [time-tracker](https://code.google.com/p/time-tracker-mac)\n- [timemachineeditor](http://timesoftware.free.fr/timemachineeditor/)\n- [timemachinescheduler](http://www.klieme.com/TimeMachineScheduler.html)\n- [timings](http://mediaatelier.com/Timings)\n- [tinkertool](http://www.bresink.com/osx/TinkerTool.html)\n- [tinygrab](http://www.tinygrab.com)\n- [tinyumbrella](http://blog.firmwareumbrella.com/)\n- [titanium-studio](https://my.appcelerator.com/resources)\n- [tk-suite-client](http://agfeo.de/agfeo_web/hp3.nsf/lu/2064)\n- [toad-mac](http://www.toadworld.com/products/toad-mac-edition/default.aspx)\n- [toau](http://toauapp.com)\n- [todoist](https://todoist.com)\n- [todos](http://dbachrach.com/opensoft/index.php?page=Todos)\n- [tofu](http://amarsagoo.info/tofu/)\n- [toggldesktop](https://www.toggl.com)\n- [tokaido](https://github.com/tokaido/tokaidoapp/releases)\n- [tomahawk](http://www.tomahawk-player.org/)\n- [tomighty](http://www.tomighty.org/)\n- [tongbu](http://www.tongbu.com)\n- [tonido](http://www.tonido.com/)\n- [toodledo](https://www.toodledo.com/tools/mac_menubar.php)\n- [torbrowser](https://www.torproject.org/projects/torbrowser.html)\n- [torpedo](https://usetorpedo.com)\n- [tortoisehg](http://tortoisehg.bitbucket.org/)\n- [torustrooper](http://workram.com/games/)\n- [totalfinder](http://totalfinder.binaryage.com)\n- [totals](http://www.kedisoft.com/totals/)\n- [totalspaces](http://totalspaces.binaryage.com/)\n- [totalterminal](http://totalterminal.binaryage.com)\n- [tower](http://www.git-tower.com/)\n- [trailer](http://dev.housetrip.com/trailer/)\n- [trailrunner](http://trailrunnerx.com/)\n- [traktable](http://yo-han.github.io/Traktable/)\n- [transmission-remote-gui](https://code.google.com/p/transmisson-remote-gui/)\n- [transmission](http://www.transmissionbt.com/)\n- [transmit](http://panic.com/transmit)\n- [treemaker](http://www.langorigami.com/science/computational/treemaker/treemaker.php)\n- [treesheets](http://strlen.com/treesheets/)\n- [tresorit](http://tresorit.com)\n- [tribler](http://www.tribler.org)\n- [trickster](http://www.apparentsoft.com/trickster/)\n- [trim-enabler](http://www.cindori.org/software/trimenabler/)\n- [truecrypt](http://truecrypt.org/)\n- [tubbler](http://www.celmaro.com/tubbler)\n- [tuneinstructor](http://www.tune-instructor.de/com/start.html)\n- [tunewiki](http://www.tunewiki.com/)\n- [tunnelbear](https://www.tunnelbear.com/)\n- [tunnelblick](https://code.google.com/p/tunnelblick/)\n- [tuxguitar](http://www.tuxguitar.com.ar/)\n- [tv-browser](http://www.tvbrowser.org/index.php?setlang=en)\n- [tv-show-tracker](http://www.pixelperfectwidgets.com/)\n- [tvmobili](http://www.tvmobili.com/)\n- [tvshows](http://tvshowsapp.com/)\n- [twentytwo](https://github.com/marcw/twentytwo)\n- [twindocs](https://www.twindocs.com)\n- [twine](http://twinery.org/)\n- [twitterrific](http://twitterrific.com/mac)\n- [typewriter](http://llllll.li/typewriter)\n- [typinator](http://www.ergonis.com/)\n\n#### U\n\n- [uber-network-fuser](http://nickapedia.com/2012/01/10/breaking-new-ground-an-uber-tool-for-the-mac/)\n- [uberpov](http://megapov.inetart.net/uberpov_mac/index.html)\n- [ubersicht](http://tracesof.net/uebersicht)\n- [ubuntu-one](http://one.ubuntu.com)\n- [ukelele](http://scripts.sil.org/ukelele)\n- [ultrastardeluxe](http://ultrastardx.sourceforge.net/)\n- [uncrustifyx](https://github.com/ryanmaxwell/UncrustifyX)\n- [undercover](http://www.orbicule.com/undercover/mac/)\n- [unetbootin](http://unetbootin.sourceforge.net/)\n- [unicodechecker](http://earthlingsoft.net/UnicodeChecker/)\n- [unified-remote](http://www.unifiedremote.com)\n- [uninstallpkg](http://www.corecode.at/uninstallpkg/)\n- [unison](http://www.cis.upenn.edu/~bcpierce/unison/)\n- [unity-web-player](https://unity3d.com/webplayer)\n- [unity3d](http://unity3d.com/unity/)\n- [universal-media-server](www.universalmediaserver.com)\n- [unpkg](http://www.timdoug.com/unpkg/)\n- [unrarx](http://www.unrarx.com)\n- [usb-overdrive](http://www.usboverdrive.com/)\n- [utc-menu-clock](https://github.com/netik/UTCMenuClock)\n- [utopia](http://utopiadocs.com/)\n- [utorrent](http://www.utorrent.com/)\n\n#### V\n\n- [vagrant-manager](http://vagrantmanager.com/)\n- [vagrant](http://www.vagrantup.com)\n- [valentina-studio](http://www.valentina-db.com/)\n- [vassal](http://www.vassalengine.org)\n- [versions](http://versionsapp.com/)\n- [vessel](http://awvessel.github.io)\n- [viber](http://viber.com)\n- [vico](http://www.vicoapp.com)\n- [videomonkey](http://videomonkey.org/)\n- [videospec](http://videospec.free.fr/english/)\n- [vienna](http://www.vienna-rss.org)\n- [vimediamanager](http://mariusth.channelwood.org/vimediamanager/)\n- [vimr](http://vimr.org/)\n- [vine-server](http://www.testplant.com/products/vine/vine-server/)\n- [vinoteka](http://www.vinotekasoft.com/)\n- [virtaal](http://virtaal.translatehouse.org/)\n- [virtualbox](http://www.virtualbox.org)\n- [virtualhostx](http://clickontyler.com/virtualhostx/)\n- [virustotaluploader](https://www.virustotal.com/)\n- [viscosity](http://www.sparklabs.com/viscosity/)\n- [visit](https://wci.llnl.gov/codes/visit/home.html)\n- [vistrails](http://www.vistrails.org/index.php/Main_Page)\n- [visualack](http://blog.kowalczyk.info/software/vack/)\n- [visualvm](http://visualvm.java.net)\n- [vitamin-r](http://www.publicspace.net/Vitamin-R/)\n- [vlc-remote](http://hobbyistsoftware.com/vlc)\n- [vlc](http://www.videolan.org/vlc/)\n- [vlcstreamer](http://hobbyistsoftware.com/vlcstreamer)\n- [vmware-fusion](http://www.vmware.com/products/fusion/)\n- [vmware-horizon-view-client](http://www.vmware.com/)\n- [vocabulist](http://vocabulistapp.com/)\n- [voicemac](https://mrgeckosmedia.com/applications/info/VoiceMac)\n- [volatility](http://www.volatilityfoundation.org/)\n- [vox-preference-pane](http://coppertino.com/vox/addon.html)\n- [vuescan](http://www.hamrick.com)\n- [vyprvpn](http://www.goldenfrog.com/vyprvpn)\n\n#### W\n\n- [wabbitemu](http://wabbit.codeplex.com)\n- [wacom-bamboo-tablet](http://us.wacom.com/en/support/drivers)\n- [wacom-tablet](http://www.wacom.com/)\n- [wake-on-lan](http://www.readpixel.com/wakeonlan/)\n- [wallpaper-wizard](http://wallwiz.com)\n- [wasted](http://wasted.werk01.de)\n- [waterroof](http://www.hanynet.com/waterroof/index.html)\n- [wavtap](https://github.com/pje/wavtap)\n- [wd-security](http://www.wdc.com/en/)\n- [web-sharing](http://clickontyler.com/web-sharing/)\n- [webp-quicklook](https://github.com/dchest/webp-quicklook)\n- [webstorm](http://www.jetbrains.com/webstorm/)\n- [wechat](http://weixin.qq.com/cgi-bin/readtemplate?t=mac)\n- [wedge](http://wedge.natestedman.com)\n- [weibox](http://weiboformac.sinaapp.com)\n- [weka](http://www.cs.waikato.ac.nz/ml/weka/)\n- [welly](https://code.google.com/p/welly/)\n- [wesnoth](http://wesnoth.org)\n- [whatpulse](http://www.whatpulse.org/)\n- [whatsapp-pocket](http://www.fireebok.com/whatsapp-pocket.html)\n- [whatsize](http://whatsizemac.com/)\n- [whiteclock](http://www.taimila.com/?p=1221)\n- [widelands](https://wl.widelands.org/)\n- [wifimasterkey](http://www.lianwifi.com/)\n- [window-switch](http://xpra.org/)\n- [windownaut](http://www.binarybakery.com/aprod/index.html)\n- [wineskin-winery](http://wineskin.urgesoftware.com/)\n- [wings3d](http://www.wings3d.com/)\n- [winxound](https://winxound.codeplex.com/)\n- [wireover](http://www.wireover.com/)\n- [wireshark](http://www.wireshark.org)\n- [wiretap-studio](http://www.ambrosiasw.com/utilities/wiretap/)\n- [witch](http://manytricks.com/witch/)\n- [witgui](http://desairem.altervista.org/witgui/wordpress/)\n- [wiznote](http://www.wiznote.com/)\n- [wiztoolsorg-restclient](https://code.google.com/p/rest-client)\n- [wjoy](https://code.google.com/p/wjoy/)\n- [wondershare-player](http://www.wondershare.com/video-player/)\n- [woodhouse](https://github.com/phinze/woodhouse/)\n- [wordservice](http://www.devontechnologies.com/products/freeware.html#c1115)\n- [worksnaps-client](http://www.worksnaps.net/)\n- [wowhead-client](http://wowhead.com)\n- [wraparound](http://www.digicowsoftware.com/detail?_app=Wraparound)\n- [wuala](http://wuala.com)\n- [wyzo](http://wyzo.com)\n\n#### X\n\n- [x-lite](http://www.counterpath.com/x-lite.html)\n- [x-mirage](http://www.x-mirage.com/x-mirage/)\n- [x-moto](http://xmoto.tuxfamily.org)\n- [x2goclient](http://x2go.org)\n- [x48](http://blog.sharkus.com/2012/08/osx-hp48-emulators.html)\n- [xact](http://xact.scottcbrown.org)\n- [xamarin-android](http://xamarin.com/android)\n- [xamarin-ios](http://xamarin.com/ios)\n- [xamarin-studio](http://xamarin.com/studio)\n- [xamarin](http://xamarin.com/platform)\n- [xampp](http://www.apachefriends.org/index.html)\n- [xaos](http://matek.hu/xaos)\n- [xbench](http://xbench.com/)\n- [xbmc](http://xbmc.org/)\n- [xbox360-controller-driver](http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver)\n- [xca](http://xca.sourceforge.net/)\n- [xee](http://xee.c3.cx/)\n- [xiami](http://www.xiami.com/)\n- [xld](http://tmkk.undo.jp/xld/index_e.html)\n- [xmarks-safari](http://www.xmarks.com/)\n- [xmind](http://www.xmind.net)\n- [xmrouter](http://www1.miwifi.com/)\n- [xnconvert](http://www.xnview.com/en/xnconvert/)\n- [xnviewmp](http://www.xnview.com/)\n- [xquartz](http://xquartz.macosforge.org/)\n- [xrg](http://www.gauchosoft.com/Products/XRG/)\n- [xscope](http://iconfactory.com/software/xscope)\n- [xscreensaver](http://www.jwz.org/xscreensaver/)\n- [xslimmer](http://latenitesoft.com/xslimmer/)\n- [xtorrent](http://www.xtorrent.com)\n- [xtrafinder](http://www.trankynam.com/xtrafinder/)\n\n#### Y\n\n- [yabumi](https://yabumi.cc/)\n- [yacreader](http://www.yacreader.com)\n- [yandex](http://browser.yandex.com/)\n- [yandexdisk](https://disk.yandex.com/)\n- [yasu](http://yasuapp.net)\n- [yemuzip](http://www.yellowmug.com/yemuzip)\n- [ynab](http://www.youneedabudget.com/)\n- [yojimbo](http://www.barebones.com/products/yojimbo/)\n- [yorufukurou](https://sites.google.com/site/yorufukurou/home-en)\n- [youdao](http://cidian.youdao.com/mac/)\n- [youll-never-take-me-alive](https://github.com/iSECPartners/yontma-mac)\n- [younited](http://www.younited.com/index.html)\n- [youview](https://mrgeckosmedia.com/applications/info/YouView)\n- [yubikey-personalization-gui](http://www.yubico.com/products/services-software/personalization-tools/use/)\n- [yubiswitch](https://github.com/pallotron/yubiswitch)\n\n#### Z\n\n- [zed](http://zedapp.org)\n- [zendserver](http://www.zend.com/en/products/server/)\n- [zendstudio](http://www.zend.com/en/products/studio/)\n- [zepheer](http://candysquare.com/products/zepheer/)\n- [zephyros](https://github.com/sdegutis/zephyros)\n- [zeroad](http://www.play0ad.com/)\n- [zeroinstall](http://0install.net)\n- [zeroxdbe-eap](http://www.jetbrains.com/dbe/)\n- [zeroxed](http://www.suavetech.com/0xed/)\n- [zipcleaner](http://roger-jolly.nl/software/#zipcleaner)\n- [zipeg](http://www.zipeg.net/)\n- [zoc](http://www.emtec.com/zoc/)\n- [zoomus](http://www.zoom.us)\n- [zooom](http://coderage-software.com/zooom)\n- [zotero](http://www.zotero.org/)\n- [zterm](http://www.dalverson.com/zterm/)\n\n"
  },
  {
    "path": "chai.md",
    "content": "---\ntitle: Chai.js\ncategory: JavaScript libraries\nweight: -3\nupdated: 2018-06-25\nversion: chai v4.x\ndescription: |\n  expect(x).to.be.equal(y) 〉 assert.equal(x, y) 〉 .to.be.true 〉 jQuery, assertions, TDD and BDD, and other Chai examples.\n---\n\n### Assert\n\n```js\nconst { assert } = require('chai')\n```\n{: .-setup}\n\n```js\nassert(val)\nassert.fail(actual, expected)\nassert.ok(val)                        // is truthy\nassert.equal(actual, expected)        // compare with ==\nassert.strictEqual(actual, expected)  // compare with ===\nassert.deepEqual(actual, expected)    // deep equal check\n```\n\n```js\nassert.isTrue(val)\nassert.isFalse(val)\n```\n\n```js\nassert.isNull(val)\nassert.isNotNull(val)\nassert.isUndefined(val)\nassert.isDefined(val)\nassert.isFunction(val)\nassert.isObject(val)\nassert.isArray(val)\nassert.isString(val)\nassert.isNumber(val)\nassert.isBoolean(val)\n```\n\n```js\nassert.typeOf(/tea/, 'regexp') // Object.prototype.toString()\nassert.instanceOf(chai, Tea)\nassert.include([ a,b,c ], a)\nassert.match(val, /regexp/)\nassert.property(obj, 'tea') // 'tea' in object\nassert.deepProperty(obj, 'tea.green')\nassert.propertyVal(person, 'name', 'John')\nassert.deepPropertyVal(post, 'author.name', 'John')\n```\n\n```js\nassert.lengthOf(object, 3)\nassert.throws(function() { ... })\nassert.throws(function() { ... }, /reference error/)\nassert.doesNotThrow\n```\n\n```js\nassert.operator(1, '<', 2)\nassert.closeTo(actual, expected)\n```\n\nSee: [Assert API](http://chaijs.com/api/assert/) _(chaijs.com)_\n\n### BDD syntax\n\n```js\nconst { expect } = require('chai')\n```\n{: .-setup}\n\n```js\nexpect(object)\n  .to.equal(expected)\n  .to.eql(expected)        // deep equality\n  .to.deep.equal(expected) // same as .eql\n  .to.be.a('string')\n  .to.include(val)\n```\n\n```js\n  .be.ok(val)\n  .be.true\n  .be.false\n  .to.exist\n```\n\n```js\n  .to.be.null\n  .to.be.undefined\n  .to.be.empty\n  .to.be.arguments\n  .to.be.function\n  .to.be.instanceOf\n```\n\n```js\n  .to.be.gt(5)  // aka: .above .greaterThan\n  .to.be.gte(5) // aka: .at.least\n  .to.be.lt(5)  // aka: .below\n```\n\n```js\n  .to.respondTo('bar')\n  .to.satisfy((n) => n > 0)\n```\n\n```js\n  .to.have.members([2, 3, 4])\n  .to.have.keys(['foo'])\n  .to.have.key('foo')\n  .to.have.lengthOf(3)\n```\n\n```js\nexpect(() => { ··· })\n  .to.throw(/not a function/)\n```\n\nSee: [BDD](http://chaijs.com/api/bdd/) _(chaijs.com)_\n\n### Should: chains\n\n    .to .be .been .is .that .and .have .with .at .of .same\n\nThese don't do anything and can be chained.\n\n### Should not\n\n```js\nexpect(object).not.equal('x')\n```\n\n## Chai with jQuery\n\n### Using chai-jquery\n\n```js\nglobal.jQuery = ···\nchai.use(require('chai-jquery'))\n```\n{: .-setup}\n\n```js\nexpect($body)\n  .have.attr('foo')\n  .have.prop('disabled')\n  .have.css('background')\n  .have.css('background-color', '#ffffff')\n  .have.data('foo')\n```\n\n```js\n  .have.class('active')\n  .have.id('id')\n```\n\n```js\n  .have.html('<em>hi</em>')\n  .have.text('hello')\n  .have.value('2013')\n```\n\n### Continued\n\n```js\nexpect($body)\n```\n\n```js\n  .be.visible\n  .be.hidden\n```\n\n```js\n  .be.checked\n  .be.selected\n```\n\n```js\n  .be.enabled\n  .be.disabled\n```\n\n```js\n  .be.empty\n  .to.exist\n  .to.contain('text')\n  .to.have('.selector')\n```\n"
  },
  {
    "path": "cheatsheet-styles.md",
    "content": "---\ntitle: Cheatsheet styles\ntags: [WIP]\nupdated: 2017-10-26\nintro: |\n  This is a reference of styles that you can use on Devhints cheatsheets. How\n  meta!\n  You can refer to this when contributing your own cheatsheets to the [GitHub repo](https://github.com/rstacruz/cheatsheets/).\n---\n\nIntro\n-----\n\nVariants\n--------\n{: .-three-column}\n\n### H2 sections\n\n| `-one-column` | |\n| `-two-column` | _(default)_|\n| `-three-column` | |\n| `-left-reference` | 3 columns<br>_(short first column)_ |\n\nSee: [H2 sections](#two-columns)\n\n### H3 sections\n\n| `-prime` | Highlight |\n\nSee: [H3 sections](#h3-sections-1)\n\n### Tables\n\n| `-bold-first` | Bold first column |\n| `-headers` | Show headers |\n| `-left-align` | Don't right align last column |\n| `-mute-em` | Lower opacity for italics |\n| `-no-wrap` | Don't wrap text |\n| `-shortcuts` | Shortcut keys |\n\nSee: [Tables](#tables-1)\n\n### Code\n\n| `-box-chars` | Less line height<br>_for box drawing chars_ |\n| `-setup` | Gray background |\n| `-wrap` | Enables line-wrapping |\n\nSee: [Code](#code-1)\n\n### Paragraphs\n\n| `-setup` | Gray background |\n| `-crosslink` | Has arrow on the link |\n{: .-gray}\n\nSee: [Paragraphs](#paragraphs-1)\n\n### Lists\n\n| `-also-see` | Lighter background |\n| `-four-column` | |\n| `-six-column` | |\n\nSee: [Lists](#lists-1)\n\n### Adding variants\n{: .-prime}\n\n```\n## Section\n{: .-two-column}\n```\n\nDevhints uses Kramdown, and supports adding classes via Kramdown's syntax.\n\nH3 sections\n-----------\n{: .-three-column}\n\n### Supported\n\nEach section can have the following children:\n\n#### White\n\n- `pre`\n- `ul`\n- `table`\n\n#### Gray\n\n- `p`\n- `h4`\n\n### Prime section\n{: .-prime}\n\nThis is a section with `{: .-prime}`. Notice the fancy highlight! Great for \"getting started\" kind of snippets.\n\n### H3 section\n\nEvery box is an H3 section. The box will encompass everything inside the body of the H3.\n\nThis is a basic section with paragraphs in it.\n\nCode\n----\n{: .-three-column}\n\n### Basic code\n\n```js\nhere.is(() => {\n  some.code()\n})\n```\n\n```js\nhere.is.some.more()\n```\n\nCode blocks can be placed one after the other.\n\nSee: [Cheatsheets](/)\n\n### Code with headings\n\n#### index.js\n{: .-file}\n\n```js\nhere.is(() => {\n  some.code()\n})\n```\n\n#### other.js\n{: .-file}\n\n```js\nhere.is.some.more()\n```\n\nCode blocks can have headings.\n\n### Highlighted lines\n\n```js\napp.start(() => {\n  const port = app.server.port\n  console.log(`Started at ${port}`)\n})\n```\n{: data-line=\"3\"}\n\nAdd `{: data-line=\"3\"}` to add line highlights.\n\n### Multiple highlights\n\n```js\napp.start(() => {\n  const port = app.server.port\n  console.log(`Started at ${port}`)\n})\n```\n{: data-line=\"2,3\"}\n\nAdd `{: data-line=\"2,3\"}` to add multiple line highlights.\n\n### Setup blocks\n\n```js\nimport React from 'react'\n```\n{: .-setup}\n\n```js\nclass Hello extends React.Component {\n  render () {\n    return <span>Hello</span>\n  }\n}\n```\n\nAdd `{: .-setup}` to a `pre` or `table` or `ul`.\n\n### Long lines\n\n```js\nfunction createNode(nodeName: string, options: { key: string }) {\n  return true\n}\n```\n\nLong lines will have scrollbars.\n\n### Line wrapping\n\n```js\n<script>(function(d,s){if(window.Promise&&[].includes&&Object.assign&&window.Map)return;var js,sc=d.getElementsByTagName(s)[0];js=d.createElement(s);js.src='https://cdn.polyfill.io/v2/polyfill.min.js';sc.parentNode.insertBefore(js, sc);}(document,'script'))</script>\n```\n{: .-wrap}\n\nAdd `-wrap` to wrap long lines.\n\n## Lists\n{: .-three-column}\n\n### Lists\n\n- This is\n- a list\n- with a few items\n\nHere's an extra paragraph after the list.\n\n### Lists with headings\n\n#### Part 1\n\n- `createElement()`\n- `componentDidMount()`\n- `componentWillUnmount()`\n\n#### Part 2\n\n- `shouldComponentUpdate()`\n- `componentWillReceiveProps()`\n\n\nHere's an extra paragraph after the list.\n\n## List columns\n{: .-one-column}\n\n### Six columns\n\n- One\n- Two\n- Three\n- Four\n- Five\n- Six\n- Seven\n- Eight\n- Nine\n- Ten\n- Eleven\n{: .-six-column}\n\nAdd `{: .-six-column}` to make large lists.\n\n### Four columns\n\n- One\n- Two\n- Three\n- Four\n- Five\n- Six\n- Seven\n- Eight\n- Nine\n- Ten\n- Eleven\n{: .-four-column}\n\nAdd `{: .-four-column}` to make large lists.\n\n### Also see\n\n- One\n- Two\n- Three\n- Four\n- Five\n- Six\n- Seven\n- Eight\n- Nine\n- Ten\n{: .-also-see}\n\nAdd `{: .-also-see}`.\n\n## Paragraphs\n{: .-three-column}\n\n### Basic paragraphs\n\nThis is a basic section with paragraphs in it. When paragraphs are the first elements in an H3 section's body, they appear as white.\n\n### Basic paragraphs\n\n```\n···\n```\n\nWhen paragraphs appear after `pre`/`table`/`ul`, they appear with a gray background.\n\n### Preludes\n\nHere's a prelude paragraph. Add `{: .-setup}` to make paragraphs appear with a gray background.\n{: .-setup}\n\n```\n···\n```\n\n### Crosslink\n\nAdd `{: .-crosslink}` to make big loud external links:\n\n```\n···\n```\n\n[Home](/)\n{: .-crosslink}\n\n## Tables\n{: .-three-column}\n\n### Basic table\n\n#### Date\n\n| Example         | Output                 |\n| ---             | ---                    |\n| `%m/%d/%Y`      | `06/05/2013`           |\n| `%A, %B %e, %Y` | `Sunday, June 5, 2013` |\n| `%b %e %a`      | `Jun 5 Sun`            |\n\n#### Time\n\n| Example         | Output                 |\n| ---             | ---                    |\n| `%H:%M`         | `23:05`                |\n| `%I:%M %p`      | `11:05 PM`             |\n\nThis is a basic table with h4's.\n\n### Shortcuts\n\n| `V` | Vector |\n| `P` | Pencil |\n| `T` | Text |\n| `L` | Line |\n| `R` | Rectangle |\n| `O` | Oval |\n| `U` | Rounded |\n{: .-shortcuts}\n\nAdd `{: .-shortcuts}` to tables.\n\n### With headers\n\n| Prefix | Example               | What     |\n| ---    | ---                   | ---      |\n| `//`   | `//hr[@class='edge']` | Anywhere |\n| `./`   | `./a`                 | Relative |\n| `/`    | `/html/body/div`      | Root     |\n{: .-headers}\n\nAdd `{: .-headers}` to add headers.\n\n## Two columns\n\n### One\n\n```\n···\n```\n\n### Two\n\n```\n···\n```\n\n## Left reference\n{: .-left-reference}\n\n### One\n\n```\n···\n···\n···\n···\n···\n···\n···\n···\n```\n\n### Two\n\n```\n···\n```\n\n### Three\n\n```\n···\n```\n\n## One column\n{: .-one-column}\n\n### One\n\n```\n···\n```\n"
  },
  {
    "path": "chef.md",
    "content": "---\ntitle: Chef\ncategory: Devops\n---\n\n### Install\n\nIn your server:\n{: .-setup}\n\n```bash\n$ sudo apt-get install curl\n```\n\n```bash\n$ curl -L https://omnitruck.chef.io/install.sh | sudo bash\nThank you for installing Chef!\n```\n\n```bash\n$ chef-solo -v\n...\nChef: 14.5.33\n```\n\n### Start the cookbook\n\n```bash\n wget http://github.com/chef-cookbooks/chef-repo/tarball/master -O - | tar xzf - --strip-components=1\n```\n\n### Knife\n\n```bash\n$ knife supermarket download mysql\n```\n\n### Invoking chef-solo\n\n```bash\n$ chef-solo -c solo.rb -j web.json\n```\n\n## Examples\n\n### Simple compile-from-source\n\n```ruby\nexecute \"tar --no-same-owner -zxf hi.tar.gz\" do\n  cwd \"/usr/local/src\"\n  creates \"/usr/local/src/node-v#{version}\"\nend\n```\n\n```ruby\nbash \"compile\" do\n  cwd \"/usr/local/src/node-v#{version}\"\n  code %[\n    PATH=/usr/local/bin:$PATH\n    ./configure\n    make\n  ]\n  creates \"/usr/local/src/node-v#{version}/node\"\nend\n```\n\n### remote file\n\n```ruby\nremote_file \"/usr/local/src/hi.tar.gz\" do\n  source \"http://...\"\n  checksum \"ab83be...\"\n  mode 0644\n  action :create_if_missing\nend\n```\n\n### ruby_block\n\n```ruby\nruby_block \"name\" do\n  block { File.read ... }\n  not_if { File.exists?(...) }\nend\n```\n\n### Execute\n\n```ruby\nexecute \"name\" do\n  cwd \"...\"\n  environment({ \"PATH\" => \"...\" })\n  command \"make install\"\n  creates \"...\"\nend\n```\n\n### Conditions\n\n```ruby\n  creates \"/usr/local/src/node-v#{version}/node\"\n  not_if { File.exists?('...') }\n```\n\n## Also see\n\n* [Learn Chef Rally](https://learn.chef.io) _(learn.chef.io)_\n* [install_from_source.rb recipe](https://github.com/mdxp/nodejs-cookbook/blob/master/recipes/install_from_source.rb) _(github.com)_\n"
  },
  {
    "path": "chunky_png.md",
    "content": "---\ntitle: Chunky PNG\ncategory: Ruby libraries\n---\n\n### Loading\n\n```ruby\nimage = ChunkyPNG::Image.from_file('file.png')\n```\n\n#### Alternate ways\n\n```ruby\nimage = ChunkyPNG::Image.from_blob(File.read('file.png'))\nimage = ChunkyPNG::Image.from_io(io) \n```\n\nLoads from `file.png`.\n\n### Saving\n\n```ruby\nimage.save('filename.png')\n```\n\n#### Alternate ways\n\n```ruby\nFile.open('newfile.png', 'wb') { |io| image.write(io) }\nbinary_string = image.to_blob\n```\n\nWrites an image to `newfile.png`.\n\n### Drawing\n\n```ruby\nimage[0, 0] = ChunkyPNG::Color.rgba(255, 0,0, 128)\nimage.line(1, 1, 10, 1, ChunkyPNG::Color.from_hex('#aa007f'))\n```\n\n### Canvas\n\n```ruby\ncrop(x, y, w, h)\n```\n\n### Transforms\n\n```ruby\nnew_image = image.flip_horizontally.rotate_right\n```\n"
  },
  {
    "path": "cidr.md",
    "content": "---\ntitle: CIDR\ncategory: Misc\nupdated: 2018-05-14\n---\n\n### CIDR ranges\n\n| Range           | First IP | Last IP        |\n| ---             | ---      | ---            |\n| **10.0.0.0/24** | 10.0.0.0 | 10.0.0.255     |\n| **10.0.0.0/16** | 10.0.0.0 | 10.0.255.255   |\n| **10.0.0.0/8**  | 10.0.0.0 | 10.255.255.255 |\n| **0.0.0.0/0**   | (all)    | (all)          |\n\n### Resources\n\n- [CIDR range calculator](http://ipaddressguide.com/cidr#range) _(ipaddressguide.com)_\n"
  },
  {
    "path": "circle.md",
    "content": "---\ntitle: CircleCI\ncategory: Devops\n---\n\n### About\n{: .-intro}\n\n- <https://circleci.com/docs/config-sample>\n\n### circle.yml\n\n* __machine__: adjusting the VM to your preferences and requirements\n* __checkout__: checking out and cloning your git repo\n* __dependencies__: setting up your project's language-specific dependencies\n* __database__: preparing the databases for your tests\n* __test__: running your tests\n* __deployment__: deploying your code to your web servers\n\nSee: <https://circleci.com/docs/configuration>\n\n### Sample\n\n```yml\n## Customize the test machine\nmachine:\n\n  timezone:\n    America/Los_Angeles # Set the timezone\n\n  # Version of ruby to use\n  ruby:\n    version:\n      1.8.7-p358-falcon-perf\n\n  # Override /etc/hosts\n  hosts:\n    circlehost: 127.0.0.1\n    dev.mycompany.com: 127.0.0.1\n\n  # Add some environment variables\n  environment:\n    CIRCLE_ENV: test\n    DATABASE_URL: postgres://ubuntu:@127.0.0.1:5432/circle_test\n\n## Customize checkout\ncheckout:\n  post:\n    - git submodule sync\n    - git submodule update --init # use submodules\n\n## Customize dependencies\ndependencies:\n  pre:\n    - npm install coffeescript # install from a different package manager\n    - gem uninstall bundler # use a custom version of bundler\n    - gem install bundler --pre\n\n  override:\n    - bundle install: # note ':' here\n        timeout: 180 # fail if command has no output for 3 minutes\n\n  # we automatically cache and restore many dependencies between\n  # builds. If you need to, you can add custom paths to cache:\n  cache_directories:\n    - \"custom_1\"   # relative to the build directory\n    - \"~/custom_2\" # relative to the user's home directory\n\n## Customize database setup\ndatabase:\n  override:\n    # replace CircleCI's generated database.yml\n    - cp config/database.yml.ci config/database.yml\n    - bundle exec rake db:create db:schema:load\n\n## Customize test commands\ntest:\n  override:\n    - phpunit test/unit-tests # use PHPunit for testing\n  post:\n    - bundle exec rake jasmine:ci: # add an extra test type\n        environment:\n          RAILS_ENV: test\n          RACK_ENV: test\n\n## Customize deployment commands\ndeployment:\n  staging:\n    branch: master\n    heroku:\n      appname: foo-bar-123\n\n## Custom notifications\nnotify:\n  webhooks:\n    # A list of hashes representing hooks. Only the url field is supported.\n    - url: https://someurl.com/hooks/circle\n```\n"
  },
  {
    "path": "claude-code.md",
    "content": "---\ntitle: Claude Code\ncategory: AI\ntags: [Featured]\nupdated: 2025-01-08\nkeywords:\n  - AI assistant\n  - CLI\n  - Code generation\n  - File operations\n  - Interactive mode\n  - Memory management\n---\n\n## Getting started\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\n[Claude Code](https://claude.ai/code) is an AI-powered CLI assistant for software engineering tasks. This reference covers the most commonly used commands and features.\n\n- [Claude Code docs](https://docs.anthropic.com/en/docs/claude-code) _(docs.anthropic.com)_\n- [GitHub repository](https://github.com/anthropics/claude-code) _(github.com)_\n\n### Installation & Setup\n\n```bash\n# Install Claude Code\nnpm install -g @anthropics/claude-code\n\n# Login with API key\nclaude auth login\n\n# Check authentication status\nclaude auth status\n```\n\n### Quick Start\n\n```bash\n# Start interactive session\nclaude\n\n# Run a single command\nclaude \"help me write a Python function\"\n\n# Resume previous session\nclaude --resume\n```\n\n## Core Commands\n{: .-three-column}\n\n### Interactive Mode\n{: .-prime}\n\n| Command                    | Description                        |\n| -------------------------- | ---------------------------------- |\n| `claude`                   | Start interactive session          |\n| `claude --resume`          | Resume last session                |\n| `claude --memory`          | Start with memory enabled          |\n| `/help`                    | Show help and available commands   |\n| `/clear`                   | Clear current conversation         |\n| `/exit`                    | Exit interactive mode              |\n{: .-shortcuts}\n\n### File Operations\n\n| Command                    | Description                        |\n| -------------------------- | ---------------------------------- |\n| `claude \"read file.py\"`    | Read and analyze a file            |\n| `claude \"edit file.py\"`    | Edit an existing file              |\n| `claude \"create file.py\"`  | Create a new file                  |\n| `claude \"fix tests\"`       | Fix failing tests                  |\n| `claude \"refactor code\"`   | Refactor existing code             |\n{: .-shortcuts}\n\n### Git Integration\n\n| Command                         | Description                        |\n| ------------------------------- | ---------------------------------- |\n| `claude \"create commit\"`        | Create git commit with message     |\n| `claude \"create PR\"`            | Create pull request                |\n| `claude \"review changes\"`       | Review git changes                 |\n| `claude \"fix merge conflicts\"`  | Help resolve merge conflicts       |\n{: .-shortcuts}\n\n## Advanced Features\n{: .-three-column}\n\n### Memory Management\n\n```bash\n# Enable memory for current session\nclaude --memory\n\n# View memory contents\nclaude \"show memory\"\n\n# Clear memory\nclaude \"clear memory\"\n```\n\n### Extended Thinking\n\n```bash\n# Enable deeper analysis\nclaude --think\n\n# Complex problem solving\nclaude \"analyze this codebase and suggest improvements\"\n```\n\n### Image Analysis\n\n```bash\n# Analyze screenshot or diagram\nclaude \"analyze this screenshot\" --image path/to/image.png\n\n# Paste image from clipboard\nclaude \"explain this diagram\" # then paste image\n```\n\n## Slash Commands\n{: .-three-column}\n\n### Session Management\n\n| Command      | Description                          |\n| ------------ | ------------------------------------ |\n| `/help`      | Show available commands              |\n| `/clear`     | Clear conversation history           |\n| `/reset`     | Reset conversation state             |\n| `/exit`      | Exit interactive mode                |\n| `/version`   | Show Claude Code version             |\n{: .-shortcuts}\n\n### Settings\n\n| Command        | Description                        |\n| -------------- | ---------------------------------- |\n| `/settings`    | Show current settings              |\n| `/model`       | Change AI model                    |\n| `/memory on`   | Enable memory                      |\n| `/memory off`  | Disable memory                     |\n{: .-shortcuts}\n\n### Productivity\n\n| Command        | Description                        |\n| -------------- | ---------------------------------- |\n| `/save`        | Save conversation                  |\n| `/load`        | Load previous conversation         |\n| `/export`      | Export conversation to file        |\n{: .-shortcuts}\n\n## Common Workflows\n{: .-three-column}\n\n### Code Review\n\n```bash\n# Review specific file\nclaude \"review this code for bugs\" file.py\n\n# Review all changes\nclaude \"review my git changes\"\n\n# Check code quality\nclaude \"suggest improvements\" src/\n```\n\n### Testing\n\n```bash\n# Generate tests\nclaude \"write tests for this function\"\n\n# Fix failing tests\nclaude \"fix these test failures\"\n\n# Test coverage analysis\nclaude \"analyze test coverage\"\n```\n\n### Documentation\n\n```bash\n# Generate README\nclaude \"create README for this project\"\n\n# Add code comments\nclaude \"add documentation to this function\"\n\n# API documentation\nclaude \"generate API docs\"\n```\n\n### Debugging\n\n```bash\n# Debug error\nclaude \"help debug this error: [error message]\"\n\n# Performance analysis\nclaude \"why is this code slow?\"\n\n# Code explanation\nclaude \"explain how this works\" complex_function.py\n```\n\n## IDE Integrations\n{: .-three-column}\n\n### VS Code\n\n```bash\n# Install VS Code extension\ncode --install-extension anthropic.claude-code\n\n# Open in VS Code\nclaude --vscode\n\n# VS Code commands\nCtrl+Shift+P -> \"Claude: Ask\"\nCtrl+Shift+P -> \"Claude: Review\"\n```\n\n### Configuration\n\n```bash\n# Set default editor\nclaude config set editor code\n\n# Set working directory\nclaude config set workdir /path/to/project\n\n# View all settings\nclaude config list\n```\n\n## Best Practices\n{: .-three-column}\n\n### Effective Prompting\n\n```bash\n# Be specific about requirements\nclaude \"write a Python function that validates email addresses with regex\"\n\n# Provide context\nclaude \"in this Django project, add user authentication\"\n\n# Ask for explanations\nclaude \"explain this code and suggest improvements\"\n```\n\n### Project Structure\n\n```bash\n# Analyze entire project\nclaude \"analyze project structure and suggest improvements\"\n\n# Focus on specific areas\nclaude \"review the database models in models.py\"\n\n# Architecture decisions\nclaude \"should I use async here?\"\n```\n\n### Security\n\n```bash\n# Security review\nclaude \"check this code for security vulnerabilities\"\n\n# Best practices\nclaude \"make this code more secure\"\n\n# Audit dependencies\nclaude \"review package.json for security issues\"\n```\n\n## CLI Options\n{: .-three-column}\n\n### Global Options\n\n| Option              | Description                        |\n| ------------------- | ---------------------------------- |\n| `--help`            | Show help information              |\n| `--version`         | Show version number                |\n| `--resume`          | Resume previous session            |\n| `--memory`          | Enable memory                      |\n| `--think`           | Enable extended thinking           |\n| `--no-color`        | Disable colored output             |\n| `--verbose`         | Verbose logging                    |\n{: .-shortcuts}\n\n### Authentication\n\n| Command              | Description                        |\n| -------------------- | ---------------------------------- |\n| `claude auth login`  | Login with API key                 |\n| `claude auth logout` | Logout current session             |\n| `claude auth status` | Check authentication status        |\n| `claude auth whoami` | Show current user info             |\n{: .-shortcuts}\n\n### Configuration\n\n| Command                | Description                      |\n| ---------------------- | -------------------------------- |\n| `claude config set`    | Set configuration value          |\n| `claude config get`    | Get configuration value          |\n| `claude config list`   | List all configuration           |\n| `claude config reset`  | Reset to default configuration   |\n{: .-shortcuts}\n\n## Troubleshooting\n{: .-three-column}\n\n### Common Issues\n\n```bash\n# Clear authentication\nclaude auth logout && claude auth login\n\n# Reset configuration\nclaude config reset\n\n# Clear cache\nclaude --clear-cache\n\n# Debug mode\nclaude --verbose --debug\n```\n\n### Network Issues\n\n```bash\n# Check connectivity\nclaude \"test connection\"\n\n# Use proxy\nclaude --proxy http://proxy:8080\n\n# Timeout settings\nclaude config set timeout 30\n```\n\n### Memory Issues\n\n```bash\n# Clear memory\nclaude \"clear memory\"\n\n# Disable memory\nclaude --no-memory\n\n# Memory usage\nclaude \"show memory usage\"\n```\n\n## Environment Variables\n\n| Variable              | Description                        |\n| --------------------- | ---------------------------------- |\n| `CLAUDE_API_KEY`      | API key for authentication         |\n| `CLAUDE_MODEL`        | Default model to use               |\n| `CLAUDE_MEMORY`       | Enable memory by default           |\n| `CLAUDE_EDITOR`       | Default text editor                |\n| `CLAUDE_WORKDIR`      | Default working directory          |\n| `NO_COLOR`            | Disable colored output             |\n\n## Also see\n{: .-one-column}\n\n- [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code) _(docs.anthropic.com)_\n- [GitHub repository](https://github.com/anthropics/claude-code) _(github.com)_\n- [Claude API docs](https://docs.anthropic.com/en/api) _(docs.anthropic.com)_\n- [Community discussions](https://github.com/anthropics/claude-code/discussions) _(github.com)_"
  },
  {
    "path": "clip.md",
    "content": "---\ntitle: Command Line Interface Pages\ncategory: CLI\nupdated: 2023-02-23\nkeywords:\n  - CLI\n---\n\n### Page layout\n\n```md\n# command\n\n> Some command description\n> More information: https://some/link/to/url\n\n- Some code description:\n\n`command argument1 argument2`\n```\n\n### [Primitive placeholders](https://github.com/command-line-interface-pages/syntax/blob/main/type-specific/cli.md#primitive-placeholders)\n\n```md\n- Delay in [s]econds:\n\n`sleep {int seconds: 2}s`\n```\n\n### [Primitive repeated placeholders](https://github.com/command-line-interface-pages/syntax/blob/main/type-specific/cli.md#repeated-primitive-placeholders)\n\n```md\n- [c]reate an archive and write it to a [f]ile:\n\n`tar {option mode: --create, -c} {option: --file, -f} {/?file archive: target.tar} {/?path+ input}`\n```\n\n### Also see\n{: .-one-column}\n\n* [Render](https://github.com/command-line-interface-pages/v2-tooling/tree/main/clip-view)\n* [Page's repository](https://github.com/command-line-interface-pages/cli-pages)\n* [Syntax](https://github.com/command-line-interface-pages/syntax/blob/main/base.md)\n"
  },
  {
    "path": "co.md",
    "content": "---\ntitle: co\ncategory: JavaScript libraries\nupdated: 2017-10-27\nweight: -1\nintro: |\n  [co](https://github.com/tj/co) allows you to use generators to manage async flow.\n---\n\n[co]: https://github.com/tj/co\n[thunkify]: https://github.com/visionmedia/node-thunkify\n[unyield]: https://github.com/MatthewMueller/unyield\n[thenify]: https://www.npmjs.com/package/thenify\n[mz]: https://www.npmjs.com/package/mz\n\n### Running generators\n\n```js\nco(function * () {\n  yield Promise.resolve(true)\n}).then(...)\n```\n\nA generator can `yield` a thunk or promise. Using `co()` will immediately invoke the block inside it.\n\n### Generator → Promise\n\n```js\nvar fn = co.wrap(function * (val) {\n  return yield Promise.resolve(val)\n})\n\nfn().then(...)\n```\n\nUse `co.wrap()`. Most of the time, you'll be using co.wrap.\n\n### Generator → Node callback\n\n```js\nvar get = unyield(function * () {\n})\n\nget(function (err, res) { ... })\n```\n\nUse [unyield]. (You can [thunkify] this later)\n\n\n### Node callback → Thunk\n\n```js\nvar readFile = thunkify(fs.readFile)\n\nco(function * () {\n  var data = yield readFile('index.txt', 'utf-8')\n})\n```\n\nUse [thunkify]. You can yield this. You can also use [thenify] too.\n\n### Using Node.js API\n\n```js\nvar readFile = require('mz/fs').readFile\n\nvar getLines = co.wrap(function * (filename) {\n  var data = yield readFile(filename, 'utf-8')\n  return data.split('\\n')\n})\n\ngetLines('file.txt').then((lines) => { ... })\n```\n\nUse [mz] for async Node.js API. You can also either [thunkify] or [thenify] them instead.\n"
  },
  {
    "path": "command_line.md",
    "content": "---\ntitle: Command line stuff\n---\n\n## List (ls)\n{: .-three-column}\n\n### Usage\n\n    ls [options] [paths]\n\n### Format\n\n| Switch | Description |\n|---|---|\n| `-1` | One entry per line |\n| `-l` | Long view |\n| `-o` | Long view (without groups) |\n| `-C` | Multicolumn (sorted horizontally) |\n| `-x` | Multicolumn (sorted vertically) |\n|---\n| `-F` | Add / after directories |\n| `-G` | Color |\n\n### Options\n\n| `-R` | Recurse |\n| `-a` | Include hidden (dotfiles) |\n| `-A` | Include hidden (but not . and ..) |\n\n### Sorting\n\n| Switch | Description |\n|---|---|\n| `-r` | reverse order |\n| `-S` | sort by size |\n| `-t` | sort by time modified |\n| `-u` | sort by time accessed |\n| `-U` | sort by time created |\n| `-c` | sort by time status was changed |\n|---\n| `-h` | Human-readable size (3k) |\n\n## Tail\n{: .-three-column}\n\n### Usage\n\n    tail [-F | -f | -r] [-bN | -cN | -nN] [file ...]\n\n### Modes\n\n| `-f` | follow |\n| `-F` | follow by filename (accounts for log rotation) |\n| `-r` | Reverse order |\n\n### Options\n\n| `-bN` | N*512 bytes |\n| `-cN` | N bytes |\n| `-nN` | N lines |\n| `+N`  | Start from line N |\n\n<br>\n\n## Sudo\n{: .-three-column}\n\n### Usage\n\n```\nsudo [options] <command>\n```\n\n### Listing\n\n| `-l` | List allowed commands |\n\n### Options\n\n| `-A` | Use $SUDO_ASKPASS |\n| `-b` | Run in background |\n| `-E` | Preserve environment |\n| `-H` | use target's $HOME |\n| `-n` | Don't prompt for password |\n| `-P` | Preserve group vector |\n| `-S` | Read password from stdin |\n\n### File descriptors\n\n| `-C fd` | Close all open file descriptors |\n\n### Prompt\n\n| `-p prompt` | Custom prompt (-p \"%p password:\") |\n\n### Interactive\n\n| Switch | Description |\n|---|---|\n| `-i [cmd]` | Interactive shell without variables |\n| `-s [cmd]` | Interactive shell |\n|----\n| `-u user` | run as this user |\n| `-g group` | run as this group |\n\n### Timestamp\n\n| `-v` | revalidate timestamp for 5 mins |\n| `-k` | invalidate timestamp |\n| `-K` | just like -k |\n\n## wc (Word count)\n{: .-three-column}\n\n### wc\n\n```\n... | wc [options]\n```\n\n### Options\n\n| `-c` | Bytes |\n| `-l` | Lines |\n| `-m` | Characters (incl multi-byte) |\n| `-w` | Words |\n\n## Grep\n{: .-three-column}\n\n### Usage\n\n```\ngrep [options] [pattern] [file ...]\n```\n\n### Options\n\n| Switch | Description |\n|---|---|\n| `-A num` | Print `num` lines of training context |\n|----\n| `-G` | --basic-regexp (default) |\n| `-E` | --extended-regexp |\n| `-P` | --perl-regexp |\n|----\n| `-f file` | --file (Get patterns for file) |\n| `-F` | --fixed-strings |\n|----\n| `-h` | --no-filename |\n| `-H` | --with-filename |\n|----\n| `-l` | --files-with-matches (just print filenames) |\n| `-L` | --files-without-match |\n|----\n| `-r, -R` | --recursive |\n| `-v` | --invert-match |\n| `-i` | --ignore-case |\n\n### Synonyms\n\n    egrep  =>  grep -E\n    fgrep  =>  grep -F\n\n## Other recipes\n{: .-three-column}\n\n### Search-and-replace in all files\n\n    perl -p -i -e 's/hello/HELLO/g' **/*\n"
  },
  {
    "path": "commander.js.md",
    "content": "---\ntitle: Commander.js\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\n- <https://github.com/tj/commander.js/>\n\n### Initialize\n\n    var cli = require('commander');\n\n### Options\n\n    cli\n      .version(require('../package').version)\n      .usage('[options] <command>')\n      .option('-w, --words <n>', 'generate <n> words')\n      .option('-i, --interval <n>', 'interval [1000]', 1000)\n      .option('-s, --symbols', 'include symbols')\n      .parse(process.argv);\n\n### Help\n\n    .on('--help', function() {\n      console.log('');\n    })\n\n### Commands\n\n    cli.outputHelp();\n    cli.args == [\"hello\"];\n\n### Other useful things\n\n    process.exit(0);\n\n\n"
  },
  {
    "path": "composer.md",
    "content": "---\ntitle: composer\ncategory: CLI\nweight: -1\nauthors:\n  - github: benolot\nupdated: 2020-02-23\ndescription: |\n  Basic guide on how to use Composer, the PHP Package manager.\n---\n\nAll composer commands, depending on your install, may need to use `php composer.phar` in the install folder for composer, instead of global/plain `composer`.\n\n### Installing dependencies\n    \n| Command                                | Description                                                  |\n| ---                                    | ---                                                          |\n| `composer install`                     | Downloads and installs all the libraries and dependencies outlined in the `composer.lock` file. If the file does not exist it will look for composer.json and do the same, creating a `composer.lock` file.                          |\n| ---                                    | ---                                                          |\n| `composer install --dry-run`           | Simulates the install without installing anything            |\n\nThis command doesn't change any file. If `composer.lock` is not present, it will create it.\n\n`composer.lock` **should always** be committed to the repository. It has all the information needed to bring the \nlocal dependencies to the last committed state. If that file is modified on the repository, you will need to run \n`composer install` again after fetching the changes to update your local dependencies to those on that file.\n\n### Updating packages\n\n| Command                                       | Description                     |\n| ---                                           | ---                             |\n| `composer update`                             | Updates all packages             |\n| `composer update --with-dependencies`         | Updates all packages and its dependencies             |\n| ---                                           | ---                             |\n| `composer update vendor/package`              | Updates a certain `package` from `vendor`        |\n| `composer update vendor/*`                    | Updates all packages from `vendor` |\n| `composer update --lock`                      | Updates `composer.lock` hash without updating any packages |\n\nThis command changes only the `composer.lock` file.\n\n### Updating autoloader\n\n| Command                    | Description                        |\n| ---                        | ---                                |\n| `composer dumpautoload -o` | Generates optimized autoload files |\n\n### Adding packages\n\n| Command                          | Description                                                 |\n| ---                              | ---                                                         |\n| `composer require vendor/package`      | Adds `package` from `vendor` to composer.json's `require` section and installs it             |\n| ---                              | ---                                                         |\n| `composer require vendor/package --dev` | Adds `package` from `vendor` to composer.json's `require-dev` section and installs it.            |\n\nThis command changes both the `composer.json` and `composer.lock` files.\n\n### Passing versions\n\n| Command                                         | Description                              |\n| ----------------------------------------------- | ---------------------------------------- |\n| `composer require vendor/pkg \"1.3.2\"`           | Installs `1.3.2`                         |\n| `composer require vendor/pkg \">=1.3.2\"`         | Above or equal `1.3.2`                   |\n| `composer require vendor/pkg \"<1.3.2\"`          | Below `1.3.2`                            |\n| `composer require vendor/pkg \"1.3.*\"`           | Latest of `>=1.3.0 <1.4.0`               |\n| `composer require vendor/pkg \"~1.3.2\"`          | Latest of `>=1.3.2 <1.4.0`               |\n| `composer require vendor/pkg \"~1.3\"`            | Latest of `>=1.3.0 <2.0.0`               |\n| `composer require vendor/pkg \"^1.3.2\"`          | Latest of `>=1.3.2 <2.0.0`               |\n| `composer require vendor/pkg \"^1.3\"`            | Latest of `>=1.3.0 <2.0.0`               |\n| `composer require vendor/pkg \"^0.3.2\"`          | Latest of `>=0.3.0 <0.4.0` (for pre-1.0) |\n| `composer require vendor/pkg \"dev-BRANCH_NAME\"` | From the branch `BRANCH_NAME`            |\n\n### Removing packages\n\n| Command                   | Description                                                 |\n| ---                       | ---                                                         |\n| `composer remove vendor/package` | Removes `vendor/package` from composer.json and uninstalls it      |\n\nThis command changes both the `composer.json` and `composer.lock` files.\n\n### Verifying\n\n| Command                      | Description                                                                |\n| ---------------------------- | -------------------------------------------------------------------------- |\n| `composer outdated --direct` | Show only packages that are outdated directly required by the root package |\n"
  },
  {
    "path": "cordova.md",
    "content": "---\ntitle: Apache Cordova\nintro: |\n  A quick reference to common [Apache Cordova](https://cordova.apache.org/) commands.\n---\n\n### Common commands\n\n```\ncordova plugin ls\ncordova plugin search facebook\ncordova plugin add com.phonegap.plugins.facebookconnect\n```\n\n```\ncordova platform add ios\ncordova platform ls\ncordova platform update ios\ncordova platform check\n```\n\n### Common plugins\n\nSome commonly-used plugins:\n\n- [org.apache.cordova.console](https://github.com/apache/cordova-plugin-console)\n- [org.apache.cordova.inappbrowser](https://github.com/apache/cordova-plugin-inappbrowser)\n- [org.apache.cordova.statusbar](https://github.com/apache/cordova-plugin-statusbar)\n- org.apache.cordova.splashscreen\n\nAlso:\n\n- com.phonegap.plugins.facebookconnect\n"
  },
  {
    "path": "cron.md",
    "content": "---\ntitle: Cron\ncategory: CLI\nupdated: 2024-03-17\nweight: -3\n---\n\n## Format\n{: .-two-column}\n\n### Format\n\n```\nMin  Hour Day  Mon  Weekday\n```\n{: .-setup}\n\n```\n*    *    *    *    *  command to be executed\n```\n\n```\n┬    ┬    ┬    ┬    ┬\n│    │    │    │    └─  Weekday  (0=Sun .. 6=Sat)\n│    │    │    └──────  Month    (1..12)\n│    │    └───────────  Day      (1..31)\n│    └────────────────  Hour     (0..23)\n└─────────────────────  Minute   (0..59)\n```\n{: .-setup.-box-chars}\n\n### Operators\n\n| Operator | Description                |\n| ---      | ---                        |\n| `*`      | all values                 |\n| `,`      | separate individual values |\n| `-`      | a range of values          |\n| `/`      | divide a value into steps  |\n\n### Special strings\n\n| String       | Description                            |\n| ---          | ---                                    |\n| `@reboot`    | every rebot                            |\n| `@hourly`    | once every hour - same as `0 * * * *`  |\n| `@daily`     | once every day - same as `0 0 * * *`   |\n| `@midnight`  | once every midnight - same as `@daily` |\n| `@weekly`    | once every week - same as `0 0 * * 0`  |\n| `@monthly`   | once every month - same as `0 0 1 * *` |\n| `@yearly`    | once every year - same as `0 0 1 1 *`  |\n\n### Examples\n\n| Example        | Description                 |\n| ---            | ---                         |\n| `0 * * * *`    | every hour                  |\n| `*/15 * * * *` | every 15 mins               |\n| `0 */2 * * *`  | every 2 hours               |\n| `0 18 * * 0-6` | every week Mon-Sat at 6pm   |\n| `10 2 * * 6,7` | every Sat and Sun on 2:10am |\n| `0 0 * * 0`    | every Sunday midnight       |\n\n### Crontab\n\n```bash\n# Adding tasks easily\necho \"@reboot echo hi\" | crontab\n\n# Open in editor - optional for another user\ncrontab -e [-u user]\n\n# List tasks - optional for another user\ncrontab -l [-u user]\n\n# Delete crontab file - optional for another user\ncrontab -r [-u user]\n```\n"
  },
  {
    "path": "csharp7.md",
    "content": "---\ntitle: C# 7\ncategory: C-like\nupdated: 2018-12-06\nprism_languages: [csharp]\ndescription: |\n  A quick overview of C# 7\n---\n\n### Out Variables\n\n```csharp\npublic void PrintCoordinates(Point p)\n{\n    p.GetCoordinates(out int x, out int y);\n    WriteLine($\"({x}, {y})\");\n}\n```\n\n`out` is used to declare a variable at the point where it is passed as an argument.\n\n### Pattern Matching\n\n#### Is-expressions with patterns\n\n```csharp\npublic void PrintStars(object o)\n{\n    if (o is null) return;     // constant pattern \"null\"\n    if (!(o is int i)) return; // type pattern \"int i\"\n    WriteLine(new string('*', i));\n}\n```\n\n#### Switch statements with patterns\n\n```csharp\nswitch(shape)\n{\n    case Circle c:\n        WriteLine($\"circle with radius {c.Radius}\");\n        break;\n    case Rectangle s when (s.Length == s.Height):\n        WriteLine($\"{s.Length} x {s.Height} square\");\n        break;\n    case Rectangle r:\n        WriteLine($\"{r.Length} x {r.Height} rectangle\");\n        break;\n    default:\n        WriteLine(\"<unknown shape>\");\n        break;\n    case null:\n        throw new ArgumentNullException(nameof(shape));\n}\n```\n\n### Tuples\n\n#### Tuple type\n\n```csharp\n(string, string, string) LookupName(long id) // tuple return type\n{\n    ... // retrieve first, middle and last from data storage\n    return (first, middle, last); // tuple literal\n}\n```\n\n```csharp\nvar names = LookupName(id);\nWriteLine($\"found {names.Item1} {names.Item3}.\");\n```\n\n#### Tuple elements with name\n\n```csharp\n(string first, string middle, string last) LookupName(long id) // tuple elements have names\n```\n\n```csharp\nvar names = LookupName(id);\nWriteLine($\"found {names.first} {names.last}.\");\n```\n\n#### Tuple Literals\n\n```csharp\n   return (first: first, middle: middle, last: last); // named tuple elements in a literal\n```\n\n#### Tuple Deconstruction\n\n```csharp\n(var first, var middle, var last) = LookupName(id1);\nWriteLine($\"found {first} {last}.\");\n```\nor\n```csharp\nvar (first, middle, last) = LookupName(id1); // var outside\n```\nor\n```csharp\n(first, middle, last) = LookupName(id2); // assign onto existing variables\n```\n\n\n### Local Functions\n\n```csharp\npublic int Fibonacci(int x)\n{\n    if (x < 0) throw new ArgumentException(\"Less negativity please!\", nameof(x));\n    return Fib(x).current;\n\n    (int current, int previous) Fib(int i)\n    {\n        if (i == 0) return (1, 0);\n        var (p, pp) = Fib(i - 1);\n        return (p + pp, p);\n    }\n}\n```\n\n### Literal Improvements\n\n#### Digit Separator inside numbers literals\n\n```csharp\nvar d = 123_456;\nvar x = 0xAB_CD_EF;\n```\n\n#### Binary Literals\n\n```csharp\nvar b = 0b1010_1011_1100_1101_1110_1111;\n```\n\n### Ref Returns and Locals\n\n```csharp\npublic ref int Find(int number, int[] numbers)\n{\n    for (int i = 0; i < numbers.Length; i++)\n    {\n        if (numbers[i] == number) \n        {\n            return ref numbers[i]; // return the storage location, not the value\n        }\n    }\n    throw new IndexOutOfRangeException($\"{nameof(number)} not found\");\n}\n\nint[] array = { 1, 15, -39, 0, 7, 14, -12 };\nref int place = ref Find(7, array); // aliases 7's place in the array\nplace = 9; // replaces 7 with 9 in the array\nWriteLine(array[4]); // prints 9\n```\n\n### More Expression Bodied Members\n\nC# 7.0 adds accessors, constructors and finalizers to the list of things that can have expression bodies:\n\n```csharp\nclass Person\n{\n    private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();\n    private int id = GetId();\n\n    public Person(string name) => names.TryAdd(id, name); // constructors\n    ~Person() => names.TryRemove(id, out *);              // destructors\n    public string Name\n    {\n        get => names[id];                                 // getters\n        set => names[id] = value;                         // setters\n    }\n}\n```\n\n### Throw Expressions \n\n```csharp\nclass Person\n{\n    public string Name { get; }\n    public Person(string name) => Name = name ?? throw new ArgumentNullException(name);\n    public string GetFirstName()\n    {\n        var parts = Name.Split(\" \");\n        return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException(\"No name!\");\n    }\n    public string GetLastName() => throw new NotImplementedException();\n}\n```\n"
  },
  {
    "path": "css-antialias.md",
    "content": "---\ntitle: CSS antialiasing\ncategory: CSS\nupdated: 2017-10-13\nintro: |\n  Here's a 4-line snippet on how to get beautiful, antialiased text with CSS.\n---\n\n### Antialias\n{: .-prime}\n\n```css\n* {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n```\n\n### Support\n\n * Firefox 25+ on OSX\n * Webkits (Chrome, Safari, etc)\n\n## References\n{: .-one-column}\n\n * [maxvoltar.com](http://maxvoltar.com/archive/-webkit-font-smoothing)\n * [maximilianhoffman.com](http://maximilianhoffmann.com/posts/better-font-rendering-on-osx)\n * [ilikekillnerds.com](http://ilikekillnerds.com/2010/12/a-solution-to-stop-font-face-fonts-looking-bold-on-mac-browsers/)\n{: .-also-see}\n"
  },
  {
    "path": "css-flexbox.md",
    "content": "---\ntitle: CSS flexbox\ncategory: CSS\nupdated: 2020-06-13\nprism_languages: [css]\nweight: -3\n---\n\n### Simple example\n\n```css\n.container {\n  display: flex;\n}\n```\n\n```css\n.container > div {\n  flex: 1 1 auto;\n}\n```\n\n### Container\n\n```css\n.container {\n```\n{: .-setup}\n\n```css\n  display: flex;\n  display: inline-flex;\n```\n\n```css\n  flex-direction: row;            /* ltr - default */\n  flex-direction: row-reverse;    /* rtl */\n  flex-direction: column;         /* top-bottom */\n  flex-direction: column-reverse; /* bottom-top */\n```\n\n```css\n  flex-wrap: nowrap; /* one-line */\n  flex-wrap: wrap;   /* multi-line */\n```\n\n```css\n  align-items: flex-start; /* vertical-align to top */\n  align-items: flex-end;   /* vertical-align to bottom */\n  align-items: center;     /* vertical-align to center */\n  align-items: stretch;    /* same height on all (default) */\n```\n\n```css\n  justify-content: flex-start;    /* [xxx        ] */\n  justify-content: center;        /* [    xxx    ] */\n  justify-content: flex-end;      /* [        xxx] */\n  justify-content: space-between; /* [x    x    x] */\n  justify-content: space-around;  /* [ x   x   x ] */\n  justify-content: space-evenly;  /* [  x  x  x  ] */\n```\n\n```css\n}\n```\n{: .-setup}\n\n### Child\n\n```css\n.container > div {\n```\n{: .-setup}\n\n```css\n  /* This: */\n  flex: 1 0 auto;\n\n  /* Is equivalent to this: */\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: auto;\n```\n\n```css\n  order: 1;\n```\n\n```css\n  align-self: flex-start;  /* left */\n  margin-left: auto;       /* right */\n```\n\n```css\n}\n```\n{: .-setup}\n\n\n## Tricks\n\n### Vertical center\n\n```css\n.container {\n  display: flex;\n}\n\n.container > div {\n  width: 100px;\n  height: 100px;\n  margin: auto;\n}\n```\n\n### Vertical center (2)\n\n```css\n.container {\n  display: flex;\n  align-items: center;     /* vertical */\n  justify-content: center; /* horizontal */\n}\n```\n\n### Reordering\n\n```css\n.container > .top {\n order: 1;\n}\n\n.container > .bottom {\n order: 2;\n}\n```\n\n### Mobile layout\n\n\n```css\n.container {\n  display: flex;\n  flex-direction: column;\n}\n\n.container > .top {\n  flex: 0 0 100px;\n}\n\n.container > .content {\n  flex: 1 0 auto;\n}\n```\n\nA fixed-height top bar and a dynamic-height content area.\n\n### Table-like\n\n```css\n.container {\n  display: flex;\n}\n\n/* the 'px' values here are just suggested percentages */\n.container > .checkbox { flex: 1 0 20px; }\n.container > .subject  { flex: 1 0 400px; }\n.container > .date     { flex: 1 0 120px; }\n```\n\nThis creates columns that have different widths, but size accordingly according\nto the circumstances.\n\n### Vertical\n\n\n```css\n.container {\n  align-items: center;\n}\n```\n\nVertically-center all items.\n\n### Left and right\n\n```css\n.menu > .left  { align-self: flex-start; }\n.menu > .right { align-self: flex-end; }\n```\n\n## References\n{: .-one-column}\n\n * [MDN: Using CSS flexbox](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes)\n * [Ultimate flexbox cheatsheet](https://www.sketchingwithcss.com/samplechapter/cheatsheet.html)\n"
  },
  {
    "path": "css-grid.md",
    "content": "---\ntitle: CSS Grid\ncategory: CSS\nupdated: 2019-08-23\nprism_languages: [css]\n---\n\n### Container\n\n```css\n.grid-container {\n```\n{: .-setup}\n\n```css\n  /* Display properties */\n  display: grid;\n  display: inline-grid;\n```\n\n```css\n  /* Columns and rows */\n  grid-template-columns: 1rem 2rem 1rem; /* Measurement units */\n  grid-template-columns: 25% 50% 25%; /* Percentage units */\n  grid-template-columns: 1rem auto 1rem 2fr; /* Fill remaining widths with auto or fr units */\n  grid-template-columns: repeat(12, 1fr); /* Repeat columns without needing to write them */\n  grid-template-columns: subgrid; /* Use column tracks defined on parent grid */\n  \n  grid-template-rows: 1rem 10% auto repeat(5, 10px); /* Mix any group, same rules work for rows */\n  grid-template-rows: subgrid; /* Use row tracks defined on parent grid */\n```\n\n```css\n  /* Automatic columns and rows */\n\n  grid-auto-columns: 10px; /* No matter how many columns of content end up in the grid, each column will be this same width */\n  grid-auto-rows: 1rem; /* No matter how many rows of content end up in the grid, each row will be this same height */\n```\n\n```css\n  /* Areas */\n  grid-template-areas:\n    \"header header\"\n    \"main aside\"\n    \"footer footer\"; /* Grid-style */\n\n  grid-template-areas: \"header header\" \"main aside\" \"footer footer\"; /* Inline-style */\n```\n\n```css\n  /* Template shorthand */\n  grid-template:\n    \"header header\" auto\n    \"main aside\" 100vh\n    \"footer footer\" 10rem\n    / 80% 20%;\n\n  /* The above is the same as below long-hand */\n  grid-template-columns: 80% 20%;\n  grid-template-rows: auto 100vh 10rem;\n  grid-template-areas:\n    \"header header\"\n    \"main aside\"\n    \"footer footer\";\n```\n\n```css\n  /* Gaps */\n  grid-row-gap: 1rem;\n  grid-column-gap: 0.5rem; /* Define values separately */\n\n  grid-gap: 1rem 0.5rem; /* Short-hand for row / column */\n  grid-gap: 1rem; /* Gap in both dimensions */\n```\n\n```css\n  /* Item justification (horizontal or column alignment) */\n  justify-items: start; /* Align items to the left */\n  justify-items: center; /* Align items centered within its column */\n  justify-items: end; /* Align items to the right */\n  justify-items: stretch; /* (default) Fills available area (horizontally) */\n```\n\n```css\n  /* Item alignment (vertical or row alignment) */\n  align-items: start; /* Align items to the top */\n  align-items: center; /* Align items centered within its row */\n  align-items: end; /* Align items to the bottom */\n  align-items: stretch; /* (default) Fills available area (vertically) */\n```\n\n```css\n  /* Place item shorthand */\n  place-items: start stretch;\n\n  /* The above is the same as below long-hand */\n  align-items: start;\n  justify-items: stretch;\n```\n\n```css\n  /* Content justification (horizontal or column alignment) */\n  justify-content: start; /* Align content to the left */\n  justify-content: center; /* Align content centered horizontally within the grid */\n  justify-content: end; /* Align content to the right */\n  justify-content: stretch; /* (default) Fills available area (horizontally) */\n\n  justify-content: space-around; /* Chooses a space for both sides of the columns like a left and right margin */\n  justify-content: space-between; /* Chooses a space to go between columns, no margins on outside of content */\n  justify-content: space-evenly; /* Chooses a space that goes between all columns and edges consistently */\n```\n\n```css\n  /* Content alignment (horizontal or column alignment) */\n  align-content: start; /* Align content to the top */\n  align-content: center; /* Align content centered vertically within the grid */\n  align-content: end; /* Align content to the bottom */\n  align-content: stretch; /* (default) Fills available area (vertically) */\n\n  align-content: space-around; /* Chooses a space for the top and bottom of the rows like a top and bottom margin */\n  align-content: space-between; /* Chooses a space to go between rows, no margins on outside of content */\n  align-content: space-evenly; /* Chooses a space that goes between all rows and edges consistently */\n```\n\n```css\n  /* Place item shorthand */\n  place-content: center start;\n\n  /* The above is the same as below long-hand */\n  align-content: center;\n  justify-content: start;\n```\n\n```css\n  /* Automatic grid positioning */\n\n  grid-auto-flow: row; /* Left-to-right rows, then top-to-bottom*/\n  grid-auto-flow: column; /* Top-to-bottom columns, then left-to-right */\n  grid-auto-flow: dense; /* Responds with best-guess on left-to-right, top-to-bottom order with advanced layouts */\n```\n\n```css\n  /* There is one final shorthand for all container properties in one */\n\n  /* Explicit grid columns, rows, and areas */\n  grid:\n    \"header header\" auto\n    \"main aside\" 100vh\n    \"footer footer\" 10rem\n    / 80% 20%; /* You can include a template as the only value, which is equivalent to below */\n  grid-template:\n    \"header header\" auto\n    \"main aside\" 100vh\n    \"footer footer\" 10rem\n    / 80% 20%; /* Which is again equivalent to below */\n  grid-template-columns: 80% 20%;\n  grid-template-rows: auto 100vh 10rem;\n  grid-template-areas:\n    \"header header\"\n    \"main aside\"\n    \"footer footer\";\n\n  /* Automatic grid flows */\n  grid: 1rem / auto-flow dense 1fr; /* You can include rows, a flow, and automatic columns, which is equivalent to below */\n  grid-template-rows: 1rem;\n  grid-auto-flow: dense;\n  grid-auto-columns: 1fr;\n\n  grid: auto-flow dense 1rem / repeat(10, 10%); /* Conversely, you can do the same thing with automatic rows, and defined columns */\n  grid-auto-flow: dense;\n  grid-auto-rows: 1rem;\n  grid-template-columns: repeat(10, 10%);\n```\n\n```css\n}\n```\n{: .-setup}\n\n### Child\n\n```css\n.grid-child {\n```\n{: .-setup}\n\n```css\n  /* Column position */\n  grid-column-start: 1;\n  grid-column-end: 2;\n\n  grid-column: 1 / 2; /* Short hand */\n  grid-column: 1 / span 2; /* Span 2 columns without explicitly defining an endpoint */\n  grid-column: 1; /* Start in and occupy a single column */\n```\n\n```css\n  /* Row position */\n  grid-row-start: 2;\n  grid-row-end: 4;\n\n  grid-row: 2 / 4; /* Short hand */\n  grid-row: 2 / span 3;/* Span 3 rows without explicitly defining an endpoint */\n  grid-row: 1; /* Start in and occupy a single row */\n```\n\n```css\n  /* Area positioning */\n  grid-area: header; /* You can use a named grid area from the container */\n\n  grid-area: 2 / 1 / 4 / 2; /* Or you can use positioning. This is equivalent to... */\n  grid-row-start: 2;\n  grid-column-start: 1;\n  grid-row-end: 4;\n  grid-column-end: 2;\n```\n\n```css\n  /* Self justification (horizontal or column alignment) */\n  justify-self: start; /* Align item to the left */\n  justify-self: center; /* Align item centered within its column */\n  justify-self: end; /* Align item to the right */\n  justify-self: stretch; /* (default) Fills available area (horizontally) */\n```\n\n```css\n  /* Self alignment (vertical or row alignment) */\n  align-self: start; /* Align item to the top */\n  align-self: center; /* Align item centered within its row */\n  align-self: end; /* Align item to the bottom */\n  align-self: stretch; /* (default) Fills available area (vertically) */\n```\n\n```css\n  /* Placement shorthand */\n  place-self: start stretch;\n\n  /* The above is the same as below long-hand */\n  align-self: start;\n  justify-self: stretch;\n```\n\n```css\n}\n```\n{: .-setup}\n\n\n## References\n{: .-one-column}\n\n * [GRID: A simple visual cheatsheet](http://grid.malven.co/)\n * [CSS Tricks: A Complete Guide to Grid](https://css-tricks.com/snippets/css/complete-guide-grid/)\n * [Browser support](https://caniuse.com/#feat=css-grid)\n \n"
  },
  {
    "path": "css-system-font-stack.md",
    "content": "---\ntitle: \"CSS system fonts\"\ncategory: CSS\nweight: -3\ntags: [Featurable]\n---\n\n### System fonts\n\n```css\nfont-family: -apple-system, BlinkMacSystemFont,\n    \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\",\n    \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n```\n\nThis uses whatever system font is available. See: [System shock - Designing Medium](https://medium.design/system-shock-6b1dc6d6596f?gi=90078e194544) _(medium.com)_\n\n### Explanation\n\n| Font                 | OS                      |\n| ----                 | --                      |\n| `-apple-system`      | OS X (10.11+), iOS (9+) |\n| `BlinkMacSystemFont` | OS X, Chrome            |\n| `Segoe UI`           | Windows                 |\n| `Roboto`             | Android 4.0+            |\n| `Oxygen`             | Linux, KDE              |\n| `Ubuntu`             | Linux, Ubuntu           |\n| `Cantarell`          | Linux, GNOME            |\n| `Fira Sans`          | Firefox OS              |\n| `Droid Sans`         | Android (until 3.2)     |\n| `Helvetica Neue`     | OS X (10.9)             |\n"
  },
  {
    "path": "css-tricks.md",
    "content": "---\ntitle: CSS tricks\ncategory: CSS\n---\n\n### Heading kerning pairs and ligature\n\n```css\nh1, h2, h3 {\n  text-rendering: optimizeLegibility;\n}\n```\n\n### Native-like iOS scrolling\n\n```css\n-webkit-overflow-scrolling: touch;\noverflow-y: auto;\n```\n\n### Gradient text\n\n```css\nbackground: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#333));\n-webkit-background-clip: text;\n-webkit-text-fill-color: transparent;\n```\n\n### Text stroke\n\n```css\n-webkit-text-stroke: 3px black;\n```\n\nSee: [Introducing text stroke](http://www.webkit.org/blog/85/introducing-text-stroke/)\n\n### iOS Scrolling prevention\n\n```css\ndocument.ontouchstart = (e) ->\n  $pane = $(e.target).closest('.scrollable>div')\n  if $pane.length is 0 or $pane[0].scrollHeight <= $pane.innerHeight()\n    e.preventDefault()\n```\n\n```scss\n%ios-scrollable {\n  &, >div {\n    -webkit-overflow-scrolling: touch;\n    overflow: auto;\n  }\n\n  >div {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n  }\n}\n```\n\nRelevant in iOS6, but maybe not anymore.\n\n### UIWebView optimizations\n\n```css\n* {\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n  -webkit-user-select: none;                /* disable text select */\n  -webkit-touch-callout: none;              /* disable callout, image save panel (popup) */\n  -webkit-tap-highlight-color: transparent; /* \"turn off\" link highlight */\n}\n\na:focus {\n  outline: 0; // Firefox (remove border on link click)\n}\n```\n\nSee: <http://www.bitsandpix.com/entry/ios-webkit-uiwebview-remove-tapclick-highlightborder-with-css/>\n\nSee: <http://www.yuiblog.com/blog/2010/10/01/quick-tip-customizing-the-mobile-safari-tap-highlight-color/>\n\nBrowser hacks\n-------------\n{: .-three-column}\n\n### Disclaimer\n\nNot recommended, but here they are if you ever need them. Note that vendor\nprefixes may go away eventually.\n\n### Mozilla-only\n\n```css\n@-moz-document url-prefix() {\n  .box { color: blue; }\n}\n```\n\n### Webkit-only\n\n```css\n@media all and (-webkit-min-device-pixel-ratio: 1) {\n}\n```\n"
  },
  {
    "path": "css.md",
    "content": "---\ntitle: CSS\ncategory: CSS\nweight: -1\nkeywords:\n  - \"margin, padding, border\"\n  - \"div, .class, #id, [attr]\"\n  - \"font, background\"\n  - \"display: block, inline, flex\"\n  - Selectors\n  - Properties\n---\n\n## Basics\n{: .-three-column}\n\n### Selectors\n\n```css\n.class {\n  font-weight: bold;\n}\n```\n{: .-setup}\n\n| Selector          | Description  |\n| ----------------- | ------------ |\n| `*`               | All elements |\n| `div`             | Element      |\n| `.class`          | Class        |\n| `#id`             | ID           |\n| `[disabled]`      | Attribute    |\n| `[role=\"dialog\"]` | Attribute    |\n\n### Combinators\n\n| Selector            | Description       |\n| ------------------- | ----------------- |\n| `.parent .child`    | Descendant        |\n| `.parent > .child`  | Direct descendant |\n| `.child + .sibling` | Adjacent sibling  |\n| `.child ~ .sibling` | Far sibling       |\n| `.class1.class2`    | Have both classes |\n\n### Attribute selectors\n\n| Selector           | Description                         |\n| ------------------ | ----------------------------------- |\n| `[role=\"dialog\"]`  | `=` Exact                           |\n| `[class~=\"box\"]`   | `~=` Has word                       |\n| `[class|=\"box\"]`   | `|=` Exact or prefix (eg, `value-`) |\n| `[href$=\".doc\"]`   | `$=` Ends in                        |\n| `[href^=\"/index\"]` | `^=` Begins with                    |\n| `[class*=\"-is-\"]`  | `*=` Contains                       |\n\n### Pseudo-classes\n\n| Selector             | Description                                |\n| -------------------- | ------------------------------------------ |\n| `:target`            | eg, `h2#foo:target`                        |\n| ---                  | ---                                        |\n| `:focus`             |                                            |\n| `:active`            |                                            |\n| ---                  | ---                                        |\n| `:nth-child(3)`      | 3rd child                                  |\n| `:nth-child(3n+2)`   | 2nd child in groups of 3                   |\n| `:nth-child(-n+4)`   |                                            |\n| ---                  | ---                                        |\n| `:nth-last-child(2)` |                                            |\n| `:nth-of-type(2)`    |                                            |\n| ---                  | ---                                        |\n| `:checked`           | Checked inputs                             |\n| `:disabled`          | Disabled elements                          |\n| `:default`           | Default element in a group                 |\n| ---                  | ---                                        |\n| `:empty`             | Elements without children                  |\n\n### Pseudo-class variations\n\n| Selector          |\n| ----------------- |\n| `:first-of-type`  |\n| `:last-of-type`   |\n| `:nth-of-type(2)` |\n| `:only-of-type`   |\n| ---               |\n| `:first-child`    |\n| `:last-child`     |\n| `:nth-child(2)`   |\n| `:only-child`     |\n{: .-left-align}\n\n## Fonts\n{: .-left-reference}\n\n### Properties\n\n| Property           | Description                          |\n| ------------------ | ------------------------------------ |\n| `font-family:`     | `<font>, <fontN>`                    |\n| `font-size:`       | `<size>`                             |\n| `letter-spacing:`  | `<size>`                             |\n| `line-height:`     | `<number>`                           |\n| ---                | ---                                  |\n| `font-weight:`     | `bold` `normal`                      |\n| `font-style:`      | `italic` `normal`                    |\n| `text-decoration:` | `underline` `none`                   |\n| ---                | ---                                  |\n| `text-align:`      | `left` `right` `center` `justify`    |\n| `text-transform:`  | `capitalize` `uppercase` `lowercase` |\n{: .-key-values}\n\n### Shorthand\n{: .-prime}\n\n|         | style    | weight | size (required) |     | line-height | family            |\n| ------- | -------- | ------ | --------------- | --- | ----------- | ----------------- |\n| `font:` | `italic` | `400`  | `14px`          | `/` | `1.5`       | `sans-serif`      |\n|         | style    | weight | size (required) |     | line-height | family (required) |\n{: .-css-breakdown}\n\n### Example\n\n```css\nfont-family: Arial;\nfont-size: 12pt;\nline-height: 1.5;\nletter-spacing: 0.02em;\ncolor: #aa3322;\n```\n\n### Case\n\n```css\ntext-transform: capitalize; /* Hello */\ntext-transform: uppercase; /* HELLO */\ntext-transform: lowercase; /* hello */\n```\n\n## Background\n{: .-left-reference}\n\n### Properties\n\n| Property                 | Description                              |\n| ------------------------ | ---------------------------------------- |\n| `background:`            | _(Shorthand)_                            |\n| ---                      | ---                                      |\n| `background-color:`      | `<color>`                                |\n| `background-image:`      | `url(...)`                               |\n| `background-position:`   | `left/center/right` `top/center/bottom`  |\n| `background-size:`       | `cover` `X Y`                            |\n| `background-clip:`       | `border-box` `padding-box` `content-box` |\n| `background-repeat:`     | `no-repeat` `repeat-x` `repeat-y`        |\n| `background-attachment:` | `scroll` `fixed` `local`                 |\n{: .-key-values}\n\n### Shorthand\n\n|               | color  | image         | positionX | positionY |     | size           | repeat      | attachment |\n| ------------- | ------ | ------------- | --------- | --------- | --- | -------------- | ----------- | ---------- |\n| `background:` | `#ff0` | `url(bg.jpg)` | `left`    | `top`     | `/` | `100px` `auto` | `no-repeat` | `fixed;`   |\n| `background:` | `#abc` | `url(bg.png)` | `center`  | `center`  | `/` | `cover`        | `repeat-x`  | `local;`   |\n|               | color  | image         | positionX | positionY |     | size           | repeat      | attachment |\n{: .-css-breakdown}\n\n### Multiple backgrounds\n\n```css\nbackground: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),\n  url('background.jpg') center center / cover, #333;\n```\n\n## Animation\n{: .-left-reference}\n\n### Properties\n\n| Property                     | Value                                                    |\n| ---------------------------- | -------------------------------------------------------- |\n| `animation:`                 | _(shorthand)_                                            |\n| `animation-name:`            | `<name>`                                                 |\n| `animation-duration:`        | `<time>ms`                                               |\n| `animation-timing-function:` | `ease` `linear` `ease-in` `ease-out` `ease-in-out`       |\n| `animation-delay:`           | `<time>ms`                                               |\n| `animation-iteration-count:` | `infinite` `<number>`                                    |\n| `animation-direction:`       | `normal` `reverse` `alternate` `alternate-reverse`       |\n| `animation-fill-mode:`       | `none` `forwards` `backwards` `both` `initial` `inherit` |\n| `animation-play-state:`      | `normal` `reverse` `alternate` `alternate-reverse`       |\n{: .-key-values}\n\n### Shorthand\n\n|              | name     | duration | timing-function | delay   | count      | direction           | fill-mode | play-state |\n| ------------ | -------- | -------- | --------------- | ------- | ---------- | ------------------- | --------- | ---------- |\n| `animation:` | `bounce` | `300ms`  | `linear`        | `100ms` | `infinite` | `alternate-reverse` | `both`    | `reverse`  |\n|              | name     | duration | timing-function | delay   | count      | direction           | fill-mode | play-state |\n{: .-css-breakdown}\n\n### Example\n\n```css\nanimation: bounce 300ms linear 0s infinite normal;\nanimation: bounce 300ms linear infinite;\nanimation: bounce 300ms linear infinite alternate-reverse;\nanimation: bounce 300ms linear 2s infinite alternate-reverse forwards normal;\n```\n\n### Event\n\n```js\n.one('webkitAnimationEnd oanimationend msAnimationEnd animationend')\n```\n"
  },
  {
    "path": "cssnext.md",
    "content": "---\ntitle: cssnext\ncategory: CSS\nupdated: 2017-10-30\ntags: [Featurable]\nweight: -3\n---\n\n### Variables\n\n```scss\n:root {\n  --text-color: #30333a;\n}\n```\n\n```scss\nbody {\n  background: var(--text-color);\n  background: color(var(--text-color) shade(30%));\n}\n```\n\n### Colors\n\n```scss\na {\n  /* Adjustments */\n  color: color(red alpha(-10%));\n  color: color(red tint(-10%));    /* lighten */\n  color: color(red shade(-10%));   /* darken */\n\n  /* Absolute */\n  color: color(red alpha(50%));\n  color: color(red hue(225));\n  color: color(red saturation(100%));\n  color: color(red lightness(50%));\n\n  color: gray(33);       /* rgb(33, 33, 33) */\n  color: gray(33%);      /* rgb(84, 84, 84) */\n  color: gray(33%, 50%); /* rgba(84, 84, 84, 0.5) */\n  color: #0000ff80;      /* rgba(0, 0, 255, 0.5) */\n\n  color: hwb(90, 0%, 0%, 0.5);     /* like hsl() but easier for humans */\n  color: hsl(90deg 90% 70%);       /* hsl(180, 90%, 70%) -- supports deg */\n  color: hsl(90deg 90% 70% / 30%); /* hsla(180, 90%, 70%, 0.3) */\n  color: rgb(30 60 90 / 30%);      /* rgba(30, 60, 90, 0.3) */\n}\n```\n\nAlso see [colorme.io](http://colorme.io/).\n\n### Mixins\n\n```scss\n:root {\n  --centered: {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  };\n}\n\n.centered {\n  @apply --centered;\n}\n```\n\nSelectors\n---------\n\n### Nesting\n\n```scss\n.class-name {\n  & .nesting { ··· }      /* direct nesting starts with & */\n  @nest span & { ··· }    /* complex nesting */\n  @media (min-width: 30em) { ··· }\n}\n```\n\n### Custom selectors\n\n```scss\n@custom-selector :--button input[type='submit'], input[type='button'];\n@custom-selector :--enter :hover, :focus;\n```\n\n```scss\n:--button { ··· }\n:--button:--enter { ··· }\n```\n{: .-setup}\n\n### Future selectors\n\n```scss\n:any-link { ··· }         /* :link, :visited */\np:matches(.a, .b) { ··· } /* p.a, p.b */\np:not(.a, .b) { ··· }     /* p:not(.a), p:not(.b) */\na::before { ··· }         /* a:before -- for IE compatibility */\n[frame=hsides i] { ··· }  /* [frame=hsides] -- but case insensitive */\n```\n\nMedia queries\n-------------\n\n### Custom media queries\n\n```scss\n@custom-media --viewport-medium (width <= 50rem);\n```\n\n```scss\n@media (--viewport-medium) { ··· }\n```\n\n### Media query ranges\n\n```scss\n@media (width >= 500px) { ··· }    /* (min-width: 500px) */\n```\n\nProperties\n----------\n\n### Property fallbacks\n\n```scss\n/* font-feature-settings fallback */\nh2 { font-variant-caps: small-caps; }\ntable { font-variant-numeric: lining-nums; }\n```\n\n```scss\ndiv { filter: blur(4px); }          /* svg filter fallback */\ndiv { overflow-wrap: break-word; }  /* word-wrap fallback */\n```\n\n### Autoprefixing\n\n```scss\ndiv {\n  display: flex;\n}\n```\n\n```scss\n/*\n * display: -webkit-box;\n * display: -ms-flexbox;\n * display: flex;\n */\n```\n\n### Reset\n\n```scss\ndiv {\n  all: initial;\n}\n```\n\nSets animation, background, margin, padding, and so on.\n\n## References\n{: .-one-column}\n\n- Based on cssnext 2.9.0.\n- <http://cssnext.io/features/>\n"
  },
  {
    "path": "curl.md",
    "content": "---\ntitle: Curl\ncategory: CLI\nupdated: 2020-03-09\n---\n\n## Options\n\n### Options\n\n```bash\n-o <file>    # --output: write to file\n-u user:pass # --user: Authentication\n```\n\n```bash\n-v           # --verbose\n-vv          # Even more verbose\n-s           # --silent: don't show progress meter or errors\n-S           # --show-error: when used with --silent (-sS), show errors but no progress meter\n```\n\n```bash\n-i           # --include: Include the HTTP-header in the output\n-I           # --head: headers only\n```\n\n### Request\n\n```bash\n-X POST          # --request\n-L               # follow link if page redirects\n-F               # --form: HTTP POST data for multipart/form-data\n```\n\n### Data\n\n```bash\n-d 'data'    # --data: HTTP post data, URL encoded (eg, status=\"Hello\")\n-d @file     # --data via file\n-G           # --get: send -d data via get\n```\n\n### Headers\n\n```bash\n-A <str>         # --user-agent\n-b name=val      # --cookie\n-b FILE          # --cookie\n-H \"X-Foo: y\"    # --header\n--compressed     # use deflate/gzip\n```\n\n### SSL\n\n```bash\n    --cacert <file>\n    --capath <dir>\n```\n\n```bash\n-E, --cert <cert>     # --cert: Client cert file\n    --cert-type       # der/pem/eng\n-k, --insecure        # for self-signed certs\n```\n\n## Examples\n{: .-one-column}\n\n```bash\n# Post data:\ncurl -d password=x http://x.com/y\n```\n\n```bash\n# Auth/data:\ncurl -u user:pass -d status=\"Hello\" http://twitter.com/statuses/update.xml\n```\n\n```bash\n# multipart file upload\ncurl -v --include --form key1=value1 --form upload=@localfilename URL\n\n# multipart form: send data from text field and upload file\ncurl -F person=anonymous -F secret=@file.txt http://example.com/submit.cgi\n```\n\n```bash\n# Use Curl to Check if a remote resource is available\n# details: https://matthewsetter.com/check-if-file-is-available-with-curl/\ncurl -o /dev/null --silent -Iw \"%{http_code}\" https://example.com/my.remote.tarball.gz\n```\n"
  },
  {
    "path": "datetime.md",
    "content": "---\ntitle: Date & time formats\nweight: -5\nupdated: 2017-11-27\ntags: [Featurable]\n---\n\n## Common time formats\n{: .-one-column}\n\n- [UNIX strftime](./strftime) - Used by Ruby, `date`, and more\n- [Moment.js](./moment#formatting) - Used by Moment.js, date-fns, and more\n\n{% include common/strftime_format.md title=\"strftime format\" %}\n\n{% include common/moment_format.md title=\"Moment.js format\" %}\n"
  },
  {
    "path": "deis.md",
    "content": "---\ntitle: Deis\ncategory: Devops\n---\n\n### Deploy\n\n```\ndeis create app-name\ngit push deis master\ndeis open\n```\n\n### Deploy dockerfile\n\n```sh\n$ deis create app-name\n$ deis pull redis:latest\n  Creating build...  done, v2\n# default process type is `cmd`\n```\n\n### Config\n\n```\ndeis config:list\ndeis config:set FOO=bar BAZ=foo\ndeis config:unset FOO\ndeis config:pull  # writes to .env\ndeis config:push  # reads from .env\n```\n\n### Managing instances\n\n```\ndeis logs\ndeis run rake db:migrate\ndeis ps\n```\n\n### Custom domains\n\n```\ndeis domains:list\ndeis domains:add www.myapp.com\ndeis domains:remove www.myapp.com\n```\n\n### Limits\n\n```sh\ndeis limits:set web=1G\ndeis limits:set web=1024 --cpu\n# (`web` is a process type)\n```\n\n### Sharing\n\n```\ndeis perms:create otheruser\n```\n\n### SSL\n\n```\ndeis certs:add server.crt server.key\n```\n\nSee: [SSL](http://docs.deis.io/en/latest/using_deis/app-ssl/)\n"
  },
  {
    "path": "deku.md",
    "content": "---\ntitle: Deku v2\ncategory: JavaScript libraries\nintro: |\n  Quick reference for [Deku](https://www.npmjs.com/package/deku), a minimal virtual DOM library.\n---\n\n### Components\n\n```js\n/** @jsx element */\nimport { element } from 'deku'\n\nfunction render ({ props, children, context, path }) {\n  // props    = properties object\n  // children = children array\n  // path     = path to current component (like 0.1.5.2)\n  // context  = common properties in all components\n  return (\n    <div class='App' hidden={props.hidden} color={context.theme.color}>\n      {children}\n    </div>\n  }\n}\n\nfunction onCreate ({ props, dispatch, path }) { ... }\nfunction onUpdate ({ props, dispatch, path }) { ... }\nfunction onRemove ({ props, dispatch, path }) { ... }\n// actually { children, props, path, context }\n\nexport default { render, onCreate, onRemove }\n```\n\n### Rendering\n\n```js\nimport { createStore } from 'redux'\nimport { dom, element } from 'deku'\n\n// Create a Redux store to handle all UI actions and side-effects\nlet store = createStore(reducer)\n\n// Create a renderer that can turn vnodes into real DOM elements\nlet render = createRenderer(document.body, store.dispatch)\n\n// Update the page and add redux state to the context\nrender(<MyButton>Hello World!</MyButton>, store.getState())\n```\n"
  },
  {
    "path": "deku@1.md",
    "content": "---\ntitle: Deku v1\ncategory: JavaScript libraries\nintro: |\n  Quick reference for [Deku](https://www.npmjs.com/package/deku), a minimal virtual DOM library. **Deprecated:** This is for Deku v1. See [deku](./deku) for a more updated cheatsheet.\n---\n\n### Example\n\n```js\n/** @jsx element */\nimport element from 'virtual-element' // replacement for React.createElement\nimport { render, tree } from 'deku'\n\nvar app = <div class='my-app'>Hello World!</div>\n\nrender(tree(app), document.body)\n```\n\n### Components\n\n```js\nButton = {\n  render() {\n    return <button>Submit</button>\n  }\n}\n\nApp = {\n  render() {\n    return (\n      <div>\n        <Button />\n      </div>\n    )\n  }\n}\n\nrender(tree(<App />), document.body)\nrender(tree(element(App)), document.body)\n```\n\n### Component props/state\n\n```js\nApp = {\n  render ({ props, state }) {\n    return <div>{ /*...use state.store here*/ }</div>\n  }\n\n  initialState (props) {\n    return { store: store.getState() }\n  },\n\n  afterMount (comp, el, setState) {\n    store.subscribe(() => setState({ store: store.getState() }))\n  }\n}\n\nrender(tree(<App />), document.body)\n```\n\n### Events\n\n```js\n<a onClick={onClick}>{props.text}</a>\n```\n\n### Magic virtual element\n\nUse [magic-virtual-element](https://github.com/dekujs/magic-virtual-element) to enable nice classnames.\n\n```\nimport element from 'magic-virtual-element'\n<div style={style} class={[ 'button', '-active' ]}>\n```\n\n### Reference\n\n```\nname = 'MyComponent'\n\n// Defaults\ninitialState (props) {...} // return initial state\ndefaultProps = { hi: 'hello' }\n\n// Render\nrender ({props, state}, setState) {...}\n\n// Lifecycle\nbeforeUpdate  ({props, state, id}, nextProps, nextState) {}\nafterRender   ({props, state, id}, el) {}\nafterUpdate   ({props, state, id}, prevProps, prevState, setState) {}\nafterMount    ({props, state, id}, el, setState) {}\nbeforeUnmount ({props, state, id}, el) {}\n```\n\nSee: <https://www.npmjs.com/package/deku>\n"
  },
  {
    "path": "devise.md",
    "content": "---\ntitle: Devise\n---\n\n### About\n{: .-intro}\n\n[Devise](https://github.com/plataformatec/devise) is a flexible authentication \ngem.\n\n- <https://github.com/plataformatec/devise>\n\n### Installation\n\nRails 3: Add the following to your Gemfile\n\n    gem \"devise\"\n    gem \"hpricot\"\n    gem \"ruby_parser\"\n\nInstall devise in your project\n\n    $ rails generate devise:install\n\nGenerate devise for your model\n\n    $ rails generate devise MODEL\n    $ rake db:migrate\n\n(Optional) Generate devise views\n\n    $ rails generate devise:views\n\n### Helpers\n\n    user_signed_in?\n    current_user\n    user_session\n    destroy_user_session_path (Logout)\n    new_user_session_path (Login)\n    edit_user_registration_path (Edit registration)\n    new_user_registration_path (Register new user)\n\n### Controller stuff\n\n    before_filter :authenticate_user!\n\nModel\n-----\n\n### Model options\n\n    class User < ActiveRecord::Base\n      devise :database_authenticatable,\n        :registerable,\n        :confirmable,\n        :recoverable,\n        :rememberable,\n        :trackable,\n        :validatable\n    end\n\n### Migration helpers\n\n    create_table :users do |t|\n      t.database_authenticatable\n      t.confirmable\n      t.recoverable\n      t.rememberable\n      t.trackable\n      t.timestamps\n    end\n\nRouting\n-------\n\n### Authenticated and unauthenticated routes\n\n    unauthenticated do\n       root :to => 'home#index'\n    end\n\n    authenticated do\n      root :to => 'dashboard#index'\n    end\n\n### As\n    as :user do\n      get 'sign_in', :to => 'devise/sessions#new'\n    end\n\n### Devise_for magic\n  \n    devise_for :users\n\n        # Session routes for Authenticatable (default)\n             new_user_session GET  /users/sign_in                    {:controller=>\"devise/sessions\", :action=>\"new\"}\n                 user_session POST /users/sign_in                    {:controller=>\"devise/sessions\", :action=>\"create\"}\n         destroy_user_session GET  /users/sign_out                   {:controller=>\"devise/sessions\", :action=>\"destroy\"}\n       \n        # Password routes for Recoverable, if User model has :recoverable configured\n            new_user_password GET  /users/password/new(.:format)     {:controller=>\"devise/passwords\", :action=>\"new\"}\n           edit_user_password GET  /users/password/edit(.:format)    {:controller=>\"devise/passwords\", :action=>\"edit\"}\n                user_password PUT  /users/password(.:format)         {:controller=>\"devise/passwords\", :action=>\"update\"}\n                              POST /users/password(.:format)         {:controller=>\"devise/passwords\", :action=>\"create\"}\n       \n        # Confirmation routes for Confirmable, if User model has :confirmable configured\n        new_user_confirmation GET  /users/confirmation/new(.:format) {:controller=>\"devise/confirmations\", :action=>\"new\"}\n            user_confirmation GET  /users/confirmation(.:format)     {:controller=>\"devise/confirmations\", :action=>\"show\"}\n                              POST /users/confirmation(.:format)     {:controller=>\"devise/confirmations\", :action=>\"create\"}\n\n### Customizing devise_for\n\n    devise_for :users,\n      :path => \"usuarios\",\n      :path_names => {\n        :sign_in => 'login',\n        :sign_out => 'logout',\n        :password => 'secret',\n        :confirmation => 'verification',\n        :unlock => 'unblock',\n        :registration => 'register',\n        :sign_up => 'cmon_let_me_in' }\n\nTest helpers\n------------\n\n### Test helpers\n\n    include Devise::TestHelpers\n\n    sign_in @user\n    sign_out @user\n\nSee: <https://github.com/plataformatec/devise/blob/1094ba65aac1d37713f2cba71f9edad76b5ca274/lib/devise/test_helpers.rb>\n"
  },
  {
    "path": "divshot.md",
    "content": "---\ntitle: Divshot\ntags: [Archived]\narchived: Divshot is no longer in operation.\n---\n\n## Getting started\n\n### About\n\nDivshot was a static hosting platform.\n\n- <https://divshot.com/>\n\n### Install divshot-cli\n\n```\n$ npm install -g divshot-cli\n$ divshot login\n```\n\n### Create divshot.json\n\n```json\n{\n  \"name\": \"yourapp\",\n  \"root\": \"./app\"\n}\n```\n\n### Push your app\n\n```\n$ divshot push\n```\n\n## Configuration\n\nSee [configuration reference](https://docs.divshot.com/guides/configuration) and [routing guide](https://docs.divshot.com/guides/routing).\n\n```json\n{\n  \"name\": \"yourapp\",\n  \"root\": \"./app\",\n  \"clean_urls\": true,\n  \"clean_urls\": [\"/app/**\", \"/!components/**\"],,\n  \"error_page\": \"error.html\",\n  \"exclude\": [ \"Gruntfile.js\" ],\n  \"cache_control\": {},\n  \"routes\": {\n    \"/*.html\": \"index.html\",\n    \"/app/**/*.html\": \"app.html\",\n    \"**\": \"index.html\"\n  },\n  \"redirects\": {\n    \"/old/:segment/path\": \"/new/path/:segment\",\n    \"/some/old/path\": {\n      \"status\": 302,\n      \"url\": \"/some/new/path\"\n    }\n  },\n  \"headers\": {\n    \"/cors-stuff/**\": {\n      \"Access-Control-Allow-Origin\": \"*\"\n    },\n    \"/scripts/**\": {\n      \"content-type\": \"text/javascript\"\n    }\n  }\n}\n```\n\n## CLI\n\n```sh\ndivshot s   # server\n\ndivshot push [staging|production|development]\ndivshot pull [staging|production|development]\ndivshot purge   # cleans cache\ndivshot files\n\ndivshot promote development production\n\ndivshot open [<env>]\n```\n\n### Config\nEdits `divshot.json`\n\n```\n\ndivshot config:add name your-app-name\ndivshot config:remove name\n```\n\n### Environment vars\n\n```\ndivshot env:add <env> KEY=value\ndivshot env:remove <env> KEY\ndivshot env:pull <env>\n```\n\n### App management\n\n```\ndivshot create <appname>\ndivshot rename <newname>\ndivshot status\ndivshot destroy\n```\n\ndivshot apps\ndivshot account\n```\n\n### Password protect\n\n```sh\ndivshot protect <env> <username:password>\n```\n\n## Custom domains\n\nSee [custom domains guide](http://docs.divshot.com/guides/domains).\n\n```sh\ndivshot domains:add foo.bar.com\n```\n\nIn your DNS create a `CNAME`: (no apex domains are supported)\n\n```\nwww.    CNAME    yourname.divshot.io\n```\n"
  },
  {
    "path": "do.md",
    "content": "---\ntitle: Do gem\ncategory: Ruby libraries\n---\n\n### About\n{: .-intro}\n\n * [DAddYE/do](https://github.com/DAddYE/do)\n\n### Connection\n\n    server = DO::Server.new('srv1', 'srv1.domain.local', 'root', :key => \n        %w[srv1.pem]\n    \n### Run\n    server.run 'uname'\n    # root@srv1 ~ # uname\n    # Linux\n    \n    server.run 'uname', '-a'\n    # root@srv1 ~ # uname -a\n    # Linux srv1.lipsiasoft.net 2.6.18-194.32.1.el5  x86_64 x86_64 x86_64 GNU/Linux\n    \n    server.run 'mysqladmin -u root -p password \"oldone\"', 'newpassword'\n    # root@srv1 ~ # mysqladmin -u root -p password 'oldone'\n    # Enter password: oldone\n    # mysqladmin: connect to server at 'localhost' failed\n    # error: 'Access denied for user 'root'@'localhost' (using password: YES)'\n    \n### Files\n\n    server.exist?('~/.ssh')\n    # root@srv1 ~ # test -e ~/.ssh && echo True\n    # => true\n    \n    server.read('/etc/redhat-release')\n    # root@srv1 ~ # cat /etc/redhat-release\n    # => \"CentOS release 5.5 (Final)\"\n\n### Upload/download\n\n    server.upload '/tmp/file', '/tmp/foo'\n    # root@srv1 ~ # upload from '/tmp/file' to '/tmp/foo'\n    \n    server.download '/tmp/foo', '/tmp/file2'\n    # root@srv1 ~ # download from '/tmp/foo' to '/tmp/file2'\n    \n### Replace\n\n    server.replace :all, 'new content', '/tmp/file'\n    # root@srv1 ~ # replace all in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"new content\"\n    \n### Replace via regex\n\n    server.replace /content$/, 'changed content', '/tmp/foo'\n    # root@srv1 ~ # replace /content$/ in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"new changed content\"\n    \n### Append\n\n    server.append('appended', '/tmp/foo')\n    # root@srv1 ~ # append to 'bottom' in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"new changed contentappended\"\n    \n### Append to top\n\n    server.append('---', '/tmp/foo', :top)\n    # root@srv1 ~ # append to 'top' in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"---new changed contentappended\"\n    \n### Prompt\n    \n    server.ask \"Please choose\"\n    # root@srv1 ~ # Please choose: foo\n    # => \"foo\"\n    \n    server.yes? \"Do you want to proceed\"\n    # root@srv1 ~ # Do you want to proceed? (y/n): y\n    # => 0\n    \n    server.wait\n    # Press ENTER to continue...\n"
  },
  {
    "path": "docker-compose.md",
    "content": "---\ntitle: docker-compose\ncategory: Devops\nprism_languages: [yaml]\nweight: -1\nupdated: 2024-04-03 \n---\n\n### Basic example\n\n```yaml\n# docker-compose.yml\nversion: '2'\n\nservices:\n  web:\n    build:\n    # build from Dockerfile\n      context: ./Path\n      dockerfile: Dockerfile\n    ports:\n     - \"5000:5000\"\n    volumes:\n     - .:/code\n  redis:\n    image: redis\n```\n\n\n### Version 1 to 2\n\nDocker compose is now integrated into the official Docker installation. The functionality only improved over that change, and the simple syntax change is : V1 : `docker-compose ARG` to V2 `docker compose ARG`\nMore on that here : [Docker Compose](https://docs.docker.com/compose/) [Migrate to V2](https://docs.docker.com/compose/migrate/)\n\n### Commands\n\n\n```sh\ndocker compose version \ndocker compose config    \n```\n\n```sh\ndocker compose start\ndocker compose stop\ndocker compose restart\ndocker compose run    \n```\n\n```sh\ndocker compose create  \ndocker compose attach      \ndocker compose pause\ndocker compose unpause\n```\n\n```sh\ndocker compose wait   \ndocker compose up\ndocker compose down\n```\n\n```sh \ndocker compose ps\ndocker compose top \ndocker compose events   \ndocker compose logs\n```\n\n\n```sh\ndocker compose images\ndocker compose build      \ndocker compose push  \ndocker compose cp       \ndocker compose exec \n```\n\n## Reference\n{: .-three-column}\n\n### Building\n\n```yaml\nweb:\n  # build from Dockerfile\n  build: .\n  args:     # Add build arguments\n    APP_HOME: app\n```\n\n```yaml\n  # build from custom Dockerfile\n  build:\n    context: ./dir\n    dockerfile: Dockerfile.dev\n```\n\n```yaml\n  # build from image\n  image: ubuntu\n  image: ubuntu:14.04\n  image: tutum/influxdb\n  image: example-registry:4000/postgresql\n  image: a4bc65fd\n```\n\n### Ports\n\n```yaml\n  ports:\n    - \"3000\"\n    - \"8000:80\"  # host:container\n```\n\n```yaml\n  # expose ports to linked services (not to host)\n  expose: [\"3000\"]\n```\n\n### Commands\n\n```yaml\n  # command to execute\n  command: bundle exec thin -p 3000\n  command: [bundle, exec, thin, -p, 3000]\n```\n\n```yaml\n  # override the entrypoint\n  entrypoint: /app/start.sh\n  entrypoint: [php, -d, vendor/bin/phpunit]\n```\n\n### Environment variables\n\n```yaml\n  # environment vars\n  environment:\n    RACK_ENV: development\n  environment:\n    - RACK_ENV=development\n```\n\n```yaml\n  # environment vars from file\n  env_file: .env\n  env_file: [.env, .development.env]\n```\n\n### Dependencies\n\n```yaml\n  # makes the `db` service available as the hostname `database`\n  # (implies depends_on)\n  links:\n    - db:database\n    - redis\n```\n\n```yaml\n  # make sure `db` is alive before starting\n  depends_on:\n    - db\n```\n\n```yaml\n  # make sure `db` is healty before starting\n  # and db-init completed without failure\n  depends_on:\n    db:\n      condition: service_healthy\n    db-init:\n      condition: service_completed_successfully\n```\n\n### Other options\n\n```yaml\n  # make this service extend another\n  extends:\n    file: common.yml  # optional\n    service: webapp\n```\n\n```yaml\n  volumes:\n    - /var/lib/mysql\n    - ./_data:/var/lib/mysql\n```\n\n```yaml\n  # automatically restart container\n  restart: unless-stopped\n  # always, on-failure, no (default)\n```\n\n## Advanced features\n{: .-three-column}\n\n### Labels\n\n```yaml\nservices:\n  web:\n    labels:\n      com.example.description: \"Accounting web app\"\n```\n\n### DNS servers\n\n```yaml\nservices:\n  web:\n    dns: 8.8.8.8\n    dns:\n      - 8.8.8.8\n      - 8.8.4.4\n```\n\n### Devices\n\n```yaml\nservices:\n  web:\n    devices:\n    - \"/dev/ttyUSB0:/dev/ttyUSB0\"\n```\n\n### External links\n\n```yaml\nservices:\n  web:\n    external_links:\n      - redis_1\n      - project_db_1:mysql\n```\n\n### Healthcheck\n\n```yaml\n    # declare service healthy when `test` command succeed\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost\"]\n      interval: 1m30s\n      timeout: 10s\n      retries: 3\n      start_period: 40s\n```\n\n### Hosts\n\n```yaml\nservices:\n  web:\n    extra_hosts:\n      - \"somehost:192.168.1.100\"\n```\n\n### Network\n\n```yaml\n# creates a custom network called `frontend`\nnetworks:\n  frontend:\n```\n\n### External network\n\n```yaml\n# join a pre-existing network\nnetworks:\n  default:\n    external:\n      name: frontend\n```\n\n### Volume\n\n```yaml\n# mount host paths or named volumes, specified as sub-options to a service\n  db:\n    image: postgres:latest\n    volumes:\n      - \"/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock\"\n      - \"dbdata:/var/lib/postgresql/data\"\n\nvolumes:\n  dbdata:\n```\n\n### User\n\n```yaml\n# specifying user\nuser: root\n```\n\n```yaml\n# specifying both user and group with ids\nuser: 0:0\n```\n"
  },
  {
    "path": "docker.md",
    "content": "---\ntitle: Docker CLI\ncategory: Devops\n---\n\nManage images\n-------------\n\n### `docker build`\n\n```yml\ndocker build [options] .\n  -t \"app/container_name\"    # name\n  --build-arg APP_HOME=$APP_HOME    # Set build-time variables\n```\n\nCreate an `image` from a Dockerfile.\n\n\n### `docker run`\n\n```yml\ndocker run [options] IMAGE\n  # see `docker create` for options\n```\n\n#### Example\n\n```\n$ docker run -it debian:buster /bin/bash\n```\nRun a command in an `image`.\n\nManage containers\n-----------------\n\n### `docker create`\n\n```yml\ndocker create [options] IMAGE\n  -a, --attach               # attach stdout/err\n  -i, --interactive          # attach stdin (interactive)\n  -t, --tty                  # pseudo-tty\n      --name NAME            # name your image\n  -p, --publish 5000:5000    # port map (host:container)\n      --expose 5432          # expose a port to linked containers\n  -P, --publish-all          # publish all ports\n      --link container:alias # linking\n  -v, --volume `pwd`:/app    # mount (absolute paths needed)\n  -e, --env NAME=hello       # env vars\n```\n\n#### Example\n\n```\n$ docker create --name app_redis_1 \\\n  --expose 6379 \\\n  redis:3.0.2\n```\n\nCreate a `container` from an `image`.\n\n### `docker exec`\n\n```yml\ndocker exec [options] CONTAINER COMMAND\n  -d, --detach        # run in background\n  -i, --interactive   # stdin\n  -t, --tty           # interactive\n```\n\n#### Example\n\n```\n$ docker exec app_web_1 tail logs/development.log\n$ docker exec -t -i app_web_1 rails c\n```\n\nRun commands in a `container`.\n\n\n### `docker start`\n\n```yml\ndocker start [options] CONTAINER\n  -a, --attach        # attach stdout/err\n  -i, --interactive   # attach stdin\n\ndocker stop [options] CONTAINER\n```\n\nStart/stop a `container`.\n\n\n### `docker ps`\n\n```\n$ docker ps\n$ docker ps -a\n$ docker kill $ID\n```\n\nManage `container`s using ps/kill.\n\n\n### `docker logs`\n\n```\n$ docker logs $ID\n$ docker logs $ID 2>&1 | less\n$ docker logs -f $ID # Follow log output\n```\n\nSee what's being logged in an `container`.\n\n\nImages\n------\n\n### `docker images`\n\n```sh\n$ docker images\n  REPOSITORY   TAG        ID\n  ubuntu       12.10      b750fe78269d\n  me/myapp     latest     7b2431a8d968\n```\n\n```sh\n$ docker images -a   # also show intermediate\n```\n\nManages `image`s.\n\n### `docker rmi`\n\n```yml\ndocker rmi b750fe78269d\n```\n\nDeletes `image`s.\n\n## Clean up\n\n### Clean all\n\n```sh\ndocker system prune\n```\n\nCleans up dangling images, containers, volumes, and networks (ie, not associated with a container)\n\n```sh\ndocker system prune -a\n```\n\nAdditionally remove any stopped containers and all unused images (not just dangling images)\n\n### Containers\n\n```sh\n# Stop all running containers\ndocker stop $(docker ps -a -q)\n\n# Delete stopped containers\ndocker container prune\n```\n\n### Images\n\n```sh\ndocker image prune [-a]\n```\n\nDelete all the images\n\n### Volumes\n\n```sh\ndocker volume prune\n```\n\nDelete all the volumes\n\n### Systems\n\n```sh\ndocker system df\n```\n\nShow docker disk usage\n\n```sh\ndocker system events\n```\n\nGet real time events from the server\n\n```sh\ndocker system info\n```\n\nDisplay system-wide information\n\n\n\nAlso see\n--------\n\n * [Getting Started](https://www.docker.io/gettingstarted/) _(docker.io)_\n"
  },
  {
    "path": "dockerfile.md",
    "content": "---\ntitle: Dockerfile\ncategory: Devops\nprism_languages: [docker]\nupdated: 2019-10-20\n---\n\n## Reference\n{: .-three-column}\n\n### Inheritance\n\n```docker\nFROM ruby:2.2.2\n```\n\n### Variables\n\n```docker\nENV APP_HOME /myapp\nRUN mkdir $APP_HOME\n```\n\n```docker\nARG APP_HOME=\"\"\nRUN mkdir $APP_HOME\n```\n\n### Initialization\n\n```docker\nRUN bundle install\n```\n\n```docker\nWORKDIR /myapp\n```\n\n```docker\nVOLUME [\"/data\"]\n# Specification for mount point\n```\n\n```docker\nADD file.xyz /file.xyz\nCOPY --chown=user:group host_file.xyz /path/container_file.xyz\n```\n\n### Run commands in strict shell\n\n```docker\nENV my_var\nSHELL [\"/bin/bash\", \"-euo\", \"pipefail\", \"-c\"]\n\n# With strict mode:\nRUN false # fails build like using &&\nRUN echo \"$myvar\" # will throw error due to typo\nRUN true | false # will bail out of pipe\n```\n\nUsing `shell` will turn on strict mode for shell commands.\n\n### Onbuild\n\n```docker\nONBUILD RUN bundle install\n# when used with another file\n```\n\n### Commands\n\n```docker\nEXPOSE 5900\nCMD    [\"bundle\", \"exec\", \"rails\", \"server\"]\n```\n\n### Entrypoint\n\n```docker\nENTRYPOINT [\"executable\", \"param1\", \"param2\"]\nENTRYPOINT command param1 param2\n```\n\nConfigures a container that will run as an executable.\n\n```docker\nENTRYPOINT exec top -b\n```\n\nThis will use shell processing to substitute shell variables, and will ignore any `CMD` or `docker run` command line arguments.\n\n### Metadata\n\n```docker\nLABEL version=\"1.0\"\n```\n\n```docker\nLABEL \"com.example.vendor\"=\"ACME Incorporated\"\nLABEL com.example.label-with-value=\"foo\"\n```\n\n```docker\nLABEL description=\"This text illustrates \\\nthat label-values can span multiple lines.\"\n```\n\n## See also\n{: .-one-column}\n\n- <https://docs.docker.com/engine/reference/builder/>\n"
  },
  {
    "path": "dom-range.md",
    "content": "---\ntitle: DOM Range\ncategory: JavaScript\nintro: |\n  Quick reference to the HTML [DOM createRange API](https://devdocs.io/dom/range).\n---\n\n## Reference\n{:.-three-column}\n\n### Creating ranges\n\n```js\nvar range = document.createRange()\n```\n\nSee: <https://devdocs.io/dom/document/createrange>\n\n## Methods\n\n```js\nrange\n  .setStart(startNode, startOffset)\n  .setEnd(endNode, endOffset)\n\n  .setStartBefore(node)\n  .setStartAfter(node)\n  .setEndBefore(node)\n  .setEndAfter(node)\n\n  .selectNode(node)\n  .selectNodeContents(node)\n```\n\nSee: <https://devdocs.io/dom/range>\n\n### Collapsing\n\n```js\nrange.collapse() // to end (a single point)\nrange.collapse(true) // to start (a single point)\nrange.collapsed // true | false\n```\n\n### Operations\n\n```js\nrange.cloneContents() // copy => DocumentFragment\nrange.extractContents() // cut  => DocumentFragment\nrange.deleteContents() // delete\n```\n\n```js\nrange.insertNode(node)\n```\n\n### String\n\n```js\nrange.toString()\n```\n\n### Read-only attributes\n\n```js\nrange.collapsed //       => true/false\nrange.startContainer //  => Node\nrange.startOffset\nrange.endContainer //    => Node\nrange.endOffset\nrange.commonAncestorContainer // closest of start and end containers\n```\n"
  },
  {
    "path": "dom-selection.md",
    "content": "---\ntitle: DOM Selection\ncategory: JavaScript\nintro: |\n  Quick introduction to the HTML [DOM selection API](https://devdocs.io/dom/selection).\n---\n\n## Reference\n{: .-three-column}\n\n### Selection\n\n```js\nvar sel = document.getSelection()\n```\n\nSee: <https://devdocs.io/dom/selection>\n\n### Methods\n\n```js\nsel.removeAllRanges() //  deselects\nsel.addRange(range) //    sets a selection\nsel.removeRange(range) // remove a range\n```\n\n```js\nsel.rangeCount\nsel.getRangeAt(0) // get the 0th range\n```\n\n### Collapsing\n\n```js\nsel.collapse(parent, offset)\nsel.collapseToEnd()\nsel.collapseToStart()\nsel.isCollapsed\n```\n\n```js\nsel.containsNode(node)\n```\n\n### Deleting\n\n```js\nsel.deleteFromDocument()\n```\n\n### Events\n\n```js\ndocument.addEventListener('selectionchange', () => {})\n```\n"
  },
  {
    "path": "editorconfig.md",
    "content": "---\ntitle: editorconfig\nprism_languages: [ini]\nweight: -1\nupdated: 2019-09-25\ncategory: Apps\n---\n\n### Short example\n{: .-prime}\n\n```ini\n# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\ntab_width = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n```\n\nThis example should be fine for most projects indented by 2 spaces. See: [animate.css editorconfig](https://github.com/daneden/animate.css/blob/master/.editorconfig)\n\n### Properties\n\n```ini\nindent_style = {space|tab}\nindent_size = {4|tab}\ntab_width = 2\nend_of_line = {cr|lf|crlf}\ncharset = {utf-8|utf-16be|utf-16le|latin1}\ntrim_trailing_whitespace = false\ninsert_final_newline = true\nmax_line_length = 80\n```\n\n### Full example\n\n```ini\n# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with a newline ending every file\n[*]\nend_of_line = lf\ninsert_final_newline = true\n\n# 4 space indentation\n[*.py]\nindent_style = space\nindent_size = 4\n\n# Tab indentation (no size specified)\n[*.js]\nindent_style = tab\n\n# Indentation override for all JS under lib directory\n[lib/**.js]\nindent_style = space\nindent_size = 2\n\n# Matches the exact files either package.json or .travis.yml\n[{package.json,.travis.yml}]\nindent_style = space\nindent_size = 2\n```\n\n### References\n\n- <https://EditorConfig.org>\n"
  },
  {
    "path": "elixir-metaprogramming.md",
    "content": "---\ntitle: Elixir metaprogramming\ncategory: Elixir\n---\n\n### Kernel\n\nMost of these magic is defined in [Kernel.SpecialForms](http://devdocs.io/elixir/elixir/kernel.specialforms).\n\n### Pseudo-variables\n\n```elixir\n__DIR__     # current dir\n__MODULE__  # current module\n__CALLER__  # caller of the function\n```\n\n### [`__ENV__`](http://devdocs.io/elixir/elixir/kernel.specialforms#__ENV__/0)\n\n```elixir\nMap.keys(__ENV__)\n[:__struct__, :aliases, :context, :context_modules, :export_vars, :file,\n :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,\n :module, :requires, :vars]\n```\n\n```elixir\n__CALLER__.module |> Module.definitions_in |> IO.inspect\n```\n\n```elixir\napply(Enum, :reverse, [[1, 2, 3]])\n```\n"
  },
  {
    "path": "elixir.md",
    "content": "---\ntitle: Elixir\ncategory: Elixir\ntags: [New]\nupdated: 2018-07-04\nweight: -10\n---\n\n## Getting started\n{: .-three-column}\n\n### Hello world\n{: .-prime}\n\n```elixir\n# hello.exs\ndefmodule Greeter do\n  def greet(name) do\n    message = \"Hello, \" <> name <> \"!\"\n    IO.puts message\n  end\nend\n\nGreeter.greet(\"world\")\n```\n\n```bash\nelixir hello.exs\n# Hello, world!\n```\n{: .-setup}\n\n### Variables\n\n```elixir\nage = 23\n```\n\n### Maps\n\n```elixir\nuser = %{\n  name: \"John\",\n  city: \"Melbourne\"\n}\n```\n\n```elixir\nIO.puts \"Hello, \" <> user.name\n```\n{: .-setup}\n\n### Lists\n\n```elixir\nusers = [ \"Tom\", \"Dick\", \"Harry\" ]\n```\n{: data-line=\"1\"}\n\n```elixir\nEnum.map(users, fn user ->\n  IO.puts \"Hello \" <> user\nend)\n```\n\n### Piping\n\n```elixir\nsource\n|> transform(:hello)\n|> print()\n```\n{: data-line=\"2,3\"}\n\n```elixir\n# Same as:\nprint(transform(source, :hello))\n```\n\nThese two are equivalent.\n\n### Pattern matching\n\n```elixir\nuser = %{name: \"Tom\", age: 23}\n%{name: username} = user\n```\n{: data-line=\"2\"}\n\nThis sets `username` to `\"Tom\"`.\n\n### Pattern matching in functions\n\n```elixir\ndef greet(%{name: username}) do\n  IO.puts \"Hello, \" <> username\nend\n\nuser = %{name: \"Tom\", age: 23}\n```\n{: data-line=\"1\"}\n\nPattern matching works in function parameters too.\n\nControl flow\n------------\n{: .-three-column}\n\n### If\n\n```elixir\nif false do\n  \"This will never be seen\"\nelse\n  \"This will\"\nend\n```\n### Case\n\n```elixir\ncase {1, 2, 3} do\n  {4, 5, 6} ->\n    \"This clause won't match\"\n  {1, x, 3} ->\n    \"This will match and bind x to 2\"\n  _ ->\n   \"This will match any value\"\nend\n```\n\n### Cond\n\n```elixir\ncond do\n  1 + 1 == 3 ->\n    \"I will never be seen\"\n  2 * 5 == 12 ->\n    \"Me neither\"\n  true ->\n    \"But I will (this is essentially an else)\"\nend\n```\n\n### With\n\n```elixir\nwith {:ok, {int, _asdf}} <- Integer.parse(\"123asdf\"),\n     {:ok, datetime, _utc_offset} <- DateTime.from_iso8601(\"2021-10-27T12:00:00Z\") do\n  DateTime.add(datetime, int, :second)\n  # optional else clause. if not provided and an error occurs, the error is returned\nelse\n  :error -> \"couldn't parse integer string\"\n  {:error, :invalid_format} -> \"couldn't parse date string\"\n  _ -> \"this will never get hit because all errors are handled\"\nend\n```\n\n### Errors\n\n```elixir\ntry do\n  throw(:hello)\ncatch\n  message -> \"Got #{message}.\"\nafter\n  IO.puts(\"I'm the after clause.\")\nend\n```\n\n## Types\n\n### Primitives\n\n| Sample                  | Type            |\n| ---                     | ---             |\n| `nil`                   | Nil/null        |\n| `true` _/_ `false`      | Boolean         |\n| ---                     | ---             |\n| `?a`                    | Integer (ASCII) |\n| `23`                    | Integer         |\n| `3.14`                  | Float           |\n| ---                     | ---             |\n| `'hello'`               | Charlist        |\n| `<<2, 3>>`              | Binary          |\n| `\"hello\"`               | Binary string   |\n| `:hello`                | Atom            |\n| ---                     | ---             |\n| `[a, b]`                | List            |\n| `{a, b}`                | Tuple           |\n| ---                     | ---             |\n| `%{a: \"hello\"}`         | Map             |\n| `%MyStruct{a: \"hello\"}` | Struct          |\n| `fn -> ... end`         | Function        |\n\n### Type checks\n\n```elixir\nis_atom/1\nis_bitstring/1\nis_boolean/1\nis_function/1\nis_function/2\nis_integer/1\nis_float/1\n```\n\n```elixir\nis_binary/1\nis_list/1\nis_map/1\nis_tuple/1\n```\n\n```elixir\nis_nil/1\nis_number/1\nis_pid/1\nis_port/1\nis_reference/1\n```\n\n### Operators\n\n```elixir\nleft != right   # equal\nleft !== right  # match\nleft ++ right   # concat lists\nleft <> right   # concat string/binary\nleft =~ right   # regexp\n```\n\nModules\n-------\n\n### Importing\n\n```elixir\nrequire Redux   # compiles a module\nimport Redux    # compiles, and you can use without the `Redux.` prefix\n\nuse Redux       # compiles, and runs Redux.__using__/1\nuse Redux, async: true\n\nimport Redux, only: [duplicate: 2]\nimport Redux, only: :functions\nimport Redux, only: :macros\n\nimport Foo.{Bar, Baz}\n```\n\n### Aliases\n\n```elixir\nalias Foo.Bar, as: Bar\nalias Foo.Bar   # same as above\n\nalias Foo.{Bar, Baz}\n```\n\n## String\n\n### Functions\n\n```elixir\nimport String\n```\n{: .-setup}\n\n```elixir\nstr = \"hello\"\nstr |> length()        # → 5\nstr |> codepoints()    # → [\"h\", \"e\", \"l\", \"l\", \"o\"]\nstr |> slice(2..-1)    # → \"llo\"\nstr |> split(\" \")      # → [\"hello\"]\nstr |> capitalize()    # → \"Hello\"\nstr |> match(regex)\n```\n\n### Inspecting objects\n\n```elixir\ninspect(object, opts \\\\ [])\n```\n```elixir\nvalue |> IO.inspect()\n```\n```elixir\nvalue |> IO.inspect(label: \"value\")\n```\n\n## Numbers\n\n### Operations\n\n```elixir\nabs(n)\nround(n)\nrem(a, b)   # remainder (modulo)\ndiv(a, b)   # integer division\n```\n\n### Float\n\n```elixir\nimport Float\n```\n{: .-setup}\n\n```elixir\nn = 10.3\n```\n{: .-setup}\n\n```elixir\nn |> ceil()            # → 11.0\nn |> ceil(2)           # → 11.30\nn |> to_string()       # → \"1.030000+e01\"\nn |> to_string([decimals: 2, compact: true])\n```\n\n```elixir\nFloat.parse(\"34\")  # → { 34.0, \"\" }\n```\n\n### Integer\n\n```elixir\nimport Integer\n```\n{: .-setup}\n\n```elixir\nn = 12\n```\n{: .-setup}\n\n```elixir\nn |> digits()         # → [1, 2]\nn |> to_charlist()    # → '12'\nn |> to_string()      # → \"12\"\nn |> is_even()\nn |> is_odd()\n```\n\n```elixir\n# Different base:\nn |> digits(2)        # → [1, 1, 0, 0]\nn |> to_charlist(2)   # → '1100'\nn |> to_string(2)     # → \"1100\"\n```\n\n```elixir\nparse(\"12\")           # → {12, \"\"}\nundigits([1, 2])      # → 12\n```\n\n### Type casting\n\n```elixir\nFloat.parse(\"34.1\")    # → {34.1, \"\"}\nInteger.parse(\"34\")    # → {34, \"\"}\n```\n\n```elixir\nFloat.to_string(34.1)  # → \"3.4100e+01\"\nFloat.to_string(34.1, [decimals: 2, compact: true])  # → \"34.1\"\n```\n\n## Map\n\n### Defining\n\n```elixir\nm = %{name: \"hi\"}       # atom keys (:name)\nm = %{\"name\" => \"hi\"}   # string keys (\"name\")\n```\n\n### Updating\n\n```elixir\nimport Map\n```\n{: .-setup}\n\n```elixir\nm = %{m | name: \"yo\"}  # key must exist\n```\n\n```elixir\nm |> put(:id, 2)      # → %{id: 2, name: \"hi\"}\nm |> put_new(:id, 2)  # only if `id` doesn't exist (`||=`)\n```\n\n```elixir\nm |> put(:b, \"Banana\")\nm |> merge(%{b: \"Banana\"})\nm |> update(:a, &(&1 + 1))\nm |> update(:a, fun a -> a + 1 end)\n```\n\n```elixir\nm |> get_and_update(:a, &(&1 || \"default\"))\n# → {old, new}\n```\n\n### Deleting\n\n```elixir\nm |> delete(:name)  # → %{}\nm |> pop(:name)     # → {\"John\", %{}}\n```\n\n### Reading\n\n```elixir\nm |> get(:id)       # → 1\nm |> keys()         # → [:id, :name]\nm |> values()       # → [1, \"hi\"]\n```\n\n```elixir\nm |> to_list()      # → [id: 1, name: \"hi\"]\n                    # → [{:id, 1}, {:name, \"hi\"}]\n```\n\n### Deep\n\n```elixir\nput_in(map, [:b, :c], \"Banana\")\nput_in(map[:b][:c], \"Banana\")    # via macros\n```\n\n```elixir\nget_and_update_in(users, [\"john\", :age], &{&1, &1 + 1})\n```\n\n### Constructing from lists\n\n```elixir\nMap.new([{:b, 1}, {:a, 2}])\nMap.new([a: 1, b: 2])\nMap.new([:a, :b], fn x -> {x, x} end)  # → %{a: :a, b: :b}\n```\n\n### Working with structs\n\n#### Struct to map\n\n```elixir\nMap.from_struct(%AnyStruct{a: \"b\"})  # → %{a: \"b\"}\n```\n\n#### Map to struct\n\n```elixir\nstruct(AnyStruct, %{a: \"b\"})  # → %AnyStruct{a: \"b\"}\n```\n\n## List\n\n```elixir\nimport List\n```\n{: .-setup}\n\n```elixir\nl = [ 1, 2, 3, 4 ]\n```\n{: .-setup}\n\n```elixir\nl = l ++ [5]         # push (append)\nl = [ 0 | list ]     # unshift (prepend)\n```\n\n```elixir\nl |> first()\nl |> last()\n```\n\n```elixir\nl |> flatten()\nl |> flatten(tail)\n```\n\nAlso see [Enum](#enum).\n\n\n## Enum\n\n### Usage\n\n```elixir\nimport Enum\n```\n{: .-setup}\n\n```elixir\nlist = [:a, :b, :c]\n```\n{: .-setup}\n\n```elixir\nlist |> at(0)         # → :a\nlist |> count()       # → 3\nlist |> empty?()      # → false\nlist |> any?()        # → true\n```\n\n```elixir\nlist |> concat([:d])  # → [:a, :b, :c, :d]\n```\n\nAlso, consider streams instead.\n\n### Map/reduce\n\n```elixir\nlist |> reduce(fn)\nlist |> reduce(acc, fn)\nlist |> map(fn)\nlist |> reject(fn)\nlist |> any?(fn)\nlist |> empty?(fn)\n```\n\n```elixir\n[1, 2, 3, 4]\n|> Enum.reduce(0, fn(x, acc) -> x + acc end)\n```\n\n## Tuple\n\n### Tuples\n\n```elixir\nimport Tuple\n```\n{: .-setup}\n\n```elixir\nt = { :a, :b }\n```\n\n```elixir\nt |> elem(1)    # like tuple[1]\nt |> put_elem(index, value)\nt |> tuple_size()\n```\n\n### Keyword lists\n\n```elixir\nlist = [{ :name, \"John\" }, { :age, 15 }]\nlist[:name]\n```\n\n```elixir\n# For string-keyed keyword lists\nlist = [{\"size\", 2}, {\"type\", \"shoe\"}]\nList.keyfind(list, \"size\", 0)  # → {\"size\", 2}\n```\n\n## Functions\n\n### Lambdas\n\n```elixir\nsquare = fn n -> n*n end\nsquare.(20)\n```\n\n### & syntax\n\n```elixir\nsquare = &(&1 * &1)\nsquare.(20)\n\nsquare = &Math.square/1\n```\n\n### Running\n\n```elixir\nfun.(args)\napply(fun, args)\napply(module, fun, args)\n```\n\n### Function heads\n\n```elixir\ndef join(a, b \\\\ nil)\ndef join(a, b) when is_nil(b) do: a\ndef join(a, b) do: a <> b\n```\n\n## Structs\n\n### Structs\n\n```elixir\ndefmodule User do\n  defstruct name: \"\", age: nil\nend\n\n%User{name: \"John\", age: 20}\n\n%User{}.struct  # → User\n```\n\nSee: [Structs](http://elixir-lang.org/getting-started/structs.html)\n\n## Protocols\n\n### Defining protocols\n\n```elixir\ndefprotocol Blank do\n  @doc \"Returns true if data is considered blank/empty\"\n  def blank?(data)\nend\n```\n\n```elixir\ndefimpl Blank, for: List do\n  def blank?([]), do: true\n  def blank?(_), do: false\nend\n\nBlank.blank?([])  # → true\n```\n\n### Any\n\n```elixir\ndefimpl Blank, for: Any do ... end\n\ndefmodule User do\n  @derive Blank     # Falls back to Any\n  defstruct name: \"\"\nend\n```\n\n### Examples\n\n- `Enumerable` and `Enum.map()`\n- `Inspect` and `inspect()`\n\n## Comprehensions\n\n### For\n\n```elixir\nfor n <- [1, 2, 3, 4], do: n * n\nfor n <- 1..4, do: n * n\n```\n\n```elixir\nfor {key, val} <- %{a: 10, b: 20}, do: val\n# → [10, 20]\n```\n\n```elixir\nfor {key, val} <- %{a: 10, b: 20}, into: %{}, do: {key, val*val}\n```\n\n### Conditions\n\n```elixir\nfor n <- 1..10, rem(n, 2) == 0, do: n\n# → [2, 4, 6, 8, 10]\n```\n\n### Complex\n\n```elixir\nfor dir <- dirs,\n    file <- File.ls!(dir),          # nested comprehension\n    path = Path.join(dir, file),    # invoked\n    File.regular?(path) do          # condition\n  IO.puts(file)\nend\n```\n\n## Misc\n\n### Metaprogramming\n\n```elixir\n__MODULE__\n__MODULE__.__info__\n\n@after_compile __MODULE__\ndef __before_compile__(env)\ndef __after_compile__(env, _bytecode)\ndef __using__(opts)    # invoked on `use`\n\n@on_definition {__MODULE__, :on_def}\ndef on_def(_env, kind, name, args, guards, body)\n\n@on_load :load_check\ndef load_check\n```\n\n### Regexp\n\n```elixir\nexp = ~r/hello/\nexp = ~r/hello/i\n\"hello world\" =~ exp\n```\n\n### Sigils\n\n```elixir\n~r/regexp/\n~w(list of strings)\n~s|strings with #{interpolation} and \\x20 escape codes|\n~S|no interpolation and no escapes|\n~c(charlist)\n```\n\nAllowed chars: `/` `|` `\"` `'` `(` `[` `{` `<` `\"\"\"`.\nSee: [Sigils](http://elixir-lang.org/getting-started/sigils.html)\n\n### Type specs\n\n```elixir\n@spec round(number) :: integer\n\n@type number_with_remark :: {number, String.t}\n@spec add(number, number) :: number_with_remark\n```\n\nUseful for [dialyzer](http://www.erlang.org/doc/man/dialyzer.html).\nSee: [Typespecs](http://elixir-lang.org/getting-started/typespecs-and-behaviours.html)\n\n### Behaviours\n\n```elixir\ndefmodule Parser do\n  @callback parse(String.t) :: any\n  @callback extensions() :: [String.t]\nend\n```\n\n```elixir\ndefmodule JSONParser do\n  @behaviour Parser\n\n  def parse(str), do: # ... parse JSON\n  def extensions, do: [\"json\"]\nend\n```\n\nSee: [Module](http://elixir-lang.org/docs/stable/elixir/Module.html)\n\n## References\n{: .-one-column}\n\n- [Learn Elixir in Y minutes](https://learnxinyminutes.com/docs/elixir/)\n"
  },
  {
    "path": "emacs.md",
    "content": "---\ntitle: Emacs\ncategory: CLI\n---\n\n### Movements\n\n   ^n ^p    # up/down\n   ^f ^b    # left/right\n\n   ^v Mv    # up/down page\n\n   ^a ^e    # begin/end of line\n   Ma Me    # begin/end of sentence\n\n### Basic\n\n   ^x ^f    # find file\n   ^x ^s    # save file\n\n### Command line\n\n   Mx\n\n### Packages\n\n   Mx package-install RET evil RET\n"
  },
  {
    "path": "ember.md",
    "content": "---\ntitle: Ember.js\ncategory: JavaScript libraries\ntags: [Archived]\narchived: This sheet describes an older version of Ember.\n---\n\n{% raw %}\n\n### Routes\n\n    Router.map(function() {\n      this.route('trips', function() {\n          this.route('item', { path: '/:tripId' });\n      });\n\n      this.route('upcoming');\n      this.route('about', { path: '/aboutus' });\n      this.route('schedules');\n      this.route('history');\n      this.route('post', { path: '/post/:postId' });\n    });\n\n### A route\n\n    import Route from '@ember/routing/route';\n    \n    export default PostRoute extends Route {\n      model({ postId }) {\n        // Post will be accessible as `this.model` in the controller\n        // or `{{@model}}` in the template.\n        return this.store.find('post', postId);\n      }\n    }\n\n### Component\n    \n    import Component from '@glimmer/component';\n    import { tracked } from '@glimmer/tracking';\n    \n    export default PostEditor extends Component {\n      @tracked title;\n     \n      get fullTitle() {\n        return `Post: ${title}`;\n      }\n      \n      titleUpdate(event) {\n        this.title = event.target.value;\n      }\n    }\n\n### Template\n\n    <div ...attributes>\n        <label for=\"title\">Title</label>\n        <input\n            id=\"title\"\n            value={{@post.title}}\n            {{on 'input' this.updateTitle}}\n        />\n\n        <p>\n            {{this.fullTitle}}\n        </p>\n    </div>\n\nInvoking the component:\n\n    <PostEditor class='my-post' @post={{@model}} />\n\n\n{% endraw %}\n"
  },
  {
    "path": "emmet.md",
    "content": "---\ntitle: Emmet\ncategory: Markup\nprism_languages: [html, css]\nupdated: 2020-07-03\nintro: |\n  Emmet is a markup language for expanding CSS rules into HTML\n---\n\n### Child: >\n\n```css\nnav>ul>li\n```\nExpands to\n```html\n<nav>\n  <ul>\n    <li></li>\n  </ul>\n</nav>\n```\n\n\n### Sibling: +\n\n```css\nsection>p+p+p\n```\nExpands to\n```html\n<section>\n  <p></p>\n  <p></p>\n  <p></p>\n</section>\n```\n\n### Climb Up: ^\n\n```css\nsection>header>h1^footer\n```\nExpands to\n```html\n<section>\n  <header>\n    <h1></h1>\n  </header>\n  <footer></footer>\n</section>\n```\n\n### Grouping: ()\n\n```css\nsection>(header>nav>ul>li)+footer>p\n```\nExpands to\n```html\n<section>\n  <header>\n    <nav>\n      <ul>\n        <li></li>\n      </ul>\n    </nav>\n  </header>\n  <footer>\n    <p></p>\n  </footer>\n</section>\n```\n\n### Multiplication: \\*\n\n```css\nul>li*3\n```\nExpands to\n```html\n<ul>\n  <li></li>\n  <li></li>\n  <li></li>\n</ul>\n```\n\n### IDs and Classes: . #\n\n```css\nul.menu>li.menu__item+li#id_item+li.menu__item#id_2\n```\nExpands to\n```html\n<ul class=\"menu\">\n  <li class=\"menu__item\"></li>\n  <li id=\"id_item\"></li>\n  <li class=\"menu__item\" id=\"id_2\"></li>\n</ul>\n```\n\n### Numbering: $\n\n```css\nul>li.item$*3\nul>li.item$$*3\nul>li.item$@-*3\nul>li.item$@3*5\n```\nExpands to\n```html\n<ul>\n  <li class=\"item1\"></li>\n  <li class=\"item2\"></li>\n  <li class=\"item3\"></li>\n</ul>\n<ul>\n  <li class=\"item01\"></li>\n  <li class=\"item02\"></li>\n  <li class=\"item03\"></li>\n</ul>\n<ul>\n  <li class=\"item3\"></li>\n  <li class=\"item2\"></li>\n  <li class=\"item1\"></li>\n</ul>\n<ul>\n  <li class=\"item3\"></li>\n  <li class=\"item4\"></li>\n  <li class=\"item5\"></li>\n</ul>\n<ul>\n  <li class=\"item3\"></li>\n  <li class=\"item4\"></li>\n  <li class=\"item5\"></li>\n  <li class=\"item6\"></li>\n  <li class=\"item7\"></li>\n</ul>\n```\n\n### Attributes: []\n\n```css\ninput[type=\"text\"]\ndiv[data-attr=\"test\"]\n```\nExpands to\n```html\n<input type=\"text\" />\n<div data-attr=\"test\"></div>\n```\n\n### Text: {}\n\n```css\np{Lorem ipsum}\n```\nExpands to\n```html\n<p>Lorem ipsum</p>\n```\n\n### Implicit tags\n\n```css\n.default-block\nem>.default-inline\nul>.default-list\ntable>.default-table-row>.default-table-column\n```\nExpands to\n```html\n<div class=\"default-block\"></div>\n<em><span class=\"default-inline\"></span></em>\n<ul>\n  <li class=\"default-list\"></li>\n</ul>\n<table>\n  <tr class=\"default-table-row\">\n    <td class=\"default-table-column\"></td>\n  </tr>\n</table>\n```\n"
  },
  {
    "path": "enzyme.md",
    "content": "---\ntitle: Enzyme\ncategory: React\nupdated: 2020-02-12\ntags: [Featured]\nweight: -1\nkeywords:\n  - shallow()\n  - mount()\n  - wrap.setProps()\n  - \"wrap.find().simulate('click')\"\n  - \"wrap.contains(<div/>)\"\n---\n\n## Getting started\n\n### Introduction\n{: .-intro}\n\n[Enzyme](https://airbnb.io/enzyme) lets you write unit tests for React components. This guide covers Enzyme 3.x.\n\n- [Enzyme website](https://enzymejs.github.io/enzyme/) _(enzymejs.github.io)_\n\n### Mounting\n{: .-prime}\n\n```js\nimport {shallow, mount} from 'enzyme'\n```\n{: .-setup}\n\n```js\nwrap = shallow(<MyComponent />)\n```\n\n```js\nwrap = mount(<MyComponent />)\n```\n\nShallow wrapping doesn't descend down to sub-components.\nA full mount also mounts sub-components.\n\nSee: [Shallow rendering](https://airbnb.io/enzyme/docs/api/shallow.html),\n[Full rendering](https://airbnb.io/enzyme/docs/api/mount.html)\n\n### Debugging\n\n```js\nconsole.log(wrap.debug())\n```\n\nShows HTML for debugging purposes.\n\nSee: [debug()](https://airbnb.io/enzyme/docs/api/ReactWrapper/debug.html)\n\n## Examples\n{: .-three-column}\n\n### Basic example\n{: .-prime}\n\n```js\nimport { shallow } from 'enzyme'\nimport MyComponent from '../MyComponent'\n```\n{: .-setup}\n\n```js\nit('works', () => {\n  const wrap = shallow(\n    <MyComponent name='Groot' />\n  )\n\n  expect(wrap.text()).toEqual('I am Groot')\n})\n```\n\n### Props and state\n\n#### Setting\n\n```js\nwrap.setProps({ name: 'Moe' })\nwrap.setState({ show: true })\n```\n\n#### Asserting\n\n```js\nexpect(wrap.prop('name')).toEqual('Moe')\nexpect(wrap.state('show')).toEqual(true)\n```\n\n```js\nexpect('name' in wrap.props()).toEqual('Moe')\nexpect('show' in wrap.state()).toEqual(true)\n```\n\n### Matching elements\n\n```js\nexpect(\n  wrap.containsMatchingElement(\n    <span>I am groot</span>\n  )\n).toBeTruthy()\n```\n\n`containsMatchingElement()` is probably the most useful assertion in Jest.\n\n### Snapshots\n\n```js\nexpect(wrap).toMatchSnapshot()\n```\n\nBe sure you've set up enzyme-to-json for snapshots (see [Installing](#installing) below).\n\n### Traversions\n\n```js\nexpect(\n  wrap.find('button').text()\n).toEqual('Submit')\n```\n\nUse `.find()` to traverse down to nodes. It will return wrapper objects, too.\n\n### Simulating events\n\n```js\nwrap.find('input').simulate('click')\n```\n\n#### With event object props\n\n```js\nwrap.find('input').simulate('change', {\n  target: { value: 'hello' }\n})\n```\n\n## Installing\n\n### Initial setup\n\n```\nnpm install --save-dev enzyme \\\n  enzyme-adapter-react-16 \\\n  react-test-renderer\n```\n{: .-setup}\n\n#### test/setup.js\n\n```js\nimport Enzyme from 'enzyme'\nimport Adapter from 'enzyme-adapter-react-16'\n\nEnzyme.configure({ adapter: new Adapter() })\n```\n\n#### package.json\n\n```js\n\"jest\": {\n  \"setupFiles\": [\n    \"test/setup.js\"\n  ]\n}\n```\n\nThis configures Enzyme for React v16, and Jest to automatically configure Enzyme for you. There are other adapters in Enzyme's installation instructions.\n\nSee: [Installation](https://airbnb.io/enzyme/#installation)\n\n### Jest snapshots\n\n```\nnpm install --save-dev enzyme-to-json\n```\n{: .-setup}\n\n#### package.json\n\n```js\n\"jest\": {\n  \"snapshotSerializers\": [\n    \"enzyme-to-json/serializer\"\n  ]\n}\n```\n\n#### Test\n\n```js\nit('works', () => {\n  wrap = mount(<MyComponent />)\n  expect(wrap).toMatchSnapshot()\n})\n```\n\nOptional, but recommended: This allows you to use Enzyme wrappers with Jest snapshots.\n\nSee: [enzyme-to-json](https://www.npmjs.com/package/enzyme-to-json)\n\n## ReactWrapper\n\n### Traversing\n\n```js\nwrap.find('button')   // → ReactWrapper\nwrap.filter('button') // → ReactWrapper\nwrap.not('span')      // → ReactWrapper (inverse of filter())\nwrap.children()       // → ReactWrapper\nwrap.parent()         // → ReactWrapper\nwrap.closest('div')   // → ReactWrapper\nwrap.childAt(0)       // → ReactWrapper\nwrap.at(0)            // → ReactWrapper\nwrap.first()          // → ReactWrapper\nwrap.last()           // → ReactWrapper\n```\n\n```js\nwrap.get(0)           // → ReactElement\nwrap.getElement()     // → ReactElement\nwrap.getElements()    // → Array<ReactElement>\nwrap.getDOMNode()     // → DOMComponent\n```\n\nSee: [Full rendering API](https://airbnb.io/enzyme/docs/api/mount.html)\n\n### Actions\n\n```js\nwrap.simulate('click')\n```\n\n### React components\n\n```js\nwrap.setState({ ··· })\nwrap.setProps({ ··· })\nwrap.setContext({ ··· })\n```\n\n```js\nwrap.state()         // get full state\nwrap.props()         // get full props\nwrap.context()       // get full context\n```\n\n```js\nwrap.state('key')    // → any\nwrap.prop('key')     // → any\nwrap.context('key')  // → any\n```\n\n```js\nwrap.instance()      // → ReactComponent\n```\n\n### Mount\n\n```js\nwrap.mount()\nwrap.unmount()\nwrap.update()      // calls forceUpdate()\n```\n\n### Tests\n\n```js\nwrap.debug()               // → string\nwrap.html()                // → string\nwrap.text()                // → string\nwrap.type()                // → string | function\nwrap.name()                // → string\nwrap.is('.classname')      // → boolean\nwrap.hasClass('class')     // → boolean\nwrap.exists()              // → boolean\nwrap.contains(<div />)     // → boolean\nwrap.contains([ <div /> ]) // → boolean\nwrap.some('.child')        // → boolean\n\nwrap.someWhere(n => n.hasClass('foo'))\n\nwrap.containsMatchingElement(<div />)         // → boolean\nwrap.containsAllMatchingElements([ <div /> ]) // → boolean\nwrap.containsAnyMatchingElements([ <div /> ]) // → boolean\n```\n\n## References\n\n- [Enzyme website](https://airbnb.io/enzyme) _(airbnb.io)_\n- [Enzyme v2 cheatsheet](./enzyme@2) _(devhints.io)_ (old version)\n"
  },
  {
    "path": "enzyme@2.md",
    "content": "---\ntitle: Enzyme v2\ncategory: React\nupdated: 2017-10-12\nweight: -1\ndeprecated_by: /enzyme\n---\n\n## Getting started\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\n**(Deprecated)** [Enzyme](http://airbnb.io/enzyme) lets you write unit tests for React components. This guide covers a previous version (v2.x).\n\n### Mounting\n{: .-prime}\n\n```js\nimport {shallow, mount} from 'enzyme'\n```\n{: .-setup}\n\n```js\nwrap = shallow(<MyComponent />)\n```\n\n```js\nwrap = mount(<MyComponent />)\n```\n\nShallow wrapping doesn't descend down to sub-components.\nA full mount also mounts sub-components.\nSee: [Shallow rendering](http://airbnb.io/enzyme/docs/api/shallow.html),\n[Full rendering](http://airbnb.io/enzyme/docs/api/mount.html)\n\n### Jest\n\n```js\nimport toJson from 'enzyme-to-json'\n```\n{: .-setup}\n\n```js\nit('works', () => {\n  wrap = mount(<MyComponent />)\n  expect(toJson(wrap)).toMatchSnapshot()\n})\n```\n\nConverts an Enzyme wrapper to a format compatible with Jest snapshots. See: [enzyme-to-json](https://www.npmjs.com/package/enzyme-to-json)\n\n### Debugging\n\n```js\nconsole.log(wrap.debug())\n```\n\nShows HTML for debugging purposes. See: [debug()](http://airbnb.io/enzyme/docs/api/ReactWrapper/debug.html)\n\n## ReactWrapper\n\n### Traversing\n\n```js\nwrap.find('button')   // => ReactWrapper\nwrap.filter('button') // => ReactWrapper\nwrap.not('span')      // => ReactWrapper (inverse of filter())\nwrap.children()       // => ReactWrapper\nwrap.parent()         // => ReactWrapper\nwrap.closest('div')   // => ReactWrapper\nwrap.childAt(0)       // => ReactWrapper\nwrap.at(0)            // => ReactWrapper\nwrap.first()          // => ReactWrapper\nwrap.last()           // => ReactWrapper\n```\n\n```js\nwrap.get(0)           // => ReactElement\nwrap.getNode()        // => ReactElement\nwrap.getNodes()       // => Array<ReactElement>\nwrap.getDOMNode()     // => DOMComponent\n```\n\nSee: [Full rendering API](http://airbnb.io/enzyme/docs/api/mount.html)\n\n### Actions\n\n```js\nwrap.simulate('click')\n```\n\n### React components\n\n```js\nwrap.setState({ ... })\nwrap.setProps({ ... })\nwrap.setContext({ ... })\n\nwrap.state()            // => Any (get state)\nwrap.props()            // => object (get props)\nwrap.context()          // => Any (get context)\n\nwrap.instance()         // => ReactComponent\n```\n\n### Mount\n\n```js\nwrap.mount()\nwrap.unmount()\nwrap.update()      // calls forceUpdate()\n```\n\n### Tests\n\n```js\nwrap.debug()               // => string\nwrap.html()                // => string\nwrap.text()                // => string\nwrap.type()                // => string | function\nwrap.name()                // => string\nwrap.is('.classname')      // => boolean\nwrap.hasClass('class')     // => boolean\nwrap.exists()              // => boolean\nwrap.contains(<div />)     // => boolean\nwrap.contains([ <div /> ]) // => boolean\n\nwrap.containsMatchingElement(<div />)         // => boolean\nwrap.containsAllMatchingElements([ <div /> ]) // => boolean\nwrap.containsAnyMatchingElements([ <div /> ]) // => boolean\n```\n\n## References\n\n- <https://airbnb.io/enzyme>\n"
  },
  {
    "path": "es6.md",
    "content": "---\ntitle: ES2015+\ncategory: JavaScript\ntags: [Featured]\nupdated: 2019-11-14\nweight: -10\nintro: |\n  A quick overview of new JavaScript features in ES2015, ES2016, ES2017, ES2018 and beyond.\n---\n\n### Block scoping\n\n#### Let\n\n```js\nfunction fn () {\n  let x = 0\n  if (true) {\n    let x = 1 // only inside this `if`\n  }\n}\n```\n{: data-line=\"2,4\"}\n\n#### Const\n\n```js\nconst a = 1\n```\n\n`let` is the new `var`. Constants work just like `let`, but can't be reassigned.\nSee: [Let and const](https://babeljs.io/learn-es2015/#let--const)\n\n### Backtick strings\n\n#### Interpolation\n\n```js\nconst message = `Hello ${name}`\n```\n\n#### Multiline strings\n\n```js\nconst str = `\nhello\nworld\n`\n```\n\nTemplates and multiline strings.\nSee: [Template strings](https://babeljs.io/learn-es2015/#template-strings)\n\n### Binary and octal literals\n\n```js\nlet bin = 0b1010010\nlet oct = 0o755\n```\n\nSee: [Binary and octal literals](https://babeljs.io/learn-es2015/#binary-and-octal-literals)\n\n### New methods\n\n#### New string methods\n\n```js\n\"hello\".repeat(3)\n\"hello\".includes(\"ll\")\n\"hello\".startsWith(\"he\")\n\"hello\".padStart(8) // \"   hello\"\n\"hello\".padEnd(8) // \"hello   \" \n\"hello\".padEnd(8, '!') // hello!!!\n\"\\u1E9B\\u0323\".normalize(\"NFC\")\n```\n\nSee: [New methods](https://babeljs.io/learn-es2015/#math--number--string--object-apis)\n\n### Classes\n\n```js\nclass Circle extends Shape {\n```\n\n#### Constructor\n\n```js\n  constructor (radius) {\n    this.radius = radius\n  }\n```\n{: data-line=\"1\"}\n\n#### Methods\n\n```js\n  getArea () {\n    return Math.PI * 2 * this.radius\n  }\n```\n{: data-line=\"1\"}\n\n#### Calling superclass methods\n\n```js\n  expand (n) {\n    return super.expand(n) * Math.PI\n  }\n```\n{: data-line=\"2\"}\n\n#### Static methods\n\n```js\n  static createFromDiameter(diameter) {\n    return new Circle(diameter / 2)\n  }\n}\n```\n{: data-line=\"1\"}\n\nSyntactic sugar for prototypes.\nSee: [Classes](https://babeljs.io/learn-es2015/#classes)\n\n### Exponent operator\n\n```js\nconst byte = 2 ** 8\n// Same as: Math.pow(2, 8)\n```\n{: data-line=\"1\"}\n\nPromises\n--------\n{: .-three-column}\n\n### Making promises\n\n```js\nnew Promise((resolve, reject) => {\n  if (ok) { resolve(result) }\n  else { reject(error) }\n})\n```\n{: data-line=\"1\"}\n\nFor asynchronous programming.\nSee: [Promises](https://babeljs.io/learn-es2015/#promises)\n\n### Using promises\n\n```js\npromise\n  .then((result) => { ··· })\n  .catch((error) => { ··· })\n```\n{: data-line=\"2,3\"}\n\n\n### Using promises with finally\n\n```js\npromise\n  .then((result) => { ··· })\n  .catch((error) => { ··· })\n  .finally(() => { // logic independent of success/error })\n```\n{: data-line=\"4\"}\n\nThe handler is called when the promise is fulfilled or rejected.\n\n\n### Promise functions\n\n```js\nPromise.all(···)\nPromise.race(···)\nPromise.reject(···)\nPromise.resolve(···)\n```\n\n### Async-await\n\n```js\nasync function run () {\n  const user = await getUser()\n  const tweets = await getTweets(user)\n  return [user, tweets]\n}\n```\n{: data-line=\"2,3\"}\n\n`async` functions are another way of using functions.\n\nSee: [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)\n\nDestructuring\n-------------\n{: .-three-column}\n\n### Destructuring assignment\n\n#### Arrays\n\n```js\nconst [first, last] = ['Nikola', 'Tesla']\n```\n{: data-line=\"1\"}\n\n#### Objects\n\n```js\nlet {title, author} = {\n  title: 'The Silkworm',\n  author: 'R. Galbraith'\n}\n```\n{: data-line=\"1\"}\n\nSupports for matching arrays and objects.\nSee: [Destructuring](https://babeljs.io/learn-es2015/#destructuring)\n\n### Default values\n\n```js\nconst scores = [22, 33]\nconst [math = 50, sci = 50, arts = 50] = scores\n```\n\n```js\n// Result:\n// math === 22, sci === 33, arts === 50\n```\n\nDefault values can be assigned while destructuring arrays or objects.\n\n### Function arguments\n\n```js\nfunction greet({ name, greeting }) {\n  console.log(`${greeting}, ${name}!`)\n}\n```\n{: data-line=\"1\"}\n\n```js\ngreet({ name: 'Larry', greeting: 'Ahoy' })\n```\n\nDestructuring of objects and arrays can also be done in function arguments.\n\n### Default values\n\n```js\nfunction greet({ name = 'Rauno' } = {}) {\n  console.log(`Hi ${name}!`);\n}\n```\n{: data-line=\"1\"}\n\n```js\ngreet() // Hi Rauno!\ngreet({ name: 'Larry' }) // Hi Larry!\n```\n\n### Reassigning keys\n\n```js\nfunction printCoordinates({ left: x, top: y }) {\n  console.log(`x: ${x}, y: ${y}`)\n}\n```\n{: data-line=\"1\"}\n\n```js\nprintCoordinates({ left: 25, top: 90 })\n```\n\nThis example assigns `x` to the value of the `left` key.\n\n### Loops\n\n```js\nfor (let {title, artist} of songs) {\n  ···\n}\n```\n{: data-line=\"1\"}\n\nThe assignment expressions work in loops, too.\n\n\n### Object destructuring\n\n```js\nconst { id, ...detail } = song;\n```\n{: data-line=\"1\"}\n\nExtract some keys individually and remaining keys in the object using rest (...) operator\n\n\nSpread\n------\n\n### Object spread\n\n#### with Object spread\n\n```js\nconst options = {\n  ...defaults,\n  visible: true\n}\n```\n{: data-line=\"2\"}\n\n#### without Object spread\n\n```js\nconst options = Object.assign(\n  {}, defaults,\n  { visible: true })\n```\n\nThe Object spread operator lets you build new objects from other objects.\n\nSee: [Object spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)\n\n### Array spread\n\n#### with Array spread\n\n```js\nconst users = [\n  ...admins,\n  ...editors,\n  'rstacruz'\n]\n```\n{: data-line=\"2,3\"}\n\n#### without Array spread\n\n```js\nconst users = admins\n  .concat(editors)\n  .concat([ 'rstacruz' ])\n```\n\nThe spread operator lets you build new arrays in the same way.\n\nSee: [Spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)\n\nFunctions\n---------\n\n### Function arguments\n\n#### Default arguments\n\n```js\nfunction greet (name = 'Jerry') {\n  return `Hello ${name}`\n}\n```\n{: data-line=\"1\"}\n\n#### Rest arguments\n\n```js\nfunction fn(x, ...y) {\n  // y is an Array\n  return x * y.length\n}\n```\n{: data-line=\"1\"}\n\n#### Spread\n\n```js\nfn(...[1, 2, 3])\n// same as fn(1, 2, 3)\n```\n{: data-line=\"1\"}\n\nDefault, rest, spread.\nSee: [Function arguments](https://babeljs.io/learn-es2015/#default--rest--spread)\n\n### Fat arrows\n\n#### Fat arrows\n\n```js\nsetTimeout(() => {\n  ···\n})\n```\n{: data-line=\"1\"}\n\n#### With arguments\n\n```js\nreadFile('text.txt', (err, data) => {\n  ...\n})\n```\n{: data-line=\"1\"}\n\n#### Implicit return\n```js\nnumbers.map(n => n * 2)\n// No curly braces = implicit return\n// Same as: numbers.map(function (n) { return n * 2 })\nnumbers.map(n => ({\n  result: n * 2\n}))\n// Implicitly returning objects requires parentheses around the object\n```\n{: data-line=\"1,4,5,6\"}\n\nLike functions but with `this` preserved.\nSee: [Fat arrows](https://babeljs.io/learn-es2015/#arrows-and-lexical-this)\n\nObjects\n-------\n\n### Shorthand syntax\n\n```js\nmodule.exports = { hello, bye }\n// Same as: module.exports = { hello: hello, bye: bye }\n```\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n### Methods\n\n```js\nconst App = {\n  start () {\n    console.log('running')\n  }\n}\n// Same as: App = { start: function () {···} }\n```\n{: data-line=\"2\"}\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n### Getters and setters\n\n```js\nconst App = {\n  get closed () {\n    return this.status === 'closed'\n  },\n  set closed (value) {\n    this.status = value ? 'closed' : 'open'\n  }\n}\n```\n{: data-line=\"2,5\"}\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n### Computed property names\n\n```js\nlet event = 'click'\nlet handlers = {\n  [`on${event}`]: true\n}\n// Same as: handlers = { 'onclick': true }\n```\n{: data-line=\"3\"}\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n\n### Extract values\n\n```js\nconst fatherJS = { age: 57, name: \"Brendan Eich\" }\n\nObject.values(fatherJS)\n// [57, \"Brendan Eich\"]\nObject.entries(fatherJS)\n// [[\"age\", 57], [\"name\", \"Brendan Eich\"]]\n```\n{: data-line=\"3,5\"}\n\n\nModules\n-------\n\n### Imports\n\n```js\nimport 'helpers'\n// aka: require('···')\n```\n\n```js\nimport Express from 'express'\n// aka: const Express = require('···').default || require('···')\n```\n\n```js\nimport { indent } from 'helpers'\n// aka: const indent = require('···').indent\n```\n\n```js\nimport * as Helpers from 'helpers'\n// aka: const Helpers = require('···')\n```\n\n```js\nimport { indentSpaces as indent } from 'helpers'\n// aka: const indent = require('···').indentSpaces\n```\n\n`import` is the new `require()`.\nSee: [Module imports](https://babeljs.io/learn-es2015/#modules)\n\n### Exports\n\n```js\nexport default function () { ··· }\n// aka: module.exports.default = ···\n```\n\n```js\nexport function mymethod () { ··· }\n// aka: module.exports.mymethod = ···\n```\n\n```js\nexport const pi = 3.14159\n// aka: module.exports.pi = ···\n```\n\n`export` is the new `module.exports`.\nSee: [Module exports](https://babeljs.io/learn-es2015/#modules)\n\nGenerators\n----------\n\n### Generators\n\n```js\nfunction* idMaker () {\n  let id = 0\n  while (true) { yield id++ }\n}\n```\n\n```js\nlet gen = idMaker()\ngen.next().value  // → 0\ngen.next().value  // → 1\ngen.next().value  // → 2\n```\n\nIt's complicated.\nSee: [Generators](https://babeljs.io/learn-es2015/#generators)\n\n### For..of iteration\n\n```js\nfor (let i of iterable) {\n  ···\n}\n```\n\nFor iterating through generators and arrays.\nSee: [For..of iteration](https://babeljs.io/learn-es2015/#iterators--forof)\n"
  },
  {
    "path": "ets.md",
    "content": "---\ntitle: Erlang ETS\ncategory: Elixir\nweight: -1\n---\n\n## ETS\n\n### Usage\n\n```elixir\niex> table = :ets.new(:my_table, [])\n     8211\n```\n\n```elixir\niex> :ets.insert(table, {:fruit, \"Apple\"})\niex> :ets.lookup(table, :fruit)\n     [{:fruit, \"Apple\"}]\n```\n\n```elixir\niex> :ets.delete(table)\niex> :ets.delete_all_objects(table)\n```\n\n### Flags\n\n```elixir\niex> table = :ets.new(:my_table, [:set, :protected])\n```\n{: .-setup}\n\n| `:set` | no duplicate keys (or: `:ordered_set`, `:bag`, `:duplicate_bag`) |\n| `:protected` | only this process can use it (or: `:public`, `:private`) |\n\n### Ordered sets\n\n```elixir\n:ets.first(table)\n:ets.last(table)\n:ets.next(table, key)\n:ets.prev(table, key)\n```\n\n## References\n{: .-one-column}\n\n* <http://erlang.org/doc/man/ets.html>\n* <http://learnyousomeerlang.com/ets>\n"
  },
  {
    "path": "expectjs.md",
    "content": "---\ntitle: expect.js\ncategory: JavaScript libraries\nupdated: 2017-09-02\nweight: -1\n---\n\n### Using\n\n```\nnpm install --save-dev expect\n```\n{: .-setup}\n\n```js\n// using ES6 modules\nimport expect, { createSpy, spyOn, isSpy } from 'expect'\n```\n\n```js\n// using CommonJS modules\nvar expect = require('expect')\nvar createSpy = expect.createSpy\nvar spyOn = expect.spyOn\nvar isSpy = expect.isSpy\n```\n\nExpect is a library for assertions in tests.\nSee: [mjackson/expect](https://github.com/mjackson/expect)\n\n### Assertions\n\n```js\nexpect(x).toBe(y)\n  .toBe(val)\n  .toEqual(val)\n  .toThrow(err)\n  .toExist()          // aka: toBeTruthy()\n  .toNotExist()       // aka: toBeFalsy()\n  .toBeA(constructor)\n  .toBeA('string')\n  .toMatch(/expr/)\n  .toBeLessThan(n)\n  .toBeGreaterThan(n)\n  .toBeLessThanOrEqualTo(n)\n  .toBeGreaterThanOrEqualTo(n)\n  .toInclude(val)     // aka: toContain(val)\n  .toExclude(val)\n  .toIncludeKey(key)\n  .toExcludeKey(key)\n```\n\nAlso: `toNotBe`, `toNotEqual`, etc for negatives.\n\n### Chaining assertions\n\n```js\nexpect(3.14)\n  .toExist()\n  .toBeLessThan(4)\n  .toBeGreaterThan(3)\n```\n\nAssertions can be chained.\n\n### Spies\n\n```js\nconst video = {\n  play: function () { ··· }\n}\n```\n{: .-setup}\n\n```js\nspy = expect.spyOn(video, 'play')\n```\n\n```js\nspy = expect.spyOn(···)\n  .andCallThrough()      // pass through\n  .andCall(fn)\n  .andThrow(exception)\n  .andReturn(value)\n```\n\n### Assertions on spies\n\n```js\nexpect(spy.calls.length).toEqual(1)\nexpect(spy.calls[0].context).toBe(video)\nexpect(spy.calls[0].arguments).toEqual([ 'some', 'args' ])\nexpect(spy.getLastCall().arguments).toEqual(...)\n```\n\n```js\nexpect(spy).toHaveBeenCalled()\nexpect(spy).toHaveBeenCalledWith('some', 'args')\n```\n\n### References\n\n- <https://www.npmjs.com/package/expect>\n- <https://github.com/mjackson/expect>\n"
  },
  {
    "path": "express.md",
    "content": "---\ntitle: Express.js\ncategory: JavaScript libraries\n---\n\n### Settings\n\n```js\napp.set('x', 'yyy')\napp.get('x') //=> 'yyy'\n\napp.enable('trust proxy')\napp.disable('trust proxy')\n\napp.enabled('trust proxy') //=> true\n```\n\n### Env\n\n```js\napp.get('env')\n```\n\n### Config\n\n```js\napp.configure('production', function() {\n  app.set...\n})\n```\n\n### Wares\n\n```js\napp.use(express.static(__dirname + '/public'))\napp.use(express.logger())\n```\n\n### Helpers\n\n```js\napp.locals({\n  title: \"MyApp\",\n})\n```\n\n## Request & response\n\n### Request\n\n```js\n// GET  /user/tj\nreq.path         //=> \"/user/tj\"\nreq.url          //=> \"/user/tj\"\nreq.xhr          //=> true|false\nreq.method       //=> \"GET\"\nreq.params\nreq.params.name  //=> \"tj\"\nreq.params[0]\n```\n\n```js\n// GET /search?q=tobi+ferret\nreq.query.q // => \"tobi ferret\"\n```\n\n```js\nreq.cookies\n```\n\n```js\nreq.accepted\n// [ { value: 'application/json', quality: 1, type: 'application', subtype: 'json' },\n//   { value: 'text/html', quality: 0.5, type: 'text',subtype: 'html' } ]\n```\n\n```js\nreq.is('html')\nreq.is('text/html')\n```\n\n```js\nreq.headers\nreq.headers['host']\nreq.headers['user-agent']\nreq.headers['accept-encoding']\nreq.headers['accept-language']\n```\n\n### Response\n\n```js\nres.redirect('/')\nres.redirect(301, '/')\n```\n\n```js\nres.set('Content-Type', 'text/html')\n```\n\n```js\nres.send('hi')\nres.send(200, 'hi')\n```\n\n```js\nres.json({ a: 2 })\n```\n"
  },
  {
    "path": "exunit.md",
    "content": "---\ntitle: ExUnit\ncategory: Elixir\nupdated: 2018-11-19\n---\n\n### Test cases\n\n```elixir\ndefmodule MyTest do\n  use ExUnit.Case\n  use ExUnit.Case, async: true  # for async\n\n  test \"the truth\" do\n    assert 1 + 1 == 2\n  end\nend\n```\n\n### Capture IO\n\n```elixir\nimport ExUnit.CaptureIO\n\ntest \"capture io\" do\n  result = capture_io(fn ->\n    IO.puts \"sup\"\n  end)\n\n  assert result == \"sup\\n\"\nend\n```\n\n### Capture logs\n\n```elixir\nconfig :ex_unit, capture_logs: true\n```\n\n### Async\n\n```elixir\ndefmodule AssertionTest do\n  # run concurrently with other test cases\n  use ExUnit.Case, async: true\nend\n```\n\n### Assertions\n\n```elixir\nassert x == y\nrefute x == y\n\nassert_raise ArithmeticError, fn ->\n  1 + \"test\"\nend\n\nassert_raise ArithmeticError, \"message\", fn -> ...\nassert_raise ArithmeticError, ~r/message/, fn -> ...\n\nflunk \"This should've been an error\"\n```\n\nSee: [Assertions](http://devdocs.io/elixir/ex_unit/exunit.assertions)\n\n## Setup\n\n### Pattern matching\n\n```elixir\nsetup do\n  {:ok, name: \"John\"}\nend\n```\n\n```elixir\ntest \"it works\", %{name: name} do\n  assert name == \"John\"\nend\n```\n\n### Setup\n\n\n```elixir\ndefp my_hook(_context) do\n  # Invoked in every block in \"a block\"\n  {:ok, name: \"John\", age: 54}\nend\n\ndescribe \"a block\" do\n  setup [:my_hook]\n  \n  test \"John's age\", context do\n    assert context[:name] == \"John\"\n    assert context[:age] == 54\n  end\nend\n```\n\n\n## Also see\n{: .-one-column}\n\n* [ExUnit Docs](http://devdocs.io/elixir/ex_unit/exunit#configure/1)\n"
  },
  {
    "path": "factory_bot.md",
    "content": "---\ntitle: Factory Bot\ncategory: Ruby libraries\nweight: -3\nupdated: 2020-07-06\nkeywords:\n  - \"FactoryBot.define do\"\n  - \"factory :user\"\n  - \"first_name 'John'\"\n  - \"sequence(:username) { |n| \\\"user#{n}\\\" }\"\ntags: [Featurable]\n---\n\n## Factories\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\n[Factory Bot](http://www.rubydoc.info/gems/factory_bot/) is a helper for writing factories for Ruby tests. It was previously known as Factory Girl. For older versions, use `FactoryGirl` instead of `FactoryBot`.\n\n- [Factory Bot documentation](http://www.rubydoc.info/gems/factory_bot/) _(rubydoc.info)_\n- [Getting started](https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md) _(github.com)_\n- [Source code](https://github.com/thoughtbot/factory_bot) _(github.com)_\n\n### Defining factories\n\n```ruby\nFactoryBot.define do\n  factory :user do\n    first_name { 'John' }\n    last_name  { 'Doe' }\n    birthdate  { 21.years.ago }\n    admin { false }\n\n    sequence(:username) { |n| \"user#{n}\" }\n  end\nend\n```\n{: data-line=\"2\"}\n\nSee: [Defining factories](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Defining_factories)\n\n### Extra options\n\n#### Custom class names\n\n```ruby\nfactory :user, class: 'User' do\n  ···\nend\n```\n\n#### Aliases\n\n```ruby\nfactory :user, aliases: [:author] do\n  ···\nend\n```\n\n### Using\n\n#### Build a model\n\n```ruby\nFactoryBot.build(:user)\n```\n\n#### Other ways\n\n```ruby\nbuild(:user)           # → model (not saved)\ncreate(:user)          # → model (saved)\nattributes_for(:user)  # → hash\nbuild_stubbed(:user)   # stubbed out attributes\n```\n\n#### With options\n\n```ruby\nbuild(:user, name: 'John')\n```\n\n#### Lists\n\n```ruby\ncreate_list(:user, 3)\nbuild_list(:user, 3)\n```\n\n## Associations\n\n### Defining\n\n```ruby\nfactory :post do\n  association :author, factory: :user\n  association :author, factory: [:user, :admin]\nend\n```\n{: data-line=\"2,3\"}\n\n#### or\n\n```ruby\nfactory :post do\n  author  # assumes there's a factory :author\nend\n```\n\n### After-create hooks\n\n```ruby\nfactory :post do\n  after :create do |post|\n    create :theme, post: post             # has_one\n    create_list :comment, 3, post: post   # has_many\n  end\nend\n```\n{: data-line=\"2\"}\n\n## Other features\n{: .-three-column}\n\n### Traits\n\n```ruby\nfactory :user do\n  trait :admin do\n    admin { true }\n  end\nend\n```\n{: data-line=\"2,3,4\"}\n\n```ruby\ncreate :user, :admin\n```\n\nTraits allow you to group attributes together.\nSee: [Traits](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Traits)\n\n### Nested factories\n\n```ruby\nfactory :user do\n  first_name { 'John' }\n\n  factory :sample_user do\n    first_name { FFaker::Name.first_name }\n  end\nend\n```\n{: data-line=\"4,5,6\"}\n\n```ruby\ncreate :sample_user\n```\n\nSee: [Inheritance](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Inheritance)\n\n### Sub-factories\n\n```ruby\nfactory :user do\n  ···\nend\n```\n\n```ruby\nfactory :sample_user, parent: :user do\n  first_name { FFaker::Name.first_name }\nend\n```\n{: data-line=\"1\"}\n\n```ruby\ncreate :sample_user\n```\n\nWorks the same as nested factories.\n\n### Options (transients)\n\n```ruby\nfactory :user do\n  transient do\n    upcased { true }\n  end\n\n  after :create do |user, options|\n    user.name.upcase! if options.upcased\n  end\nend\n```\n{: data-line=\"2,3,4\"}\n\n```ruby\ncreate(user, upcased: true)\n```\n\nTransient attributes will not get passed to the model, but will be available in after-create hooks.\nSee: [Transient attributes](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Transient_Attributes)\n\n### Paths\n\n* test/factories.rb\n* spec/factories.rb\n* test/factories/*.rb\n* spec/factories/*.rb\n\nPlace your factories in these locations.\n{: .-setup}\n\n## See also\n{: .-one-column}\n\n* <http://rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md>\n"
  },
  {
    "path": "fastify.md",
    "content": "---\ntitle: Fastify\ncategory: JavaScript libraries\nupdated: 2017-09-23\n---\n\n## Getting started\n\n### Introduction\n{: .-intro}\n\n[Fastify](https://github.com/fastify/fastify) lets you create HTTP servers in Node.js with good performance. This guide targets fastify v0.28.x.\n\n- [Fastify source code](https://github.com/fastify/fastify) _(github.com)_\n- [Documentation](https://github.com/fastify/fastify#documentation) _(github.com)_\n\n### Hello world\n{: .-prime}\n\n```js\nconst fastify = require('fastify')()\n\nfastify.get('/', (req, reply) => {\n  reply.send({ hello: 'world' })\n})\n\nfastify.listen(3000, err => {\n  if (err) throw err\n  const port = fastify.server.address().port\n  console.log(`server listening on ${port}`)\n})\n```\n\n### Plugins\n\n#### app.js\n\n```js\nfastify.register(require('./route'))\n```\n\n#### route.js\n\n```js\nfunction (fastify, opts, next) {\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  next()\n})\n```\n\nCompose your app functionality into plugins. Plugins are simply functions.\n\nSee: [Plugins](https://github.com/fastify/fastify/blob/master/docs/Plugins.md)\n\n## Routes\n\n### Writing routes\n\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  schema: { ··· },\n  handler: (req, reply) => { ··· }\n  beforeHandler: (req, reply, done) => { ··· }\n})\n```\n\n### Shorthand declarations\n\n```js\nfastify.get(path, [options], handler)\nfastify.head(···)\nfastify.post(···)\nfastify.put(···)\nfastify.delete(···)\nfastify.options(···)\nfastify.patch(···)\n```\n\n### Async/await\n\n```js\nfastify.get('/', options, async (req, reply) => {\n  return data\n  // or\n  reply.send(data)\n})\n```\n\nWhen using async functions, you can either `return` data or use `reply.send`.\n\nRequest/reply\n-------------\n\n### Request\n\n```js\nrequest.query\nrequest.body\nrequest.params\nrequest.headers\nrequest.req  // Node.js core\nrequest.log.info('hello')\n```\n\nSee: [Request](https://github.com/fastify/fastify/blob/master/docs/Request.md)\n\n### Reply\n\n#### Response headers\n\n```js\nreply.code(404)\nreply.header('Content-Type', 'text/html')\nreply.type('text/html')\n```\n\n#### Redirects\n\n```js\nreply.redirect('/foo')\nreply.redirect(302, '/foo')\n```\n\n#### Sending\n\n```js\nreply.send(payload)\nreply.sent // → true|false\n```\n\nSee: [Reply](https://github.com/fastify/fastify/blob/master/docs/Reply.md)\n\n### JSON schema\n\n#### Define a JSON schema\n\n```js\nconst schema = {\n  querystring: {\n    name: { type: 'string' },\n    excitement: { type: 'integer' }\n  },\n  response: {\n    200: {\n      type: 'object',\n      properties: {\n        hello: { type: 'string' }\n      }\n    }\n  }\n}\n```\n\n#### Pass it to the route\n\n```js\nfastify.get('/', { schema }, (req, reply) => {\n  ···\n})\n```\n{: data-line=\"1\"}\n\n#### or (same as above)\n\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  schema,\n  handler: (req, reply) => { ··· }\n})\n```\n{: data-line=\"4\"}\n\nBy defining a JSON schema, you get validation and improved performance.\n\nSee: [Validation and serialization](https://github.com/fastify/fastify/blob/master/docs/Validation-and-Serialization.md)\n\nPlugins\n-------\n\n### With function\n\n```js\nfastify.register(\n  require('./route'),\n  err => { if (err) throw err }\n)\n```\n{: data-line=\"3\"}\n\n#### route.js\n\n```js\nmodule.exports = (fastify, options, next) => {\n  fastify.get('/', ···)\n  next()\n}\n```\n\n\nSee: [Register](https://github.com/fastify/fastify/blob/master/docs/Getting-Started.md#register)\n\n### Multiple\n\n```js\nfastify.register([\n  require('./another-route'),\n  require('./yet-another-route')\n], opts, (err) => {\n  if (err) throw err\n})\n```\n\nYou can pass arrays to `register()`.\n\n### Register with prefix\n\n```js\nfastify.register(\n  require('./route'),\n  { prefix: '/v1' }\n)\n```\n\nThis prefixes all routes in that module.\n\n### Helmet\n\n```js\nconst helmet = require('fastify-helmet')\n\nfastify.register(helmet)\n```\n\nSee: [fastify-helmet](https://github.com/fastify/fastify-helmet)\n\n### fastify-plugin\n\n```js\nconst fp = require('fastify-plugin')\n\nmodule.exports = fp((fastify, opts, next) => {\n  // your plugin code\n  fastify.decorate('utility', () => {})\n\n  next()\n}, '0.x')\n```\n\nAllows you to limit Fastify versions via semver, and allows you not make a new Fastify scope.\n\nSee: [fastify-plugin](https://github.com/fastify/fastify-plugin)\n\n### Decorators\n\nMiddleware\n----------\n\n### Middleware\n\n```js\nfastify.use(require('cors')())\nfastify.use(require('dns-prefetch-control')())\nfastify.use(require('frameguard')())\nfastify.use(require('hide-powered-by')())\nfastify.use(require('hsts')())\nfastify.use(require('ienoopen')())\nfastify.use(require('x-xss-protection')())\n```\n\nCompatible with Express and Restify middlewares. (Don't use these middleware, these are covered by [fastify-helmet](https://github.com/fastify/fastify-helmet).)\n\nSee: [Middlewares](https://github.com/fastify/fastify/blob/master/docs/Middleware.md)\n\nTemplate rendering\n------------------\n\n### point-of-view\n\n```js\nconst fastify = require('fastify')()\n\nfastify.register(require('point-of-view'), {\n  engine: {\n    ejs: require('ejs')\n  }\n})\n```\n{: data-line=\"3\"}\n\n```js\nfastify.get('/', (req, reply) => {\n  reply.view('/templates/index.ejs', { text: 'text' })\n})\n```\n{: data-line=\"2\"}\n\nSupport `ejs`, `pug`, `handlebars` and `marko`.\n\nSee: [point-of-view](https://github.com/fastify/point-of-view)\n\n### Options\n\n```js\nfastify.register(require('point-of-view'), {\n  engine: {\n    ejs: require('ejs')\n  },\n  templates: '/templates',\n  options: {}\n})\n```\n\n`templates` lets you update the templates folder. `options` are options passed onto the template engines.\n"
  },
  {
    "path": "ffaker.md",
    "content": "---\ntitle: FFaker\ncategory: Ruby libraries\nupdated: 2017-09-12\n---\n\n## FFaker\n{: .-one-column}\n\n### Installing\n\n```ruby\n# gem install ffaker\nrequire 'ffaker'\n```\n\n## Faker::Address\n{: .-one-column}\n\n```ruby\nFaker::Address.city                     #=> \"Autumnside\"\n                                        #=> \"South Brielleberg\"\n                                        #=> \"West Alvera\"\n```\n\n```ruby\nFaker::Address.street_name              #=> \"Greyson Rapid\"\n                                        #=> \"Hoppe Grove\"\n                                        #=> \"Reichert Lights\"\n```\n\n```ruby\nFaker::Address.street_address           #=> \"98786 Neal Motorway\"\n                                        #=> \"6619 Yvonne Dale\"\n                                        #=> \"6143 Bailey Plaza\"\n```\n\n```ruby\nFaker::Address.secondary_address        #=> \"Suite 560\"\n                                        #=> \"Apt. 332\"\n                                        #=> \"Apt. 411\"\n```\n\n## Faker::Company\n{: .-one-column}\n\n```ruby\nFaker::Company.name                     #=> \"Pouros-Ondricka\"\n                                        #=> \"Ward Group\"\n                                        #=> \"Walter-Romaguera\"\n```\n\n```ruby\nFaker::Company.suffix                   #=> \"and Sons\"\n                                        #=> \"LLC\"\n                                        #=> \"and Sons\"\n```\n\n```ruby\nFaker::Company.catch_phrase             #=> \"Versatile mobile help-desk\"\n                                        #=> \"Extended fresh-thinking utilisation\"\n                                        #=> \"Reactive coherent flexibility\"\n```\n\n```ruby\nFaker::Company.bs                       #=> \"extend one-to-one convergence\"\n                                        #=> \"architect 24/7 interfaces\"\n                                        #=> \"revolutionize viral vortals\"\n```\n\n```ruby\nFaker::Company.position                 #=> \"General Corporate President\"\n                                        #=> \"Executive Department Consultant\"\n                                        #=> \"Associate Director\"\n```\n\n## Faker::Education\n{: .-one-column}\n\n```ruby\nFaker::Education.school                 #=> \"Larkwood Institution\"\n                                        #=> \"Whiteshire School\"\n                                        #=> \"California International College\"\n```\n\n```ruby\nFaker::Education.degree                 #=> \"Bachelor of Science in Political Administration\"\n                                        #=> \"Doctor of Medicine in Marketing Economics\"\n                                        #=> \"Bachelor of Music in Marketing Development\"\n```\n\n```ruby\nFaker::Education.degree_short           #=> \"MD in Industrial Arts\"\n                                        #=> \"DPhil in Social Management\"\n                                        #=> \"AB in Political Science\"\n```\n\n```ruby\nFaker::Education.major                  #=> \"Financial Philosophy\"\n                                        #=> \"Social Arts\"\n                                        #=> \"Business Accountancy\"\n```\n\n```ruby\nFaker::Education.school_name            #=> \"Larkfield\"\n                                        #=> \"Northshire\"\n                                        #=> \"Lakepoint\"\n```\n\n## Faker::Geolocation\n{: .-one-column}\n\n```ruby\nFaker::Geolocation.lat                  #=> 40.89505\n                                        #=> 41.77117\n                                        #=> 41.022921\n```\n\n```ruby\nFaker::Geolocation.lng                  #=> -115.120716573\n                                        #=> -118.427610513239\n                                        #=> -72.204989\n```\n\n## Faker::Internet\n{: .-one-column}\n\n```ruby\nFaker::Internet.email                   #=> \"dayna@auer.name\"\n                                        #=> \"joy@nienowbradtke.info\"\n                                        #=> \"bernhard@wyman.ca\"\n```\n\n```ruby\nFaker::Internet.user_name               #=> \"emory\"\n                                        #=> \"janelle_schamberger\"\n                                        #=> \"brigitte.dooley\"\n```\n\n```ruby\nFaker::Internet.domain_name             #=> \"langworth.biz\"\n                                        #=> \"corkery.info\"\n                                        #=> \"schroeder.uk\"\n```\n\n```ruby\nFaker::Internet.disposable_email        #=> \"barrett_schroeder@spamherelots.com\"\n                                        #=> \"nicholaus@suremail.info\"\n                                        #=> \"gladys@safetymail.info\"\n```\n\n```ruby\nFaker::Internet.free_email              #=> \"lemuel@yahoo.com\"\n                                        #=> \"nickolas.gulgowski@gmail.com\"\n                                        #=> \"isaac_ankunding@gmail.com\"\n```\n\n```ruby\nFaker::Internet.domain_word             #=> \"purdykutch\"\n                                        #=> \"sauer\"\n                                        #=> \"trantowmaggio\"\n```\n\n```ruby\nFaker::Internet.domain_suffix           #=> \"us\"\n                                        #=> \"info\"\n                                        #=> \"biz\"\n```\n\n## Faker::Job\n{: .-one-column}\n\n```ruby\nFaker::Job.title                        #=> \"Future Data Assistant\"\n                                        #=> \"Product Division Technician\"\n                                        #=> \"Product Research Developer\"\n```\n\n## Faker::Lorem\n{: .-one-column}\n\n```ruby\nFaker::Lorem.word                       #=> \"sint\"\n                                        #=> \"sit\"\n                                        #=> \"omnis\"\n```\n\n```ruby\nFaker::Lorem.sentence                   #=> \"Expedita et aspernatur eum sit ipsam culpa.\"\n                                        #=> \"Rem sunt voluptatem laborum dolores.\"\n                                        #=> \"Ad explicabo atque culpa.\"\n```\n\n```ruby\nFaker::Lorem.paragraph                  #=> \"Quidem deserunt qui atque labore sunt quis laborum. Et iste\n                                        #    laudantium nobis adipisci delectus. Quod vero repudiandae m\n                                        #    agni repellat totam. Id ullam a aperiam et laboriosam. Volup\n                                        #    tas aut perspiciatis o...\"\n                                        #=> \"Dolor et quae quisquam placeat. Accusantium quidem totam no\n                                        #    n et deleniti accusamus hic. Iure quidem inventore molestiae\n                                        #    harum magni dolor. Deleniti ex a voluptas nihil temporibus.\n                                        #    \"\n                                        #=> \"Fugiat sapiente vero voluptatum natus assumenda quam beatae\n                                        #    in. Nemo velit incidunt dolor perspiciatis. Ipsum minima oc\n                                        #    caecati est laudantium ducimus libero. Et fugit et adipisci\n                                        #    molestias. Cupiditate ...\"\n```\n\n```ruby\nFaker::Lorem.words(4)                   #=> [\"repellat\", \"quos\", \"amet\", \"voluptatem\"]\n                                        #=> [\"porro\", \"molestias\", \"ut\", \"qui\"]\n                                        #=> [\"blanditiis\", \"soluta\", \"enim\", \"fugit\"]\n```\n\n```ruby\nFaker::Lorem.sentence(5)                #=> \"Laborum sint voluptate voluptatem rem doloremque et incidun\n                                        #    t itaque.\"\n                                        #=> \"Autem atque eum laborum alias perspiciatis debitis suscipit\n                                        #    deserunt sint.\"\n                                        #=> \"Quaerat nam consectetur eum dolor deleniti tempore doloremq\n                                        #    ue et aspernatur.\"\n```\n\n```ruby\nFaker::Lorem.sentences(3)               #=> [\"Culpa debitis architecto est.\", \"Quo et voluptatem distinc\n                                        #    tio repellendus qui cupiditate.\", \"Quo repellendus ut eius.\"\n                                        #    ]\n                                        #=> [\"Quos nihil dolorem quidem maxime.\", \"Expedita ab veniam do\n                                        #    lorum at et placeat iure.\", \"In perspiciatis cupiditate amet\n                                        #    non saepe consequatur molestias minus.\"]\n                                        #=> [\"Quasi velit et voluptas est.\", \"Dolores ut dolor aut repel\n                                        #    lat fuga minima sed quia.\", \"Eum id minus atque ex modi.\"]\n```\n\n```ruby\nFaker::Lorem.paragraphs(3)              #=> [\"Iusto mollitia sequi nam perspiciatis fuga aut. Modi moles\n                                        #    tiae consectetur architecto et dolorem aut perferendis. Cumq\n                                        #    ue rerum aliquam sapiente. Dolorum quo reiciendis nemo vero.\n                                        #    Quo earum explicabo pariatur.\", \"Possimus omnis accusamus f\n                                        #    uga. Harum sint facere sed dolor itaque quia. Ullam optio at\n                                        #    que vel nihil facilis quidem accusantium sint.\", \"Itaque per\n                                        #    ferendis saepe pariatur maxime expedita laborum qui. Ea nemo\n                                        #    dolor aut. In sed sit minus itaque sit.\"]\n                                        #=> [\"Ducimus non quo qui doloremque aperiam aspernatur. Consequ\n                                        #    atur id qui sit occaecati. Incidunt tempora quia et. Esse vo\n                                        #    luptatem debitis similique ab totam sit. Illo neque vel face\n                                        #    re maxime voluptatum non voluptatem.\", \"Aut eveniet consequa\n                                        #    tur laudantium veniam qui dolores. Provident pariatur perspi\n                                        #    ciatis id. Eum iste id quasi. Esse nihil quis rerum laudanti\n                                        #    um aliquam molestiae eum tempora.\", \"Quia porro sint numquam\n                                        #    qui. Ut sint reiciendis quis pariatur veniam nesciunt optio\n                                        #    . Officia unde fugit distinctio dolorem voluptatem incidunt.\n                                        #    Ex omnis sit et non aut.\"]\n                                        #=> [\"Dicta consequatur sapiente saepe fugiat ut. Necessitatibus\n                                        #    enim explicabo qui fugiat occaecati expedita quis. Quo iust\n                                        #    o magnam facere nihil earum.\", \"In deleniti explicabo veniam\n                                        #    dolorem temporibus enim. Delectus exercitationem ipsum dolo\n                                        #    r modi. Aut quia voluptas velit sint aperiam sed eveniet.\",\n                                        #    \"Quo doloribus explicabo ut magnam quasi. Voluptatem debitis\n                                        #    quaerat aperiam. Accusantium quis voluptatem dolorem.\"]\n```\n\n## Faker::HipsterIpsum\n{: .-one-column}\n\n```ruby\nFaker::HipsterIpsum.paragraph           #=> \"Wayfarers mustache thundercats pitchfork messenger bag high\n                                        #    life. Beard messenger bag wayfarers squid vinyl letterpress\n                                        #    party iphone jean shorts. Lomo irony before they sold out e\n                                        #    thical wayfarers scene...\"\n                                        #=> \"Tofu stumptown cliche sartorial vhs letterpress keffiyeh wi\n                                        #    lliamsburg. Whatever jean shorts williamsburg lomo salvia fo\n                                        #    od truck 8-bit. Cosby sweater portland artisan wayfarers vhs\n                                        #    photo booth.\"\n                                        #=> \"Skateboard fanny pack wes anderson sartorial cred gluten-fr\n                                        #    ee vinyl marfa locavore. Messenger bag master cleanse mlkshk\n                                        #    vegan thundercats beard wes anderson brunch. Helvetica mess\n                                        #    enger bag lo-fi four l...\"\n```\n\n## Faker::HTMLIpsum\n{: .-one-column}\n\n```ruby\nFaker::HTMLIpsum.body                   #=> \"<h1>Exercitationem et</h1><table><thead><tr><th>Eligendi</t\n                                        #    h><th>Vel</th><th>Sed</th><th>At</th></tr></thead><tbody><tr\n                                        #    ><...\"\n                                        #=> \"<h1>Excepturi sequi</h1><table><thead><tr><th>Quam</th><th>\n                                        #    Eius</th><th>Quibusdam</th><th>Totam</th></tr></thead><tbody\n                                        #    ><tr>...\"\n                                        #=> \"<h1>Iusto voluptatem</h1><p>Laborum velit ducimus eius. Mol\n                                        #    estiae id vel ipsam a accusantium et ut. Sunt et fugiat qui\n                                        #    sint ab quia. Eum ut molestiae cumque molestiae error volupt\n                                        #    ates. Ipsum molestiae ...\"\n```\n\n```ruby\nFaker::HTMLIpsum.table                  #=> \"<table><thead><tr><th>Voluptatem</th><th>Porro</th><th>Tene\n                                        #    tur</th><th>Facilis</th></tr></thead><tbody><tr><td>Numquam<\n                                        #    /t...\"\n                                        #=> \"<table><thead><tr><th>Impedit</th><th>Voluptatem</th><th>Qu\n                                        #    i</th><th>Est</th></tr></thead><tbody><tr><td>Nihil</td>...\"\n                                        #=> \"<table><thead><tr><th>Iste</th><th>Et</th><th>Sequi</th><th\n                                        #    >Et</th></tr></thead><tbody><tr><td>Blanditiis</td>...\"\n```\n\n```ruby\nFaker::HTMLIpsum.fancy_string           #=> \"<a href=\\\"#distinctio\\\" title=\\\"Tenetur explicabo\\\">Velit e\n                                        #    st</a> <code>aperiam reiciendis</code> Consectetur aut hic e\n                                        #    um quisquam. Dolore aut rerum dolor accusantium ab repellend\n                                        #    us magni. Deserunt optio o...\"\n                                        #=> \"Et vel similique ullam accusantium laboriosam. Sit ut ea to\n                                        #    tam. Iusto praesentium ut molestiae. Voluptatem laudantium a\n                                        #    ut qui adipisci. Est saepe repellendus qui blanditiis volupt\n                                        #    ates sed odit ullam. <...\"\n                                        #=> \"Neque et omnis ipsam ad culpa maiores inventore. Laborum cu\n                                        #    m est fugit libero repellendus vero. Modi pariatur sunt tene\n                                        #    tur soluta inventore ratione. Iste consequuntur quia omnis n\n                                        #    umquam excepturi quod ...\"\n```\n\n## Faker::Name\n{: .-one-column}\n\n```ruby\nFaker::Name.name                        #=> \"Trevion Herman V\"\n                                        #=> \"Aracely Balistreri\"\n                                        #=> \"Daphnee Terry Sr.\"\n```\n\n```ruby\nFaker::Name.first_name                  #=> \"Aliza\"\n                                        #=> \"Joseph\"\n                                        #=> \"Orland\"\n```\n\n```ruby\nFaker::Name.last_name                   #=> \"Hand\"\n                                        #=> \"Macejkovic\"\n                                        #=> \"Heller\"\n```\n\n```ruby\nFaker::Name.prefix                      #=> \"Dr.\"\n                                        #=> \"Ms.\"\n                                        #=> \"Mr.\"\n```\n\n```ruby\nFaker::Name.suffix                      #=> \"I\"\n                                        #=> \"III\"\n                                        #=> \"DDS\"\n```\n\n## Faker::PhoneNumber\n{: .-one-column}\n\n```ruby\nFaker::PhoneNumber.phone_number         #=> \"335-364-4549 x430\"\n                                        #=> \"040-278-4021 x753\"\n                                        #=> \"420.645.4382\"\n```\n\n```ruby\nFaker::PhoneNumber.short_phone_number   #=> \"473-412-3192\"\n                                        #=> \"353-084-1297\"\n                                        #=> \"080-546-2356\"\n```\n\n## Faker::Product\n{: .-one-column}\n\n```ruby\nFaker::Product.brand                    #=> \"Trouffeforge\"\n                                        #=> \"VIG\"\n                                        #=> \"NDZ\"\n```\n\n```ruby\nFaker::Product.product_name             #=> \"Air HD Viewer\"\n                                        #=> \"HD Kit\"\n                                        #=> \"Air HD Bridge\"\n```\n\n```ruby\nFaker::Product.product                  #=> \"Amnix Air HD Tuner\"\n                                        #=> \"Panapod Audible Filter\"\n                                        #=> \"Phuffe Disc Receiver\"\n```\n\n```ruby\nFaker::Product.model                    #=> \"I-422\"\n                                        #=> \"J89\"\n                                        #=> \"L6\"\n```\n\n## Faker::NameCN\n{: .-one-column}\n\n```ruby\nFaker::NameCN.name                      #=> \"姵书虞\"\n                                        #=> \"修男嵇\"\n                                        #=> \"瑜人军\"\n```\n\n```ruby\nFaker::NameCN.last_first                #=> \"向坚舜\"\n                                        #=> \"疏骏哲\"\n                                        #=> \"秘合雪\"\n```\n\n```ruby\nFaker::NameCN.first_name                #=> \"佑淑\"\n                                        #=> \"燕谦\"\n                                        #=> \"重生\"\n```\n\n```ruby\nFaker::NameCN.last_name                 #=> \"释\"\n                                        #=> \"巩\"\n                                        #=> \"麻\"\n```\n\n## Faker::NameDE\n{: .-one-column}\n\n```ruby\nFaker::NameDE.name                      #=> \"Noelle Schuster\"\n                                        #=> \"Bendix Schmid\"\n                                        #=> \"Azra Neumann\"\n```\n\n```ruby\nFaker::NameDE.first_name                #=> \"Victoria\"\n                                        #=> \"Lotta\"\n                                        #=> \"Mads\"\n```\n\n```ruby\nFaker::NameDE.last_name                 #=> \"Martin\"\n                                        #=> \"Klein\"\n                                        #=> \"Walter\"\n```\n\n```ruby\nFaker::NameDE.prefix                    #=> \"Frau\"\n                                        #=> \"Prof.\"\n                                        #=> \"Prof.\"\n```\n\n## Faker::NameJA\n{: .-one-column}\n\n```ruby\nFaker::NameJA.name                      #=> \"飛鳥田部\"\n                                        #=> \"未杉浦\"\n                                        #=> \"功本間\"\n```\n\n```ruby\nFaker::NameJA.last_first                #=> \"青木杏子\"\n                                        #=> \"棚原大貴\"\n                                        #=> \"知名翔\"\n```\n\n```ruby\nFaker::NameJA.first_name                #=> \"巴\"\n                                        #=> \"浩子\"\n                                        #=> \"沙耶\"\n```\n\n```ruby\nFaker::NameJA.last_name                 #=> \"小栗\"\n                                        #=> \"高江洲\"\n                                        #=> \"友寄\"\n```\n\n## Faker::NameRU\n{: .-one-column}\n\n```ruby\nFaker::NameRU.name                      #=> \"Стелла Карнилина\"\n                                        #=> \"Евгения Мазовская\"\n                                        #=> \"Кузьма Ваиренко\"\n```\n\n```ruby\nFaker::NameRU.last_name                 #=> \"Манишева\"\n                                        #=> \"Тюлева\"\n                                        #=> \"Понченко\"\n```\n\n```ruby\nFaker::NameRU.first_name                #=> \"Артур\"\n                                        #=> \"Руслана\"\n                                        #=> \"Зинаида\"\n```\n\n```ruby\nFaker::NameRU.patronymic                #=> \"Мечеславович\"\n                                        #=> \"Ионович\"\n                                        #=> \"Исаевич\"\n```\n\n```ruby\nFaker::NameRU.name(:male)               #=> \"Слежиков Роман Всеволодович\"\n                                        #=> \"Осип Мугрузин\"\n                                        #=> \"Джиджаев Гавриил Леванович\"\n```\n\n```ruby\nFaker::NameRU.name(:female)             #=> \"Зиядтдинова Полина Людвиговна\"\n                                        #=> \"Андреева Тереза Арсеновна\"\n                                        #=> \"Дарина Минхазова\"\n```\n\n## Faker::NameSN\n{: .-one-column}\n\n```ruby\nFaker::NameSN.name_sn                   #=> \"mame Djaly Mbodj\"\n                                        #=> \"Hatab Samy\"\n                                        #=> \"Niouma Dramé\"\n```\n\n```ruby\nFaker::NameSN.name_male                 #=> \"serigne Yakou Diagne\"\n                                        #=> \"serigne Sécouba Diagne\"\n                                        #=> \"Sihalébé Badji\"\n```\n\n```ruby\nFaker::NameSN.name_female               #=> \"Thiomba Niang\"\n                                        #=> \"adjaratou Kiné Panduppy\"\n                                        #=> \"Nini Gakou\"\n```\n\n```ruby\nFaker::NameSN.first_name_male           #=> \"Khoudia\"\n                                        #=> \"Sanokho\"\n                                        #=> \"Diomaye\"\n```\n\n```ruby\nFaker::NameSN.first_name_female         #=> \"Assa\"\n                                        #=> \"Sahaba\"\n                                        #=> \"Manthita\"\n```\n\n```ruby\nFaker::NameSN.prefix_male               #=> \"eladji\"\n                                        #=> \"eladji\"\n                                        #=> \"serigne\"\n```\n\n```ruby\nFaker::NameSN.prefix_female             #=> \"adjaratou\"\n                                        #=> \"adja\"\n                                        #=> \"adja\"\n```\n\n## Faker::PhoneNumberAU\n{: .-one-column}\n\n```ruby\nFaker::PhoneNumberAU.phone_number       #=> \"0495 539 191\"\n                                        #=> \"(05) 6838 2406\"\n                                        #=> \"0496 013 652\"\n```\n\n## Faker::PhoneNumberSN\n{: .-one-column}\n\n```ruby\nFaker::PhoneNumberSN.phone_number       #=> \"77-356-93-09\"\n                                        #=> \"33-891-67-75\"\n                                        #=> \"33-886-02-02\"\n```\n"
  },
  {
    "path": "ffmpeg.md",
    "content": "---\ntitle: ffmpeg\ncategory: CLI\n---\n\n### Common switches\n\n```bash\n-codecs          # list codecs\n-c:v             # video codec (-vcodec) - 'copy' to copy stream\n-c:a             # audio codec (-acodec)\n```\n\n```bash\n-fs SIZE         # limit file size (bytes)\n```\n\n### Bitrate\n\n```bash\n-b:v 1M          # video bitrate (1M = 1Mbit/s)\n-b:a 1M          # audio bitrate\n```\n\n### Video\n\n```bash\n-aspect RATIO    # aspect ratio (4:3, 16:9, or 1.25)\n-r RATE          # frame rate per sec\n-s WIDTHxHEIGHT  # frame size\n-vn              # no video\n```\n\n### Audio\n\n```bash\n-aq QUALITY      # audio quality (codec-specific)\n-ar 44100        # audio sample rate (hz)\n-ac 1            # audio channels (1=mono, 2=stereo)\n-an              # no audio\n-vol N           # volume (256=normal)\n```\n\n## Example\n\n### Ringtone conversion using ffmpeg\n\n```bash\nffmpeg -i foo.mp3 -ac 1 -ab 128000 -f mp4 -acodec libfaac -y target.m4r\n```\n\n### To web\n\n```bash\n# no audio\nffmpeg -i input.mov -vcodec h264   -an -strict -2 output.mp4\nffmpeg -i input.mov -vcodec libvpx -an output.webm\n```\n\n```bash\nffmpeg -i input.mov -vcodec h264 -acodec aac -strict -2 output.mp4\nffmpeg -i input.mov -vcodec libvpx -acodec libvorbis output.webm\n```\n\n```html\n<video width=\"320\" height=\"240\" controls>\n  <source src=\"movie.mp4\" type='video/mp4'></source>\n  <source src=\"movie.webm\" type='video/ogg'></source>\n</video>\n```\n"
  },
  {
    "path": "figlet.md",
    "content": "---\ntitle: Figlet\nupdated: 2018-06-14\nintroduction: |\n  [Figlet] renders text as ASCII art. Here's a list of Figlet fonts for Figlet 2.2.5.\n  [Figlet]: http://www.figlet.org/\n\n# Generated using this script:\n#\n# #!/usr/bin/env bash\n# do_figlet() {\n#   name=$1\n#   echo \"### $name\"\n#   echo \"\"\n#   echo \"\\`\\`\\`\"\n# \n#   echo Hamburger | figlet -f $name -w 2000\n# \n#   echo \"\\`\\`\\`\"\n#   echo \"{: .-figlet}\"\n#   echo \"\"\n# }\n# \n# echo \"## Figlet fonts\"\n# echo \"\"\n# \n# for fn in /usr/local/share/figlet/fonts/*.flf; do\n#   name=$(basename ${fn%.flf})\n#   do_figlet $name\n# done\n# \n# echo \"\"\n# echo \"## Toilet fonts\"\n# echo \"\"\n# \n# for fn in /usr/local/share/figlet/*.tlf; do\n#   name=$(basename ${fn%.tlf})\n#   do_figlet $name\n# done\n---\n\n### Usage\n\n```bash\necho \"Hamburger\" | figlet -f cybermedium\n```\n\n```\n_  _ ____ _  _ ___  _  _ ____ ____ ____ ____ \n|__| |__| |\\/| |__] |  | |__/ | __ |___ |__/ \n|  | |  | |  | |__] |__| |  \\ |__] |___ |  \\ \n```\n{: .-figlet}\n\nRun `figlet` with `-f <font>` to use a font.\n\n### Toilet fonts\n\n```bash\necho \"Hello\" | \\\n  figlet -f smmono12 -d /usr/local/share/figlet\n```\n\nFiglet comes with support for Toilet fonts, which are in `{share}/figlet`. This is not the default font dir, so you'll have to use `-d <path>` to access it.\n\n## Rico's favorites\n\n### wideterm\n\n```\nＨａｍｂｕｒｇｅｒ\n```\n{: .-figlet}\n\n### stampatello\n\n```\n,-_/,.           .                       \n' |_|/ ,-. ,-,-. |-. . . ,-. ,-. ,-. ,-. \n /| |  ,-| | | | | | | | |   | | |-' |   \n `' `' `-^ ' ' ' ^-' `-^ '   `-| `-' '   \n                              ,|         \n                              `'         \n```\n{: .-figlet}\n\n### cybermedium\n\n```\n_  _ ____ _  _ ___  _  _ ____ ____ ____ ____ \n|__| |__| |\\/| |__] |  | |__/ | __ |___ |__/ \n|  | |  | |  | |__] |__| |  \\ |__] |___ |  \\ \n```\n{: .-figlet}\n\n### cyberlarge\n\n```\n _     _ _______ _______ ______  _     _  ______  ______ _______  ______\n |_____| |_____| |  |  | |_____] |     | |_____/ |  ____ |______ |_____/\n |     | |     | |  |  | |_____] |_____| |    \\_ |_____| |______ |    \\_\n```\n{: .-figlet}\n\n### thin\n\n```\n|   |          |                             \n|---|,---.,-.-.|---..   .,---.,---.,---.,---.\n|   |,---|| | ||   ||   ||    |   ||---'|    \n`   '`---^` ' '`---'`---'`    `---|`---'`    \n                              `---'          \n```\n{: .-figlet}\n\n### smbraille\n\n```\n ⣇⣸ ⢀⣀ ⣀⣀  ⣇⡀ ⡀⢀ ⡀⣀ ⢀⡀ ⢀⡀ ⡀⣀\n ⠇⠸ ⠣⠼ ⠇⠇⠇ ⠧⠜ ⠣⠼ ⠏  ⣑⡺ ⠣⠭ ⠏ \n```\n{: .-figlet}\n\n### rectangles\n\n```\n _____           _                       \n|  |  |___ _____| |_ _ _ ___ ___ ___ ___ \n|     | .'|     | . | | |  _| . | -_|  _|\n|__|__|__,|_|_|_|___|___|_| |_  |___|_|  \n                            |___|        \n```\n{: .-figlet}\n\n### bell\n\n```\n __  __                  _                                     \n |   |    ___  , _ , _   \\ ___  ,   . .___    ___.   ___  .___ \n |___|   /   ` |' `|' `. |/   \\ |   | /   \\ .'   ` .'   ` /   \\\n |   |  |    | |   |   | |    ` |   | |   ' |    | |----' |   '\n /   /  `.__/| /   '   / `___,' `._/| /      `---| `.___, /    \n                                             \\___/             \n```\n{: .-figlet}\n\n## Figlet fonts\n\n### 3-d\n\n```\n **      **                       **                                           \n/**     /**                      /**                      *****                \n/**     /**  ******   ********** /**      **   ** ****** **///**  *****  ******\n/********** //////** //**//**//**/****** /**  /**//**//*/**  /** **///**//**//*\n/**//////**  *******  /** /** /**/**///**/**  /** /** / //******/******* /** / \n/**     /** **////**  /** /** /**/**  /**/**  /** /**    /////**/**////  /**   \n/**     /**//******** *** /** /**/****** //******/***     ***** //******/***   \n//      //  //////// ///  //  // /////    ////// ///     /////   ////// ///    \n```\n{: .-figlet}\n\n### 3x5\n\n```\n# #         #                       \n# #  ## ### ### # # ### ### ### ### \n### # # ### # # # # #   # # ##  #   \n# # ### # # ### ### #    ## ### #   \n# #                     ###         \n```\n{: .-figlet}\n\n### 5lineoblique\n\n```\n    //    / /                                                                        \n   //___ / /  ___      _   __     / __               __      ___      ___      __    \n  / ___   / //   ) ) // ) )  ) ) //   ) ) //   / / //  ) ) //   ) ) //___) ) //  ) ) \n //    / / //   / / // / /  / / //   / / //   / / //      ((___/ / //       //       \n//    / / ((___( ( // / /  / / ((___/ / ((___( ( //        //__   ((____   //        \n```\n{: .-figlet}\n\n### acrobatic\n\n```\n  o         o                                  o                                                                      \n <|>       <|>                                <|>                                                                     \n < >       < >                                / >                                                                     \n  |         |      o__ __o/  \\o__ __o__ __o   \\o__ __o      o       o   \\o__ __o     o__ __o/    o__  __o   \\o__ __o  \n  o__/_ _\\__o     /v     |    |     |     |>   |     v\\    <|>     <|>   |     |>   /v     |    /v      |>   |     |> \n  |         |    />     / \\  / \\   / \\   / \\  / \\     <\\   < >     < >  / \\   < >  />     / \\  />      //   / \\   < > \n <o>       <o>   \\      \\o/  \\o/   \\o/   \\o/  \\o/      /    |       |   \\o/        \\      \\o/  \\o    o/     \\o/       \n  |         |     o      |    |     |     |    |      o     o       o    |          o      |    v\\  /v __o   |        \n / \\       / \\    <\\__  / \\  / \\   / \\   / \\  / \\  __/>     <\\__ __/>   / \\         <\\__  < >    <\\/> __/>  / \\       \n                                                                                           |                          \n                                                                                   o__     o                          \n                                                                                   <\\__ __/>                          \n```\n{: .-figlet}\n\n### alligator\n\n```\n      :::    :::    :::      :::   :::  ::::::::: :::    ::::::::::::  :::::::: ::::::::::::::::::: \n     :+:    :+:  :+: :+:   :+:+: :+:+: :+:    :+::+:    :+::+:    :+::+:    :+::+:       :+:    :+: \n    +:+    +:+ +:+   +:+ +:+ +:+:+ +:++:+    +:++:+    +:++:+    +:++:+       +:+       +:+    +:+  \n   +#++:++#+++#++:++#++:+#+  +:+  +#++#++:++#+ +#+    +:++#++:++#: :#:       +#++:++#  +#++:++#:    \n  +#+    +#++#+     +#++#+       +#++#+    +#++#+    +#++#+    +#++#+   +#+#+#+       +#+    +#+    \n #+#    #+##+#     #+##+#       #+##+#    #+##+#    #+##+#    #+##+#    #+##+#       #+#    #+#     \n###    ######     ######       ############  ######## ###    ### ######## #############    ###      \n```\n{: .-figlet}\n\n### alligator2\n\n```\n:::    :::    :::    ::::    :::: ::::::::: :::    ::::::::::::  :::::::: :::::::::::::::::::  \n:+:    :+:  :+: :+:  +:+:+: :+:+:+:+:    :+::+:    :+::+:    :+::+:    :+::+:       :+:    :+: \n+:+    +:+ +:+   +:+ +:+ +:+:+ +:++:+    +:++:+    +:++:+    +:++:+       +:+       +:+    +:+ \n+#++:++#+++#++:++#++:+#+  +:+  +#++#++:++#+ +#+    +:++#++:++#: :#:       +#++:++#  +#++:++#:  \n+#+    +#++#+     +#++#+       +#++#+    +#++#+    +#++#+    +#++#+   +#+#+#+       +#+    +#+ \n#+#    #+##+#     #+##+#       #+##+#    #+##+#    #+##+#    #+##+#    #+##+#       #+#    #+# \n###    ######     ######       ############  ######## ###    ### ######## #############    ### \n```\n{: .-figlet}\n\n### alphabet\n\n```\nH  H           b                         \nH  H           b                         \nHHHH  aa mmmm  bbb  u  u rrr ggg eee rrr \nH  H a a m m m b  b u  u r   g g e e r   \nH  H aaa m m m bbb   uuu r   ggg ee  r   \n                               g         \n                             ggg         \n```\n{: .-figlet}\n\n### avatar\n\n```\n _     ____  _      ____  _     ____  _____ _____ ____ \n/ \\ /|/  _ \\/ \\__/|/  _ \\/ \\ /\\/  __\\/  __//  __//  __\\\n| |_||| / \\|| |\\/||| | //| | |||  \\/|| |  _|  \\  |  \\/|\n| | ||| |-||| |  ||| |_\\\\| \\_/||    /| |_//|  /_ |    /\n\\_/ \\|\\_/ \\|\\_/  \\|\\____/\\____/\\_/\\_\\\\____\\\\____\\\\_/\\_\\\n```\n{: .-figlet}\n\n### banner\n\n```\n#     #                                                         \n#     #   ##   #    # #####  #    # #####   ####  ###### #####  \n#     #  #  #  ##  ## #    # #    # #    # #    # #      #    # \n####### #    # # ## # #####  #    # #    # #      #####  #    # \n#     # ###### #    # #    # #    # #####  #  ### #      #####  \n#     # #    # #    # #    # #    # #   #  #    # #      #   #  \n#     # #    # #    # #####   ####  #    #  ####  ###### #    # \n```\n{: .-figlet}\n\n### banner3-D\n\n```\n'##::::'##::::'###::::'##::::'##:'########::'##::::'##:'########:::'######:::'########:'########::\n ##:::: ##:::'## ##::: ###::'###: ##.... ##: ##:::: ##: ##.... ##:'##... ##:: ##.....:: ##.... ##:\n ##:::: ##::'##:. ##:: ####'####: ##:::: ##: ##:::: ##: ##:::: ##: ##:::..::: ##::::::: ##:::: ##:\n #########:'##:::. ##: ## ### ##: ########:: ##:::: ##: ########:: ##::'####: ######::: ########::\n ##.... ##: #########: ##. #: ##: ##.... ##: ##:::: ##: ##.. ##::: ##::: ##:: ##...:::: ##.. ##:::\n ##:::: ##: ##.... ##: ##:.:: ##: ##:::: ##: ##:::: ##: ##::. ##:: ##::: ##:: ##::::::: ##::. ##::\n ##:::: ##: ##:::: ##: ##:::: ##: ########::. #######:: ##:::. ##:. ######::: ########: ##:::. ##:\n..:::::..::..:::::..::..:::::..::........::::.......:::..:::::..:::......::::........::..:::::..::\n```\n{: .-figlet}\n\n### banner3\n\n```\n##     ##    ###    ##     ## ########  ##     ## ########   ######   ######## ########  \n##     ##   ## ##   ###   ### ##     ## ##     ## ##     ## ##    ##  ##       ##     ## \n##     ##  ##   ##  #### #### ##     ## ##     ## ##     ## ##        ##       ##     ## \n######### ##     ## ## ### ## ########  ##     ## ########  ##   #### ######   ########  \n##     ## ######### ##     ## ##     ## ##     ## ##   ##   ##    ##  ##       ##   ##   \n##     ## ##     ## ##     ## ##     ## ##     ## ##    ##  ##    ##  ##       ##    ##  \n##     ## ##     ## ##     ## ########   #######  ##     ##  ######   ######## ##     ## \n```\n{: .-figlet}\n\n### banner4\n\n```\n.##.....##....###....##.....##.########..##.....##.########...######...########.########.\n.##.....##...##.##...###...###.##.....##.##.....##.##.....##.##....##..##.......##.....##\n.##.....##..##...##..####.####.##.....##.##.....##.##.....##.##........##.......##.....##\n.#########.##.....##.##.###.##.########..##.....##.########..##...####.######...########.\n.##.....##.#########.##.....##.##.....##.##.....##.##...##...##....##..##.......##...##..\n.##.....##.##.....##.##.....##.##.....##.##.....##.##....##..##....##..##.......##....##.\n.##.....##.##.....##.##.....##.########...#######..##.....##..######...########.##.....##\n```\n{: .-figlet}\n\n### barbwire\n\n```\n><<     ><<                       ><<                                               \n><<     ><<                       ><<                                               \n><<     ><<   ><<    ><<< ><< ><< ><<      ><<  ><<>< ><<<   ><<      ><<    >< ><<<\n><<<<<< ><< ><<  ><<  ><<  ><  ><<><< ><<  ><<  ><< ><<    ><<  ><< ><   ><<  ><<   \n><<     ><<><<   ><<  ><<  ><  ><<><<   ><<><<  ><< ><<   ><<   ><<><<<<< ><< ><<   \n><<     ><<><<   ><<  ><<  ><  ><<><<   ><<><<  ><< ><<    ><<  ><<><         ><<   \n><<     ><<  ><< ><<<><<<  ><  ><<><< ><<    ><<><<><<<        ><<   ><<<<   ><<<   \n                                                            ><<                     \n```\n{: .-figlet}\n\n### basic\n\n```\ndb   db  .d8b.  .88b  d88. d8888b. db    db d8888b.  d888b  d88888b d8888b. \n88   88 d8' `8b 88'YbdP`88 88  `8D 88    88 88  `8D 88' Y8b 88'     88  `8D \n88ooo88 88ooo88 88  88  88 88oooY' 88    88 88oobY' 88      88ooooo 88oobY' \n88~~~88 88~~~88 88  88  88 88~~~b. 88    88 88`8b   88  ooo 88~~~~~ 88`8b   \n88   88 88   88 88  88  88 88   8D 88b  d88 88 `88. 88. ~8~ 88.     88 `88. \nYP   YP YP   YP YP  YP  YP Y8888P' ~Y8888P' 88   YD  Y888P  Y88888P 88   YD \n```\n{: .-figlet}\n\n### bell\n\n```\n __  __                  _                                     \n |   |    ___  , _ , _   \\ ___  ,   . .___    ___.   ___  .___ \n |___|   /   ` |' `|' `. |/   \\ |   | /   \\ .'   ` .'   ` /   \\\n |   |  |    | |   |   | |    ` |   | |   ' |    | |----' |   '\n /   /  `.__/| /   '   / `___,' `._/| /      `---| `.___, /    \n                                             \\___/             \n```\n{: .-figlet}\n\n### big\n\n```\n _    _                 _                               \n| |  | |               | |                              \n| |__| | __ _ _ __ ___ | |__  _   _ _ __ __ _  ___ _ __ \n|  __  |/ _` | '_ ` _ \\| '_ \\| | | | '__/ _` |/ _ \\ '__|\n| |  | | (_| | | | | | | |_) | |_| | | | (_| |  __/ |   \n|_|  |_|\\__,_|_| |_| |_|_.__/ \\__,_|_|  \\__, |\\___|_|   \n                                         __/ |          \n                                        |___/           \n```\n{: .-figlet}\n\n### bigchief\n\n```\n_____________________________________________________________\n    _     _                                                  \n    /    /                 /                                 \n---/___ /-----__---_--_---/__----------)__----__----__---)__-\n  /    /    /   ) / /  ) /   ) /   /  /   ) /   ) /___) /   )\n_/____/____(___(_/_/__/_(___/_(___(__/_____(___/_(___ _/_____\n                                              /              \n                                          (_ /               \n```\n{: .-figlet}\n\n### binary\n\n```\n01001000 01100001 01101101 01100010 01110101 01110010 01100111 01100101 01110010 \n```\n{: .-figlet}\n\n### block\n\n```\n_|    _|                            _|                                                          \n_|    _|    _|_|_|  _|_|_|  _|_|    _|_|_|    _|    _|  _|  _|_|    _|_|_|    _|_|    _|  _|_|  \n_|_|_|_|  _|    _|  _|    _|    _|  _|    _|  _|    _|  _|_|      _|    _|  _|_|_|_|  _|_|      \n_|    _|  _|    _|  _|    _|    _|  _|    _|  _|    _|  _|        _|    _|  _|        _|        \n_|    _|    _|_|_|  _|    _|    _|  _|_|_|      _|_|_|  _|          _|_|_|    _|_|_|  _|        \n                                                                        _|                      \n                                                                    _|_|                        \n```\n{: .-figlet}\n\n### broadway\n\n```\n                                                .         .                                                                                                         \n8 8888        8          .8.                   ,8.       ,8.          8 888888888o   8 8888      88 8 888888888o.      ,o888888o.    8 8888888888   8 888888888o.   \n8 8888        8         .888.                 ,888.     ,888.         8 8888    `88. 8 8888      88 8 8888    `88.    8888     `88.  8 8888         8 8888    `88.  \n8 8888        8        :88888.               .`8888.   .`8888.        8 8888     `88 8 8888      88 8 8888     `88 ,8 8888       `8. 8 8888         8 8888     `88  \n8 8888        8       . `88888.             ,8.`8888. ,8.`8888.       8 8888     ,88 8 8888      88 8 8888     ,88 88 8888           8 8888         8 8888     ,88  \n8 8888        8      .8. `88888.           ,8'8.`8888,8^8.`8888.      8 8888.   ,88' 8 8888      88 8 8888.   ,88' 88 8888           8 888888888888 8 8888.   ,88'  \n8 8888        8     .8`8. `88888.         ,8' `8.`8888' `8.`8888.     8 8888888888   8 8888      88 8 888888888P'  88 8888           8 8888         8 888888888P'   \n8 8888888888888    .8' `8. `88888.       ,8'   `8.`88'   `8.`8888.    8 8888    `88. 8 8888      88 8 8888`8b      88 8888   8888888 8 8888         8 8888`8b       \n8 8888        8   .8'   `8. `88888.     ,8'     `8.`'     `8.`8888.   8 8888      88 ` 8888     ,8P 8 8888 `8b.    `8 8888       .8' 8 8888         8 8888 `8b.     \n8 8888        8  .888888888. `88888.   ,8'       `8        `8.`8888.  8 8888    ,88'   8888   ,d8P  8 8888   `8b.     8888     ,88'  8 8888         8 8888   `8b.   \n8 8888        8 .8'       `8. `88888. ,8'         `         `8.`8888. 8 888888888P      `Y88888P'   8 8888     `88.    `8888888P'    8 888888888888 8 8888     `88. \n```\n{: .-figlet}\n\n### bubble\n\n```\n  _   _   _   _   _   _   _   _   _  \n / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ \n( H | a | m | b | u | r | g | e | r )\n \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \n```\n{: .-figlet}\n\n### bulbhead\n\n```\n _   _    __    __  __  ____  __  __  ____   ___  ____  ____ \n( )_( )  /__\\  (  \\/  )(  _ \\(  )(  )(  _ \\ / __)( ___)(  _ \\\n ) _ (  /(__)\\  )    (  ) _ < )(__)(  )   /( (_-. )__)  )   /\n(_) (_)(__)(__)(_/\\/\\_)(____/(______)(_)\\_) \\___/(____)(_)\\_)\n```\n{: .-figlet}\n\n### calgphy2\n\n```\n     #####    ##                              /                                                              \n  ######  /  #### /                         #/                                                               \n /#   /  /   ####/                          ##                                                               \n/    /  /    # #                            ##                                                               \n    /  /     #                              ##                                                               \n   ## ##     #      /###   ### /### /###    ## /###   ##   ####    ###  /###     /###      /##  ###  /###    \n   ## ##     #     / ###  / ##/ ###/ /##  / ##/ ###  / ##    ###  / ###/ #### / /  ###  / / ###  ###/ #### / \n   ## ########    /   ###/   ##  ###/ ###/  ##   ###/  ##     ###/   ##   ###/ /    ###/ /   ###  ##   ###/  \n   ## ##     #   ##    ##    ##   ##   ##   ##    ##   ##      ##    ##       ##     ## ##    ### ##         \n   ## ##     ##  ##    ##    ##   ##   ##   ##    ##   ##      ##    ##       ##     ## ########  ##         \n   #  ##     ##  ##    ##    ##   ##   ##   ##    ##   ##      ##    ##       ##     ## #######   ##         \n      /       ## ##    ##    ##   ##   ##   ##    ##   ##      ##    ##       ##     ## ##        ##         \n  /##/        ## ##    /#    ##   ##   ##   ##    /#   ##      /#    ##       ##     ## ####    / ##         \n /  #####      ## ####/ ##   ###  ###  ###   ####/      ######/ ##   ###       ########  ######/  ###        \n/     ##           ###   ##   ###  ###  ###   ###        #####   ##   ###        ### ###  #####    ###       \n#                                                                                     ###                    \n ##                                                                             ####   ###                   \n                                                                              /######  /#                    \n                                                                             /     ###/                      \n```\n{: .-figlet}\n\n### calligraphy\n\n```\n     *****    **                                  *                                                                        \n  ******  *  **** *                             **                                                                         \n **   *  *   *****                              **                                                                         \n*    *  *    * *                                **                                                                         \n    *  *     *                                  **         **   ****     ***  ****                            ***  ****    \n   ** **     *         ****    *** **** ****    ** ****     **    ***  *  **** **** *     ****         ***     **** **** * \n   ** **     *        * ***  *  *** **** ***  * *** ***  *  **     ****    **   ****     *  ***  *    * ***     **   ****  \n   ** ********       *   ****    **  **** ****  **   ****   **      **     **           *    ****    *   ***    **         \n   ** **     *      **    **     **   **   **   **    **    **      **     **          **     **    **    ***   **         \n   ** **     **     **    **     **   **   **   **    **    **      **     **          **     **    ********    **         \n   *  **     **     **    **     **   **   **   **    **    **      **     **          **     **    *******     **         \n      *       **    **    **     **   **   **   **    **    **      **     **          **     **    **          **         \n  ****        **    **    **     **   **   **   **    **     ******* **    ***         **     **    ****    *   ***        \n *  *****      **    ***** **    ***  ***  ***   *****        *****   **    ***         ********     *******     ***       \n*     **              ***   **    ***  ***  ***   ***                                     *** ***     *****                \n*                                                                                              ***                         \n **                                                                                      ****   ***                        \n                                                                                       *******  **                         \n                                                                                      *     ****                           \n```\n{: .-figlet}\n\n### catwalk\n\n```\n_//     _//                       _//                                               \n_//     _//                       _//                                               \n_//     _//   _//    _/// _// _// _//      _//  _//_/ _///   _//      _//    _/ _///\n_////// _// _//  _//  _//  _/  _//_// _//  _//  _// _//    _//  _// _/   _//  _//   \n_//     _//_//   _//  _//  _/  _//_//   _//_//  _// _//   _//   _//_///// _// _//   \n_//     _//_//   _//  _//  _/  _//_//   _//_//  _// _//    _//  _//_/         _//   \n_//     _//  _// _///_///  _/  _//_// _//    _//_//_///        _//   _////   _///   \n                                                            _//                     \n```\n{: .-figlet}\n\n### chunky\n\n```\n _______                  __                                \n|   |   |.---.-.--------.|  |--.--.--.----.-----.-----.----.\n|       ||  _  |        ||  _  |  |  |   _|  _  |  -__|   _|\n|___|___||___._|__|__|__||_____|_____|__| |___  |_____|__|  \n                                          |_____|           \n```\n{: .-figlet}\n\n### coinstak\n\n```\nO))     O))                       O))                                               \nO))     O))                       O))                                               \nO))     O))   O))    O))) O)) O)) O))      O))  O))O) O)))   O))      O))    O) O)))\nO)))))) O)) O))  O))  O))  O)  O))O)) O))  O))  O)) O))    O))  O)) O)   O))  O))   \nO))     O))O))   O))  O))  O)  O))O))   O))O))  O)) O))   O))   O))O))))) O)) O))   \nO))     O))O))   O))  O))  O)  O))O))   O))O))  O)) O))    O))  O))O)         O))   \nO))     O))  O)) O)))O)))  O)  O))O)) O))    O))O))O)))        O))   O))))   O)))   \n                                                            O))                     \n```\n{: .-figlet}\n\n### colossal\n\n```\n888    888                     888                                            \n888    888                     888                                            \n888    888                     888                                            \n8888888888 8888b. 88888b.d88b. 88888b. 888  888888d888 .d88b.  .d88b. 888d888 \n888    888    \"88b888 \"888 \"88b888 \"88b888  888888P\"  d88P\"88bd8P  Y8b888P\"   \n888    888.d888888888  888  888888  888888  888888    888  88888888888888     \n888    888888  888888  888  888888 d88PY88b 888888    Y88b 888Y8b.    888     \n888    888\"Y888888888  888  88888888P\"  \"Y88888888     \"Y88888 \"Y8888 888     \n                                                           888                \n                                                      Y8b d88P                \n                                                       \"Y88P\"                 \n```\n{: .-figlet}\n\n### computer\n\n```\n8   8                                                     \n8   8 eeeee eeeeeee eeeee  e   e eeeee  eeeee eeee eeeee  \n8eee8 8   8 8  8  8 8   8  8   8 8   8  8   8 8    8   8  \n88  8 8eee8 8e 8  8 8eee8e 8e  8 8eee8e 8e    8eee 8eee8e \n88  8 88  8 88 8  8 88   8 88  8 88   8 88 \"8 88   88   8 \n88  8 88  8 88 8  8 88eee8 88ee8 88   8 88ee8 88ee 88   8 \n```\n{: .-figlet}\n\n### contessa\n\n```\n.  .        .                 \n|__| _.._ _ |_ . .._. _  _ ._.\n|  |(_][ | )[_)(_|[  (_](/,[  \n                     ._|      \n```\n{: .-figlet}\n\n### contrast\n\n```\n.%%..%%...%%%%...%%...%%..%%%%%...%%..%%..%%%%%....%%%%...%%%%%%..%%%%%..\n.%%..%%..%%..%%..%%%.%%%..%%..%%..%%..%%..%%..%%..%%......%%......%%..%%.\n.%%%%%%..%%%%%%..%%.%.%%..%%%%%...%%..%%..%%%%%...%%.%%%..%%%%....%%%%%..\n.%%..%%..%%..%%..%%...%%..%%..%%..%%..%%..%%..%%..%%..%%..%%......%%..%%.\n.%%..%%..%%..%%..%%...%%..%%%%%....%%%%...%%..%%...%%%%...%%%%%%..%%..%%.\n.........................................................................\n```\n{: .-figlet}\n\n### cosmic\n\n```\n  ::   .:   :::.     .        :   :::::::.   ...    ::::::::::..    .,-:::::/ .,:::::: :::::::..   \n ,;;   ;;,  ;;`;;    ;;,.    ;;;   ;;;'';;'  ;;     ;;;;;;;``;;;; ,;;-'````'  ;;;;'''' ;;;;``;;;;  \n,[[[,,,[[[ ,[[ '[[,  [[[[, ,[[[[,  [[[__[[\\.[['     [[[ [[[,/[[[' [[[   [[[[[[/[[cccc   [[[,/[[['  \n\"$$$\"\"\"$$$c$$$cc$$$c $$$$$$$$\"$$$  $$\"\"\"\"Y$$$$      $$$ $$$$$$c   \"$$c.    \"$$ $$\"\"\"\"   $$$$$$c    \n 888   \"88o888   888,888 Y88\" 888o_88o,,od8P88    .d888 888b \"88bo,`Y8bo,,,o88o888oo,__ 888b \"88bo,\n MMM    YMMYMM   \"\"` MMM  M'  \"MMM\"\"YUMMMP\"  \"YmmMMMM\"\" MMMM   \"W\"   `'YMUP\"YMM\"\"\"\"YUMMMMMMM   \"W\" \n```\n{: .-figlet}\n\n### cosmike\n\n```\n  ::   .:   :::.     .        :   :::::::.   ...    ::::::::::..    .,-:::::/ .,:::::: :::::::..   \n ,;;   ;;,  ;;`;;    ;;,.    ;;;   ;;;'';;'  ;;     ;;;;;;;``;;;; ,;;-'````'  ;;;;'''' ;;;;``;;;;  \n,[[[,,,[[[ ,[[ '[[,  [[[[, ,[[[[,  [[[__[[\\.[['     [[[ [[[,/[[[' [[[   [[[[[[/[[cccc   [[[,/[[['  \n\"$$$\"\"\"$$$c$$$cc$$$c $$$$$$$$\"$$$  $$\"\"\"\"Y$$$$      $$$ $$$$$$c   \"$$c.    \"$$ $$\"\"\"\"   $$$$$$c    \n 888   \"88o888   888,888 Y88\" 888o_88o,,od8P88    .d888 888b \"88bo,`Y8bo,,,o88o888oo,__ 888b \"88bo,\n MMM    YMMYMM   \"\"` MMM  M'  \"MMM\"\"YUMMMP\"  \"YmmMMMM\"\" MMMM   \"W\"   `'YMUP\"YMM\"\"\"\"YUMMMMMMM   \"W\" \n```\n{: .-figlet}\n\n### crawford\n\n```\n __ __   ____  ___ ___  ____   __ __  ____    ____    ___  ____  \n|  T  T /    T|   T   T|    \\ |  T  T|    \\  /    T  /  _]|    \\ \n|  l  |Y  o  || _   _ ||  o  )|  |  ||  D  )Y   __j /  [_ |  D  )\n|  _  ||     ||  \\_/  ||     T|  |  ||    / |  T  |Y    _]|    / \n|  |  ||  _  ||   |   ||  O  ||  :  ||    \\ |  l_ ||   [_ |    \\ \n|  |  ||  |  ||   |   ||     |l     ||  .  Y|     ||     T|  .  Y\nl__j__jl__j__jl___j___jl_____j \\__,_jl__j\\_jl___,_jl_____jl__j\\_j\n```\n{: .-figlet}\n\n### cricket\n\n```\n ___ ___                __                                \n|   Y   .---.-.--------|  |--.--.--.----.-----.-----.----.\n|.  1   |  _  |        |  _  |  |  |   _|  _  |  -__|   _|\n|.  _   |___._|__|__|__|_____|_____|__| |___  |_____|__|  \n|:  |   |                               |_____|           \n|::.|:. |                                                 \n`--- ---'                                                 \n```\n{: .-figlet}\n\n### cursive\n\n```\n _    ,                                 \n' )  /              /                   \n /--/ __.  ______  /__. . __  _,  _  __ \n/  (_(_/|_/ / / <_/_)(_/_/ (_(_)_</_/ (_\n                              /|        \n                             |/         \n```\n{: .-figlet}\n\n### cyberlarge\n\n```\n _     _ _______ _______ ______  _     _  ______  ______ _______  ______\n |_____| |_____| |  |  | |_____] |     | |_____/ |  ____ |______ |_____/\n |     | |     | |  |  | |_____] |_____| |    \\_ |_____| |______ |    \\_\n```\n{: .-figlet}\n\n### cybermedium\n\n```\n_  _ ____ _  _ ___  _  _ ____ ____ ____ ____ \n|__| |__| |\\/| |__] |  | |__/ | __ |___ |__/ \n|  | |  | |  | |__] |__| |  \\ |__] |___ |  \\ \n```\n{: .-figlet}\n\n### cybersmall\n\n```\n _  _ ____ _  _ ___  _  _ ____ ____ ____ ____\n |--| |--| |\\/| |==] |__| |--< |__, |=== |--<\n```\n{: .-figlet}\n\n### decimal\n\n```\n72 97 109 98 117 114 103 101 114 \n```\n{: .-figlet}\n\n### diamond\n\n```\n/\\\\     /\\\\                       /\\\\                                               \n/\\\\     /\\\\                       /\\\\                                               \n/\\\\     /\\\\   /\\\\    /\\\\\\ /\\\\ /\\\\ /\\\\      /\\\\  /\\\\/\\ /\\\\\\   /\\\\      /\\\\    /\\ /\\\\\\\n/\\\\\\\\\\\\ /\\\\ /\\\\  /\\\\  /\\\\  /\\  /\\\\/\\\\ /\\\\  /\\\\  /\\\\ /\\\\    /\\\\  /\\\\ /\\   /\\\\  /\\\\   \n/\\\\     /\\\\/\\\\   /\\\\  /\\\\  /\\  /\\\\/\\\\   /\\\\/\\\\  /\\\\ /\\\\   /\\\\   /\\\\/\\\\\\\\\\ /\\\\ /\\\\   \n/\\\\     /\\\\/\\\\   /\\\\  /\\\\  /\\  /\\\\/\\\\   /\\\\/\\\\  /\\\\ /\\\\    /\\\\  /\\\\/\\         /\\\\   \n/\\\\     /\\\\  /\\\\ /\\\\\\/\\\\\\  /\\  /\\\\/\\\\ /\\\\    /\\\\/\\\\/\\\\\\        /\\\\   /\\\\\\\\   /\\\\\\   \n                                                            /\\\\                     \n```\n{: .-figlet}\n\n### digital\n\n```\n+-+-+-+-+-+-+-+-+-+\n|H|a|m|b|u|r|g|e|r|\n+-+-+-+-+-+-+-+-+-+\n```\n{: .-figlet}\n\n### doh\n\n```\n                                                                bbbbbbbb                                                                                                             \nHHHHHHHHH     HHHHHHHHH                                         b::::::b                                                                                                             \nH:::::::H     H:::::::H                                         b::::::b                                                                                                             \nH:::::::H     H:::::::H                                         b::::::b                                                                                                             \nHH::::::H     H::::::HH                                          b:::::b                                                                                                             \n  H:::::H     H:::::H    aaaaaaaaaaaaa      mmmmmmm    mmmmmmm   b:::::bbbbbbbbb    uuuuuu    uuuuuu rrrrr   rrrrrrrrr      ggggggggg   ggggg    eeeeeeeeeeee    rrrrr   rrrrrrrrr   \n  H:::::H     H:::::H    a::::::::::::a   mm:::::::m  m:::::::mm b::::::::::::::bb  u::::u    u::::u r::::rrr:::::::::r    g:::::::::ggg::::g  ee::::::::::::ee  r::::rrr:::::::::r  \n  H::::::HHHHH::::::H    aaaaaaaaa:::::a m::::::::::mm::::::::::mb::::::::::::::::b u::::u    u::::u r:::::::::::::::::r  g:::::::::::::::::g e::::::eeeee:::::eer:::::::::::::::::r \n  H:::::::::::::::::H             a::::a m::::::::::::::::::::::mb:::::bbbbb:::::::bu::::u    u::::u rr::::::rrrrr::::::rg::::::ggggg::::::gge::::::e     e:::::err::::::rrrrr::::::r\n  H:::::::::::::::::H      aaaaaaa:::::a m:::::mmm::::::mmm:::::mb:::::b    b::::::bu::::u    u::::u  r:::::r     r:::::rg:::::g     g:::::g e:::::::eeeee::::::e r:::::r     r:::::r\n  H::::::HHHHH::::::H    aa::::::::::::a m::::m   m::::m   m::::mb:::::b     b:::::bu::::u    u::::u  r:::::r     rrrrrrrg:::::g     g:::::g e:::::::::::::::::e  r:::::r     rrrrrrr\n  H:::::H     H:::::H   a::::aaaa::::::a m::::m   m::::m   m::::mb:::::b     b:::::bu::::u    u::::u  r:::::r            g:::::g     g:::::g e::::::eeeeeeeeeee   r:::::r            \n  H:::::H     H:::::H  a::::a    a:::::a m::::m   m::::m   m::::mb:::::b     b:::::bu:::::uuuu:::::u  r:::::r            g::::::g    g:::::g e:::::::e            r:::::r            \nHH::::::H     H::::::HHa::::a    a:::::a m::::m   m::::m   m::::mb:::::bbbbbb::::::bu:::::::::::::::uur:::::r            g:::::::ggggg:::::g e::::::::e           r:::::r            \nH:::::::H     H:::::::Ha:::::aaaa::::::a m::::m   m::::m   m::::mb::::::::::::::::b  u:::::::::::::::ur:::::r             g::::::::::::::::g  e::::::::eeeeeeee   r:::::r            \nH:::::::H     H:::::::H a::::::::::aa:::am::::m   m::::m   m::::mb:::::::::::::::b    uu::::::::uu:::ur:::::r              gg::::::::::::::g   ee:::::::::::::e   r:::::r            \nHHHHHHHHH     HHHHHHHHH  aaaaaaaaaa  aaaammmmmm   mmmmmm   mmmmmmbbbbbbbbbbbbbbbb       uuuuuuuu  uuuurrrrrrr                gggggggg::::::g     eeeeeeeeeeeeee   rrrrrrr            \n                                                                                                                                     g:::::g                                         \n                                                                                                                         gggggg      g:::::g                                         \n                                                                                                                         g:::::gg   gg:::::g                                         \n                                                                                                                          g::::::ggg:::::::g                                         \n                                                                                                                           gg:::::::::::::g                                          \n                                                                                                                             ggg::::::ggg                                            \n                                                                                                                                gggggg                                               \n```\n{: .-figlet}\n\n### doom\n\n```\n _   _                 _                               \n| | | |               | |                              \n| |_| | __ _ _ __ ___ | |__  _   _ _ __ __ _  ___ _ __ \n|  _  |/ _` | '_ ` _ \\| '_ \\| | | | '__/ _` |/ _ \\ '__|\n| | | | (_| | | | | | | |_) | |_| | | | (_| |  __/ |   \n\\_| |_/\\__,_|_| |_| |_|_.__/ \\__,_|_|  \\__, |\\___|_|   \n                                        __/ |          \n                                       |___/           \n```\n{: .-figlet}\n\n### dotmatrix\n\n```\n _           _                                 _                                                                                    \n(_)         (_)                               (_)                                                                                   \n(_)         (_)   _  _  _        _  _   _  _  (_) _  _  _    _         _  _       _  _   _  _  _  _   _  _  _  _   _       _  _     \n(_) _  _  _ (_)  (_)(_)(_) _    (_)(_)_(_)(_) (_)(_)(_)(_)_ (_)       (_)(_)_  _ (_)(_)_(_)(_)(_)(_) (_)(_)(_)(_)_(_)_  _ (_)(_)    \n(_)(_)(_)(_)(_)   _  _  _ (_)  (_)   (_)   (_)(_)        (_)(_)       (_)  (_)(_)     (_)        (_)(_) _  _  _ (_) (_)(_)          \n(_)         (_) _(_)(_)(_)(_)  (_)   (_)   (_)(_)        (_)(_)       (_)  (_)        (_)        (_)(_)(_)(_)(_)(_) (_)             \n(_)         (_)(_)_  _  _ (_)_ (_)   (_)   (_)(_) _  _  _(_)(_)_  _  _(_)_ (_)        (_)_  _  _ (_)(_)_  _  _  _   (_)             \n(_)         (_)  (_)(_)(_)  (_)(_)   (_)   (_)(_)(_)(_)(_)    (_)(_)(_) (_)(_)          (_)(_)(_)(_)  (_)(_)(_)(_)  (_)             \n                                                                                         _  _  _ (_)                                \n                                                                                        (_)(_)(_)                                   \n```\n{: .-figlet}\n\n### double\n\n```\n__  __ ___ ___  _______ __ ______   ___  ________ \n||  ||// \\\\||\\\\//|||| ))|| |||| \\\\ // \\\\||   || \\\\\n||==||||=|||| \\/ ||||=) || ||||_//(( ___||== ||_//\n||  |||| ||||    ||||_))\\\\_//|| \\\\ \\\\_||||___|| \\\\\n```\n{: .-figlet}\n\n### drpepper\n\n```\n _ _              _                            \n| | | ___ ._ _ _ | |_  _ _  _ _  ___  ___  _ _ \n|   |<_> || ' ' || . \\| | || '_>/ . |/ ._>| '_>\n|_|_|<___||_|_|_||___/`___||_|  \\_. |\\___.|_|  \n                                <___'          \n```\n{: .-figlet}\n\n### dwhistled\n\n```\nH m ur  r\n X X  XX \n X .  XX \n . .  XX \n . .  .X \n . .  .X \n . .  .. \nHamburger\n```\n{: .-figlet}\n\n### eftichess\n\n```\n         #########         #########         #########         ####################################\n  [`'`'] ##\\`.'/##  ':v:`  ##/\\:/\\##  |:+:|  ##':v:`##  \\`.'/  ##[`'`']###'\\v/`####[`'`']###[`'`']#\n   |::|  ##(o:o)##  (o:0)  #/(o:o)\\#  (o:o)  ##(o:0)##  (o:o)  ###|::|####(o 0)#####|  |#####|  |##\n   |::|  ###\\:/:\\#   (:)   ###(:)###   (:)   ###(:)###   \\:/:\\ ###|::|#####(_)######|__|#####|__|##\n         ####\"####         #########         #########    \"    ####################################\n```\n{: .-figlet}\n\n### eftifont\n\n```\n _ _                         \n| U |_    _ _ ||    _  _ _ _ \n|   /o\\ |/ \\ \\|o\\U|/_|/oYoY_|\n|_n_\\_,]L_n_n||_|_/L| \\_|(L| \n                       _)    \n```\n{: .-figlet}\n\n### eftipiti\n\n```\n[]-|amburger\n```\n{: .-figlet}\n\n### eftirobot\n\n```\n _  _               _                         \n( )( )             ( )                        \n| L| | ___  __  __ | |_  _ _  __  __  ___  __ \n( __ )( o )( _`'_ )( o \\( U )( _)/o )( o_)( _)\n/_\\/_\\/_^_\\/_\\`'/_\\/___//___\\/_\\ \\__\\ \\(  /_\\ \n                                  _|/         \n```\n{: .-figlet}\n\n### eftitalic\n\n```\n   _ __                                \n  /// / _   _     /7      _   _   __ _ \n / ` /,'o| / \\'\\ /o\\ /7/7//7,'o|,'o///7\n/_n_/ |_,7/_nn_//_,'/__///  |_,'|_(//  \n                            _//        \n```\n{: .-figlet}\n\n### eftiwall\n\n```\n                 |                ___         ( ( (           o            !!!                         |\"|           !!!      \n     ***         |.===.          /_\\ `*     '. ___ .'      ` /_\\ '      `  _ _  '      __MMM__        _|_|_       `  _ _  '   \n    (o o)        {}o o{}        (o o)      '  (> <) '     - (o o) -    -  (OXO)  -      (o o)         (o o)      -  (OXO)  -  \nooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-\n```\n{: .-figlet}\n\n### eftiwater\n\n```\n _ _             _                       \n )L`) ___  _  _  ))  _    __  ___  __ __ \n(( ( ((_( ((`1( ((_)((_( (|  ((_( (('(|  \n                               _))       \n```\n{: .-figlet}\n\n### epic\n\n```\n          _______  _______  ______            _______  _______  _______  _______ \n|\\     /|(  ___  )(       )(  ___ \\ |\\     /|(  ____ )(  ____ \\(  ____ \\(  ____ )\n| )   ( || (   ) || () () || (   ) )| )   ( || (    )|| (    \\/| (    \\/| (    )|\n| (___) || (___) || || || || (__/ / | |   | || (____)|| |      | (__    | (____)|\n|  ___  ||  ___  || |(_)| ||  __ (  | |   | ||     __)| | ____ |  __)   |     __)\n| (   ) || (   ) || |   | || (  \\ \\ | |   | || (\\ (   | | \\_  )| (      | (\\ (   \n| )   ( || )   ( || )   ( || )___) )| (___) || ) \\ \\__| (___) || (____/\\| ) \\ \\__\n|/     \\||/     \\||/     \\||/ \\___/ (_______)|/   \\__/(_______)(_______/|/   \\__/\n```\n{: .-figlet}\n\n### fender\n\n```\n'||  ||`                    '||                                          \n ||  ||                      ||                                          \n ||''||   '''|.  '||),,(|,   ||''|, '||  ||` '||''| .|''|, .|''|, '||''| \n ||  ||  .|''||   || || ||   ||  ||  ||  ||   ||    ||  || ||..||  ||    \n.||  ||. `|..||. .||    ||. .||..|'  `|..'|. .||.   `|..|| `|...  .||.   \n                                                        ||               \n                                                     `..|'               \n```\n{: .-figlet}\n\n### fourtops\n\n```\n|  |             |                       \n|--|/~~||/~\\ /~\\ |~~\\|   ||/~\\/~~|/~/|/~\\\n|  |\\__||   |   ||__/ \\_/||   \\__|\\/_|   \n                              \\__|       \n```\n{: .-figlet}\n\n### fraktur\n\n```\n                                                            ..                                                                    \n         .xHL                                         . uW8\"                                                                      \n      .-`8888hxxx~                   ..    .     :    `t888          x.    .        .u    .                             .u    .   \n   .H8X  `%888*\"            u      .888: x888  x888.   8888   .    .@88k  z88u    .d88B :@8c       uL          .u     .d88B :@8c  \n   888X     ..x..        us888u.  ~`8888~'888X`?888f`  9888.z88N  ~\"8888 ^8888   =\"8888f8888r  .ue888Nc..   ud8888.  =\"8888f8888r \n  '8888k .x8888888x   .@88 \"8888\"   X888  888X '888>   9888  888E   8888  888R     4888>'88\"  d88E`\"888E` :888'8888.   4888>'88\"  \n   ?8888X    \"88888X  9888  9888    X888  888X '888>   9888  888E   8888  888R     4888> '    888E  888E  d888 '88%\"   4888> '    \n    ?8888X    '88888> 9888  9888    X888  888X '888>   9888  888E   8888  888R     4888>      888E  888E  8888.+\"      4888>      \n H8H %8888     `8888> 9888  9888    X888  888X '888>   9888  888E   8888 ,888B .  .d888L .+   888E  888E  8888L       .d888L .+   \n'888> 888\"      8888  9888  9888   \"*88%\"\"*88\" '888!` .8888  888\"  \"8888Y 8888\"   ^\"8888*\"    888& .888E  '8888c. .+  ^\"8888*\"    \n \"8` .8\" ..     88*   \"888*\"\"888\"    `~    \"    `\"`    `%888*%\"     `Y\"   'YP        \"Y\"      *888\" 888&   \"88888%       \"Y\"      \n    `  x8888h. d*\"     ^Y\"   ^Y'                          \"`                                   `\"   \"888E    \"YP'                 \n      !\"\"*888%~                                                                               .dWi   `88E                         \n      !   `\"  .                                                                               4888~  J8%                          \n      '-....:~                                                                                 ^\"===*\"`                           \n```\n{: .-figlet}\n\n### fuzzy\n\n```\n.-..-.                .-.                               \n: :; :                : :                               \n:    : .--.  ,-.,-.,-.: `-. .-..-..--.  .--.  .--. .--. \n: :: :' .; ; : ,. ,. :' .; :: :; :: ..'' .; :' '_.': ..'\n:_;:_;`.__,_;:_;:_;:_;`.__.'`.__.':_;  `._. ;`.__.':_;  \n                                        .-. :           \n                                        `._.'           \n```\n{: .-figlet}\n\n### goofy\n\n```\n    ___    _____  _____          _      ___    ___    _     _____       ___        __     ___\n\\  |   |  /    /  \\    |        | \\     \\  |  |   |  | |    \\    )  ____)  \\    ___) |    \\  \n |  \\_/  |    /    \\   |  |\\/|  |  |     ) |  |   |  | |     )  /  /  __    |  (__   |     ) \n |   _   |   /  ()  \\  |  |  |  |  |    <  |  |   |  | |    /  (  (  (  \\   |   __)  |    /  \n |  / \\  |  |   __   | |  |  |  |  |     ) |   \\_/   | | |\\ \\   \\  \\__)  )  |  (___  | |\\ \\  \n/  |___|  \\_|  (__)  |_|  |__|  |_/     /___\\       /__| |_\\ \\___)      (__/       )_| |_\\ \\_\n```\n{: .-figlet}\n\n### gothic\n\n```\n_-_-                     ,,                                  \n  /,        _            ||                  _               \n  || __    < \\, \\\\/\\\\/\\\\ ||/|, \\\\ \\\\ ,._-_  / \\\\  _-_  ,._-_ \n ~||-  -   /-|| || || || || || || ||  ||   || || || \\\\  ||   \n  ||===|| (( || || || || || |' || ||  ||   || || ||/    ||   \n ( \\_, |   \\/\\\\ \\\\ \\\\ \\\\ \\\\/   \\\\/\\\\  \\\\,  \\\\_-| \\\\,/   \\\\,  \n       `                                    /  \\             \n                                           '----`            \n```\n{: .-figlet}\n\n### graceful\n\n```\n _  _   __   _  _  ____  _  _  ____   ___  ____  ____ \n/ )( \\ / _\\ ( \\/ )(  _ \\/ )( \\(  _ \\ / __)(  __)(  _ \\\n) __ (/    \\/ \\/ \\ ) _ () \\/ ( )   /( (_ \\ ) _)  )   /\n\\_)(_/\\_/\\_/\\_)(_/(____/\\____/(__\\_) \\___/(____)(__\\_)\n```\n{: .-figlet}\n\n### gradient\n\n```\neee..eee..eeeeee..eee......eee.eeeeeee..eee..eee.eeeeeee...eeeeee..eeeeee.eeeeeee..\n@@@::@@@:@@@@@@@@:@@@@::::@@@@:@@@@@@@@:@@@::@@@:@@@@@@@@:@@@@@@@@:@@@@@@:@@@@@@@@:\n%%%--%%%-%%%--%%%-%%%%%--%%%%%-%%%--%%%-%%%--%%%-%%%--%%%-%%%------%%%----%%%--%%%-\n&&&&&&&&+&&&&&&&&+&&&&&&&&&&&&+&&&&&&&++&&&++&&&+&&&&&&&++&&&++++++&&&&&++&&&&&&&++\n||||||||*||||||||*|||*||||*|||*||||||||*|||**|||*||||||***|||*||||*|||||**||||||***\n!!!==!!!=!!!==!!!=!!!==!!==!!!=!!!==!!!=!!!==!!!=!!!=!!!==!!!==!!!=!!!====!!!=!!!==\n:::##:::#:::##:::#:::######:::#::::::::#::::::::#:::##:::#::::::::#::::::#:::##:::#\n...@@...@...@@...@...@@@@@@...@.......@@@......@@...@@...@@......@@......@...@@...@\n```\n{: .-figlet}\n\n### graffiti\n\n```\n  ___ ___               ___.                                     \n /   |   \\_____    _____\\_ |__  __ _________  ____   ___________ \n/    ~    \\__  \\  /     \\| __ \\|  |  \\_  __ \\/ ___\\_/ __ \\_  __ \\\n\\    Y    // __ \\|  Y Y  \\ \\_\\ \\  |  /|  | \\/ /_/  >  ___/|  | \\/\n \\___|_  /(____  /__|_|  /___  /____/ |__|  \\___  / \\___  >__|   \n       \\/      \\/      \\/    \\/            /_____/      \\/       \n```\n{: .-figlet}\n\n### hex\n\n```\n48 61 6D 62 75 72 67 65 72 \n```\n{: .-figlet}\n\n### hollywood\n\n```\n           _                                                                                    \n          ' )     )                           /'                                                \n          /'    /'                          /'                                                  \n       ,/'    /' ____     ,__________     /'__               ____     ____     ____      ____   \n      /`---,/' /'    )   /'    )     )  /'    )  /'    /   )'    )--/'    )  /'    )   )'    )--\n    /'    /' /'    /'  /'    /'    /' /'    /' /'    /'  /'       /'    /' /(___,/'  /'         \n(,/'     (_,(___,/(__/'    /'    /(__(___,/(__(___,/(__/'        (___,/(__(________/'           \n                                                                    /'                          \n                                                            /     /'                            \n                                                           (___,/'                              \n```\n{: .-figlet}\n\n### invita\n\n```\n   ____  ___)                              \n  (, /   /           /)                    \n    /---/  _  ___   (/_     __  _    _  __ \n ) /   (__(_(_// (_/_) (_(_/ (_(_/__(/_/ (_\n(_/                           .-/          \n                             (_/           \n```\n{: .-figlet}\n\n### isometric1\n\n```\n      ___           ___           ___           ___           ___           ___           ___           ___           ___     \n     /\\__\\         /\\  \\         /\\__\\         /\\  \\         /\\__\\         /\\  \\         /\\  \\         /\\  \\         /\\  \\    \n    /:/  /        /::\\  \\       /::|  |       /::\\  \\       /:/  /        /::\\  \\       /::\\  \\       /::\\  \\       /::\\  \\   \n   /:/__/        /:/\\:\\  \\     /:|:|  |      /:/\\:\\  \\     /:/  /        /:/\\:\\  \\     /:/\\:\\  \\     /:/\\:\\  \\     /:/\\:\\  \\  \n  /::\\  \\ ___   /::\\~\\:\\  \\   /:/|:|__|__   /::\\~\\:\\__\\   /:/  /  ___   /::\\~\\:\\  \\   /:/  \\:\\  \\   /::\\~\\:\\  \\   /::\\~\\:\\  \\ \n /:/\\:\\  /\\__\\ /:/\\:\\ \\:\\__\\ /:/ |::::\\__\\ /:/\\:\\ \\:|__| /:/__/  /\\__\\ /:/\\:\\ \\:\\__\\ /:/__/_\\:\\__\\ /:/\\:\\ \\:\\__\\ /:/\\:\\ \\:\\__\\\n \\/__\\:\\/:/  / \\/__\\:\\/:/  / \\/__/~~/:/  / \\:\\~\\:\\/:/  / \\:\\  \\ /:/  / \\/_|::\\/:/  / \\:\\  /\\ \\/__/ \\:\\~\\:\\ \\/__/ \\/_|::\\/:/  /\n      \\::/  /       \\::/  /        /:/  /   \\:\\ \\::/  /   \\:\\  /:/  /     |:|::/  /   \\:\\ \\:\\__\\    \\:\\ \\:\\__\\      |:|::/  / \n      /:/  /        /:/  /        /:/  /     \\:\\/:/  /     \\:\\/:/  /      |:|\\/__/     \\:\\/:/  /     \\:\\ \\/__/      |:|\\/__/  \n     /:/  /        /:/  /        /:/  /       \\::/__/       \\::/  /       |:|  |        \\::/  /       \\:\\__\\        |:|  |    \n     \\/__/         \\/__/         \\/__/         ~~            \\/__/         \\|__|         \\/__/         \\/__/         \\|__|    \n```\n{: .-figlet}\n\n### isometric2\n\n```\n      ___           ___           ___                         ___           ___           ___           ___           ___     \n     /\\  \\         /\\  \\         /\\  \\         _____         /\\  \\         /\\  \\         /\\__\\         /\\__\\         /\\  \\    \n     \\:\\  \\       /::\\  \\       |::\\  \\       /::\\  \\        \\:\\  \\       /::\\  \\       /:/ _/_       /:/ _/_       /::\\  \\   \n      \\:\\  \\     /:/\\:\\  \\      |:|:\\  \\     /:/\\:\\  \\        \\:\\  \\     /:/\\:\\__\\     /:/ /\\  \\     /:/ /\\__\\     /:/\\:\\__\\  \n  ___ /::\\  \\   /:/ /::\\  \\   __|:|\\:\\  \\   /:/ /::\\__\\   ___  \\:\\  \\   /:/ /:/  /    /:/ /::\\  \\   /:/ /:/ _/_   /:/ /:/  /  \n /\\  /:/\\:\\__\\ /:/_/:/\\:\\__\\ /::::|_\\:\\__\\ /:/_/:/\\:|__| /\\  \\  \\:\\__\\ /:/_/:/__/___ /:/__\\/\\:\\__\\ /:/_/:/ /\\__\\ /:/_/:/__/___\n \\:\\/:/  \\/__/ \\:\\/:/  \\/__/ \\:\\~~\\  \\/__/ \\:\\/:/ /:/  / \\:\\  \\ /:/  / \\:\\/:::::/  / \\:\\  \\ /:/  / \\:\\/:/ /:/  / \\:\\/:::::/  /\n  \\::/__/       \\::/__/       \\:\\  \\        \\::/_/:/  /   \\:\\  /:/  /   \\::/~~/~~~~   \\:\\  /:/  /   \\::/_/:/  /   \\::/~~/~~~~ \n   \\:\\  \\        \\:\\  \\        \\:\\  \\        \\:\\/:/  /     \\:\\/:/  /     \\:\\~~\\        \\:\\/:/  /     \\:\\/:/  /     \\:\\~~\\     \n    \\:\\__\\        \\:\\__\\        \\:\\__\\        \\::/  /       \\::/  /       \\:\\__\\        \\::/  /       \\::/  /       \\:\\__\\    \n     \\/__/         \\/__/         \\/__/         \\/__/         \\/__/         \\/__/         \\/__/         \\/__/         \\/__/    \n```\n{: .-figlet}\n\n### isometric3\n\n```\n      ___           ___           ___                         ___           ___           ___           ___           ___     \n     /__/\\         /  /\\         /__/\\         _____         /__/\\         /  /\\         /  /\\         /  /\\         /  /\\    \n     \\  \\:\\       /  /::\\       |  |::\\       /  /::\\        \\  \\:\\       /  /::\\       /  /:/_       /  /:/_       /  /::\\   \n      \\__\\:\\     /  /:/\\:\\      |  |:|:\\     /  /:/\\:\\        \\  \\:\\     /  /:/\\:\\     /  /:/ /\\     /  /:/ /\\     /  /:/\\:\\  \n  ___ /  /::\\   /  /:/~/::\\   __|__|:|\\:\\   /  /:/~/::\\   ___  \\  \\:\\   /  /:/~/:/    /  /:/_/::\\   /  /:/ /:/_   /  /:/~/:/  \n /__/\\  /:/\\:\\ /__/:/ /:/\\:\\ /__/::::| \\:\\ /__/:/ /:/\\:| /__/\\  \\__\\:\\ /__/:/ /:/___ /__/:/__\\/\\:\\ /__/:/ /:/ /\\ /__/:/ /:/___\n \\  \\:\\/:/__\\/ \\  \\:\\/:/__\\/ \\  \\:\\~~\\__\\/ \\  \\:\\/:/~/:/ \\  \\:\\ /  /:/ \\  \\:\\/:::::/ \\  \\:\\ /~~/:/ \\  \\:\\/:/ /:/ \\  \\:\\/:::::/\n  \\  \\::/       \\  \\::/       \\  \\:\\        \\  \\::/ /:/   \\  \\:\\  /:/   \\  \\::/~~~~   \\  \\:\\  /:/   \\  \\::/ /:/   \\  \\::/~~~~ \n   \\  \\:\\        \\  \\:\\        \\  \\:\\        \\  \\:\\/:/     \\  \\:\\/:/     \\  \\:\\        \\  \\:\\/:/     \\  \\:\\/:/     \\  \\:\\     \n    \\  \\:\\        \\  \\:\\        \\  \\:\\        \\  \\::/       \\  \\::/       \\  \\:\\        \\  \\::/       \\  \\::/       \\  \\:\\    \n     \\__\\/         \\__\\/         \\__\\/         \\__\\/         \\__\\/         \\__\\/         \\__\\/         \\__\\/         \\__\\/    \n```\n{: .-figlet}\n\n### isometric4\n\n```\n      ___           ___           ___           ___           ___           ___           ___           ___           ___     \n     /  /\\         /  /\\         /  /\\         /  /\\         /  /\\         /  /\\         /  /\\         /  /\\         /  /\\    \n    /  /:/        /  /::\\       /  /::|       /  /::\\       /  /:/        /  /::\\       /  /::\\       /  /::\\       /  /::\\   \n   /  /:/        /  /:/\\:\\     /  /:|:|      /  /:/\\:\\     /  /:/        /  /:/\\:\\     /  /:/\\:\\     /  /:/\\:\\     /  /:/\\:\\  \n  /  /::\\ ___   /  /::\\ \\:\\   /  /:/|:|__   /  /::\\ \\:\\   /  /:/        /  /::\\ \\:\\   /  /:/  \\:\\   /  /::\\ \\:\\   /  /::\\ \\:\\ \n /__/:/\\:\\  /\\ /__/:/\\:\\_\\:\\ /__/:/_|::::\\ /__/:/\\:\\_\\:| /__/:/     /\\ /__/:/\\:\\_\\:\\ /__/:/_\\_ \\:\\ /__/:/\\:\\ \\:\\ /__/:/\\:\\_\\:\\\n \\__\\/  \\:\\/:/ \\__\\/  \\:\\/:/ \\__\\/  /~~/:/ \\  \\:\\ \\:\\/:/ \\  \\:\\    /:/ \\__\\/~|::\\/:/ \\  \\:\\__/\\_\\/ \\  \\:\\ \\:\\_\\/ \\__\\/~|::\\/:/\n      \\__\\::/       \\__\\::/        /  /:/   \\  \\:\\_\\::/   \\  \\:\\  /:/     |  |:|::/   \\  \\:\\ \\:\\    \\  \\:\\ \\:\\      |  |:|::/ \n      /  /:/        /  /:/        /  /:/     \\  \\:\\/:/     \\  \\:\\/:/      |  |:|\\/     \\  \\:\\/:/     \\  \\:\\_\\/      |  |:|\\/  \n     /__/:/        /__/:/        /__/:/       \\__\\::/       \\  \\::/       |__|:|~       \\  \\::/       \\  \\:\\        |__|:|~   \n     \\__\\/         \\__\\/         \\__\\/            ~~         \\__\\/         \\__\\|         \\__\\/         \\__\\/         \\__\\|    \n```\n{: .-figlet}\n\n### italic\n\n```\n )__/_ _  /   _ _ _ _ \n/  /(///)()(// (/(-/  \n              _/      \n```\n{: .-figlet}\n\n### ivrit\n\n```\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   _                     _   _ \n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         _ __ ___  __ _ _ __ _   _| |__  _ __ ___   __ _| | | |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | '__/ _ \\/ _` | '__| | | | '_ \\| '_ ` _ \\ / _` | |_| |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | | |  __/ (_| | |  | |_| | |_) | | | | | | (_| |  _  |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |_|  \\___|\\__, |_|   \\__,_|_.__/|_| |_| |_|\\__,_|_| |_|\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |___/                                        \n```\n{: .-figlet}\n\n### jazmine\n\n```\n o    o                8                                       \n 8    8                8                                       \no8oooo8 .oPYo. ooYoYo. 8oPYo. o    o oPYo. .oPYo. .oPYo. oPYo. \n 8    8 .oooo8 8' 8  8 8    8 8    8 8  `' 8    8 8oooo8 8  `' \n 8    8 8    8 8  8  8 8    8 8    8 8     8    8 8.     8     \n 8    8 `YooP8 8  8  8 `YooP' `YooP' 8     `YooP8 `Yooo' 8     \n:..:::..:.....:..:..:..:.....::.....:..:::::....8 :.....:..::::\n:::::::::::::::::::::::::::::::::::::::::::::ooP'.:::::::::::::\n:::::::::::::::::::::::::::::::::::::::::::::...:::::::::::::::\n```\n{: .-figlet}\n\n### jerusalem\n\n```\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ______ ________   _ ______ ___  ___  __   __._   _   _ _   _ \n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |____  |____  \\ \\ | |____  |_  ||_  | \\ \\ / /| | | | | | | | |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | | _  | |\\ \\| |    | | | |  | |  \\ V / | | | | | | |_| |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | || | |_|_\\ ` |    | | | |__| |___\\  \\ | |/ /_/ /|  _  |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |_|| |  |______|    |_| |_|____|______| |_______/ |_| |_|\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |_|                                                   \n```\n{: .-figlet}\n\n### katakana\n\n```\n   #       #        ######### ######## ##########                #                          \n  ######## #   ###          #        #          # #########     #      ########## ######### \n #       # ####             #        #         #  #       #    #               #  #       # \n#      ##  #        ########        #  ########   #       #   #               #   #       # \n     ##    #               #      ##       ##     #       #  #     #       # #    #       # \n   ##      #               #    ##       ##       ######### #########       #     ######### \n ##         ####### ########  ##       ##                            #       #              \n```\n{: .-figlet}\n\n### kban\n\n```\n'||'  '||'                    '||                                               \n ||    ||   ....   .. .. ..    || ...  ... ...  ... ..    ... .   ....  ... ..  \n ||''''||  '' .||   || || ||   ||'  ||  ||  ||   ||' ''  || ||  .|...||  ||' '' \n ||    ||  .|' ||   || || ||   ||    |  ||  ||   ||       |''   ||       ||     \n.||.  .||. '|..'|' .|| || ||.  '|...'   '|..'|. .||.     '||||.  '|...' .||.    \n                                                        .|....'                 \n```\n{: .-figlet}\n\n### l4me\n\n```\n|-|4mbvrg3r\n```\n{: .-figlet}\n\n### larry3d\n\n```\n __  __                       __                                           \n/\\ \\/\\ \\                     /\\ \\                                          \n\\ \\ \\_\\ \\     __      ___ ___\\ \\ \\____  __  __  _ __    __      __   _ __  \n \\ \\  _  \\  /'__`\\  /' __` __`\\ \\ '__`\\/\\ \\/\\ \\/\\`'__\\/'_ `\\  /'__`\\/\\`'__\\\n  \\ \\ \\ \\ \\/\\ \\L\\.\\_/\\ \\/\\ \\/\\ \\ \\ \\L\\ \\ \\ \\_\\ \\ \\ \\//\\ \\L\\ \\/\\  __/\\ \\ \\/ \n   \\ \\_\\ \\_\\ \\__/.\\_\\ \\_\\ \\_\\ \\_\\ \\_,__/\\ \\____/\\ \\_\\\\ \\____ \\ \\____\\\\ \\_\\ \n    \\/_/\\/_/\\/__/\\/_/\\/_/\\/_/\\/_/\\/___/  \\/___/  \\/_/ \\/___L\\ \\/____/ \\/_/ \n                                                        /\\____/            \n                                                        \\_/__/             \n```\n{: .-figlet}\n\n### lcd\n\n```\n                                       _              \n|   |             |                   | |             \n|-+-|  -    |- -  |-          |-       -|  -    |-    \n|   | | |   | | | | |   | |   |         | |/    |     \n       --          -     --            -   --         \n```\n{: .-figlet}\n\n### lean\n\n```\n    _/    _/                            _/                                                          \n   _/    _/    _/_/_/  _/_/_/  _/_/    _/_/_/    _/    _/  _/  _/_/    _/_/_/    _/_/    _/  _/_/   \n  _/_/_/_/  _/    _/  _/    _/    _/  _/    _/  _/    _/  _/_/      _/    _/  _/_/_/_/  _/_/        \n _/    _/  _/    _/  _/    _/    _/  _/    _/  _/    _/  _/        _/    _/  _/        _/           \n_/    _/    _/_/_/  _/    _/    _/  _/_/_/      _/_/_/  _/          _/_/_/    _/_/_/  _/            \n                                                                       _/                           \n                                                                  _/_/                              \n```\n{: .-figlet}\n\n### letters\n\n```\nHH   HH                     bb                                           \nHH   HH   aa aa mm mm mmmm  bb      uu   uu rr rr   gggggg   eee  rr rr  \nHHHHHHH  aa aaa mmm  mm  mm bbbbbb  uu   uu rrr  r gg   gg ee   e rrr  r \nHH   HH aa  aaa mmm  mm  mm bb   bb uu   uu rr     ggggggg eeeee  rr     \nHH   HH  aaa aa mmm  mm  mm bbbbbb   uuuu u rr          gg  eeeee rr     \n                                                    ggggg                \n```\n{: .-figlet}\n\n### linux\n\n```\n.-. .-..---..-.-.-..--..-..-..---. .---..---..---. \n| |=| || | || | | ||-< | || || |-< | |'_| |- | |-< \n`-' `-'`-^-'`-'-'-'`--'`----'`-'`-'`-'-/`---'`-'`-'\n```\n{: .-figlet}\n\n### lockergnome\n\n```\n::| ::|          :|                            \n::::::|.::\\ :\\/| ::'| :\\:| :::| /::| :~~/ :::| \n::| ::|`::| :::| :::| `::| :|   \\::| :::, :|   \n                                ,.:/           \n```\n{: .-figlet}\n\n### madrid\n\n```\n/ \\           |                     \n|=| /=| /=\\=\\ |=\\ | | /= /=| /=\\ /= \n\\ / \\=| | | | |=/ \\=/ |  \\=| \\=  |  \n                         \\=|        \n```\n{: .-figlet}\n\n### marquee\n\n```\n.::     .::                       .::                                               \n.::     .::                       .::                                               \n.::     .::   .::    .::: .:: .:: .::      .::  .::.: .:::   .::      .::    .: .:::\n.:::::: .:: .::  .::  .::  .:  .::.:: .::  .::  .:: .::    .::  .:: .:   .::  .::   \n.::     .::.::   .::  .::  .:  .::.::   .::.::  .:: .::   .::   .::.::::: .:: .::   \n.::     .::.::   .::  .::  .:  .::.::   .::.::  .:: .::    .::  .::.:         .::   \n.::     .::  .:: .:::.:::  .:  .::.:: .::    .::.::.:::        .::   .::::   .:::   \n                                                            .::                     \n```\n{: .-figlet}\n\n### maxfour\n\n```\n|  |             |                       \n|--|/~~||/~\\ /~\\ |~~\\|   ||/~\\/~~|/~/|/~\\\n|  |\\__||   |   ||__/ \\_/||   \\__|\\/_|   \n                              \\__|       \n```\n{: .-figlet}\n\n### mike\n\n```\n |          |       _     _  _\n |\\ //| ||\\ |/ |/| |  /| |/ | \n                       |      \n```\n{: .-figlet}\n\n### mini\n\n```\n|_| _.._ _ |_    .__  _ ._ \n| |(_|| | ||_)|_||(_|(/_|  \n                   _|      \n```\n{: .-figlet}\n\n### mirror\n\n```\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       _                 _   _ \n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         __ _ ___  _ __ __ _ _   _  __| | ___ __ _ _ __ | | | |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |__` / _ \\| '_ \\__` | | | |/ _` |/ _ ' _` | '_ \\| |_| |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | \\__  | |_) | | | |_| | (_| | | | | | | |_) |  _  |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |_|___/| .__/  |_|_.__/ \\__,_|_| |_| |_|_.__/|_| |_|\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   \\___|                                       \n```\n{: .-figlet}\n\n### mnemonic\n\n```\nHamburger\n```\n{: .-figlet}\n\n### morse\n\n```\n.... .- -- -... ..- .-. --. . .-. \n```\n{: .-figlet}\n\n### moscow\n\n```\n#   #   #   #   # ####  #   # ####  ##### ##### ####  \n # #   # #  ## ##  #     # #  #   # #   # #     #   # \n  #   ##### # # #  ####   #   ####  #     ####  ####  \n # #  #   # #   #  #  #  #    #     #     #     #     \n#   # #   # #   # ##### #     #     #     ##### #     \n```\n{: .-figlet}\n\n### mshebrew210\n\n```\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         \"\"|\"\"|\\  |\"\"|| |\\/|/ |\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           || ' \\/   ||_|_\\|_/ \n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |  -'              \n```\n{: .-figlet}\n\n### nancyj-fancy\n\n```\nM\"\"MMMMM\"\"MM                     dP                                                    \nM  MMMMM  MM                     88                                                    \nM         `M .d8888b. 88d8b.d8b. 88d888b. dP    dP 88d888b. .d8888b. .d8888b. 88d888b. \nM  MMMMM  MM 88'  `88 88'`88'`88 88'  `88 88    88 88'  `88 88'  `88 88ooood8 88'  `88 \nM  MMMMM  MM 88.  .88 88  88  88 88.  .88 88.  .88 88       88.  .88 88.  ... 88       \nM  MMMMM  MM `88888P8 dP  dP  dP 88Y8888' `88888P' dP       `8888P88 `88888P' dP       \nMMMMMMMMMMMM                                                     .88                   \n                                                             d8888P                    \n```\n{: .-figlet}\n\n### nancyj-underlined\n\n```\ndP     dP                      dP                                                    \n88     88                      88                                                    \n88aaaaa88a .d8888b. 88d8b.d8b. 88d888b. dP    dP 88d888b. .d8888b. .d8888b. 88d888b. \n88     88  88'  `88 88'`88'`88 88'  `88 88    88 88'  `88 88'  `88 88ooood8 88'  `88 \n88     88  88.  .88 88  88  88 88.  .88 88.  .88 88       88.  .88 88.  ... 88       \ndP     dP  `88888P8 dP  dP  dP 88Y8888' `88888P' dP       `8888P88 `88888P' dP       \nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo~~~~.88~oooooooooooooooooo\n                                                           d8888P                    \n```\n{: .-figlet}\n\n### nancyj\n\n```\ndP     dP                      dP                                                    \n88     88                      88                                                    \n88aaaaa88a .d8888b. 88d8b.d8b. 88d888b. dP    dP 88d888b. .d8888b. .d8888b. 88d888b. \n88     88  88'  `88 88'`88'`88 88'  `88 88    88 88'  `88 88'  `88 88ooood8 88'  `88 \n88     88  88.  .88 88  88  88 88.  .88 88.  .88 88       88.  .88 88.  ... 88       \ndP     dP  `88888P8 dP  dP  dP 88Y8888' `88888P' dP       `8888P88 `88888P' dP       \n                                                               .88                   \n                                                           d8888P                    \n```\n{: .-figlet}\n\n### nipples\n\n```\n{__     {__                       {__                                               \n{__     {__                       {__                                               \n{__     {__   {__    {___ {__ {__ {__      {__  {__{_ {___   {__      {__    {_ {___\n{______ {__ {__  {__  {__  {_  {__{__ {__  {__  {__ {__    {__  {__ {_   {__  {__   \n{__     {__{__   {__  {__  {_  {__{__   {__{__  {__ {__   {__   {__{_____ {__ {__   \n{__     {__{__   {__  {__  {_  {__{__   {__{__  {__ {__    {__  {__{_         {__   \n{__     {__  {__ {___{___  {_  {__{__ {__    {__{__{___        {__   {____   {___   \n                                                            {__                     \n```\n{: .-figlet}\n\n### ntgreek\n\n```\n _   _               ___                             \n| | | |             / _ \\                            \n| |_| | __  ___   _| |_) )_   _  ___ _   _ ___  ___  \n|  _  |/  \\/ / | | |  _ <| | | |/ _ ( \\ / ) __)/ _ \\ \n| | | ( ()  <| |_| | |_) ) |_| | |_) ) v /> _)| |_) )\n|_| |_|\\__/\\_\\ ._,_|  __/ \\___/|  __/ | | \\___)  __/ \n             | |   | |         | |    | |     | |    \n             |_|   |_|         |_|    |_|     |_|    \n```\n{: .-figlet}\n\n### nvscript\n\n```\n ,ggg,        gg                                                                                                  \ndP\"\"Y8b       88                                 ,dPYb,                                                           \nYb, `88       88                                 IP'`Yb                                                           \n `\"  88       88                                 I8  8I                                                           \n     88aaaaaaa88                                 I8  8'                                                           \n     88\"\"\"\"\"\"\"88    ,gggg,gg   ,ggg,,ggg,,ggg,   I8 dP      gg      gg   ,gggggg,    ,gggg,gg   ,ggg,    ,gggggg, \n     88       88   dP\"  \"Y8I  ,8\" \"8P\" \"8P\" \"8,  I8dP   88ggI8      8I   dP\"\"\"\"8I   dP\"  \"Y8I  i8\" \"8i   dP\"\"\"\"8I \n     88       88  i8'    ,8I  I8   8I   8I   8I  I8P    8I  I8,    ,8I  ,8'    8I  i8'    ,8I  I8, ,8I  ,8'    8I \n     88       Y8,,d8,   ,d8b,,dP   8I   8I   Yb,,d8b,  ,8I ,d8b,  ,d8b,,dP     Y8,,d8,   ,d8I  `YbadP' ,dP     Y8,\n     88       `Y8P\"Y8888P\"`Y88P'   8I   8I   `Y88P'\"Y88P\"' 8P'\"Y88P\"`Y88P      `Y8P\"Y8888P\"888888P\"Y8888P      `Y8\n                                                                                         ,d8I'                    \n                                                                                       ,dP'8I                     \n                                                                                      ,8\"  8I                     \n                                                                                      I8   8I                     \n                                                                                      `8, ,8I                     \n                                                                                       `Y8P\"                      \n```\n{: .-figlet}\n\n### o8\n\n```\nooooo ooooo                          oooo                                                                  \n 888   888   ooooooo   oo ooo oooo    888ooooo  oooo  oooo  oo oooooo     oooooooo8 ooooooooo8 oo oooooo   \n 888ooo888   ooooo888   888 888 888   888    888 888   888   888    888 888    88o 888oooooo8   888    888 \n 888   888 888    888   888 888 888   888    888 888   888   888         888oo888o 888          888        \no888o o888o 88ooo88 8o o888o888o888o o888ooo88    888o88 8o o888o       888     888  88oooo888 o888o       \n                                                                         888ooo888                         \n```\n{: .-figlet}\n\n### octal\n\n```\n110 141 155 142 165 162 147 145 162 \n```\n{: .-figlet}\n\n### ogre\n\n```\n                       _                               \n  /\\  /\\__ _ _ __ ___ | |__  _   _ _ __ __ _  ___ _ __ \n / /_/ / _` | '_ ` _ \\| '_ \\| | | | '__/ _` |/ _ \\ '__|\n/ __  / (_| | | | | | | |_) | |_| | | | (_| |  __/ |   \n\\/ /_/ \\__,_|_| |_| |_|_.__/ \\__,_|_|  \\__, |\\___|_|   \n                                       |___/           \n```\n{: .-figlet}\n\n### os2\n\n```\noo____oo___________________oo______________________________________________\noo____oo__ooooo__oo_oo_oo__oooooo__oo____o_oo_ooo___oooo____ooooo__oo_ooo__\noo____oo_oo___oo_ooo_oo__o_oo___oo_oo____o_ooo___o_oo__oo__oo____o_ooo___o_\noooooooo_oo___oo_oo__oo__o_oo___oo_oo____o_oo______oo___o__ooooooo_oo______\noo____oo_oo___oo_oo__oo__o_oo___oo_ooo___o_oo_______oooooo_oo______oo______\noo____oo__oooo_o_oo______o_oooooo__oo_ooo__oo______o____oo__ooooo__oo______\n____________________________________________________ooooo__________________\n```\n{: .-figlet}\n\n### pawp\n\n```\n _     _                    _                                     \n(_)   (_)                  (_)            _            ____  _    \n(_)___(_)  ____   __   __  (_)_    _   _ (_)__  ____  (____)(_)__ \n(_______) (____) (__)_(__) (___)_ (_) (_)(____)(____)(_)_(_)(____)\n(_)   (_)( )_( )(_) (_) (_)(_)_(_)(_)_(_)(_)  ( )_(_)(__)__ (_)   \n(_)   (_) (__)_)(_) (_) (_)(____)  (___) (_)   (____) (____)(_)   \n                                              (_)_(_)             \n                                               (___)              \n```\n{: .-figlet}\n\n### peaks\n\n```\n/^^     /^^                       /^^                                               \n/^^     /^^                       /^^                                               \n/^^     /^^   /^^    /^^^ /^^ /^^ /^^      /^^  /^^/^ /^^^   /^^      /^^    /^ /^^^\n/^^^^^^ /^^ /^^  /^^  /^^  /^  /^^/^^ /^^  /^^  /^^ /^^    /^^  /^^ /^   /^^  /^^   \n/^^     /^^/^^   /^^  /^^  /^  /^^/^^   /^^/^^  /^^ /^^   /^^   /^^/^^^^^ /^^ /^^   \n/^^     /^^/^^   /^^  /^^  /^  /^^/^^   /^^/^^  /^^ /^^    /^^  /^^/^         /^^   \n/^^     /^^  /^^ /^^^/^^^  /^  /^^/^^ /^^    /^^/^^/^^^        /^^   /^^^^   /^^^   \n                                                            /^^                     \n```\n{: .-figlet}\n\n### pebbles\n\n```\no      O                  o                                     \nO      o                 O                                      \no      O                 O                                      \nOoOooOOo                 o                                      \no      O .oOoO' `oOOoOO. OoOo. O   o  `OoOo. .oOoO .oOo. `OoOo. \nO      o O   o   O  o  o O   o o   O   o     o   O OooO'  o     \no      o o   O   o  O  O o   O O   o   O     O   o O      O     \no      O `OoO'o  O  o  o `OoO' `OoO'o  o     `OoOo `OoO'  o     \n                                                 O              \n                                              OoO'              \n```\n{: .-figlet}\n\n### pepper\n\n```\n /_/_  _ _  /_    __  _  _\n/ //_|/ / //_//_///_//_'/ \n                  _/      \n```\n{: .-figlet}\n\n### poison\n\n```\n@@@  @@@   @@@@@@   @@@@@@@@@@   @@@@@@@   @@@  @@@  @@@@@@@    @@@@@@@@  @@@@@@@@  @@@@@@@   \n@@@  @@@  @@@@@@@@  @@@@@@@@@@@  @@@@@@@@  @@@  @@@  @@@@@@@@  @@@@@@@@@  @@@@@@@@  @@@@@@@@  \n@@!  @@@  @@!  @@@  @@! @@! @@!  @@!  @@@  @@!  @@@  @@!  @@@  !@@        @@!       @@!  @@@  \n!@!  @!@  !@!  @!@  !@! !@! !@!  !@   @!@  !@!  @!@  !@!  @!@  !@!        !@!       !@!  @!@  \n@!@!@!@!  @!@!@!@!  @!! !!@ @!@  @!@!@!@   @!@  !@!  @!@!!@!   !@! @!@!@  @!!!:!    @!@!!@!   \n!!!@!!!!  !!!@!!!!  !@!   ! !@!  !!!@!!!!  !@!  !!!  !!@!@!    !!! !!@!!  !!!!!:    !!@!@!    \n!!:  !!!  !!:  !!!  !!:     !!:  !!:  !!!  !!:  !!!  !!: :!!   :!!   !!:  !!:       !!: :!!   \n:!:  !:!  :!:  !:!  :!:     :!:  :!:  !:!  :!:  !:!  :!:  !:!  :!:   !::  :!:       :!:  !:!  \n::   :::  ::   :::  :::     ::    :: ::::  ::::: ::  ::   :::   ::: ::::   :: ::::  ::   :::  \n :   : :   :   : :   :      :    :: : ::    : :  :    :   : :   :: :: :   : :: ::    :   : :  \n```\n{: .-figlet}\n\n### puffy\n\n```\n _   _                    _                                     \n( ) ( )                  ( )                                    \n| |_| |   _ _   ___ ___  | |_    _   _  _ __   __     __   _ __ \n|  _  | /'_` )/' _ ` _ `\\| '_`\\ ( ) ( )( '__)/'_ `\\ /'__`\\( '__)\n| | | |( (_| || ( ) ( ) || |_) )| (_) || |  ( (_) |(  ___/| |   \n(_) (_)`\\__,_)(_) (_) (_)(_,__/'`\\___/'(_)  `\\__  |`\\____)(_)   \n                                            ( )_) |             \n                                             \\___/'             \n```\n{: .-figlet}\n\n### pyramid\n\n```\n  ^    ^    ^    ^    ^    ^    ^    ^    ^  \n /H\\  /a\\  /m\\  /b\\  /u\\  /r\\  /g\\  /e\\  /r\\ \n<___><___><___><___><___><___><___><___><___>\n```\n{: .-figlet}\n\n### rectangles\n\n```\n _____           _                       \n|  |  |___ _____| |_ _ _ ___ ___ ___ ___ \n|     | .'|     | . | | |  _| . | -_|  _|\n|__|__|__,|_|_|_|___|___|_| |_  |___|_|  \n                            |___|        \n```\n{: .-figlet}\n\n### relief\n\n```\n___________________________________________________________________________________________________\n/~~\\__/~~\\__/~~~~~~\\__/~~\\__/~~\\_/~~~~~~~\\__/~~\\__/~~\\_/~~~~~~~\\___/~~~~~~\\__/~~~~~~~~\\_/~~~~~~~\\__\n/~~\\__/~~\\_/~~\\__/~~\\_/~~~\\/~~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\_______/~~\\__/~~\\_\n/~~~~~~~~\\_/~~~~~~~~\\_/~~~~~~~~\\_/~~~~~~~\\__/~~\\__/~~\\_/~~~~~~~\\__/~~\\_______/~~~~~~\\___/~~~~~~~\\__\n/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~\\_______/~~\\__/~~\\_\n/~~\\__/~~\\_/~~\\__/~~\\_/~~\\__/~~\\_/~~~~~~~\\___/~~~~~~\\__/~~\\__/~~\\__/~~~~~~~\\_/~~~~~~~~\\_/~~\\__/~~\\_\n________________________________________________________________________/~~\\_______________________\n```\n{: .-figlet}\n\n### relief2\n\n```\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n/// \\\\/// \\\\/////// \\\\/// \\\\/// \\//////// \\\\/// \\\\/// \\//////// \\\\\\/////// \\\\///////// \\//////// \\\\\n/// \\\\/// \\/// \\\\/// \\//// //// \\/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\/// \\\\\\\\\\\\\\/// \\\\/// \\\n///////// \\///////// \\/// / /// \\//////// \\\\/// \\\\/// \\//////// \\\\/// \\\\\\\\\\\\\\/////// \\\\\\//////// \\\\\n/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\/// \\\\\\\\\\\\\\/// \\\\/// \\\n/// \\\\/// \\/// \\\\/// \\/// \\\\/// \\//////// \\\\\\/////// \\\\/// \\\\/// \\\\//////// \\///////// \\/// \\\\/// \\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/// \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n```\n{: .-figlet}\n\n### rev\n\n```\n=========================================================================\n=  ====  ===================  ===========================================\n=  ====  ===================  ===========================================\n=  ====  ===================  ===========================================\n=  ====  ===   ===  =  = ===  =====  =  ==  =   ====   ====   ===  =   ==\n=        ==  =  ==        ==    ===  =  ==    =  ==  =  ==  =  ==    =  =\n=  ====  =====  ==  =  =  ==  =  ==  =  ==  ========    ==     ==  ======\n=  ====  ===    ==  =  =  ==  =  ==  =  ==  ==========  ==  =====  ======\n=  ====  ==  =  ==  =  =  ==  =  ==  =  ==  =======  =  ==  =  ==  ======\n=  ====  ===    ==  =  =  ==    ====    ==  ========   ====   ===  ======\n=========================================================================\n```\n{: .-figlet}\n\n### roman\n\n```\nooooo   ooooo                              .o8                                                          \n`888'   `888'                             \"888                                                          \n 888     888   .oooo.   ooo. .oo.  .oo.    888oooo.  oooo  oooo  oooo d8b  .oooooooo  .ooooo.  oooo d8b \n 888ooooo888  `P  )88b  `888P\"Y88bP\"Y88b   d88' `88b `888  `888  `888\"\"8P 888' `88b  d88' `88b `888\"\"8P \n 888     888   .oP\"888   888   888   888   888   888  888   888   888     888   888  888ooo888  888     \n 888     888  d8(  888   888   888   888   888   888  888   888   888     `88bod8P'  888    .o  888     \no888o   o888o `Y888\"\"8o o888o o888o o888o  `Y8bod8P'  `V88V\"V8P' d888b    `8oooooo.  `Y8bod8P' d888b    \n                                                                          d\"     YD                     \n                                                                          \"Y88888P'                     \n```\n{: .-figlet}\n\n### rot13\n\n```\nUnzohetre\n```\n{: .-figlet}\n\n### rounded\n\n```\n _     _             _                                  \n(_)   (_)           | |                                 \n _______ _____ ____ | |__  _   _  ____ ____ _____  ____ \n|  ___  (____ |    \\|  _ \\| | | |/ ___) _  | ___ |/ ___)\n| |   | / ___ | | | | |_) ) |_| | |  ( (_| | ____| |    \n|_|   |_\\_____|_|_|_|____/|____/|_|   \\___ |_____)_|    \n                                     (_____|            \n```\n{: .-figlet}\n\n### rowancap\n\n```\n    dMP dMP .aMMMb  dMMMMMMMMb dMMMMb  dMP dMP dMMMMb  .aMMMMP dMMMMMP dMMMMb \n   dMP dMP dMP\"dMP dMP\"dMP\"dMPdMP\"dMP dMP dMP dMP.dMP dMP\"    dMP     dMP.dMP \n  dMMMMMP dMMMMMP dMP dMP dMPdMMMMK\" dMP dMP dMMMMK\" dMP MMP\"dMMMP   dMMMMK\"  \n dMP dMP dMP dMP dMP dMP dMPdMP.aMF dMP.aMP dMP\"AMF dMP.dMP dMP     dMP\"AMF   \ndMP dMP dMP dMP dMP dMP dMPdMMMMP\"  VMMMP\" dMP dMP  VMMMP\" dMMMMMP dMP dMP    \n```\n{: .-figlet}\n\n### rozzo\n\n```\n888 888                     888                                               \n888 888  ,\"Y88b 888 888 8e  888 88e  8888 8888 888,8,  e88 888  ,e e,  888,8, \n8888888 \"8\" 888 888 888 88b 888 888b 8888 8888 888 \"  d888 888 d88 88b 888 \"  \n888 888 ,ee 888 888 888 888 888 888P Y888 888P 888    Y888 888 888   , 888    \n888 888 \"88 888 888 888 888 888 88\"   \"88 88\"  888     \"88 888  \"YeeP\" 888    \n                                                        ,  88P                \n                                                       \"8\",P\"                 \n```\n{: .-figlet}\n\n### runic\n\n```\n|    | \n|\\   | \n| \\  | \n|  \\ | \n|   \\| \n|    | \n```\n{: .-figlet}\n\n### runyc\n\n```\n|    |                               \n|\\   |                               \n| \\  |                               \n|  \\ | |\\ |\\/| |\\ |\\  |\\ \\ / |\\/| |\\ \n|   \\| |\\ |/\\| |< | | |/  X  |  | |/ \n|    | |  |  | |/ | | |\\ / \\ |  | |\\ \n```\n{: .-figlet}\n\n### sblood\n\n```\n @@@  @@@  @@@@@@  @@@@@@@@@@  @@@@@@@  @@@  @@@ @@@@@@@   @@@@@@@  @@@@@@@@ @@@@@@@ \n @@!  @@@ @@!  @@@ @@! @@! @@! @@!  @@@ @@!  @@@ @@!  @@@ !@@       @@!      @@!  @@@\n @!@!@!@! @!@!@!@! @!! !!@ @!@ @!@!@!@  @!@  !@! @!@!!@!  !@! @!@!@ @!!!:!   @!@!!@! \n !!:  !!! !!:  !!! !!:     !!: !!:  !!! !!:  !!! !!: :!!  :!!   !!: !!:      !!: :!! \n  :   : :  :   : :  :      :   :: : ::   :.:: :   :   : :  :: :: :  : :: :::  :   : :\n```\n{: .-figlet}\n\n### script\n\n```\n ,                      _                               \n/|   |                 | |                              \n |___|  __,   _  _  _  | |          ,_    __,  _   ,_   \n |   |\\/  |  / |/ |/ | |/ \\_|   |  /  |  /  | |/  /  |  \n |   |/\\_/|_/  |  |  |_/\\_/  \\_/|_/   |_/\\_/|/|__/   |_/\n                                           /|           \n                                           \\|           \n```\n{: .-figlet}\n\n### serifcap\n\n```\n _  _   __   __  __  ___  _  _  ___   __  ___  ___  \n( )( ) (  ) (  \\/  )(  ,)( )( )(  ,) / _)(  _)(  ,) \n )__(  /__\\  )    (  ) ,\\ )()(  )  \\( (/\\ ) _) )  \\ \n(_)(_)(_)(_)(_/\\/\\_)(___/ \\__/ (_)\\_)\\__/(___)(_)\\_)\n```\n{: .-figlet}\n\n### shadow\n\n```\n |   |                 |                               \n |   |  _` | __ `__ \\  __ \\  |   |  __| _` |  _ \\  __| \n ___ | (   | |   |   | |   | |   | |   (   |  __/ |    \n_|  _|\\__,_|_|  _|  _|_.__/ \\__,_|_|  \\__, |\\___|_|    \n                                      |___/            \n```\n{: .-figlet}\n\n### short\n\n```\n|_|  ,_ |        _   \n| |(|||||)L||`(|(/_|`\n              _|     \n```\n{: .-figlet}\n\n### slant\n\n```\n    __  __                __                              \n   / / / /___ _____ ___  / /_  __  ___________ ____  _____\n  / /_/ / __ `/ __ `__ \\/ __ \\/ / / / ___/ __ `/ _ \\/ ___/\n / __  / /_/ / / / / / / /_/ / /_/ / /  / /_/ /  __/ /    \n/_/ /_/\\__,_/_/ /_/ /_/_.___/\\__,_/_/   \\__, /\\___/_/     \n                                       /____/             \n```\n{: .-figlet}\n\n### slide\n\n```\n##  ||            ##                            \n##  ||##|  ##H H| ##   ## H|## H|#HH| #H| ## H| \n##HH||  H| ### HH|##H| ## H|##H|## H|##HH|##H|  \n##  ||##H| ## H H|## H|## H|##   #HH|##   ##    \n##  ||##HH|##   H|##H|  #HH|##     H| #HH|##    \n                                ##H|            \n```\n{: .-figlet}\n\n### slscript\n\n```\n _    ,                                 \n' )  /              /                   \n /--/ __.  ______  /__. . __  _,  _  __ \n/  (_(_/|_/ / / <_/_)(_/_/ (_(_)_</_/ (_\n                              /|        \n                             |/         \n```\n{: .-figlet}\n\n### small\n\n```\n _  _            _                          \n| || |__ _ _ __ | |__ _  _ _ _ __ _ ___ _ _ \n| __ / _` | '  \\| '_ \\ || | '_/ _` / -_) '_|\n|_||_\\__,_|_|_|_|_.__/\\_,_|_| \\__, \\___|_|  \n                              |___/         \n```\n{: .-figlet}\n\n### smisome1\n\n```\n    ___       ___       ___       ___       ___       ___       ___       ___       ___   \n   /\\__\\     /\\  \\     /\\__\\     /\\  \\     /\\__\\     /\\  \\     /\\  \\     /\\  \\     /\\  \\  \n  /:/__/_   /::\\  \\   /::L_L_   /::\\  \\   /:/ _/_   /::\\  \\   /::\\  \\   /::\\  \\   /::\\  \\ \n /::\\/\\__\\ /::\\:\\__\\ /:/L:\\__\\ /::\\:\\__\\ /:/_/\\__\\ /::\\:\\__\\ /:/\\:\\__\\ /::\\:\\__\\ /::\\:\\__\\\n \\/\\::/  / \\/\\::/  / \\/_/:/  / \\:\\::/  / \\:\\/:/  / \\;:::/  / \\:\\:\\/__/ \\:\\:\\/  / \\;:::/  /\n   /:/  /    /:/  /    /:/  /   \\::/  /   \\::/  /   |:\\/__/   \\::/  /   \\:\\/  /   |:\\/__/ \n   \\/__/     \\/__/     \\/__/     \\/__/     \\/__/     \\|__|     \\/__/     \\/__/     \\|__|  \n```\n{: .-figlet}\n\n### smkeyboard\n\n```\n ____ ____ ____ ____ ____ ____ ____ ____ ____ \n||H |||a |||m |||b |||u |||r |||g |||e |||r ||\n||__|||__|||__|||__|||__|||__|||__|||__|||__||\n|/__\\|/__\\|/__\\|/__\\|/__\\|/__\\|/__\\|/__\\|/__\\|\n```\n{: .-figlet}\n\n### smscript\n\n```\n ,                                           \n/|  |  _,         |)         ,_   _,  _  ,_  \n |--| / |  /|/|/| |/\\_|  |  /  | / | |/ /  | \n |  |)\\/|_/ | | |_/\\/  \\/|_/   |/\\/|/|_/   |/\n                                  (|         \n```\n{: .-figlet}\n\n### smshadow\n\n```\n |  |             |                          \n __ |  _` |  ` \\   _ \\ |  |  _|_` |  -_)  _| \n_| _|\\__,_|_|_|_|_.__/\\_,_|_|\\__, |\\___|_|   \n                             ____/           \n```\n{: .-figlet}\n\n### smslant\n\n```\n   __ __           __                        \n  / // /__ ___ _  / /  __ _________ ____ ____\n / _  / _ `/  ' \\/ _ \\/ // / __/ _ `/ -_) __/\n/_//_/\\_,_/_/_/_/_.__/\\_,_/_/  \\_, /\\__/_/   \n                              /___/          \n```\n{: .-figlet}\n\n### smtengwar\n\n```\n\\  .',  _ _   _ _  ?    _____ ,'    \n/\\  |  |_)_) |_)_) | \\/ (_(_|  | \\/ \n             |       (,     |    (, \n```\n{: .-figlet}\n\n### speed\n\n```\n______  __                 ______                                    \n___  / / /_____ _______ ______  /_____  _______________ _____________\n__  /_/ /_  __ `/_  __ `__ \\_  __ \\  / / /_  ___/_  __ `/  _ \\_  ___/\n_  __  / / /_/ /_  / / / / /  /_/ / /_/ /_  /   _  /_/ //  __/  /    \n/_/ /_/  \\__,_/ /_/ /_/ /_//_.___/\\__,_/ /_/    _\\__, / \\___//_/     \n                                                /____/               \n```\n{: .-figlet}\n\n### stacey\n\n```\n__________________________________________________________________\n7  7  77  _  77        77  _  77  7  77  _  77     77     77  _  7\n|  !  ||  _  ||  _  _  ||   __||  |  ||    _||   __!|  ___!|    _|\n|     ||  7  ||  7  7  ||  _  ||  |  ||  _ \\ |  !  7|  __|_|  _ \\ \n|  7  ||  |  ||  |  |  ||  7  ||  !  ||  7  ||     ||     7|  7  |\n!__!__!!__!__!!__!__!__!!_____!!_____!!__!__!!_____!!_____!!__!__!\n```\n{: .-figlet}\n\n### stampatello\n\n```\n,-_/,.           .                       \n' |_|/ ,-. ,-,-. |-. . . ,-. ,-. ,-. ,-. \n /| |  ,-| | | | | | | | |   | | |-' |   \n `' `' `-^ ' ' ' ^-' `-^ '   `-| `-' '   \n                              ,|         \n                              `'         \n```\n{: .-figlet}\n\n### standard\n\n```\n _   _                 _                               \n| | | | __ _ _ __ ___ | |__  _   _ _ __ __ _  ___ _ __ \n| |_| |/ _` | '_ ` _ \\| '_ \\| | | | '__/ _` |/ _ \\ '__|\n|  _  | (_| | | | | | | |_) | |_| | | | (_| |  __/ |   \n|_| |_|\\__,_|_| |_| |_|_.__/ \\__,_|_|  \\__, |\\___|_|   \n                                       |___/           \n```\n{: .-figlet}\n\n### starwars\n\n```\n __    __       ___      .___  ___. .______    __    __  .______        _______  _______ .______      \n|  |  |  |     /   \\     |   \\/   | |   _  \\  |  |  |  | |   _  \\      /  _____||   ____||   _  \\     \n|  |__|  |    /  ^  \\    |  \\  /  | |  |_)  | |  |  |  | |  |_)  |    |  |  __  |  |__   |  |_)  |    \n|   __   |   /  /_\\  \\   |  |\\/|  | |   _  <  |  |  |  | |      /     |  | |_ | |   __|  |      /     \n|  |  |  |  /  _____  \\  |  |  |  | |  |_)  | |  `--'  | |  |\\  \\----.|  |__| | |  |____ |  |\\  \\----.\n|__|  |__| /__/     \\__\\ |__|  |__| |______/   \\______/  | _| `._____| \\______| |_______|| _| `._____|\n```\n{: .-figlet}\n\n### stellar\n\n```\n`..     `..                       `..                                               \n`..     `..                       `..                                               \n`..     `..   `..    `... `.. `.. `..      `..  `..`. `...   `..      `..    `. `...\n`...... `.. `..  `..  `..  `.  `..`.. `..  `..  `.. `..    `..  `.. `.   `..  `..   \n`..     `..`..   `..  `..  `.  `..`..   `..`..  `.. `..   `..   `..`..... `.. `..   \n`..     `..`..   `..  `..  `.  `..`..   `..`..  `.. `..    `..  `..`.         `..   \n`..     `..  `.. `...`...  `.  `..`.. `..    `..`..`...        `..   `....   `...   \n                                                            `..                     \n```\n{: .-figlet}\n\n### stop\n\n```\n _     _             _                                  \n| |   | |           | |                                 \n| |__ | | ____ ____ | | _  _   _  ____ ____  ____  ____ \n|  __)| |/ _  |    \\| || \\| | | |/ ___) _  |/ _  )/ ___)\n| |   | ( ( | | | | | |_) ) |_| | |  ( ( | ( (/ /| |    \n|_|   |_|\\_||_|_|_|_|____/ \\____|_|   \\_|| |\\____)_|    \n                                     (_____|            \n```\n{: .-figlet}\n\n### straight\n\n```\n|__| _  _ |_     _ _  _ _ \n|  |(_|||||_)|_|| (_)(-|  \n                  _/      \n```\n{: .-figlet}\n\n### tanja\n\n```\nH)    hh                    b)                                              \nH)    hh                    b)                                              \nH)hhhhhh a)AAAA   m)MM MMM  b)BBBB  u)   UU  r)RRR   g)GGG  e)EEEEE  r)RRR  \nH)    hh  a)AAA  m)  MM  MM b)   BB u)   UU r)   RR g)   GG e)EEEE  r)   RR \nH)    hh a)   A  m)  MM  MM b)   BB u)   UU r)      g)   GG e)      r)      \nH)    hh  a)AAAA m)      MM b)BBBB   u)UUU  r)       g)GGGG  e)EEEE r)      \n                                                         GG                 \n                                                    g)GGGG                  \n```\n{: .-figlet}\n\n### tengwar\n\n```\n`Yb.            db                                    dP\"Yb.                                .dP'            \n  `Yb        db    db                                 `b   'Yb                            dP'               \n    Yb                                                                    \"Ybaaaaaaaaad8'                   \n     Yb        'Yb    `Yb d88b d88b   `Yb d88b d88b      'Yb   `Yb    dP'  .dP'  dP'  88   'Yb   `Yb    dP' \n    dPYb        88     88P   88   8b   88P   8Y   8b      88     Yb  dP    88   88    88    88     Yb  dP   \n  ,dP  Yb       88     88    8P   88   88    8P   88      88      YbdP     Y8   Y8   .88    88      YbdP    \n.dP'    `Yb.   .8P     88  .dP  .dP    88  .dP' .dP'     .8P      .8P      `Y88P`Y88P'88   .8P      .8P     \n                      .888888888888b.  888888888888b.           dP'  b                88          dP'  b    \n                                       88                       Y.  ,P                88          Y.  ,P    \n                                      .8P                        `\"\"'                 Y8.          `\"\"'     \n```\n{: .-figlet}\n\n### term\n\n```\nHamburger\n```\n{: .-figlet}\n\n### thick\n\n```\n8   8                8                               \n8www8 .d88 8d8b.d8b. 88b. 8   8 8d8b .d88 .d88b 8d8b \n8   8 8  8 8P Y8P Y8 8  8 8b d8 8P   8  8 8.dP' 8P   \n8   8 `Y88 8   8   8 88P' `Y8P8 8    `Y88 `Y88P 8    \n                                     wwdP            \n```\n{: .-figlet}\n\n### thin\n\n```\n|   |          |                             \n|---|,---.,-.-.|---..   .,---.,---.,---.,---.\n|   |,---|| | ||   ||   ||    |   ||---'|    \n`   '`---^` ' '`---'`---'`    `---|`---'`    \n                              `---'          \n```\n{: .-figlet}\n\n### threepoint\n\n```\n|_| _  _ _ |_     _ _  _  _\n| |(_|| | ||_)|_|| (_|(/_| \n                    _|     \n```\n{: .-figlet}\n\n### ticks\n\n```\n_/\\/\\____/\\/\\______________________________/\\/\\___________________________________________________________________\n_/\\/\\____/\\/\\__/\\/\\/\\______/\\/\\/\\__/\\/\\____/\\/\\________/\\/\\__/\\/\\__/\\/\\__/\\/\\____/\\/\\/\\/\\____/\\/\\/\\____/\\/\\__/\\/\\_\n_/\\/\\/\\/\\/\\/\\______/\\/\\____/\\/\\/\\/\\/\\/\\/\\__/\\/\\/\\/\\____/\\/\\__/\\/\\__/\\/\\/\\/\\____/\\/\\__/\\/\\__/\\/\\/\\/\\/\\__/\\/\\/\\/\\___\n_/\\/\\____/\\/\\__/\\/\\/\\/\\____/\\/\\__/\\__/\\/\\__/\\/\\__/\\/\\__/\\/\\__/\\/\\__/\\/\\__________/\\/\\/\\/\\__/\\/\\________/\\/\\_______\n_/\\/\\____/\\/\\__/\\/\\/\\/\\/\\__/\\/\\______/\\/\\__/\\/\\/\\/\\______/\\/\\/\\/\\__/\\/\\______________/\\/\\____/\\/\\/\\/\\__/\\/\\_______\n_______________________________________________________________________________/\\/\\/\\/\\___________________________\n```\n{: .-figlet}\n\n### ticksslant\n\n```\n     _/\\/\\____/\\/\\______________________________/\\/\\___________________________________________________________________\n    _/\\/\\____/\\/\\__/\\/\\/\\______/\\/\\/\\__/\\/\\____/\\/\\________/\\/\\__/\\/\\__/\\/\\__/\\/\\____/\\/\\/\\/\\____/\\/\\/\\____/\\/\\__/\\/\\_ \n   _/\\/\\/\\/\\/\\/\\______/\\/\\____/\\/\\/\\/\\/\\/\\/\\__/\\/\\/\\/\\____/\\/\\__/\\/\\__/\\/\\/\\/\\____/\\/\\__/\\/\\__/\\/\\/\\/\\/\\__/\\/\\/\\/\\___  \n  _/\\/\\____/\\/\\__/\\/\\/\\/\\____/\\/\\__/\\__/\\/\\__/\\/\\__/\\/\\__/\\/\\__/\\/\\__/\\/\\__________/\\/\\/\\/\\__/\\/\\________/\\/\\_______   \n _/\\/\\____/\\/\\__/\\/\\/\\/\\/\\__/\\/\\______/\\/\\__/\\/\\/\\/\\______/\\/\\/\\/\\__/\\/\\______________/\\/\\____/\\/\\/\\/\\__/\\/\\_______    \n_______________________________________________________________________________/\\/\\/\\/\\___________________________     \n```\n{: .-figlet}\n\n### tinker-toy\n\n```\no  o           o                          \n|  |           |                          \nO--O  oo o-O-o O-o  o  o o-o o--o o-o o-o \n|  | | | | | | |  | |  | |   |  | |-' |   \no  o o-o-o o o o-o  o--o o   o--O o-o o   \n                                |         \n                             o--o         \n```\n{: .-figlet}\n\n### tombstone\n\n```\n _,_  _, _, _ __, _,_ __,  _, __, __,\n |_| /_\\ |\\/| |_) | | |_) / _ |_  |_)\n | | | | |  | |_) | | | \\ \\ / |   | \\\n ~ ~ ~ ~ ~  ~ ~   `~' ~ ~  ~  ~~~ ~ ~\n```\n{: .-figlet}\n\n### trek\n\n```\n     dBP dBP dBBBBBb     dBBBBBBb dBBBBb   dBP dBP dBBBBBb    dBBBBb  dBBBP dBBBBBb\n                  BB          dBP    dBP               dBP                      dBP\n   dBBBBBP    dBP BB   dBPdBPdBP dBBBK'  dBP dBP   dBBBBK   dBBBB   dBBP    dBBBBK \n  dBP dBP    dBP  BB  dBPdBPdBP dB' db  dBP_dBP   dBP  BB  dB' BB  dBP     dBP  BB \n dBP dBP    dBBBBBBB dBPdBPdBP dBBBBP' dBBBBBP   dBP  dB' dBBBBBB dBBBBP  dBP  dB' \n```\n{: .-figlet}\n\n### tsalagi\n\n```\n __      __   -|-       __           __     ___   ___     __   \n/  '    |  \\   |       `  \\  ,  |~, /  '     |_-_  |     /  '  \n\\_      |   \\  |        _  |@|  |  | ,_   `\\/\\     |_,  | ,_   \n/  _    |   /  | _   |  |  | |  /  | ' |   |  |    | '  | ' |  \n\\__,    |__/    _|    \\_|_/   \\/    \\__/    \\/    _|_    \\__/  \n```\n{: .-figlet}\n\n### twopoint\n\n```\n|_| _ ._ _ |_    ._(~| _._\n| |(_|| | ||_)|_||  _|}_| \n```\n{: .-figlet}\n\n### univers\n\n```\n88        88                               88                                                                    \n88        88                               88                                                                    \n88        88                               88                                                                    \n88aaaaaaaa88 ,adPPYYba, 88,dPYba,,adPYba,  88,dPPYba,  88       88 8b,dPPYba,  ,adPPYb,d8  ,adPPYba, 8b,dPPYba,  \n88\"\"\"\"\"\"\"\"88 \"\"     `Y8 88P'   \"88\"    \"8a 88P'    \"8a 88       88 88P'   \"Y8 a8\"    `Y88 a8P_____88 88P'   \"Y8  \n88        88 ,adPPPPP88 88      88      88 88       d8 88       88 88         8b       88 8PP\"\"\"\"\"\"\" 88          \n88        88 88,    ,88 88      88      88 88b,   ,a8\" \"8a,   ,a88 88         \"8a,   ,d88 \"8b,   ,aa 88          \n88        88 `\"8bbdP\"Y8 88      88      88 8Y\"Ybbd8\"'   `\"YbbdP'Y8 88          `\"YbbdP\"Y8  `\"Ybbd8\"' 88          \n                                                                               aa,    ,88                        \n                                                                                \"Y8bbdP\"                         \n```\n{: .-figlet}\n\n### usaflag\n\n```\n :::  === :::====  :::=======  :::====  :::  === :::====  :::=====  :::===== :::==== \n :::  === :::  === ::: === === :::  === :::  === :::  === :::       :::      :::  ===\n ======== ======== === === === =======  ===  === =======  === ===== ======   ======= \n ===  === ===  === ===     === ===  === ===  === === ===  ===   === ===      === === \n ===  === ===  === ===     === =======   ======  ===  ===  =======  ======== ===  ===\n```\n{: .-figlet}\n\n### weird\n\n```\n /  |           /                            \n(___| ___  _ _ (___       ___  ___  ___  ___ \n|   )|   )| | )|   )|   )|   )|   )|___)|   )\n|  / |__/||  / |__/ |__/ |    |__/ |__  |    \n                              __/            \n```\n{: .-figlet}\n\n### whimsy\n\n```\n d8b                               d8b                                                  \n ?88                               ?88                                                  \n  88b                               88b                                                 \n  888888b  d888b8b    88bd8b,d88b   888888b ?88   d8P  88bd88b d888b8b   d8888b  88bd88b\n  88P `?8bd8P' ?88    88P'`?8P'?8b  88P `?8bd88   88   88P'  `d8P' ?88  d8b_,dP  88P'  `\n d88   88P88b  ,88b  d88  d88  88P d88,  d88?8(  d88  d88     88b  ,88b 88b     d88     \nd88'   88b`?88P'`88bd88' d88'  88bd88'`?88P'`?88P'?8bd88'     `?88P'`88b`?888P'd88'     \n                                                                     )88                \n                                                                    ,88P                \n                                                                `?8888P                 \n```\n{: .-figlet}\n\n\n## Toilet fonts\n\n### ascii12\n\n```\n mm    mm                      mm                                                         \n ##    ##                      ##                                                         \n ##    ##   m#####m  ####m##m  ##m###m   ##    ##   ##m####   m###m##   m####m    ##m#### \n ########   \" mmm##  ## ## ##  ##\"  \"##  ##    ##   ##\"      ##\"  \"##  ##mmmm##   ##\"     \n ##    ##  m##\"\"\"##  ## ## ##  ##    ##  ##    ##   ##       ##    ##  ##\"\"\"\"\"\"   ##      \n ##    ##  ##mmm###  ## ## ##  ###mm##\"  ##mmm###   ##       \"##mm###  \"##mmmm#   ##      \n \"\"    \"\"   \"\"\"\" \"\"  \"\" \"\" \"\"  \"\" \"\"\"     \"\"\"\" \"\"   \"\"        m\"\"\" ##    \"\"\"\"\"    \"\"      \n                                                              \"####\"\"                     \n```\n{: .-figlet}\n\n### ascii9\n\n```\n m    m               #                                        \n #    #  mmm   mmmmm  #mmm   m   m   m mm   mmmm   mmm    m mm \n #mmmm# \"   #  # # #  #\" \"#  #   #   #\"  \" #\" \"#  #\"  #   #\"  \"\n #    # m\"\"\"#  # # #  #   #  #   #   #     #   #  #\"\"\"\"   #    \n #    # \"mm\"#  # # #  ##m#\"  \"mm\"#   #     \"#m\"#  \"#mm\"   #    \n                                            m  #               \n                                             \"\"                \n```\n{: .-figlet}\n\n### bigascii12\n\n```\n ##    ##                      ##                                                         \n ##    ##                      ##                                                         \n ##    ##                      ##                                                         \n ##    ##   :####    ## #:##:  ##.###:   ##    ##   ##.####   :###:##   .####:    ##.#### \n ##    ##   ######   ########  #######:  ##    ##   #######  .#######  .######:   ####### \n ########   #:  :##  ##.##.##  ###  ###  ##    ##   ###.     ###  ###  ##:  :##   ###.    \n ########    :#####  ## ## ##  ##.  .##  ##    ##   ##       ##.  .##  ########   ##      \n ##    ##  .#######  ## ## ##  ##    ##  ##    ##   ##       ##    ##  ########   ##      \n ##    ##  ## .  ##  ## ## ##  ##.  .##  ##    ##   ##       ##.  .##  ##         ##      \n ##    ##  ##:  ###  ## ## ##  ###  ###  ##:  ###   ##       ###  ###  ###.  :#   ##      \n ##    ##  ########  ## ## ##  #######:   #######   ##       .#######  .#######   ##      \n ##    ##    ###.##  ## ## ##  ##.###:     ###.##   ##        :###:##   .#####:   ##      \n                                                              #.  :##                     \n                                                              ######                      \n                                                              :####:                      \n```\n{: .-figlet}\n\n### bigascii9\n\n```\n                      #                                        \n #    #               #                                        \n #    #               #                                        \n #    # .###.  ## #   # ##   #   #   #:##:  ## #   ###    #:##:\n #    # #: :#  #:#:#  #   #  #   #   ##  # #   #     :#   ##  #\n ######     #  # # #  #   #  #   #   #     #   #  #   #   #    \n #    # :####  # # #  #   #  #   #   #     #   #  #####   #    \n #    # #:  #  # # #  #   #  #   #   #     #   #  #       #    \n #    # #.  #  # # #  #   #  #:  #   #     #   #      #   #    \n #    # :##:#  # # #  # ##   :##:#   #      ##:#   ###:   #    \n                                               #               \n                                              :#               \n                                            :##.               \n```\n{: .-figlet}\n\n### bigmono12\n\n```\n ██    ██                      ██                                                         \n ██    ██                      ██                                                         \n ██    ██                      ██                                                         \n ██    ██   ▒████▓   ██▓█▒██▒  ██░███▒   ██    ██   ██░████   ▒███▒██   ░████▒    ██░████ \n ██    ██   ██████▓  ████████  ███████▒  ██    ██   ███████  ░███████  ░██████▒   ███████ \n ████████   █▒  ▒██  ██░██░██  ███  ███  ██    ██   ███░     ███  ███  ██▒  ▒██   ███░    \n ████████    ▒█████  ██ ██ ██  ██░  ░██  ██    ██   ██       ██░  ░██  ████████   ██      \n ██    ██  ░███████  ██ ██ ██  ██    ██  ██    ██   ██       ██    ██  ████████   ██      \n ██    ██  ██▓░  ██  ██ ██ ██  ██░  ░██  ██    ██   ██       ██░  ░██  ██         ██      \n ██    ██  ██▒  ███  ██ ██ ██  ███  ███  ██▒  ███   ██       ███  ███  ███░  ▒█   ██      \n ██    ██  ████████  ██ ██ ██  ███████▒  ▓███████   ██       ░███████  ░███████   ██      \n ██    ██   ▓███░██  ██ ██ ██  ██░███▒    ▓███░██   ██        ▒███▒██   ░█████▒   ██      \n                                                              █░  ▒██                     \n                                                              ██████▓                     \n                                                              ▒████▒                      \n```\n{: .-figlet}\n\n### bigmono9\n\n```\n                      █                                        \n █    █               █                                        \n █    █               █                                        \n █    █ ░███░  ██▓█▓  █▓██   █   █   █▒██▒  ██▓█   ███    █▒██▒\n █    █ █▒ ▒█  █▒█▒█  █▓ ▓█  █   █   ██  █ █▓ ▓█  ▓▓ ▒█   ██  █\n ██████     █  █ █ █  █   █  █   █   █     █   █  █   █   █    \n █    █ ▒████  █ █ █  █   █  █   █   █     █   █  █████   █    \n █    █ █▒  █  █ █ █  █   █  █   █   █     █   █  █       █    \n █    █ █░ ▓█  █ █ █  █▓ ▓█  █▒ ▓█   █     █▓ ▓█  ▓▓  █   █    \n █    █ ▒██▒█  █ █ █  █▓██   ▒██▒█   █      ██▒█   ███▒   █    \n                                               █               \n                                            ▓ ▒█               \n                                            ▒██░               \n```\n{: .-figlet}\n\n### circle\n\n```\nⒽⓐⓜⓑⓤⓡⓖⓔⓡ\n```\n{: .-figlet}\n\n### emboss\n\n```\n┃ ┃┏━┃┏┏ ┏━ ┃ ┃┏━┃┏━┛┏━┛┏━┃\n┏━┃┏━┃┃┃┃┏━┃┃ ┃┏┏┛┃ ┃┏━┛┏┏┛\n┛ ┛┛ ┛┛┛┛━━ ━━┛┛ ┛━━┛━━┛┛ ┛\n```\n{: .-figlet}\n\n### emboss2\n\n```\n║ ║╔═║╔╔ ╔═ ║ ║╔═║╔═╝╔═╝╔═║\n╔═║╔═║║║║╔═║║ ║╔╔╝║ ║╔═╝╔╔╝\n╝ ╝╝ ╝╝╝╝══ ══╝╝ ╝══╝══╝╝ ╝\n```\n{: .-figlet}\n\n### future\n\n```\n╻ ╻┏━┓┏┳┓┏┓ ╻ ╻┏━┓┏━╸┏━╸┏━┓\n┣━┫┣━┫┃┃┃┣┻┓┃ ┃┣┳┛┃╺┓┣╸ ┣┳┛\n╹ ╹╹ ╹╹ ╹┗━┛┗━┛╹┗╸┗━┛┗━╸╹┗╸\n```\n{: .-figlet}\n\n### letter\n\n```\nH   H   A   M   M BBBB  U   U RRRR   GGG  EEEEE RRRR  \nH   H  A A  MM MM B   B U   U R   R G     E     R   R \nHHHHH AAAAA M M M BBBB  U   U RRRR  G GG  EEEE  RRRR  \nH   H A   A M   M B   B U   U R  R  G   G E     R  R  \nH   H A   A M   M BBBB   UUU  R   R  GGG  EEEEE R   R \n```\n{: .-figlet}\n\n### mono12\n\n```\n ▄▄    ▄▄                      ▄▄                                                         \n ██    ██                      ██                                                         \n ██    ██   ▄█████▄  ████▄██▄  ██▄███▄   ██    ██   ██▄████   ▄███▄██   ▄████▄    ██▄████ \n ████████   ▀ ▄▄▄██  ██ ██ ██  ██▀  ▀██  ██    ██   ██▀      ██▀  ▀██  ██▄▄▄▄██   ██▀     \n ██    ██  ▄██▀▀▀██  ██ ██ ██  ██    ██  ██    ██   ██       ██    ██  ██▀▀▀▀▀▀   ██      \n ██    ██  ██▄▄▄███  ██ ██ ██  ███▄▄██▀  ██▄▄▄███   ██       ▀██▄▄███  ▀██▄▄▄▄█   ██      \n ▀▀    ▀▀   ▀▀▀▀ ▀▀  ▀▀ ▀▀ ▀▀  ▀▀ ▀▀▀     ▀▀▀▀ ▀▀   ▀▀        ▄▀▀▀ ██    ▀▀▀▀▀    ▀▀      \n                                                              ▀████▀▀                     \n```\n{: .-figlet}\n\n### mono9\n\n```\n ▄    ▄               █                                        \n █    █  ▄▄▄   ▄▄▄▄▄  █▄▄▄   ▄   ▄   ▄ ▄▄   ▄▄▄▄   ▄▄▄    ▄ ▄▄ \n █▄▄▄▄█ ▀   █  █ █ █  █▀ ▀█  █   █   █▀  ▀ █▀ ▀█  █▀  █   █▀  ▀\n █    █ ▄▀▀▀█  █ █ █  █   █  █   █   █     █   █  █▀▀▀▀   █    \n █    █ ▀▄▄▀█  █ █ █  ██▄█▀  ▀▄▄▀█   █     ▀█▄▀█  ▀█▄▄▀   █    \n                                            ▄  █               \n                                             ▀▀                \n```\n{: .-figlet}\n\n### pagga\n\n```\n░█░█░█▀█░█▄█░█▀▄░█░█░█▀▄░█▀▀░█▀▀░█▀▄\n░█▀█░█▀█░█░█░█▀▄░█░█░█▀▄░█░█░█▀▀░█▀▄\n░▀░▀░▀░▀░▀░▀░▀▀░░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀░▀\n```\n{: .-figlet}\n\n### smascii12\n\n```\n., .,          .,                            \n][ ][          ][                            \n][ ][ dWW,]WbW,]bWb ][ ][ WdW[ dWd[ dWb  WdW[\n]WWW[ `md[][W][]P T[][ ][ W`  ]P T[]bmd[ W`  \n][ ][.W\"T[][W][][ ][][ ][ W   ][ ][]P\"\"` W   \n][ ][]bmW[][W][]WmW`]bmW[ W   'WmW['Wmm[ W   \n'` '` \"\"'`'`\"'`'`\"`  \"\"'` \"    /\"][ '\"\"  \"   \n                               TWP`          \n```\n{: .-figlet}\n\n### smascii9\n\n```\n.  ,        ]                       \n]  [ m, .mm ]m, . .  ,m  mm  m,  ,m \n]mm[' ] ]]] ]`T ] ]  P `]`T ]`]  P `\n]  [.\"T ]]] ] ] ] ]  [  ] ] ]\"\"  [  \n]  ['mT ]]] ]bP 'mT  [  'bT 'b/  [  \n                         ,]         \n                         '`         \n```\n{: .-figlet}\n\n### smblock\n\n```\n▌ ▌       ▌                 \n▙▄▌▝▀▖▛▚▀▖▛▀▖▌ ▌▙▀▖▞▀▌▞▀▖▙▀▖\n▌ ▌▞▀▌▌▐ ▌▌ ▌▌ ▌▌  ▚▄▌▛▀ ▌  \n▘ ▘▝▀▘▘▝ ▘▀▀ ▝▀▘▘  ▗▄▘▝▀▘▘  \n```\n{: .-figlet}\n\n### smbraille\n\n```\n ⣇⣸ ⢀⣀ ⣀⣀  ⣇⡀ ⡀⢀ ⡀⣀ ⢀⡀ ⢀⡀ ⡀⣀\n ⠇⠸ ⠣⠼ ⠇⠇⠇ ⠧⠜ ⠣⠼ ⠏  ⣑⡺ ⠣⠭ ⠏ \n```\n{: .-figlet}\n\n### smmono12\n\n```\n▗▖ ▗▖          ▗▖                            \n▐▌ ▐▌          ▐▌                            \n▐▌ ▐▌ ▟██▖▐█▙█▖▐▙█▙ ▐▌ ▐▌ █▟█▌ ▟█▟▌ ▟█▙  █▟█▌\n▐███▌ ▘▄▟▌▐▌█▐▌▐▛ ▜▌▐▌ ▐▌ █▘  ▐▛ ▜▌▐▙▄▟▌ █▘  \n▐▌ ▐▌▗█▀▜▌▐▌█▐▌▐▌ ▐▌▐▌ ▐▌ █   ▐▌ ▐▌▐▛▀▀▘ █   \n▐▌ ▐▌▐▙▄█▌▐▌█▐▌▐█▄█▘▐▙▄█▌ █   ▝█▄█▌▝█▄▄▌ █   \n▝▘ ▝▘ ▀▀▝▘▝▘▀▝▘▝▘▀▘  ▀▀▝▘ ▀    ▞▀▐▌ ▝▀▀  ▀   \n                               ▜█▛▘          \n```\n{: .-figlet}\n\n### smmono9\n\n```\n▗  ▖        ▐                       \n▐  ▌ ▄▖ ▗▄▄ ▐▄▖ ▗ ▗  ▖▄  ▄▄  ▄▖  ▖▄ \n▐▄▄▌▝ ▐ ▐▐▐ ▐▘▜ ▐ ▐  ▛ ▘▐▘▜ ▐▘▐  ▛ ▘\n▐  ▌▗▀▜ ▐▐▐ ▐ ▐ ▐ ▐  ▌  ▐ ▐ ▐▀▀  ▌  \n▐  ▌▝▄▜ ▐▐▐ ▐▙▛ ▝▄▜  ▌  ▝▙▜ ▝▙▞  ▌  \n                         ▖▐         \n                         ▝▘         \n```\n{: .-figlet}\n\n### wideterm\n\n```\nＨａｍｂｕｒｇｅｒ\n```\n{: .-figlet}\n\n"
  },
  {
    "path": "find.md",
    "content": "---\ntitle: Find\ncategory: CLI\nupdated: 2019-11-17\n---\n\n### Usage\n{: .-prime}\n\n```bash\nfind <path> <conditions> <actions>\n```\n\n### Conditions\n\n```bash\n-name \"*.c\"\n```\n\n```bash\n-user jonathan\n-nouser\n```\n\n```bash\n-type f            # File\n-type d            # Directory\n-type l            # Symlink\n```\n\n```bash\n-depth 2           # At least 3 levels deep\n-regex PATTERN\n```\n\n```bash\n-size 8            # Exactly 8 512-bit blocks \n-size -128c        # Smaller than 128 bytes\n-size 1440k        # Exactly 1440KiB\n-size +10M         # Larger than 10MiB\n-size +2G          # Larger than 2GiB\n```\n\n```bash\n-newer   file.txt\n-newerm  file.txt        # modified newer than file.txt\n-newerX  file.txt        # [c]hange, [m]odified, [B]create\n-newerXt \"1 hour ago\"    # [t]imestamp\n```\n\n### Access time conditions\n\n```bash\n-atime 0           # Last accessed between now and 24 hours ago\n-atime +0          # Accessed more than 24 hours ago\n-atime 1           # Accessed between 24 and 48 hours ago\n-atime +1          # Accessed more than 48 hours ago\n-atime -1          # Accessed less than 24 hours ago (same a 0)\n-ctime -6h30m      # File status changed within the last 6 hours and 30 minutes\n-mtime +1w         # Last modified more than 1 week ago\n```\n\nThese conditions only work in MacOS and BSD-like systems (no GNU/Linux support).\n\n### Condition flow\n\n```bash\n\\! -name \"*.c\" # NOT named \"*.c\"\n\\( x -or y \\)\n```\n\n### Actions\n\n```bash\n-exec rm {} \\;\n-print\n-delete\n```\n\n### Examples\n\n```bash\nfind . -name '*.jpg'\nfind . -name '*.jpg' -exec rm {} \\;\n```\n\n```bash\nfind . -newerBt \"24 hours ago\"\n```\n\n```bash\nfind . -type f -mtime +29 # find files modified more than 30 days ago\nfind . -type f -newermt 2016-08-07 \\! -newermt 2016-08-08 # find in date range\n```\n"
  },
  {
    "path": "firebase.md",
    "content": "---\ntitle: Firebase\nprism_languages: [coffeescript]\ntags: [WIP]\n---\n\n### Authenticating\n\n```js\nFB = new Firebase('https://xxx.firebase.io')\nFB.auth(TOKEN, (err, result) => { ···})\n```\n\n```js\nFB.authAnonymously(···)\nFB.authWithPassword(···)\nFB.authWithOAuthPopup(···)\nFB.authWithOAuthToken(···)\n```\n\n### Using\n\n```js\nUsers = FB.child('users')\n```\n\n```js\n// Create\nuser = Users.push(first: \"Frank\", last: \"Sinatra\")\n```\n\n```js\n// Retrieve\nuser = Users.child('alan')  // gets `users/alan`\n```\n\n```js\n// Update\nuser.set(first: \"Miles\", last: \"Davis\")\nuser.update(first: \"Miles\")\nuser.setWithPriority({ ··· }, priority)\n```\n\n```js\n// Destroy\nuser.remove()\n```\n\n```js\n// Getting\nuser.name()  // primary id\n\nuser.once('value', (snap) => {\n  snap.name()  // primary id\n  snap.val()   // value\n}, (err) => {\n  ···\n})\n```\n\n```js\n// traversal\nuser.parent()\n```\n\n### Querying\n\n```coffeescript\nUsers = FB.child('users')\nUsers\n  .startAt(1000)\n  .limit(50)\n  .equalTo(priority, [name])\n  .on 'child_added', (snap) -> ···\n```\n### Lists\n\n```coffeescript\nPosts = FB.child('posts')\npost = Posts.push({ title: \"How to do things\", author: \"alan\" })\n```\n\n## References\n{: .-one-column}\n\n* <https://www.firebase.com/docs/web/api/>\n* <https://www.firebase.com/docs/web/recipes.html>\n"
  },
  {
    "path": "firefox.md",
    "content": "---\ntitle: Firefox\ntags: [Archived]\narchived: This sheet has not been updated with newer Firefox releases.\n---\n\n### [Firefox 31](https://www.mozilla.org/en-US/firefox/31.0/releasenotes/) (July 2014)\n\n * CSS: variables\n\n### [Firefox 30](https://developer.mozilla.org/en-US/Firefox/Releases/30) (June 2014)\n\n * CSS: Allow `line-height` in `<input type='button'>`\n * JS: `Console.count()`\n * JS: ES6 array and generator comprehensions\n\n### Firefox 29 (April 2014)\n\n * New UI\n * CSS: Unprefixed `box-shadow`\n\n### Firefox 18 (Jan 2013)\n\n * Faster JS compiler (IonMonkey)\n * Mac retina support\n * JS: `window.devicePixelRatio`\n * JS: unprefixed `ontouchstart`\n * HTML: `<input type='number'>`\n * HTML: `<input type='color'>`\n\n### Firefox 17 (Nov 2012)\n\n * No more support for Mac OSX 10.5 and below\n * SVG `FillPaint` and `StrokePaint`\n * HTML `<iframe sandbox=...>` ([docs][iframe-sandbox])\n * Official support for Windows 8 ([link][17reqs])\n\n[iframe-sandbox]: https://developer.mozilla.org/en-US/docs/HTML/Element/iframe#attr-sandbox\n[17reqs]: http://www.mozilla.org/en-US/firefox/17.0/system-requirements/\n\n### Firefox 16 (Oct 2012)\n\n * Web app support ([docs][webapp])\n * Unprefixed CSS animations, transitions, transforms, gradients\n\n[webapp]: https://developer.mozilla.org/en-US/docs/Apps/Getting_Started\n\n### Firefox 15 (Aug 2012)\n\n * Background updates\n * SPDY v3\n * Opus audio codec\n * HTML `<audio played>` (and `<video>`)\n * HTML `<source media=...>`\n\n### Firefox 14 (Jul 2012)\n\n * Full screen support for OSX Lion\n * JS pointer lock API ([docs][lock])\n * JS display sleep API ([docs][sleep])\n\n[lock]: https://developer.mozilla.org/en-US/docs/API/Pointer_Lock_API\n[sleep]: https://bugzilla.mozilla.org/show_bug.cgi?id=697132\n\n### Firefox 13 (Jun 2012)\n\n * Smooth scrolling by default\n * SPDY on by default\n * CSS `column-fill` ([docs][cf])\n * ECMA 6 `Map` and `Set`\n * CSS `background-position` extended syntax\n * CSS `:invalid`\n * CSS turn unit (`rotate(0.5turn)`)\n\n\n[cf]: https://developer.mozilla.org/en/CSS/column-fill\n\n### Firefox 12 (Apr 2012)\n\n * CSS `text-align-last` ([docs][tal])\n\n[tal]: https://developer.mozilla.org/en/CSS/text-align-last\n\n### Firefox 11 (Mar 2012)\n\n * `element.outerHTML` ([docs][outer])\n * Dev tools: Style editor, 3D page inspector ([docs][tools])\n * Unprefixed web sockets\n * CSS `text-size-adjust` ([docs][tsa])\n\n[outer]: https://developer.mozilla.org/en-US/docs/DOM/element.outerHTML\n[tools]: https://hacks.mozilla.org/2011/12/new-developer-tools-in-firefox-11-aurora/\n[tsa]: https://developer.mozilla.org/en-US/docs/CSS/text-size-adjust\n\n### Firefox 10 (Jan 2012)\n\n * CSS 3D transforms\n * HTML `<bdi>` element\n * JS fullscreen API ([docs][fs])\n * IndexedDB APIs\n * Dev tools: CSS Style inspector\n\n[fs]: https://wiki.mozilla.org/Platform/Features/Full_Screen_APIs\n\n### Firefox 9 (Dec 2011)\n\n * Two-finger swipe in Mac OSX Lion\n * CSS `font-stretch`\n * CSS improved `text-overflow`\n * JS `navigator.doNotTrack`\n\n### Firefox 8 (Nov 2011)\n\n### Firefox 7 (Sep 2011)\n\n  * CSS `text-overflow: ellipsis`\n  * Hidden `http://` prefix in address bar\n\n### Firefox 6 (Aug 2011)\n\n  * JS `window.matchMedia`\n  * Websockets (!)\n  * JS EvetnSource / server-sent events\n\n### Firefox 5 (Jun 2011)\n\n  * CSS animations\n  * Background tab `setTimeout` and `setInterval` clamped to 1000ms\n\n### Firefox 4 (Mar 2011)\n\n  * Do Not Track (DNT) header\n  * New JS endinge (JagerMonkey)\n  * Hardware-accelerated rendering\n  * WebM video\n  * OpenType ligatures/kerning/font variants\n  * CSS transitions partial support\n  * JS audio data API\n  * JS `mozRequestAnimationFrame`\n  * HTML5 forms API\n  * `<video buffered>`\n  * HTML5 history API\n  * New HTML5 parser\n  * ...\n\n### Firefox 3.6 (Jan 2010)\n\n  * CSS gradients\n  * CSS pointer events\n  * HTML drag & drop API\n  * HTML `<script async>`\n\n### Reference\n\n * [Firefox releases](https://www.mozilla.org/en-US/firefox/releases/)\n"
  },
  {
    "path": "fish-shell.md",
    "content": "---\ntitle: Fish shell\ncategory: CLI\nprism_languages: [fish]\nupdated: 2018-01-31\nweight: -1\n---\n\n### Keys\n\n| Shortcut            | Description                           |\n| ---                 | ---                                   |\n| `^A ←`/`^E →`       | Move to the line beginning/end        |\n| `Alt ←`/`Alt →`     | Jump to the previous/next word        |\n| `↑`/`↓`             | Switch to the previous/next command   |\n| `Alt ↑`/`Alt ↓`     | Switch to the previous/next arguments |\n| ---                 | ---                                   |\n| `^U`                | Delete to the beginning               |\n| `^C`                | Cancel the line                       |\n| ---                 | ---                                   |\n| `Alt H`             | Show the command man page description |\n| `Alt W`             | Show the short command description    |\n| ---                 | ---                                   |\n| `Alt .`             | Repeat last argument                  |\n\n### Sample program\n\n```fish\n#!/usr/bin/env fish\n\necho 'Hello from Fish!'\n```\n\n### Comments\n\n```fish\n# my comment\n```\n\n### Printing text\n\n```fish\necho 'Hello from Fish!'\n# or\nprintf '%s\\n' 'Hello from Fish!'\n```\n\nPrint the string with a trailing `\\n`.\n\n### Reading from stdin\n\n```fish\nread my_variable\n```\n\nReads the string to a variable `my_variable`.\n\n### Loops\n\n```fish\nfor i in (seq 1 10)\n  ...\nend\n```\n\n## Variables\n\n### Defining and erasing\n\n```fish\n# Declare the global/local variable:\nset my_variable 'Hello from Fish!'\n\ni# Remove the variable:\nset --erase my_variable\n```\n\n### Slicing\n\n```fish\necho $my_variable[1..10]\necho $my_variable[2..]\necho $my_variable[..-2]\n```\n\n## Numbers\n\n### Incrementing and decrementing\n\n```fish\nset my_variable (math $my_variable + 1)\nset my_variable (math $my_variable - 1)\n```\n\n### Arithmetic\n\n```fish\necho (math 1 + 2)\n```\n\n| Operator            | Performs       |\n| ---                 | ---            |\n| `+`                 | Addition       |\n| `-`                 | Subtraction    |\n| `*`                 | Multiplication |\n| `/`                 | Division       |\n| `%`                 | Modulo         |\n| `^`                 | Exponentiation |\n\n## Strings\n\n### Matching\n\nMatch the string against a regular expression:\n\n```fish\nstring match --regex --entire 'Fish' 'Hello from Fish!'\n```\n\n| Pattern             | Matches                   |\n| ---                 | ---                       |\n| `x?`                | Zero or one `x` chars     |\n| `x*`                | Any count `x` chars       |\n| `x+`                | One or more  `x` chars    |\n| `x{n}`              | n times `x` chars         |\n| `x{n,m}`            | n to m times `x` chars    |\n| `x{n,}`             | n or more times `x` chars |\n| `[xy]`              | `x` or y char             |\n| `[^xy]`             | not `x` or y char         |\n| ---                 | ---                 |\n| `\\w`                | Word character      |\n| `\\d`                | Digit character     |\n| `\\W`                | Not word character  |\n| `\\D`                | Not digit character |\n\nPerl compatible regular expressions are described here.\n\n### Replacing\n\n```fish\n# Replaces the first match\nstring replace --regex 'Fish' 'fish' 'Hello from Fish!'\n\n# Replaces all matches\nstring replace --regex --all 'Fish' 'fish' 'Hello from Fish!'\n```\n\n## Conditionals\n\n### If/else\n\n```fish\nif test $my_variable -lt $another_variable\n  ···\nelse if test $my_variable -eq $another_variable\n  ···\nelse\n  ···\nend\n```\n\n### Comparisons\n\n#### Numbers\n\n| Number operator     | Meaning                                   |\n| ---                 | ---                                       |\n| `-lt`               | [L]ess [t]han                             |\n| `-eq`               | [Eq]ual                                   |\n| `-gt`               | [G]reater [t]han                          |\n| `-le`               | [L]ess than or [e]qual to                 |\n| `-ge`               | [G]reater than or [e]qual to              |\n| `-ne`               | [N]ot [E]qual                             |\n\n#### Strings\n\n| String operator     | Meaning                                   |\n| ---                 | ---                                       |\n| `=`                 | [Eq]ual                                   |\n| `!=`                | [N]ot [E]qual                             |\n\n#### Files\n\n| File operator       | Meaning                                   |\n| ---                 | ---                                       |\n| `-f`                | [F]ile exists                             |\n| `-d`                | [D]irectory exists                        |\n| `-r`                | File or directory exists and [r]eadable   |\n| `-w`                | File or directory exists and [w]ritable   |\n| `-x`                | File or directory exists and e[x]ecutable |\n\n\n## Process communication\n\n### Writing to files\n\n```fish\n# Overwrite file\necho 'Hello from Fish!' > my_file\n\n# Append to file\necho 'Hello from Fish!' >> my_file\n```\n\n### Piping\n\n```fish\nmy_command | another_command\n```\n\nPasses the first command stdout output as an input to a second command.\n\n### Command substitution\n\n```fish\necho (math $my_variable + 1)\n```\n\nThe `(...)` expression is substituted with the output of the command inside it.\n\n\n### Process substitution\n\n```fish\necho (math $my_variable + 1 | psub)\n```\n\nThe `(... | psub)` expression is substituted with a temporary file with the command's output.\n\n## Functions\n\n### Defining and erasing\n\n```fish\n# Declare the function\nfunction my_function --description 'My description'\n  ···\nend\n\n# Remove the function\nfunctions --erase my_function\n```\n\n## Events\n\n### Emitting\n\n```fish\nemit my_event\n```\n\nEmits an event that can be picked up by other functions.\n\n### Event handling\n\n```fish\nfunction my_hook --on-event my_event\n  ···\nend\n```\n\nReacts to the `my_event` event.\n\n## Abbreviations\n\n### Defining and erasing\n\n```fish\n# Declare the abbreviation\nabbr --add grh \"git reset --hard HEAD\"\n```\n\n\n```fish\n# Remove the abbreviation\nabbr --erase grh\n```\n\n## Completions\n\n### Defining completions\n\n```fish\ncomplete --command mycommand --arguments 'install uninstall'\ncomplete --command mycommand --short-option 'h' --long-option 'help' --description 'Display help'\n```\n\n| Option              | Description                                          |\n| ---                 | ---                                                  |\n| `--arguments`       | Arguments to the command itself or option            |\n| `--short-option`    | Short option                                         |\n| `--long-option`     | Long option                                          |\n| `--no-files`        | Don't suggest files                                  |\n| `--force-files`     | Suggest files                                        |\n| `--condition`       | Display the hint only when a given condition is true |\n| `--description`     | Description                                          |\n\nDeclares the completion for a command.\n\n### Removing completions\n\n```fish\ncomplete --command mycommand --erase\n```\n\n## Useful built-in functions\n\n| Function                              | Description                                                   |\n| ---                                   | ---                                                           |\n| `__fish_seen_argument`                | Check whether the specified argument is used                  |\n| `__fish_seen_subcommand_from`         | Check whether the specified subcommand is used                |\n| `__fish_use_subcommand`               | Check whether any subcommand is used                          |\n| ---                                   | ---                                                           |\n| `__fish_complete_directories`         | Complete directories with the specified letters in their name |\n| `__fish_complete_suffix`              | Complete files with the specified suffix                      |\n| ---                                   | ---                                                           |\n| `__fish_complete_users`               | List all users                                                |\n| `__fish_complete_groups`              | List all user groups                                          |\n| `__fish_print_hostnames`              | List all host names                                           |\n| `__fish_complete_pids`                | List all PIDs                                                 |\n| `__fish_print_filesystems`            | List all known filesystems                                    |\n| `__fish_print_interfaces`             | List all network interfaces                                   |\n"
  },
  {
    "path": "flashlight.md",
    "content": "---\ntitle: Flashlight\ncategory: Apps\n---\n\n## Commands\n{: .-three-column}\n\n### Events and reminders\n\n* `add Dinner with Rico 5 pm tomorrow`\n* `remind Go to school at 2:30pm`\n* `remind Go to school in 15 mins`\n\n### DuckDuckGo\n\n* `!g foo`\n* `!mdn settimeout`\n\n### System\n\n* `shutdown`\n* `restart`\n* `logout`\n* `sleep`\n* `ejall`\n* `screen saver`\n\n### Emoji\n\n* `emoji grin`\n* `:rocket:`\n\n### Web search\n\n* `/react`\n\nPrefix with `/` to do a web search.\n\n### References\n\n* [Flashlight](http://flashlight.nateparrott.com/)\n* [Flashlight on GitHub](https://github.com/nate-parrott/Flashlight)\n* [Creating a plugin](https://github.com/nate-parrott/Flashlight/wiki/Creating-a-Plugin)\n"
  },
  {
    "path": "flow.md",
    "content": "---\ntitle: Flow\ncategory: JavaScript libraries\nupdated: 2020-07-05\nweight: -3\ntags: [Featurable]\n---\n\n## Getting started\n{: .-three-column}\n\n### Simple example\n{: .-prime}\n\n```js\n/* @flow */\nfunction square (n: number) {\n  return n * n\n}\n\nconst four = square(2)\n```\n{: data-line=\"1,2\"}\n\nMost of what you need to do is to simply add annotations to function arguments!\n\nSee: [flow.org docs](https://flow.org/en/docs/)\n\n### Type inference\n\n```js\nfunction square (n: number) {\n  const result = n * n\n}\n```\n{: data-line=\"2\"}\n\n`result` is inferred to be a number because `number * number` will result in a number. There's no need to give it annotations.\n\n### Type aliases\n\n```js\ntype Person = {\n  name: string,\n  age: number,\n  isAdmin: boolean,\n  likes: Array<string>\n}\n```\n{: data-line=\"1,2,3,4,5,6\"}\n\n```js\nfunction greet(user: Person) {\n  console.log('hello', user.name)\n}\n```\n{: data-line=\"1\"}\n\n```js\ngreet({ name: 'Miles Davis', ··· })\n```\n\nThis is the typical way to define the shape of complex objects.\n\n### Variables\n\n```js\nconst count: number = 200\n```\n\nYou typically don't need to do this, function args are often enough.\n\nSee: [Variable types](https://flow.org/en/docs/types/variables/)\n\n### Importing and exporting\n\n```js\nimport type { Person } from './types'\n```\n\n```js\nexport type Person = {\n  ···\n}\n```\n\nSee: [Module types](https://flow.org/en/docs/types/modules)\n\n### Union types\n\n```js\ntype Action = number | string\n```\n\n```js\ntype Direction = 'left' | 'right'\n```\n\nSee: [Unions](https://flow.org/en/docs/types/unions/)\n\n## Optionals\n\n### Maybe types\n\n```js\ntype Album = {\n  name: ?string\n}\n```\n{: data-line=\"2\"}\n\n```js\nconst a: Album = { }                 // ✗ Error\nconst a: Album = { name: 'Blue' }    // ✓ OK\nconst a: Album = { name: null }      // ✓ OK\nconst a: Album = { name: undefined } // ✓ OK\n```\n\nThis makes `name` either a string or null.\n\nSee: [Maybe types](https://flow.org/en/docs/types/primitives/#toc-maybe-types)\n\n### Optional properties\n\n```js\ntype Album = {\n  name?: string\n}\n```\n{: data-line=\"2\"}\n\n```js\nconst a: Album = { } // ✓ OK\na.name = 'Blue'      // ✓ OK\na.name = null        // ✗ Error\na.name = undefined   // ✓ OK\n```\n\nThis makes an `Album` valid even if `name` is not part of the keys. This is different from \"maybe\" types.\n\nSee: [Optional properties](https://flow.org/en/docs/types/primitives/#toc-optional-object-properties)\n\n## Objects\n{: .-three-column}\n\n### Width subtyping\n\n```js\ntype Artist = {\n  name: string,\n  label: string\n}\n```\n\n```js\nconst a: Artist = {\n  name: 'Miguel Migs',\n  label: 'Naked Music',\n  genre: 'House' // ✓ OK\n}\n```\n{: data-line=\"6\"}\n\nA type with more properties is \"wider\" and is a subtype of a \"narrower\" type.\n\nSee: [Width subtyping](https://flow.org/en/docs/lang/width-subtyping/)\n\n### Exact object types\n\n```js\ntype Artist = {|\n  name: string,\n  label: string\n|}\n```\n{: data-line=\"1,4\"}\n\n```js\nconst a: Artist = {\n  name: 'Miguel Migs',\n  label: 'Naked Music',\n  genre: 'House' // ✗ Error\n}\n```\n{: data-line=\"4\"}\n\nExact object types prevent extra properties from being added to an object.\n\nSee: [Exact object types](https://flow.org/en/docs/types/objects/#toc-exact-object-types)\n\n### Dynamic keys\n\n```js\ntype Items = {\n  [key: string]: Item\n}\n```\n{: data-line=\"2\"}\n\nSee: [Dynamic object keys](https://flow.org/en/docs/types/objects/#toc-objects-as-maps)\n\n## Advanced features\n\n### Primitives\n\n| Type            | Description                  |\n| ---             | ---                          |\n| `any`           |                              |\n| `boolean`       |                              |\n| `mixed`         |                              |\n| `number`        |                              |\n| `string`        |                              |\n| `void`          | undefined                    |\n| `null`          | null (but not undefined)     |\n| ---             | ---                          |\n| `{a: Number}`   | Object with a shape          |\n| `[any, number]` | Tuples (fixed-length arrays) |\n| ---             | ---                          |\n| `Array<T>`      |                              |\n| `Class<T>`      |                              |\n| `Function`      |                              |\n| `Object`        |                              |\n| ---             | ---                          |\n| `?number`       | Maybe (number, void, null)   |\n| `a | b`         | Union types                  |\n\n### Enums\n\n```js\ntype Suit = \"Diamonds\" | \"Clubs\" | \"Hearts\" | \"Spades\"\n\nconst countries = {\n  US: \"United States\",\n  IT: \"Italy\",\n  FR: \"France\"\n}\n\ntype Country = $Keys<typeof countries>\n```\n\nSee: [Enums](https://flow.org/en/docs/types/utilities/#toc-keys)\n\n### Type aliases\n\n```js\ntype Tree = {\n  foo: string,\n  bar: number,\n  qux: (foo: string, bar: number) => boolean\n}\n\ntype Generic<T> = {\n  foo: T\n}\n```\n\nSee: [Type aliases](https://flow.org/en/docs/types/aliases/)\n\n### Generic classes\n\n```js\nclass GenericClass<T> {\n  x: T\n  constructor (x: T) { ... }\n}\n\nvar n: GenericClass<number> = new GenericClass(0)\n```\n\nSee: [Generic classes](https://flow.org/en/docs/types/generics/#toc-classes-with-generics)\n\n### Interfaces\n\n```js\ninterface Jsonable {\n  toJSON(): string\n}\n\nclass Foo {\n  toJSON() { return '{}' }\n}\n\n(new Foo: Jsonable)\n```\n\nSee: [Interfaces](https://flow.org/en/docs/types/interfaces/)\n\n### Functions\n\n```js\nconst callback: () => void = function () {}\n```\n\n```js\nfunction filter<T> (\n  list: Array<T>,\n  callback: (item: T) => boolean\n): Array<T> {\n  ···\n}\n```\n\nSee: [Functions](https://flow.org/en/docs/types/functions/)\n\n### Imports\n\n```js\nimport type { Person } from '../person'\nimport typeof Config from '../config'\n```\n\n```js\nexport type Person = { id: string }\n```\n\n### Comment syntax\n\n```js\n/*::\n  export type Foo = { ... }\n*/\n\nfunction add(n /*: number */) { ... }\n```\n\n### React\n\n```js\ntype Props = {\n  bar: number,\n}\n\ntype State = {\n  open: boolean,\n}\n\nclass Foo extends React.Component<Props, State> {\n  // Component code\n}\n```\n\n## Examples\n\n### Examples\n\n```js\nvar myNumbers: Array<number> = [42]\nfunction foo(): any { return 42 }\nvar b: boolean = false\nvar b: ?boolean = false  /* maybe */\nvar b: string | boolean = false\n\nvar a: Class<MyClass> = MyClass\nvar b: MyClass = new a()\n```\n\n### Function signature\n\n```js\ntype Callback = (?Error, string) => any\n\nfunction fetch (callback: Callback) {\n  ···\n}\n```\n\n## References\n\n- [Flow website](https://www.saltycrane.com/flow-type-cheat-sheet/latest/) _(flow.org)_\n- [Getting started with Flow](https://flow.org/en/docs/getting-started/) _(flow.org)_\n- [Flow type cheatsheet](https://www.saltycrane.com/flow-type-cheat-sheet/latest/) _(saltycrane.com)_\n"
  },
  {
    "path": "flux.md",
    "content": "---\ntitle: Flux architecture\ncategory: React\n---\n\n## About\n\n### About\n{: .-intro}\n\nFlux is an architecture for building client-side web applications.\n\n* [In-Depth Overview](https://facebook.github.io/flux/docs/in-depth-overview/) _(facebook.github.io)_\n\n### Architecture\n\n* __Dispatchers__ receive *actions* that get dispatched to its listeners.\n\n* __Stores__ are objects that store data, usually changed from a dispatcher listener.\n\n* __Views__ are React components that listen to Store changes, or emit *actions* to the dispatcher.\n\n----\n\n## Dispatcher\n\n### Pub-sub\n[A dispatcher][dispatcher] emits events (`.dispatch()`) to its listeners (`.register(fn)`).\n\n```js\nvar Dispatcher = require('flux').Dispatcher;\n\nd = new Dispatcher();\n\n// send\nd.dispatch({ action: 'edit', ... };\n\n// receive\ntoken = d.register(function (payload) {\n  payload.action === 'edit'\n})\n```\n\n### Ensuring proper order\n\nWith multiple listeners, you can ensure one is fired after another using `.waitFor()`.\n\n```js\ntoken1 = d.register(...);\n\ntoken2 = d.register(function (payload) {\n\n  // ensure receiver 1 is fired before this\n  d.waitFor([ token1 ]);\n  \n  // process here\n})\n```\n\n### Subclassing\n\n[Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) is the preferred way to subclass Dispatcher (think `$.extend`).<br>\nYou can also make *action creators*, which are shortcuts for `dispatch()`.\n\n```js\nvar Dispatcher = require('flux').Dispatcher;\nvar assign = require('object-assign');\n\nvar AppDispatcher = assign({}, Dispatcher.prototype, {\n\n  // action creator\n  handleViewAction(action) {\n    this.dispatch({\n      source: 'VIEW_ACTION',\n      action: action\n    })\n  } \n\n})\n```\n\n----\n\n## Stores\n\n### Plain objects\nStores are just like objects.\n\n```js\nvar TodoStore = { list: [] };\n```\n\n### Events\nSometimes they're eventemitters, too. Usually it's used to emit `change` events for views to pick up.\n\n```js\nvar TodoStore = assign({}, EventEmitter.prototype, {\n  ...\n});\n\nTodoStore.emit('change');\nTodoStore.on('change', function () { ... });\n```\n\n### Model logic\nLogic can sometimes belong in stores.\n\n```js\n{\n  isAllActive() {\n    return this.list.every(item => item.active);\n  }\n}\n```\n\n\n----\n\n## Stores and dispatchers\n\n### Instantiate\nMake a Dispatcher and Stores.\n\n```js\nd = new Dispatcher();\nTabStore = { tab: 'home' };\n```\n\n### Updating data\nDispatch events to alter the store.\n\n```js\nd.dispatch({ action: 'tab.change', tab: 'timeline' });\n\nd.register(function (data) {\n  if (data.action === 'tab.change') {\n    TabStore.tab = data.tab;\n  }\n});\n```\n\n----\n\n## With Views\n\n### Listen to dispatchers\nViews (React Components) can listen to Dispatchers.\n\n```js\nvar TodoApp = React.createClass({\n\n  componentDidMount() {\n    this.token = AppDispatcher.register((payload) => {\n      switch (payload.action) {\n        case 'tab.change':\n          this.render();\n          // ...\n      }\n    });\n  },\n  \n  componentDidUnmount() {\n    AppDispatcher.unregister(this.token);\n  }\n  \n});\n```\n\n### Listen to Stores\nOr to Stores's `change` events.\n\n```js\n{\n  componentDidMount() {\n    TodoStore.on('change', this.onChange);\n  },\n  \n  componentDidUnmount() {\n    TodoState.removeListener('change', this.onChange);\n  },\n  \n  onChange(data) {\n    // ...\n  }\n}\n```\n\n----\n\n### Also see\n\n* [Dispatcher API][dispatcher]\n* [React cheatsheet](react.html)\n* [Dispatcher.js source](https://github.com/facebook/flux/blob/master/src/Dispatcher.js)\n* [Flux-todomvc explanation](https://github.com/facebook/flux/tree/master/examples/flux-todomvc)\n\n[dispatcher]: http://facebook.github.io/flux/docs/dispatcher.html\n"
  },
  {
    "path": "flynn.md",
    "content": "---\ntitle: Flynn\ncategory: Devops\n---\n\n### General workflow\n\n* Start a flynn cluster (on amazon or vagrant)\n* `flynn cluster add` to add that cluster\n* `flynn create NAME` in your app\n* `git push flynn master` to deploy\n\n### Creating a cluster (AWS)\n\n```bash\nflynn install  # (provisions AWS EC2 stuff)\nflynn key add  # (adds your pubkey to AWS)\n```\n\n#### What it does\n\n* This creates `XXXX.flynnhub.com`\n* Dashboard in `dashboard.XXXX.flynnhub.com`\n* Use `flynn -a dashboard env get LOGIN_TOKEN` to get login token\n* Apps live in `APP.XXXX.flynnhub.com`\n\n### Using a flynn cluster\n\nManaged in `~/.flynnrc`:\n{: .-setup}\n\n```bash\nflynn cluster\nflynn cluster add [-g githost] [-p pin] NAME URL KEY\nflynn cluster remove NAME\nflynn cluster default NAME # use this current\n```\n\n### Setting up a new app\n\n```bash\ncd ~/project\nflynn create example # adds the `flynn` remote\nflynn route # prints http routes\ngit push flynn master\n```\n\n## Commands\n\n### Environment vars\n\n```bash\nflynn env\nflynn env set FOO=bar BAZ=foobar\nflynn env unset FOO\n```\n\n### Scale\n\n```bash\nflynn ps\nflynn scale web=3\n```\n\n### Logs\n\n```bash\nflynn log\nflynn log flynn-d55c7a...\n```\n\n### Running commands\n\n```bash\nflynn run rake db:migrate\n```\n\n### Manage routes\n\n```bash\nflynn route\nflynn route add http example.com\n# then make a CNAME from example.com to myapp.xxxx.flynnhub.com\n```\n\n### More\n\n```bash\nflynn ps\nflynn kill <job>\n\nflynn meta\nflynn meta set foo=baz\n```\n\n## Also see\n\n- [Flynn website](https://flynn.io/) _(flynn.io)_\n"
  },
  {
    "path": "freenode.md",
    "content": "---\ntitle: Freenode\ntags: [WIP]\n---\n\n### IRC server\n\n```\nirc.freenode.net\n```\n\n### NickServ commands\n\n```\n/msg nickserv identify [nick] <password>\n/msg nickserv info <nick>\n```\n\n### Add a nick\n\n```\n/nick newnick\n/msg nickserv identify <oldnick> <password>\n/msg nickserv group\n```\n"
  },
  {
    "path": "frequency-separation-retouching.md",
    "content": "---\ntitle: Frequency separation retouching\ncategory: Others\n---\n\n### Frequency separation retouching in Photoshop\n\nDuplicate the layer twice. Perform these in each layer:\n{: .-setup}\n\n#### Lower layer\n\n- Apply **Gaussian Blur**\n\n#### Upper layer\n\n- Set layer mask to **Linear light**\n- Image → **Apply Image**\n  - Layer: _(select the lower layer)_\n  - Blending mode: `Subtract`\n  - Scale: `2`\n  - Offset: `128`\n\n### Reference\n\n- <https://phlearn.com/amazing-power-frequency-separation-retouching-photoshop>\n{: .-also-see}\n"
  },
  {
    "path": "gh-pages.md",
    "content": "---\ntitle: GitHub pages\ncategory: Jekyll\n---\n\n## Custom domains\n\n### Custom domains\n\n```sh\n$ echo \"foobar.com\" > CNAME\n$ git commit && git push\n```\n\nCreate a `CNAME` file with your domain on it.\n\nSee: [Setting up a custom domain](https://help.github.com/articles/quick-start-setting-up-a-custom-domain/) _(github.com)_\n\n### Set up your domain\n\nSubdomain (like www):\n{: .-setup}\n\n     CNAME => username.github.io\n\nApex domains:\n{: .-setup}\n\n     ALIAS => username.github.io\n\nApex domains (alternative):\n{: .-setup}\n\n    A => 192.30.252.153\n    A => 192.30.252.154\n\n## References\n{: .-one-column}\n\n- <https://pages.github.com>\n"
  },
  {
    "path": "git-branch.md",
    "content": "---\ntitle: Git branches\ncategory: Git\nupdated: 2020-02-13\n---\n\n## Working with branches\n{: .-three-column}\n\n### Creating\n\n```bash\ngit checkout -b $branchname\ngit push origin $branchname --set-upstream\n```\n\nCreates a new branch locally then pushes it.\n\n### Getting from remote\n\n```bash\ngit fetch origin\ngit checkout --track origin/$branchname\n```\n\nGets a branch in a remote.\n\n### Delete local remote-tracking branches\n\n```bash\ngit remote prune origin\n```\n\nDeletes `origin/*` branches in your local copy. Doesn't affect the remote.\n\n### List existing branches\n\n```bash\ngit branch --list\n```\n\nExisting branches are listed. Current branch will be highlighted with an asterisk.\n\n### List merged branches\n\n```bash\ngit branch -a --merged\n```\n\nList outdated branches that have been merged into the current one.\n\n### Delete a local branch\n\n```bash\ngit branch -d $branchname\n```\n\nDeletes the branch only if the changes have been pushed and merged with remote.\n\n### Delete branch forcefully\n\n```bash\ngit branch -D $branchname\n```\n\n```bash\ngit branch -d $branchname\n```\n\n> Note: You can also use the -D flag which is synonymous with --delete --force instead of -d. This will delete the branch regardless of its merge status.\n> Delete a branch irrespective of its merged status.\n\n### Delete remote branch\n\n```bash\ngit push origin --delete :$branchname\n```\n\nWorks for tags, too!\n\n### Get current sha1\n\n```bash\ngit show-ref HEAD -s\n```\n### Reset branch and remove all changes\n\n```bash\ngit reset --hard\n```\n\n### Undo commits to a specific commit\n\n```bash\ngit reset --hard $commit_id\n\n# Now push safely to your branch\ngit push --force-with-lease\n\n# Or push brutally to your branch\ngit push --force\n```\n"
  },
  {
    "path": "git-extras.md",
    "content": "---\ntitle: Git extras\ncategory: Git\nintro: |\n  Quick reference to some utilities in the [git-extras](https://github.com/tj/git-extras) utilities.\n---\n\n## References\n\n### Git-flow\n\n```sh\n$ git feature myfeature\n  switched to branch 'feature/rofl'\n\n$ ...\n$ git checkout develop\n$ git feature finish myfeature\n  merging 'feature/rofl' into develop\n  deleted branch 'feature/rofl'\n```\n\nAlso `git-bug` and `git-refactor`.\n\n### Branches\n\n```sh\n$ git delete-merged-branches\n  # hint: do `git remote prune origin` after\n\n$ git create-branch development\n$ git delete-branch development\n\n$ git fresh-branch gh-pages\n```\n\n### Inspecting\n\n```sh\n$ git summary   # repo age, commits, active days, etc\n$ git impact    # impact graph\n$ git effort    # commits per file\n```\n\n### Github\n\n```sh\n$ git fork strongloop/express\n# sync your fork with the original repository:\n$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git\n$ git fetch upstream; git merge upstream/master\n```\n\n### Tags\n\n```sh\n$ git release v1.0.0           # commit, tag, push-tags\n$ git delete-tag v1.0.0\n```\n\n### Conveniences\n\n```sh\n$ git ignore \"*.log\"\n```\n\n### Locking\n\nAssumes that changes will not be committed.\n\n```sh\n$ git lock config/database.yml\n$ git unlock config/database.yml\n```\n\n### Etc\n\n```sh\n$ git obliterate secret.yml   # remove all references to it\n```\n\n### References\n\n- https://github.com/visionmedia/git-extras\n"
  },
  {
    "path": "git-log-format.md",
    "content": "---\ntitle: Git log format string\ncategory: Git\nupdated: 2017-10-18\nweight: -1\nkeywords:\n  - \"git log --pretty=format:%H\"\n  - \"%H - Commit hash\"\n  - \"%an - Author\"\n  - \"%aD - Author date\"\n---\n\n## Log format\n{: .-three-column}\n\n### Pretty format\n{: .-prime}\n\n```bash\ngit log --pretty=\"format:%H\"\n```\n\nSee the next tables on format variables.\n\n### Hash\n\n#### Commit\n\n| Variable | Description |\n| --- | --- |\n| `%H` | commit hash |\n| `%h` | (abbrev) commit hash |\n\n#### Tree\n\n| Variable | Description |\n| --- | --- |\n| `%T` | tree hash |\n| `%t` | (abbrev) tree hash |\n\n#### Parent\n\n| Variable | Description |\n| --- | --- |\n| `%P` | parent hash |\n| `%p` | (abbrev) parent hash |\n\n### Commit\n\n| Variable | Description |\n| --- | --- |\n| `%s` | commit subject |\n| `%f` | commit subject, filename style |\n| `%b` | commit body |\n| --- | --- |\n| `%d` | ref names |\n| `%e` | encoding |\n\n## Author and committer\n\n### Author\n\n#### Name\n\n| Variable | Description |\n| --- | --- |\n| `%an` | author |\n| `%aN` | author, respecting mailmap |\n\n#### Email\n\n| Variable | Description |\n| --- | --- |\n| `%ae` | author email |\n| `%aE` | author email, respecting mailmap |\n\n#### Date\n\n| Variable | Description |\n| --- | --- |\n| `%aD` | author date (rfc2882) |\n| `%ar` | author date (relative) |\n| `%at` | author date (unix timestamp) |\n| `%ai` | author date (iso8601) |\n\n### Committer\n\n#### Name\n\n| Variable | Description |\n| --- | --- |\n| `%cn` | committer name |\n| `%cN` | committer name, respecting mailmap |\n\n#### Email\n\n| Variable | Description |\n| --- | --- |\n| `%ce` | committer email |\n| `%cE` | committer email, respecting mailmap |\n\n#### Date\n\n| Variable | Description |\n| --- | --- |\n| `%cD` | committer date (rfc2822) |\n| `%cr` | committer date (relative) |\n| `%ct` | committer date (unix timestamp) |\n| `%ci` | committer date (iso8601) |\n\n## Also see\n\n- [Git log cheatsheet](./git-log)\n"
  },
  {
    "path": "git-log.md",
    "content": "---\ntitle: git log\ncategory: Git\n---\n\n### Revision ranges\n\n```bash\ngit log master             # branch\ngit log origin/master      # branch, remote\ngit log v1.0.0             # tag\n\ngit log master develop\n\ngit log v2.0..master       # reachable from *master* but not *v2.0*\ngit log v2.0...master      # reachable from *master* and *v2.0*, but not both\n```\n\nSee [gitrevisions](./git-revisions).\n\n### Basic filters\n\n```bash\n-n, --max-count=2\n    --skip=2\n```\n\n```bash\n    --since=\"1 week ago\"\n    --until=\"yesterday\"\n```\n\n```bash\n    --author=\"Rico\"\n    --committer=\"Rico\"\n```\n\n### Search\n\n```bash\n    --grep=\"Merge pull request\"   # in commit messages\n    -S\"console.log\"               # in code\n    -G\"foo.*\"                     # in code (regex)\n```\n\n```bash\n    --invert-grep\n    --all-match                   # AND in multi --grep\n```\n\n### Limiting\n\n```bash\n    --merges\n    --no-merges\n```\n\n```bash\n    --first-parent          # no stuff from merged branches\n```\n\n```bash\n    --branches=\"feature/*\"\n    --tags=\"v*\"\n    --remotes=\"origin\"\n```\n\n### Simplification\n\n```bash\ngit log -- app/file.rb          # only file\n    --simplify-by-decoration    # tags and branches\n```\n\n### Ordering\n\n```bash\n    --date-order\n    --author-date-order\n    --topo-order              # \"smart\" ordering\n    --reverse\n```\n\n### Formatting\n\n```bash\n    --abbrev-commit\n    --oneline\n    --graph\n```\n\n### Custom formats\n\n```bash\n    --pretty=\"format:%H\"\n```\n\nSee: [Git log format cheatsheet](./git-log-format)\n\n## Also see\n\n- [Git log format cheatsheet](./git-log-format)\n"
  },
  {
    "path": "git-revisions.md",
    "content": "---\ntitle: Git revisions\ncategory: Git\nupdated: 2017-10-11\ndescription: \"\"\nintro: |\n  A list of revision specifications you can use with `git log` and many other Git commands. Summarized from `gitrevisions(7)` man page.\n---\n\n### Example usages\n\n| _`git log`_ `master...develop`  | inspect differences in branches         |\n| _`git rebase -i`_ `HEAD~3`      | rebase last 3 commits                   |\n| _`git reset --hard`_ `HEAD@{2}` | undo last operation that changed HEAD   |\n| _`git checkout`_ `v2^{}`        | checkout the `v2` tag (not `v2` branch) |\n{: .-mute-em}\n\nThe 3rd argument in each of these commands is a `gitrevision`. These gitrevisions can be passed to many Git commands.\n\n### Common git revisions\n\n| Reference                    | Description                                     |\n| ---                          | ---                                             |\n| _`git show`_ `dae68e1`       | sha1                                            |\n| _`git show`_ `HEAD`          | reference                                       |\n| _`git show`_ `v1.0.0`        | tag                                             |\n| ---                          | ---                                             |\n| _`git show`_ `master`        | local branch                                    |\n| _`git show`_ `origin/master` | remote branch                                   |\n| ---                          | ---                                             |\n| _`git show`_ `master~2`      | 2 commits back from master                      |\n| ---                          | ---                                             |\n| _`git show`_ `master..fix`   | reachable from *fix* but not *master*           |\n| _`git show`_ `master...fix`  | reachable from *fix* and *master*, but not both |\n{: .-mute-em}\n\nThese are just the common ones, there's a lot more below! (These work in many other commands, not just `git show`.)\n\n## Reference\n\n### Commits\n\n| _`git checkout`_ `dae68e1` | sha1 |\n{: .-mute-em}\n\n### References\n\n| Example                          | Description                       |\n| ---                              | ---                               |\n| _`git checkout`_ `HEAD`          | reference                         |\n| _`git checkout`_ `master`        | branch                            |\n| _`git checkout`_ `v1.0.0`        | tag                               |\n| ---                              | ---                               |\n| _`git checkout`_ `origin/master` | aka, *refs/remotes/origin/master* |\n| _`git checkout`_ `heads/master`  | aka, *refs/heads/master*          |\n{: .-mute-em}\n\n### Searching back\n\n| Example                               | Description                              |\n| ---                                   | ---                                      |\n| _`git checkout`_ `master@{yesterday}` | also *1 day ago*, etc                    |\n| _`git checkout`_ `master@{2}`         | 2nd prior value                          |\n| _`git checkout`_ `master@{push}`      | where *master* would push to             |\n| ---                                   | ---                                      |\n| _`git checkout`_ `master^`            | parent commit                            |\n| _`git checkout`_ `master^2`           | 2nd parent, eg, what it merged           |\n| _`git checkout`_ `master~5`           | 5 parents back                           |\n| _`git checkout`_ `master^0`           | this commit; disambiguates from tags     |\n| ---                                   | ---                                      |\n| _`git checkout`_ `v0.99.8^{tag}`      | can be *commit*, *tag*, *tree*, *object* |\n| _`git checkout`_ `v0.99.8^{}`         | defaults to *{tag}*                      |\n| ---                                   | ---                                      |\n| _`git checkout`_ `\":/fix bug\"`        | searches commit messages                 |\n{: .-mute-em}\n\n### Other\n\n| `HEAD:README` | ...          |\n| `0:README`    | (0 to 3) ... |\n\n## Ranges\n\n### Ranges\n\n| _`git log`_ `master`       | reachable parents from master                   |\n| _`git log`_ `^master`      | exclude reachable parents from master           |\n| _`git log`_ `master..fix`  | reachable from *fix* but not *master*           |\n| _`git log`_ `master...fix` | reachable from *fix* and *master*, but not both |\n| _`git log`_ `HEAD^@`       | parents of *HEAD*                               |\n| _`git log`_ `HEAD^!`       | *HEAD*, then excluding parents's ancestors      |\n| _`git log`_ `HEAD^{:/fix}` | search previous *HEAD*s matching criteria       |\n{: .-mute-em}\n\n### Ranges illustration\n\n```nohighlight\nA ─┬─ E ── F ── G   master\n   │\n   └─ B ── C ── D   fix\n```\n{: .-box-chars.-setup}\n\n| _`git log`_ `master..fix`  | BCD         |\n| _`git log`_ `master...fix` | BCD and EFG |\n{: .-mute-em}\n\n## References\n\n* [Git Tools - Revision Selection](https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html) _(git-scm.com)_\n* [gitrevisions(7)](https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html) _(kernel.org)_\n"
  },
  {
    "path": "git-tricks.md",
    "content": "---\ntitle: Git tricks\ncategory: Git\n---\n\n### Refs\n\n    HEAD^       # 1 commit before head\n    HEAD^^      # 2 commits before head\n    HEAD~5      # 5 commits before head\n\n### Branches\n\n    # create a new branch\n      git checkout -b $branchname\n      git push origin $branchname --set-upstream\n\n    # get a remote branch\n      git fetch origin\n      git checkout --track origin/$branchname\n\n    # delete local remote-tracking branches (lol)\n      git remote prune origin\n\n    # list merged branches\n      git branch -a --merged\n\n    # delete remote branch\n      git push origin :$branchname\n      \n    # go back to previous branch\n      git checkout -\n      \n### Collaboration\n\n    # Rebase your changes on top of the remote master\n      git pull --rebase upstream master\n      \n    # Squash multiple commits into one for a cleaner git log\n    # (on the following screen change the word pick to either 'f' or 's')\n      git rebase -i $commit_ref\n\nSubmodules\n----------\n\n### Submodules\n\n    # Import .gitmodules\n      git submodule init\n\n    # Clone missing submodules, and checkout commits\n      git submodule update --init --recursive\n\n    # Update remote URLs in .gitmodules\n    # (Use when you changed remotes in submodules)\n      git submodule sync\n\nDiff\n----\n\n### Diff with stats\n\n    git diff --stat\n    app/a.txt    | 2 +-\n    app/b.txt    | 8 ++----\n    2 files changed, 10 insertions(+), 84 deletions(-)\n\n### Just filenames\n\n    git diff --summary\n\nLog options\n-----------\n\n### Options\n\n    --oneline\n      e11e9f9 Commit message here\n\n    --decorate\n      shows \"(origin/master)\"\n\n    --graph\n      shows graph lines\n\n    --date=relative\n      \"2 hours ago\"\n\nMisc\n----\n\n### Cherry pick\n\n    git rebase 76acada^\n\n### Misc\n\n    # get current sha1 (?)\n      git show-ref HEAD -s\n\n    # show single commit info\n      git log -1 f5a960b5\n\n    # Go back up to root directory\n      cd \"$(git rev-parse --show-top-level)\"\n\n## Short log\n\n     $ git shortlog\n     $ git shortlog HEAD~20..    # last 20 commits\n\n     James Dean (1):\n         Commit here\n         Commit there\n\n     Frank Sinatra (5):\n         Another commit\n         This other commit\n\n## Bisect\n\n    git bisect start HEAD HEAD~6\n    git bisect run npm test\n    git checkout refs/bisect/bad   # this is where it screwed up\n    git bisect reset\n\n### Manual bisection\n\n    git bisect start\n    git bisect good   # current version is good\n\n    git checkout HEAD~8\n    npm test          # see if it's good\n    git bisect bad    # current version is bad\n\n    git bisect reset  # abort\n\n### Searching\n\n    git log --grep=\"fixes things\"  # search in commit messages\n    git log -S\"window.alert\"       # search in code\n    git log -G\"foo.*\"              # search in code (regex)\n\n### GPG signing\n\n    git config set user.signingkey <GPG KEY ID>       # Sets GPG key to use for signing\n\n    git commit -m \"Implement feature Y\" --gpg-sign    # Or -S, GPG signs commit\n\n    git config set commit.gpgsign true                # Sign commits by default\n    git commit -m \"Implement feature Y\" --no-gpg-sign # Do not sign\n    \n"
  },
  {
    "path": "gnupg.md",
    "content": "---\ntitle: GnuPG\ncategory: CLI\ntags: []\nupdated: 2017-10-22\nweight: 0\nintro: |\n  [GnuPG](https://gnupg.org/) is a complete and free implementation of the OpenPGP standard.\n---\n\nBasics\n---------------\n\n### Exporting keys\n\n```bash\ngpg -o key.gpg --export <KEY ID>\n```\n\n__Export key in ASCII:__\n\n```bash\ngpg -o key.asc --armor --export <KEY ID>\n```\n\n__Note:__ Omitting the `-o|--output` option will print the key to `stdout`.\n\n### Importing keys\n\n```bash\ngpg --import key.gpg\ngpg --import key.asc\n```\n\nOnly merge updates for keys already in key-ring:\n\n```bash\ngpg --import key.asc --import-options merge-only\n```\n\n### Managing your keyring\n\nGenerate a new key:\n{: .-setup}\n\n```bash\ngpg --gen-key\n# or, generate a new key with dialogs for all options\ngpg --full-gen-key\n```\n\nList public keys:\n\n```bash\ngpg -k\ngpg --list-keys\n```\n\nList secret keys:\n\n```bash\ngpg -K\ngpg --list-secret-keys\n```\n\n\n### Using a keyserver\n\nImport keys from keyserver:\n{: .-setup}\n\n```bash\ngpg --receive-keys <KEY IDS>\n```\n\nUpload keys to keyserver:\n\n```bash\ngpg --send-keys <KEY IDS>\n```\n\nRequest updates from keyserver for keys already in your keyring:\n\n```bash\ngpg --refresh-keys\n```\n\nSearch keys from keyserver:\n\n```bash\ngpg --search-keys \"<SEARCH STRING>\"\n```\n\nOverride keyserver from `~/.gnupg/gpg.conf`\n\n```bash\ngpg --keyserver <URL> ...\n```\n\n### Trusting a key\n\n```bash\ngpg --edit-key <KEY ID>\n# In the interactive prompt:\ngpg> trust\ngpg> save\n```\n\n__NOTE:__ You can use the owner's email or name (or part thereof) instead of the key ID for `--edit-key`\n\n\nEncrypting\n---------\n{: .-two-column}\n\n### Public key encryption\nThis will produce an encrypted file, `secret.txt.gpg`, that can only be decrypted by the recipient:\n\n```bash\ngpg -e -o secret.txt.gpg -r <RECIPIENT> secret.txt\n```\n\nFor `<RECIPIENT>` you can use their key ID, their email, or their name (or part thereof).\n\n```bash\ngpg -e -r <KEY ID> ...\ngpg -e -r \"Bez\" ...\ngpg -e -r \"bezalelhermoso@gmail.com\" ...\n```\n\nSpecifying multiple recipients\n\n```bash\ngpg -e -r <RECIPIENT> -r <ANOTHER RECIPIENT> ... secret.txt\n```\n\n__NOTE__: Omitting `-o|--output` will produce an encrypted file named `<ORIGINAL FILENAME>.gpg` by default.\n\n### Symmetric encryption\n\nEncrypt file using a shared key. You will be prompted for a passphrase.\n\n```bash\ngpg --symmetric secret.txt\n# or\ngpg -c secret.txt\n```\n\nDecrypting\n---------\n{: .-one-column}\n\n### Decrypting a file\n\n```bash\ngpg -d -o secret.txt secret.txt.gpg\n```\n\nIf the file is encrypted via symmetric encryption, you will be prompted for the passphrase.\n\n__NOTE__: Omitting `-o|--output` will print the unencrypted contents to `stdout`\n\nSigning & Verifying\n---------\n{: .-two-column}\n\n### Signing\n\n```bash\ngpg -o signed-file.txt.gpg -s file.txt\n```\n\nThis can be used during encryption to also sign encrypted files:\n\n```bash\ngpg -s -o secret.txt.gpg \\\n  -r <RECIPIENT> secret.txt\n```\n\n### Verifying a signature\n\n```bash\ngpg --verify file.txt.gpg\n```\n\n### Viewing content of signed file\n\n```bash\ngpg -d signed-file.txt.gpg\n```\n\nMiscellaneous\n----------\n{: .-two-column}\n\n### Components\n\nList all components:\n{: .-setup}\n\n```bash\ngpgconf --list-components\n```\n\nKill a component:\n\n```bash\ngpgconf --kill <COMPONENT> # i.e. gpgconf --kill dirmngr\n```\n\nKill all components:\n```bash\ngpgconf --kill all\n```\n\n### Parsing keyring data\n\nUse `--with-colons` to produce an output that can easily be parsed i.e. with `awk`, `grep`. Fields are colon-separated.\n\n```bash\ngpg -k --with-colons\n```\n\nField Quick Reference:\n\n| Field # | Description |\n| 1       | Record type |\n| 2       | Validity |\n| 3       | Key length in bits |\n| 4       | Public key algorithm |\n| 5       | Key ID |\n| 6       | Creation date |\n| 7       | Expiry date |\n| 8       | Certificate S/N, UID hash, trust signature info |\n| 9       | Ownertrust |\n| 10      | User ID |\n| 11      | Signature class |\n| 12      | Key capabilities |\n| 13      | Issuer fingerprint |\n| 14      | Flag field |\n| 15      | S/N of token |\n| 16      | Hash algorithm |\n| 17      | Curve name |\n| 18      | Compliance flags |\n| 19      | Last update timestamp |\n| 20      | Origin |\n\nSee [GnuPG Details](https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob_plain;f=doc/DETAILS) for more details.\n\n\n"
  },
  {
    "path": "go.md",
    "content": "---\ntitle: Go\nprism_languages: [go, bash]\nweight: -3\ntags: [Featured]\ncategory: C-like\nupdated: 2020-06-21\n---\n\n## Getting started\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\n- [A tour of Go](https://tour.golang.org/welcome/1) _(tour.golang.org)_\n- [Go repl](https://repl.it/languages/go) _(repl.it)_\n- [Golang wiki](https://go.dev/wiki/) _(go.dev)_\n\n### Hello world\n{: .-prime}\n\n#### hello.go\n{: .-file}\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n  message := greetMe(\"world\")\n  fmt.Println(message)\n}\n\nfunc greetMe(name string) string {\n  return \"Hello, \" + name + \"!\"\n}\n```\n\n```bash\n$ go build\n```\n\nOr try it out in the [Go repl](https://repl.it/languages/go), or [A Tour of Go](https://tour.golang.org/welcome/1).\n\n### Variables\n\n#### Variable declaration\n\n```go\nvar msg string\nvar msg = \"Hello, world!\"\nvar msg string = \"Hello, world!\"\nvar x, y int\nvar x, y int = 1, 2\nvar x, msg = 1, \"Hello, world!\"\nmsg = \"Hello\"\n```\n\n#### Declaration list\n\n``` go\nvar (\n  x int\n  y = 20\n  z int = 30\n  d, e = 40, \"Hello\"\n  f, g string\n)\n```\n\n#### Shortcut of above (Infers type)\n\n```go\nmsg := \"Hello\"\nx, msg := 1, \"Hello\"\n```\n\n### Constants\n\n```go\nconst Phi = 1.618\nconst Size int64 = 1024\nconst x, y = 1, 2\nconst (\n  Pi = 3.14\n  E  = 2.718\n)\nconst (\n  Sunday = iota\n  Monday\n  Tuesday\n  Wednesday\n  Thursday\n  Friday\n  Saturday\n)\n```\n\nConstants can be character, string, boolean, or numeric values.\n\nSee: [Constants](https://tour.golang.org/basics/15)\n\n## Basic types\n{: .-three-column}\n\n### Strings\n\n```go\nstr := \"Hello\"\n```\n\n```go\nstr := `Multiline\nstring`\n```\n\nStrings are of type `string`.\n\n### Numbers\n\n#### Typical types\n\n```go\nnum := 3          // int\nnum := 3.         // float64\nnum := 3 + 4i     // complex128\nnum := byte('a')  // byte (alias for uint8)\n```\n\n#### Other types\n\n```go\nvar u uint = 7        // uint (unsigned)\nvar p float32 = 22.7  // 32-bit float\n```\n\n### Arrays\n\n```go\n// var numbers [5]int\nnumbers := [...]int{0, 0, 0, 0, 0}\n```\n\nArrays have a fixed size.\n\n### Slices\n\n```go\nslice := []int{2, 3, 4}\n```\n\n```go\nslice := []byte(\"Hello\")\n```\n\nSlices have a dynamic size, unlike arrays.\n\n### Pointers\n\n```go\nfunc main () {\n  b := *getPointer()\n  fmt.Println(\"Value is\", b)\n}\n```\n{: data-line=\"2\"}\n\n```go\nfunc getPointer () (myPointer *int) {\n  a := 234\n  return &a\n}\n```\n{: data-line=\"3\"}\n\n```go\na := new(int)\n*a = 234\n```\n{: data-line=\"2\"}\n\nPointers point to a memory location of a variable. Go is fully garbage-collected.\n\nSee: [Pointers](https://tour.golang.org/moretypes/1)\n\n### Type conversions\n\n```go\ni := 2\nf := float64(i)\nu := uint(i)\n```\n\nSee: [Type conversions](https://tour.golang.org/basics/13)\n\n## Flow control\n{: .-three-column}\n\n### Conditional\n\n```go\nif day == \"sunday\" || day == \"saturday\" {\n  rest()\n} else if day == \"monday\" && isTired() {\n  groan()\n} else {\n  work()\n}\n```\n{: data-line=\"1,3,5\"}\n\nSee: [If](https://tour.golang.org/flowcontrol/5)\n\n### Statements in if\n\n```go\nif _, err := doThing(); err != nil {\n  fmt.Println(\"Uh oh\")\n}\n```\n{: data-line=\"1\"}\n\nA condition in an `if` statement can be preceded with a statement before a `;`. Variables declared by the statement are only in scope until the end of the `if`.\n\nSee: [If with a short statement](https://tour.golang.org/flowcontrol/6)\n\n### Switch\n\n```go\nswitch day {\n  case \"sunday\":\n    // cases don't \"fall through\" by default!\n    fallthrough\n\n  case \"saturday\":\n    rest()\n\n  default:\n    work()\n}\n```\n\nSee: [Switch](https://github.com/golang/go/wiki/Switch)\n\n### For loop\n\n```go\nfor count := 0; count <= 10; count++ {\n  fmt.Println(\"My counter is at\", count)\n}\n```\n\nSee: [For loops](https://tour.golang.org/flowcontrol/1)\n\n### For-Range loop\n\n```go\nentry := []string{\"Jack\",\"John\",\"Jones\"}\nfor i, val := range entry {\n  fmt.Printf(\"At position %d, the character %s is present\\n\", i, val)\n}\n```\n\nSee: [For-Range loops](https://gobyexample.com/range)\n\n### While loop\n\n```go\nn := 0\nx := 42\nfor n != x {\n  n := guess()\n}\n```\n\nSee: [Go's \"while\"](https://tour.golang.org/flowcontrol/3)\n\n## Functions\n{: .-three-column}\n\n### Lambdas\n\n```go\nmyfunc := func() bool {\n  return x > 10000\n}\n```\n{: data-line=\"1\"}\n\nFunctions are first class objects.\n\n### Multiple return types\n\n```go\na, b := getMessage()\n```\n\n```go\nfunc getMessage() (a string, b string) {\n  return \"Hello\", \"World\"\n}\n```\n{: data-line=\"2\"}\n\n\n### Named return values\n\n```go\nfunc split(sum int) (x, y int) {\n  x = sum * 4 / 9\n  y = sum - x\n  return\n}\n```\n{: data-line=\"4\"}\n\nBy defining the return value names in the signature, a `return` (no args) will return variables with those names.\n\nSee: [Named return values](https://tour.golang.org/basics/7)\n\n## Packages\n{: .-three-column}\n\n### Importing\n\n```go\nimport \"fmt\"\nimport \"math/rand\"\n```\n\n```go\nimport (\n  \"fmt\"        // gives fmt.Println\n  \"math/rand\"  // gives rand.Intn\n)\n```\n\nBoth are the same.\n\nSee: [Importing](https://tour.golang.org/basics/1)\n\n### Aliases\n\n```go\nimport r \"math/rand\"\n```\n{: data-line=\"1\"}\n\n```go\nr.Intn()\n```\n\n### Exporting names\n\n```go\nfunc Hello () {\n  ···\n}\n```\n\nExported names begin with capital letters.\n\nSee: [Exported names](https://tour.golang.org/basics/3)\n\n### Packages\n\n```go\npackage hello\n```\n\nEvery package file has to start with `package`.\n\n## Concurrency\n{: .-three-column}\n\n### Goroutines\n\n```go\nfunc main() {\n  // A \"channel\"\n  ch := make(chan string)\n\n  // Start concurrent routines\n  go push(\"Moe\", ch)\n  go push(\"Larry\", ch)\n  go push(\"Curly\", ch)\n\n  // Read 3 results\n  // (Since our goroutines are concurrent,\n  // the order isn't guaranteed!)\n  fmt.Println(<-ch, <-ch, <-ch)\n}\n```\n{: data-line=\"3,6,7,8,13\"}\n\n```go\nfunc push(name string, ch chan string) {\n  msg := \"Hey, \" + name\n  ch <- msg\n}\n```\n{: data-line=\"3\"}\n\nChannels are concurrency-safe communication objects, used in goroutines.\n\nSee: [Goroutines](https://tour.golang.org/concurrency/1), [Channels](https://tour.golang.org/concurrency/2)\n\n### Buffered channels\n\n```go\nch := make(chan int, 2)\nch <- 1\nch <- 2\nch <- 3\n// fatal error:\n// all goroutines are asleep - deadlock!\n```\n{: data-line=\"1\"}\n\nBuffered channels limit the amount of messages it can keep.\n\nSee: [Buffered channels](https://tour.golang.org/concurrency/3)\n\n### Closing channels\n\n#### Closes a channel\n\n```go\nch <- 1\nch <- 2\nch <- 3\nclose(ch)\n```\n{: data-line=\"4\"}\n\n#### Iterates across a channel until its closed\n\n```go\nfor i := range ch {\n  ···\n}\n```\n{: data-line=\"1\"}\n\n#### Closed if `ok == false`\n\n```go\nv, ok := <- ch\n```\n\nSee: [Range and close](https://tour.golang.org/concurrency/4)\n\n### WaitGroup\n\n```go\nimport \"sync\"\n\nfunc main() {\n  var wg sync.WaitGroup\n  \n  for _, item := range itemList {\n    // Increment WaitGroup Counter\n    wg.Add(1)\n    go doOperation(&wg, item)\n  }\n  // Wait for goroutines to finish\n  wg.Wait()\n  \n}\n```\n{: data-line=\"1,4,8,12\"}\n\n```go\nfunc doOperation(wg *sync.WaitGroup, item string) {\n  defer wg.Done()\n  // do operation on item\n  // ...\n}\n```\n{: data-line=\"2\"}\n\nA WaitGroup waits for a collection of goroutines to finish. The main goroutine calls Add to set the number of goroutines to wait for. The goroutine calls `wg.Done()` when it finishes.\nSee: [WaitGroup](https://golang.org/pkg/sync/#WaitGroup)\n\n\n## Error control\n\n### Defer\n\n```go\nfunc main() {\n  defer fmt.Println(\"Done\")\n  fmt.Println(\"Working...\")\n}\n```\n{: data-line=\"2\"}\n\nDefers running a function until the surrounding function returns.\nThe arguments are evaluated immediately, but the function call is not ran until later.\n\nSee: [Defer, panic and recover](https://blog.golang.org/defer-panic-and-recover)\n\n### Deferring functions\n\n```go\nfunc main() {\n  defer func() {\n    fmt.Println(\"Done\")\n  }()\n  fmt.Println(\"Working...\")\n}\n```\n{: data-line=\"2,3,4\"}\n\nLambdas are better suited for defer blocks.\n\n```go\nfunc main() {\n  var d = int64(0)\n  defer func(d *int64) {\n    fmt.Printf(\"& %v Unix Sec\\n\", *d)\n  }(&d)\n  fmt.Print(\"Done \")\n  d = time.Now().Unix()\n}\n```\n{: data-line=\"3,4,5\"}\nThe defer func uses current value of d, unless we use a pointer to get final value at end of main.\n\n## Structs\n{: .-three-column}\n\n### Defining\n\n```go\ntype Vertex struct {\n  X int\n  Y int\n}\n```\n{: data-line=\"1,2,3,4\"}\n\n```go\nfunc main() {\n  v := Vertex{1, 2}\n  v.X = 4\n  fmt.Println(v.X, v.Y)\n}\n```\n\nSee: [Structs](https://tour.golang.org/moretypes/2)\n\n### Literals\n\n```go\nv := Vertex{X: 1, Y: 2}\n```\n\n```go\n// Field names can be omitted\nv := Vertex{1, 2}\n```\n\n```go\n// Y is implicit\nv := Vertex{X: 1}\n```\n\nYou can also put field names.\n\n### Pointers to structs\n\n```go\nv := &Vertex{1, 2}\nv.X = 2\n```\n\nDoing `v.X` is the same as doing `(*v).X`, when `v` is a pointer.\n\n## Methods\n\n### Receivers\n\n```go\ntype Vertex struct {\n  X, Y float64\n}\n```\n\n```go\nfunc (v Vertex) Abs() float64 {\n  return math.Sqrt(v.X * v.X + v.Y * v.Y)\n}\n```\n{: data-line=\"1\"}\n\n```go\nv := Vertex{1, 2}\nv.Abs()\n```\n\nThere are no classes, but you can define functions with _receivers_.\n\nSee: [Methods](https://tour.golang.org/methods/1)\n\n### Mutation\n\n```go\nfunc (v *Vertex) Scale(f float64) {\n  v.X = v.X * f\n  v.Y = v.Y * f\n}\n```\n{: data-line=\"1\"}\n\n```go\nv := Vertex{6, 12}\nv.Scale(0.5)\n// `v` is updated\n```\n\nBy defining your receiver as a pointer (`*Vertex`), you can do mutations.\n\nSee: [Pointer receivers](https://tour.golang.org/methods/4)\n\n## Interfaces\n\n### A basic interface\n\n```go\ntype Shape interface {\n  Area() float64\n  Perimeter() float64\n}\n```\n\n### Struct\n\n```go\ntype Rectangle struct {\n  Length, Width float64\n}\n```\n\nStruct `Rectangle` implicitly implements interface `Shape` by implementing all of its methods.\n\n### Methods\n\n```go\nfunc (r Rectangle) Area() float64 {\n  return r.Length * r.Width\n}\n\nfunc (r Rectangle) Perimeter() float64 {\n  return 2 * (r.Length + r.Width)\n}\n```\n\nThe methods defined in `Shape` are implemented in `Rectangle`.\n\n### Interface example\n\n```go\nfunc main() {\n  var r Shape = Rectangle{Length: 3, Width: 4}\n  fmt.Printf(\"Type of r: %T, Area: %v, Perimeter: %v.\", r, r.Area(), r.Perimeter())\n}\n```\n\n## References\n\n### Official resources\n{: .-intro}\n\n- [A tour of Go](https://tour.golang.org/welcome/1) _(tour.golang.org)_\n- [Golang wiki](https://github.com/golang/go/wiki/) _(github.com)_\n- [Effective Go](https://golang.org/doc/effective_go.html) _(golang.org)_\n\n### Other links\n{: .-intro}\n\n- [Go by Example](https://gobyexample.com/) _(gobyexample.com)_\n- [Awesome Go](https://awesome-go.com/) _(awesome-go.com)_\n- [JustForFunc Youtube](https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw) _(youtube.com)_\n- [Style Guide](https://github.com/golang/go/wiki/CodeReviewComments) _(github.com)_\n"
  },
  {
    "path": "goby.md",
    "content": "---\ntitle: Goby\nprism_languages: [ruby]\nweight: -3\nupdated: 2018-12-06\ncategory: Ruby\nintro: |\n  Goby's language design is based on Ruby language's, slim and shaped up. Differences in syntax between them is very small.\n---\n\n\n## Getting started\n\n### Hello world\n{: .-prime}\n\n#### hello.gb\n{: .-file}\n\n```ruby\nclass Greet\n  attr_accessor :audience, :head, :tail\n  \n  def initialize\n    @head = \"Hello, \"\n    @tail = \"!\"\n  end\n\n  def name\n    audience.name\n  end\n\n  def say\n    puts head + name + tail\n  end\nend\n\nmodule MyName\n  attr_reader :name\n\n  def initialize\n    @name = self.class.to_s\n  end\nend\n\nclass World\n  include MyName\nend\n\ngreet = Greet.new\ngreet.audience = World.new\ngreet.say\n```\n\nThen run:\n\n```bash\n$ goby hello.gb\n#=> Hello, World!\n```\n\n### REPL (igb)\n\n```bash\n$ goby -i\n```\n\n* `reset`: reset the VM\n* `exit`: exit REPL\n* `help`: show help\n* ctrl-c: cancel the block entered, or exit (on top level)\n\nSee [igb manual & test script](https://github.com/goby-lang/goby/blob/master/igb/manual_test.md). You can use `readline` features such as command history by arrow keys.\n\n## Variables\n{: .-three-column}\n\n### Local variable\n\n```ruby\nzip101 = \"233-7383\"\nmagic_number = 42\n```\n\nShould be \"`[a-z][a-z0-9_]+`\"(snake_case).\n\n### Instance variable\n\n```ruby\nmodule State\n  def initialize(state)\n    @state = state      # declaring an instance variable by assignment\n  end\n  def show\n    @state              # accessible from other instance methods\n  end\nend\n\nstate = State.new \"success\"\nstate.show\n#=> success\n```\n\nShould be \"`@[a-z][a-z0-9_]+`\"(snake_case).\n\n### Multiple assignment\n\n```ruby\n# array literal\na, b, c = [1, 2, 3]\n\n# array with '*'\na = [1, 2, 3]\nx, y, z = *a\n\n# array literal with '*'\na, b, c = *[1, 2, 3]\n\n# bare assignment: unsupported\na, b, c = 1, 2, 3  #=> unexpected 3 Line: 0\n```\n\n### Black hole variable\n\n```ruby\n# '_' is write-only\na, _ = [1, 2]\n```\n\n### Class variable\n\nUnsupported.\n\n### Global variable\n\nUnsupported.\n\n## Method definition\n\n### Method definition and calling\n\n```ruby\ndef foo_bar?(baz)\n  if baz == \"Hi, Goby!\"\n    true\n  else\n    false\n  end\nend\n\nfoo_bar? \"Hi, Goby!\" #=> true\n```\n\nMethod name should be \"`[a-z][a-z0-9_]+\\??`\" (snake_case). You can omit the trailing \"`()`\" only if no parameters are taken. Trailing using \"`!`\" is **unsupported**.\n\n### Order of method parameter\n\n```ruby\ndef foo(normal, default=\"value\", hash={}, ary=[], keyword:, keyword_default:\"key\", *sprat)\nend\n```\n\nIf a default value is provided to a parameter, the parameter can be omitted when calling. `()` can be omitted. The order of parameters in method definition is restricted as follows:\n\n1. **normal parameters** (like `a`)\n2. **normal parameters with default value** (like `a=1`)\n3. **optional parameters** (array or hash, like `ary=[]` or `hs={}`)\n4. **keyword parameters** (like `kwd:`) \n5. **keyword parameters with default value** (like `kwd: 1` or `ary: [1,2,3]` or `hsh: {key: \"value\"}`)\n6. **splat parameters** (like `*sp`)\n\nOr you will receive an error.\n\n### Keyword parameter (WIP)\n\n```ruby\ndef foo(process:, verb: :GET, opt:{ csp: :enabled }, ary: [1, 2, 3])\nend\n```\n\n### Returning value\n\n```ruby\nPI = 3.14\ndef area(radius)\n  radius * PI      # returns the result of evaluation\nend\n\narea 6             #=> 18.84\n```\n\n### Returning multiple value\n\n```ruby\ndef my_array\n  [1, 2, 3]\nend\n\nmy_array   #=> [1, 2, 3]\n```\n\n### Instance method\n\n```ruby\nmodule Foo\n  def bar       # defining instance method\n    puts \"bar\"\n  end\n  \n  def baz(count, email: \"goby@example.com\")\n    count.times do\n      puts email\n    end\n  end\nend\n\nfoo = Foo.new\nfoo.bar     #=> bar\nfoo.baz(3)  #↓\ngoby@example.com\ngoby@example.com\ngoby@example.com\n```\n\n### Singleton method #1\n\n```ruby\nstr = \"Goby\"\ndef str.foo     #1 singleton method on the object\n  self * 2\nend\n\nstr.foo\n#=> GobyGoby\n```\n\n### Singleton method #2\n\n```ruby\nmodule Foo\n  def self.bar  #2 singleton method with `self.`\n    92\n  end\nend\n```\n\n### Singleton method #3\n\n```ruby\nmodule Foo  \n  def Foo.bar   #3 singleton method with a class name (unrecommended)\n    88\n  end\nend\n```\n\n### Singleton method #4\n\n```ruby\nmodule Foo end\n\ndef Foo.bar     #4 singleton methods outside the Foo\n  9999\nend\n\nFoo.bar #=> 9999\n```\n\n### Attribute accessor method\n\n```ruby\nclass Foo\n  attr_accessor :bar, :baz\n\n  def initialize\n    @bar = 42\n    @baz = 99\n  end\nend\n\nfoo = Foo.new\n\nfoo.bar = 77\nfoo.baz = 88\n```\n\nYou can use the following shorthands to declare attribute accessor methods in classes/modules:\n\n* `attr_accessor`\n* `attr_reader`\n* `attr_writer`\n\n### Private method (to be implemented)\n\n```ruby\nclass Foo\n  def bar\n    42\n  end\n  \n  def _baz  # leading '_' means private method\n    99\n  end\nend\n```\n\n## Module/Class definition\n{: .-three-column}\n\n### Module definition and `include`\n\n```ruby\nmodule Foo\n  def foo\n    \"Foo's instance method\"\n  end\nend\n\nclass Bar\n  include Foo   # to include Foo\nend\n\nBar.new.foo     #=> Foo's instance method\n```\n\nModule names should be \"`[A-Z][A-Za-z0-9_]+`\" (UpperCamelCase). Modules cannot be inherited.\n\n### Module definition and `extend`\n\n```ruby\nmodule Foo\n  def foo\n    \"Foo's instance method will be a singleton method\"\n  end\nend\n\nclass Bar\n  extend Foo   # to extend Foo  \nend\n\nBar.foo        #=> Foo's instance method will be a singleton method\n```\n\n`extend` is to use the instance methods in the specified modules as **singleton methods** in your class or module. \n\n### Module instantiation\n\n```ruby\nmodule Foo   #module definition\n  def foo   \n    99\n  end\nend\n\nFoo.new.foo  #=> 99\n```\n\nActually, Goby's module can be even **instantiated** via \"`new`\" like \"`Foo.new`\".\n\n### Class definition and inheritance\n\n```ruby\nclass Foo       # class definition\n  def bar\n    99\n  end\nend\n\nclass Baz < Foo # inheritance\nend\n\nBaz.new.bar  #=> 99\n```\n\nClass names should be \"`[A-Z][A-Za-z0-9]+`\" (UpperCamelCase). Inheritance with \"`<`\" is supported.\n\n### Constants\n\n```ruby\nHTTP_ERROR_404 = 404\nHTTP_ERROR_404 = 500    # error\n```\n\nConstants should be \"`[A-Z][A-Za-z0-9_]+`\" (UPPER_SNAKECASE). Constants are **not reentrant** and the scope is **global**.\n\n### Redefining class/modules\n\n```ruby\nclass Foo\n  def bar\n    99\n  end\nend\n\nclass Foo\n  def bar  # redefining is possible\n    77\n  end\nend\n```\n\n### Namespaces\n\n```ruby\nclass Foo\n  module Bar\n    MAGIC = 99\n    def baz\n      99\n    end\n  end\nend\n\nFoo::Bar.new.baz     # Use '::' for namespacing\nFoo::Bar::MAGIC      # Use '::' for namespacing\n```\n\n## Load library\n\n### `require`\n\n```ruby\nrequire(\"uri\")   # to activate URL class\n\nu = URI.parse(\"http://example.com\")\nu.scheme   #=> \"http\"\n```\t\n\n### `require_relative`\n\n```ruby\nrequire_relative(\"bar\")  # loading the local bar.gb\n\nclass Foo\n  def self.bar(x)\n    Bar.foo do |ten|\n      x * ten\n    end\n  end\n\n  def self.baz\n    yield(100)\n  end\nend\n```\n\n## Literal\n{: .-three-column}\n\n### Keyword\n\n`def`, `true`, `false`, `nil`, `if`, `elsif`, `else`, `case`, `when`, `return`, `self`, `end`, `while`, `do`, `yield`, `get_block`, `next`, `class`, `module`, `break`\n\n### String literal\n\n```ruby\n\"double quote\"\n'single quote'\n```\n\nDouble and single quotation can be used.\n\n### Symbol literal\n\n```ruby\n:symbol           # equivalent to \"symbol\"\n{ symbol: \"value\" }\n```\n\nGoby's symbol (using `:`) is always `String` class.\n\n### Numeric literal\n\n```ruby\nyear   =  2018   # Integer\noffset = -42     # Integer\nPI     = 3.14    # Float\nG      = -9.8    # Float\n```\n\n### Array literal\n\n```ruby\n[1, 2, 3, \"hello\", :goby, { key: \"value\"}]\n[1, 2, [3, 4], 5, 6]\n```\n\n### Hash literal\n\n```ruby\nh = { key: \"value\", key2: \"value2\" }\nh[:key2]   #=> value2\n```\n\nHash literal's keys should always be **symbol literals**. \n\n### Range literal\n\n```ruby\n(1..10).each do |x|    # '..' represents a range\n  puts x*x\nend\n```\n\n### Boolean and `nil`\n\n```ruby\ntrue       # Boolean class\nfalse      # Boolean class\nnil        # Null class\n\n!nil  #=> true\n```\n\nAny objects except `nil` and `false` will be treated as `true` on conditionals.\n\n## Operator\n\n### Arithmetic/logical/assignment operators\n\n```ruby\n+           # unary\n**          # power\n-           # unary\n* / %       # multiplication, division, modulus\n+ -         # addition, subtraction\n!           # logical inversion\n> >= < <=   # inequality comparison\n== !=       # equality comparison, negative comparison\n&&          # logical AND\n||          # logical OR\n+= -=       # shorthand of addition/subtraction\n=           # assignment\n```\n\n*Priority of operators are TBD\n\n### Other operators\n\n```ruby\n()          # changing priority of interpretation\n[]          # array literal\n*           # multiple assignment\n..          # range\n```\n\n*Priority of operators are TBD\n\n### Delimiter\n\n```ruby\nclass Foo; end   # ';' to delimit\n\nclass Bar end    # recommended\n```\n\n### String interpolation (to be implemented)\n\n```ruby\nputs \"Error: #{error_message}\"  # double quotation is required\n```\n\n### Comment\n\n```ruby\nputs \"Goby\"    # comments\n```\n\nUse the annotations to keep the comments concise.\n\n- `TODO`\n- `FIXME`\n- `OPTIMIZE`\n- `HACK`\n- `REVIEW`\n\n### I/O\n\n* `#puts`\n\n* special constants: `ARGV`, `STDIN`, `STDOUT`, `STDERR`, `ENV` \n\n## Flow control\n{: .-three-column}\n\n### `if`, `else`, `elsif`\n\n```ruby\ndef foo(str)\n  if str.size > 10\n    puts \"too big!\"\n  elsif str.size < 3\n    puts \"too short!\"\n  else\n    puts \"moderate\"\n  end\nend\n```\n\n`then` is **not** supported.\n\n### Break\n\n```ruby\ndef foo(tail)\n  (5..tail).each do |t|\n    if t % 2 == 0 && t % 5 == 0\n      puts \"ouch!\"\n      break       # finish the block\n    else\n      puts t\n    end\n  end\n  puts \"out of the block\"\nend\n\nfoo 20\n#=> 5 6 7 8 9\n#=> ouch!\n#=> out of the block\n```\n\n### Case\n\n```ruby\ndef foo(str)\n  case str\n  when \"Elf\"\n    puts \"You might be Aragorn II!\"\n  when \"Aragorn\"\n    puts \"Long time no see, Aragorn!\"\n  when \"Frodo\", \"Sam\", \"Gandalf\"\n    puts \"One of us!\"\n  else\n    puts \"You're not yourself\"\n  end\nend\n```\n\n### While\n\n```ruby\ndecr = 10\nwhile decr do\n  if decr < 1\n    break\n  end\n  puts decr\n  decr -= 1\nend\n```\n\n`while`, conditional and a `do`/`end` block can be used for a loop.\n\n### Rescue\n\nUnder construction. Join [#605](https://github.com/goby-lang/goby/issues/605).\n\n## Block\n{: .-three-column}\n\n### Block\n\n```ruby\ndef foo(ary: [1, 2, 3])\n  ary.each do |s|      # start of the block with |block variable|\n    puts s\n  end                  # end of the block\nend\n```\n\n`{ }` cannot be used for forming a block.\n\n### `yield`\n\n```ruby\ndef foo\n  yield(10)  # executes the block given\nend\n\nfoo do |ten|\n  ten + 20\nend\n```\n\n### Block object and `call`\n\n```ruby\nb = Block.new do\n  100\nend\n\nb.call  #=> 100\n```\n\n`Block.new` can take a block and then `call`.\n\n### Passing a block\n\n```ruby\ndef baz\n  1000\nend\n\nclass Foo\n  def exec_block(block)\n\tblock.call\n  end\n\n  def baz\n    100\n  end\nend\n\nb = Block.new do\n  baz\nend\n\nf = Foo.new\nf.exec_block(b)\n```\n\n### Passing a block with block arguments\n\n```ruby\nb = Block.new do |arg, offset|\n  arg + 1000 - offset\nend\n\nb.call(49, 500) #=> 549\n```\n\n### Special `get_block` keyword\n\n```ruby\ndef bar(block)\n  # runs the block object and the block arg simultaneously\n  block.call + get_block.call\nend\n\ndef foo\n  bar(get_block) do # passes two blocks to `bar`\n    20\n  end\nend\n\nfoo do\n  10\nend\n```\n\n`get_block` is not a method but a **keyword** to retrieve a given block argument as a block object. By this, you can pass around or `call` the given block arguments as block objects. \n\n### Closure\n\n```ruby\ncount = 0          # the declaration is used\nb = Block.new do\n  count += 1       # the block looks preserving the `count`\nend\n\nclass Foo\n  def bar(blk)\n    count = 9      # (does not affect)\n    puts blk.call  # local variable is resolved to the one above\n  end\nend\n\nFoo.new.bar b  #=> 1\nFoo.new.bar b  #=> 2\nFoo.new.bar b  #=> 3\n```\n\n## Native class (Primary)\n{: .-three-column}\n\nGoby's most \"native\" classes cannot instantiate with `new` in principle. \n\n### `Object`\n\n```ruby\nBar.ancestors\n#» [Bar, Foo, Object]\nBar.singleton_class.ancestors\n#» [#<Class:Bar>, #<Class:Object>, Class, Object]\n```\n\n`Object` is actually just for creating singleton classes. See `Class`.\n\n* **`Object.methods`**: `!`, `!=`, `==`, `block_given?`, `class`, `exit`, `instance_eval`, `instance_variable_get`, `instance_variable_set`, `is_a?`, `methods`, `nil?`, `object_id`, `puts`, `raise`, `require`, `require_relative`, `send`, `singleton_class`, `sleep`, `thread`, `to_s`, `<`, `<=`, `>`, `>=`, `ancestors`, `attr_accessor`, `attr_reader`, `attr_writer`, `extend`, `include`, `name`, `new`, `superclass`\n\n* **`Object.new.methods`**: `!`, `!=`, `==`, `block_given?`, `class`, `exit`, `instance_eval`, `instance_variable_get`, `instance_variable_set`, `is_a?`, `methods`, `nil?`, `object_id`, `puts`, `raise`, `require`, `require_relative`, `send`, `singleton_class`, `sleep`, `thread`, `to_s`\n\n### `Class`\n\n```ruby\nString.ancestors      #=> [String, Object]\n```\n\n`Class` and `Object`can actually be regarded as the same and you don't need to distinguish them in almost all the cases. \n\n* **`Class.methods`**: `<`, `<=`, `>`, `>=`, `ancestors`, `attr_accessor`, `attr_reader`, `attr_writer`, `extend`, `include`, `name`, `new`, `superclass`, `!`, `!=`, `==`, `block_given?`, `class`, `exit`, `instance_eval`, `instance_variable_get`, `instance_variable_set`, `is_a?`, `methods`, `nil?`, `object_id`, `puts`, `raise`, `require`, `require_relative`, `send`, `singleton_class`, `sleep`, `thread`, `to_s`\n\n### `String`\n\n```ruby\nputs \"Hello\" + ' ' + 'world'  #=> Hello world\n```\n\nFixed to **UTF-8** with mb4 support.\n\n* **`String.methods`**: `fmt`,\n    * the rest: `Class.methods`\n* **`\"a\".methods`**:  `!=`, `*`, `+`, `<`, `<=>`, `==`, `=~`, `>`, `[]`, `[]=`, `capitalize`, `chop`, `concat`, `count`, `delete`, `downcase`, `each_byte`, `each_char`, `each_line`, `empty?`, `end_with?`, `eql?`, `fmt`, `include?`, `insert`, `length`, `ljust`, `match`, `new`, `replace`, `replace_once`, `reverse`, `rjust`, `size`, `slice`, `split`, `start_with`, `strip`, `to_a`, `to_bytes`, `to_d`, `to_f`, `to_i`, `to_s`, `upcase`,\n    * the rest: `Object.new.methods`\n\n### `Integer`\n\n```ruby\n37037 * 27      #=> 999999\n```\n\n* **`Integer.methods`**: the same as `Class.methods`\n* **`1.methods`**: `!=`, `%`, `*`, `**`, `+`, `-`, `/`, `<`, `<=`, `<=>`, `==`, `>`, `>=`, `even?`, `new`, `next`, `odd?`, `pred`, `ptr`, `times`, `to_f`, `to_float32`, `to_float64`, `to_i`, `to_int`, `to_int16`, `to_int32`, `to_int64`, `to_int8`, `to_s`, `to_uint`, `to_uint16`, `to_uint32`, `to_uint64`, `to_uint8`\n    * the rest: `Object.new.methods`\n\n### `Array`\n\n```ruby\n[1, \"2\", :card, [4, 5], { john: \"doe\" }]\n```\n\n* **`Array.methods`**: the same as `Class.methods`\n* **`[1].methods`**: `*`, `+`, `[]`, `[]=`, `any?`, `at`, `clear`, `concat`, `count`, `delete_at`, `dig`, `each`, `each_index`, `empty?`, `first`, `flatten`, `include?`, `join`, `last`, `lazy`, `length`, `map`, `new`, `pop`, `push`, `reduce`, `reverse`, `reverse_each`, `rotate`, `select`, `shift`, `to_enum`, `unshift`, `values_at`\n    * the rest: `Object.new.methods`\n\n### `Hash`\n\n```ruby\nh = { key: \"value\" }\nh = { \"key\": \"value\" }  #=> error\n\nh[\"key\"]  #=> value\nh[:key]   #=> value\n```\n\nKeys in hash literals should be **symbol literals**, while Hash index can be either string or symbol literals.\n\n* **`Hash.methods`**: the same as `Class.methods`\n* **`{ key: \"value\" }.methods`**: `[]`, `[]=`, `any?`, `clear`, `default`, `default=`, `delete`, `delete_if`, `dig`, `each`, `each_key`, `each_value`, `empty?`, `eql?`, `fetch`, `fetch_values`, `has_key?`, `has_value?`, `keys`, `length`, `map_values`, `merge`, `new`, `select`, `sorted_keys`, `to_a`, `to_json`, `to_s`, `transform_values`, `values`, `values_at`\n    * the rest: `Object.new.methods`\n\n### `Range`\n\n```ruby\n(1..10).each do |i|\n  puts i ** 2\nend\n```\n\n* **`Range.methods`**: the same as `Class.methods`\n* **`(1..10).methods`**: `!=`, `==`, `bsearch`, `each`, `first`, `include?`, `last`, `lazy`, `map`, `new`, `size`, `step`, `to_a`, `to_enum`\n    * the rest: `Object.new.methods`\n\n### `Block`\n\n```ruby\nb = Block.new do\n  100\nend\n\nb.call  #=> 100\n```\n\n* **`Block.methods`**: the same as `Class.methods`\n* **`(Block.new do end).methods`**: `call`\n    * the rest: `Object.new.methods`\n\n## Native class (secondary)\n{: .-three-column}\n\n### `Float`\n\n```ruby\n1.1 + 1.1   # => -2.2\n2.1 * -2.1  # => -4.41\n```\n\nFloat literals like `3.14` or `-273.15`. `Float` class is based on Golang's `float64` type.\n\n* **`Float.methods`**: the same as `Class.methods`\n* **`3.14.methods`**: `!=`, `%`, `*`, `**`, `+`, `-`, `/`, `<`, `<=`, `<=>`, `==`, `>`, `>=`, `new`, `ptr`, `to_d`, `to_i`\n    * the rest: `Object.new.methods`\n\n### `Decimal`\n\n```ruby\n\"3.14\".to_d            # => 3.14\n\"-0.7238943\".to_d      # => -0.7238943\n\"355/113\".to_d         \n# => 3.1415929203539823008849557522123893805309734513274336283185840\n\na = \"16.1\".to_d\nb = \"1.1\".to_d\ne = \"17.2\".to_d\na + b # => 0.1\na + b == e # => true\n\n('16.1'.to_d  + \"1.1\".to_d).to_s #=> 17.2\n('16.1'.to_f  + \"1.1\".to_f).to_s #=> 17.200000000000003\n```\n\nExperimental: the size is arbitrary and internally a fraction from Golang's `big.Rat` type. Decimal literal is TBD for now and you can get `Decimal` number via `to_d` method from `Integer`/`Float`/`String`.\n\n* **`Decimal.methods`**: the same as `Class.methods`\n* **`(1.1).to_d.methods`**: `!=`, `*`, `**`, `+`, `-`, `/`, `<`, `<=`, `<=>`, `==`, `>`, `>=`, `denominator`, `fraction`, `inverse`\n    * the rest: `Object.new.methods`\n\n### `Regexp`\n\n```ruby\na = Regexp.new(\"orl\")\na.match?(\"Hello World\")   #=> true\na.match?(\"Hello Regexp\")  #=> false\n\nb = Regexp.new(\"😏\")\nb.match?(\"🤡 😏 😐\")    #=> true\nb.match?(\"😝 😍 😊\")    #=> false\n\nc = Regexp.new(\"居(ら(?=れ)|さ(?=せ)|る|ろ|れ(?=[ばる])|よ|(?=な[いかくけそ]|ま[しすせ]|そう|た|て))\")\nc.match?(\"居られればいいのに\")  #=> true\nc.match?(\"居ずまいを正す\")      #=> false\n```\n\nUsing `/ /` is to be implemented.\n\n* **`Regexp.methods`**: the same as `Class.methods`\n* **`Regexp.new(\"^aa$\").methods`**: `==`, `match?`\n    * the rest: `Object.new.methods`\n\n### `MatchData`\n\n```ruby\n# numbered capture\n'abcd'.match(Regexp.new('(b.)'))\n#=> #<MatchData 0:\"bc\" 1:\"bc\">\n\n# named capture\n'abcd'.match(Regexp.new('a(?<first>b)(?<second>c)'))\n#=> #<MatchData 0:\"abc\" first:\"b\" second:\"c\">\n\n# converting to hash\n» 'abcd'.match(Regexp.new('a(?<first>b)(?<second>c)')).to_h\n#» { 0: \"abc\", first: \"b\", second: \"c\" }\n```\n\nThe number keys in the captures are actually `String` class.The key `0` is the matched string.\n\n* **`MatchData.methods`**: the same as `Class.methods`\n* **`'abcd'.match(Regexp.new('(b.)')).methods`**: `captures`, `length`, `new`, `to_a`, `to_h`\n    * the rest: `Object.new.methods`\n\n### `File`\n\n```ruby\nf = File.new(\"../test_fixtures/file_test/size.gb\")\nf.name  #=> \"../test_fixtures/file_test/size.gb\"\n```\n\n* **`File.methods`**: `basename`, `chmod`, `delete`, `exist?`, `extname`, `join`\n    * the rest: `Class.methods`\n* **`File.new.methods`**: `basename`, `chmod`, `close`, `delete`, `exist?`, `extname`, `join`, `name`\n    * the rest: `Object.new.methods`\n\n## Native class (Golang-oriented)\n{: .-three-column}\n\n### `GoMap`\n\n```ruby\nh = { foo: \"bar\" }\nm = GoMap.new(h)    # to pass values to Golang's code\nh2 = m.to_hash\nh2[:foo]   #=> \"bar\"\n```\n\n* **`GoMap.methods`**: the same as `Class.methods`\n* **`GoMap.new.methods`**: `get`, `set`, `to_hash`\n    * the rest: `Object.new.methods`\n\n### `Channel`\n\n```ruby\nc = Channel.new\n\n1001.times do |i| # i start from 0 to 1000\n  thread do\n  \tc.deliver(i)\n  end\nend\n\nr = 0\n1001.times do\n  r = r + c.receive\nend\n\nr #=> 500500\n```\n\n`Channel` class is to hold channels to work with `#thread`. See `thread`.\n\n* **`Channel.methods`**: the same as `Class.methods`\n* **`Channel.new.methods`**: `close`, `deliver`, `new`, `receive`\n    * the rest: `Object.new.methods`\n\n## Enumerator & lazy\n\nPretty new experimental library.\n\n### `LazyEnumerator`\n\n```ruby\n# creating a lazy enumerator\nenumerator = LazyEnumerator.new(ArrayEnumerator.new([1, 2, 3])) do |value|\n\t2 * value\nend\nresult = []\n\nenumerator.each do |value|\n\tresult.push(value)\nend\n\nresult   #=> [2, 4, 6]\n```\n\nA shorthand `#lazy` method is also provided in `Array` and `Range` by now. See \"Tips & tricks\" below. \n\n* **`LazyEnumerator.methods`**: the same as `Class.methods`\n* **`[1, 2].lazy`**: `each`, `first`, `has_next?`, `initialize`, `map`, `next`\n    * the rest: `Object.new.methods`\n\n### `ArrayEnumerator`\n\n```ruby\niterated_values = []\n\nenumerator = ArrayEnumerator.new([1, 2, 4])\n\nwhile enumerator.has_next? do\n\titerated_values.push(enumerator.next)\nend\n\niterated_values   #=> [1, 2, 4]\n```\n\n* **`ArrayEnumerator.methods`**: the same as `Class.methods`\n* **`ArrayEnumerator.new([1, 2, 3]).methods`**: `has_next?`, `initialize`, `next`\n    * the rest: `Object.new.methods`\n\n### `RangeEnumerator`\n\n```ruby\niterated_values = []\n\nenumerator = RangeEnumerator.new((1..4))\n\nwhile enumerator.has_next? do\n\titerated_values.push(enumerator.next)\nend\n\niterated_values   #=> [1, 2, 3, 4]\n```\n\n* **`RangeEnumerator.methods`**: the same as `Class.methods`\n* **`RangeEnumerator.new(1..2).methods`**: `has_next?`, `initialize`, `next`\n    * the rest: `Object.new.methods`\n\n## Special class\n\n### `Boolean`\n\n```ruby\ntrue.class  #=> Boolean\nfalse.class #=> Boolean\n```\n\nA special class that just to hold `true` and `false`. Cannot be instantiate.\n\n### `Null`\n\n```ruby\nnil.class   #=> Null\n```\n\nA special class that just to hold `nil`. Cannot be instantiate.\n\n### `Method`\n\n(A special dummy class that just holds methods defined by Goby code.)\n\n### `Diggable`\n\nProvides `#dig` method. Currently. `Array` and `Hash` classes' instance can be `Diggable`.\n\n```ruby\n[1, 2].dig(0, 1)  #=> TypeError: Expect target to be Diggable, got Integer\n```\n\n## Testing framework\n\n### `Spec`\n\n```ruby\nrequire \"spec\"\n\nSpec.describe Spec do\n  it \"fails and exit with code 1\" do\n\texpect(1).to eq(2)\n  end\nend\n\nSpec.run\n```\n\n* **`Spec.methods`**: `describe`, `describes`, `instance`, `run`\n    * the rest: `Object.methods`\n* **`Spec.new.methods`**: `describes`, `initialize`, `run`, `session_successful`, `session_successful=`\n    * the rest: `Hash.new.methods`\n\n## Tips & tricks\n\n### Showing methods\n\n```ruby\n» \"string\".methods\n#» [\"!=\", \"*\", \"+\", \"<\", \"<=>\", \"==\", \"=~\", \">\", \"[]\", \"[]=\", \"capitalize\", \"chop\", \"concat\", \"count\", \"delete\", \"downcase\", \"each_byte\", \"each_char\", \"each_line\", \"empty?\", \"end_with?\", \"eql?\", \"fmt\", \"include?\", \"insert\", \"length\", \"ljust\", \"match\", \"new\", \"replace\", \"replace_once\", \"reverse\", \"rjust\", \"size\", \"slice\", \"split\", \"start_with\", \"strip\", \"to_a\", \"to_bytes\", \"to_d\", \"to_f\", \"to_i\", \"to_s\", \"upcase\", \"!\", \"block_given?\", \"class\", \"exit\", \"instance_eval\", \"instance_variable_get\", \"instance_variable_set\", \"is_a?\", \"methods\", \"nil?\", \"object_id\", \"puts\", \"raise\", \"require\", \"require_relative\", \"send\", \"singleton_class\", \"sleep\", \"thread\"]\n```\n\n### Showing class\n\n```ruby\n» \"string\".class\n#» String\n```\n\n### Showing singleton class\n\n```ruby\n» \"moji\".singleton_class\n#» #<Class:#<String:842352325152>>\n\n» \"moji\".class.singleton_class\n#» #<Class:String>\n```\n\n### Showing ancestors\n\n```ruby\n» Integer.ancestors\n#» [Integer, Object]\n\n» \"moji\".class.ancestors\n#» [String, Object]\n```\n\n### Showing singleton classes' ancestors\n\n```ruby\n» \"moji\".class.singleton_class.ancestors\n#» [#<Class:String>, #<Class:Object>, Class, Object]\n```\n\n### Showing object's id\n\n```ruby\n» \"moji\".object_id\n#» 842352977920\n```\n\n### `#to_json`\n\n```ruby\nh = { a: 1, b: [1, \"2\", [4, 5, nil]]}\nh.to_json         # converts hash to JSON\n#=> {\"a\":1, \"b\":[1, \"2\", [4, 5, null]]}\n```\n\n### Customize `#to_json`\n\nOverwrite the `#to_json` in your class:\n\n```ruby\nclass JobTitle\n  def initialize(name)\n    @name = name\n  end\n\n  def to_json\n    { title: @name }.to_json\n  end\nend\n\nclass Person\n  def initialize(name, age)\n    @name = name\n    @age = age\n    @job = JobTitle.new(\"software engineer\")\n  end\n\n  def to_json\n    { name: @name, age: @age, job: @job }.to_json\n  end\nend\n\nstan = Person.new(\"Stan\", 23)\nh = { person: stan }\nh.to_json #=> {\"person\":{\"name\":\"Stan\",\"job\":{\"title\":\"software engineer\"},\"age\":23}}\n```\n\n### Lazy enumeration\n\nTo avoid N + 1 query.\n\n```ruby\nenumerator = [1, 2, 3].lazy.map do |value|\n\t2 * value\nend\nresult = []\n\nenumerator.each do |value|\n\tresult.push(value)\nend\n\nresult  #=> [2, 4, 6]\n```\t\n\nYou can call `#lazy.map` on `Array`, `Range`, or `JSON` objects. \n\n## Styling\n\n### Quick style guide\n\n* UTF-8 should be used.\n* Only two spaces `  ` should be used for one indentation.\n    * Tab cannot be used for indentation.\n* For more, follow [RuboCop's style guide](https://github.com/bbatsov/ruby-style-guide) in principle.\n\n### Document notation\n\n* `Class#instance_method` -- use `#` to represent instance methods in documents\n* `Class.class_method`\n* `Module.module_method`\n\n### Syntax highlighting\n\nReady for Vim and Sublime text. You can also use Ruby's syntax highlighting so far.\n\n## References\n\n### Official\n\n* Official site: [https://goby-lang.org/](https://goby-lang.org/)\n* Repository: [https://github.com/goby-lang/goby/](https://github.com/goby-lang/goby/)\n* DevHints: [https://devhints.io/goby](https://devhints.io/goby) (this page)\n\n### Readings for Goby developers\n\n* [Write an Interpreter in Go](https://interpreterbook.com/)\n* [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)\n* [Ruby under a microscope](http://patshaughnessy.net/ruby-under-a-microscope)\n* [YARV's instruction table](http://www.atdot.net/yarv/insnstbl.html)\n\n### JP resource\n\n* [Goby: Rubyライクな言語（1）Gobyを動かしてみる](https://techracho.bpsinc.jp/hachi8833/2017_11_10/47787)\n* [Gobyの組み込みクラスにメソッドを追加する方法](https://qiita.com/hanachin_/items/efc1c976a4f5749514ef)\n"
  },
  {
    "path": "google-webfonts.md",
    "content": "---\ntitle: Google Webfonts\nintro: |\n  Short snippets on using [Google Webfonts](https://google.com/fonts) in a web page.\n---\n\n### Link tag\n\n<!-- prettier-ignore -->\n```html\n<link href=\"http://fonts.googleapis.com/css?family=Open+Sans\" rel=\"stylesheet\" type=\"text/css\" />\n```\n\n### CSS import\n\n<!-- prettier-ignore -->\n```css\n/* One font */\n@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700');\n\n/* Combining multiple fonts */\n@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,400italic|Montserrat:400,700'');\n```\n\nGreat for using with [Codepen.io](https://codepen.io/) or similar websites!\n"
  },
  {
    "path": "google_analytics.md",
    "content": "---\ntitle: Google Analytics\ntags: [Archived]\narchived: This sheet describes an older version of Google Analytics (UA).\n---\n\n### Pageview\n\n    // Analytics.js\n    ga('create', 'UA-XXXX-Y', 'auto');\n    ga('send', 'pageview');\n\n### Track events\n\n    // ga.js\n    // [..., category, action, label, value (int), noninteraction (bool)]\n    _gaq.push(['_trackEvent', 'Videos', 'Play', 'Birthday video', true])\n    _gaq.push(['_trackEvent', 'Projects', 'Donate', 'Project name'])\n    _gaq.push(['_trackEvent', 'Accounts', 'Login'])\n\n    // Analytics.js\n    //       ,        ,  category,  action,  label,         value (int)\n    ga('send', 'event', 'button',   'click', 'nav buttons', 4);\n\n### Variables\n\n    // [..., index, name, value, scope (optional)]\n    _gaq.push(['_setCustomVar', 1, 'Logged in', 'Yes', 2]);\n\n    // Scope = 1 (visitor), 2 (session), 3 (page, default)\n\n### References\n\n- <https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingCustomVariables>\n- <https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide>\n"
  },
  {
    "path": "graphql.md",
    "content": "---\ntitle: GraphQL\nupdated: 2019-07-07\ncategory: API\n---\n\n## Intro\n\n## Queries\n{: .-three-column}\n\n### Basic query\n\n```js\n{ status }\n```\n\n#### ↓\n\n```js\n{ status: 'available' }\n```\n{: .-setup}\n\n### Nesting\n\n```js\n{ hero { name height } }\n```\n\n#### ↓\n\n```js\n{ hero:\n    { name: \"Luke Skywalker\",\n      height: 1.74 } }\n```\n{: .-setup}\n\n### Lists\n\n```js\n{ friends { name } }\n```\n\n#### ↓\n\n```js\n{ friends:\n    [ { name: \"Luke Skywalker\" },\n      { name: \"Han Solo\" },\n      { name: \"R2D2\" } ] }\n```\n{: .-setup}\n\nGraphQL queries look the same for both single items or lists of items.\n\n### Lookups\n\n```js\n{\n  hero(id: \"1000\") { id name }\n}\n```\n\n#### ↓\n\n```js\n{ hero:\n    { id: \"1000\",\n    { name: \"Luke Skywalker\" } }\n```\n{: .-setup}\n\n### Aliases\n\n```js\n{\n  luke: hero(id: \"1000\") { name }\n  han: hero(id: \"1001\") { name }\n}\n```\n\n#### ↓\n\n```js\n{ luke:\n    { name: \"Luke Skywalker\" },\n    han:\n    { name: \"Han Solo\" } }\n```\n{: .-setup}\n\n### Operation names and variables\n\n#### Query\n```js\nquery FindHero($id: String!) {\n  hero(id: $id) { name }\n}\n```\n\nJust to make things less ambiguous. Also, to use variables, you need an operation name.\n\n#### Variables\n\n```js\n{ id: '1000' }\n```\n\n### Mutations\n\n#### Query\n\n```js\n{ createReview($review) { id } }\n```\n\n#### Variables\n\n```js\n{ review: { stars: 5 } }\n```\n\n#### ↓\n\n```js\n{ createReview: { id: 5291 } }\n```\n\nMutations are just fields that do something when queried.\n\n### Multiple types\n\n```js\n{\n  search(q: \"john\") {\n    id\n    ... on User { name }\n    ... on Comment { body author { name } }\n  }\n}\n```\n\nGreat for searching.\n\n\nOver HTTP\n---------\n\n#### GET\n\n```js\nfetch('http://myapi/graphql?query={ me { name } }')\n```\n\n#### POST\n\n```js\nfetch('http://myapi/graphql', {\n  body: JSON.stringify({\n    query: '...',\n    operationName: '...',\n    variables: { ... }\n  })\n})\n```\n\nSchema\n------\n{: .-three-column}\n\n### Basic schemas\n\n```js\ntype Query {\n  me: User\n  users(limit: Int): [User]\n}\n\ntype User {\n  id: ID!\n  name: String\n}\n```\n\nSee: [sogko/graphql-shorthand-notation-cheat-sheet](https://raw.githubusercontent.com/sogko/graphql-shorthand-notation-cheat-sheet/master/graphql-shorthand-notation-cheat-sheet.png)\n\n### Built in types\n\n#### Scalar types\n\n| `Int` | Integer |\n| `Float` | Float |\n| `String` | String |\n| `Boolean` | Boolean |\n| `ID` | ID |\n\n#### Type definitions\n\n| `scalar` | Scalar type |\n| `type` | Object type |\n| `interface` | Interface type |\n| `union` | Union type |\n| `enum` | Enumerable type |\n| `input` | Input object type |\n\n#### Type modifiers\n\n| `String` | Nullable string |\n| `String!` | Required string |\n| `[String]` | List of strings |\n| `[String]!` | Required list of strings |\n| `[String!]!` | Required list of required strings |\n\n### Mutations\n\n```js\ntype Mutation {\n  users(params: ListUsersInput): [User]!\n}\n```\n\n### Interfaces\n\n```js\ninterface Entity {\n  id: ID!\n}\n\ntype User implements Entity {\n  id: ID!\n  name: String\n}\n```\n\n### Enums\n\n```js\nenum DIRECTION {\n  LEFT\n  RIGHT\n}\n\ntype Root {\n  direction: DIRECTION!\n}\n```\n{: data-line=\"1,2,3,4\"}\n\n### Unions\n\n```js\ntype Artist { ··· }\ntype Album { ··· }\n\nunion Result = Artist | Album\n\ntype Query {\n  search(q: String): [Result]\n}\n```\n{: data-line=\"4\"}\n\nReferences\n----------\n\n- <http://graphql.org/learn/queries/>\n- <http://graphql.org/learn/serving-over-http/>\n"
  },
  {
    "path": "gremlins.md",
    "content": "---\ntitle: Gremlins.js\ncategory: JavaScript libraries\nupdated: 2017-10-22\nweight: -1\nintro: |\n  [Gremlins](https://github.com/marmelab/gremlins.js) is a JavaScript library to do \"monkey-testing\" by providing random user input (clicks, scrolls, and so on).\n---\n\n## Example\n\n### Simple example\n\n```html\n<script src='https://cdn.jsdelivr.net/npm/gremlins/dist/gremlins.js'></script>\n<script>\ngremlins.createHorde().unleash()\n</script>\n```\n\n![](https://camo.githubusercontent.com/130e101ee69d4d9b6f065df0a0404c861eb5ce18/687474703a2f2f7374617469632e6d61726d656c61622e636f6d2f746f646f2e676966?q=99)\n\n### Custom gremlins\n\n```js\ngremlins.createHorde()\n  .allGremlins()\n  .gremlin(function () {\n    document.activeElement.blur()\n  })\n```\n{: data-line=\"3,4,5\"}\n\nRuns the given function at regular intervals.\n\n### Full example\n\n```js\ngremlins.createHorde()\n  .gremlin(gremlins.species.formFiller())\n  .gremlin(gremlins.species.clicker()\n    .clickTypes(['click'])\n    .canClick(element => { ··· })\n    .showAction((x, y) => { ··· }))\n  .gremlin(gremlins.species.scroller())\n  .mogwai(gremlins.mogwais.alert())\n  .mogwai(gremlins.mogwais.fps())\n  .mogwai(gremlins.mogwais.gizmo().maxErrors(2))\n  .unleash()\n```\n\nBy default, all gremlins and mogwais species are added to the horde. Do it this way to customize gremlins.\n\nSee: [Specifying gremlins](https://github.com/marmelab/gremlins.js#setting-gremlins-and-mogwais-to-use-in-a-test)\n\n## Hooks\n\n### Before and after\n\n```js\ngremlins.createHorde()\n  .before(function () {\n    this.log('sync')\n    console.profile('gremlins')\n  })\n  .after(function () {\n    this.log('done')\n    console.profileEnd()\n  })\n```\n{: data-line=\"2,6\"}\n\n### Asynchronous\n\n```js\ngremlins.createHorde()\n  .before(function (done) {\n    setTimeout(() => {\n      this.log('async')\n      done()\n    }, 500)\n  })\n```\n{: data-line=\"2\"}\n\n## References\n\n- [marmelab/gremlins.js](https://github.com/marmelab/gremlins.js)\n"
  },
  {
    "path": "grep.md",
    "content": "---\ntitle: GNU grep\ncategory: CLI\nupdated: 2021-08-23\n---\n\n### Usage\n{: .-prime}\n\n```bash\ngrep <options> pattern <file...>\n```\n\n### Matching options\n\n```bash\n-e, --regexp=PATTERN\n-f, --file=FILE\n-i, --ignore-case\n-v, --invert-match\n-w, --word-regexp\n-x, --line-regexp\n```\n\n### Pattern options\n\n```bash\n-F, --fixed-strings   # list of fixed strings\n-G, --basic-regexp    # basic regular expression (default)\n-E, --extended-regexp # extended regular expression\n-P, --perl-regexp     # perl compatible regular expression\n```\n\n### Expressions\n\n#### Basic Regular Expressions (BRE)\n\nIn BRE, these characters have a special meaning unless they are escaped with a backslash:\n\n`^ $ . * [ ] \\`\n\nHowever, these characters do not have any special meaning unless they are escaped with a backslash:\n\n`? + { } | ( )`\n\t\n#### Extended Regular Expressions (ERE)\n\nERE gives all of these characters a special meaning unless they are escaped with a backslash:\n\n`^ $ . * + ? [ ] ( ) | { }`\n\n#### Perl Compatible Regular Expressions (PCRE)\n\nPCRE has even more options such as additional anchors and character classes, lookahead/lookbehind, conditional expressions, comments, and more. See the [regexp cheatsheet](/regexp).\n\n### Output Options\n\n```bash\n-c, --count           # print the count of matching lines. suppresses normal output\n    --color[=WHEN]    # applies color to the matches. WHEN is never, always, or auto\n-m, --max-count=NUM   # stop reading after max count is reached\n-o, --only-matching   # only print the matched part of a line\n-q, --quiet, --silent\n-s, --no-messages     # suppress error messages about nonexistent or unreadable files\n```\n\n### Context Options\n\n```bash\n-B NUM, --before-context=NUM  # print NUM lines before a match\n-A NUM, --after-context=NUM   # print NUM lines after a match\n-C NUM, -NUM, --context=NUM   # print NUM lines before and after a match\n```\n\n### Examples\n\n```bash\n# Case insensitive: match any line in foo.txt\n# that contains \"bar\"\ngrep -i bar foo.txt\n\n#  match any line in bar.txt that contains\n# either \"foo\" or \"oof\"\ngrep -E \"foo|oof\" bar.txt\n\n# match anything that resembles a URL in\n# foo.txt and only print out the match\ngrep -oE \"https?://((\\w+[_-]?)+\\.?)+\" foo.txt\n\n# can also be used with pipes:\n# match any line that contains \"export\" in\n# .bash_profile, pipe to another grep that\n# matches any of the first set of matches\n# containing \"PATH\"\ngrep \"export\" .bash_profile | grep \"PATH\"\n\n# follow the tail of server.log, pipe to grep\n# and print out any line that contains \"error\"\n# and include 5 lines of context\ntail -f server.log | grep -iC 5 error\n```\n"
  },
  {
    "path": "gulp.md",
    "content": "---\ntitle: Gulp\ncategory: JavaScript libraries\ntags: [Archived]\narchived: The information on this sheet may possibly be outdated.\n---\n\n### Available plugins\n\n * gulp-ruby-sass\n * gulp-autoprefixer\n * gulp-minify-css\n * gulp-jshint\n * gulp-concat\n * gulp-uglify\n * gulp-imagemin\n * gulp-livereload (requires tiny-lr)\n * gulp-clean\n * gulp-cache\n * gulp-notify\n\n * gulp-header (headers in files)\n * gulp-mocha\n * gulp-stylus\n * gulp-compass\n * gulp-nodemon\n * gulp-size (displays size)\n\n### Example\n\n\n    // gulpfile.js\n    // Load plugins\n    var gulp = require('gulp'),\n        sass = require('gulp-ruby-sass'),\n        autoprefixer = require('gulp-autoprefixer'),\n        minifycss = require('gulp-minify-css'),\n        jshint = require('gulp-jshint'),\n        uglify = require('gulp-uglify'),\n        imagemin = require('gulp-imagemin'),\n        rename = require('gulp-rename'),\n        clean = require('gulp-clean'),\n        concat = require('gulp-concat'),\n        notify = require('gulp-notify'),\n        cache = require('gulp-cache'),\n        livereload = require('gulp-livereload'),\n        lr = require('tiny-lr'),\n        server = lr();\n\n    // Styles\n    gulp.task('styles', function() {\n      return gulp.src('src/styles/main.scss')\n        .pipe(sass({ style: 'expanded', }))\n        .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))\n        .pipe(gulp.dest('dist/styles'))\n        .pipe(rename({ suffix: '.min' }))\n        .pipe(minifycss())\n        .pipe(livereload(server))\n        .pipe(gulp.dest('dist/styles'))\n        .pipe(notify({ message: 'Styles task complete' }));\n    });\n\n    // Scripts\n    gulp.task('scripts', function() {\n      return gulp.src('src/scripts/**/*.js')\n        .pipe(jshint('.jshintrc'))\n        .pipe(jshint.reporter('default'))\n        .pipe(concat('main.js'))\n        .pipe(gulp.dest('dist/scripts'))\n        .pipe(rename({ suffix: '.min' }))\n        .pipe(uglify())\n        .pipe(livereload(server))\n        .pipe(gulp.dest('dist/scripts'))\n        .pipe(notify({ message: 'Scripts task complete' }));\n    });\n\n    // Images\n    gulp.task('images', function() {\n      return gulp.src('src/images/**/*')\n        .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))\n        .pipe(livereload(server))\n        .pipe(gulp.dest('dist/images'))\n        .pipe(notify({ message: 'Images task complete' }));\n    });\n\n    // Clean\n    gulp.task('clean', function() {\n      return gulp.src(['dist/styles', 'dist/scripts', 'dist/images'], {read: false})\n        .pipe(clean());\n    });\n\n    // Default task\n    gulp.task('default', ['clean'], function() {\n        gulp.start('styles', 'scripts', 'images');\n    });\n\n    // Watch\n    gulp.task('watch', function() {\n\n      // Listen on port 35729\n      server.listen(35729, function (err) {\n        if (err) {\n          return console.log(err)\n        };\n\n        // Watch .scss files\n        gulp.watch('src/styles/**/*.scss', ['styles']);\n\n        // Watch .js files\n        gulp.watch('src/scripts/**/*.js', ['scripts']);\n\n        // Watch image files\n        gulp.watch('src/images/**/*', ['images']);\n\n      });\n\n    });\n\n### References\n\nhttps://github.com/gulpjs/gulp/blob/master/docs/getting-started.md#getting-started\n\n### Livereload\n\n    var lr = require('tiny-lr')();\n\n    function notify (lr, root) {\n      return function (event) {\n        var fname = require('path').relative(root, event.path);\n        lr.changed({ body: { files: [ fname ] }});\n      };\n    }\n\n    gulp.task('livereload', function () {\n      lr.listen(35729)\n      gulp.watch('public/**/*', notify(lr, __dirname+'/public'));\n    });\n\n    // Express\n    app.use(require('connect-livereload')())\n    <!-- livereload --><script>document.write('<script src=\"'+(location.protocol||'http:')+'//'+(location.hostname||'localhost')+':35729/livereload.js?snipver=1\"><\\/scr'+'ipt>')</script>\n"
  },
  {
    "path": "haml.md",
    "content": "---\ntitle: Haml\ncategory: Markup\nprism_languages: [haml]\n---\n\n### Doctype\n\n```haml\n!!! 5\n```\n\n### Tags\n\n```haml\n%html\n  %head\n    %title\n  %body\n    %h1 Hello World\n    %br/\n```\n\n### Classes and ID's\n\n```haml\n%p.class-example\n.no-tag-defaults-to-div\n%div#butItCanBeIncluded\n```\n\n### Inline Attributes\n\nEither hash syntax works\n\n```haml\n%meta{ name: \"viewport\", content: \"width=device-width, initial-scale=1.0\" }\n%input{ :type => \"text\", :required => true }\n```\n\n### Ruby\n\n```haml\n-# This is a comment\n-# Anything starting with a hyphen signals to Haml that Ruby is coming\n- @arr = [1, 2, 3]\n- @str = \"test\"\n-# Equal signals output\n= render partial: \"shared/header\"\n= yield\n= link_to page_url\n```\n"
  },
  {
    "path": "handlebars.js.md",
    "content": "---\ntitle: Handlebars.js\ncategory: JavaScript libraries\nweight: -1\n---\n\n{% raw %}\n\n### Helpers\n\n```js\nHandlebars.registerHelper('link_to', function() {\n  return \"<a href='\" + this.url + \"'>\" + this.body + \"</a>\";\n})\n```\n\n```js\nvar context = { posts: [{url: \"/hello-world\", body: \"Hello World!\"}] }\nvar source = \"<ul>{{#posts}}<li>{{{link_to}}}</li>{{/posts}}</ul>\"\n```\n\n```js\nvar template = Handlebars.compile(source)\ntemplate(context)\n```\n\nWould render:\n\n```html\n<ul>\n  <li><a href='/hello-world'>Hello World!</a></li>\n</ul>\n```\n\n{% endraw %}\n"
  },
  {
    "path": "harvey.js.md",
    "content": "---\ntitle: Harvey.js\ncategory: JavaScript libraries\nintro: |\n  [Harvey.js](http://harvesthq.github.io/harvey/) helps you build responsive interfaces.\n---\n\n### Usage\n\n```js\nHarvey.attach('(min-width: 600px)', {\n  setup: function () {\n    // Called on first enter\n  },\n  on: function () {\n    // Called on every enter\n  },\n  off: function () {\n    // Called on every exit\n  }\n})\n```\n\n### Deprecated\n\nHarvey.js hasn't been updated in a while, as of time of writing. Consider [enquire.js](https://github.com/WickyNilliams/enquire.js) instead.\n\n### References\n\n* <http://harvesthq.github.io/harvey>\n"
  },
  {
    "path": "heroku.md",
    "content": "---\ntitle: Heroku\ncategory: Devops\nupdated: 2017-10-11\ndescription: |\n  A one-page reference to common Heroku-CLI commands.\nintro: |\n  [Heroku](https://heroku.com/) is a web hosting platform supporting many languages, and this guide is a reference to Heroku's [command-line interface](https://heroku.com/).\n---\n\n### `create` - Create an app\n\n```bash\nheroku create sushi\n```\n\n```bash\ngit push heroku master\n```\n\nThis will create an application named `sushi`. ([docs](https://devcenter.heroku.com/articles/creating-apps))\n\n### `container` - Docker containers\n\n```bash\nheroku stack:set container -app <app>\nheroku container:push web -app <app>\nheroku container:release web -app <app>\n```\n\nContainers can be deployed using the Heroku Container Registry. ([docs](https://devcenter.heroku.com/articles/container-registry-and-runtime))\n\n### `access` - Collaboration\n\n#### Manage collaborators\n\n```bash\nheroku access                     # List\nheroku access:add me@xy.com\nheroku access:remove me@xy.com\n```\n\n#### Transfer to another owner\n\n```bash\nheroku apps:transfer new@owner.com\n```\n\n### `logs` - Show logs\n\n```bash\nheroku logs\nheroku logs -t      # --tail (stream)\nheroku logs -s app  # --source (only on app logs)\n```\n\n### `releases`\n\n```bash\nheroku releases\nheroku releases:info v25\nheroku rollback\n```\n\n### `pg` - PostgreSQL\n\n#### Start a database\n\n```bash\nheroku addons:add heroku-postgresql\n```\n\n#### Enable backups\n\n```bash\nheroku addons:add pgbackups:auto-month\n```\n\nSee: [Heroku PostgreSQL](https://devcenter.heroku.com/articles/heroku-postgresql) _(devcenter.heroku.com)_\n\n### `config` - Environment var configuration\n\n#### Listing\n\n```bash\nheroku config        # List\nheroku config -s     # List in shell format\n```\n\n#### Getting\n\n```bash\nheroku config:get KEY\n```\n\n#### Setting\n\n```bash\nheroku config:set KEY=val\nheroku config:set KEY1=val KEY2=val ...\n```\n\n```bash\nheroku config:unset KEY1\n```\n\n### `apps` - Applications\n\n```bash\nheroku apps                  # list\nheroku apps:create [NAME]\nheroku apps:destroy --app APP\nheroku apps:info\nheroku apps:open             # open in browser\nheroku apps:rename NEWNAME\n```\n\n### `maintenance`\n\n```bash\nheroku maintenance:on\n```\n\n```bash\nheroku maintenance:off\n```\n\n## Processes\n\n\n### `ps` - Managing processes\n\n```bash\nheroku ps              # list\nheroku ps:scale web=1  # spawn more dynos\n```\n\n### `restart`\n\n```bash\nheroku restart\n```\n\n### `run` - Running tasks\n\n```bash\nheroku run bash\nheroku run console                  # Rails console\nheroku run rake assets:precompile\n```\n\n## Domains\n\n### `domains` - Custom domains\n\n#### Add both!\n\n```bash\nheroku domains:add example.com\nheroku domains:add www.example.com\n```\n\n#### Removing\n\n```bash\nheroku domains:clear\nheroku domains:remove example.com\n```\n\nSee: [Custom domains](https://devcenter.heroku.com/articles/custom-domains) _(devcenter.heroku.com)_\n\n### Wildcard domains\n\n```bash\nheroku addons:add wildcard_domains\n```\n\n```bash\n*.yourdomain.com => heroku.com\n```\n\n## Other tricks\n\n### htpasswd (for PHP apps)\n\nCreate an `.htaccess` file in the webroot:\n\n```bash\nAuthUserFile /app/www/.htpasswd\nAuthType Basic\nAuthName \"Restricted Access\"\nRequire valid-user\n```\n\nCreate a `.htpasswd` file:\n\n```bash\n$ htpasswd -c .htpasswd [username]\n```\n\nSee: [gist.github.com](https://gist.github.com/3316425)\n\n## References\n\n * <https://addons.heroku.com/>\n * <https://devcenter.heroku.com/>\n"
  },
  {
    "path": "hledger.md",
    "content": "---\ntitle: Hledger\ncategory: Ledger\n---\n\n### About\n{: .-intro}\n\n- <https://hledger.org>\n- <https://hledger.org/quickstart.html>\n\n### Reporting\n\n```\nhledger bal {query}\nhledger reg {query}\n```\n\n## Query\n\n### Queries\n\nQueries are used on all commands (`bal`, `reg`, etc). [(docs)](http://hledger.org/manual.html#queries)\n\n```\nAssets           # An account (regex)\nacct:Assets      # same\n^Assets          # Starting with Assets (eg, not 'Expenses:Assets')\n\nacctonly:A       # no subaccounts\n\namt:2000         # amount (in absolute value)\namt:<200         # amount comparison (in absolute value)\namt:<+200        # amount comparison\n                 # also: <=, >, >=\n\ndesc:REGEX      # description\ncode:REGEX      # transaction code (check number?)\ntag:REGEX\ncur:'\\$'\n\nreal:            # real posts\nreal:0           # virtual posts\n\ndepth:N          # --depth 2\nnot:...          # eg, not:status:!\n```\n\n### Filter by status/type\n\n```\nreal:1           # -R, --real, no virtuals\nstatus:!         #     --pending\nstatus:*         # -C, --cleared\nstatus:          #     --uncleared\n```\n\n### Periods\nFor dates and intervals (see above).\n\n```\ndate:2015/01/01\ndate:2015/01/01-    # -b, --begin\ndate:-2015/01/01    # -e, --end\ndate2:PERIODEXPR\n```\n\n```\n-p, --period=...\n  -p \"2009/01/01\"\n  -p \"2009/01/01 to 2009/12/31\"\n  -p \"2009/01/01to2009/12/31\"      # spaces optional\n  -p \"1/1 to 12/31\"\n  -p \"to 2009\"\n  -p \"weekly\"                      # -W, --weekly\n  -p \"weekly 2009/01/01 to 2009/12/31\"\n```\n\n### Intervals\nUsed on all commands (`bal`, `reg`, etc). Displays in multi-column mode. In `ledger-cli`, only `reg` is supported. Can also specified via `-p` (period).\n\n```\n-D, --daily\n-W, --weekly\n-M, --monthly\n-Q, --quarterly\n-Y, --yearly\n```\n\n### Smart dates\nUsed for `--period`, `--begin` and `--end` (`-p` `-b` `-e`).\n\n```\n-p 2015/01/01\n-p 2015/01\n-p 2015\n-p january\n-p jan\n-p 05/25\n```\n\n```\n-b today\n-b yesterday\n-e tomorrow\n```\n\n```\n-p this week\n-p last month\n-p this year\n```\n\n## Display formats\n\n```\n    --tree          # only in bal\n    --flat\n\n    --depth 2       # collapse those under this depth\n    --drop 1        # drop top-level accounts\n-B, --cost          # convert to default currency\n-E, --empty         # don't strip out $0 accounts\n    --date2         # use date2 when available\n```\n\n## Multi-column mode\nWhen used with intervals (like `--weekly`):\n\n```\n-T, --row-total\n-N, --no-total\n```\n\nAlso: (only in `bal`)\n\n```\n    --cumulative    # show ending balance per period\n-I, --historical    # like --cumulative but only for --begin\n-A, --average\n```\n\n\n## Accounts\n\n```\nhledger accounts [--tree]\n```\n\n## Other commands\n\n```\nhledger balancesheet       # bs\nhledger incomestatement    # is\nhledger cashflow           # cf\nhledger print\nhledger activity\nhledger stats\n```\n\n## Examples\n\n```\n# Current balance\n  hledger bal Assets\n  hledger balancesheet\n\n  hledger balancesheet Assets [--cleared --cost --empty -e tomorrow]\n  # ...discard future stuff; convert foreign currencies\n\n# Monthly changes in assets\n  hledger bal Assets Liabilities --monthly --tree --historical [--cleared --cost --empty -e tomorrow]\n\n# Weekly expenses\n  hledger bal Expenses --weekly --average --tree -b 'last month' [--cleared --cost --empty -e tomorrow]\n```\n\n## See also\n\n* <http://hledger.org/manual.html>\n* <http://ledger-cli.org/3.0/doc/ledger3.html>\n"
  },
  {
    "path": "homebrew.md",
    "content": "---\ntitle: Homebrew\nweight: -3\ncategory: CLI\n---\n\n### Commands\n\n| Command                    | Description                 |\n| ---                        | ---                         |\n| `brew install git`         | Install a package           |\n| `brew uninstall git`       | Remove/Uninstall a package  |\n| `brew upgrade git`         | Upgrade a package           |\n| ---                        | ---                         |\n| `brew unlink git`          | Unlink                      |\n| `brew link git`            | Link                        |\n| `brew switch git 2.5.0`    | Change versions             |\n| ---                        | ---                         |\n| `brew list --versions git` | See what versions you have  |\n\n### More package commands\n\n| Command                    | Description                 |\n| ---                        | ---                         |\n| `brew info git`            | List versions, caveats, etc |\n| `brew cleanup git`         | Remove old versions         |\n| `brew edit git`            | Edit this formula           |\n| `brew cat git`             | Print this formula          |\n| `brew home git`            | Open homepage               |\n| `brew search git`          | Search for formulas         |\n\n### Global commands\n\n| Command         | Description              |\n| ---             | ---                      |\n| `brew update`   | Update brew and cask     |\n| `brew upgrade`  | Upgrade all packages     |\n| `brew list`     | List installed           |\n| `brew outdated` | What's due for upgrades? |\n| `brew doctor`   | Diagnose brew issues     |\n\n### Brew Cask commands\n\n| Command                       | Description                           |\n| ---                           | ---                                   |\n| `brew install --cask firefox` | Install the Firefox browser           |\n| `brew list --cask`            | List installed applications           |\n\nCask commands are used for interacting with graphical applications.\n\n## Also see\n{: .-one-column}\n\n* [Homebrew homepage](https://brew.sh/) _brew.sh_\n* [Homebrew docs](https://docs.brew.sh) _docs.brew.sh_\n{: .-also-see}\n"
  },
  {
    "path": "html-email.md",
    "content": "---\ntitle: HTML emails\ncategory: HTML\nupdated: 2017-08-30\n---\n\n### Properties to avoid\n\n| Property             | Where                   |\n| ---                  | ---                     |\n| `position`           | (Outlook, Gmail, Yahoo) |\n| `display`            | (Outlook, Gmail)        |\n| `float`              | (Outlook)               |\n| ---                  | ---                     |\n| `height`             | (Outlook)               |\n| `width` _in p/div_   | (Outlook)               |\n| `padding` _in p/div_ | (Outlook)               |\n| `background`         | (Outlook, Gmail)        |\n| `min-width`          | (Outlook)               |\n| `max-width`          | (Outlook)               |\n| ---                  | ---                     |\n| `opacity`            | (Outlook, Gmail, Yahoo) |\n| `box-shadow`         | (Outlook, Gmail, Yahoo) |\n| ---                  | ---                     |\n| `rgba()`             | (Outlook)               |\n| `data-uri`           | (all webmail)           |\n\n### Selectors to avoid\n\n| `E[attr]`                  | (Outlook, Gmail)        |\n| `E:nth-child(n)`           | (Outlook, Gmail)        |\n| `::before` _and_ `::after` | (Outlook, Yahoo, Gmail) |\n| `E F`                      | (Gmail)                 |\n| `E + F`, `E > F` _etc_     | (Outlook, Gmail)        |\n\nInline your CSS as much as possible.\n\n### Basic layout\n\n```html\n<table cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n  <tr>\n    <td width=\"auto\"></td>\n    <td width=\"600\" background=\"#ffffff\">\n      ···\n    </td>\n    <td width=\"auto\"></td>\n  </tr>\n</table>\n```\n\n### Responsive\n\n```html\n<style>\n@media only screen and (max-device-width: 480px)\n</style>\n```\n\n`<style>` is supported in the head and body by everything except Gmail. Only use them for responsive styles.\n\n## References\n{: .-one-column}\n\n- [CSS support matrix](https://www.campaignmonitor.com/css/) _campaignmonitor.com_\n"
  },
  {
    "path": "html-input.md",
    "content": "---\ntitle: Input tag\ncategory: HTML\nupdated: 2017-10-30\nweight: -3\n---\n\n### Input\n\n```html\n <input ...\n   disabled\n   required\n   checked\n```\n\n```html\n   autofocus\n```\n\n```html\n   autocomplete='off'        <!-- autocomplete -->\n   autocompletetype='cc-exp'\n   autocapitalize='off'      <!-- for mobiles -->\n   pattern='\\d*'             <!-- force numeric input in iOS -->\n```\n\n### Input types\n\n#### Text\n\n* email\n* hidden\n* **password**\n* tel\n* **text**\n* search\n{: .-four-column}\n\n#### Time\n\n* date\n* time\n{: .-four-column}\n\n#### Time (not widely supported)\n\n* month\n* week\n* datetime\n* datetime-local\n{: .-four-column}\n\n#### Etc\n\n* **file**\n* **radio**\n* **checkbox**\n{: .-four-column}\n\n#### Buttons\n\n* button\n* reset\n* submit\n* image\n{: .-four-column}\n\n#### Numeric\n\n* number\n* range\n{: .-four-column}\n\n## Examples\n\n### Dates\n\n| Type | Example |\n| --- | --- |\n| `type='date'` | <input type='date'> |\n| `type='time'` | <input type='time'> |\n\n### Datetime\n\n| Type | Example |\n| --- | --- |\n| `type='datetime'` | <input type='datetime'> |\n| `type='datetime-local'` | <input type='datetime-local'> |\n\n`datetime` and `datetime-local` fields are not widely supported.\n\n### Numbers\n\n| Type | Example |\n| --- | --- |\n| `type='number'` | <input type='number'> |\n| `type='range'` | <input type='range'> |\n\n### Text\n\n| Type | Example |\n| --- | --- |\n| `type='text'` | <input type='text'> |\n| `type='password'` | <input type='password'> |\n| `type='search'` | <input type='search'> |\n| `type='tel'` | <input type='tel'> |\n\n## Also see\n\n * <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input>\n"
  },
  {
    "path": "html-meta.md",
    "content": "---\ntitle: HTML meta tags\ncategory: HTML\nupdated: 2020-03-20\nweight: -3\n---\n\n### Meta tags\n\n```html\n<meta charset='utf-8'>\n```\n\n```html\n<!-- title -->\n<title>···</title>\n<meta property='og:title'  content='···'>\n<meta name='twitter:title' content='···'>\n```\n{: data-line=\"2\"}\n\n```html\n<!-- url -->\n<link rel='canonical'       href='http://···'>\n<meta property='og:url'  content='http://···'>\n<meta name='twitter:url' content='http://···'>\n```\n{: data-line=\"2\"}\n\n```html\n<!-- description -->\n<meta name='description'         content='···'>\n<meta property='og:description'  content='···'>\n<meta name='twitter:description' content='···'>\n```\n{: data-line=\"2\"}\n\n```html\n<!-- image -->\n<meta property=\"og:image\"  content=\"http://···\">\n<meta name=\"twitter:image\" content=\"http://···\">\n```\n\n```html\n<!-- ua -->\n<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>\n```\n\n```html\n<!-- viewport -->\n<meta name='viewport' content='width=device-width'>\n<meta name='viewport' content='width=1024'>\n```\n\n### More opengraph\n\n```html\n<meta property='og:site_name' content='···'>\n<meta property='og:type' content='website'>\n```\n\n```html\n<meta property='fb:app_id' content='···'>\n<meta property='fb:admins' content='UID1,UID2'>\n<!-- ···unless there's app_id -->\n```\n\n```html\n<meta property='og:audio' content='http://···/theme.mp3'>\n<meta property='og:video' content='http://···/trailer.swf'>\n```\n\nSee: [OpenGraph protocol](https://developers.facebook.com/docs/opengraphprotocol/) _(developers.facebook.com)_\n\n### Opengraph for articles\n\n- `article:published_time`\n- `article:modified_time`\n- `article:expiration_time`\n- `article:author`\n- `article:section`\n- `article:tag`\n\n### Apple-only\n\n```html\n<meta name='format-detection' content='telephone=no'>\n```\n\n## Progressive web apps\n\n### Add to homescreen\n\n```html\n<meta name='mobile-web-app-capable' content='yes'>\n<meta name='apple-mobile-web-app-capable' content='yes'>\n```\n\n```html\n<meta name='apple-mobile-web-app-status-bar-style' content='black'>\n<!-- black | black-translucent | default -->\n```\n\n### Theme color\n\n```html\n<meta name='theme-color' content='#ff00ff'>\n```\n\nAndroid-only.\nSee: [Theme color](https://developers.google.com/web/updates/2014/11/Support-for-theme-color-in-Chrome-39-for-Android)\n\n### Manifest\n\n```html\n<link rel='manifest' href='/manifest.json'>\n```\n\nAndroid-only.\nSee: [Manifest](https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/)\n\n### Icons\n\n```html\n<!-- Minimal -->\n<link rel='icon' type='image/png' href='favicon@32.png'>\n<link rel='icon' sizes='192x192' href='icon@192.png'>\n<link rel='apple-touch-icon' href='icon@152.png'>\n<meta name='msapplication-square310x310logo' content='icon@310.png'>\n```\n\n```html\n<!-- Apple -->\n<link rel='apple-touch-icon' href='touch-icon-iphone.png'>\n<link rel='apple-touch-icon' sizes='76x76' href='touch-icon-ipad.png'>\n<link rel='apple-touch-icon' sizes='120x120' href='touch-icon-iphone-retina.png'>\n<link rel='apple-touch-icon' sizes='152x152' href='touch-icon-ipad-retina.png'>\n```\n\n```html\n<!-- Microsoft -->\n<meta name='msapplication-square70x70logo' content='icon_smalltile.png'>\n<meta name='msapplication-square150x150logo' content='icon_mediumtile.png'>\n<meta name='msapplication-wide310x150logo' content='icon_widetile.png'>\n```\n\nChrome on Android recommends [192x192](https://developers.google.com/web/updates/2014/11/Support-for-theme-color-in-Chrome-39-for-Android).\nSee: [Icons](https://developers.google.com/web/fundamentals/design-and-ui/browser-customization/)\n\n## Reference\n{: .-one-column}\n\n * <https://dev.twitter.com/cards>\n * <https://developers.facebook.com/docs/opengraphprotocol/#types>\n{: .-also-see}\n"
  },
  {
    "path": "html-microformats.md",
    "content": "---\ntitle: Microformats\ncategory: HTML\n---\n\n### Author\n\n``` html\n<span class=\"entry-author\" itemprop=\"author\" itemscope=\"itemscope\" itemtype=\"https://schema.org/Person\">\n  <a href=\"https://AUTHORPAGE\" class=\"entry-author-link\" itemprop=\"url\" rel=\"author\">\n    <span class=\"entry-author-name\" itemprop=\"name\">AUTHORNAME</span>\n  </a>\n</span>\n```\n\n### Time\n\n``` html\n<time class=\"entry-time\" itemprop=\"datePublished\" datetime=\"2009-02-09T20:04:00+00:00\">February 9, 2009</time>\n```\n"
  },
  {
    "path": "html-share.md",
    "content": "---\ntitle: Share links\ncategory: HTML\nupdated: 2017-09-04\n---\n\n## Share links\n{: .-one-column}\n\nFacebook:\n{:.-setup}\n\n```html\n<a href='https://www.facebook.com/sharer/sharer.php?u=URL' target='share'>\n```\n\nTwitter:\n{:.-setup}\n\n```html\n<a href='https://twitter.com/intent/tweet?text=DESCRIPTION+URL' target='share'>\n```\n\nGoogle Plus:\n{:.-setup}\n\n```html\n<a href='https://plus.google.com/share?url=URL' target='share'>\n```\n"
  },
  {
    "path": "html.md",
    "content": "---\ntitle: HTML\ncategory: HTML\n---\n\n### Head stuff\n\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/favicon.ico\">\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"/favicon.png\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n\n### iPhone viewport\n\n    <meta name=\"viewport\" content=\"initial-scale=1.0, maximum-scale=1.0\">\n    <meta name=\"viewport\" content=\"width=device-width\">\n    <meta name=\"viewport\" content=\"width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\"/> <!-- full example -->\n\n### Default OpenGraph meta tags\n\n    <meta content=\"...\" name=\"description\">\n    <meta content=\"...\" property=\"og:description\">\n    <meta content=\"http://.../preview.jpg\" property=\"og:image\">\n    <meta content=\"Hello There\" property=\"og:title\">\n    <meta content=\"Hello There\" property=\"og:site_name\">\n    <meta content=\"hellothere\" property=\"fb:admins\">\n    <meta content=\"website\" property=\"og:type\">\n\n### Webfonts\n\n    <script>WebFontConfig={    },function(a,b){var c=a.createElement(b);c.src=\"//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js\",c.async=1;var d=a.getElementsByTagName(b)[0];d.parentNode.insertBefore(c,d)}(document,\"script\")</script>\n\n    // {typekit{id:\"...\"}}\n    // {google:{families:['Exo:400']}}\n\n### Google Analytics\n\n    <script>location.hostname.match(/helloworld\\.com/)&&(_gaq=[[\"_setAccount\",\"UA-XXXXX-1\"],[\"_trackPageview\"]],function(a,b){var c=a.createElement(b),d=a.getElementsByTagName(b)[0];c.async=1,c.src=(\"https:\"==location.protocol?\"//ssl\":\"//www\")+\".google-analytics.com/ga.js\",d.parentNode.insertBefore(c,d)}(document,\"script\"))</script>\n\n### FB/Twitter\n\n    <div id=\"fb-root\"></div><script>fbAsyncInit=function(){FB.init({\"appId\":\"___APPIDGOESHERE___\",\"status\":true,\"cookie\":true,\"xfbml\":true})};!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.async=1;js.src='//connect.facebook.net/en_US/all.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','facebook-jssdk');</script>\n\n    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.async=1;js.src=\"//platform.twitter.com/widgets.js\";fjs.parentNode.insertBefore(js,fjs);}}(document,\"script\",\"twitter-wjs\");</script>\n\n### HTML5 Shiv for IE8\n\n    <!--[if lte IE 8]><script src='//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.1/html5shiv.js'></script><![endif]-->\n\n### H5BP HTML tag (IE8 and IE9 only)\n\n    <!--[if lte IE 8]><html class=\"ie8\"><![endif]--><!--[if IE 9]><html class=\"ie9\"><![endif]--><!--[if gt IE 9]><!-->\n    <html><!--<![endif]-->\n\n### Touch icons\n\n * apple-touch-icon-precomposed.png\n * apple-touch-icon-57x57-precomposed.png\n * apple-touch-icon-72x72-precomposed.png\n * apple-touch-icon-114x114-precomposed.png\n * apple-touch-icon-144x144-precomposed.png\n\n### Icons\n\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"favicon.png\">\n    <link href=\"apple-touch-icon-precomposed.png\" rel=\"apple-touch-icon\">\n    <link href=\"apple-touch-icon-57x57-precomposed.png\" size=\"57x57\" rel=\"apple-touch-icon\">\n    <link href=\"apple-touch-icon-72x72-precomposed.png\" size=\"72x72\" rel=\"apple-touch-icon\">\n    <link href=\"apple-touch-icon-114x114-precomposed.png\" size=\"114x114\" rel=\"apple-touch-icon\">\n    <link href=\"apple-touch-icon-144x144-precomposed.png\" size=\"144x144\" rel=\"apple-touch-icon\">\n\nOnly do this if you're not placing the site in the root!\n\n### H5BP HTML tag\n\n    <!--[if lt IE 7 ]> <html class=\"ie6\"> <![endif]-->\n    <!--[if IE 7 ]>    <html class=\"ie7\"> <![endif]-->\n    <!--[if IE 8 ]>    <html class=\"ie8\"> <![endif]-->\n    <!--[if IE 9 ]>    <html class=\"ie9\"> <![endif]-->\n    <!--[if (gt IE 9)|!(IE)]><!--> <html class=\"\"> <!--<![endif]-->\n\n### Google jQuery\n\n    <script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n\n### Unsupported message\n\n    <!--[if lt IE 8]>\n    <div class=\"unsupported-browser\">\n      <strong>\n        You are using an outdated browser.\n      </strong>\n      <span>\n        Please <a class=\"upgrade-browser\"\n        href=\"http://browsehappy.com/\">\n        upgrade your browser</a> or <a  class=\"chrome-frame\"\n        href=\"http://www.google.com/chromeframe/?redirect=true\">activate Google \n        Chrome Frame</a> to improve your experience.\n      </span>\n    </div>\n    <![endif]-->\n\n### HTML Compatibility inspector\n\n    <script src=\"http://ie.microsoft.com/testdrive/HTML5/CompatInspector/inspector.js\"></script>\n\nMore info here: [microsoft.com](http://ie.microsoft.com/testdrive/HTML5/CompatInspector/)\n"
  },
  {
    "path": "http-status.md",
    "content": "---\ntitle: HTTP Status\ncategory: API\ndescription: |\n  List of HTTP Status codes and links to description.\n---\n\n### Informational Responses\n\n| Code  | Name                | ?                                 |\n| ----  | ----                | -                                 |\n| `100` | Continue            | [?](https://httpstatuses.com/100) |\n| `101` | Switching Protocols | [?](https://httpstatuses.com/101) |\n{: .xp}\n\n### Success Responses\n\n| Code  | Name                        | ?                                 |\n| ----  | ----                        | -                                 |\n| `200` | OK                          | [?](https://httpstatuses.com/200) |\n| `201` | Created                     | [?](https://httpstatuses.com/201) |\n| `202` | Accepted                    | [?](https://httpstatuses.com/202) |\n| `203` | Non-Authoritive Information | [?](https://httpstatuses.com/203) |\n| `204` | No Content                  | [?](https://httpstatuses.com/204) |\n| `205` | Reset Content               | [?](https://httpstatuses.com/205) |\n| `206` | Partial Content             | [?](https://httpstatuses.com/206) |\n| `226` | IM Used                     | [?](https://httpstatuses.com/226) |\n{: .xp}\n\n### Redirection Responses\n\n| Code  | Name               | ?                                                |\n| ----  | ----               | -                                                |\n| `300` | Multiple Choices   | [?](https://httpstatuses.com/300)                |\n| `301` | Moved Permanently  | [?](https://httpstatuses.com/301)                |\n| `302` | Found              | [?](https://httpstatuses.com/302)                |\n| `303` | See Other          | [?](https://httpstatuses.com/303)                |\n| `304` | Not Modified       | [?](https://httpstatuses.com/304)                |\n| `305` | Use Proxy          | [?](https://httpstatuses.com/305)                |\n| `306` | *Switch Proxy*     | [?](https://httpstatusdogs.com/306-switch-proxy) |\n| `307` | Temporary Redirect | [?](https://httpstatuses.com/307)                |\n| `308` | Permanent Redirect | [?](https://httpstatuses.com/308)                |\n{: .xp}\n\n### Client Error Responses\n\n| Code  | Name                            | ?                                 |\n| ----  | ----                            | -                                 |\n| `400` | Bad Request                     | [?](https://httpstatuses.com/400) |\n| `401` | Unauthorized                    | [?](https://httpstatuses.com/401) |\n| `402` | Payment Required                | [?](https://httpstatuses.com/402) |\n| `403` | Forbidden                       | [?](https://httpstatuses.com/403) |\n| `404` | Not Found                       | [?](https://httpstatuses.com/404) |\n| `405` | Method Not Allowed              | [?](https://httpstatuses.com/405) |\n| `406` | Not Acceptable                  | [?](https://httpstatuses.com/406) |\n| `407` | Proxy Authentication Required   | [?](https://httpstatuses.com/407) |\n| `408` | Request Timeout                 | [?](https://httpstatuses.com/408) |\n| `409` | Conflict                        | [?](https://httpstatuses.com/409) |\n| `410` | Gone                            | [?](https://httpstatuses.com/410) |\n| `411` | Length Required                 | [?](https://httpstatuses.com/411) |\n| `412` | Precondition Failed             | [?](https://httpstatuses.com/412) |\n| `413` | Payload Too Large               | [?](https://httpstatuses.com/413) |\n| `414` | URI Too Long                    | [?](https://httpstatuses.com/414) |\n| `415` | Unsupported Media Type          | [?](https://httpstatuses.com/415) |\n| `416` | Range Not Satisfiable           | [?](https://httpstatuses.com/416) |\n| `417` | Expectation Failed              | [?](https://httpstatuses.com/417) |\n| `418` | I'm a teapot                    | [?](https://httpstatuses.com/418) |\n| `421` | Misdirected Request             | [?](https://httpstatuses.com/421) |\n| `426` | Upgrade Required                | [?](https://httpstatuses.com/426) |\n| `428` | Precondition Required           | [?](https://httpstatuses.com/428) |\n| `429` | Too Many Requests               | [?](https://httpstatuses.com/429) |\n| `431` | Request Header Fields Too Large | [?](https://httpstatuses.com/431) |\n| `451` | Unavailable For Legal Reasons   | [?](https://httpstatuses.com/451) |\n{: .xp}\n\n### Server Error Responses\n\n| Code  | Name                            | ?                                 |\n| ----  | ----                            | -                                 |\n| `500` | Internal Server Error           | [?](https://httpstatuses.com/500) |\n| `501` | Not Implemented                 | [?](https://httpstatuses.com/501) |\n| `502` | Bad Gateway                     | [?](https://httpstatuses.com/502) |\n| `503` | Service Unavailable             | [?](https://httpstatuses.com/503) |\n| `504` | Gateway Timeout                 | [?](https://httpstatuses.com/504) |\n| `505` | HTTP Version Not Supported      | [?](https://httpstatuses.com/505) |\n| `506` | Variant Also Negotiates         | [?](https://httpstatuses.com/506) |\n| `510` | Not Extended                    | [?](https://httpstatuses.com/510) |\n| `511` | Network Authentication Required | [?](https://httpstatuses.com/511) |\n{: .xp}\n\n## WebDAV Status Codes\n\nWebDAV is an extension of HTTP that allows clients to perform remote Web content authoring operations. It provides a framework for users to create, change and move documents on a server. It adds the following status codes on top of HTTP. \n\n[Read more.](https://en.wikipedia.org/wiki/WebDAV)\n\n| Code  | Name                            | ?                                                                |\n| ----  | ----                            | -                                                                |\n| `102` | Processing                      | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#102) |\n| `207` | Multi-Status                    | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#207) |\n| `208` | Already Reported                | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#208) |\n| `422` | Unprocessable Entity            | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#422) |\n| `423` | Locked                          | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#423) |\n| `424` | Failed Dependency               | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#424) |\n| `507` | Insufficient Storage            | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#507) |\n| `508` | Loop Detected                   | [?](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#508) |\n{: .xp}\n\n## Also see\n\n * <https://en.wikipedia.org/wiki/List_of_HTTP_status_codes>\n * <https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html>\n * <https://httpstatuses.com/>\n"
  },
  {
    "path": "httpie.md",
    "content": "---\ntitle: httpie\ncategory: CLI\nweight: -3\nupdated: 2020-07-05\ndescription: |\n  $ http POST http://example.com name=\"John\" Host:example.com — JSON, cookies, files, auth, and other httpie examples.\n---\n\n### Introduction\n{: .-intro}\n\n[HTTPie](https://httpie.org/) is a command-line HTTP client.\n\n- [HTTPie website](https://httpie.org/) _(httpie.org)_\n- [HTTPie documentation](https://httpie.org/docs) _(httpie.org)_\n- [Try it online](https://httpie.org/run) _(httpie.org)_\n\n### Parameters\n\n```bash\n$ http POST http://example.com/posts/3 \\\n    Origin:example.com \\  # :   HTTP headers\n    name=\"John Doe\" \\     # =   string\n    q==\"search\" \\         # ==  URL parameters (?q=search)\n    age:=29 \\             # :=  for non-strings\n    list:='[1,3,4]' \\     # :=  json\n    file@file.bin \\       # @   attach file\n    token=@token.txt \\    # =@  read from file (text)\n    user:=@user.json      # :=@ read from file (json)\n```\n\n### Forms\n\n```bash\n$ http --form POST example.com \\\n    name=\"John Smith\" \\\n    cv=@document.txt\n```\n\n### Raw JSON\n\n```bash\n$ echo '{\"hello\": \"world\"}' | http POST example.com/post\n```\n\n### Options\n\n#### Printing options\n\n```bash\n-v, --verbose            # same as --print=HhBb --all\n-h, --headers            # same as --print=h\n-b, --body               # same as --print=b\n    --all                # print intermediate requests\n    --print=HhBb         # H: request headers\n                         # B: request body\n                         # h: response headers\n                         # b: response body\n    --pretty=none        # all | colors | format\n    --json | -j          # Response is serialized as a JSON object.\n```\n\n#### Authentication\n\n```bash\n    --session NAME\n-a, --auth USER:PASS\n    --auth-type basic\n    --auth-type digest\n```\n\n#### Session\n\n```bash\n    --session NAME       # store auth and cookies\n    --session-read-only NAME\n```\n\n#### Downloading\n\n```bash\n-d, --download           # like wget\n-c, --continue\n-o, --output FILE\n```\n\n#### Others\n\n```bash\n-F, --follow             # follow redirects\n    --max-redirects N    # maximum for --follow\n    --timeout SECONDS\n    --verify no          # skip SSL verification\n    --proxy http:http://foo.bar:3128\n```\n\n### References\n\n* <https://github.com/jakubroztocil/httpie>\n"
  },
  {
    "path": "ie.md",
    "content": "---\ntitle: Internet Explorer\ncategory: HTML\nupdated: 2018-03-06\n---\n\n## Support table\n{: .-one-column}\n\n### CSS Selectors\n\n| Feature                                                    | IE6 | IE7 | IE8 | IE9 | IE10 |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   |\n| `>` _(descendant)_                                         |     | 7 ✓ | ✓   | ✓   | ✓    |\n| `[attr]` _(attribute)_                                     |     | 7 ✓ | ✓   | ✓   | ✓    |\n| `.class1.class2` _(multiple classes)_                      |     | 7 ✓ | ✓   | ✓   | ✓    |\n| `~` _(sibling)_                                            |     | 7 ✓ | ✓   | ✓   | ✓    |\n| `+` _(adjacent)_                                           |     | 7 ✓ | ✓   | ✓   | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   |\n| `:first-child` <sup>\\*</sup>                               |     |     | 8 ✓ | ✓   | ✓    |\n| `:focus`                                                   |     |     | 8 ✓ | ✓   | ✓    |\n| `:before` `:after` _(single colon only)_                   |     |     | 8 ✓ | ✓   | ✓    |\n| `:lang`                                                    |     |     | 8 ✓ | ✓   | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   |\n| `:first-of-type`, `:last-of-type`                          |     |     |     | 9 ✓ | ✓    |\n| `:last-child`                                              |     |     |     | 9 ✓ | ✓    |\n| `:empty`                                                   |     |     |     | 9 ✓ | ✓    |\n| `:enabled` `:disabled` `:checked`                          |     |     |     | 9 ✓ | ✓    |\n| `:not()`                                                   |     |     |     | 9 ✓ | ✓    |\n| `:nth-child()` `:nth-last-child()`                         |     |     |     | 9 ✓ | ✓    |\n| `:nth-of-type()` `:nth-last-of-type()` `:only-of-type()`   |     |     |     | 9 ✓ | ✓    |\n| `:only-child()`                                            |     |     |     | 9 ✓ | ✓    |\n| `:target`                                                  |     |     |     | 9 ✓ | ✓    |\n| `::selection`                                              |     |     |     | 9 ✓ | ✓    |\n| `:root`                                                    |     |     |     | 9 ✓ | ✓    |\n{: .-headers.-no-wrap}\n\n`first-child:` doesn't work for elements inserted via JS.\n\n### CSS properties\n\n| Feature                                                    | IE6 | IE7 | IE8 | IE9 | IE10 | IE11 |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| `max-width`                                                |     | 7 ✓ | ✓   | ✓   | ✓    | ✓    |\n| `position: fixed`                                          |     | 7 ✓ | ✓   | ✓   | ✓    | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| `outline`                                                  |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| `display: inline-block` <sup>\\*</sup>                      |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| `display: table`                                           |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| `border-collapse`, `border-spacing`, `table-layout`, ...   |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| `whitespace: pre-wrap`                                     |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| `whitespace: pre-line`                                     |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| `box-sizing`                                               |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| `background-clip`                                          |     |     |     | 9 ✓ | ✓    | ✓    |\n| `background-origin`                                        |     |     |     | 9 ✓ | ✓    | ✓    |\n| `background-size`                                          |     |     |     | 9 ✓ | ✓    | ✓    |\n| `background: x, y, z` _(multiple backgrounds)_             |     |     |     | 9 ✓ | ✓    | ✓    |\n| `opacity`                                                  |     |     |     | 9 ✓ | ✓    | ✓    |\n| `border-radius`                                            |     |     |     | 9 ✓ | ✓    | ✓    |\n| `box-shadow`                                               |     |     |     | 9 ✓ | ✓    | ✓    |\n| `rgba()`                                                   |     |     |     | 9 ✓ | ✓    | ✓    |\n| `transform`                                                |     |     |     | 9 ✓ | ✓    | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| `animation`                                                |     |     |     |     | 10 ✓ | ✓    |\n| `transition`                                               |     |     |     |     | 10 ✓ | ✓    |\n| `linear-gradient()`                                        |     |     |     |     | 10 ✓ | ✓    |\n| `text-shadow` — [polyfill][text-shadow]                    |     |     |     |     | 10 ✓ | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| `border-image`                                             |     |     |     |     |      | 11 ✓ |\n{: .-headers.-no-wrap}\n\n`inline-block:` IE6/7 can only support inline-block for elements that are naturally inline, like span\n\n### Features\n\n| Feature                                                    | IE6 | IE7 | IE8 | IE9 | IE10 | IE11 |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| PNG alpha transparency                                     |     | 7 ✓ | ✓   | ✓   | ✓    | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| data URI [⊙][datauri]                                      |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| JS: JSON parsing [⊙][json]                                 |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| JS: Cross-origin resource sharing [⊙][cors]                |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| JS: Local storage [⊙][localstorage]                        |     |     | 8 ✓ | ✓   | ✓    | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| CSS: `@media` queries — [polyfill][respond]                |     |     |     | 9 ✓ | ✓    | ✓    |\n| HTML: new HTML5 elements - [polyfill][html5shiv]           |     |     |     | 9 ✓ | ✓    | ✓    |\n| HTML: `<canvas>`                                           |     |     |     | 9 ✓ | ✓    | ✓    |\n| HTML: `<svg>`                                              |     |     |     | 9 ✓ | ✓    | ✓    |\n| HTML: `<img src='image.svg'>`                              |     |     |     | 9 ✓ | ✓    | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| CSS: flexbox [⊙][flexbox] <sup>\\*</sup>                    |     |     |     |     | 10 ✓ | ✓    |\n| HTML: `<input placeholder='..'>` [⊙][placeholder]          |     |     |     |     | 10 ✓ | ✓    |\n| HTML: `<input type='range'>`                               |     |     |     |     | 10 ✓ | ✓    |\n| HTML: `<input required>` [⊙][validation]                   |     |     |     |     | 10 ✓ | ✓    |\n| JS: Web sockets                                            |     |     |     |     | 10 ✓ | ✓    |\n| ---------------------------------------------------------- | -   | -   | -   | -   | --   | --   |\n| JS: Fullscreen mode                                        |     |     |     |     |      | 11 ✓ |\n{: .-headers.-no-wrap}\n\n`flexbox:` IE10 only supports the 2012 syntax with -ms- prefix.\n\n## Polyfills\n\n### IE polyfills\n\nAlways install these in almost every project:\n\n - [json2] for JSON parsing (for IE7 below)\n - [selectivizr] for selectors (for IE8 below)\n - [html5shiv] for new HTML tags (for IE8 below)\n - [respond] for media queries (for IE8 below)\n - See [this article](http://ricostacruz.com/til/ie-polyfills.html) for info\n\n```html\n<!--[if lt IE 9]>\n<script src='https://cdnjs.cloudflare.com/ajax/libs/nwmatcher/1.2.5/nwmatcher.min.js'></script>\n<script src='https://cdnjs.cloudflare.com/ajax/libs/json2/20140204/json2.min.js'>\n<script src='https://cdn.rawgit.com/gisu/selectivizr/1.0.3/selectivizr.js'></script>\n<script src='https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js'>\n<script src='https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js'>\n<![endif]--> \n```\n\n### You may also need\n\n - [modernizr] for feature detection\n\n### for CSS3 decorations\n\n - [css3pie]\n - [cssSandpaper]\n - [ecsstender]\n\nSee: [Cross-browser polyfills list][fills]\n\nMisc\n----\n\n### IE Conditional comment HTML\n\n```html\n<!--[if lt IE 7 ]> <html class=\"ie6\"> <![endif]-->\n<!--[if IE 7 ]>    <html class=\"ie7\"> <![endif]-->\n<!--[if IE 8 ]>    <html class=\"ie8\"> <![endif]-->\n<!--[if IE 9 ]>    <html class=\"ie9\"> <![endif]-->\n<!--[if (gt IE 9)|!(IE)]><!--> <html class=\"\"> <!--<![endif]-->\n```\n\n### IE conditionals\n\n```html\n<!--[if IE]>      I'm IE      <![endif]-->\n<!--[if !IE]> --> Not IE <!-- <![endif]-->\n```\n\n[text-shadow]: https://github.com/heygrady/textshadow\n[ie7.js]: http://ie7-js.googlecode.com/svn/test/index.html\n[selectivizr]: http://selectivizr.com/\n[css3pie]: http://css3pie.com/\n[cssSandpaper]: https://github.com/zoltan-dulac/cssSandpaper\n[html5shiv]: https://code.google.com/p/html5shiv/\n[fills]: https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills\n[json2]: https://github.com/douglascrockford/JSON-js\n[modernizr]: https://modernizr.com\n[ecsstender]: http://ecsstender.org/\n[respond]: https://github.com/scottjehl/Respond\n[flexbox]: https://caniuse.com/#feat=flexbox\n[cors]: https://caniuse.com/#feat=cors\n[localstorage]: https://caniuse.com/#feat=localstorage\n[json]: https://caniuse.com/#feat=json\n[datauri]: https://caniuse.com/#feat=datauri\n[validation]: https://caniuse.com/#search=validation\n[placeholder]: https://caniuse.com/#feat=input-placeholder\n"
  },
  {
    "path": "ie_bugs.md",
    "content": "---\ntitle: Legacy IE bugs\ncategory: HTML\nupdated: 2018-03-06\nintro: |\n  A bunch of bugs to take care of if you're going to target legacy IE browsers.\n---\n\n### IE8: 'change' event\n\nThe 'change' event doesn't always fire. Not for checkboxes, radios, multi-select lists. Use the `click` handler instead.\n\n * [(1)](http://stackoverflow.com/questions/8005442/checkbox-change-event-works-when-click-the-label-in-ie8-ie7)\n\n### IE8: label with input\n\nClicking label with input inside doesn't focus the input.\n\n * [(1)](http://www.gtalbot.org/BrowserBugsSection/MSIE7Bugs/LabelForWithImage.html)\n\n### IE8: Opacity propagation\n\nAn element's 'opacity' value isn't propagated to its positioned descendants.\n\n * [test case](http://jhop.me/tests/bugs/ie8/opacity_positioned.html)\n"
  },
  {
    "path": "imagemagick.md",
    "content": "---\ntitle: Imagemagick\nintro: |\n  A quick reference for common [Imagemagick](https://www.imagemagick.org) commands and switches.\n---\n\n### Common options\n\n| Option              | Description                     |\n| ------------------- | ------------------------------- |\n| `-resize 100x40`    | Resize to a dimension           |\n| `-crop 40x30+10+10` | (width)x(height)+(x)+y          |\n| `-crop 40x30-10-10` | (width)x(height)+(x)+y          |\n| `-flip`             | Vertical                        |\n| `-flop`             | Horizontal                      |\n| `-transpose`        | Flip vertical + rotate 90deg    |\n| `-transverse`       | Flip horizontal + rotate 270deg |\n| `-trim`             | Trim image edges                |\n| `-rotate 90`        | Rotate 90 degrees               |\n\n### Resize to fit\n\n```sh\nconvert input.jpg -resize 80x80^ -gravity center -extent 80x80 icon.png\n```\n\n### Convert all images to another format\n\n```sh\nmogrify -format jpg -quality 85 *.png\n```\n\n### Make a pdf\n\n```sh\nconvert *.jpg hello.pdf\n```\n\n### References\n\n- <http://www.noah.org/wiki/ImageMagick>\n- <https://www.imagemagick.org/>\n"
  },
  {
    "path": "immutable.js.md",
    "content": "---\ntitle: Immutable.js\ncategory: JavaScript libraries\n---\n\n### Maps\n\n```js\nvar map = Immutable.Map({ a: 1, b: 2, c: 3 })\n```\n\n```js\nmap\n  .set('b', 50)\n  .get('b') // 50\n```\n\n### Lists\n\n```js\nvar list = Immutable.List.of(1, 2)\n\nlist\n  .push(3, 4, 5)\n  .unshift(0)\n  .concat(list2, list3)\n  .get(0)\n  .size\n```\n\n### Nested maps\n\n```js\nvar nested = Immutable.fromJS({ user: { profile: { name: 'John' } } })\n\nnested\n  // Update\n  .mergeDeep({ user: { profile: { age: 90 } } })\n  .setIn([ 'user', 'profile', 'name' ], 'Jack')\n  .updateIn([ 'user', 'profile', 'name' ], (s) => s.toUpperCase())\n\n  // Get\n  .getIn(['user', 'profile', 'name']) // 'JACK'\n```\n"
  },
  {
    "path": "index.md",
    "content": "---\nfull_title: \"Devhints — TL;DR for developer documentation\"\ndescription: \"A ridiculous collection of web development cheatsheets\"\nlayout: 2017/home\nog_type: website\ntype: home\n---\n"
  },
  {
    "path": "index@2016.md",
    "content": "---\nfull_title: \"Devhints — for web development and more\"\ndescription: \"TL;DR for developer documentation - a ridiculous collection of cheatsheets\"\nlayout: home\ntype: home\nog_type: website\n---\n"
  },
  {
    "path": "inkscape.md",
    "content": "---\ntitle: Inkscape\ncategory: Apps\ntags: [WIP]\n---\n\n### All\n\n| `-` _/_ `=` | Zoom in/out\n| `3` _/_ `4` | Zoom to selection / drawing\n| `5` _/_ `6` | Zoom to page / page width\n{: .-shortcuts}\n\n### Select tool (F1)\n\n| `[ ]` | Rotate\n{: .-shortcuts}\n\n### Edit path (F2)\n\n| `Ctrl` | constraint\n{: .-shortcuts}\n\n### Dragging an anchor handle\n\n| `Ctrl` | snap to 15 degrees\n| `Alt` | ?\n{: .-shortcuts}\n\n### Bezier (Shift F6)\n"
  },
  {
    "path": "ios-provision.md",
    "content": "---\ntitle: iOS Provisioning Profiles\n---\n\n### Types of profiles\n\n * __Development__ - deploy to an iPhone via XCode\n * __Adhoc__ - deploy via testflightapp.com\n * __Appstore__ - only used for submitting to the app store\n\n### Requirements\n\n| What            | Dev | Adhoc | Appstore |\n|-----------------|-----|-------|----------|\n| CSR file        |     | √     | √        |\n| Device UDIDs    | √   | √     |          |\n| Developers list | √   |       |          |\n\n### Obtaining a CSR file\n\nNeeded for Adhoc & Appstore builds.\n\n * Open *Keychain Access.app*\n * *Keychain Access* menu -> *Certificate Assistant* menu -> *Request a \n certificate...*\n   * User email address is *your email*\n   * Common name is *your name*\n   * CA Email address is *blank*\n   * Request is *Saved to disk*\n\n### Get the `.cer` files\n\nNeeded for Adhoc & Appstore builds.\n\n * in the iOS dev portal, go to *Certificates*, and download the certificate.  \n Install it on the dev machine.\n\n### Obtaining device UDIDs\n\nNeeded for Dev and Adhoc builds.\n\n * via iTunes: http://whatsmyudid.com\n * via XCode: cmd+shift+2 (Organizer), Devices\n\nFor developers\n--------------\n\nDon't ever ask Xcode to *Fix issue...* for you.\n\n### Using a provisioning profile\n\nNo need to use `.mobileprovision` files since XCode 5.\n\n * Open the `*.mobileprovision` file using Finder\n * XCode Project -> *Build settings* tab -> *Code signing* section -> \n *Provisioning Profile* section\n   * Set *Debug* to the *development* profile\n   * Set *Release* to the *ad-hoc* profile\n\n### Building an .ipa (Adhoc or Appstore)\n\n  * In the toolbar, select \"iOS Device\" as the target\n  * *Product* menu -> *Archive*\n  * In the Organizer (Cmd+Shift+2) -> *Archives* tab -> *Distribute...* button\n"
  },
  {
    "path": "jade.md",
    "content": "---\ntitle: Jade\ncategory: JavaScript libraries\nredirect_to: /pug\n---\n"
  },
  {
    "path": "jasmine.md",
    "content": "---\ntitle: Jasmine\ncategory: JavaScript libraries\nweight: -1\n---\n\n## Tests\n\n### Writing tests\n\n```js\ndescribe('A suite', () => {\n  it('works', () => {\n    expect(true).toBe(true)\n  })\n})\n```\n\nNote: This cheatsheet may be a little outdated. Also see the [Jest cheatsheet](./jest). Jest uses Jasmine, and therefore has similar API.\n\n### Expectations\n\n```js\nexpect(true).toBe(true)\nexpect(true).not.toBe(true)\n```\n\n```js\nexpect(a).toEqual(bar)\n```\n\n```js\nexpect(message).toMatch(/bar/)\nexpect(message).toMatch('bar')\n```\n\n```js\nexpect(a.foo).toBeDefined()\nexpect(a.foo).toBeUndefined()\nexpect(a.foo).toBeNull()\n```\n\n```js\nexpect(a.foo).toBeTruthy()\nexpect(a.foo).toBeFalsy()\n```\n\n```js\nexpect(message).toContain('hello')\n```\n\n```js\nexpect(pi).toBeGreaterThan(3)\nexpect(pi).toBeLessThan(4)\nexpect(pi).toBeCloseTo(3.1415, 0.1)\n```\n\n```js\nexpect(func).toThrow()\n```\n\n### Hooks\n\n```js\nbeforeEach(() => {\n  ···\n})\n```\n\n```js\nafterEach(() => {\n  ···\n})\n```\n\n### Pending\n\n```js\nxit('this is a pending test', () => {\n  ···\n})\n```\n\n```js\nxdescribe('this is a pending block', () => {\n  ···\n})\n```\n\n### Spies\n\n```js\nspyOn(foo, 'setBar')\nspyOn(foo, 'setBar').andReturn(123)\nspyOn(foo, 'getBar').andCallFake(function() { return 1001; })\nfoo.setBar(123)\n```\n\n```js\nexpect(foo.setBar).toHaveBeenCalled()\nexpect(foo.setBar).toHaveBeenCalledWith(123)\nexpect(foo.setBar.calls.length).toEqual(2)\nexpect(foo.setBar.calls[0].args[0]).toEqual(123)\n```\n\n### Creating spies\n\n```js\nstub = jasmine.createSpy('stub')\nstub('hello')\n```\n\n```js\nexpect(stub.identity).toEqual('stub')\nexpect(stub).toHaveBeenCalled()\n```\n\n### Async\n\n```js\ntest('works with promises', () => {\n  return new Promise((resolve, reject) => {\n    ···\n  })\n})\n```\n\nMake your test return a promise.\n\n### HTML runner\n\n```js\nvar jasmineEnv = jasmine.getEnv()\njasmineEnv.updateInterval = 250\n\nvar htmlReporter = new jasmine.HtmlReporter()\njasmineEnv.addReporter(htmlReporter)\n\n$(function() { jasmineEnv.execute() })\n```\n\nJasmine jQuery\n--------------\n\n### Expectations\n\n```js\nexpect($('#id')).toBe('div')\nexpect($('input[type=checkbox]')).toBeChecked()\nexpect($('input[type=checkbox]')).toBeDisabled()\nexpect($('input[type=checkbox]')).toBeFocused()\nexpect($('#menu ul')).toBeEmpty()\n```\n\n```js\nexpect($('#toolbar')).toBeHidden()\nexpect($('#toolbar')).toBeVisible()\n```\n\n```js\nexpect($('#popup')).toHaveCss({ margin: \"10px\" })\nexpect($('option')).toBeSelected()\n```\n\n```js\nexpect($('.foo')).toExist()\n```\n\n```js\nexpect($('a')).toHaveAttr('rel')\nexpect($('a')).toHaveAttr('rel', 'nofollow')\n```\n\n```js\nexpect($('a')).toHaveClass('rel')\nexpect($('a')).toHaveId('home')\n```\n\n```js\nexpect($('a')).toHaveHtml('<span></span>')\nexpect($('a')).toContainHtml('<span></span>')\nexpect($('a')).toHaveText('hi')\n```\n\n```js\nexpect($form).toHandle('submit') // event\nexpect($form).toHandleWith('submit', onSumbit)\n```\n\nSee: [jasmine-jquery](https://github.com/velesin/jasmine-jquery)\n\n### Event spies\n\n```js\nspyOnEvent($('#some_element'), 'click')\n$('#some_element').click()\nexpect('click').toHaveBeenPreventedOn($('#some_element'))\nexpect('click').toHaveBeenTriggeredOn($('#some_element'))\n```\n\n## References\n{: .-one-column}\n\n* Also see the [Jest cheatsheet](./jest). Jest uses Jasmine, and therefore has similar API.\n* <https://jasmine.github.io>\n"
  },
  {
    "path": "jekyll-github.md",
    "content": "---\ntitle: Jekyll for GitHub pages\ncategory: Jekyll\ntags: [WIP]\nupdated: 2017-11-17\n---\n\n{% raw %}\n\nJekyll\n------\n{: .-one-column}\n\n* jekyll-avatar\n* jekyll-coffeescript\n* jekyll-default-layout\n* jekyll-feed\n* jekyll-gist\n* jekyll-github-metadata\n* jekyll-mentions\n* jekyll-optional-front-matter\n* jekyll-paginate\n* jekyll-readme-index\n* jekyll-redirect-from\n* jekyll-relative-links\n* jekyll-sass-converter\n* jekyll-seo-tag\n* jekyll-sitemap\n{: .-four-column}\n\nAs of github-pages v156. For an updated list, see: [Dependency versions](https://pages.github.com/versions/) _(pages.github.com)_\n\nGitHub Metadata\n---------------\n\n### Configuration\n\n```yaml\nplugins:\n  - jekyll-github-metadata\n\nrepository: username/project\n```\n\nPut this in your `_config.yml`.\nSee: [Repository metadata on GitHub pages](https://help.github.com/articles/repository-metadata-on-github-pages/)\n\n### Listing repos\n\n```html\n{% for repository in site.github.public_repositories %}\n  <a href='{{ repository.html_url }}'>\n    {{ repository.name }}\n  </a>\n{% endfor %}\n```\n\n### Link to repo\n\n```html\n<a href='{{ site.github.repository_url }}'>\n  {{ site.github.project_title }}\n</a>\n```\n\nGists\n-----\n\n### Configuration\n\n```yaml\nplugins:\n  - jekyll-gist\n```\n\nSee: [jekyll-gist](https://github.com/jekyll/jekyll-gist)\n\n### Usage\n\n```js\n{% gist parkr/c08ee0f2726fd0e3909d %}\n```\n\nThis places a Gist in your page.\n\nMentions\n--------\n\n### Configuration\n\n```yaml\nplugins:\n  - jekyll-mentions\n```\n\nSee: [jekyll-mentions](https://github.com/jekyll/jekyll-mentions)\n\n### Usage\n\n```js\nHey @rstacruz, what do you think of this?\n```\n\nJust mention anyone in any page. Their names will be turned into links.\n\n\nRedirects\n---------\n{: .-three-column}\n\n### Configuration\n\n```yaml\nplugins:\n    - jekyll-redirect-from\n```\n\nSee: [jekyll-redirect-from](https://rubygems.org/gems/jekyll-redirect-from)\n\n### Usage\n\n```yaml\n---\nredirect_from:\n  - /foo\n---\n```\n\nPlace on any page.\n\n### Redirecting\n\n```yaml\n---\nredirect_to:\n  - /foo\n---\n```\n\nPlace on any page.\nSee: [redirect to](https://github.com/jekyll/jekyll-redirect-from#redirect-to)\n\n{% endraw %}\n\n"
  },
  {
    "path": "jekyll.md",
    "content": "---\ntitle: Jekyll\njekyll_escape: true\nprism_languages: [bash, yaml, ruby]\ncategory: Jekyll\nupdated: 2018-08-25\n---\n\n{% raw %}\n\n### Installation\n\n```bash\n# Install the gems\ngem install jekyll bundler\n```\n\n```bash\n# Create a new site at `./myblog`\njekyll new myblog\ncd myblog\n```\n\n```bash\n# Optional: if you're targeting github-pages,\n# use this Gemfile instead.\ncat > Gemfile <<-END\nsource 'https://rubygems.org'\ngem 'github-pages', group: :jekyll_plugins\nEND\n```\n\n```bash\nbundle exec jekyll serve\n```\n\nSee: [Jekyll quickstart](https://jekyllrb.com/docs/quickstart/)<br>\nSee: [github/pages-gem](https://github.com/github/pages-gem)\n\n### Directories\n\n```\n./\n├── _config.yml\n│\n├── _data/\n│   └── ...\n│\n├── _drafts/\n│   └── ...\n│\n├── _posts/\n│   └── 2014-01-01-hello.md\n│\n├── _layouts/\n│   ├── default.html\n│   └── post.html\n│\n├── _includes/             - partials\n│   ├── header.html\n│   └── footer.html\n│\n└── _site/\n    └── ...\n```\n{: .-box-chars}\n\n## Front-matter\n{: .-three-column}\n\n### Basic frontmatter\n\n```\n---\nlayout: post\ntitle: Hello\n---\nHello! this is my post.\n```\n{: data-line=\"1,2,3,4\"}\n\nAttach metadata to a page by adding them on top of the page, delimited by `---`.\nSee: [Front-matter](https://jekyllrb.com/docs/frontmatter/)\n\n### Other frontmatter stuff\n\n```yaml\npermalink: '/hello'\npublished: false\ncategory: apple\ncategories: ['html', 'css']\ntags: ['html', 'css']\n```\n\n### Configuration\n\nIn `_config.yml`:\n{: .-setup}\n\n```yaml\nsource: .\ndestination: _site\nexclude:\n- Gemfile\n- Gemfile.lock\ninclude: ['.htaccess']\n```\n\nAll config keys are optional.\nSee: [Configuration](https://jekyllrb.com/docs/configuration/)\n\nMarkup\n------\n{: .-three-column}\n\n### Page variables\n\n```html\n<title>\n  {{ page.title }}\n</title>\n```\n{: data-line=\"2\"}\n\n\n### Filters\n\n```html\n<p>\n  {{ page.description | truncate_words: 20 }}\n</p>\n```\n{: data-line=\"2\"}\n\n### Loops\n\n```html\n{% for post in site.posts %}\n  <a href=\"{{ post.url }}\">\n    <h2>{{ post.title }}</h2>\n    <p>{{ post.date | date_to_string }}</p>\n  </a>\n{% endfor %}\n```\n{: data-line=\"1,6\"}\n\n### Dates\n\n```html\n{{ page.date | date: \"%b %d, %Y\" }}\n```\n\n### Conditionals\n\n```html\n{% if page.image.feature %}\n  ...\n{% elsif xyz %}\n  ...\n{% else %}\n  ...\n{% endif %}\n```\n{: data-line=\"1,3,5,7 }\n\n```html\n{% if page.category == 'React' %}\n{% if page.category == 'React' or page.featured %}\n{% if page.tags contains 'Featured' %}\n```\n\n### Case\n\n```html\n{% case shipping.title %}\n  {% when 'international' %}\n     Arriving in 2-3 weeks\n  {% when 'Domestic' %}\n     Arriving in 2-3 days\n  {% else %}\n     Thank you for your order!\n{% endcase %}\n```\n{: data-line=\"1,2,4,6,8\"}\n\n### Includes (partials)\n\n```\n{% include header.html %}\n```\n{: data-line=\"1\"}\n\n```html\n<!-- Including local vars -->\n{% include header.html page=page %}\n```\n{: data-line=\"2\"}\n\n### Comments\n\n```html\n{% comment %}\n  This is a comment!\n{% endcomment %}\n```\n{: data-line=\"1,3\"}\n\n## Variables\n\n### Top-level variables\n\n\n| `{{ site }}` | Data from `config.yml` |\n| `{{ page }}` | From frontmatter, and page-specific info |\n| `{{ content }}` | HTML content (use in layouts) |\n| `{{ paginator }}` | Paginator |\n\nSee: [Variables](https://jekyllrb.com/docs/variables/)\n\n### Site\n\n```html\n{{ site.time }}\n```\n{: .-setup}\n\n| `site.time` | Current time |\n| `site.pages` | List of pages |\n| `site.posts` | List of blog posts |\n| `site.related_posts` | List of posts related to current |\n| `site.categories.CATEGORY` | List |\n| `site.tags.TAG` | List |\n| `site.static_files` | List |\n\n### Page\n\n```html\n{{ page.content }}  - un-rendered content\n{{ page.title }}\n{{ page.excerpt }}  - un-rendered excerpt\n{{ page.url }}\n{{ page.date }}\n{{ page.id }}       - unique id for RSS feeds\n{{ page.categories }}\n{{ page.tags }}\n{{ page.path }}\n{{ page.dir }}\n{{ page.excerpt | remove: '<p>' | remove: '</p>' }}\n{{ page.excerpt | strip_html }}\n```\n\n```html\n<!-- blog pagination: -->\n{{ page.next }}\n{{ page.previous }}\n```\n\nFilters\n-------\n{: .-three-column}\n\n### Dates\n\n```ruby\n{{ site.time | date: \"%Y %m %d\" }}\n```\n{: .-setup}\n\n| `date_to_xmlschema` | → `2008-11-07T13:07:54-08:00` |\n| `date_to_rfc822` | → `Mon, 07 Nov 2008 13:07:54 -0800` |\n| `date_to_string` | → `07 Nov 2008` |\n| `date_to_long_string` | → `07 November 2008` |\n| `date:` _'%Y %m %d'_ | → `2017 Nov  7` |\n\n### Preprocessors\n\n\n```ruby\n{{ page.description | markdownify }}\n```\n{: .-setup}\n\n| Filter | Description |\n| --- | --- |\n| `textilize` | Textile |\n| `markdownify` | Markdown |\n| `jsonify` | JSON |\n| `sassify` | Sass |\n| `scssify` | SCSS |\n| `smartify` | Smartypants |\n\n### Array filters\n\n```ruby\n{{ site.pages | where: \"year\", \"2014\" }}\n```\n{: .-setup}\n\n| Filter | Description |\n| --- | --- |\n| `where:` _\"year\", \"2014\"_ | |\n| `where_exp:` _\"item\", \"item.year >= 2014\"_ | |\n| --- | --- |\n| `group_by:` _\"genre\"_   | → `{name, items}` |\n| `group_by_exp:` _\"item\", \"item.genre\"_   | → `{name, items}` |\n| --- | --- |\n| `sort` | |\n| `sort:` _'author'_ | |\n| --- | --- |\n| `uniq` | |\n| --- | --- |\n| `first` | |\n| `last` | |\n| `join:` _','_ | |\n| `array_to_sentence_string` | → `\"X, Y and Z\"` |\n| --- | --- |\n| `map:` _'post'_ | Works like 'pluck' |\n| --- | --- |\n| `size` | |\n| `push:` _'xxx'_ | Adds an item |\n\n### String filters\n\n```ruby\n{{ page.title | default: \"xxx\" }}\n```\n{: .-setup}\n\n| Filter                             | Description |\n| ---                                | ---         |\n| `default:` _'xxx'_                 |             |\n| ---                                | ---         |\n| `upcase`                           |             |\n| `downcase`                         |             |\n| ---                                | ---         |\n| `remove:` _'p'_                    |             |\n| `replace:` _'super', 'mega'_       |             |\n| `remove_first:` _'p'_              |             |\n| `replace_first:` _'super', 'mega'_ |             |\n| ---                                | ---         |\n| `truncate:` _5_                    |             |\n| `truncatewords:` _20_              |             |\n| ---                                | ---         |\n| `prepend:` _'Mr. '_                |             |\n| `append:` _'Jr.'_                  |             |\n| ---                                | ---         |\n| `camelize`                         |             |\n| `capitalize`                       |             |\n| `strip_html`                       |             |\n| `strip_newlines`                   |             |\n| `newlines_to_br`                   |             |\n| ---                                | ---         |\n| `split:` _','_                     |             |\n| ---                                | ---         |\n| `escape`                           |             |\n| `escape_once`                      |             |\n| ---                                | ---         |\n| `slice:` _-3, 3_                   |             |\n\nSee: [String filters](https://docs.shopify.com/themes/liquid-documentation/filters)\n\n### String filters (Jekyll-only)\n\n```ruby\n{{ page.excerpt | number_of_words }}\n```\n{: .-setup}\n\n| Filter | Description |\n| --- | --- |\n| `number_of_words` | |\n| `slugify` | |\n| --- | --- |\n| `xml_escape` | → `CDATA` |\n| `cgi_escape` | → `foo%2Cbar` |\n| `uri_escape` | → `foo,%20bar` |\n\n### Numbers\n\n```\n{{ site.posts.size | minus: 2 }}\n```\n{: .-setup}\n\n| Filter | Description |\n| --- | --- |\n| `minus:` _2_ | |\n| `plus:` _2_ | |\n| `times:` _2_ | |\n| `divided_by:` _2_ | |\n| `modulo:` _2_ | |\n| --- | --- |\n| `ceil` | |\n| `floor` | |\n| `round` | |\n\n## Paginator\n\n### Paginator setup\n\nAdd this to `_config.yml`:\n{: .-setup}\n\n```yml\npaginate: 5\npaginate_path: \"blog/:num\"\n```\n\nSee: [Paginator](https://jekyllrb.com/docs/pagination/)\n\n### Numbers\n\n```\n{{ paginator.page }}         - page number\n{{ paginator.total_posts }}\n{{ paginator.total_pages }}\n{{ paginator.per_page }}\n```\n\n### Iterating through posts\n\n```\n{% for post in paginator.posts %} ... {% endfor %}\n```\n\n### Previous button\n\n```\n{% if paginator.total_pages > 1 %}\n  {% if paginator.previous_page %}\n    <a href=\"{{ paginator.previous_page_path }}\">Previous</a>\n  {% else %}\n  {% endif %}\n{% endif %}\n```\n\n```\n{{ paginator.next_page }}     - page number\n{{ paginator.next_page_path }}\n```\n\n## Blogging\n\n### Paths\n\n    _posts/YEAR-MONTH-DAY-title.md\n\nSee: [Blogging](https://jekyllrb.com/docs/posts/)\n\n### Image paths\n\n    ![My helpful screenshot]({{ site.url }}/assets/screenshot.jpg)\n\nSee: [Image paths](https://jekyllrb.com/docs/posts/#including-images-and-resources)\n\n### Drafts\n\n    vi _drafts/a-draft-post.md\n    jekyll build --drafts\n\nPosts in `_drafts` only show up in development, but not production.\nSee: [Drafts](https://jekyllrb.com/docs/drafts/)\n\n### Defining excerpts\n\n```\n---\ntitle: My blog post\nexcerpt: This post is about cats\n---\n\nHello, let's talk about cats. (···)\n```\n\nPut a key `excerpt` in the frontmatter.\nSee: [Excerpts](https://jekyllrb.com/docs/posts/#post-excerpts)\n\n### Displaying excerpts\n\n```html\n{{ post.excerpt }}\n```\n\n```html\n{{ post.excerpt | remove: '<p>' | remove: '</p>' }}\n{{ post.excerpt | strip_html }}\n```\n\n### Excerpt separator\n\n```html\n---\nexcerpt_separator: <!--more-->\n---\n\nExcerpt here\n<!--more-->\nMore post body here\n```\n\nAlternatively, you can put excerpts inline in your post by defining `excerpt_separator`.\n\n### Permalinks\n\n    # _config.yml\n    permalink: date   # /:categories/:year/:month/:day/:title.html\n    permalink: pretty # /:categories/:year/:month/:day/:title/\n    permalink: none   # /:categories/:title.html\n    permalink: \"/:title\"\n\nSee: [Permalinks](https://jekyllrb.com/docs/permalinks/)\n\n## More features\n\n### Data\n\n```\n_data/members.yml\n```\n{: .-setup}\n\n```\n{% for member in site.data.members %}\n  ...\n{% endfor %}\n```\n\nSee: [Data](https://jekyllrb.com/docs/datafiles/)\n\n### Collections\n\n```yml\n# _config.yml\ncollections:\n  - authors\n```\n{: .-setup}\n\n```yml\n# _/authors/a-n-roquelaire.md\n---\nname: A. N. Roquelaire\nreal_name: Anne Rice\n---\n```\n\n```\n{% for author in site.authors %}\n```\n\nSee: [Collections](https://jekyllrb.com/docs/collections/)\n\n### Code highlighter\n\n```html\n{% highlight ruby linenos %}\ndef show\n  ...\nend\n{% endhighlight %}\n```\n\nIntegration\n-----------\n\n### Bundler\n\nIn `_plugins/bundler.rb`:\n{: .-setup}\n\n```ruby\nrequire \"bunder/setup\"\nBundler.require :default\n```\n\n### Compass\n\n  * [Compass](https://gist.github.com/parkr/2874934)\n  * [Asset pipeline](https://github.com/matthodan/jekyll-asset-pipeline)\n\nAlso see\n--------\n{: .-one-column}\n\n* [Jekyll docs](https://jekyllrb.com/docs/home/) _jekyllrb.com_\n* [CloudCannon Jekyll cheatsheet](https://learn.cloudcannon.com/jekyll-cheat-sheet/) _cloudcannon.com_\n* [Jekyll: templates](https://jekyllrb.com/docs/templates/) _jekyllrb.com_\n* [Liquid: output](https://docs.shopify.com/themes/liquid-basics/output) _shopify.com_\n* [Liquid: logic](https://docs.shopify.com/themes/liquid-basics/logic) _shopify.com_\n* [Liquid: filters](https://docs.shopify.com/themes/liquid-documentation/filters) _shopify.com_\n* [Liquid for designers](https://github.com/Shopify/liquid/wiki/Liquid-for-Designers) _github.com/Shopify_\n{: .-also-see}\n\n{% endraw %}\n"
  },
  {
    "path": "jest.md",
    "content": "---\ntitle: Jest\ncategory: JavaScript libraries\nupdated: 2020-06-17\nweight: -3\ntags: [Featurable]\nintro: |\n  A quick overview to [Jest](https://facebook.github.io/jest/), a test framework for Node.js. This guide targets Jest v20.\n---\n\nTesting\n-------\n{: .-three-column}\n\n### Quick start\n{: .-prime}\n\n```bash\nnpm install --save-dev jest babel-jest\n```\n{: data-line=\"1\"}\n\n```js\n/* Add to package.json */\n\"scripts\": {\n  \"test\": \"jest\"\n}\n```\n\n```bash\n# Run your tests\nnpm test -- --watch\n```\n\nSee: [Getting started](https://facebook.github.io/jest/docs/en/getting-started.html)\n\n### Writing tests\n\n```js\ndescribe('My work', () => {\n  test('works', () => {\n    expect(2).toEqual(2)\n  })\n})\n```\n\nSee: [describe()](https://facebook.github.io/jest/docs/en/api.html#describename-fn), [test()](https://facebook.github.io/jest/docs/en/api.html#testname-fn), [expect()](https://facebook.github.io/jest/docs/en/expect.html#content)\n\n### BDD syntax\n\n```js\ndescribe('My work', () => {\n  it('works', () => {\n    ···\n  })\n})\n```\n\n`it` is an alias for `test`.\nSee: [test()](https://facebook.github.io/jest/docs/en/api.html#testname-fn)\n\n### Setup\n\n```js\nbeforeEach(() => { ... })\nafterEach(() => { ... })\n```\n\n```js\nbeforeAll(() => { ... })\nafterAll(() => { ... })\n```\n\nSee: [afterAll() and more](https://facebook.github.io/jest/docs/en/api.html#afterallfn)\n\n### Focusing tests\n\n```js\ndescribe.only(···)\nit.only(···) // alias: fit()\n```\n\nSee: [test.only](https://facebook.github.io/jest/docs/en/api.html#testonlyname-fn)\n\n\n### Skipping tests\n\n```js\ndescribe.skip(···)\nit.skip(···) // alias: xit()\n```\n\nSee: [test.skip](https://facebook.github.io/jest/docs/en/api.html#testskipname-fn)\n\n\n### Optional flags\n\n| Flag                  | Description                              |\n| --------------------- | ---------------------------------------- |\n| `--coverage`          | See a summary of test coverage           |\n| `--detectOpenHandles` | See a summary of ports that didn't close |\n| `--runInBand`         | Run all tests one after the other        |\n\nExpect\n------\n{: .-three-column}\n\n### Basic expectations\n\n```js\nexpect(value)\n  .not\n  .toBe(value)\n  .toEqual(value)\n  .toBeTruthy()\n```\n\nNote that `toEqual` is a deep equality check.\nSee: [expect()](https://facebook.github.io/jest/docs/en/expect.html#expectvalue)\n\n### Snapshots\n\n```js\nexpect(value)\n  .toMatchSnapshot()\n  .toMatchInlineSnapshot()\n```\n\nNote that `toMatchInlineSnapshot()` requires Prettier to be set up for the project.\nSee: [Inline snapshots](https://jestjs.io/docs/en/snapshot-testing#inline-snapshots)\n\n### Errors\n\n```js\nexpect(value)\n  .toThrow(error)\n  .toThrowErrorMatchingSnapshot()\n```\n\n### Booleans\n\n```js\nexpect(value)\n  .toBeFalsy()\n  .toBeNull()\n  .toBeTruthy()\n  .toBeUndefined()\n  .toBeDefined()\n```\n\n### Numbers\n\n```js\nexpect(value)\n  .toBeCloseTo(number, numDigits)\n  .toBeGreaterThan(number)\n  .toBeGreaterThanOrEqual(number)\n  .toBeLessThan(number)\n  .toBeLessThanOrEqual(number)\n```\n\n### Objects\n\n```js\nexpect(value)\n  .toBeInstanceOf(Class)\n  .toMatchObject(object)\n  .toHaveProperty(keyPath, value)\n```\n\n### Objects\n\n```js\nexpect(value)\n  .toContain(item)\n  .toContainEqual(item)\n  .toHaveLength(number)\n```\n\n### Strings\n\n```js\nexpect(value)\n  .toMatch(regexpOrString)\n```\n\n### Others\n\n```js\nexpect.extend(matchers)\nexpect.any(constructor)\nexpect.addSnapshotSerializer(serializer)\n\nexpect.assertions(1)\n```\n\nMore features\n-------------\n\n### Asynchronous tests\n\n```js\ntest('works with promises', () => {\n  return new Promise((resolve, reject) => {\n    ···\n  })\n})\n```\n{: data-line=\"2\"}\n\n```js\ntest('works with async/await', async () => {\n  const hello = await foo()\n  ···\n})\n```\n{: data-line=\"2\"}\n\nReturn promises, or use async/await.\nSee: [Async tutorial](https://facebook.github.io/jest/docs/en/tutorial-async.html)\n\n### Snapshots\n\n```jsx\nit('works', () => {\n  const output = something()\n  expect(output).toMatchSnapshot()\n})\n```\n{: data-line=\"3\"}\n\nFirst run creates a snapshot. Subsequent runs match the saved snapshot.\nSee: [Snapshot testing](https://facebook.github.io/jest/docs/en/snapshot-testing.html)\n\n### React test renderer\n\n```jsx\nimport renderer from 'react-test-renderer'\n```\n{: .-setup}\n\n```jsx\nit('works', () => {\n  const tree = renderer.create(\n    <Link page=\"https://www.facebook.com\">Facebook</Link>\n  ).toJSON()\n\n  expect(tree).toMatchSnapshot()\n})\n```\n{: data-line=\"2,3,4\"}\n\nReact's test renderer can be used for Jest snapshots.\nSee: [Snapshot test](https://facebook.github.io/jest/docs/en/tutorial-react-native.html#snapshot-test)\n\n### Timers\n\n```js\njest.useFakeTimers()\n```\n\n```js\nit('works', () => {\n  jest.runOnlyPendingTimers()\n  jest.runTimersToTime(1000)\n  jest.runAllTimers()\n})\n```\n\nSee: [Timer Mocks](https://facebook.github.io/jest/docs/en/timer-mocks.html)\n\n## Mock functions\n\n### Mock functions\n\n```js\nconst fn = jest.fn()\n```\n\n```js\nconst fn = jest.fn(n => n * n)\n```\n\nSee: [Mock functions](https://facebook.github.io/jest/docs/en/mock-functions.html#using-a-mock-function)\n\n### Assertions\n\n```js\nexpect(fn)\n  .toHaveBeenCalled()\n  .toHaveBeenCalledTimes(number)\n  .toHaveBeenCalledWith(arg1, arg2, ...)\n  .toHaveBeenLastCalledWith(arg1, arg2, ...)\n```\n\n```js\nexpect(fn)\n  .toHaveBeenCalledWith(expect.anything())\n  .toHaveBeenCalledWith(expect.any(constructor))\n  .toHaveBeenCalledWith(expect.arrayContaining([ values ]))\n  .toHaveBeenCalledWith(expect.objectContaining({ props }))\n  .toHaveBeenCalledWith(expect.stringContaining(string))\n  .toHaveBeenCalledWith(expect.stringMatching(regexp))\n```\n\n### Instances\n\n```js\nconst Fn = jest.fn()\n\na = new Fn()\nb = new Fn()\n```\n\n```js\nFn.mock.instances\n// → [a, b]\n```\n{: data-line=\"1\"}\n\nSee: [.mock property](https://facebook.github.io/jest/docs/en/mock-functions.html#mock-property)\n\n### Calls\n\n```js\nconst fn = jest.fn()\nfn(123)\nfn(456)\n```\n\n```js\nfn.mock.calls.length   // → 2\nfn.mock.calls[0][0]    // → 123\nfn.mock.calls[1][0]    // → 456\n```\n{: data-line=\"1,2,3\"}\n\nSee: [.mock property](https://facebook.github.io/jest/docs/en/mock-functions.html#mock-property)\n\n### Return values\n\n```js\nconst fn = jest.fn(() => 'hello')\n```\n\n#### or:\n\n```js\njest.fn().mockReturnValue('hello')\njest.fn().mockReturnValueOnce('hello')\n```\n\n### Mock implementations\n\n```js\nconst fn = jest.fn()\n  .mockImplementationOnce(() => 1)\n  .mockImplementationOnce(() => 2)\n```\n{: data-line=\"2,3\"}\n\n```js\nfn()    // → 1\nfn()    // → 2\n```\n\n## References\n{: .-one-column}\n\n- <https://facebook.github.io/jest/>\n{: .-also-see}\n"
  },
  {
    "path": "jinja.md",
    "content": "---\ntitle: Jinja\ncategory: Python\n---\n\n{% raw %}\n### Basic usage\n\n```\n- variable x has content: {{ x }}\n- expression: {{ x + 1 }}\n- escaped for HTML: {{ x | e }}\n```\n\n### Control structures\n\n```\n{% for x in range(5) %}\n    {% if x % 2 == 0 %}\n        {{ x }} is even!\n    {% else %}\n        {{ x }} is odd!\n    {% endif %}\n{% endfor %}\n```\n\n### Whitespace trimming\n\n```\nthese are\n{{ \"three\" }}\nlines.\n\nthis is conc\n{{- \"at\" -}}\nenated.\n```\n\n### Special blocks\n\n```\n{% filter e %}{% endraw %}\n{ {%- if 0 -%}{%- endif -%} % raw %}\n{%- raw -%}\n    This is a raw block where {{nothing is evaluated}}\n    {% not even this %}\n    and <html is escaped> too with \"e\" filter\n{% endraw %}\n{ {%- if 0 -%}{%- endif -%} % endraw %}{% raw %}\n{% endfilter %}\n\n{% macro myfunc(x) %}\n    this is a reusable macro, with arguments: {{x}}\n{% endmacro %}\n\n{{ myfunc(42) }}\n\n{#\nthis is a comment\n#}\n```\n\n\n### Inheritance\n\n#### shared.html\n\n```\n<html>\n  <head>\n    <title>{%block title %}{% endblock %}</title>\n  </head>\n  <body>\n    <header><h1>{% block title %}{% endblock %}</h1></header>\n    <main>{% block content %}{% endblock %}</main>\n  </body>\n</html>\n```\n\n#### home.html\n\n```\n{% extends \"shared.html\" %}\n{% block title %}Welcome to my site{% endblock %}\n{% block content %}\nThis is the body\n{% endblock %}\n```\n\n## Library\n\n### Basic usage\n\n```python\nfrom jinja2 import Template\ntemplate = Template('Hello {{ name }}!')\ntemplate.render(name='John Doe') == u'Hello John Doe!'\n```\n\n{% endraw %}\n"
  },
  {
    "path": "jinja2.md",
    "content": "---\ntitle: jinja\ncategory: python\nredirect_to: /jinja\n---\n"
  },
  {
    "path": "jquery-cdn.md",
    "content": "---\ntitle: jQuery CDN\ncategory: JavaScript libraries\ntags: [Archived]\n---\n\n### Google jQuery\n\n```html\n<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js\"></script>\n```\n"
  },
  {
    "path": "jquery.md",
    "content": "---\ntitle: jQuery\ncategory: JavaScript libraries\ntags: [WIP]\nweight: -1\n---\n\n### Traversing\n\n```js\n$('.box')\n  .children()\n  .closest('div')\n  .filter(':selected')\n  .find('div')\n  .has('div')\n  .first()\n  .next('div')\n  .nextUntil('div')\n```\n\n## Advanced features\n\n### Extending selectors\n\n```js\n$.expr[':'].inline = function (el) {\n  return $(el).css('display') === 'inline'\n}\n```\n\nEnables `$(':inline')`\n\n### Extend CSS properties\n\n```js\n$.cssHooks.someCSSProp = {\n  get: function (elem, computed, extra) {\n  },\n  set: function (elem, value) {\n  }\n}\n\n// Disable \"px\"\n$.cssNumber[\"someCSSProp\"] = true\n```\n\n### fn.animate() hooks\n\n```js\n$.fn.step.someWhatever = function(fx) {\n  // ...\n}\n```\n"
  },
  {
    "path": "js-appcache.md",
    "content": "---\ntitle: applicationCache\ncategory: JavaScript\n---\n\n## Reference\n{: .-one-column}\n\n### applicationCache checking\n\n```js\nif (window.applicationCache) {\n  // \"Naturally\" reload when an update is available\n  var reload = false\n\n  window.applicationCache.addEventListener('updateready', () => {\n    if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {\n      window.applicationCache.swapCache()\n      reload = true\n    }\n  }, false)\n\n  setInterval(() => {\n    try {\n      // There's nothing to update for first-time load, browser freaks out :/\n      window.applicationCache.update()\n    } catch (e) { }\n  }, 1000 * 60 * 60) // Every hour\n}\n```\n\nThis is a deprecated HTML feature. See: [Using the application cache](https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache) _(developer.mozilla.org)_\n"
  },
  {
    "path": "js-array.md",
    "content": "---\ntitle: JavaScript Arrays\ncategory: JavaScript\n---\n\n### Arrays\n\n```bash\nlist = [a,b,c,d,e]\n```\n{: .-setup}\n\n```bash\nlist[1]                 // → b\nlist.indexOf(b)         // → 1\nlist.lastIndexOf(b)     // → 1\nlist.includes(b)        // → true\n```\n\n### Subsets\n\n#### Immutable\n\n```bash\nlist.slice(0,1)         // → [a        ]\nlist.slice(1)           // → [  b,c,d,e]\nlist.slice(1,2)         // → [  b      ]\n```\n\n#### Mutative\n\n```bash\nre = list.splice(1)     // re = [b,c,d,e]  list == [a]\nre = list.splice(1,2)   // re = [b,c]      list == [a,d,e]\n```\n\n### Adding items\n\n#### Immutable\n\n```bash\nlist.concat([X,Y])      // → [_,_,_,_,_,X,Y]\n```\n\n#### Mutative\n\n```bash\nlist.push(X)            // list == [_,_,_,_,_,X]\nlist.unshift(X)         // list == [X,_,_,_,_,_]\nlist.splice(2, 0, X)    // list == [_,_,X,_,_,_]\n```\n\n### Inserting\n\n```bash\n// after -- [_,_,REF,NEW,_,_]\nlist.splice(list.indexOf(REF)+1, 0, NEW))\n```\n\n```bash\n// before -- [_,_,NEW,REF,_,_]\nlist.splice(list.indexOf(REF), 0, NEW))\n```\n\n### Replace items\n\n```bash\nlist.splice(2, 1, X)    // list == [a,b,X,d,e]\n```\n\n### Removing items\n\n```bash\nlist.pop()              // → e    list == [a,b,c,d]\nlist.shift()            // → a    list == [b,c,d,e]\nlist.splice(2, 1)       // → [c]  list == [a,b,d,e]\n```\n\n### Iterables\n\n```bash\n.filter(n => ...) => array\n```\n\n```bash\n.forEach(n => ...)\n```\n\n```bash\n.find(n => ...)  // es6\n.findIndex(...)  // es6\n```\n\n```bash\n.every(n => ...) => Boolean // ie9+\n.some(n => ..) => Boolean   // ie9+\n```\n\n```bash\n.map(n => ...)   // ie9+\n.reduce((total, n) => total) // ie9+\n.reduceRight(...)\n```\n"
  },
  {
    "path": "js-date.md",
    "content": "---\ntitle: JavaScript Date\ncategory: JavaScript\nweight: -3\n---\n\n## Date\n{: .-left-reference}\n\n### Constructor\n\n```js\n// Now\nnew Date()\n```\n\n```js\n// ms since epoch\nnew Date(1393678859000)\n```\n\n```js\n// Date format\nnew Date(\"March 1, 2014 13:00:59\")\n```\n\n```js\n// ISO date format\nnew Date(\"2014-03-01T13:00:59\")\n```\n\n```js\nnew Date(2014, 2, 1, 13, 0, 59, 0)\n```\n\n### Constructor\n\n| `new Date(` | `2014,` | `2,`  | `1,` | `13,` | `0,` | `59,` | `0)`  |\n| Date        | Year    | Month | Day  | Hour  | Min  | Sec   | Milli |\n{: .-css-breakdown}\n\nMonths are zero-indexed (eg, January is `0`).\n\n### Conversion\n\n| Method                   | Result                                      |\n| ---                      | ---                                         |\n| `d.toString()`           | `\"Sat Mar 01 2014 13:00:59 GMT+0000 (GMT)\"` |\n| `d.toTimeString()`       | `\"13:00:59 GMT+0000 (GMT)\"`                 |\n| `d.toUTCString()`        | `\"Sat, 01 Mar 2014 13:00:59 GMT\"`           |\n| ---                      | ---                                         |\n| `d.toDateString()`       | `\"Sat Mar 01 2014\"`                         |\n| `d.toISOString()`        | `\"2014-03-01T13:00:59.000Z\"`                |\n| `d.toLocaleString()`     | `\"3/1/2014, 1:00:59 PM\"`                    |\n| `d.toLocaleTimeString()` | `\"1:00:59 PM\"`                              |\n| ---                      | ---                                         |\n| `d.getTime()`            | `1393678859000`                             |\n\nAccessing\n---------\n\n### Getters\n\n| Method                 | Result            |\n| ---                    | ---               |\n| `.getDate()`           | `1..31`           |\n| `.getDay()`            | `0..6` (sun..sat) |\n| `.getFullYear()`       | `2014`            |\n| `.getMonth()`          | `0..11`           |\n| ---                    | ---               |\n| `.getHours()`          |                   |\n| `.getMinutes()`        |                   |\n| `.getSeconds()`        |                   |\n| `.getMilliseconds()`   |                   |\n| ---                    | ---               |\n| `.getTime()`           | ms since epoch    |\n| `.getTimezoneOffset()` |                   |\n\nUTC versions are also available (eg, `.getUTCDate()`, `.getUTCDay()`, etc).\n\n### Setters\n\n| Method                       | Result |\n| ---                          | ---    |\n| `.setDate` _(val)_           |        |\n| `.setDay` _(val)_            |        |\n| `.setFullYear` _(val)_       |        |\n| `.setMonth` _(val)_          |        |\n| ---                          | ---    |\n| `.setHours` _(val)_          |        |\n| `.setMinutes` _(val)_        |        |\n| `.setSeconds` _(val)_        |        |\n| `.setMilliseconds` _(val)_   |        |\n| ---                          | ---    |\n| `.setTime` _(val)_           |        |\n| `.setTimezoneOffset` _(val)_ |        |\n\nSee the getters list.\n"
  },
  {
    "path": "js-fetch.md",
    "content": "---\ntitle: fetch()\ncategory: JavaScript\nweight: -3\n---\n\n### Fetch\n{: .-prime}\n\n```js\nfetch('/data.json')\n  .then(response => response.json())\n  .then(data => {\n    console.log(data)\n  })\n  .catch(err => ...)\n```\n{: data-line=\"4\"}\n\n### Response\n\n```js\nfetch('/data.json')\n.then(res => {\n  res.text()       // response body (=> Promise)\n  res.json()       // parse via JSON (=> Promise)\n  res.status       //=> 200\n  res.statusText   //=> 'OK'\n  res.redirected   //=> false\n  res.ok           //=> true\n  res.url          //=> 'http://site.com/data.json'\n  res.type         //=> 'basic'\n                   //   ('cors' 'default' 'error'\n                   //    'opaque' 'opaqueredirect')\n\n  res.headers.get('Content-Type')\n})\n```\n\n### Request options\n\n```js\nfetch('/data.json', {\n  method: 'post',\n  body: new FormData(form), // post body\n  body: JSON.stringify(...),\n\n  headers: {\n    'Accept': 'application/json'\n  },\n\n  credentials: 'same-origin', // send cookies\n  credentials: 'include',     // send cookies, even in CORS\n\n})\n```\n\n### Catching errors\n\n```js\nfetch('/data.json')\n  .then(checkStatus)\n```\n\n```js\nfunction checkStatus (res) {\n  if (res.status >= 200 && res.status < 300) {\n    return res\n  } else {\n    let err = new Error(res.statusText)\n    err.response = res\n    throw err\n  }\n}\n```\n\nNon-2xx responses are still successful requests. Use another function to turn them to errors.\n\n### Using with node.js\n\n```js\nconst fetch = require('isomorphic-fetch')\n```\n\nSee: [isomorphic-fetch](https://npmjs.com/package/isomorphic-fetch) _(npmjs.com)_\n\n## References\n{: .-one-column}\n\n- <https://fetch.spec.whatwg.org/>\n- <https://www.npmjs.com/package/whatwg-fetch>\n"
  },
  {
    "path": "js-lazy.md",
    "content": "---\ntitle: JavaScript lazy shortcuts\ncategory: JavaScript\n---\n\n## Shortcuts\n{: .-left-reference}\n\n### Examples\n\n```js\nn = +'4096'    // n === 4096\ns = '' + 200   // s === '200'\n```\n\n```js\nnow = +new Date()\nisPublished = !!post.publishedAt\n```\n\n### Shortcuts\n\n| What | Lazy mode | \"The right way\" |\n| --- | --- | --- |\n| String to number | `+str` | `parseInt(str, 10)` _or_ `parseFloat()` |\n| Math floor | `num | 0` | `Math.floor(num)` |\n| Number to string | `'' + num` | `num.toString()` |\n| Date to UNIX timestamp | `+new Date()` | `new Date().getTime()` |\n| Any to boolean | `!!value` | `Boolean(value)` |\n| Check array contents | `if (~arr.indexOf(v))` | `if (arr.includes(v))` |\n{: .-left-align.-headers}\n\n`.includes` is ES6-only, otherwise use `.indexOf(val) !== -1` if you don't polyfill.\n"
  },
  {
    "path": "js-model.md",
    "content": "---\ntitle: js-model\ncategory: JavaScript libraries\n---\n\n### Example\n\n```bash\nProject = Model \"project\", ->\n  @extend\n    findByTitle: (title) -> ...\n\n  @include\n    markAsDone: -> ...\n\n  # ActiveRecord::Base.include_root_in_json = false\n```\n\n```bash\nproject = Project.find(1)\nproject = Project.findByTitle(\"hello\")\n\nproject.markAsDone()\n```\n\n### Persistence\n\n```bash\nProject \"hi\", ->\n  @persistence Model.REST, \"/projects\"\n  @persistence Model.localStorage\n```\n\n```bash\nProject.load ->\n  # loaded\n```\n\n### Attrs\n\n```bash\nproject = new Project(name: \"Hello\")\n\nproject.attr('name', \"Hey\")\nproject.attr('name')\n\nproject.save()\nproject.destroy()\n```\n\n### Collection\n\n```bash\nFood.add(egg)\nFood.all()\nFood.select (food) -> ...\nFood.first()\n```\n\n```bash\nFood.find(id)\n```\n\n### Events\n\n```bash\n# Classes\nProject.bind \"add\", (obj) ->\nProject.bind \"remove\", (obj) ->\n```\n\n```bash\n# Instances\nproject.bind \"update\", ->\nproject.bind \"destroy\", ->\n```\n\n```bash\nproject.trigger \"turn_blue\"\n```\n\n## References\n{: .-one-column}\n\n- <http://benpickles.github.io/js-model/>\n"
  },
  {
    "path": "js-speech.md",
    "content": "---\ntitle: JavaScript speech synthesis\ncategory: JavaScript\nweight: -1\n---\n\n## SpeechSynthesisUtterance\n{: .-one-column}\n\n```js\nfunction speak (message) {\n  var msg = new SpeechSynthesisUtterance(message)\n  var voices = window.speechSynthesis.getVoices()\n  msg.voice = voices[0]\n  window.speechSynthesis.speak(msg)\n}\n```\n\n```js\nspeak('Hello, world')\n```\n\nSee: [SpeechSynthesisUtterance](https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance) _(developer.mozilla.org)_\n"
  },
  {
    "path": "jscoverage.md",
    "content": "---\ntitle: jscoverage\ncategory: JavaScript libraries\nintro: |\n  A small guide into installing [jscoverage](https://npmjs.com/package./jscoverage). Also see [mocha-blanket](./mocha-blanket).\n---\n\n### Install\n\n#### Install via npm\n\n```bash\nnpm install --save-dev jscoverage\n```\n\n#### Ignore output\n\n```bash\necho coverage.html >> .gitignore\n```\n\n### package.json\n\nThe `coverage` task injects your source files (`lib`) with jscoverage hooks, runs `mocha -R html-cov`, then restores later.\n{: .-setup}\n\n```bash\n/* directory */\n\"coverage\": \"mv lib lib~; (jscoverage lib~ lib; mocha -R html-cov > coverage.html); rm -rf lib; mv lib~ lib\"\n```\n{: .-hard-wrap}\n\n```bash\n/* single file */\n\"coverage\": \"(cp index.js index.js~; jscoverage index.js; mv index-cov.js index.js; mocha -R html-cov > coverage.html); mv index.js~ index.js\"\n```\n{: .-hard-wrap}\n\n### Run\n\n```bash\nnpm run coverage\n```\n\n```bash\nopen coverage.html\n```\n\n### Caveats\n\nIf you're using jsdom, be sure to expose the `window._$jscoverage` variable into \nthe `global` scope.\n"
  },
  {
    "path": "jsdoc.md",
    "content": "---\ntitle: Jsdoc\ncategory: JavaScript\nupdated: 2024-07-26\nweight: -1\n---\n\n### Functions\n\n```js\n/**\n * This is a function.\n *\n * @param {string} n - A string param\n * @param {string} [o] - A optional string param\n * @param {string} [d=DefaultValue] - A optional string param\n * @return {string} A good string\n *\n * @example\n *\n *     foo('hello')\n */\n\nfunction foo(n, o, d) {\n  return n\n}\n```\n\nSee: <https://jsdoc.app/index.html>\n\n### Types\n\n| Type                            | Description                           |\n| ------------------------------- | ------------------------------------- |\n| `@param {string=} n`            | Optional                              |\n| `@param {string} [n]`           | Optional                              |\n| `@param {(string|number)} n`    | Multiple types                        |\n| `@param {*} n`                  | Any type                              |\n| `@param {...string} n`          | Repeatable arguments                  |\n| `@param {string} [n=\"hi\"]`      | Optional with default                 |\n| `@param {string[]} n`           | Array of strings                      |\n| `@return {Promise<string[]>} n` | Promise fulfilled by array of strings |\n\nSee: <https://jsdoc.app/tags-type.html>\n\n### Variables\n\n```js\n/**\n * @type {number}\n */\nvar FOO = 1\n```\n\n```js\n/**\n * @const {number}\n */\nconst FOO = 1\n```\n\n### Typedef\n\n```js\n/**\n * A song\n * @typedef {Object} Song\n * @property {string} title - The title\n * @property {string} artist - The artist\n * @property {number} year - The year\n */\n```\n\n```js\n/**\n * Plays a song\n * @param {Song} song - The {@link Song} to be played\n */\n\nfunction play(song) {}\n```\n\nSee: <https://jsdoc.app/tags-typedef.html>\n\n### Typedef Shorthand\n\n{% raw %}\n\n```js\n/**\n * A song\n * @typedef {{title: string, artist: string, year: number}} Song\n */\n```\n\n{% endraw %}\n\n```js\n/**\n * Plays a song\n * @param {Song} song - The {@link Song} to be played\n */\n\nfunction play(song) {}\n```\n\nSee: <https://jsdoc.app/tags-typedef.html>\n\n### Importing types\n\n```js\n/**\n * @typedef {import('./Foo').default} Bar\n */\n\n// or\n\n/** @import { Bar } from \"./Foo.js\" */\n\n/**\n * @param {Bar} x\n */\n\nfunction test(x) {}\n```\n\nThis syntax is [TypeScript-specific](https://github.com/Microsoft/TypeScript/wiki/JsDoc-support-in-JavaScript#import-types).\n\n### Other keywords\n\n```js\n/**\n * @throws {FooException}\n * @async\n * @private\n * @deprecated\n * @see\n * @example\n * @todo\n *\n * @function\n * @class\n */\n```\n\nSee the full list: <https://jsdoc.app/index.html#block-tags>\n\n### Renaming\n\n```js\n/**\n * @alias Foo.bar\n * @name Foo.bar\n */\n```\n\nPrefer `alias` over `name`. See: <https://jsdoc.app/tags-alias.html>\n"
  },
  {
    "path": "jshint.md",
    "content": "---\ntitle: Jshint\ncategory: JavaScript libraries\nupdated: 2017-09-12\n---\n\n### Relaxing\n\nEnable these options to *not* throw errors in these conditions.\nSee: [Relaxing](https://www.jshint.com/docs/options/#relaxing-options)\n{: .-setup}\n\n```js\n/* jshint asi: true */\nallow()\nmissing_semicolons()\n```\n\n```js\n/* jshint boss: true */\nif (m = str.match(/.../))\n```\n\n```js\n/* jshint debug: true */\ndebugger;\n```\n\n```js\n/* jshint eqnull: true */\nif (x == null)\n```\n\n```js\n/* jshint evil: true */\neval('...')\n```\n\n```js\n/* jshint expr: true */\nproduction && minify = true;\ndiv.innerWidth;\nexpect(x).be.true;\n```\n\n```js\n/* jshint laxcomma: true */\nvar one = 1\n  , two = 2;\n```\n\n```js\n/* jshint loopfunc: true */\nfor (i=0; i<10; x++) {\n  (function(i) { ... })(i);\n}\n```\n\n```js\n/* jshint sub: true */\nprocess.env['name_here']\n```\n\n```js\n/* jshint strict: \"global\" */\n\"use strict\";\n```\n\n### Enforcing\n\nEnable these options to catch more errors.\nSee: [Enforcing](https://www.jshint.com/docs/options/#enforcing-options)\n{: .-setup}\n\n```js\n/* jshint curly: true */\nwhile (day)                     // err: use { }'s\n  shuffle();\n```\n\n```js\n/* jshint eqeqeq: true */\nif (a == null)                  // err: use ===\n```\n\n```js\n/* jshint es3: true */\n// ...for legacy IE compatibility\na.default = function() { ... }; // err: reserved word\narray = [ 1, 2, 3, ];           // err: extra comma\n```\n\n```js\n/* jshint forin: true */\nfor (key in obj) { ... }        // err: check obj.hasOwnProperty(key)\n```\n\n```js\n/* jshint freeze: true */\nArray.prototype.count = ...;    // err: don't modify native prototypes\n```\n\n```js\n/* jshint indent: 4 */\nif (x) {                        // err: expected indent of 4, found 2\n  ...;\n}\n```\n\n```js\n/* jshint quotmark: single */\n/* jshint quotmark: double */\nalert(\"hi\");                    // err: only single allowed\n```\n\n```js\n/* jshint strict: true */\nfunction() { ... }              // err: need \"use strict\"\n```\n\n```js\n/* jshint white: true, indent: 4 */\n/* jshint maxdepth: 2 */\n/* jshint maxparams: 3 */\n/* jshint maxstatements: 4 */\n/* jshint maxcomplexity: 5 */\n/* jshint maxlen: 80 */\n```\n\n### Ignore\n\n```js\n/* jshint ignore:start */\n/* jshint ignore:end */\n```\n\n### Globals and Environments\n\n```js\n/* jshint undef: true */\n/* global jQuery */\n/* global -BAD_LIB */\n```\n\n```js\n/* jshint devel: true */   console, alert, ...\n/* jshint browser: true */ window, document, location, ...\n/* jshint node: true */    module, exports, console, process, ...\n/* jshint jquery: true */  jQuery, $\n```\n\nSee: [Environments](https://www.jshint.com/docs/options/#environments)\n\n### Also see\n\n* <https://www.jshint.com/docs/options/>\n* <https://gist.github.com/haschek/2595796>\n"
  },
  {
    "path": "knex.md",
    "content": "---\ntitle: Knex\nupdated: 2020-06-03\ncategory: Databases\nintro: |\n  [Knex](http://knexjs.org/) is an SQL query builder for Node.js.\n  This guide targets v0.13.0.\n---\n\n## Getting started\n{: .-three-column}\n\n### Connect\n\n```js\nrequire('knex')({\n  client: 'pg',\n  connection: 'postgres://user:pass@localhost:5432/dbname'\n})\n```\n\nSee: [Connect](#connect-1)\n\n### Create table\n\n```js\nknex.schema.createTable('user', (table) => {\n  table.increments('id')\n  table.string('name')\n  table.integer('age')\n})\n.then(() => ···)\n```\n\nSee: [Schema](#schema)\n\n### Select\n\n```js\nknex('users')\n  .where({ email: 'hi@example.com' })\n  .then(rows => ···)\n```\n{: data-line=\"2\"}\n\nSee: [Select](#select-1)\n\n### Insert\n\n```js\nknex('users')\n  .insert({ email: 'hi@example.com' })\n```\n{: data-line=\"2\"}\n\nSee: [Insert](#insert-1)\n\n### Update\n\n```js\nknex('users')\n  .where({ id: 135 })\n  .update({ email: 'hi@example.com' })\n```\n{: data-line=\"2,3\"}\n\nSee: [Update](#update-1)\n\n### Migrations\n\n```bash\nknex init\nknex migrate:make migration_name\nknex migrate:make migration_name -x ts # Generates a TypeScript migration file\nknex migrate:latest\nknex migrate:rollback\n```\n\nSee: [Migrations](#migrations-1)\n\n### Seeds\n\n```bash\nknex seed:make seed_name\nknex seed:make seed_name -x ts # Generates a TypeScript seed file\nknex seed:run # Runs all seed files\nknex seed:run --specific=seed-filename.js # Runs a specific seed file\n```\n\nSee: [Seeds](http://knexjs.org/#Seeds)\n\n## Connect\n{: .-three-column}\n\n### Libraries\n\n| `pg` | PostgreSQL |\n| `mysql` | MySQL or MariaDB |\n| `sqlite3` | Sqlite3 |\n| `mssql` | MSSQL |\n\nInstall any of these packages along with `knex`.\n\nSee: [Node.js installation](http://knexjs.org/#Installation-node)\n\n### Connect via host\n\n```js\nvar knex = require('knex')({\n  client: 'mysql',\n  connection: {\n    host: '127.0.0.1',\n    user: 'your_database_user',\n    password: 'your_database_password',\n    database: 'myapp_test'\n  },\n  pool: { min: 0, max: 7 }\n})\n```\n{: data-line=\"2,3\"}\n\nSee: [Initializing the library](http://knexjs.org/#Installation-client)\n\n### Connect via URL\n\n```js\nvar pg = require('knex')({\n  client: 'pg',\n  connection: process.env.DATABASE_URL,\n  searchPath: 'knex,public',\n  pool: { min: 0, max: 7 }\n})\n```\n{: data-line=\"2,3\"}\n\n### Connect via Sqlite\n\n```js\nvar knex = require('knex')({\n  client: 'sqlite3',\n  connection: { filename: './mydb.sqlite' }\n})\n```\n{: data-line=\"2,3\"}\n\n## Select\n\n### Where\n\n```js\nknex\n  .from('books')\n  .select('title', 'author', 'year')\n```\n\n#### Where\n\n```js\n  .where('title', 'Hello')\n  .where({ title: 'Hello' })\n  .whereIn('id', [1, 2, 3])\n  .whereNot(···)\n  .whereNotIn('id', [1, 2, 3])\n```\n\n#### Where conditions\n\n```js\n  .whereNull('updated_at')\n  .whereNotNull(···)\n```\n\n```js\n  .whereExists('updated_at')\n  .whereNotExists(···)\n```\n\n```js\n  .whereBetween('votes', [1, 100])\n  .whereNotBetween(···)\n```\n\n```js\n  .whereRaw('id = ?', [1])\n```\n\n#### Where grouping\n\n```js\n  .where(function () {\n    this\n      .where('id', 1)\n      .orWhere('id', '>', 10)\n  })\n```\n\nSee: [Where clauses](http://knexjs.org/#Builder-wheres)\n\n### Join\n\n```js\nknex('users')\n```\n\n#### Basic join\n\n```js\n  .join('contacts', 'users.id', '=', 'contacts.id')\n  .join('contacts', {'users.id': 'contacts.id'})\n```\n\n#### Strings\n\n```js\n  .join('accounts', 'accounts.type', '=', knex.raw('?', ['admin']))\n```\n\n#### Directions\n\n```js\n  .leftJoin(···)\n  .leftOuterJoin(···)\n  .rightJoin(···)\n  .rightOuterJoin(···)\n  .outerJoin(···)\n  .fullOuterJoin(···)\n  .crossJoin(···)\n```\n\n#### Raw\n\n```js\n  .joinRaw('natural full join table1')\n```\n\n#### Grouping\n\n```js\n  .join('accounts', function () {\n    this\n      .on('accounts.id', '=', 'users.account_id')\n      .orOn('accounts.owner_id', '=', 'users.id')\n\n      .onIn('accounts.id', [1, 2, 3, 5, 8])\n      .onNotIn(···)\n\n      .onNull('accounts.email')\n      .onNotNull(···)\n\n      .onExists(function () {\n        this.select(···)\n      })\n      .onNotExists(···)\n  })\n```\n\nSee: [Join methods](http://knexjs.org/#Builder-join)\n\n### Others\n\n```js\nknex('users')\n  .distinct()\n```\n\n#### Group\n\n```js\n  .groupBy('count')\n  .groupByRaw('year WITH ROLLUP')\n```\n\n#### Order\n```js\n  .orderBy('name', 'desc')\n  .orderByRaw('name DESC')\n```\n\n#### Offset/limit\n\n```js\n  .offset(10)\n  .limit(20)\n```\n\n#### Having\n\n```js\n  .having('count', '>', 100)\n  .havingIn('count', [1, 100])\n```\n\n#### Union\n\n```js\n  .union(function() {\n    this.select(···)\n  })\n  .unionAll(···)\n```\n\nSee: [Query builder](http://knexjs.org/#Builder)\n\n### Etc\n\n```js\nknex('users')\n  .pluck('id')\n  .then(ids => { ··· })\n```\n```js\nknex('users')\n  .first()\n  .then(user => { ··· })\n```\n\n#### Booleans\n\n```js\n  .count('active')\n  .count('active as is_active')\n```\n\n#### Numbers\n\n```js\n  .min('age')\n  .max('age')\n  .sum('age')\n  .sumDistinct('age')\n  .avg('age')\n```\n\nSee: [Query builder](http://knexjs.org/#Builder)\n\n## Schema\n\n### Create table\n\n```js\nknex.schema.createTable('accounts', table => {\n```\n\n#### Columns\n\n```js\n  table.increments('id')\n  table.string('account_name')\n  table.integer('age')\n  table.float('age')\n  table.decimal('balance', 8, 2)\n  table.boolean('is_admin')\n  table.date('birthday')\n  table.time('created_at')\n  table.timestamp('created_at').defaultTo(knex.fn.now())\n  table.json('profile')\n  table.jsonb('profile')\n  table.uuid('id').primary()\n```\n\n#### Constraints\n\n```js\n  table.unique('email')\n  table.unique(['email', 'company_id'])\n  table.dropUnique(···)\n```\n\n#### Indices\n\n```js\n  table.foreign('company_id')\n    .references('companies.id')\n  table.dropForeign(···)\n```\n\n#### Variations\n\n```js\n  table.integer('user_id')\n    .unsigned()\n    .references('users.id')\n```\n\n```js\n})\n.then(() => ···)\n```\n{: .-setup}\n\nSee: [Schema builder](http://knexjs.org/#Schema)\n\n### Alter table\n\n```js\nknex.schema.table('accounts', table => {\n```\n\n#### Create\n\n```js\n  table.string('first_name')\n```\n\n#### Alter\n\n```js\n  table.string('first_name').alter()\n  table.renameColumn('admin', 'is_admin')\n```\n\n#### Drop\n\n```js\n  table.dropColumn('admin')\n  table.dropTimestamps('created_at')\n```\n\n```js\n})\n```\n{: .-setup}\n\nSee: [Schema builder](http://knexjs.org/#Schema)\n\n### Other methods\n\n```js\nknex.schema\n  .renameTable('persons', 'people')\n  .dropTable('persons')\n```\n\n```js\n  .hasTable('users').then(exists => ···)\n  .hasColumn('users', 'id').then(exists => ···)\n```\n\nSee: [Schema builder](http://knexjs.org/#Schema)\n\n## Modifying\n{: .-three-column}\n\n### Insert\n\n```js\nknex('users')\n```\n\n#### Insert one\n\n```js\n  .insert({ name: 'John' })\n```\n\n#### Insert many\n\n```js\n  .insert([\n    { name: 'Starsky' },\n    { name: 'Hutch' }\n  ])\n```\n\nSee: [Insert](http://knexjs.org/#Builder-insert)\n\n### Update\n\n```js\nknex('users')\n  .where({ id: 2 })\n  .update({ name: 'Homer' })\n```\n\nSee: [Update](http://knexjs.org/#Builder-update)\n\n### Delete\n\n```js\nknex('users')\n  .where({ id: 2 })\n  .del()\n```\n\nSee: [Delete](http://knexjs.org/#Builder-del)\n\n## Migrations\n\n### Setting up\n\n#### Create knexfile.js\n\n```\n./node_modules/.bin/knex init\n```\n\n#### Create a migration\n\n```\nknex migrate:make migration_name\nknex migrate:make migration_name --env production\n```\n\n#### Run migrations\n\n```\nknex migrate:latest\nknex migrate:latest --env production\n```\n\n#### Rollback\n\n```\nknex migrate:rollback\nknex migrate:rollback --env production\n```\n\nSee: [Migrations](http://knexjs.org/#Migrations)\n"
  },
  {
    "path": "koa.md",
    "content": "---\ntitle: Koa\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\nKoa is a web framework for Node.js.\n\n- <https://koajs.com/>\n\n### Reference\n\n```js\napp.use(function * (next) {\n  var ctx = this\n\n  ctx.request\n  ctx.response\n\n  ctx.body = 'hello'\n\n  ctx.state.user = yield User.find(id).fetch()\n\n  ctx.cookies.set('foo', 'hello', { signed: true })\n  ctx.cookies.get('foo')\n\n  ctx.throw(403)\n```\n\n### Request\n\n```js\n  ctx.header        // ctx.headers\n  ctx.method        // and =\n  ctx.url           // and =\n  ctx.originalUrl\n  ctx.origin        // => 'http://example.com'\n  ctx.href          // => 'http://example.com/foo?q=hello'\n  ctx.path          // and =\n  ctx.query         // { q: 'hello' }\n  ctx.query         // and =\n  ctx.querystring\n  ctx.querystring   // and =\n  ctx.host\n  ctx.hostname\n  ctx.fresh\n  ctx.stale\n  ctx.socket\n  ctx.protocol\n  ctx.secure\n  ctx.ip\n  ctx.ips\n  ctx.subdomains\n  ctx.is()                  // .is('html') .is('text/html')\n  ctx.accepts()             // .accepts('html') .accepts('html', 'json')\n  ctx.acceptsEncodings()    // .acceptsEncodings('gzip')\n  ctx.acceptsCharsets()\n  ctx.acceptsLanguages()\n  ctx.get()\n\n  ctx.request.type          // => 'image/jpg'\n  ctx.request.charset       // => 'utf-8'\n  ctx.request.protocol      // => 'https'\n  ctx.request.secure        // => true\n  ctx.request.ip            // (supports X-Forwarded-For if app.proxy)\n  ctx.request.ips\n  ctx.request.subdomains\n\n  ctx.request.fresh\n  ctx.request.stale\n```\n\n### Response\n\n```js\n  ctx.body = 'hello'\n\n  ctx.throw(403)\n  ctx.throw('name required', 403)\n  ctx.throw(403, 'name required')\n  ctx.throw('oops')\n  ctx.assert(ctx.state.user, 401, 'You must log in')\n```\n\n### Middlewares\n\n```js\nexports.conditionalGet = require('koa-conditional-get');\nexports.responseTime = require('koa-response-time');\nexports.ratelimit = require('koa-ratelimit');\nexports.compress = require('koa-compress');\nexports.rewrite = require('koa-rewrite');\nexports.favicon = require('koa-favicon');\nexports.session = require('koa-session');\nexports.static = require('koa-static');\nexports.logger = require('koa-logger');\nexports.mount = require('koa-mount');\nexports.etag = require('koa-etag');\n```\n"
  },
  {
    "path": "kotlin.md",
    "content": "---\ntitle: Kotlin\nupdated: 2018-12-06\ncategory: Java & JVM\nprism_languages: [kotlin]\nintro: |\n    [Kotlin](http://kotlinlang.org/) is a statically typed programming language for modern multiplatform applications.\n---\n\nVariables\n---------\n{: .-three-column}\n\n### Mutability\n\n```kotlin\nvar mutableString: String = \"Adam\"\nval immutableString: String = \"Adam\"\nval inferredString = \"Adam\"\n```\n\n### Strings\n\n```kotlin\nval name = \"Adam\"\nval greeting = \"Hello, \" + name\nval greetingTemplate = \"Hello, $name\"\nval interpolated = \"Hello, ${name.toUpperCase()}\"\n```\n\n### Numbers\n\n```kotlin\nval intNum = 10\nval doubleNum = 10.0\nval longNum = 10L\nval floatNum = 10.0F\n```\n\n### Booleans\n\n```kotlin\nval trueBoolean = true\nval falseBoolean = false\nval andCondition = trueBoolean && falseBoolean\nval orCondition = trueBoolean || falseBoolean\n```\n\n### Static Fields\n\n```kotlin\nclass Person {\n    companion object {\n        val NAME_KEY = \"name_key\"\n    }\n}\n\nval key = Person.NAME_KEY\n```\n\nNull Safety\n-----------\n{: .-two-column}\n\n### Nullable properties\n\n```kotlin\nval cannotBeNull: String = null // Invalid\nval canBeNull: String? = null // Valid\n\nval cannotBeNull: Int = null // Invalid\nval canBeNull: Int? = null // Valid\n```\n\n### Checking for null\n\n```kotlin\nval name: String? = \"Adam\"\n\nif (name != null && name.length > 0) {\n    print(\"String length is ${name.length}\")\n} else {\n    print(\"String is empty.\")\n}\n```\n\n### Safe Operator\n\n```kotlin\nval nullableStringLength: Int? = nullableString?.length\nval nullableDepartmentHead: String? = person?.department?.head?.name\n```\n\n### Elvis Operator\n\n```kotlin\nval nonNullStringLength: Int = nullableString?.length ?: 0\nval nonNullDepartmentHead: String = person?.department?.head?.name ?: \"\"\nval nonNullDepartmentHead: String = person?.department?.head?.name.orEmpty()\n```\n\n### Safe Casts\n```kotlin\n// Will not throw ClassCastException\nval nullableCar: Car? = (input as? Car)\n```\n\nCollections\n-----------\n{: .-two-column}\n\n### Creation\n\n```kotlin\nval numArray = arrayOf(1, 2, 3)\nval numList = listOf(1, 2, 3)\nval mutableNumList = mutableListOf(1, 2, 3)\n```\n\n### Accessing\n\n```kotlin\nval firstItem = numList[0]\nval firstItem = numList.first()\nval firstItem = numList.firstOrNull()\n```\n\n### Maps\n\n```kotlin\nval faceCards = mutableMapOf(\"Jack\" to 11, \"Queen\" to 12, \"King\" to 13)\nval jackValue = faceCards[\"Jack\"] // 11\nfaceCards[\"Ace\"] = 1\n```\n\n### Mutability\n\n```kotlin\nval immutableList = listOf(1, 2, 3)\nval mutableList = immutableList.toMutableList()\n\nval immutableMap = mapOf(\"Jack\" to 11, \"Queen\" to 12, \"King\" to 13)\nval mutableMap = immutableMap.toMutableMap()\n```\n\n### Iterating\n\n```kotlin\nfor (item in myList) {\n    print(item)\n}\n\nmyList.forEach {\n    print(it)\n}\n\nmyList.forEachIndexed { index, item -> \n    print(\"Item at $index is: $item\")\n}\n```\n\n### Filtering & Searching\n\n```kotlin\nval evenNumbers = numList.filter { it % 2 == 0 }\nval containsEven = numList.any { it % 2 == 0 }\nval containsNoEvens = numList.none { it % 2 == 0 }\nval containsNoEvens = numList.all { it % 2 == 1 }\nval firstEvenNumber: Int = numList.first { it % 2 == 0 }\nval firstEvenOrNull: Int? = numList.firstOrNull { it % 2 == 0 }\nval fullMenu = objList.map { \"${it.name} - $${it.detail}\" }\n```\n\nNote: `it` is the [implicit name for a single parameter](https://kotlinlang.org/docs/reference/lambdas.html#it-implicit-name-of-a-single-parameter).\n\nFunctions\n---------\n{: .-two-column}\n\n### Parameters & Return Types\n\n```kotlin\nfun printName() {\n    print(\"Adam\")\n}\n\nfun printName(person: Person) {\n    print(person.name)\n}\n\nfun getGreeting(person: Person): String {\n    return \"Hello, ${person.name}\"\n}\n\nfun getGreeting(person: Person): String = \"Hello, ${person.name}\"\nfun getGreeting(person: Person) = \"Hello, ${person.name}\"\n```\n\n### Higher Order Functions\n\n```kotlin\nfun callbackIfTrue(condition: Boolean, callback: () -> Unit) {\n    if (condition) {\n        callback()\n    }\n}\n\ncallbackIfTrue(someBoolean) {\n    print(\"Condition was true\")\n}\n```\n\n### Extension Functions\n\n```kotlin\nfun Int.timesTwo(): Int {\n    return this * 2\n}\n\nval four = 2.timesTwo()\n```\n\n### Default Parameters\n\n```kotlin\nfun getGreeting(person: Person, intro: String = \"Hello,\"): String {\n    return \"$intro ${person.name}\"\n}\n\n// Returns \"Hello, Adam\"\nval hello = getGreeting(Person(\"Adam\"))\n\n// Returns \"Welcome, Adam\"\nval welcome = getGreeting(Person(\"Adam\"), \"Welcome,\")\n```\n\n### Named Parameters\n\n```kotlin\nclass Person(val name: String = \"\", age: Int = 0)\n\n// All valid\nval person = Person()\nval person = Person(\"Adam\", 100)\nval person = Person(name = \"Adam\", age = 100)\nval person = Person(age = 100)\nval person = Person(age = 100, name = \"Adam\")\n```\n\n### Static Functions\n\n```kotlin\nclass Fragment(val args: Bundle) {\n    companion object {\n        fun newInstance(args: Bundle): Fragment {\n            return Fragment(args)\n        }\n    }\n}\n\nval fragment = Fragment.newInstance(args)\n```\n\n* [Companion Objects](https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects)\n\nClasses\n-------\n{: .-two-column}\n\n### Primary Constructor\n\n```kotlin\nclass Person(val name: String, val age: Int)\nval adam = Person(\"Adam\", 100)\n```\n\n### Secondary Constructors\n\n```kotlin\nclass Person(val name: String) {\n    private var age: Int? = null\n\n    constructor(name: String, age: Int) : this(name) {\n        this.age = age\n    }\n}\n\n// Above can be replaced with default params\nclass Person(val name: String, val age: Int? = null)\n```\n\n### Inheritance & Implementation\n\n```kotlin\nopen class Vehicle\nclass Car : Vehicle()\n\ninterface Runner {\n    fun run()\n}\n\nclass Machine : Runner {\n    override fun run() {\n        // ...\n    }\n}\n```\n\nControl Flow\n------------\n{: .-two-column}\n\n### If Statements\n\n```kotlin\nif (someBoolean) {\n    doThing()\n} else {\n    doOtherThing()\n}\n```\n\n### For Loops\n\n```kotlin\nfor (i in 0..10) { } // 1 - 10\nfor (i in 0 until 10) // 1 - 9\n(0..10).forEach { }\nfor (i in 0 until 10 step 2) // 0, 2, 4, 6, 8\n```\n\n### When Statements\n\n```kotlin\nwhen (direction) {\n    NORTH -> {\n        print(\"North\")\n    }\n    SOUTH -> print(\"South\")\n    EAST, WEST -> print(\"East or West\")\n    \"N/A\" -> print(\"Unavailable\")\n    else -> print(\"Invalid Direction\")\n}\n```\n\n### While Loops\n\n```kotlin\nwhile (x > 0) {\n    x--\n}\n\ndo {\n    x--\n} while (x > 0)\n```\n\nDestructuring Declarations\n--------------------------\n{: .-two-column}\n\n### Objects & Lists\n\n```kotlin\nval person = Person(\"Adam\", 100)\nval (name, age) = person\n\nval pair = Pair(1, 2)\nval (first, second) = pair\n\nval coordinates = arrayOf(1, 2, 3)\nval (x, y, z) = coordinates\n```\n\n### ComponentN Functions\n\n```kotlin\nclass Person(val name: String, val age: Int) {\n\toperator fun component1(): String {\n\t\treturn name\n\t}\n\n\toperator fun component2(): Int {\n\t\treturn age\n\t}\n}\n```\n\nReferences\n----------\n{: .-one-column}\n\n* [Defining Variables](https://kotlinlang.org/docs/reference/basic-syntax.html#defining-variables) _(kotlinlang.org)_\n* [Strings Documentation](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) _(kotlinlang.org)_\n* [String Templates](https://kotlinlang.org/docs/reference/basic-types.html#string-templates) _(kotlinlang.org)_\n* [Basic Types](https://kotlinlang.org/docs/reference/basic-types.html) _(kotlinlang.org)_\n* [Companion Objects](https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects) _(kotlinlang.org)_\n* [Null Safety](https://kotlinlang.org/docs/reference/null-safety.html) _(kotlinlang.org)_\n* [Collections Overview](https://kotlinlang.org/docs/reference/collections.html) _(kotlinlang.org)_\n* [Collections Documentation](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/index.html) _(kotlinlang.org)_\n* [Functions Documentation](https://kotlinlang.org/docs/reference/functions.html) _(kotlinlang.org)_\n* [Classes Documentation](https://kotlinlang.org/docs/reference/classes.html) _(kotlinlang.org)_\n* [Destructuring Declarations](https://kotlinlang.org/docs/reference/multi-declarations.html) _(kotlinlang.org)_\n"
  },
  {
    "path": "kramdown.md",
    "content": "---\ntitle: Kramdown\ncategory: Markup\n---\n\n### About\n{: .-intro}\n\nKramdown is a Markdown parser in Ruby.\n\n- <https://kramdown.gettalong.org/>\n\n### Configuration\n\n * `parse_block_html` - process kramdown syntax inside blocks\n * `parse_span_html` - process kramdown syntax inside inlines\n * `html_to_native` - convert html elements to native elements\n\n    {::options parse_block_html=\"true\" /}\n\nFor the GFM parser:\n\n * `hard_wrap`\n\nhttp://kramdown.gettalong.org/parser/gfm.html\n\n### For jekyll (gh-pages)\n\n    # _config.yml\n    markdown: kramdown\n    kramdown:\n      input: GFM\n\n### Footnotes (Kramdown)\n\n    This is some text.[^1]. Other text.[^footnote].\n\n    [^1]: Some *crazy* footnote definition.\n\n### Abbreviations (Kramdown)\n\n    This is some text not written in HTML but in another language!\n\n    *[another language]: It's called Markdown\n    *[HTML]: HyperTextMarkupLanguage\n\n### Classes and IDs (Kramdown)\n\n    A simple paragraph with an ID attribute.\n    {: #para-one}\n\n    > A blockquote with a title\n    {:title=\"The blockquote title\"}\n    {: #myid}\n\n    * {:.cls} This item has the class \"cls\"\n\n    {:.ruby}\n        Some code here\n\n### References\n\n * http://kramdown.gettalong.org/syntax.html\n * http://kramdown.gettalong.org/parser/kramdown.html\n"
  },
  {
    "path": "layout-thrashing.md",
    "content": "---\ntitle: Layout thrashing\ncategory: HTML\ndescription: \"\"\nupdated: 2017-10-19\nweight: -1\nintro: |\n  These are CSS properties that will cause \"layout thrashing\". Avoid changing them to prevent bottlenecks in your UI performance.\n---\n\n## Layout thrashing\n{: .-one-column}\n\n### Things that cause invalidation\n\n#### Element\n\n  - clientHeight\n  - clientLeft\n  - clientTop\n  - clientWidth\n  - focus\n  - getBoundingClientRect\n  - getClientRects\n  - innerText\n  - offsetHeight\n  - offsetLeft\n  - offsetParent\n  - offsetTop\n  - offsetWidth\n  - outerText\n  - scrollByLines\n  - scrollByPages\n  - scrollHeight\n  - scrollIntoView\n  - scrollIntoViewIfNeeded\n  - scrollLeft\n  - scrollTop\n  - scrollWidth\n{: .-six-column}\n\n#### MouseEvent\n\n  - layerX\n  - layerY\n  - offsetX\n  - offsetY\n{: .-six-column}\n\n#### Window\n\n  - getComputedStyle\n  - scrollBy\n  - scrollTo\n  - scrollX\n  - scrollY\n{: .-six-column}\n\n#### Frame, Document & Image\n\n  - height\n  - width\n{: .-six-column}\n\n#### jQuery\n\n  - $.fn.offset\n  - $.fn.offsetParent\n  - $.fn.position\n  - $.fn.scrollLeft\n  - $.fn.scrollTop\n  - $.fn.css('...')\n  - $.fn.text('...')\n  - $(':hidden')\n  - $(':contains')\n{: .-six-column}\n\n## Also see\n\n * <http://www.kellegous.com/j/2013/01/26/layout-performance/>\n * <https://gist.github.com/desandro/4657744>\n * <http://stackoverflow.com/questions/17199958/why-does-setting-textcontent-cause-layout-thrashing>\n"
  },
  {
    "path": "ledger-csv.md",
    "content": "---\ntitle: Ledger CSV format\ncategory: Ledger\n---\n\n## Ledger CSV format\n{: .-one-column}\n\n```\n$ ledger csv\n```\n{: .-setup}\n\n```csv\ndate         , code  , desc     , account            , currency , amt     , pending/cleared , notes\n\"2013/09/02\" , \"\"    , \"things\" , \"Assets:Cash\"      , \"P\"      , \"-2000\" , \"*\"             , \"\"\n\"2013/09/02\" , \"\"    , \"things\" , \"Liabilities:Card\" , \"P\"      , \"-200\"  , \"*\"             , \"\"\n\"2013/09/02\" , \"\"    , \"things\" , \"Expenses:Things\"  , \"P\"      , \"2200\"  , \"*\"             , \"\"\n\"2013/09/04\" , \"\"    , \"stuff\"  , \"Assets:Cash\"      , \"P\"      , \"-20\"   , \"*\"             , \"\"\n\"2013/09/04\" , \"\"    , \"stuff\"  , \"Expenses:Others\"  , \"P\"      , \"20\"    , \"*\"             , \"\"\n```\n"
  },
  {
    "path": "ledger-examples.md",
    "content": "---\ntitle: Ledger examples\ncategory: Ledger\n---\n\n### Inspecting transactions\n\n    # show me expenses for october (--period)\n      ledger r Expenses -p oct\n\n    # what's the most expensive? (--sorted)\n      ledger r Expenses -S amount --tail 10\n\n    # how much was spent on grocery? (--weekly, --monthly)\n      ledger r Grocery\n      ledger r Grocery -W\n      ledger r Grocery -M\n\n    # what did I spend my Mastercard on? (--period, --begin, --end)\n      ledger r mastercard\n      ledger r mastercard -p \"january\"\n      ledger r mastercard -b 01/25 -e 01/31\n\n### Graphing\n\n    # Graph my bank account balance, monthly\n      ledger r Savings -M\n\n    # Graph my expenses, monthly (-n = --collapse)\n      ledger r Expenses -M -n\n\n    # ...what's the average per month?\n      ledger r Expenses -M -n --average\n\n### Simple\n\n    # what did I do yesterday?\n    # ..list transactions on this day\n      ledger r -p 01/26\n      ledger r -p yesterday\n\n### Switches\n\n    # what's everything I got in USD? (--exchange)\n      ledger b Assets -X USD\n"
  },
  {
    "path": "ledger-format.md",
    "content": "---\ntitle: Ledger format\ncategory: Ledger\n---\n\n### Example\n```\n2015/01/01 Pay rent\n  Assets:Savings     -$300\n  Expenses:Rent\n```\n\n### First line\n\n```\n2015/01/01 *       Pay rent       ; tagname:\n^          ^       ^\nDate       Flag    Description    ^ comment/tag\n```\n\n### Balance assertion\n\n```\n2015/01/01 Pay rent\n  Assets:Savings     -$300 = $1200  ; assert there's $1200 left after\n  Expenses:Rent\n```\nFlags:\n\n```\n* cleared\n! pending\n```\n\n## Accounts\n\n### Accounts\n\nOnly relevant with `--strict` or `--pedantic`\n\n```\naccount Expenses:Food\n    note This account is all about the chicken!\n    alias food\n    payee ^(KFC|Popeyes)$\n    check commodity == \"$\"\n    assert commodity == \"$\"\n    eval print(\"Hello!\")\n    default\n```\n\n## Others\n\n### Others\n\n```\nD $1,000.00     ; set default commodity\n\nalias Cash = Assets:Cash\n\nY2015           ; set default year (you can use 01/25 as date after)\n```\n\n### Prefix all transactions with an account\n\n```\naccount Home\ninclude home.journal\nend\n```\n"
  },
  {
    "path": "ledger-periods.md",
    "content": "---\ntitle: Ledger periods\ncategory: Ledger\n---\n\n### About\n{: .-intro}\n\n- <https://ledger-cli.org/3.0/doc/ledger3.html#Period-Expressions>\n\n### Usage\n\n    [INTERVAL] [BEGIN] [END]\n\n#### Intervals\n\n    every day\n    every week\n    every month\n    every quarter\n    every year\n    every N days     # N is any integer\n    every N weeks\n    every N months\n    every N quarters\n    every N years\n    daily\n    weekly\n    biweekly\n    monthly\n    bimonthly\n    quarterly\n    yearly\n\n#### Begin\n\n    from <SPEC>\n    since <SPEC>\n\n#### End\n\n    to <SPEC>\n    until <SPEC>\n\n### Spec\n\n    2004\n    2004/10\n    2004/10/1\n    10/1\n    october\n    oct\n    this week  # or day, month, quarter, year\n    next week\n    last week\n\n### Examples\n\n    $ ledger r -p \"since last month\"\n"
  },
  {
    "path": "ledger-query.md",
    "content": "---\ntitle: Ledger queries\ncategory: Ledger\n---\n\n### About\n\n- <https://ledger-cli.org/3.0/doc/ledger3.html#Complex-expressions>\n\n### Query characters\n\n| Query           | Description |\n| ---             | ---         |\n| `@payee`        | Payee       |\n| `%tag`          | Tag         |\n| `=note`         | Note        |\n| `#code`         | Code        |\n| ---             | ---         |\n| `TERM and TERM` | Boolean and |\n| `TERM or TERM`  | Boolean or  |\n| `not TERM`      | Boolean not |\n\n### Examples\n\n```sh\nledger r @taco\nledger r comment =~ /landline/\n```\n"
  },
  {
    "path": "ledger.md",
    "content": "---\ntitle: Ledger CLI\ncategory: Ledger\nupdated: 2020-05-23\nweight: -5\n---\n\n### Basic usage\n\n```bash\n$ ledger bal\n$ ledger reg\n```\n\n```bash\n$ ledger reg grocery  # show entries for 'grocery'\n$ ledger bal assets   # check if i'm broke\n```\n\n```bash\n  -b 01/01   # --begin\n  -e 01/31   # --end\n  -S date    # --sort\n  -S amount\n```\n\n### Examples\n\n```bash\n# any/all matches\n  ledger bal Rent Transportation  # any\n  ledger bal Income and Job       # all\n  ledger bal Expenses and not (Drinks or Food)\n```\n\n```bash\n# what did I spend on most? (--sorted)\n  ledger reg Expenses -S amount\n```\n\n```bash\n# how much did I have at this date? (--end)\n  ledger bal -e 01/15 ^Assets ^Liabilities\n```\n\n```bash\n# how much did I spend and earn this month?\n  ledger bal ^Expenses ^Income --invert\n```\n\n```bash\n# how much was spent over the course of 3 days? (totalled)\n  ledger reg -b 01/25 -e 01/27 --subtotal\n  ledger reg -b 01/25 -e 01/27 --subtotal grocery\n```\n\nFormat\n------\n\n### Basic format\n\n```\n2013/01/03 * Rent for January\n  Expenses:Rent   $600.00\n  Assets:Savings\n```\n\n`*` = cleared, `!` = pending\n\n### Secondary dates\n\n```\n2008/01/01=2008/01/14 Client invoice\n```\n\nIt can mean anything you want, eg, for the estimated date you'll be paid.\n\n### Balance assertions\n\n```\n2008/01/01 * KFC\n  Expenses:Food    $20\n  Assets:Cash     $-20  = $500\n```\n{: data-line=\"3\"}\n\n`Cash $X = $500` ensures Cash is at $500 after the transaction.\n\n### Balance assignment\n\n```bash\n2008/01/01 * Cash balance\n  Assets:Cash              = $500\n  Equity:Adjustments\n\n2008/01/01 * KFC\n  Expenses:Food            $20\n  Assets:Cash              = $500\n```\n{: data-line=\"2,7\"}\n\n`ACCOUNT = $500` figures out what's needed to make it $500.\n\n### Payables\n\n```bash\n2008/04/25 * Rent\n  (Assets:Checking)  -$200\n  Expenses:Rent\n```\n{: data-line=\"2\"}\n\n### Commodities\n\n```bash\n; cost per item\n2010/05/31 * Market\n  Assets:Fridge                35 apples @ $0.42\n  Assets:Cash\n```\n{: data-line=\"3\"}\n\n```bash\n; total cost\n2010/05/31 * Market\n  Assets:Fridge                35 apples @@ $14.70\n  Assets:Cash\n```\n{: data-line=\"3\"}\n\n```bash\n; fixed lot prices\n2010/05/31 * Gas\n  Expenses:Gasoline             11 GAL {=$2.299}\n  Assets:Cash\n```\n{: data-line=\"3\"}\n\n### Commodity definitions\n\n```\ncommodity $\n  note American Dollars\n  format $1,000.00\n  nomarket\n  default\n```\n\n### Budgeting\n\n```\n~ Monthly\n  Expenses:Rent  $500\n  Expenses:Food  $100\n  Expenses        $40 ; everything else\n  Assets\n\n~ Yearly\n```\n\n```bash\nledger bal --budget Expenses\nledger bal --unbudgeted Expenses\n```\n{: .-setup}\n\n### Comments\n\n    ; line comment\n    # also line comment\n    % also line comment\n    | also line comment\n    * also line comment\n\nQuerying\n--------\n\n### Periods\n\n```\n[interval] [begin] [end]\n```\n\n```\ninterval:\n  every day|week|month|quarter|year\n  every N days|weeks|...\n  daily|weekly|...\n```\n\n```\nbegin:\n  from <spec>\nend:\n  to <spec>\n```\n\n```\nspec:\n  2004\n  2004/10/1\n```\n\n```bash\n$ ledger bal|reg --period \"until aug\"\n$ ledger bal|reg --period \"last oct\"\n$ ledger bal|reg --period \"every week\"\n```\n{: .-setup}\n\n### Register\n\n```bash\n$ ledger reg\n```\n{: .-setup}\n\n```bash\n  -D, --daily\n  -W, --weekly\n  -M, --monthly\n      --quarterly\n  -Y, --yearly\n  -s, --subtotal\n  --start-of-week monday\n```\n\n```bash\n  -S, --sort date\n  -S, --sort amount\n```\n\n### Filters\n\n```bash\n-b, --begin DATE\n-e, --end DATE\n\n-d payee =~ /pioneer/\n\n-C, --cleared    # (with *)\n-U, --uncleared  # (no *)\n    --pending    # (with !)\n\n-R, --real       # ignore virtual postings (eg: \"(Cash)  $-400\")\n-L, --actual     # no automated postings (eg: \"= /^Income/\")\n\n-r, --related   # show the other side\n                # \"reg -r savings\" shows where it comes from)\n```\n\n### Queries\n\n    ^regex$\n    @payee\n    %tag\n    %tag=value\n    =note\n    #code\n    term and term\n    term or term\n    not term\n    \\( term \\)\n\nExample:\n\n    ledger r ^expenses and @Denny's\n    ledger r food and @Starbucks and not dining\n\n### Display\n\n```bash\n-n, --collapse       # [register] collapse entries\n                     # [balance] no grand total\n-s, --subtotal       # [balance] show sub-accounts\n                     # [other] show subtotals\n--flat\n```\n\n### Effective dates\n\n```bash\n2008/01/01=2008/01/14 Client invoice  ;  estimated date you'll be paid\n  Assets:Accounts Receivable            $100.00\n  Income: Client name\n```\n{: data-line=\"1\"}\n\nSay you're in business. If you bill a customer, you can enter something like above.\nThen, when you receive the payment, you change it to:\n\n```bash\n2008/01/01=2008/01/15 Client invoice ;  actual date money received\n  Assets:Accounts Receivable            $100.00\n  Income: Client name\n```\n{: data-line=\"1\"}\n\n## References\n{: .-one-column}\n\n* <http://ledger-cli.org/3.0/doc/ledger3.html>\n* <https://gist.github.com/agaviria/3317397>\n{: .-also-see}\n"
  },
  {
    "path": "less.md",
    "content": "---\ntitle: Less.js\n---\n\n### Functions\n\n    unit(30px / 5px)  #=> 6\n    unit(5, px)       #=> 5px\n\n    e(\"ms:stuff()\")   #=> ms:stuff() (unquote)\n\n    %(\"count: %d\", 1+2) #=> \"count: 3\"\n\n    iscolor(@x)\n    isstring(@x)\n    isnumber(@x)\n    iskeyword(@x)\n    isurl(url(...))\n    ispixel()\n    isem()\n    ispercentage()\n    isunit()\n\n    hue(@color)\n    saturation(@color)\n    lightness(@color)\n    luma(@color)\n    luminance(@color)\n\n    fade(@color, amount)\n    fadein(@color, amount)\n    fadeout(@color, amount)\n    spin(@color, degrees)\n    mix(@a, @b, amount)\n\n### Conditionals\n\n    .image when (luma(@color) > 50%) { }\n    .image when (not(...)) { }\n    .image when (default()) {}\n    .image when (e(@shape) = 'circle') { }\n\n"
  },
  {
    "path": "licenses.md",
    "content": "---\ntitle: Licenses\nsection: Development\nupdated: 2017-08-30\n---\n\n## Licenses\n\n### MIT License\n\n```\nThe MIT License (MIT)\n\nCopyright (c) 2015 $NAME\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n### ISC\n\n```\nCopyright (c) 2015, $NAME\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n```\n\n### BSD 2C\n\n```\nCopyright (c) 2015, $NAME\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```\n\n### BSD 3C\n\n```\nCopyright (c) 2015, $NAME\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of simpler-extend nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```\n"
  },
  {
    "path": "linux.md",
    "content": "---\ntitle: Linux\n---\n\n### Read/Write/Execute a file\n\n    $ chmod +rwx App\n    $ ./App\n\n### Remove\n\n    $ rm namefile\n    $ rm -d Directory\n    $ rm -rf Directory_with_files\n\n### Copy file to a folder\n\n    $ cp namefile Downloads\n    $ ls\n    namefile  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos\n    $ cd Downloads\n    ~/Downloads$ ls\n    namefile\n\n\n### Create empty file\n\n    $ touch namefile\n    $ touch --help\n\n### Show in the terminal the file\n\n    $ cat namefile\n    $ cat --help\n\n\n### Create new directory\n\n    $ mkdir name\n    $ mkdir --help\n\n### list files from directory\n\n    $ ls\n    Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos\n    $ ls --help\n\n### Mounting a RAM drive\n\n    $ mount -t tmpfs -o size=5G,nr_inodes=5k,mode=700 tmpfs /tmp\n\n### Visudo\n\n    sudo visudo\n\n    username ALL=(ALL) NOPASSWD:/sbin/restart whatever\n\n### Display the amount of available disk space\n\n```sh\ndf\ndf -h   # human-readable format\ndf -a   # all filesystems\n```\n\n### Display disk usage\n\n```sh\ndu\ndu -hsx * | sort -rh | head -10    # largest 10 folders\n```\n\n### Answer yes in a bash script\n\n```bash\nyes | /your/command\n```\n"
  },
  {
    "path": "lodash.md",
    "content": "---\ntitle: Lodash\ncategory: JavaScript libraries\nweight: -3\nupdated: 2020-06-24\ndescription: |\n  This is not a complete list.\n---\n\n## Collections\n\n### Finding\n\n```js\n_.filter(list, (n) => n % 2)    // → Array\n_.find(list, (n) => n % 2)      // → item\n_.findLast(list, ...)           // → item\n```\n\nWorks for both arrays and objects.\n\n### Accessing\n\n```js\n_.at([ abcd ], 0)               // → [ a ] - same as list[0]\n_.at([ abcd ], [ 0, 1 ])        // → [ ab ]\n```\n\n### Set/get\n\n```js\n_.set(object, 'users[0].name', value)\n_.get(object, 'users[0].name')\n_.get(object, ['users', 0, 'name'])\n```\n\n### Iteration\n\n```js\n_.forEach(list, (item, i) => ...)\n_.forEachRight(list, ...)\n\n_.map(list, ...)\n```\n\n```js\n_.every(users, (u) => u.active)  // → true|false (aka _.all)\n_.any(users, ...)                // → true|false (aka _.some)\n```\n\n## Array\n\n### Arrays\n\n```js\n_.chunk([ abcd ], 2)           // → [ [ab], [cd] ]\n_.compact(list)\n\n_.fill(Array(4), 'x')          // → [ 'x', 'x', 'x', 'x' ]\n_.flatten\n_.flattenDeep\n```\n\n### Filtering\n\n```js\n_.drop([ abcdef ], 2)          // → [   cdef ]\n_.dropRight([ abcdef ], 2)     // → [ abcd   ]\n_.take([ abcdef ], 2)          // → [ ab     ]\n_.takeRight([ abcdef ], 2)     // → [     de ]\n_.slice([ abcdef ], 2, 4)      // → [   cd   ]\n```\n\n```js\n_.initial([ abcdef ])          // → [ abcde  ] - dropRight(list, 1)\n_.rest([ abcdef ])             // → [  bcdef ] - takeRight(list, 1)\n```\n\n```js\n_.dropWhile(list, 'active')            // works like filter\n_.dropWhile(list, 'active', true)\n_.dropWhile(list, { active: true })\n_.dropWhile(list, (n) => ...)\n_.dropRightWhile(list, ...)\n```\n\n```js\n_.without([ abcde ], b)        // → [ acde ]\n```\n\n```js\n_.remove(list, (n) => n % 2)\n```\n\n### Accessing\n\n```js\n_.first([ abcdef ])            // → a\n_.last([ abcdef ])             // → f\n```\n\n### Sets\n\n```js\n_.uniq()\n_.difference([ abc ], [ bc ])       // → [ a    ]\n_.intersection([ abc ], [ bcd ])    // → [  bc  ]\n_.union([ abc ], [ bcd ])           // → [ abcd ] (unique)\n```\n\n```js\nArray#concat()\n```\n\n### Indexes\n\n```js\n_.findIndex(list, fn)\n_.findLastIndex(list, fn)\n```\n\n```js\n_.sortedIndex(list, val)\n_.sortedLastIndex(list, val)\n```\n\n```js\n_.indexOf(list, val)\n```\n\n## Functions\n\n### Currying\n\n```js\ngreet = (greeting, name) => `${greeting}, ${name}!`\n```\n{: .-setup}\n\n```js\nfn = _.partial(fn, 'hi')\nfn('joe')    // → 'hi, joe!'\n\nfn = _.partial(fn, 'joe')\nfn('yo')     // → 'yo, joe!'\n```\n\n```js\n_.curry(greet)('hi')         // → function(name)\n_.curryRight(greet)('joe')   // → function(greet)\n```\n\n## Decorating functions\n\n### Throttling\n\n```js\n_.throttle(fn)\n_.debounce(fn)\n```\n\n### Limiting\n\n```js\n_.before(5, fn)         // only works 5 times\n_.after(5, fn)          // works only after 5 times\n_.once(fn)              // like _.before(fn, 1)\n```\n\n### Etc\n\n```js\n_.wrap(_.escape, (name) => `hi ${name}`)\n// same as doing `name = _.escape(name)`\n\n_.delay(fn, 2000)\n\n_.negate(fn)\n\n_.memoize(fn)\n_.memoize(fn, ...)\n```\n\n## Strings\n\n### Capitalization\n\n```js\n_.capitalize('hello world')   // → 'Hello world'\n_.startCase('hello_world')    // → 'Hello World'\n_.snakeCase('hello world')    // → 'hello_world'\n_.kebabCase('hello world')    // → 'hello-world'\n_.camelCase('hello world')    // → 'helloWorld'\n```\n\n### Padding\n\n```js\n_.pad('abc', 3)           // → 'abc'\n_.pad('abc', 8)           // → '   abc  '\n_.pad('abc', 8, '_-')     // → '_-abc_-_'\n_.padStart('abc', 3)      // → 'abc'\n_.padStart('abc', 6)      // → '   abc'\n_.padStart('abc', 6, '_-')// → '_-_abc'\n_.padEnd('abc', 3)        // → 'abc'\n_.padEnd('abc', 6)        // → 'abc   '\n_.padEnd('abc', 6, '_-')  // → 'abc_-_'\n```\n\n### Trim\n\n```js\n_.trim('  str  ')         // → 'str' \n_.trimLeft('  str  ')     // → 'str  '\n_.trimRight('  str  ')    // → '  str'\n```\n\n### Etc\n\n```js\n_.repeat('-', 2)              // → '--'\n_.deburr('déjà vu')           // → 'deja vu'\n_.trunc('hello world', 5)     // → 'hello...'\n```\n\n```js\n_.startsWith('abc', 'a')   // → true\n_.endsWith('abc', 'c')     // → true\n```\n\n## Objects\n\n### Keys and values\n\n```js\n_.keys(obj)\n_.values(obj)\n```\n\n## Chaining\n\n### Chain and value\n\n```js\n_([1, 2, 3])\n  .reduce((total, n) => total + n)\n  .map((n) => n * n)\n  .tap(console.log)\n  .thru((n) => n.reverse())\n  .value()\n```\n"
  },
  {
    "path": "lua.md",
    "content": "---\ntitle: Lua\n---\n\n## Basic examples\n\n### References\n\n- <https://www.lua.org/pil/13.html>\n- <http://lua-users.org/wiki/ObjectOrientedProgramming>\n\n### Comments\n\n    -- comment\n    --[[ Multiline\n         comment ]]\n\n### Invoking functions\n\n    print()\n    print(\"Hi\")\n\n    -- You can omit parentheses if the argument is one string or table literal\n    print \"Hello World\"     <-->     print(\"Hello World\")\n    dofile 'a.lua'          <-->     dofile ('a.lua')\n    print [[a multi-line    <-->     print([[a multi-line\n     message]]                        message]])\n    f{x=10, y=20}           <-->     f({x=10, y=20})\n    type{}                  <-->     type({})\n\n### Tables / arrays\n\n    t = {}\n    t = { a = 1, b = 2 }\n    t.a = function() ... end\n\n    t = { [\"hello\"] = 200 }\n    t.hello\n\n    -- Remember, arrays are also tables\n    array = { \"a\", \"b\", \"c\", \"d\" }\n    print(array[2])       -- \"b\" (one-indexed)\n    print(#array)         -- 4 (length)\n\n### Loops\n\n    while condition do\n    end\n\n    for i = 1,5 do\n    end\n\n    for i = start,finish,delta do\n    end\n\n    for k,v in pairs(tab) do\n    end\n\n    repeat\n    until condition\n\n    -- Breaking out:\n    while x do\n      if condition then break end\n    end\n\n### Conditionals\n\n    if condition then\n      print(\"yes\")\n    elseif condition then\n      print(\"maybe\")\n    else\n      print(\"no\")\n    end\n\n### Variables\n\n    local x = 2\n    two, four = 2, 4\n\n### Functions\n\n    function myFunction()\n      return 1\n    end\n\n    function myFunctionWithArgs(a, b)\n      -- ...\n    end\n\n    myFunction()\n\n    anonymousFunctions(function()\n      -- ...\n    end)\n\n    -- Not exported in the module\n    local function myPrivateFunction()\n    end\n\n    -- Splats\n    function doAction(action, ...)\n      print(\"Doing '\"..action..\"' to\", ...)\n      --> print(\"Doing 'write' to\", \"Shirley\", \"Abed\")\n    end\n\n    doAction('write', \"Shirley\", \"Abed\")\n\n### Lookups\n\n    mytable = { x = 2, y = function() .. end }\n\n    -- The same:\n    mytable.x\n    mytable['x']\n\n    -- Syntactic sugar, these are equivalent:\n    mytable.y(mytable)\n    mytable:y()\n\n    mytable.y(mytable, a, b)\n    mytable:y(a, b)\n\n    function X:y(z) .. end\n    function X.y(self, z) .. end\n\n## More concepts\n\n### Metatables\n\n    mt = {}\n\n    -- A metatable is simply a table with functions in it.\n    mt.__tostring = function() return \"lol\" end\n    mt.__add      = function(b) ... end       -- a + b\n    mt.__mul      = function(b) ... end       -- a * b\n    mt.__index    = function(k) ... end       -- Lookups (a[k] or a.k)\n    mt.__newindex = function(k, v) ... end    -- Setters (a[k] = v)\n\n    -- Metatables allow you to override behavior of another table.\n    mytable = {}\n    setmetatable(mytable, mt)\n\n    print(myobject)\n\n### Classes\n\n    Account = {}\n\n    function Account:new(balance)\n      local t = setmetatable({}, { __index = Account })\n\n      -- Your constructor stuff\n      t.balance = (balance or 0)\n      return t\n    end\n\n    function Account:withdraw(amount)\n      print(\"Withdrawing \"..amount..\"...\")\n      self.balance = self.balance - amount\n      self:report()\n    end\n\n    function Account:report()\n      print(\"Your current balance is: \"..self.balance)\n    end\n\n    a = Account:new(9000)\n    a:withdraw(200)    -- method call\n\n### Constants\n\n    nil\n    false\n    true\n\n## Operators (and their metatable names)\n\n### Relational\n\n    -- Relational (binary)\n    -- __eq  __lt  __gt  __le  __ge\n       ==    <     >     <=    >=\n    ~=   -- Not equal, just like !=\n\n    -- Arithmetic (binary)\n    -- __add  __sub  __muv  __div  __mod  __pow\n       +      -      *      /      %      ^\n\n    -- Arithmetic (unary)\n    -- __unm (unary minus)\n       -\n\n### Logic\n\n    -- Logic (and/or)\n    nil and false  --> nil\n    false and nil  --> false\n    not true       --> false\n    0 and 20       --> 20\n    10 and 20      --> 20\n\n### Tables\n\n    -- Length\n    -- __len(array)\n    #array\n\n\n    -- Indexing\n    -- __index(table, key)\n    t[key]\n    t.key\n\n    -- __newindex(table, key, value)\n    t[key]=value\n\n    -- String concat\n    -- __concat(left, right)\n    \"hello, \"..name\n\n    -- Call\n    -- __call(func, ...)\n\n## API\n\n### API: Global Functions\n\n    dofile(\"hello.lua\")\n    loadfile(\"hello.lua\")\n\n    assert(x)    -- x or (raise an error)\n    assert(x, \"failed\")\n\n    type(var)   -- \"nil\" | \"number\" | \"string\" | \"boolean\" | \"table\" | \"function\" | \"thread\" | \"userdata\"\n\n    -- Does /not/ invoke meta methods (__index and __newindex)\n    rawset(t, index, value)    -- Like t[index] = value\n    rawget(t, index)           -- Like t[index]\n\n    _G  -- Global context\n    setfenv(1, {})  -- 1: current function, 2: caller, and so on -- {}: the new _G\n\n    pairs(t)     -- iterable list of {key, value}\n    ipairs(t)    -- iterable list of {index, value}\n\n    tonumber(\"34\")\n    tonumber(\"8f\", 16)\n\n### API: Strings\n\n    'string'..'concatenation'\n\n    s = \"Hello\"\n    s:upper()\n    s:lower()\n    s:len()    -- Just like #s\n\n    s:find()\n    s:gfind()\n\n    s:match()\n    s:gmatch()\n\n    s:sub()\n    s:gsub()\n\n    s:rep()\n    s:char()\n    s:dump()\n    s:reverse()\n    s:byte()\n    s:format()\n\n### API: Tables\n\n    table.foreach(t, function(row) ... end)\n    table.setn\n    table.insert(t, 21)          -- append (--> t[#t+1] = 21)\n    table.insert(t, 4, 99)\n    table.getn\n    table.concat\n    table.sort\n    table.remove(t, 4)\n\n### API: Math\n\n    math.abs     math.acos    math.asin       math.atan    math.atan2\n    math.ceil    math.cos     math.cosh       math.deg     math.exp\n    math.floor   math.fmod    math.frexp      math.ldexp   math.log\n    math.log10   math.max     math.min        math.modf    math.pow\n    math.rad     math.random  math.randomseed math.sin     math.sinh\n    math.sqrt    math.tan     math.tanh\n\n    math.sqrt(144)\n    math\n\n### API: Misc\n\n    io.output(io.open(\"file.txt\", \"w\"))\n    io.write(x)\n    io.close()\n\n    for line in io.lines(\"file.txt\")\n\n    file = assert(io.open(\"file.txt\", \"r\"))\n    file:read()\n    file:lines()\n    file:close()\n"
  },
  {
    "path": "machinist.md",
    "content": "---\ntitle: Machinist\ncategory: Ruby libraries\ntags: [Archived]\narchived: Machinist has not been in active development since 2013.\n---\n\n### About\n\nMachinist is a fixture management library for Ruby.\n\n- <https://github.com/notahat/machinist>\n\n### Installing\n\n    # Gemfile\n    gem 'machinist', '>= 2.0.0.beta2', group: 'test'\n\n    # ~$ bundle\n    # ~$ rails generate machinist:install\n\n### Building objects\n\n    User.make\n\n    # `make` builds it, and `make!` builds+saves it\n    User.make!\n    User.make! name: \"David\"\n    User.make!(:admin)\n\n### Defining blueprints\n\n    User.blueprint do\n      name  { \"User #{sn}\" }\n      email { \"user-#{sn}@example.com\" }\n    end\n\n    User.blueprint(:admin) do\n      name  { \"Admin User #{sn}\" }\n      admin { true }\n    end\n\n### Associations\n\n    Post.blueprint do\n      author { User.make }\n\n      comments(3)    # Makes 3 comments (has_many / habtm)\n\n      author         # autodetect (Assumes there's User.blueprint)\n\n    end\n\n### References\n\n * [https://github.com/notahat/machinist](https://github.com/notahat/machinist)\n"
  },
  {
    "path": "macos-mouse-acceleration.md",
    "content": "---\ntitle: Mouse Acceleration\ncategory: macOS\nupdated: 2018-03-20\nweight: -1\nkeywords:\n  - \"defaults write .GlobalPreferences com.apple.mouse.scaling -1\"\nintro: |\n  Disable mouse acceleration with this one weird trick.\n---\n\n## Acceleration\n\n\n### Disabling\n\n```bash\ndefaults write .GlobalPreferences com.apple.mouse.scaling -1\n```\n\nNote: Log out to take effect. If you change *Tracking Speed* under System Preferences, it will undo this fix. Only affects the mouse, not the trackpad.\n\n### Re-enabling\n\nUnder *System Preferences* → *Mouse*, change *Tracking Speed*.\n\n### Trackpad acceleration\n\n```bash\ndefaults write .GlobalPreferences com.apple.trackpad.scaling -1\n```\n\nWorks the same way, but only affects trackpads.\n\n## References\n\n- [Disabling mouse acceleration](https://stackoverflow.com/questions/5782884/disabling-mouse-acceleration-in-mac-os-x) _(stackoverflow.com)_\n"
  },
  {
    "path": "make-assets.md",
    "content": "---\ntitle: Make for assets\ntags: [Archived]\narchived: This sheet may be listing practices that are outdated.\n---\n\n### Basic compiling\n\n```makefile\nbin := ./node_modules/.bin\n\nall: build/foo.js\n\nbuild/%.js: src/%.coffee\n    @$(bin)/coffee < $^ > $@\n```\n\n### Stylus + Autoprefixer\n\n    bin := ./node_modules/.bin\n    stylus := $(bin)/stylus\n    autoprefixer := $(bin)/autoprefixer\n    styl_files := $(shell find web/ -name \"*.styl\")\n\n    all: public/app.css\n\n    public/app.css: css/app.styl\n\n    %.css: %.styl $(styl_files)\n        @$(stylus) $< | $(autoprefixer) -b \"> 1%\" > $@\n\n### Hint\n\n    hint:\n       $(js_files)\n\n### Watching\n\n    watch:\n        @echo \"... watching for changes\"\n        @while true; do make -s; sleep 1; done\n\n### Browserify\n\n    js_files := $(shell find web/ -name \"*.js\")\n\n    public/app.js: web/app.js\n    public/vendor.js: web/vendor.js\n\n    public/%.js: web/%.js $(js_files)\n        $(browserify) -t [ cssify -x .css ] $< > $@\n"
  },
  {
    "path": "makefile.md",
    "content": "---\ntitle: Makefile\nprism_languages: [makefile]\ncategory: CLI\n---\n\n### Var assignment\n\n```makefile\nfoo  = \"bar\"\nbar  = $(foo) foo  # dynamic (renewing) assignment\nfoo := \"boo\"       # one time assignment, $(bar) now is \"boo foo\"\nfoo ?= /usr/local  # safe assignment, $(foo) and $(bar) still the same\nbar += world       # append, \"boo foo world\"\nfoo != echo fooo   # exec shell command and assign to foo\n# $(bar) now is \"fooo foo world\"\n```\n\n`=` expressions are only evaluated when they're being used.\n\n### Magic variables\n\n```makefile\nout.o: src.c src.h\n  $@   # \"out.o\" (target)\n  $<   # \"src.c\" (first prerequisite)\n  $^   # \"src.c src.h\" (all prerequisites)\n\n%.o: %.c\n  $*   # the 'stem' with which an implicit rule matches (\"foo\" in \"foo.c\")\n\nalso:\n  $+   # prerequisites (all, with duplication)\n  $?   # prerequisites (new ones)\n  $|   # prerequisites (order-only?)\n\n  $(@D) # target directory\n```\n\n### Command prefixes\n\n| Prefix | Description                                 |\n| ------ | ------------------------------------------- |\n| `-`    | Ignore errors                               |\n| `@`    | Don't print command                         |\n| `+`    | Run even if Make is in 'don't execute' mode |\n\n```makefile\nbuild:\n    @echo \"compiling\"\n    -gcc $< $@\n\n-include .depend\n```\n\n### Find files\n\n```makefile\njs_files  := $(wildcard test/*.js)\nall_files := $(shell find images -name \"*\")\n```\n\n### Substitutions\n\n```makefile\nfile     = $(SOURCE:.cpp=.o)   # foo.cpp => foo.o\noutputs  = $(files:src/%.coffee=lib/%.js)\n\noutputs  = $(patsubst %.c, %.o, $(wildcard *.c))\nassets   = $(patsubst images/%, assets/%, $(wildcard images/*))\n```\n\n### More functions\n\n```makefile\n$(strip $(string_var))\n\n$(filter %.less, $(files))\n$(filter-out %.less, $(files))\n```\n\n### Building files\n\n```makefile\n%.o: %.c\n  ffmpeg -i $< > $@   # Input and output\n  foo $^\n```\n\n### Includes\n\n```makefile\n-include foo.make\n```\n\n### Options\n\n```sh\nmake\n  -e, --environment-overrides\n  -B, --always-make\n  -s, --silent\n  -j, --jobs=N   # parallel processing\n```\n\n### Conditionals\n\n```makefile\nfoo: $(objects)\nifeq ($(CC),gcc)\n  $(CC) -o foo $(objects) $(libs_for_gcc)\nelse\n  $(CC) -o foo $(objects) $(normal_libs)\nendif\n```\n\n### Recursive\n\n```makefile\ndeploy:\n  $(MAKE) deploy2\n```\n\n### Further reading\n\n- [isaacs's Makefile](https://gist.github.com/isaacs/62a2d1825d04437c6f08)\n- [Your Makefiles are wrong](https://tech.davis-hansson.com/p/make/)\n- [Manual](https://www.gnu.org/software/make/manual/html_node/index.html)\n"
  },
  {
    "path": "mako.md",
    "content": "---\ntitle: Mako\ncategory: Python\n---\n\n### Basic usage\n\n```\nVariable x has content: ${x}\nExpression: ${x + 1}\nEscaped for HTML: ${x | h}\n```\n\n### Control structures\n\n```\n% for x in range(5):\n    % if x % 2 == 0:\n    ${x} is even!\n    % else:\n    ${x} is odd!\n    % endif\n% endfor\n```\n\n### Including Python code\n\n```python\n<%\n    greeting = \"Hello world!\"\n    # arbitrary python code\n%>\n\n<%!\n# arbitrary python code run at toplevel\n# cannot access variables!\n\ndef sign_string(number):\n    if number > 0:\n        return \"positive\"\n    elif number < 0:\n        return \"negative\"\n    else:\n        return \"zero\"\n%>\n```\n\n### Special blocks\n\n```html\n<%text filter=\"h\">\n    This is a raw block where ${nothing is evaluated}\n    <%\n        not even this\n    %>\n    and <html is escaped> too with \"h\" filter\n</%text>\n\n<%def name=\"myfunc(x)\">\n    this is a reusable macro, with arguments: ${x}\n</%def>\n\n${myfunc(42)}\n\n<%doc>\n    this is a comment\n</%doc>\n```\n\n### Inheritance\n\n#### shared.html\n\n```html\n<html>\n  <head>\n    <title><%block name=\"title\" /></title>\n  </head>\n  <body>\n    <header><h1><%block name=\"title\" /></h1></header>\n    <main>${self.body()}</main>\n  </body>\n</html>\n```\n\n#### home.html\n\n```html\n<%inherit file=\"shared.html\" />\n<%block name=\"title\">Welcome to my site</%block>\n\nThis is the body\n```\n\n#### article.html\n\n```html\n<%inherit file=\"shared.html\" />\n<%block name=\"title\">${post.title}</%block>\n\n${post.content}\n```\n\n## Library\n\n### Basic usage\n\n```python\nfrom mako.template import Template\n\nmytemplate = Template(\"hello, ${name}!\")\nprint(mytemplate.render(name=\"jack\"))\n```\n"
  },
  {
    "path": "man.md",
    "content": "---\ntitle: Man\ncategory: CLI\n---\n\n### Man paths\n\n| `1` | General User Commands |\n| `2` | System Calls |\n| `3` | Library Routines |\n| `4` | Special Files and Sockets |\n| `5` | File formats and Conventions |\n| `6` | Games and Fun Stuff |\n| `7` | Miscellaneous Documentation |\n| `8` | System Administration |\n| `9` | Kernel and Programming Style |\n| `n` | Tcl/Tk |\n"
  },
  {
    "path": "markdown.md",
    "content": "---\ntitle: Markdown\ncategory: Markup\nprism_languages: [markdown]\nupdated: 2020-07-01\nweight: -1\n---\n\n## Reference\n{:.-three-column}\n\n### Headers\n\n```markdown\n# h1\n## h2\n### h3\n#### h4\n##### h5\n###### h6\n```\n\n```markdown\nHeader 1\n========\n```\n\n```markdown\nHeader 2\n--------\n```\n\n### Emphasis\n\n```markdown\n*italic*\n_italic_\n```\n\n```markdown\n**bold**\n__bold__\n```\n\n```markdown\n***bold italic***\n___bold italic___\n```\n\n```markdown\n~~strikethrough~~\n```\n\n```markdown\n`code`\n```\n\n### Lists\n\n```markdown\n* Item 1\n  * Nested Item 1\n* Item 2\n```\n\n```markdown\n- Item 1\n  - Nested Item 1\n- Item 2\n```\n\n```markdown\n- [ ] Checkbox off\n- [x] Checkbox on\n```\n\n```markdown\n1. Item 1\n2. Item 2\n```\n\n### Links\n\n```markdown\n[link](http://google.com)\n```\n\n```markdown\n[link][google]\n[google]: http://google.com\n```\n\n```markdown\n<http://google.com>\n```\n\n### Images\n\n```markdown\n![Image alt text](/path/to/img.jpg)\n![Image alt text](/path/to/img.jpg \"title\")\n```\n\n```markdown\n![Image alt text][img]\n[img]: http://foo.com/img.jpg\n```\n\n```markdown\n![Image alt text][img_base64]\n[img_base64]: <data:image/png;base64,...>\n```\n\n### Code\n\n```markdown\n`inline code`\n```\n\n```\n    4 space indent\n    makes a code block\n```\n\n~~~markdown\n```\ncode fences\n```\n~~~\n\n\n~~~markdown\n```js\ncodeFences.withLanguage()\n```\n~~~\n\n### Blockquotes\n\n```markdown\n> This is\n> a blockquote\n>\n> > Nested\n> > Blockquote\n```\n\n### Horizontal line\n\n```markdown\n----\n```\n\n```markdown\n****\n```\n\n### Tables\n\n```markdown\n| Column 1 Heading | Column 2 Heading |\n| ---------------- | ---------------- |\n| Some content     | Other content    |\n```\n\n```markdown\nColumn 1 Heading | Column 2 Heading\n--- | ---\nSome content | Other content\n```\n"
  },
  {
    "path": "meow.md",
    "content": "---\ntitle: Meow\ncategory: JavaScript libraries\nupdated: 2017-10-30\nweight: -1\nintro: |\n  [meow](https://npmjs.com/package/meow) is the easiest way to write command line apps for Node.js.\n---\n\n### Typical settings\n\n```js\nconst cli = require('meow')(`\n  Usage: appname [options]\n\n  Options:\n        --lang LANG    set the language\n\n  Other options:\n    -h, --help         show usage information\n    -v, --version      print version info and exit\n`, {\n  string: ['lang'],\n  boolean: ['help', 'version'],\n  alias: { h: 'help', v: 'version' }\n})\n```\n\n`string` and `boolean` lets meow/minimist know which flags expect arguments (`string`) and which don't (`boolean`).\n\n### Using the result\n\n```js\ncli.flags   // { lang: 'en' }\ncli.input   // []\n```\n\nYes, flags are automatically camelCased!\n\n### Lesser-used settings\n\n```js\nmeow(`...`, {\n  // Default values if flags are not specified\n  default: { lang: 'en' },\n\n  // allow using -- to stop processing flags\n  '--': true,\n\n  // Populate `_` with first non-option\n  stopEarly: true,\n\n  // Invoked on unknown param\n  unknown: function () { ... }\n})\n```\n\nAlso see [minimist](minimist.html).\n"
  },
  {
    "path": "meta-tags.md",
    "content": "---\ntitle: Meta-tags gem\ncategory: Ruby libraries\nweight: -1\nupdated: 2017-09-08\n---\n\n### Titles\n\n```ruby\nset_meta_tags title: 'Member Login'\n# <title>Some Page Title</title>\n```\n\n```ruby\nset_meta_tags site: 'Site Title', title: 'Member Login'\n# <title>Site Title | Page Title</title>\n```\n\n```ruby\nset_meta_tags(\n  site: 'Site Title',\n  title: 'Member Login',\n  reverse: true,\n  separator: '&middot;'.html_safe\n)\n# <title>Page Title · Site Title</title>\n```\n\nWorks in a controller or a view.\n\n### Setting defaults\n\n```\nrails generate meta_tags:install\n```\n\nThis creates `config/initializers/meta_tags.rb` that you can edit.\n\n### Others\n\n```ruby\nset_meta_tags site: 'Site name'\nset_meta_tags title: 'Title'\nset_meta_tags description: \"All text about keywords\"\n```\n\n```ruby\nset_meta_tags keywords: %w[abc def ghi]\nset_meta_tags canonical: 'http://...'\nset_meta_tags icon: 'favicon.ico'\nset_meta_tags author: 'http://...'\nset_meta_tags alternate: { 'fr' => 'http://...' }\nset_meta_tags prev: 'http://...'\nset_meta_tags next: 'http://...'\nset_meta_tags image_src: 'http://...'\n```\n\n```ruby\nset_meta_tags noindex: true\nset_meta_tags nofollow: true\nset_meta_tags follow: true\n```\n\n```ruby\nset_meta_tags og: { image: ['...'] }\nset_meta_tags twitter: { description: '...' }\n```\n```ruby\nset_meta_tags separator: '·'   # Site · Page title\nset_meta_tags prefix: ' '      # Around the separator\nset_meta_tags suffix: ' '\n```\n\n```ruby\nset_meta_tags lowercase: true  # Lowercase page title\nset_meta_tags reverse: true    # Site name last\n```\n\n### In views\n\n```ruby\n# Displaying tags\n<%= display_meta_tags %>\n```\n\n```ruby\n# Displaying tags individually\n<h1><%= title %></h1>\n```\n\n```ruby\n# Setting tags\n<% title 'Member Login' %>\n<% description 'My page' %>\n<% keywords '..' %>\n```\n\n### Reference\n\n- Accurate as of 2.1.0. See: <https://github.com/kpumuk/meta-tags>\n"
  },
  {
    "path": "middleman.md",
    "content": "---\ntitle: Middleman 3\ncategory: JavaScript libraries\ntags: [Archived]\narchived: This guide is for Middleman v3.\n---\n\n### About\n\n**NB:** This is for Middleman 3, not Middleman 4+.\n\n### Compass config\n\n    compass_config do |config|\n      config.output_style = :compact\n    end\n\n### Config\n\n    # Automatic image dimensions on image_tag helper\n    activate :automatic_image_sizes\n\n### Gems\n\n    # Susy grids in Compass\n    # First: gem install compass-susy-plugin\n    require 'susy'\n\n    # CodeRay syntax highlighting in Haml\n    # First: gem install haml-coderay\n    require 'haml-coderay'\n\n    # CoffeeScript filters in Haml\n    # First: gem install coffee-filter\n    require 'coffee-filter'\n\n\n### Page command\n\n    # With no layout\n    page \"/path/to/file.html\", :layout => false\n\n    # With alternative layout\n    page \"/path/to/file.html\", :layout => :otherlayout\n\n    # A path which all have the same layout\n    with_layout :admin do\n      page \"/admin/*\"\n    end\n\n    # Proxy (fake) files\n    page \"/this-page-has-no-template.html\", :proxy => \"/template-file.html\" do\n      @which_fake_page = \"Rendering a fake page with a variable\"\n    end\n\n### Helpers\n\n    helpers do\n      def some_helper\n        \"Helping\"\n      end\n    end\n\n### Directories\n\n    set :css_dir, \"alternative_css_directory\"\n    set :js_dir, \"alternative_js_directory\"\n    set :images_dir, \"alternative_image_directory\"\n\n# Build-specific configuration\n\n    configure :build do\n      activate :minify_css\n      activate :minify_javascript\n\n      # Enable cache buster\n      activate :cache_buster\n\n      # Use relative URLs\n      activate :relative_assets\n\n      # Compress PNGs after build\n      # First: gem install middleman-smusher\n      # require \"middleman-smusher\"\n      activate :smusher\n\n      # Or use a different image path\n      set :http_path, \"/Content/images/\"\n    end\n"
  },
  {
    "path": "minimist.md",
    "content": "---\ntitle: minimist\ncategory: JavaScript libraries\n---\n\n### Usage\n\n```js\nvar minimist = require('minimist')\n```\n{: .-setup}\n\n```js\nvar args = minimist(process.argv.slice(2), {\n  string: 'lang',           // --lang xml\n  boolean: ['version'],     // --version\n  alias: { v: 'version' }\n})\n```\n\n```js\nconsole.log(args)\n```\n\nAll options are optional, but it's recommended you set `string` and `boolean` at least.\n\n### All options\n\n```js\nvar args = minimist(process.argv.slice(2), {\n  string: [ 'lang' ],\n  boolean: [ 'pager' ],\n  alias: { h: 'help', v: 'version' },\n  default: { lang: 'en' },\n  '--': true,\n  stopEarly: true, /* populate _ with first non-option */\n  unknown: function () { ... } /* invoked on unknown param */\n})\n```\n\nAll options are optional.\n\n### Result\n\nWith `--lang xml --no-pager -h index.js package.json`, you get:\n{: .-setup}\n\n```\nargs == {\n  lang: 'xml',\n  version: false,\n  h: true,\n  help: true,\n  _: [ 'index.js', 'package.json' ]\n}\n```\n\n## Meow\n\n### Help and version\n\nUse [meow](https://www.npmjs.com/package/meow) to automatically add support for `--help`, `--version` and more.\n{: .-setup}\n\n```js\nmeow(`\n    Usage:\n        $0 FILES [options]\n\n    Options:\n        -h, --help         print usage information\n        -v, --version      show version info and exit\n`, {\n  alias: { h: 'help', v: 'version' }\n  /* minimist options */\n})\n```\n\n### Reference\n\n * <https://www.npmjs.org/package/minimist>\n * <https://github.com/substack/minimist>\n"
  },
  {
    "path": "minitest.md",
    "content": "---\ntitle: Minitest\ncategory: Ruby\n---\n\n### Usage\n\n    require 'minitest/autorun'\n\n    describe \"X\" do\n      before do .. end\n      after do .. end\n      subject { .. }\n      let(:list) { Array.new }\n\n      it \"should work\" do\n        assert true\n      end\n    end\n\n### Specs (.must/.wont)\n\n    expect(x)\n    .must_be :==, 0\n    .must_equal b\n    .must_be_close_to 2.99999\n    .must_be_same_as b\n\n    .must_include needle\n    .must_be_empty\n\n    .must_be_kind_of\n    .must_be_instance_of\n    .must_be_nil\n    .must_match /regex/\n    .must_be :<=, 42\n    .must_respond_to msg\n\n    .must_be_silent  ( proc { \"no stdout or stderr\" }.must_be_silent)\n    .must_output \"hi\"\n\n    proc { ... }.must_output out_or_nil [, err]\n    proc { ... }.must_raise exception\n    proc { ... }.must_throw sym\n\n### Test\n\n    class TestHipster < Minitest::Test\n      def setup\n        @subject = [\"silly hats\", \"skinny jeans\"]\n      end\n\n      def teardown\n        @hipster.destroy!\n      end\n\n      def test_for_helvetica_font\n        assert_equal \"helvetica!\", @hipster.preferred_font\n      end\n\n      def test_not_mainstream\n        refute @hipster.mainstream?\n      end\n    end\n\n### Assertions\n\n    assert\n    assert_block { ... }\n    assert_empty\n    assert_equal 2, @size\n    assert_in_delta @size, 1, 1\n    assert_in_epsilon\n    assert_includes @list, \"item\"\n    assert_instance_of Array, @list\n    assert_kind_of Enumerable, @list\n    assert_match @str, /regex/\n    assert_nil\n    assert_operator @n, :==, 0\n    assert_output\n    assert_raises\n    assert_respond_to\n    assert_same\n    assert_send\n    assert_silent\n    assert_throws\n\n### Minitest::Mock\n\nA simple and clean mock system. There two essential methods at our disposal: expect and verify.\n\n    require 'minitest/autorun'\n\n    describe Twipster, \"Make every tweet a hipster tweet.\" do\n      before do\n        @twitter  = Minitest::Mock.new\n        @twipster = Twipster.new(@twitter)\n      end\n\n      it \"should append a #lolhipster hashtag and update Twitter with our status\" do\n        tweet = \"Skyrim? Too mainstream.\"\n        @twitter.expect :update, true, [\"#{tweet} #lolhipster\"]\n        @twipster.submit(tweet)\n        assert @twitter.verify # verifies tweet and hashtag was passed to `@twitter.update`\n      end\n    end\n\n### Reporters\n\n    gem 'minitest-reporters'\n\n    require 'minitest/reporters'\n    Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new\n\n    [Default, Spec, Progress, RubyMate, RubyMine, JUnit]\n"
  },
  {
    "path": "mixpanel.md",
    "content": "---\ntitle: Mixpanel\ncategory: Analytics\n---\n\n### Identify\n\n```js\nmixpanel.identify('284')\nmixpanel.people.set({ $email: 'hi@gmail.com' })\n```\n\n```js\n// Set common properties\nmixpanel.register({ age: 28, gender: 'male' })\n```\n\n### Track events\n\n```js\nmixpanel.track('Login success')\nmixpanel.track('Search', { query: 'cheese' })\n```\n\n### References\n\n* <https://mixpanel.com/help/reference/javascript>\n"
  },
  {
    "path": "mobx.md",
    "content": "---\ntitle: Mobx\ncategory: JavaScript libraries\nupdated: 2018-05-14\n---\n\n### Properties\n\n```js\nimport {observable, computed} from 'mobx'\n\nclass Page {\n  @observable title = ''\n  @observable published = false\n  @observable author = null\n\n  @computed get authorName () {\n    return this.author || 'Anonymous'\n  }\n}\n```\n\n### Actions\n\n```js\nclass Page {\n  @action publish () {\n    this.published = true\n    // do ajax/async here if you like\n  }\n}\n```\n\n### Plain objects\n\n```js\nconst person = observable({\n  name: 'Ella Fitzgerald'\n})\n```\n\n```js\nconst temp = observable(23)\ntemp.get()\ntemp.set(25)\ntemp.observe(...)\n```\n\n## Reactions\n\n### Importing\n\n```js\nimport {autorun, autorunAsync, when} from 'mobx'\n```\n\n### autorun()\n\n```js\n// Runs it, finds out what it accessed, then observe those\nautorun(() => {\n  console.log(page.title)\n})\n```\n\n### when()\n\n```js\nclass Foo {\n  constructor () {\n    when(\n      () => !this.isVisible,\n      () => this.doSomething())\n  }\n}\n```\n\n### expr()\n\n```js\n// A temporary computed value. Its result is cached.\nrender () {\n  const isPublished = expr(() => page.published === true)\n  if (isPublished) { ... }\n}\n```\n\n## [Modifiers](http://mobxjs.github.io/mobx/refguide/modifiers.html)\n\n- `asMap(obj)` - JS map (dynamic keys)\n- `asReference(fn)` - don't observe me\n- `asStructure(obj)` - JS object (observe as deepEqual)\n- `asFlat(array)` - JS array (observe its children)\n\n## React\n\n### mobx-react\n\n```js\nimport { observer } from 'mobx-react'\n\n@observer\nclass PageView extends React.Component {\n  render () {\n    return <div>{this.props.page.title}</div>\n  }\n}\n\n<PageView page={page} />\n```\n\n### Functional components\n\n```js\nimport { observer } from 'mobx-react'\n\nconst PageView = observer(({page}) => {\n  <div>{page.title}</div>\n})\n\n<PageView page={page} />\n```\n\n## References\n\n- <https://github.com/mobxjs/mobx>\n"
  },
  {
    "path": "mocha-blanket.md",
    "content": "---\ntitle: Mocha blanket\ncategory: JavaScript libraries\nintro: |\n  Use [blanket](https://npmjs.com/package/blanket) for easy coverage reporting for Mocha JavaScript tests.\n---\n\n### Quickstart guide\n\nInstall blanket:\n{: .-setup}\n\n```bash\nnpm i --save-dev blanket\n```\n\nIn your test helpers, use Blanket before `require`ing:\n\n```js\nif (process.env.COVERAGE) {\n  require('blanket')({\n    pattern: require('path').resolve('./index.js')\n  });\n}\nthing = require('../index');\n```\n\nAdd to `package.json`:\n\n```json\n\"scripts\": {\n  \"coverage\": \"env COVERAGE=1 mocha -R html-cov > coverage.html && open coverage.html\"\n}\n```\n\nBe sure to ignore it:\n\n```bash\necho \"coverage.html\" >> .gitignore\n```\n\nThen run:\n\n```bash\nnpm run coverage\n```\n\n### Travis + coveralls.io support\n\nVisit [coveralls.io] then activate your repo. Then install the appropriate packages:\n{: .-setup}\n\n```bash\nnpm i --save-dev mocha-lcov-reporter coveralls\n```\n\nAdd this to `.travis.yml`:\n\n```yml\nafter_success:\n  - ./node_modules/.bin/mocha -R mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js\n```\n\nCommit, push, wait for Travis to finish.\n\n[blanket]: https://www.npmjs.org/package/blanket\n[coveralls.io]: http://coveralls.io\n"
  },
  {
    "path": "mocha-html.md",
    "content": "---\ntitle: Mocha HTML\ncategory: JavaScript libraries\n---\n\n### About\n\nThis is a mocha template that loads js/css from cdn.\n\n### Template\n\n```html\n<!doctype html>\n<html>\n<head>\n  <meta charset='utf-8'>\n  <title>Mocha</title>\n  <meta name='viewport' content='width=device-width, initial-scale=1.0'>\n  <link href='https://cdn.rawgit.com/mochajs/mocha/2.2.5/mocha.css' rel='stylesheet' />\n</head>\n<body>\n  <div id='mocha'></div>\n  <script src='https://cdn.rawgit.com/mochajs/mocha/2.2.5/mocha.js'></script>\n  <script src='https://cdn.rawgit.com/chaijs/chai/2.3.0/chai.js'></script>\n  <script>window.onerror=function(msg,url,line){document.getElementById('mocha').innerHTML+='<h1>'+msg+'</'+'h1>'+'<h2>'+url+':'+line+'</'+'h2>';return false}</script>\n  <script>mocha.setup('bdd')</script>\n  <!-- what to test: -->\n  <script src='../index.js'></script>\n  <!-- tests to run: -->\n  <script src='first_test.js'></script>\n  <script src='second_test.js'></script>\n  <script>mocha.run()</script>\n</body>\n</html>\n```\n"
  },
  {
    "path": "mocha-tdd.md",
    "content": "---\ntitle: Mocha.js TDD interface\ncategory: JavaScript libraries\n---\n\n### TDD\n\n    mocha.setup('tdd');\n\n    suite('something', function() {\n      setup(function() {\n      });\n\n      test('should work', function() {\n      });\n\n      teardown(function() {\n      });\n    });\n\n### Async\n\n    test('should save', function(done) {\n      var user = new User();\n      user.save(function(err) {\n        if (err) throw err;\n        done();\n      });\n    });\n\n### Chai: Expect\n\n    var expect = chai.expect;\n\n    expect(foo).to.be.a('string');\n    expect(foo).to.equal('bar');\n    expect(foo).to.have.length(3);\n    expect(tea).to.have.property('flavors').with.length(3);\n\n### See also\n\n * [Mocha BDD](mocha.html)\n * [Mocha HTML](mocha-html.html)\n * [Chai](chai.html)\n * [Sinon](sinon.html)\n * [Sinon Chai](sinon-chai.html)\n"
  },
  {
    "path": "mocha.md",
    "content": "---\ntitle: Mocha.js\ncategory: JavaScript libraries\n---\n\n### BDD\n\n    mocha.setup('bdd');\n\n    describe('something', function() {\n      beforeEach(function() {\n      });\n\n      it('should work', function() {\n      });\n    });\n\n### Async\n\n    it('should save', function(done) {\n      var user = new User();\n      user.save(function(err) {\n        if (err) throw err;\n        done();\n      });\n    });\n\n### Chai: Shoulds\n\n    chai.should();\n\n    foo.should.be.a('string');\n    foo.should.equal('bar');\n    foo.should.have.length(3);\n    tea.should.have.property('flavors').with.length(3);\n\n### See also\n\n * [Mocha TDD](mocha-tdd.html)\n * [Mocha HTML](mocha-html.html)\n * [Chai](chai.html)\n * [Sinon](sinon.html)\n * [Sinon Chai](sinon-chai.html)\n"
  },
  {
    "path": "modella.md",
    "content": "---\ntitle: Modella\ncategory: JavaScript libraries\nprism_languages: [coffeescript]\nintro: |\n  [Modella](https://www.npmjs.com/package/modella) allows you to create simple models in JavaScript. This is a guide on basic usage of Modella in CoffeeScript.\n---\n\n### Defining models\n\n```coffeescript\nUser = Modella('User')\n```\n\n```coffeescript\n  .attr('name')\n  .attr('email', { required: true })\n  .use(require('modella-validators'))\n```\n\n```coffeescript\n  .validator (u) ->\n    u.error('username', 'is required')  unless u.has('username')\n```\n\n### Instances\n\n```coffeescript\nuser\n  .name()\n  .name('John')\n  .set(name: 'John')\n```\n\n```coffeescript\n  .has('name')   # → true\n  .isNew()\n  .isValid()\n```\n\n```coffeescript\n  .save (err) ->\n  .remove (err) ->\n  .removed\n  .model         # === User\n```\n\n## Events\n\n### Emitting\n\n```coffeescript\nModel.emit('event', [data...])\n```\n\n```coffeescript\nrecord.emit('event', [data...])\n```\n\n### List of events\n\n```coffeescript\nuser\n  .on 'save', ->\n  .on 'create', ->\n  .on 'saving', (data, done) -> done()\n```\n\n```coffeescript\n  .on 'remove', ->\n  .on 'removing', (data, done) -> done()\n```\n\n```coffeescript\n  .on 'valid', ->\n  .on 'invalid', ->\n```\n\n```coffeescript\n  .on 'change', ->\n  .on 'change email', ->\n```\n\n```coffeescript\n  .on 'initializing', (instance, attrs) ->\n  .on 'initialize', ->\n```\n\n```coffeescript\n  .on 'error', -> failed to save model\n```\n\n```coffeescript\n  .on 'setting', (instance, attrs) ->  # on Model#set()\n  .on 'attr', -> # new attr via Model.attr()\n```\n\n## Misc\n\n### Plugins\n\n```coffeescript\nMyPlugin = ->\n  return (Model) ->\n\n    Model.method = ...\n    Model.prototype.method = ...\n    Model.attr(...)\n\n    Model\n```\n\nA plugin is a function that returns a model decorator (ie, a function that takes in a model and returns a model).\n\n### Memory\n\n```coffeescript\nUser\n  .all (err, users) ->\n  .find id, (err, user) ->\n```\n\n```coffeescript\n  .remove ->\n  .save ->\n  .update ->\n```\n"
  },
  {
    "path": "modernizr.md",
    "content": "---\ntitle: Modernizr\ncategory: JavaScript libraries\ntags: [Archived]\narchived: Modernizr is no longer in active development.\n---\n\n### Script\n\n    <script src='//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js'></script>\n\n### Detections\n\nJavaScript\n\n * js\n\nCSS\n\n * flexbox\n * rgba\n * hsla\n * multiplebgs\n * backgroundsize\n * borderimage\n * borderradius\n * boxshadow\n * textshadow\n * opacity\n * cssanimations\n * csscolumns\n * cssgradients\n * cssreflections\n * csstransforms\n * csstransforms3d\n * csstransitions\n * fontface\n * generatedcontent\n\nHTML5\n\n * canvas\n * canvastext\n * webgl\n * touch\n * geolocation\n * postmessage\n * websqldatabase\n * indexeddb\n * hashchange\n * history\n * draganddrop\n * websockets\n * video\n * audio\n * localstorage\n * sessionstorage\n * webworkers\n * applicationcache\n * svg\n * inlinesvg\n * smil\n * svgclippaths\n"
  },
  {
    "path": "moment.md",
    "content": "---\ntitle: Moment.js\ncategory: JavaScript libraries\nupdated: 2018-09-15\ntags: [Featurable]\n---\n\n### Parsing\n\n```js\nm = moment('2013-03-01', 'YYYY-MM-DD')\n```\n\nThis parses the given date using the given format. Returns a moment object.\n\n### Formatting\n\n```js\nm.format()            // \"2013-03-01T00:00:00+01:00\"\nm.format('dddd')      // \"Friday\"\nm.format('MMM Do YY') // \"Mar 1st 13\"\nm.fromNow()           // \"7 years ago\"\nm.calendar()          // \"03/01/2013\"\n```\n\n### Add\n\n```js\nm.add(1, 'day')\nm.subtract(2, 'days')\n```\n\n```js\nm.startOf('day')\nm.endOf('day')\nm.startOf('hour')\n```\n\n### Internationalization\n\n```js\n.format('L')      // 06/09/2014\n.format('l')      // 6/9/2014\n.format('LL')     // June 9 2014\n.format('ll')     // Jun 9 2014\n.format('LLL')    // June 9 2014 9:32 PM\n.format('lll')    // Jun 9 2014 9:32 PM\n.format('LLLL')   // Monday, June 9 2014 9:32 PM\n.format('llll')   // Mon, Jun 9 2014 9:32 PM\n```\n\nSee [datetime](./datetime) for more.\n\n{% include common/moment_format.md title=\"Formatting\" %}\n\n## References\n\n### Alternatives\n\n* [You don't need Moment.js](https://github.com/you-dont-need/You-Dont-Need-Momentjs) _(github.com)_\n\n### Also see\n\n* [Datetime cheatsheet](./datetime) _(devhints.io)_\n* [Moment website](http://momentjs.com/) _(momentjs.com)_\n* [Moment docs](http://momentjs.com/docs/) _(momentjs.com)_\n"
  },
  {
    "path": "mysql.md",
    "content": "---\ntitle: MySQL\nupdated: 2020-07-05\ncategory: Databases\n---\n\n### Browsing\n\n```sql\nSHOW DATABASES;\nSHOW TABLES;\nSHOW FIELDS FROM table / DESCRIBE table;\nSHOW CREATE TABLE table;\nSHOW PROCESSLIST;\nKILL process_number;\n```\n\n### Select\n\n```sql\nSELECT * FROM table;\nSELECT * FROM table1, table2;\nSELECT field1, field2 FROM table1, table2;\nSELECT ... FROM ... WHERE condition\nSELECT ... FROM ... WHERE condition GROUP BY field;\nSELECT ... FROM ... WHERE condition GROUP BY field HAVING condition2;\nSELECT ... FROM ... WHERE condition ORDER BY field1, field2;\nSELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC;\nSELECT ... FROM ... WHERE condition LIMIT 10;\nSELECT DISTINCT field1 FROM ...\nSELECT DISTINCT field1, field2 FROM ...\n```\n\n### Select - Join\n\n```sql\nSELECT ... FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition;\nSELECT ... FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition;\nSELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ...\n```\n\n### Conditions\n\n```sql\nfield1 = value1\nfield1 <> value1\nfield1 LIKE 'value _ %'\nfield1 IS NULL\nfield1 IS NOT NULL\nfield1 IS IN (value1, value2)\nfield1 IS NOT IN (value1, value2)\ncondition1 AND condition2\ncondition1 OR condition2\n```\n\n### Create / Open / Delete Database\n\n```sql\nCREATE DATABASE DatabaseName;\nCREATE DATABASE DatabaseName CHARACTER SET utf8;\nUSE DatabaseName;\nDROP DATABASE DatabaseName;\nALTER DATABASE DatabaseName CHARACTER SET utf8;\n```\n\n### Backup Database to SQL File\n\n```bash\nmysqldump -u Username -p dbNameYouWant > databasename_backup.sql\n```\n\n### Restore from backup SQL File\n\n```bash\nmysql -u Username -p dbNameYouWant < databasename_backup.sql;\n```\n\n### Repair Tables After Unclean Shutdown\n\n```bash\nmysqlcheck --all-databases;\nmysqlcheck --all-databases --fast;\n```\n\n### Insert\n\n```sql\nINSERT INTO table1 (field1, field2) VALUES (value1, value2);\n```\n\n### Delete\n\n```sql\nDELETE FROM table1 / TRUNCATE table1\nDELETE FROM table1 WHERE condition\nDELETE FROM table1, table2 WHERE table1.id1 =\n  table2.id2 AND condition\n```\n\n### Update\n\n```sql\nUPDATE table1 SET field1=new_value1 WHERE condition;\nUPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... WHERE\n  table1.id1 = table2.id2 AND condition;\n```\n\n### Create / Delete / Modify Table\n\n#### Create\n\n```sql\nCREATE TABLE table (field1 type1, field2 type2);\nCREATE TABLE table (field1 type1, field2 type2, INDEX (field));\nCREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1));\nCREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1,field2));\n```\n\n```sql\nCREATE TABLE table1 (fk_field1 type1, field2 type2, ...,\n  FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA))\n    [ON UPDATE|ON DELETE] [CASCADE|SET NULL]\n```\n\n```sql\nCREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ...,\n FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB))\n```\n\n```sql\nCREATE TABLE table IF NOT EXISTS;\n```\n\n```sql\nCREATE TEMPORARY TABLE table;\n```\n\n#### Drop\n\n```sql\nDROP TABLE table;\nDROP TABLE IF EXISTS table;\nDROP TABLE table1, table2, ...\n```\n\n#### Alter\n\n```sql\nALTER TABLE table MODIFY field1 type1\nALTER TABLE table MODIFY field1 type1 NOT NULL ...\nALTER TABLE table CHANGE old_name_field1 new_name_field1 type1\nALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL ...\nALTER TABLE table ALTER field1 SET DEFAULT ...\nALTER TABLE table ALTER field1 DROP DEFAULT\nALTER TABLE table ADD new_name_field1 type1\nALTER TABLE table ADD new_name_field1 type1 FIRST\nALTER TABLE table ADD new_name_field1 type1 AFTER another_field\nALTER TABLE table DROP field1\nALTER TABLE table ADD INDEX (field);\n```\n\n#### Change field order\n\n```sql\nALTER TABLE table MODIFY field1 type1 FIRST\nALTER TABLE table MODIFY field1 type1 AFTER another_field\nALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 FIRST\nALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 AFTER\n  another_field\n```\n\n### Keys\n\n```sql\nCREATE TABLE table (..., PRIMARY KEY (field1, field2))\nCREATE TABLE table (..., FOREIGN KEY (field1, field2) REFERENCES table2\n(t2_field1, t2_field2))\n```\n\n### Users and Privileges\n\n```sql\nCREATE USER 'user'@'localhost';\nGRANT ALL PRIVILEGES ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';\nGRANT SELECT, INSERT, DELETE ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';\nREVOKE ALL PRIVILEGES ON base.* FROM 'user'@'host'; -- one permission only\nREVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; -- all permissions\nFLUSH PRIVILEGES;\n```\n\n```sql\nSET PASSWORD = PASSWORD('new_pass');\nSET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass');\nSET PASSWORD = OLD_PASSWORD('new_pass');\n```\n\n```sql\nDROP USER 'user'@'host';\n```\n\nHost ‘%’ indicates any host.\n\n### Main Data Types\n\n```sql\nTINYINT (1o: -128 to +127)\nSMALLINT (2o: +-65 000)\nMEDIUMINT (3o: +-16 000 000)\nINT (4o: +- 2 000 000 000)\nBIGINT (8o: +-9.10^18)\n```\n\n```sql\nPrecise interval: -(2^(8*N-1)) -> (2^8*N)-1\n```\n\n⚠ INT(2) = \"2 digits displayed\" -- NOT \"number with 2 digits max\"\n\n```sql\nFLOAT(M,D)\nDOUBLE(M,D)\nFLOAT(D=0->53)\n```\n\n⚠ 8,3 -> 12345,678 -- NOT 12345678,123!\n\n```sql\nTIME (HH:MM)\nYEAR (AAAA)\nDATE (AAAA-MM-JJ)\nDATETIME (AAAA-MM-JJ HH:MM; années 1000->9999)\nTIMESTAMP (like DATETIME, but 1970->2038, compatible with Unix)\n```\n\n```sql\nVARCHAR (single-line; explicit size)\nTEXT (multi-lines; max size=65535)\nBLOB (binary; max size=65535)\n```\n\nVariants for TEXT&BLOB: `TINY` (max=255), `MEDIUM` (max=~16000), and `LONG` (max=4Go). Ex: `VARCHAR(32)`, `TINYTEXT`, `LONGBLOB`, `MEDIUMTEXT`\n\n```sql\nENUM ('value1', 'value2', ...) -- (default NULL, or '' if NOT NULL)\n```\n\n### Reset Root Password\n\n```bash\n$ /etc/init.d/mysql stop\n```\n\n```bash\n$ mysqld_safe --skip-grant-tables\n```\n\n```bash\n$ mysql # on another terminal\nmysql> UPDATE mysql.user SET password=PASSWORD('new_pass') WHERE user='root';\n```\n\n```bash\n## Switch back to the mysqld_safe terminal and kill the process using Control + \\\n$ /etc/init.d/mysql start\n```\n\nYour commands may vary depending on your OS.\n"
  },
  {
    "path": "ncftp.md",
    "content": "---\ntitle: ncftp\ncategory: CLI\n---\n\n### Bookmarking\n\n```bash\n$ ncftp\n$ open -u username ftp.host.com\n$ bookmark bookmarkname\n```\n\n### Mass download\n\n```bash\n$ ncftpget -R bookmarkname /www/ .\n```\n\n### Mass upload\n\n```bash\n$ ncftpput -R bookmarkname /www/ .\n```\n\n### Upload just the changed files\n\n```bash\n$ git show --pretty=\"format:\" --name-only HEAD~1\n$ ncftpget -R -C log bookmarkname /www/ .\n```\n"
  },
  {
    "path": "netlify.toml",
    "content": "# Note: Please don't edit redirects by hand.\n# redirects are managed via src/redirects.ts.\n[[redirects]]\nforce = true\nfrom = \"/brew\"\nto = \"/homebrew\"\n[[redirects]]\nforce = true\nfrom = \"/commander-js\"\nto = \"/commander.js\"\n[[redirects]]\nforce = true\nfrom = \"/css-animation\"\nto = \"/css#animation\"\n[[redirects]]\nforce = true\nfrom = \"/css-background\"\nto = \"/css#background\"\n[[redirects]]\nforce = true\nfrom = \"/css-font\"\nto = \"/css#fonts\"\n[[redirects]]\nforce = true\nfrom = \"/css-selectors\"\nto = \"/css#selectors\"\n[[redirects]]\nforce = true\nfrom = \"/date\"\nto = \"/datetime\"\n[[redirects]]\nforce = true\nfrom = \"/es2015\"\nto = \"/es6\"\n[[redirects]]\nforce = true\nfrom = \"/es2016\"\nto = \"/es6\"\n[[redirects]]\nforce = true\nfrom = \"/es2017\"\nto = \"/es6\"\n[[redirects]]\nforce = true\nfrom = \"/es2018\"\nto = \"/es6\"\n[[redirects]]\nforce = true\nfrom = \"/expect.js\"\nto = \"/expectjs\"\n[[redirects]]\nforce = true\nfrom = \"/factory_girl\"\nto = \"/factory_bot\"\n[[redirects]]\nforce = true\nfrom = \"/fetch\"\nto = \"/js-fetch\"\n[[redirects]]\nforce = true\nfrom = \"/flexbox\"\nto = \"/css-flexbox\"\n[[redirects]]\nforce = true\nfrom = \"/flowtype\"\nto = \"/flow\"\n[[redirects]]\nforce = true\nfrom = \"/gpgconf\"\nto = \"/gnupg\"\n[[redirects]]\nforce = true\nfrom = \"/gpg\"\nto = \"/gnupg\"\n[[redirects]]\nforce = true\nfrom = \"/gutom\"\nto = \"/ph-food-delivery\"\n[[redirects]]\nforce = true\nfrom = \"/handlebars-js\"\nto = \"/handlebars.js\"\n[[redirects]]\nforce = true\nfrom = \"/harvey-js\"\nto = \"/harvey.js\"\n[[redirects]]\nforce = true\nfrom = \"/immutable-js\"\nto = \"/immutable.js\"\n[[redirects]]\nforce = true\nfrom = \"/jade\"\nto = \"/pug\"\n[[redirects]]\nforce = true\nfrom = \"/jinja2\"\nto = \"/jinja\"\n[[redirects]]\nforce = true\nfrom = \"/package.json\"\nto = \"/package-json\"\n[[redirects]]\nforce = true\nfrom = \"/package\"\nto = \"/package-json\"\n[[redirects]]\nforce = true\nfrom = \"/phoenix-ecto@1.3\"\nto = \"/phoenix-ecto\"\n[[redirects]]\nforce = true\nfrom = \"/sh\"\nto = \"/bash\"\n[build]\ncommand = \"npm run build\"\npublish = \"_site/\"\n[build.environment]\nNODE_VERSION = \"18.12.0\"\nPYTHON_VERSION = \"3.8\"\nRUBY_VERSION = \"2.7.6\"\n"
  },
  {
    "path": "nock.md",
    "content": "---\ntitle: Nock\ncategory: JavaScript libraries\n---\n\n### Nock\n\n```js\nscope = nock('http://foo.com')\nscope = nock('http://foo.com', { allowUnmocked: true })\n```\n\n```js\nnock('http://foo.com')\n  .get('/user')\n  .reply(200, { id: 1234 })\n```\n\n### Filtering\n\n```js\nnock('http://foo.com')\n  .filteringPath(/[&\\?]token=[^&]*/g, '')\n  .get('/user')\n\n// catches \"/user?token=...\" as well\n```\n"
  },
  {
    "path": "nocode.md",
    "content": "---\ntitle: Nocode\nupdated: 2018-03-17\nintro: |\n  [Nocode](https://github.com/kelseyhightower/nocode) is the best way to write secure and reliable applications. Write nothing; deploy nowhere.\n---\n\n## Nothing\n{: .-one-column}\n\n<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n"
  },
  {
    "path": "nodejs-assert.md",
    "content": "---\ntitle: assert\ncategory: Node.js\n---\n\n### Assertions\n\n```js\nassert(val)\nassert.equal(actual, expected)\nassert.notEqual(a, e)\n```\n\n```js\nassert.deepEqual(a, e)\nassert.notDeepEqual(a, e)\n```\n\n```js\nassert.throws(fn)\n```\n\n### References\n\n- http://nodejs.org/api/assert.html\n"
  },
  {
    "path": "nodejs-fs.md",
    "content": "---\ntitle: fs\ncategory: Node.js\n---\n\n### Reading\n\n    fs.readFile('file.txt', function(err, data) { .. });\n    fs.readFile('file.txt', {encoding: 'utf-8'}, function(err, data) { .. });\n\n### Writing\n\n    fs.writeFile('output.txt', function(err) { .. });\n    fs.appendFile('output.txt', function(err) { .. });\n\n### Watch\n\n    fs.watch('dir OR file.txt', { persistent: true }, function(event, file) {\n      event; /* rename | change */\n    });\n\n### Getting info\n\n    fs.exists('file.txt', function(exists /*bool*/) { ... });\n\n    fs.stat('file.txt', function(stats) {\n      stats.isFile();\n      stats.isDirectory();\n      stats.isSymbolicLink();\n    });\n\n### File operations\n\n    fs.rename('old.txt', 'new.txt', function(){});\n    fs.chown('file.txt', uid, gid, function(){});\n    fs.symlink('src', 'dest', function(){});\n    fs.unlink('path', function(){});\n    fs.rmdir('path', function(){});\n\n    fs.readdir('path', function(err, files) { .. }); /* `files` = array of names */\n\n### Path\n\n    fs.realpath('/etc/passwd', function(err, path) { /* \"/private/etc/passwd\" */ });\n\n### Sync\n\n    data = fs.readFileSync('input.txt');\n    fs.writeFileSync('output.txt', data);\n    fs.appendFileSync('output.txt', data);\n    fs.existsSync('file.txt');\n\n### References\n\n- https://nodejs.org/api/fs.html\n"
  },
  {
    "path": "nodejs-path.md",
    "content": "---\ntitle: Node.js path API\ncategory: Node.js\nintro: |\n  Quick reference to the [Node.js path API](https://nodejs.org/api/path.html).\n---\n\n### Functions\n\n```js\nconst fs = require('fs')\n\nfs.realpath('/etc/passwd', function (err, path) {\n  path // => \"/private/etc/passwd\"\n})\n```\n\n```js\nconst path = require('path')\ndir = path.join('etc', 'passwd')\ndir = path.resolve('/etc', 'passwd', '..', 'var')\n```\n\n```js\npath.dirname('/etc/passwd') //      => \"/etc\"\npath.basename('/etc/passwd') //     => \"passwd\"\npath.basename('/etc/rc.d', '.d') // => \"rc\"\n```\n\n### References\n\n- https://nodejs.org/api/path.html\n"
  },
  {
    "path": "nodejs-process.md",
    "content": "---\ntitle: process\ncategory: Node.js\n---\n\n### Streams\n\n    process.stdout.write('...');\n    process.stderr.write('...');\n\n    function stdin(fn) {\n      var data = '';\n\n      process.stdin.setEncoding('utf8');\n      process.stdin.on('readable', function() {\n        var chunk = process.stdin.read();\n        if (chunk !== null) data += chunk;\n      });\n\n      process.stdin.on('end', function() {\n        fn(null, data);\n      });\n    }\n\n### stuff\n\n    process.argv; //=> ['node', 'file.js', 'one', 'two']\n    process.env; //=> {TERM: 'screen-256color', SHELL: '/bin/bash', ...}\n\n    process.exit();\n    process.exit(1);\n\n### Directories\n    \n    process.cwd(); //=> \"/tmp\"\n    process.chdir('dir');\n\n### References\n\n- http://nodejs.org/api/process.html\n"
  },
  {
    "path": "nodejs-stream.md",
    "content": "---\ntitle: Node.js streams\ncategory: Node.js\nweight: -1\nupdated: 2017-08-30\n---\n\n### Types\n\n| Stream      | Description                        |\n| ---         | ---                                |\n| `Readable`  | Data emitter                       |\n| `Writable`  | Data receiver                      |\n| `Transform` | Emitter and receiver               |\n| `Duplex`    | Emitter and receiver (independent) |\n\nSee: [Stream](https://nodejs.org/api/stream.html#stream_stream) _(nodejs.org)_\n\n### Streams\n\n```js\nconst Readable = require('stream').Readable\nconst Writable = require('stream').Writable\nconst Transform = require('stream').Transform\n```\n\n### Piping\n\n```js\nclock()              // Readable stream\n  .pipe(xformer())   // Transform stream\n  .pipe(renderer())  // Writable stream\n```\n\n### Methods\n\n```js\nstream.push(/*...*/)         // Emit a chunk\nstream.emit('error', error)  // Raise an error\nstream.push(null)            // Close a stream\n```\n\n### Events\n\n```js\nconst st = source()\nst.on('data', (data) => { console.log('<-', data) })\nst.on('error', (err) => { console.log('!', err.message) })\nst.on('close', () => { console.log('** bye') })\nst.on('finish', () => { console.log('** bye') })\n```\n\nAssuming `source()` is a readable stream.\n\n### Flowing mode\n\n```js\n// Toggle flowing mode\nst.resume()\nst.pause()\n```\n\n```js\n// Automatically turns on flowing mode\nst.on('data', /*...*/)\n```\n\nStream types\n------------\n{: .-three-column}\n\n### Readable\n\n```js\nfunction clock () {\n  const stream = new Readable({\n    objectMode: true,\n    read() {}\n  })\n\n  setInterval(() => {\n    stream.push({ time: new Date() })\n  }, 1000)\n\n  return stream\n}\n\n// Implement read() if you\n// need on-demand reading.\n```\n\nReadable streams are generators of data. Write data using `stream.push()`.\n\n### Transform\n\n```js\nfunction xformer () {\n  let count = 0\n\n  return new Transform({\n    objectMode: true,\n    transform: (data, _, done) => {\n      done(null, { ...data, index: count++ })\n    }\n  })\n}\n```\n\nPass the updated chunk to `done(null, chunk)`.\n\n### Writable\n\n```js\nfunction renderer () {\n  return new Writable({\n    objectMode: true,\n    write: (data, _, done) => {\n      console.log('<-', data)\n      done()\n    }\n  })\n}\n```\n\n### All together now\n\n```js\nclock()              // Readable stream\n  .pipe(xformer())   // Transform stream\n  .pipe(renderer())  // Writable stream\n```\n\n## Also see\n{: .-one-column}\n\n- <https://nodejs.org/api/stream.html>\n- <https://github.com/substack/stream-handbook>\n"
  },
  {
    "path": "nodejs.md",
    "content": "---\ntitle: Node.js API\ncategory: Node.js\n---\n\n### Globals\n\n    __filename\n    __dirname\n\n### exec\n\n    var exec = require('child_process').exec,\n\n    var child = exec('cat *.js bad_file | wc -l',\n      function (error, stdout, stderr) {\n        console.log('stdout: ' + stdout);\n        console.log('stderr: ' + stderr);\n        if (error !== null) {\n          console.log('exec error: ' + error);\n        }\n    });\n\n### Snippets\n\n    info = require('../package.json')\n    info.version\n\n    process.stdout.write(util.inspect(objekt, false, Infinity, true) + '\\n');\n\n### Spawn - passthru the in/out\n\n    var spawn = require('child_process').spawn;\n    var proc = spawn(bin, argv, { stdio: 'inherit' });\n    proc.on('error', function(err) {\n      if (err.code == \"ENOENT\") { \"does not exist\" }\n      if (err.code == \"EACCES\") { \"not executable\" }\n    });\n    proc.on('exit', function(code) { ... });\n\n    // also { stdio: ['pipe', 'pipe', process.stdout] }\n    // also { stdio: [process.stdin, process.stderr, process.stdout] }\n\n    proc.stdout.on('data', function (data) {\n    });\n    proc.stderr.on('data', function (data) {\n    });\n\n[all]: http://nodejs.org/api/all.html\n"
  },
  {
    "path": "nopt.md",
    "content": "---\ntitle: Nopt\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\n- <https://www.npmjs.org/package/nopt>\n\n### Example\n\n```js\nvar args = require('nopt')({\n  foo: [String, null],\n  size: ['big', 'medium', 'small'],\n  many: [String, Array],\n  debug: Boolean,\n  version: Boolean,\n  help: Boolean\n}, {\n  h: '--help',\n  v: '--version'\n}, process.argv);\n\nargs == {\n  debug: true,\n  version: true,\n  size: 'big',\n  argv: {\n    remain: ['...', '...'],\n    cooked: ...,\n    original: ...\n  }\n}\n```\n\n```js\nif (args.help) {\n  console.log([\n      'Usage:',\n      '  hicat [options] [file]',\n      '',\n      'Options:',\n      '  -h, --help         print usage information',\n      '  -v, --version      show version info and exit',\n  ].join('\\n'));\n  process.exit(0);\n}\n\nif (args.version) {\n  console.log(require('../package.json').version);\n  process.exit(0);\n}\n```\n"
  },
  {
    "path": "npm.md",
    "content": "---\ntitle: npm\ncategory: JavaScript\nweight: -1\nupdated: 2019-12-24\n---\n\n### Package management\n\n| Command                           | Description                                               |\n| ---                               | ---                                                       |\n| `npm i`                           | Alias for `npm install`                                   |\n| `npm install`                     | Install everything in package.json                        |\n| `npm install --production`        | Install everything in package.json, except devDependecies |\n\n### Adding packages\n\n| Command                           | Description                                               |\n| ---                               | ---                                                       |  \n| `npm install lodash`              | Install a package                                         |\n| `npm install --save-dev lodash`   | Install as devDependency                                  |\n| `npm install --save-exact lodash` | Install with exact                                        |\n\n### Listing\n\n| Command                 | Description                                                         |\n| ---                     | ---                                                                 |\n| `npm list`              | Lists the installed versions of all dependencies in this software   | \n| `npm list -g --depth 0` | Lists the installed versions of all globally installed packages     | \n| `npm view`              | Lists the latest versions of all dependencies in this software      | \n| `npm outdated`          | Lists only the dependencies in this software which are outdated     |\n\n### Updating\n\n| Command             | Description                |\n| ---                 | ---                        |\n| `npm update`        | Update production packages |\n| `npm update --dev`  | Update dev packages        |\n| `npm update -g`     | Update global packages     |\n| ---                 | ---                        |\n| `npm update lodash` | Update a package           |\n\n\n### Removing\n\n| Command             | Description                        |\n| ---                 | ---                                |\n| `npm rm lodash`     | Remove package production packages |\n\n## More features\n\n### Install names\n\n| Command                              | Description             |\n| ---                                  | ---                     |\n| `npm i sax`                          | NPM package             |\n| `npm i sax@latest`                   | Specify tag `latest`    |\n| `npm i sax@3.0.0`                    | Specify version `3.0.0` |\n| `npm i sax@\">=1 <2.0\"`               | Specify version range   |\n| ---                                  | ---                     |\n| `npm i @org/sax`                     | Scoped NPM package      |\n| ---                                  | ---                     |\n| `npm i user/repo`                    | GitHub                  |\n| `npm i user/repo#master`             | GitHub                  |\n| `npm i github:user/repo`             | GitHub                  |\n| `npm i gitlab:user/repo`             | GitLab                  |\n| ---                                  | ---                     |\n| `npm i /path/to/repo`                | Absolute path           |\n| `npm i ./archive.tgz`                | Tarball                 |\n| `npm i https://site.com/archive.tgz` | Tarball via HTTP        |\n\n### Bumping versions\n\n| Command                           | Description                                               |\n| ---                               | ---                                                       |\n| `npm version 1.2.3`               | Bump the package version to 1.2.3                         |\n| `npm version major`               | Bump the major package version by 1 (1.2.3 → 2.0.0)       |\n| `npm version minor`               | Bump the minor package version by 1 (1.2.3 → 1.3.0)       |\n| `npm version patch`               | Bump the patch package version by 1 (1.2.3 → 1.2.4)       |\n\n### Misc features\n\n```bash\n# Add someone as an owner\nnpm owner add USERNAME PACKAGENAME\n```\n\n```bash\n# list packages\nnpm ls\n```\n\n```bash\n# Adds warning to those that install a package of old versions\nnpm deprecate PACKAGE@\"< 0.2.0\" \"critical bug fixed in v0.2.0\"\n```\n\n```bash\n# update all packages, or selected packages\nnpm update [-g] PACKAGE\n```\n\n```bash\n# Check for outdated packages\nnpm outdated [PACKAGE]\n```\n"
  },
  {
    "path": "org-mode.md",
    "content": "---\ntitle: Org Mode\ntags: [WIP]\ncategory: Apps\nupdated: 2018-02-19\nintro: |\n  [Org mode](https://orgmode.org/) is for keeping hierarchal notes (and more) in Emacs.\n---\n\n## Syntax\n{: .-three-column}\n\n### Headings\n\n```org\n* Welcome to Org mode\n\n  Lines starting with * are headings.\n  These lines without are notes.\n\n** Sub-heading\n\n   Two stars mark a 2nd-level subheading (h2).\n```\n\n### Lists\n\n```org\n* Lists\n\nTo buy:\n1. Milk\n2. Eggs\n   - Organic\n3. Cheese\n   + Parmesan\n   + Mozarella\n```\n\n### Inline styles\n\n```org\n*bold*\n/italic/\n_underline_\n=verbatim=\n~code~\n+strike-through+\n```\n\n### To do\n\n```org\n* TODO buy airplane\n```\n\nCycle by using `S-LEFT` / `S-RIGHT`. List all TODO's via `C-c C-v`.\n\n## Shortcuts\n{: .-three-column}\n\n### Basic shortcuts\n\n| Description    | Shortcut             |\n| ---            | ---                  |\n| (Un) fold      | `TAB` / `S-TAB`      |\n| Move up        | `M-UP` / `M-DOWN`    |\n| New headline   | `M-RET`              |\n| Cycle workflow | `S-LEFT` / `S-RIGHT` |\n| Cycle priority | `S-UP` / `S-DOWN` |\n{:.-shortcuts-right}\n\n### Timer\n\n| Description     | Shortcut        |\n| ---             | ---             |\n| Start timer     | `C-c` `C-x` `0` |\n| Stop timer      | `C-c` `C-x` `_` |\n| Pause timer     | `C-c` `C-x` `,` |\n| ---             | ---             |\n| Start countdown | `C-c` `C-x` `;` |\n{:.-shortcuts-right}\n\nYou can use this for Pomodoro!\n\n### Agenda\n\n| Description     | Shortcut        |\n| ---             | ---             |\n| Agenda menu     | `C-c` `a`       |\n| ---             | ---             |\n| Add document    | `C-c` `[`       |\n| Remove document | `C-c` `]`       |\n| ---             | ---             |\n| Add date        | `C-c` `.`       |\n| Add time & date | `C-u` `C-c` `.` |\n{:.-shortcuts-right}\n\nStart by adding the current file to the agenda (`C-c [`), then use the agenda menu to navigate.\n\n### Export\n\n| Description | Shortcut    |\n| ---         | ---         |\n| Export menu | `C-c` `C-e` |\n\nLets you export the document as Markdown, HTML, and others.\n\n## References\n\n- [Org for beginners](https://orgmode.org/worg/org-tutorials/org4beginners.html) _(orgmode.org)_\n- [Org mode website](https://orgmode.org/) _(orgmode.org)_\n"
  },
  {
    "path": "osx.md",
    "content": "---\ntitle: OS X\ncategory: macOS\n---\n\n### Locations of startup items\n\n    ~/Library/LaunchAgents\n    /System/Library/LaunchAgents/\n    /System/Library/LaunchDaemons/\n    /Library/LaunchAgents/\n    /Library/LaunchDaemons/\n\n    __Running `launchctl list` show you what launch scripts are currently loaded.__\n\n### Hide desktop icons\n\n    defaults write com.apple.finder CreateDesktop -bool false\n    killall Finder\n\n### Auto-hide other windows on dock switch\n\n    defaults write com.apple.dock single-app -bool TRUE\n    killall Dock\n\n    defaults delete com.apple.dock single-app\n    killall Dock\n\n### Flush DNS\n\n    killall -HUP mDNSResponder   # 10.8+\n    dscacheutil -flushcache      # 10.7 below\n\n### Disable spotlight indexing\n\n    mdutil -a -i off                    # disable indexing for all volumes\n    mdutil -i off MOUNT_POINT           # disable for specific volume\n    touch FOLDER/.metadata_never_index  # disable for FOLDER\n                                        \n\n### Turn on/off proxy\n\n    sudo networksetup -setsocksfirewallproxystate Wi-Fi off\n    sudo networksetup -setsocksfirewallproxystate Ethernet off\n    sudo networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 9999\n    sudo networksetup -setsocksfirewallproxy Ethernet 127.0.0.1 9999\n    sudo networksetup -setsocksfirewallproxystate Wi-Fi on\n    sudo networksetup -setsocksfirewallproxystate Ethernet on\n\n### System utils\n\n - `networksetup` - Configure network (ip, dns, proxy, etc)\n - `tmutil` - Configure Time Machine (enable/disable, exclude path, delete snapshots, etc)\n - `mdutil` - Manage Spotlight (enable/disable, exclude, etc)\n - `diskutil` - Control disk (format, eject, unmount, etc)\n - `launchctl` - Control running \"agents\"\n\n### Useful utils\n\n - `open` - open files and directories ([man](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/open.1.html))\n - `textutil` - manipulate text files of various formats ([man](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/textutil.1.html))\n - `pbcopy` / `pbpaste` - provide copying and pasting to the pasteboard ([man](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/pbcopy.1.html))\n - `sips` - scriptable image processing system ([man](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sips.1.html))\n - `mdfind` - finds files matching a given query ([man](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html))\n - `screencapture` - capture images from the screen ([man](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/screencapture.1.html))\n - `defaults` - access the Mac OS X user defaults system ([man](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/defaults.1.html))\n - `/usr/libexec/airportd`\n - `scutil`\n\n __INFO: `brew` ([link](https://brew.sh)) is highly recommended utility__\n"
  },
  {
    "path": "package-json.md",
    "content": "---\ntitle: package.json\ncategory: Node.js\nprism_languages: [json]\nupdated: 2020-06-23\nweight: -3\n---\n\n### Basic\n\n```json\n{\n  \"name\": \"expo\",\n  \"description\": \"My package\",\n  \"version\": \"0.1.0\",\n  \"license\": \"MIT\",\n  \"keywords\": [\"http\", \"server\"],\n  \"author\": \"Rico Sta. Cruz <rstacruz@users.noreply.github.com>\",\n  \"engines\": {\n    \"node\": \">=0.8.0\"\n  },\n  \"main\": \"index\",\n  \"bin\": {\n    \"command\": \"./bin/command\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/rstacruz/___.git\"\n  },\n}\n```\n{: data-line=\"2,3,4,5\"}\n\nHighlighted lines are required.\n\n### Dependencies\n\n```json\n\"dependencies\": {\n  \"colors\":   \"*\",\n  \"flatiron\": \"0.1.x\",\n  \"flatiron\": \"~0.1.0\",\n  \"plates\":   \"https://github.com/user/project/tarball/branch\",\n  \"stuff\":    \"git://github.com/user/project.git#commit-ish\"\n},\n```\n\n```json\n\"devDependencies\": { ··· },\n\"peerDependencies\": { ··· },\n\"optionalDependencies\": { ··· },\n```\n\nSee [Semver cheatsheet](./semver) for explanation of version ranges.\n\n### Scripts\n\n```json\n\"scripts\": {\n  \"start\": \"node ./bin/xxx\",       /* npm start */\n  \"test\": \"vows --spec --isolate\", /* npm test */\n  \"postinstall\": \"...\",\n  \"prepublish\": \"grunt build\",     /* after 'npm install' and before 'npm \n                                      publish' */\n}\n```\n\n### Misc\n\n```json\n\"private\": true,\n\"preferGlobal\": true\n```\n\n### Config\n\n```json\n{\n  \"config\": {\n    \"foobar\": \"hello\"\n  },\n  \"scripts\": {\n    \"run\": \"echo $npm_package_config_foobar\"\n  }\n}\n```\n\nKeys in `config` are exposed as env vars to scripts.\n\n## References\n{: .-one-column}\n\n * <http://package.json.nodejitsu.com/>\n * `npm help package.json`\n{: .-also-see}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"devhints-astro\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"astro\": \"astro\",\n    \"build\": \"concurrently -m 1 \\\"npm:cache_markdown\\\" \\\"astro build --silent\\\"\",\n    \"cache_markdown\": \"bundle exec ruby src/ruby/cache_kramdown.rb *.md */*.md\",\n    \"ci\": \"concurrently -g \\\"npm:*:check\\\" \\\"vitest run\\\" \\\"npm:test:*\\\" \\\"npm:build\\\"\",\n    \"dev\": \"astro dev\",\n    \"eslint:check\": \"eslint .\",\n    \"eslint:format\": \"eslint --fix .\",\n    \"format\": \"concurrently -m 1 \\\"npm:*:format\\\"\",\n    \"prettier:check\": \"prettier --cache --list-different .\",\n    \"prettier:format\": \"prettier --cache --write .\",\n    \"preview\": \"astro preview\",\n    \"start\": \"astro dev\",\n    \"test\": \"vitest\",\n    \"test:playwright\": \"playwright test\",\n    \"test:ruby\": \"bundle exec ruby src/ruby/*.test.rb\"\n  },\n  \"dependencies\": {\n    \"@astrojs/partytown\": \"^2.0.2\",\n    \"@astrojs/tailwind\": \"^5.1.0\",\n    \"@astrojs/ts-plugin\": \"^1.3.1\",\n    \"@fontsource/cousine\": \"^5.0.15\",\n    \"@fontsource/manrope\": \"^5.0.19\",\n    \"@mapbox/rehype-prism\": \"^0.8.0\",\n    \"@playwright/test\": \"^1.53.1\",\n    \"@rstacruz/rehype-sectionize\": \"^0.7.0\",\n    \"@types/mapbox__rehype-prism\": \"^0.8.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^7.2.0\",\n    \"@typescript-eslint/parser\": \"^7.2.0\",\n    \"astro\": \"^4.0.3\",\n    \"autocompleter\": \"^9.1.0\",\n    \"clsx\": \"^2.1.0\",\n    \"concurrently\": \"^8.2.1\",\n    \"eslint\": \"^8.52.0\",\n    \"eslint-config-prettier\": \"^9.0.0\",\n    \"eslint-plugin-astro\": \"^0.31.4\",\n    \"eslint-plugin-jsx-a11y\": \"^6.7.1\",\n    \"fuse.js\": \"^6.6.2\",\n    \"gray-matter\": \"^4.0.3\",\n    \"happy-dom\": \"^12.9.1\",\n    \"hint.css\": \"^2.7.0\",\n    \"html-inline-external\": \"^1.0.10\",\n    \"playwright\": \"^1.53.1\",\n    \"prettier\": \"^3.0.3\",\n    \"prettier-plugin-astro\": \"^0.13.0\",\n    \"prettier-plugin-organize-imports\": \"^3.2.3\",\n    \"prismjs\": \"1.29.0\",\n    \"rehype-parse\": \"^9.0.0\",\n    \"rehype-stringify\": \"^10.0.0\",\n    \"sass\": \"^1.69.1\",\n    \"snarkdown\": \"^2.0.0\",\n    \"tailwindcss\": \"^3.4.3\",\n    \"tsx\": \"^4.7.1\",\n    \"unified\": \"^11.0.3\",\n    \"vitest\": \"^1.4.0\",\n    \"zod\": \"^3.22.4\"\n  },\n  \"packageManager\": \"pnpm@8.15.4+sha256.cea6d0bdf2de3a0549582da3983c70c92ffc577ff4410cbf190817ddc35137c2\"\n}\n"
  },
  {
    "path": "package.md",
    "content": "---\ntitle: package.json\ncategory: Hidden\nredirect_to: /package.json\n---\n"
  },
  {
    "path": "packs.md",
    "content": "---\ntitle: Packs (ruby)\ncategory: Ruby libraries\nupdated: 2024-07-05\nintro: Packs are a specification for an extensible packaging system to help modularize Ruby applications.\n---\n\n## Manage packs\n\n### Create pack\n\n```bash\n$ bin/packs create packs/pack_name\n```\n\n#### Example\n\n```bash\n$ bin/packs create packs/profiles\n```\n\nCreate new pack named `profiles`.\n\n### Make a file or directory public\n\n```bash\n$ bin/packs make_public path/to/file.rb\n$ bin/packs make_public path/to/directory\n```\n\nMake file or directory public API, meaning that classes outside the package can call this logic.\n\n#### Example\n\n```bash\n$ bin/packs make_public packs/profiles/app/services/create_profile_service.rb\n```\n\nAllow external code to call the class `CreateProfileService`.\n\nThis command will mainly move that file in `packs/profiles/app/public/create_profile_service.rb`\n\n### Move a pack\n\n```bash\n$ bin/packs move packs/destination_pack path/to/file.rb\n$ bin/packs move packs/destination_pack path/to/directory\n```\n\nMove file or directory from one pack to another pack.\n\n```bash\n$ bin/packs move_to_folder packs/foo path/to/directory\n```\n\nMove `packs/foo` to the `path/to/directory` folder, where `path/to/directory` does not contain a `package.yml` file.\n\n```bash\n$ bin/packs move_to_parent packs/child_pack packs/parent_pack\n```\n\nSet `packs/child_pack` as a child of `packs/parent_pack`.\n\n### Add dependency to a pack\n\n```bash\n$ bin/packs add_dependency packs/from_pack packs/to_pack\n```\n\n## Packs validity\n\n### All packs are valid?\n\n```bash\n$ bin/packs validate\n```\n\nRuns `bin/packwerk validate` under the hood (detects cycles).\n\n### A specific pack is valid?\n\n```bash\n$ bin/packs check packs/pack_name\n```\n\nRuns `bin/packwerk check` under the hood.\n\n### Update `package.yml`\n\n```bash\n$ bin/packs update\n```\n\nRuns `bin/packwerk update-todo` under the hood.\n\n## Lints\n\n```bash\n$ bin/packs lint_package_todo_yml_files\n```\n\nLint `package_todo.yml` files to check for formatting issues.\n\n```bash\n$ bin/packs lint_package_yml_files [ packs/my_pack packs/my_other_pack ]\n```\n\nLint `package.yml` files.\n\n```bash\n$ bin/packs list_top_violations type [ packs/your_pack ]\n```\n\nList the top violations of a specific type for `packs/your_pack`.\n\n## Also see\n\n- [Documentation](https://github.com/rubyatscale/packs) _(`packs` github repository)_\n"
  },
  {
    "path": "pacman.md",
    "content": "---\ntitle: Pacman\ncategory: Linux\nupdated: 2018-07-07\n---\n\n## Commands\n{: .-three-column}\n\n### About\n{: .-intro}\n\nPacman is the package manager for Arch Linux and its derivatives.\n\n- <https://wiki.archlinux.org/title/pacman>\n\n### Common commands\n\n| Command                 | Description                       |\n| ----------------------- | --------------------------------- |\n| `pacman -Syu <pkg>`     | Install (and update package list) |\n| `pacman -S <pkg>`       | Install only                      |\n| `pacman -Rsc <pkg>`     | Uninstall                         |\n| `pacman -Ss <keywords>` | Search                            |\n| `pacman -Syu`           | Upgrade everything                |\n{: .-prime}\n\n### Query\n\n| Command              | Description                            |\n| -------------------- | -------------------------------------- |\n| `pacman -Qe`         | List explictly-installed packages      |\n| ---                  | ---                                    |\n| `pacman -Ql <pkg>`   | What files does this package have?     |\n| `pacman -Qii <pkg>`  | List information on package            |\n| ---                  | ---                                    |\n| `pacman -Qo <file>`  | Who owns this file?                    |\n| ---                  | ---                                    |\n| `pacman -Qs <query>` | Search installed packages for keywords |\n\n### Orphans\n\n| Command                       | Description                 |\n| ----------------------------- | --------------------------- |\n| `pacman -Qdt`                 | List unneeded packages      |\n| `pacman -Rns $(pacman -Qdtq)` | Uninstall unneeded packages |\n\nAvoid orphans by using `pacman -Rsc` to remove packages, which will remove unneeded dependencies.\n\n### Other\n\n| Command            | Description                |\n| ------------------ | -------------------------- |\n| `pactree <pkg>`    | What does _pkg_ depend on? |\n| `pactree -r <pkg>` | What depends on _pkg_?     |\n\n### References\n\n* [Pacman tips and tricks](https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks) _(wiki.archlinux.org)_\n"
  },
  {
    "path": "parsimmon.md",
    "content": "---\ntitle: Parsimmon\ncategory: JavaScript libraries\n---\n\n### Basic usage\n```js\nconst P = require('parsimmon')\n\nP.regexp(/[a-z]+/)\n.parse('hello')\n//=> { status: true, value: ['hello'] }\n```\n\n### Atoms\n\n```js\nP.regexp(/[a-z]+/)\nP.string('hello')\nP.oneOf('abc')             // like P.regexp(/[abc]/)\n\nP.whitespace\nP.optWhitespace\nP.eof\n```\n\n### Combinators\n\n```js\nP.seq(a, b, c)             // sequence of these\nP.alt(a, b)                // any of these\nP.sepBy(a, P.string(','))  // sequence of `a`, separated by ','\nP.sepBy1(a, P.string(',')) // same, at least once\n\na.or(b)                    // like P.alt(a, b)\na.skip(b)                  // parses `b` but discards it\n\na.many()\na.times(3)\na.times(1, 4)              // 1 <= x <= 4\na.atMost(10)\na.atLeast(10)\n```\n\n### Formatting\n\n```js\nP.seq(P.number, P.oneOf('+-*/'), P.number)\n.map(([left, oper, right]) => ({ oper, left, right }))\n```\n\n### Reference\n\n- <https://github.com/jneen/parsimmon/blob/master/API.md>\n"
  },
  {
    "path": "parsley.md",
    "content": "---\ntitle: Parsley.js\nupdated: 2018-12-06\nweight: -1\ncategory: JavaScript libraries\nkeywords:\n  - \"data-parsley-validate\"\n  - \"$('#form').parsley()\"\n  - errorClass\n  - successClass\n  - classHandler\n  - errorsContainer\n  - errorsWrapper\n  - errorTemplate\nintro: |\n  [Parsley](http://parsleyjs.org/doc/) provides frontend form validation.\n---\n\n## Parsley\n{: .-three-column}\n\n### Installing via NPM\n\n```\nnpm install --save parsleyjs\n```\n\n[parsleyjs](https://www.npmjs.com/package/parsleyjs) is the Parsley form validator. ('parsley' is a different package)\n\n### Enabling\n\n#### via HTML\n\n```html\n<form data-parsley-validate>\n<!-- ✗ not preferred -->\n```\n\n#### via JavaScript\n\n```js\n$('#form').parsley(/* options */)\n```\n\nIt's preferable to explicitly call `$.fn.parsley()`.\n\n### API\n\n#### Form\n\n```js\n$('#myform').parsley()\n  .isValid()  // → true | null\n  .validate()\n  .reset()\n  .destroy()\n```\n\n#### Input\n\n```js\n$('#myform input').parsley()\n  .isValid()\n  .validate() // returns errors\n```\n\n### Validators\n\n```html\n<input ...>\n```\n\n#### Required\n\n```html\n  required\n```\n\n#### Types\n\n```html\n  type='email'\n```\n\n```html\n  type='url'\n  data-parsley-type='url'\n```\n\n#### Length\n\n```html\n  maxlength='6'\n  data-parsley-maxlength='6'\n  minlength='10'\n  data-parsley-minlength='10'\n```\n\n#### Numeric\n\n```html\n  pattern='\\d+'\n  data-parsley-pattern='\\d+'\n```\n\n```html\n  type='number'\n  data-parsley-type='number'\n  data-parsley-type='integer'\n  data-parsley-type='digits'\n  data-parsley-type='alphanum'\n```\n\n#### Range\n\n```html\n  type='range'\n  data-parsley=range='[6, 10]'\n```\n\n```html\n  max='10'\n  data-parsley-max='10'\n  min='6'\n  data-parsley-min='6'\n```\n\n#### Checkboxes\n\n```html\n  data-parsley-mincheck='1'\n  data-parsley-maxcheck='3'\n  data-parsley-check='[1, 3]'\n```\n\n#### Confirmation\n\n```html\n  data-parsley-equalto='#confirm'\n```\n\n## Options\n\n### Form options\n\n```js\n// Supported & excluded inputs by default\n  inputs: 'input, textarea, select'\n  excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden]'\n```\n\n```js\n// Stop validating field on highest priority failing constraint\n  priorityEnabled: true\n```\n\nSee: [Options](http://parsleyjs.org/doc/annotated-source/defaults.html)\n\n### Field options\n\n```js\n// identifier used to group together inputs\n// (e.g. radio buttons…)\n  multiple: null\n```\n\n```js\n// identifier (or array of identifiers) used to\n// validate only a select group of inputs\n  group: null\n```\n\nThese options are only available for fields.\n\n### UI Options\n\n```js\n// Enable/disable error messages\n  uiEnabled: true\n```\n\n```js\n// Key events threshold before validation\n  validationThreshold: 3\n```\n\n```js\n// Focused field on form validation error. ‘first’|’last’|’none’\n  focus: 'first'\n```\n\n```js\n// $.Event() that will trigger validation. eg: keyup, change…\n  trigger: false\n```\n\n```js\n// Class that would be added on every failing validation\n// Parsley field\n  errorClass: 'parsley-error'\n  successClass: 'parsley-success'\n```\n\n```js\n// Return the $element that will receive these above\n// success or error classes. Could also be (and given\n// directly from DOM) a valid selector like '#div'\n  classHandler: function (ParsleyField) {}\n```\n\n```js\n// Return the $element where errors will be appended.\n// Could also be (and given directly from DOM) a valid\n// selector like '#div'\n  errorsContainer: function (ParsleyField) {}\n```\n\n```js\n// ul elem that would receive errors’ list\n  errorsWrapper: '<ul class=\"parsley-errors-list\"></ul>'\n```\n\n```js\n// li elem that would receive error message\n  errorTemplate: '<li></li>'\n```\n\n## Examples\n\n### Custom container\n\n```js\n$('[data-parsley]').parsley({\n  errorsContainer (field) {\n    return field.$element.closest('.block, .control')\n  }\n})\n```\n\nAppends the error to the closest `.block` or `.control`.\n\n### Custom markup\n\n```js\n$('[data-parsley]').parsley({\n  errorClass: '-error',\n  successClass: '-success',\n\n  errorsWrapper: '<ul class=\"parsley-error-list\"></ul>',\n  errorTemplate: '<li class=\"parsley-error\"></li>'\n})\n```\n\nUses custom markup.\n\n### Custom fields\n\n```js\n$('[data-parsley]').parsley({\n  classHandler (field) {\n    const $parent = field.$element.closest('.input-group')\n    if ($parent.length) return $parent\n\n    return field.$element\n  }\n})\n```\n\nApplies the `errorClass` and `successClass` to the closest `.input-group`, if available.\n\n### Custom validator\n\n#### HTML\n\n```html\n<input type='text' data-parsley-multiple-of='3' />\n```\n\n#### JavaScript\n\n```js\nwindow.Parsley\n  .addValidator('multipleOf', {\n    // string | number | integer | date | regexp | boolean\n    requirementType: 'integer',\n\n    // validateString | validateDate | validateMultiple\n    validateNumber (value, requirement) {\n      return 0 === value % requirement\n    },\n\n    messages: {\n      en: 'This value should be a multiple of %s'\n    }\n  })\n```\n\nSee: [Custom validators](http://parsleyjs.org/doc/index.html#custom)\n\n## Also see\n\n- [Parsley documentation](http://parsleyjs.org/doc/) _(parsleyjs.org)_\n"
  },
  {
    "path": "pass.md",
    "content": "---\ntitle: Pass\ncategory: CLI\n---\n\nReference\n---------\n\n### Create\n\n```sh\n$ pass init [-p] <gpg-id>\n$ pass git init\n$ pass git remote add origin <your.git:repository>\n$ pass git push -u --all\n```\n\n### Store\n\n```sh\n$ pass insert [-m] twitter.com/rsc\n$ pass generate [-n] twitter.com/rsc length\n```\n\n### Retrieve\n\n```sh\n$ pass ls twitter.com/\n$ pass show twitter.com/rsc\n$ pass -c twitter.com/rsc\n```\n\n### Search\n\n```sh\n$ pass find twitter.com\n```\n\n### Management\n\n```sh\n$ pass mv twitter.com twitter.com/rsc\n$ pass rm [-rf] twitter.com\n$ pass cp twitter.com/rsc twitter.com/ricosc\n```\n\n```sh\n$ pass edit twitter.com/rsc\n```\n\n### Synchronize\n\n```sh\n$ pass git push\n$ pass git pull\n```\n\n## References\n\n* <https://passwordstore.org>\n"
  },
  {
    "path": "passenger.md",
    "content": "---\ntitle: Phusion Passenger\ntags: [WIP]\n---\n\n### Enabling Phusion passenger\n\n```\nserver {\n   listen 80;\n   server_name www.yourhost.com;\n   root /somewhere/public;   # <--- be sure to point to 'public'!\n   passenger_enabled on;\n   autoindex on; # Show directory listings\n}\n```\n\nThis is an example nginx configuration.\n"
  },
  {
    "path": "perl-pie.md",
    "content": "---\ntitle: Perl-pie\ncategory: Development\n---\n\n### About\n{: .-intro}\n\nUse `perl` to search and replace across many files.\n\n### Search and replace\n\n```sh\nperl -p -i -e 's/hello/hola/g' *.txt\n```\n\n### Back-referencing\n\nUse `\\1` et al.\n\n```sh\n# '@include align-items(center);' => 'align-items: center;'\nperl -p -i -e \"s/\\@include (align-items)\\((.*)\\);/\\1: \\2;/g\"\n```\n"
  },
  {
    "path": "ph-food-delivery.md",
    "content": "---\ntitle: Food delivery (Philippines)\nintro: |\n  Food delivery numbers & sites for top restaurant chains in Metro Manila. For numbers outside Metro Manila, check their websites.\n---\n\n## Numbers\n{: .-two-column}\n\n### Western\n\n| Restaurant    | Online order                                                        | Phone                                                                                                       |\n| ---           | ---                                                                 | ---                                                                                                         |\n| Army Navy     | [armynavy.com.ph](http://www.armynavy.com.ph/)                      | `331-3131`                                                                                                  |\n| Burger King   | [burgerkingdelivery.com.ph](https://www.burgerkingdelivery.com.ph/) | <abbr class='hint-mark hint--bottom' data-hint='Yes, you need to dial the # sign'><i></i></abbr> `#2-22-22` |\n| KFC           | [kfc.com.ph](https://www.kfc.com.ph)                                | `887-8888`                                                                                                  |\n| Kenny Rogers  | [kennys.com.ph](http://kennys.com.ph/)                              | `555-9000`                                                                                                  |\n| McDonald's    | [mcdonalds.com.ph](http://www.mcdonalds.com.ph/mcdelivery)          | `8-6236`                                                                                                    |\n| Pancake House | [pancakehouse.com.ph](https://www.pancakehouse.com.ph/)             | `7-9000`                                                                                                    |\n| Wendy's       | [wendys.com.ph](https://wendys.com.ph/delivery/)                    | `533-3333`                                                                                                  |\n{: .-bold-first.-headers.-no-wrap}\n\n### Pizza\n\n| Restaurant    | Online order                                              | Phone      |\n| ---           | ---                                                       | ---        |\n| Angel's Pizza | [angelspizza.com.ph](http://angelspizza.com.ph/)          | `922-2222` |\n| Domino's      | [dominospizza.ph](https://www.dominospizza.ph/)           | `997-3030` |\n| Greenwich     | [greenwichdelivery.com](http://greenwichdelivery.com/)    | `5-5555`   |\n| Papa John's   | [papajohns.com.ph](http://papajohns.com.ph/)              | `887-7272` |\n| Pizza Hut     | [pizzahut.com.ph](https://order.pizzahut.com.ph)          | `911-1111` |\n| Shakey's      | [shakeyspizza.ph](http://order.shakeyspizza.ph/)          | `77-7777`  |\n| Yellow Cab    | [yellowcabpizza.com](http://delivery.yellowcabpizza.com/) | `789-9999` |\n{: .-bold-first.-headers.-no-wrap}\n\n### Asian\n\n| Restaurant    | Online order                                                        | Phone       |\n| ---           | ---                                                                 | ---         |\n| Bonchon       | [bonchon.com.ph](http://bonchon.com.ph/food/main-menu/) _(menu)_    | `633-1818`  |\n| Chowking      | [chowkingdelivery.com](http://www.chowkingdelivery.com)             | `9-8888`    |\n| North Park    | [northparkdelivery.com](http://northparkdelivery.com/)              | `7-3737`    |\n| Yoshinoya     | [yoshinoya.ph](http://www.yoshinoya.ph/ordeonline.html/)            | `288-2888`  |\n{: .-bold-first.-headers.-no-wrap}\n\n### Filipino\n\n| Restaurant    | Online order                                                        | Phone       |\n| ---           | ---                                                                 | ---         |\n| Amber's       | [amber.com.ph](http://onlineordering.amber.com.ph/)                 | `884-8888`  |\n| Goldilock's   | [goldilocksdelivery.com.ph](http://www.goldilocksdelivery.com.ph/)  | `888-1-999` |\n| Jollibee      | [jollibeedelivery.com](http://jollibeedelivery.com)                 | `#8-7000`   |\n| Mang Inasal   | [manginasal.com](http://www.manginasal.com/menu/) _(menu)_          | `733-1111`  |\n| Max's         | [maxschicken.com](http://delivery.maxschicken.com/)                 | `7-9000`    |\n{: .-bold-first.-headers.-no-wrap}\n\n### Dessert\n\n| Restaurant    | Online order                                                        | Phone       |\n| ---           | ---                                                                 | ---         |\n| Krispy Kreme  | [now.krispykreme.com.ph](http://now.krispykreme.com.ph/)            | `7-9000`    |\n| Red Ribbon    | [redribbononlinestore.com](http://redribbononlinestore.com/)        | `8-7777`    |\n{: .-bold-first.-headers.-no-wrap}\n\n## -\n\nHint: you can get to this page via [devhints.io/gutom](https://devhints.io/gutom) 🍅🍟\n"
  },
  {
    "path": "phoenix-conn.md",
    "content": "---\ntitle: \"Phoenix: Plug.Conn\"\ncategory: Elixir\nupdated: 2018-01-19\nweight: -5\n---\n\nRequest\n-------\n\n### Request\n{: .-prime}\n\n```elixir\nconn.host          # → \"example.com\"\nconn.method        # → \"GET\"\nconn.path_info     # → [\"posts\", \"1\"]\nconn.request_path  # → \"/posts/1\"\nconn.query_string  # → \"utm_source=twitter\"\nconn.port          # → 80\nconn.scheme        # → :http\nconn.peer          # → { {127, 0, 0, 1}, 12345 }\nconn.remote_ip     # → { 151, 236, 219, 228 }\nconn.req_headers   # → [{\"content-type\", \"text/plain\"}]\n```\n\n```elixir\nconn |> get_req_header(\"content-type\")\n# → [\"text/plain\"]\n```\n\n### Updating conn\n\n```elixir\nconn\n|> put_req_header(\"accept\", \"application/json\")\n```\n\nUsually only useful for tests.\n\nResponse\n--------\n\n### Response\n{: .-prime}\n\n```elixir\nconn.resp_body     # → \"...\"\nconn.resp_charset  # → \"utf-8\"\nconn.resp_cookies  # → ...\nconn.resp_headers  # → ...\nconn.status        # → ...\n```\n\n### Sending responses\n\n```elixir\n# Plug.Conn\nconn\n|> html(\"<html><head>...\")\n|> json(%{ message: \"Hello\" })\n|> text(\"Hello\")\n```\n\n```elixir\n|> redirect(to: \"/foo\")\n|> redirect(external: \"http://www.google.com/\")\n|> halt()\n```\n\n```elixir\n|> put_resp_content_type(\"text/plain\")\n|> put_resp_cookie(\"abc\", \"def\")\n|> put_resp_header(\"X-Delivered-By\", \"myapp\")\n|> put_status(202)\n|> put_status(:not_found)\n```\n\n```elixir\n|> put_private(:plug_foo, \"...\")  # reserved for libraries\n```\n\n```elixir\n|> send_resp(201, \"\")\n```\n\n### Phoenix views\n\n```elixir\n# Phoenix.Controller\nconn\n|> render(\"index.html\")\n|> render(\"index.html\", hello: \"world\")\n|> render(MyApp.ErrorView, \"404.html\")\n```\n\n```elixir\n|> put_layout(:foo)\n|> put_layout(false)\n|> put_view(ErrorView)\n```\n\n```elixir\n|> put_secure_browser_headers()\n# prevent clickjacking, nosniff, and xss protection\n# x-frame-options, x-content-type-options, x-xss-protection\n```\n\n```elixir\n|> put_new_view(ErrorView)  # if not set yet\n|> put_new_layout(:foo)\n```\n\n```elixir\nlayout(conn)\n```\n\nOther features\n--------------\n\n### Other fields\n{: .-prime}\n\n```elixir\nconn.assigns          # storage of crap\nconn.owner            # process\nconn.halted           # if pipeline was halted\nconn.secret_key_base  # ...\nconn.state            # :unset, :set, :file, :sent, :chunked\n```\n\n### Accepts\n\n```js\nplug :accepts, [\"html\", \"json\"]\nconn |> accepts([\"html\", \"json\"])\nget_format(conn)  # → \"html\"\nconn.accepts\n```\n\n### Assigns\n\n```elixir\nconn.assigns[:hello]\nconn |> assign(:user_id, 100)\n```\n\n```elixir\nconn = async_assign(conn, :location, fn -> geoip_lookup() end)\nawait_assign(conn, :location)\n```\n\n### Session\n\n```elixir\nconn = fetch_session(conn)   # or plug :fetch_session\n\nconn = put_session(conn, :message, \"new stuff we just set in the session\")\nget_session(conn, :message)\nconn = clear_session(conn)\n```\n\n```elixir\nconn\n|> put_flash(:info, \"Success\")\n|> put_flash(:error, \"Oh no\")\n```\n\nAlso available: `flash` `cookie` `params`\n\n"
  },
  {
    "path": "phoenix-ecto.md",
    "content": "---\ntitle: \"Phoenix: Ecto\"\ncategory: Elixir\ntags: [WIP]\nupdated: 2017-08-30\n---\n\n## Schemas\n{: .-three-column}\n\n### Generating\n\n```bash\n$ mix phx.gen.html \\\n    Accounts \\       # domain\n    Profile \\        # schema\n    profiles \\       # table name\n    email:string \\\n    age:integer\n```\n\n### Schema\n\n```elixir\ndefmodule Myapp.Accounts.User do\n  use Ecto.Schema\n\n  schema \"users\" do\n    field :name\n    field :age, :integer\n    field :password, virtual: true\n\n    timestamps()\n  end\nend\n```\n\n### Field types\n\n| Field |\n| --- |\n| `:id` |\n| `:binary` |\n| `:boolean` |\n| `:string` |\n| --- |\n| `:integer` |\n| `:float` |\n| `:decimal` |\n| --- |\n| `{:array, inner_type}` |\n| `:map` |\n{: .-left-align}\n\n## Changesets\n\n### Changesets\n\n```elixir\ndef changeset(user, params \\\\ :empty) do\n  %User{}\n  |> Ecto.Changeset.change   # basic casting to changeset\n\n  user\n  |> cast(params, ~w(name email), ~w(age)) # params to Changeset\n\n  |> validate_format(:email, ~r/@/)\n\n  |> validate_inclusion(:age, 18..100)\n  |> validate_exclusion(:role, ~w(admin superadmin))\n  |> validate_subset(:pets, ~w(cat dog parrot whale))\n\n  |> validate_length(:body, min: 1)\n  |> validate_length(:body, min: 1, max: 160)\n  |> validate_length(:partners, is: 2)\n\n  |> validate_number(:pi, greater_than: 3)\n  |> validate_number(:pi, less_than: 4)\n  |> validate_number(:pi, equal_to: 42)\n\n  |> validate_change(:title, fn _, _ -> [])\n  |> validate_confirmation(:password, message: \"does not match\")\n\n  |> unique_constraint(:email)\n  |> foreign_key_constraint(:post_id)\n  |> assoc_constraint(:post)      # ensure post_id exists\n  |> no_assoc_constraint(:post)   # negative (useful for deletions)\nend\n```\n\n### Changeset fields\n\n```elixir\nchangeset.valid?\nchangeset.errors     #=> [title: \"empty\"]\n\nchangeset.changes    #=> %{}\nchangeset.params[:title]\n\nchangeset.required   #=> [:title]\nchangeset.optional   #=> [:body]\n```\n\n### Updating\n\n```elixir\nchangeset #(or model)\n|> change(title: \"New title\")\n|> change(%{ title: \"New title\" })\n|> put_change(:title, \"New title\")\n|> force_change(:title, \"New title\")\n|> update_change(:title, &(&1 <> \"...\"))\n\n|> delete_change(:title)\n|> merge(other_changeset)\n\n|> add_error(:title, \"empty\")\n```\n\n### Getting\n\n```elixir\nget_change(changeset, :title)    #=> \"hi\" (if changed)\nget_field(changeset, :title)     #=> \"hi\" (even if unchanged)\n\nfetch_change(changeset, :title)  #=> {:ok, \"hi\"} | :error\nfetch_field(changeset, :title)   #=> {:changes | :model, \"value\"} | :error\n```\n\n## Repo\n\n### Get one\n\n```elixir\nRepo.get(User, id)\nRepo.get_by(User, email: \"john@hello.com\")  #=> %User{} | nil\n\n# also get! get_by!\n```\n\n### Create/update\n\n```elixir\nchangeset |> Repo.update\nchangeset |> Repo.insert\nchangeset |> Repo.insert_or_update\n```\n\n```\nUser\n|> Ecto.Changeset.change(%{name: \"hi\"})\n|> Repo.insert\n```\n\n## Many\n\n### Queries\n\n```elixir\nfrom p in Post,\n  where: p.title == \"Hello\",\n  where: [state: \"Sweden\"],\n\n  limit: 1,\n  offset: 10,\n\n  order_by: c.name,\n  order_by: [c.name, c.title],\n  order_by: [asc: c.name, desc: c.title],\n\n  preload: [:comments],\n  preload: [comments: {c, likes: l}],\n\n  join: c in assoc(c, :comments),\n  join: p in Post, on: c.post_id == p.id,\n  group_by: p,\n\n  select: p,\n  select: {p.title, p.description},\n  select: [p.title, p.description],\n```\n\n### Get many\n\n```elixir\nRepo.all(User)\n```\n\n### Update many\n\n```elixir\nRepo.update_all(Post, set: [title: \"Title\"])\nRepo.update_all(Post, inc: [views: 1])\n```\n\n### Chaining `_all` with queries\n\n```elixir\nfrom(p in Post, where: p.id < 10)\n|> Repo.update_all(...)\n\nfrom(p in Post, where: p.id < 10)\n|> Repo.all()\n```\n\n## References\n{: .-one-column}\n\n- Based on Ecto 1.3.\n"
  },
  {
    "path": "phoenix-ecto@1.2.md",
    "content": "---\ntitle: \"Phoenix: Ecto models\"\ncategory: Elixir\ndeprecated: true\ntags: [Archived]\narchived: This is for Phoenix 1.2 and below. [Phoenix 1.3 has a new API.](./phoenix-ecto@1.3).\n---\n\n### About\n\nThis is for Phoenix 1.2 and below. [Phoenix 1.3 has a new API.](./phoenix-ecto@1.3).\n\n### Generating\n\n```\n$ mix phoenix.gen.html Profile profiles email:string age:integer\n$ mix phoenix.gen.html User users email:string hashed_password:string\n```\n\n### Schema\n\n```elixir\ndefmodule User do\n  use Ecto.Schema\n\n  schema \"users\" do\n    field :name\n    field :age, :integer\n    # :id :binary :integer :float :boolean :string :binary\n    # {:array, inner_type} :decimal :map\n\n    field :password, virtual: true\n  end\nend\n```\n\n### Changesets\n\n```elixir\ndef changeset(user, params \\\\ :empty) do\n  %User{}\n  |> Ecto.Changeset.change   # basic casting to changeset\n\n  user\n  |> cast(params, ~w(name email), ~w(age)) # params to Changeset\n\n  |> validate_format(:email, ~r/@/)\n\n  |> validate_inclusion(:age, 18..100)\n  |> validate_exclusion(:role, ~w(admin superadmin))\n  |> validate_subset(:pets, ~w(cat dog parrot whale))\n\n  |> validate_length(:body, min: 1)\n  |> validate_length(:body, min: 1, max: 160)\n  |> validate_length(:partners, is: 2)\n\n  |> validate_number(:pi, greater_than: 3)\n  |> validate_number(:pi, less_than: 4)\n  |> validate_number(:pi, equal_to: 42)\n\n  |> validate_change(:title, fn _, _ -> [])\n  |> validate_confirmation(:password, message: \"does not match\")\n\n  |> unique_constraint(:email)\n  |> foreign_key_constraint(:post_id)\n  |> assoc_constraint(:post)      # ensure post_id exists\n  |> no_assoc_constraint(:post)   # negative (useful for deletions)\nend\n```\n\n```elixir\nchangeset.valid?\nchangeset.errors     #=> [title: \"empty\"]\n\nchangeset.changes    #=> %{}\nchangeset.params[:title]\n\nchangeset.required   #=> [:title]\nchangeset.optional   #=> [:body]\n```\n\n### Updating\n\n```elixir\nchangeset #(or model)\n|> change(title: \"New title\")\n|> change(%{ title: \"New title\" })\n|> put_change(:title, \"New title\")\n|> force_change(:title, \"New title\")\n|> update_change(:title, &(&1 <> \"...\"))\n\n|> delete_change(:title)\n|> merge(other_changeset)\n\n|> add_error(:title, \"empty\")\n```\n\n### Getting\n\n```elixir\nget_change(changeset, :title)    #=> \"hi\" (if changed)\nget_field(changeset, :title)     #=> \"hi\" (even if unchanged)\n\nfetch_change(changeset, :title)  #=> {:ok, \"hi\"} | :error\nfetch_field(changeset, :title)   #=> {:changes | :model, \"value\"} | :error\n```\n\n## Ecto\n\n### Get one\n\n```elixir\nRepo.get(User, id)\nRepo.get_by(User, email: \"john@hello.com\")  #=> %User{} | nil\n\n# also get! get_by!\n```\n\n### Create/update\n\n```elixir\nchangeset |> Repo.update\nchangeset |> Repo.insert\nchangeset |> Repo.insert_or_update\n```\n\n```\nUser\n|> Ecto.Changeset.change(%{name: \"hi\"})\n|> Repo.insert\n```\n\n## Many\n\n### Queries\n\n```elixir\nfrom p in Post,\n  where: p.title == \"Hello\",\n  where: [state: \"Sweden\"],\n\n  limit: 1,\n  offset: 10,\n\n  order_by: c.name,\n  order_by: [c.name, c.title],\n  order_by: [asc: c.name, desc: c.title],\n\n  preload: [:comments],\n  preload: [comments: {c, likes: l}],\n\n  join: c in assoc(c, :comments),\n  join: p in Post, on: c.post_id == p.id,\n  group_by: p,\n\n  select: p,\n  select: {p.title, p.description},\n  select: [p.title, p.description],\n```\n\n### Get many\n\n```elixir\nRepo.all(User)\n```\n\n### Update many\n\n```elixir\nRepo.update_all(Post, set: [title: \"Title\"])\nRepo.update_all(Post, inc: [views: 1])\n```\n\n### Chaining `_all` with queries\n\n```elixir\nfrom(p in Post, where: p.id < 10)\n|> Repo.update_all(...)\n\nfrom(p in Post, where: p.id < 10)\n|> Repo.all()\n```\n"
  },
  {
    "path": "phoenix-ecto@1.3.md",
    "content": "---\ntitle: \"Phoenix: Ecto models\"\ncategory: Hidden\nredirect_to: /phoenix-ecto\ndeprecated: true\n---\n"
  },
  {
    "path": "phoenix-migrations.md",
    "content": "---\ntitle: \"Phoenix: Ecto migrations\"\ncategory: Elixir\nweight: -1\nupdated: 2020-02-23\n---\n\n### Creating\n\n```bash\n$ mix ecto.gen.migration update_posts_table\n  creating priv/repo/migrations/20160602085927_update_posts_table.exs\n  ···\n```\n\n```bash\n$ mix ecto.migrate\n$ mix ecto.rollback\n```\n\nCreates a migration (no models).\n\n### Creating models\n\n```bash\n$ mix phoenix.gen.model Message messages user_id:integer content:text\n```\n\nThis is only for Phoenix 1.2 or older; models aren't available in Phoenix 1.3+.\n\n### Creating context\n\n```bash\n$ mix phx.gen.context Images Album albums title:string subtitle:string privacy:string\n```\n \n## Migration functions\n\n### Creating tables\n\n```elixir\ncreate table(:documents) do\n  add :title, :string\n  add :title, :string, size: 40\n  add :title, :string, default: \"Hello\"\n  add :title, :string, default: fragment(\"now()\")\n  add :title, :string, null: false\n  add :body, :text\n  add :age, :integer\n  add :price, :float\n  add :price, :float\n  add :price, :decimal, precision: 10, scale: 2\n  add :published_at, :utc_datetime\n  add :group_id, references(:groups)\n  add :object, :json\n\n  timestamps  # inserted_at and updated_at\nend\n\ncreate_if_not_exists table(:documents) do: ... end\n```\n\n### Other operations\n\n```elixir\nalter table(:posts) do\n  add :summary, :text\n  modify :title, :text\n  remove :views\nend\n```\n\n```elixir\nrename table(:posts), :title, to: :summary\nrename table(:posts), to: table(:new_posts)\n```\n\n```elixir\ndrop table(:documents)\ndrop_if_exists table(:documents)\n```\n\n```elixir\ntable(:documents)\ntable(:weather, prefix: :north_america)\n```\n\n### Indices\n\n```elixir\ncreate index(:posts, [:slug], concurrently: true)\ncreate unique_index(:posts, [:slug])\ndrop index(:posts, [:name])\n```\n\n### Execute SQL\n\n```elixir\nexecute \"UPDATE posts SET published_at = NULL\"\nexecute create: \"posts\", capped: true, size: 1024\n```\n\n## References\n\n- [Ecto.Migration](http://devdocs.io/phoenix/ecto/ecto.migration)\n"
  },
  {
    "path": "phoenix-routing.md",
    "content": "---\ntitle: \"Phoenix: Routing\"\ncategory: Elixir\nweight: -1\n---\n\n### Showing routes\n\n```sh\nmix phx.routes        # 1.3+\nmix phoenix.routes    # 1.2 and below\n```\n\nSee: [Mix.Tasks.Phoenix.Routes](https://hexdocs.pm/phoenix/Mix.Tasks.Phoenix.Routes.html) _(hexdocs.pm)_\n\n### Single routes\n\n```elixir\nget \"/\", PageController, :index\n```\n\nAlso: `put` `post` `patch` `options` `delete` `head`\n\n### Resources\n\n```elixir\nresources \"/users\", UserController\nresources \"/users\", UserController, only: [:index, :show]\nresources \"/users\", UserController, except: [:delete]\n```\n\n```elixir\nresources \"/users\", UserController,\n  as: :person    # helper name (person_path)\n  name: :person  # ...?\n  param: :id     # name of parameter for this resource\n```\n\nGenerates these routes:\n\n| Method    | Path              | Helper                     |\n| ----      | ----              | ----                       |\n| GET       | `/users`          | `user_path(:index)`        |\n| GET       | `/users/new`      | `user_path(:new)`          |\n| GET       | `/users/:id`      | `user_path(:show, user)`   |\n| GET       | `/users/:id/edit` | `user_path(:edit, user)`   |\n| POST      | `/users`          | `user_path(:create, user)` |\n| PATCH/PUT | `/users/:id`      | `user_path(:update, user)` |\n| DELETE    | `/users/:id`      | `user_path(:delete, user)` |\n{: .-left-align}\n\nSee: [resources/4](https://hexdocs.pm/phoenix/Phoenix.Router.html#resources/4) _(hexdocs.pm)_\n\n### Path helpers\n\n```elixir\nuser_path(conn, :index)                 # → /users\nuser_path(conn, :show, 17)              # → /users/17\nuser_path(conn, :show, %User{id: 17})   # → /users/17\nuser_path(conn, :show, 17, admin: true) # → /users/17?admin=true\n```\n\n```elixir\nuser_url(conn, :index) # → \"http://localhost:4000/users\"\n```\n\n```elixir\nMyApp.Router.Helpers.user_path(MyApp.Endpoint, :index)\n```\n\nSee: [Helpers](https://hexdocs.pm/phoenix/Phoenix.Router.html#module-helpers) _(hexdocs.pm)_\n\n### Nested resources\n\n```elixir\nresources \"/users\", UserController do\n  resources \"/posts\", PostController\nend\n```\n\n```elixir\nuser_post_path(:index, 17)     # → /users/17/posts\nuser_post_path(:show, 17, 12)  # → /users/17/posts/12\n```\n\nSee: [Scopes and resources](https://hexdocs.pm/phoenix/Phoenix.Router.html#module-scopes-and-resources) _(hexdocs.pm)_\n\n### Scoped routes\n\n```elixir\nscope \"/admin\" do\n  pipe_through :browser\n  resources \"/reviews\", MyApp.Admin.ReviewController\nend\n# reviews_path() -> /admin/reviews\n```\n\n```elixir\nscope \"/admin\", as: :admin do: ... end\n# admin_reviews_path() -> /admin/reviews\n```\n\nSee: [scope/2](https://hexdocs.pm/phoenix/Phoenix.Router.html#scope/2) _(hexdocs.pm)_\n"
  },
  {
    "path": "phoenix.md",
    "content": "---\ntitle: Phoenix\ncategory: Elixir\nweight: -1\nupdated: 2018-03-06\n---\n\n### Quick start\n\n```bash\n# Install Phoenix\nmix local.hex\nmix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez\n```\n\n```bash\n# Create a new project\nmix phx.new hello\n```\n\n```bash\n# Start the application\nmix phx.server\n```\n\nInstall Erlang, Elixir, Node.js, PostgreSQL first.\nSee: [Installation](https://hexdocs.pm/phoenix/installation.html) _(hexdocs.pm)_\n\n### Directory structure\n\n```\n./\n├── _build\n├── assets/\n│   ├── css/\n│   ├── js/\n│   ├── static/\n│   └── node_modules/\n├── config/\n├── deps/\n├── lib/\n│   ├── hello/\n│   ├── hello.ex\n│   ├── hello_web/\n│   │   ├── channels/\n│   │   ├── controllers/\n│   │   ├── templates/\n│   │   ├── views/\n│   │   ├── router.ex\n│   │   └── gettext.ex\n│   └── hello_web.ex\n├── priv/\n└── test/\n```\n{: .-box-chars}\n\nSee: [Adding pages](https://hexdocs.pm/phoenix/adding_pages.html) _(hexdocs.pm)_\n\n### Migrations\n\n```bash\n$ mix ecto.gen.migration update_posts_table\n  creating priv/repo/migrations/20160602085927_update_posts_table.exs\n  ···\n```\n\n```elixir\ncreate table(:documents) do\n  add :title, :string\n  add :title, :string, default: \"Hello\"\n  add :body, :text\n  add :age, :integer\n  add :price, :float, precision: 10, scale: 2\n  timestamps\nend\n```\n\n[Ecto migrations cheatsheet](./phoenix-migrations)\n{: .-crosslink}\n\n### Routing\n\n```elixir\nget \"/\", PageController, :index\n\nresources \"/users\", UserController do\n  resources \"/posts\", PostController\nend\n```\n\n```elixir\nuser_post_path(conn, :index, 17)     # → /users/17/posts\nuser_post_path(conn, :show, 17, 12)  # → /users/17/posts/12\n```\n\n[Phoenix routing cheatsheet](./phoenix-routing)\n{: .-crosslink}\n\n### Conn\n\n```elixir\nconn.host          # → \"example.com\"\nconn.method        # → \"GET\"\nconn.path_info     # → [\"posts\", \"1\"]\nconn.request_path  # → \"/posts/1\"\n```\n\n```elixir\nconn\n|> put_status(202)\n|> html(\"<html><head>···\")\n|> json(%{ message: \"Hello\" })\n|> text(\"Hello\")\n|> redirect(to: \"/foo\")\n|> render(\"index.html\")\n|> render(\"index.html\", hello: \"world\")\n|> render(MyApp.ErrorView, \"404.html\")\n```\n\n[Phoenix conn cheatsheet](./phoenix-conn)\n{: .-crosslink}\n\n### Ecto\n\n```bash\n$ mix phx.gen.html \\\n    Accounts \\       # domain\n    Profile \\        # schema\n    profiles \\       # table name\n    email:string \\\n    age:integer\n```\n\n[Ecto cheatsheet](./phoenix-ecto)\n{: .-crosslink}\n\n### Also see\n\n- [Phoenix framework site](http://phoenixframework.org/) _(phoenixframework.org)_\n- [Phoenix: getting started](https://hexdocs.pm/phoenix/overview.html) _(hexdocs.pm)_\n"
  },
  {
    "path": "phoenix@1.2.md",
    "content": "---\ntitle: Phoenix 1.2\ncategory: Elixir\nweight: -1\nupdated: 2018-03-06\n---\n\nSee [Phoenix](./phoenix) for a more updated cheatsheet.\n\n### Directory structure (Legacy 1.2)\n\n```\n├── _build\n├── config/\n├── deps/\n├── lib/\n│   ├── hello/\n│   ├── hello.ex\n├── node_modules/\n├── priv/\n├── test/\n└── web/\n│   ├── channels/\n│   ├── controllers/\n│   ├── models/\n│   ├── static/\n│   ├── templates/\n│   ├── views/\n│   ├── gettext.ex\n│   ├── router.ex\n│   ├── web.ex\n├── mix.exs\n```\n\nThis is Phoenix 1.2's structure. Phoenix 1.3 has no `models`.\n"
  },
  {
    "path": "plantuml.md",
    "content": "---\ntitle: PlantUML\n---\n\n### About\n{: .-intro}\n\nPlantUML is a markup language for creating diagrams.\n\n- <https://plantuml.com/>\n\n### Format\n\n    @startuml\n    Car : drive()\n    Dog : bark()\n    @enduml\n\n    # plantuml file.uml && open file.png\n\n## Classes\n\n * http://plantuml.sourceforge.net/classes.html\n\n### Methods\n\n    Car : drive()\n\n### Methods (alt)\n\n    class Car {\n      String make\n      year : Integer\n      void drive()\n\n      -private()\n      #protected()\n      ~package private()\n      +public()\n\n      {static} String id\n      {abstract} void methods()\n    }\n\n### Lines\n\n    class Car {\n      These are separated by lines.\n      The next line is a dotted line\n      ..\n      Next is a double-stroke\n      ==\n      Next is a plain line\n      --\n      Next is a strong line\n      __\n      You can make headers with it\n      .. header ..\n    }\n\n### Associations\n\n    Car <|-- SmallCar      # extension\n    Car *-- Engine         # composition\n    Cars o-- Car           # aggregation\n    Car <|.. SmallCar      # dotted line (use .. instead of --)\n    Car <|--* Car\n\n    -left->\n    -right->\n\n### Relations\n\n    Driver - Car : drives >\n    Car -- Owner : < owns\n    Car *-- Wheel : has 4 >\n\n### Notes\n\n    class Car {\n    }\n    note left: Something something\n\n    note top of Car : This is a car.\n\n### Namespaces\n\n    namespace Client {\n      class Driver {\n      }\n    }\n\n    Car -- Client.Driver : owns >\n\n\n## Activities\n\n    (*) --> \"First Activity\"\n    -->[You can put also labels] \"Second Activity\"\n    --> (*)\n\n"
  },
  {
    "path": "playwright.config.ts",
    "content": "import { defineConfig } from '@playwright/test'\n\nconst port = process.env.PORT ?? 4321\n\nconst isCI = Boolean(process.env.CI)\n\nexport default defineConfig({\n  testMatch: /.*\\.e2e\\.[^.]*/,\n  webServer: {\n    command: `npm run dev -- --port ${port}`,\n    url: `http://localhost:${port}/`,\n    reuseExistingServer: !isCI /* Spawn dev server on CI */\n  },\n  expect: {\n    timeout: isCI ? 5000 : 2500 /* default: 5000 */\n  },\n  use: {\n    baseURL: `http://localhost:${port}/`\n  }\n})\n"
  },
  {
    "path": "pm2.md",
    "content": "---\ntitle: pm2\ncategory: CLI\nauthors: { github: \"Dr-Dino\" }\nupdated: 2020-05-08\n---\n\n### Fork mode\n\n| Command                          | Description              |\n| ---                              | ---                      |\n| `pm2 start app.js --name my-api` | Start and name a process |\n\n### Cluster mode\n\n| Command                 | Description                                                        |\n| ---                     | ---                                                                |\n| `pm2 start app.js -i 0` | Will start maximum processes with LB depending on available CPUs\t |\n\n### Listing\n\n| Command          | Description                                         |\n| ---              | ---                                                 |\n| `pm2 list`       | Display all processes status                        |\n| `pm2 jlist`      | Print process list in raw JSON                      |\n| `pm2 prettylist` | Print process list in beautified JSON               |\n| ---              | ---                                                 |\n| `pm2 describe 0` | Display all information about a specific process\t |\n| ---              | ---                                                 |\n| `pm2 monit`      | Monitor all processes                               |\n\n### Logs\n\n| Command            | Description                               |\n| ---                | ---                                       |\n| `pm2 logs [--raw]` | Display all processes logs in streaming\t |\n| `pm2 flush`        | Empty all log files                       |\n| `pm2 reloadLogs`\t | Reload all logs                           |\n\n### Actions\n\n| Command           | Description                                    |\n| ---               | ---                                            |\n| `pm2 stop all`    | Stop all processes                             |\n| `pm2 restart all` | Restart all processes                          |\n| ---               | ---                                            |\n| `pm2 reload all`  | Will 0s downtime reload (for NETWORKED apps)\t |\n| ---               | ---                                            |\n| `pm2 stop 0`      | Stop specific process id                       |\n| `pm2 restart 0`   | Restart specific process id                    |\n| ---               | ---                                            |\n| `pm2 delete 0`    | Will remove process from pm2 list              |\n| `pm2 delete all`  | Will remove all processes from pm2 list        |\n| ---               | ---                                            |\n| `pm2 save`        | Save processes list to respawn at reboot       |\n| ---               | ---                                            |\n| `pm2 reset`       | reset the restart counter                      |\n| `pm2 reset all`   | reset all restart counters                     |\n\n### Misc\n\n| Command                             | Description                                                    |\n| ---                                 | ---                                                            |\n| `pm2 reset <process>`               | Reset meta data (restarted time...)                            |\n| `pm2 updatePM2`                     | Update in memory pm2                                           |\n| `pm2 ping`                          | Ensure pm2 daemon has been launched                            |\n| `pm2 sendSignal SIGUSR2 my-app`     | Send system signal to script                                   |\n| ---                                 | ---                                                            |\n| `pm2 start app.js --no-daemon`      | Run pm2 daemon in the foreground if it doesn't exist already\t |\n| `pm2 start app.js --no-vizion`      | Skip vizion features (versioning control)                      |\n| `pm2 start app.js --no-autorestart` | Do not automatically restart app                               |\n"
  },
  {
    "path": "polyfill.io.md",
    "content": "---\ntitle: Polyfill.io\ncategory: JavaScript libraries\nupdated: 2024-06-26\nintro: |\n  Polyfill.io is a service that serves JavaScript polyfills.\n---\n\n## Usage\n\n### Critical security warning\n\n⚠️ The polyfill.io CDN domain is currently being used in a web supply chain attack and is serving malicious code. **Remove any references to this domain from your codebase immediately**. Use alternative CDN providers like cdnjs.cloudflare.com as shown in the examples below.\n\n### Default usage\n\n```html\n<script src=\"https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js\"></script>\n```\n\n{: .-wrap}\n\nThis is the default script for Polyfill.io.\n\n### References\n\n* [Cloudflare now serves polyfill.io](https://blog.cloudflare.com/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk) _(blog.cloudflare.com)_\n\n## Optimized\n\n### For modern browsers\n\n```html\n<script>if(!(window.Promise&&[].includes&&Object.assign&&window.Map)){document.write('<script src=\"https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js\"></scr'+'ipt>')}</script>\n```\n\nThis only includes polyfill.io when necessary, skipping it for modern browsers for faster load times.\n\n### Extra features\n\n```html\n<script>if(!(window.fetch&&window.Promise&&[].includes&&Object.assign&&window.Map)){document.write('<script src=\"https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=default,fetch\"></scr'+'ipt>')}</script>\n```\n\nThis is the same as the previous, but also adds a polyfill for `window.fetch()`. We add a `window.fetch` check and loads the additional `fetch` feature.\n"
  },
  {
    "path": "postcss.config.js",
    "content": "export default {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": "postgresql-json.md",
    "content": "---\ntitle: PostgreSQL JSON\nprism_languages: [sql]\nupdated: 2018-12-06\ncategory: Databases\n---\n\n## Operators\n\n### Accessors\n\n```sql\nSELECT * FROM users WHERE data->>'name' = 'John';\nSELECT data->>'name' AS name FROM users;\n```\n{: .-setup}\n\n| Operator       | Description                        | Example          | Returns |\n| ----           | ----                               | ----             | ----    |\n| `->` _int_     | Get array element `2`              | `data->2`        | JSON    |\n| `->` _text_    | Get object key `name`              | `data->'name'`   | JSON    |\n| `#>` _text[]_  | Get keypath `a,b` (eg, `data.a.b`) | `data#>'{a,b}'`  | JSON    |\n| -\n| `->>` _int_    | Get array element `2`              | `data->>2`       | Text    |\n| `->>` _text_   | Get object key `name`              | `data->>'name'`  | Text    |\n| `#>>` _text[]_ | Get keypath `a,b` (eg, `data.a.b`) | `data#>>'{a,b}'` | Text    |\n{: .-headers.-shortcuts}\n\n`>` returns JSON, `>>` returns text.\n\n### Boolean operators\n\n```sql\nSELECT * FROM users WHERE data->tags ? 'admin';\nSELECT data->tags ? 'admin' AS is_admin FROM users;\n```\n{: .-setup}\n\n| Operator      | Description                   | Example                          |\n| ----          | ----                          | ----                             |\n| `?` _str_     | Does `data` have key `name`?  | `data ? 'name'`                  |\n| `?|` _text[]_ | Does `data` have `a` or `b`?  | `data ?| array['a','b']`         |\n| `?&` _text[]_ | Does `data` have `a` and `b`? | `data ?& array['a','b']`         |\n| `@>` _jsonb_  | Does `left` include `right`?  | `data @> '{\"b\":2}'::jsonb`       |\n| `<@` _jsonb_  | Does `right` include `left`?  | `data <@ '{\"a\":1,\"b\":2}'::jsonb` |\n{: .-headers.-shortcuts.-left-align}\n\nWhen `?`/`?|`/`?&` works on objects, it checks keys; when it works on arrays, it checks for elements.\n\n## Updating\n\n### Arrays and objects\n\n```sql\nUPDATE users SET tags = tags || array['admin'];\n```\n{: .-setup}\n\n| Operator       |  Example                   |  Description\n| ----           |  ----                      |  ----\n| `||` _json_    |  `data || array['a','b']`  |  Concatenate\n| `-` _str_      |  `data - 'a'`              |  Delete a key\n| `-` _int_      |  `data - 1`                |  Delete an array item\n| `#-` _text[]_  |  `data #- '{us,name}'`     |  Delete a path\n{: .-headers.-shortcuts}\n\nOnly available in PostgreSQL 9.5+.\n\n### jsonb_set\n\n```sql\nUPDATE users SET data = jsonb_set(data, '{name}', '\"John\"');\n```\n\nOnly available in PostgreSQL 9.5+.\n\n## Functions\n\n#### fn(json) → json\n\n```sql\njsonb_set(data, '{path}', value)\njsonb_strip_nulls(data)\n```\n\n#### fn(···) → json\n\n```sql\nto_json(\"Hello\"::text)\narray_to_json('{1,2}'::int[])\n```\n\n#### Iteration\n\n```sql\nSELECT * from json_each('{\"a\":1, \"b\":2}')\nSELECT * from json_each_text('{\"a\":1, \"b\":2}')\n-- key | value\n```\n\nThis is an incomplete list, there's way too many!\n\nSee: [JSON functions](https://www.postgresql.org/docs/9.5/static/functions-json.html)\n\n## More examples\n\n- `'{\"a\":1}'::jsonb ? 'a'`\n- `'[\"a\"]'::jsonb ? 'a'`\n\n## References\n\n- <https://www.postgresql.org/docs/9.5/static/functions-json.html>\n- <https://www.postgresql.org/docs/9.5/static/datatype-json.html>\n"
  },
  {
    "path": "postgresql.md",
    "content": "---\ntitle: PostgreSQL\ncategory: Databases\n---\n\n### Console\n\n    $ psql #logs in to default database & default user\n    $ sudo -u <rolename:postgres> psql #logs in with a particular user\n\nReplace anything within `<placeholder>` accordingly\n\n### Commands\n\n * Show roles: `\\du`\n * Show tables: `\\dt`\n * Show databases: `\\l`\n * Connect to a database: `\\c <database>`\n * Show columns of a table: `\\d <table>` or `\\d+ <table>`\n * Quit: `\\q`\n\n### Creating database\n\n     $ createdb databasename\n"
  },
  {
    "path": "premailer.md",
    "content": "---\ntitle: Premailer\ntags: [WIP]\nintro: |\n  [Premailer](https://github.com/premailer/premailer/) is a Ruby library that inlines CSS into HTML.\n---\n\n### Custom CSS properties\n\n<!-- prettier-ignore -->\n```css\ntable, th, td {\n  /* Available on table, th and td elements */\n  -premailer-width: 32px;\n}\n\ntable, tr, th, td {\n  /* Available on table, tr, th and td elements */\n  -premailer-height: 32px;\n}\n\ntable {\n  /* Available on table elements */\n  -premailer-cellpadding: 32px;\n  -premailer-cellspacing: 32px;\n}\n```\n"
  },
  {
    "path": "projectionist.md",
    "content": "---\ntitle: Projectionist\ncategory: Vim\n---\n\n### Basic usage\n\n```json\n/* .projectionist.vim */\n{\n  \"app/assets/react/components/*.jsx\": {\n    \"type\": \"component\",\n    \"template\": [\n      \"import React from 'react'\",\n      \"export default {} = React.createClass({ ... })\"\n    ]\n  }\n```\n\n### Available options\n\n```js\n{\n  \"lib/*.rb\": {\n    \"type\": \"lib\", /* enables :Elib */\n    \"alternate\": \"test/{}_spec.rb\", /* for :A */\n    \"template\": [ ... ],\n\n    \"path\": \"include\", /* for `gf` i think */\n\n    \"console\": \"node\", /* for :Console */\n    \"dispatch\": \"node\", /* for :Dispatch (dispatch.vim) */\n    \"start\": \"rails server\", /* for :Start (dispatch.vim) */\n    \"make\": \"node\", /* for makeprg */\n  }\n}\n```\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `:A` | Edit alternate |\n| `:A {file}` | Edit file |\n|---------|-------------|\n| `:AS` | Edit in split |\n| `:AV` | Edit in vsplit |\n| `:AT` | Edit in tab |\n|---------|-------------|\n| `:AD` | Replace with template |\n|---------|-------------|\n| `:Cd` | cd to root |\n| `:Cd {path}` | cd to path in root |\n| `:Lcd` | cd to root using :lcd |\n|---------|-------------|\n| `:ProjectDo {cmd}` | run command in root |\n\n### Reference\n\nSee [vim-projectionist](https://github.com/tpope/vim-projectionist).\n"
  },
  {
    "path": "promise.md",
    "content": "---\ntitle: Promises\ncategory: JavaScript\n---\n\n## Reference\n{:.-three-column}\n\n### Introduction\n{: .-intro}\n\nintro: A quick reference to the JavaScript [Promise API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\n- [Using Promises guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises) _(developer.mozilla.org)_\n- [Promise documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) _(developer.mozilla.org)_\n\n### Creating promises\n\n```js\nnew Promise((resolve, reject) => {\n  doStuff(() => {\n    if (success) {\n      resolve('good')\n    } else {\n      reject(new Error('oops'))\n    }\n  })\n})\n```\n\nUse [new Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Constructor) to create new promises.\n\n### Consuming promises\n\n```js\npromise\n  .then((result) => {\n    /* success */\n  })\n  .catch((error) => {\n    /* failure */\n  })\n```\n\n[then()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) runs a function when a promise resolves. [catch()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch) runs when a promise fails.\n\n### Multiple promises\n\n```js\nconst promises = [promise1(), promise2() /* ... */]\n```\n\n```js\n// Succeeds when all succeed\nPromise.all(promises).then((results) => {\n  /* ... */\n})\n```\n\n```js\n// Succeeds when one finishes first\nPromise.race(promises).then((result) => {\n  /* ... */\n})\n```\n\n### Converting other promises\n\n```js\nreturn Promise.resolve('result')\nreturn Promise.resolve(promise)\nreturn Promise.resolve(thenable)\n\nreturn Promise.reject('reason')\n\nPromise.resolve(result).then(() => {\n  /* ... */\n})\n```\n\n`Promise.resolve(val)` will return a promise that resolves to the value given to it.\n"
  },
  {
    "path": "pry.md",
    "content": "---\ntitle: Pry\ncategory: Ruby libraries\n---\n\n### About\n{: .-intro}\n\nPry is a runtime development console for Ruby.\n\n- <https://github.com/pry/pry>\n\n### cd\n\n```\n> cd Array\n```\n\n```nohighlight\n> ls\n  Array.methods: [] try_convert\n  Array#methods: & * + abbrev assoc at ...\n```\n\n```\n> show-source\n```\n\n### Code\n\n```nohighlight\n> show-method Array#select\n```\n\n### Docs\n\n```nohighlight\n> ri Array\n> ri Array#each\n\n> cd Gem\n> show-doc try_activate\n```\n\n### Finding\n\n```nohighlight\n> find-method each\n  Array#each\n  Array#each_index\n  Enumerable#each_slice\n  ...\n```\n\n### Editing\n\n    > edit Pry#repl\n\n### Gems\n\n    > gem-cd foo      # Switch to gem's dir\n    > gem-install foo\n    > gem-list\n\n### Misc commands\n\n    > hist          # History\n    > wtf?          # Trace of recent exception\n\n## Rails\n\n### Rails console\n\nAlso consider [pry-rails](https://rubygems.org/gems/pry-rails).\n\n    $ pry -r ./config/environment\n\n### Rails\n\n    > show-models\n    > show-routes\n    > show-middleware\n\n### ls\n\n    > ls         # All\n\n    > ls -m      # Methods\n    > ls -M      # Instance methods\n\n    > ls -g      # Globals\n    > ls -l      # Local vars\n    > ls -c      # Constants\n\n    > ls -i      # Instance vars\n\n    > ls -G xx   # Grep by regex\n\n## Shell integration\n\nshell-mode adds dir to the prompt.\n\n    pry(main)> shell-mode\n    pry(main):/home/x $\n\nCommands with `.` are shell commands.\n\n    pry(main)> .cat hello.txt\n\n## hirb\nAdd the [hirb](https://rubygems.org/gems/hirb) gem.\n\n    > table User.all\n    > view User.all\n    > view User.all, fields: %w[id name email]\n\n## pry-rescue\nAdd the [pry-rescue](https://github.com/ConradIrwin/pry-rescue) gem.\n\n```rb\nPry::rescue {\n  # raise exceptions here\n}\n```\n\nOr run:\n\n```\nbundle exec rescue rspec\n```\n\nAdditional commands:\n\n```\npry(main)> cd-cause\npry(main)> try-again\n```\n\n## pry-remote\nAdd the [pry-remote](https://github.com/Mon-Ouie/pry-remote) gem.\n\n```rb\n# In your code:\nbinding.remote_pry\n\n# In the shell:\nbundle exec pry-remote\n```\n\n## Reference\n\n * [Pry](https://github.com/pry/pry)\n * [Hirb](https://github.com/cldwalker/hirb)\n"
  },
  {
    "path": "psdrb.md",
    "content": "---\ntitle: PSD.rb\ncategory: Ruby libraries\nintro: |\n  [PSD.rb](https://github.com/layervault/psd.rb) parses Photoshop documents in Ruby.\n---\n\n### Opening\n\n```ruby\npsd = PSD.new(file, parse_layer_images: true)\npsd.parse!\n```\n\n### Traversing\n\n```ruby\n# Gets the root node.\n# A #<Node> can be a Group or a Layer.\nnode = psd.tree\n```\n\n```ruby\nnode.root\nnode.descendants\nnode.ancestors\nnode.siblings\nnode.subtree\n```\n\n```ruby\nnode.descendant_groups\nnode.descendant_layers\n```\n\n### Layer info\n\n```ruby\nnode.name   #=> \"Layer 2\"\n```\n\n```ruby\nnode.top    #=> 3\nnode.left   #=> 3\nnode.bottom\nnode.right\n```\n\n```ruby\n# Note: these are interchanged (?)\nnode.width\nnode.height\n```\n\n```ruby\nnode.visible?\nnode.hidden?\n```\n\n```ruby\nnode.layer?\nnode.group?\n```\n\n```ruby\nnode.blending_mode  #=> \"normal\"\nnode.opacity        #=> 0..255\nnode.fill_opacity   #=> 0..255\n```\n\n### Layer text\n\n```ruby\nnode.text                  #=> (Hash)\nnode.text[:value]          #=> \"Text here\"\nnode.text[:font][:name]    #=> \"Arial\"\nnode.text[:font][:sizes]   #=> [6.9]\nnode.text[:font][:colors]  #=> [[255,255,255,255]]\nnode.text[:font][:css]     #=> \"font-family: ...;\"\nnode.text[:left]           #=> 3\nnode.text[:top]\nnode.text[:right]\nnode.text[:bottom]\nnode.text[:transform]      #=> (Hash)\n```\n\n### Layer effects\n\n```ruby\nfx = node.info[:object_effects]\n```\n\n```ruby\nfx.data['Scl ']   # ?\nfx.data['GrFl']   # Gradient fill\n```\n\n### Layer mask\n\n```ruby\nnode.mask[\"mask_size\"] == 0    # No mask\nnode.mask[\"mask_size\"] == 20   # Has mask\nnode.mask[\"top\"]\nnode.mask[\"left\"]\nnode.mask[\"bottom\"]\nnode.mask[\"right\"]\n```\n\n### Reference\n\n * [layervault/psd.rb](https://github.com/layervault/psd.rb) _(github.com)_\n"
  },
  {
    "path": "public/_headers",
    "content": "/_astro/*\n  Cache-Control: public, max-age=31536000, immutable\n"
  },
  {
    "path": "public/_redirects",
    "content": "/brew /homebrew 301\n/commander-js /commander.js 301\n/css-animation /css#animation 301\n/css-background /css#background 301\n/css-font /css#fonts 301\n/css-selectors /css#selectors 301\n/date /datetime 301\n/es2015 /es6 301\n/es2016 /es6 301\n/es2017 /es6 301\n/es2018 /es6 301\n/expect.js /expectjs 301\n/factory_girl /factory_bot 301\n/fetch /js-fetch 301\n/flexbox /css-flexbox 301\n/flowtype /flow 301\n/gpgconf /gnupg 301\n/gpg /gnupg 301\n/gutom /ph-food-delivery 301\n/handlebars-js /handlebars.js 301\n/harvey-js /harvey.js 301\n/immutable-js /immutable.js 301\n/jade /pug 301\n/jinja2 /jinja 301\n/package.json /package-json 301\n/package /package-json 301\n/phoenix-ecto@1.3 /phoenix-ecto 301\n/sh /bash 301\n"
  },
  {
    "path": "public/robots.txt",
    "content": ""
  },
  {
    "path": "pug.md",
    "content": "---\ntitle: Pug\ncategory: JavaScript libraries\nprism_languages: [jade]\nupdated: 2017-10-30\nweight: -3\ntags: [Featurable]\n---\n\n## Pug\n{: .-three-column}\n\n### Basic document\n{: .-prime}\n\n```jade\ndoctype html\nhtml(lang='en')\n  h1.class#id(name='hi')\n    | This is some text, hello there,\n    = name\n\n  - javascript()\n```\n\n### Elements\n\n```jade\ndiv\n  | Just a div\n```\n\n```jade\n.search\n  | A div, with class 'search'\n```\n\n```jade\nh1 A heading with text\n```\n\n```jade\nh1= page.title\n```\n\n```jade\ndiv.class\ndiv.class1.class2\nh1.header\n```\n\n### Attributes\n\n```jade\ninput(type='text' name='q' autofocus)\n```\n\n```jade\n- var authenticated = true\nbody(class=authenticated ? 'authed' : 'anon')\n```\n\nSee: [Attributes](https://pugjs.org/language/attributes.html)\n\n### Comments\n\n```jade\n// This comment will appear in the HTML\n```\n\n```jade\n//- This is a silent comment\n```\n\n```jade\n//-\n  Nesting inside a comment creates\n  a comment block\n```\n\nSee: [Comments](https://pugjs.org/language/attributes.html)\n\n### Iteration\n\n```jade\nul\n  each user in users\n    li= user\n```\n\n### Layouts\n\n```jade\n//- page.pug\nextends layout.pug\n\nblock title\n  | hello\n\nblock content\n  | hello\n```\n\n```jade\n//- layout.pug\ntitle\n  block title\nbody\n  block content\n```\n\n### Includes (partials)\n\n```jade\ninclude ./includes/head.pug\n```\n\n```jade\ninclude:markdown article.md\n```\n\nSee: [Includes](https://pugjs.org/language/includes.html)\n\n### Multiline text\n\n```jade\np.\n  This is text that doesn't need to\n  be prefixed by pipes.\n```\n{: data-line=\"1\"}\n\n```jade\nscript.\n  // It's great for raw\n  // JavaScript and stuff\n  alert('hello')\n```\n{: data-line=\"1\"}\n\n### Conditionals\n\n```jade\nif authenticated\n  a(href='/logout') Sign out\nelse\n  a(href='/login') Sign in\n```\n{: data-line=\"1,3\"}\n\nSee: [Conditionals](https://pugjs.org/language/conditionals.html)\n\n## Mixins\n{: .-three-column}\n\n### Mixins\n\n```jade\nmixin list\n  ul\n    ···\n```\n{: data-line=\"1\"}\n\n```jade\n+list\n```\n\nMixins allow you to create reusable code blocks.\nSee: [Mixins](https://pugjs.org/language/mixins.html)\n\n### Mixin attributes\n\n```jade\nmixin pet(name)\n  span.pet= name\n```\n{: data-line=\"1\"}\n\n```jade\n+pet('cat')\n```\n\nSee: [Mixin attributes](https://pugjs.org/language/mixins.html#mixin-attributes)\n\n### Mixin blocks\n\n```jade\nmixin article(title)\n  article\n    h2.title= title\n    block\n```\n{: data-line=\"1,4\"}\n\n```jade\n+article('hello there')\n  p Content goes here\n```\n\nSee: [Mixin blocks](https://pugjs.org/language/mixins.html#mixin-blocks)\n"
  },
  {
    "path": "python.md",
    "content": "---\ntitle: Python\ncategory: Python\n---\n\n### Tuples (immutable)\n\n```py\ntuple = ()\n```\n\n### Lists (mutable)\n\n```py\nlist = []\nlist[i:j]  # returns list subset\nlist[-1]   # returns last element\nlist[:-1]  # returns all but the last element\n*list      # expands all elements in place\n\nlist[i] = val\nlist[i:j] = otherlist  # replace ith to jth-1 elements with otherlist\ndel list[i:j]\n\nlist.append(item)\nlist.extend(another_list)\nlist.insert(index, item)\nlist.pop()        # returns and removes last element from the list\nlist.pop(i)       # returns and removes i-th element from the list\nlist.remove(i)    # removes the first item from the list whose value is i\nlist1 + list2     # combine two list    \nset(list)         # remove duplicate elements from a list\n\nlist.reverse()    # reverses the elements of the list in-place\nlist.count(item)\nsum(list)\n\nzip(list1, list2)  # returns list of tuples with n-th element of both list1 and list2\nlist.sort()        # sorts in-place, returns None\nsorted(list)       # returns sorted copy of list\n\",\".join(list)     # returns a string with list elements separated by comma\n\n```\n\n### Dict\n\n```py\ndict = {}\ndict = {'a': 1, 'b': 2}\ndict['c'] = 3\ndel dict['a']    # Remove key-value pair with key 'c'\ndict.keys()\ndict.values()\n\"key\" in dict    # let's say this returns False, then...\ndict[\"key\"]      # if \"key\" not in dict raises KeyError\ndict.get(\"key\")  # if \"key\" not in dict returns None\ndict.get(\"key\", \"optional return value if no key\")\ndict.setdefault(\"key\", 1)\n**dict           # expands all k/v pairs in place\n```\n\n### Set\n\n```py\nset = set()\nset = {1, 2, 3}\nset.add(4)\nset.remove(2) \n```\n\n### Iteration\n\n```py\nfor item in [\"a\", \"b\", \"c\"]:\nfor i in range(4):        # 0 to 3\nfor i in range(4, 8):     # 4 to 7\nfor i in range(1, 9, 2):  # 1, 3, 5, 7\nfor key, val in dict.items():\nfor index, item in enumerate(list):\n```\n\n### [String](https://docs.python.org/2/library/stdtypes.html#string-methods)\n\n```py\nstr[0:4]\nlen(str)\n\nstring.replace(\"-\", \" \")\n\",\".join(list)\n\"hi {0}\".format('j')\nf\"hi {name}\" # same as \"hi {}\".format('name')\nstr.find(\",\")\nstr.index(\",\")   # same, but raises IndexError\nstr.count(\",\")\nstr.split(\",\")\n\nstr.lower()\nstr.upper()\nstr.title()\n\nstr.lstrip()\nstr.rstrip()\nstr.strip()\n\nstr.islower()\n\n/* escape characters */\n>>> 'doesn\\'t'  # use \\' to escape the single quote...\n    \"doesn't\"\n>>> \"doesn't\"  # ...or use double quotes instead\n    \"doesn't\"\n>>> '\"Yes,\" they said.'\n    '\"Yes,\" they said.'\n>>> \"\\\"Yes,\\\" they said.\"\n    '\"Yes,\" they said.'\n>>> '\"Isn\\'t,\" they said.'\n    '\"Isn\\'t,\" they said.'\n```\n\n### Casting\n\n```py\nint(str)\nfloat(str)\nstr(int)\nstr(float)\n'string'.encode()\n```\n\n### Comprehensions\n\n```py\n[fn(i) for i in list]            # .map\nmap(fn, list)                    # .map, returns iterator\n\nfilter(fn, list)                 # .filter, returns iterator\n[fn(i) for i in list if i > 0]   # .filter.map\n```\n\n### Regex\n\n```py\nimport re\n\nre.match(r'^[aeiou]', str)\nre.sub(r'^[aeiou]', '?', str)\nre.sub(r'(xyz)', r'\\1', str)\n\nexpr = re.compile(r'^...$')\nexpr.match(...)\nexpr.sub(...)\n```\n\n## File manipulation\n    \n### Reading\n\n```py\nfile = open(\"hello.txt\", \"r\") # open in read mode 'r'\nfile.close() \n```\n\n```py\nprint(file.read())  # read the entire file and set the cursor at the end of file\nprint file.readline() # Reading one line\nfile.seek(0, 0) # place the cursor at the beginning of the file\n```\n\n### Writing (overwrite)\n\n```py\nfile = open(\"hello.txt\", \"w\") # open in write mode 'w'\nfile.write(\"Hello World\") \n\ntext_lines = [\"First line\", \"Second line\", \"Last line\"] \nfile.writelines(text_lines)\n\nfile.close()\n```\n\n### Writing (append)\n\n```py\nfile = open(\"Hello.txt\", \"a\") # open in append mode\nfile.write(\"Hello World again\")  \nfile.close()\n```\n\n### Context manager\n\n```py\nwith open(\"welcome.txt\", \"r\") as file:\n    # 'file' refers directly to \"welcome.txt\"\n   data = file.read()\n\n# It closes the file automatically at the end of scope, no need for `file.close()`.\n```\n"
  },
  {
    "path": "qjs.md",
    "content": "---\ntitle: Q.js\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\n* <https://github.com/kriskowal/q>\n* <https://github.com/kriskowal/q/wiki/API-Reference>\n\n### Creating promises (Q.promise)\n\n    Q.promise (ok, fail) =>\n      asyncFunction ->\n        if error\n          fail new Error(\"Failure\")\n        else\n          ok(data)\n\n### For arrays\n\n    promises = [saveDisk(), saveCloud()]\n\n    # When all succeeds, or *at least one* error\n    Q.all(promises).done ->\n      alert \"Saved\"\n\n    # Same, but get the values\n    Q.all(promises).spread (a, b) ->\n      alert \"Result A:\" + a\n      alert \"Result B:\" + b\n\n    # When all either succeeds or errors\n    Q.allSettled(promises).done -> ...\n\n\n### Creating promises from Node\n\n    # Works like .call() or .apply()\n\n    Q.nfcall(FS.readFile, 'foo.txt', 'utf-8')\n    .then -> ...\n\n    Q.nfapply(FS.readFile, ['foo.txt', 'utf-8'])\n    .then -> ...\n\n    Q.npost(FS, 'readFile', ['foo.txt, 'utf-8'])\n    .then -> ...\n\n    Q.npost(FS, 'readFile', 'foo.txt, 'utf-8')\n    .then -> ...\n\n    readFile = Q.denodeify(FS.readFile)\n    readFile('foo.txt').then -> ...\n\n### Promises to Node async\n\n    createUser = (next) ->\n      promiseMaker()\n      .nodeify(next)\n\n### Promise sugars\n\n    # Shortcut for .then(ok, fail, progress)\n    promise\n    .then (data) ->\n    .catch (err) ->\n    .progress (percent) ->\n\n### Try\n\n  Q.try ->\n    promise()\n\n  .catch (e) ->\n    console.error \"Oh well\", e\n"
  },
  {
    "path": "qunit.md",
    "content": "---\ntitle: Qunit\ncategory: JavaScript libraries\nintro: |\n  A quick reference for the [QUnit](https://yarnpkg.com/package/qunit) testing library in JavaScript.\n---\n\n```js\nQUnit.module('a')\nQUnit.test('ok', function (t) {\n  /* ... */\n})\n```\n\n### Hooks\n\n#### Each test\n\n```js\n// each test\nQUnit.testStart(function)\nQUnit.testEnd(function)\n```\n\n```js\n// each module\nQUnit.moduleStart(function)\nQUnit.moduleEnd(function)\n```\n\n```js\n// all\nQUnit.begin(function)\nQUnit.done(function)\n```\n\n### Assertions\n\n```js\nt.equal(actual, expected)\nt.deepEqual(actual, expected)\nt.strictEqual(actual, expected)\nt.propEqual(actual, expected)\nt.notEqual(actual, expected)\nt.expect(amount)\n```\n"
  },
  {
    "path": "rack-test.md",
    "content": "---\ntitle: rack-test\ncategory: Ruby libraries\n---\n\n### Methods\n\n```ruby\nget 'url'\npost 'url', 'name' => 'john'\nput\npatch\ndelete\noptions\nhead\n```\n\n```ruby\nauthorize 'user', 'pass'\nenv 'rack.session', csrf: 'token'\nheader 'Content-Type', 'text/html'\n```\n\nSee [rack/test.rb](https://github.com/brynary/rack-test/blob/master/lib/rack/test.rb).\n"
  },
  {
    "path": "ractive.md",
    "content": "---\ntitle: Ractive.js\ncategory: JavaScript libraries\n---\n\n{% raw %}\n\n### About\n{: .-intro}\n\nRactive is a UI library for JavaScript.\n\n- <https://ractive.js.org/>\n- <https://ractivejs.org/>\n\n### [Initialization](http://docs.ractivejs.org/latest/options)\n\n    new Ractive({\n      el: $('..'),\n      el: '#box',\n      template: '...', // required\n\n      // callbacks\n      init: function() {},    // on instantiate\n      complete: function() {}, // on finish animations\n\n      // objs\n      data: { ... },\n      partials: { ... },    // global: Ractive.partials\n      transitions: { ... }, // global: Ractive.transitions\n      components: { ... },\n      adaptors: [ ... ],\n\n      // options\n      magic: false\n      modifyArrays: true\n      twoway: true\n      noIntro: true // true = disable transition on initial render\n      lazy: false   // false = use keyevents, true = use change/blur\n      append: false // false = overwrite element, true = append\n      debug: false\n      sanitize: false\n    })\n\n## Instance methods\n\n### Updating values\n\n    view.add('count', 1)       //=> promise\n    view.subtract('count', 1)  //=> promise\n    view.toggle('shown')       //=> promise\n\n    view.set('a', true)\n    view.set({ a: true })\n    view.reset({ a: true })\n    view.merge('list', [a,b,c])\n\n    view.get('a')\n    view.data.a\n\n### Nodes and components\n\n    view.find('.klass')\n    view.findAll('.klass')\n    view.nodes\n    view.nodes['hello']   // .find('#hello')\n\n    view.findComponent('photo')\n    view.findAllComponents('photo')\n\n### Events\n\n    view.on('event', function() { ... })\n    view.off('event', fn)\n    view.fire('event')\n\n### Others\n\n    view.update()\n    view.updateModel()\n\n    view.insert('.node .path')\n\n    view.observe({ 'name': function() { ... } })\n\n    view.toHTML()  //=> String\n    view.render()\n\n## Extend\n\n    View = Ractive.extend({\n      ...\n    })\n    new View()\n\n## [Components](https://github.com/RactiveJS/Ractive/wiki/Components)\n\nSee: https://github.com/RactiveJS/Ractive/issues/74\n{:.center}\n\n    Widget = Ractive.extend({ ... })\n\n    ractive = new Ractive({\n      el: 'main',\n      template: '<widget foo=\"bar\"/>',\n      components: {\n        widget: Widget\n      }\n    });\n\n## Partials\n\n    // Global partials\n    Ractive.partials.x = \"<..>\"\n\n## Events\n\n    view.on('teardown')\n\n### DOM Events\n\n    <button on-click='activate'>Activate!</button>\n\n    view.on({\n      activate: function () { ... }\n    });\n\n    <button on-click='sort:name'>Sort by name</button>\n    view.on('sort', function (e, column) {\n      console.log('sorting by #{column}');\n    });\n\n### Observing\n\n     view.observe(\"name\", function (name) {\n       console.log(\"Changed name to\", name);\n     }, { init: false });\n\n## Markup\n\n    Hello, {{name}}\n    Body: {{{unescaped}}}\n\n    <!-- each -->\n    {{#mylist:i}}\n      <li>{{this.name}}</li>\n      <li>{{name}}</li>\n      <li>{{.}}</li> <!-- same as 'this' -->\n    {{/mylist}}\n\n    {{^user}}Not logged in{{/user}} <!-- if false -->\n    {{#user}}Welcome, sire{{/user}} <!-- if true -->\n\n    {{>partialName}}\n    <component>\n\n    {{#statusDogs[selected]}}\n\n## Transformed attributes\n\nThis transforms the `list` attribute via a helper function called `sort()`.\n\n    {{# sort(list, \"name\") :num }}\n      <li>{{num}} - {{name}}</li>\n    {{/ end. any text goes here }}\n\n    data: {\n      sort: function(array, column) { return array.whatever(); }\n    }\n\n## Transitions\n\n    <div intro=\"fade\">\n    <div intro=\"bump\">\n    <div intro=\"bump:{duration:400}\">\n\n    Ractive.transitions.bump = function(t, params) {\n       params = t.processParams( params, {\n         duration: 400,\n         color: t.isIntro ? 'rgb(0,255,0)' : 'rgb(255,0,0)'\n       });\n\n      if (t.isIntro) {\n        /* enter */\n      } else {\n        /* exit */\n      }\n\n      t.complete();\n    };\n\n## [Decorators](http://docs.ractivejs.org/latest/decorators)\n\n    <span decorator=\"tooltip:hello there\">Hover me</span>\n\n    decorators: {\n      tooltip: function (node, content) {\n        // setup code here\n        return {\n          teardown: function () {\n            // cleanup code here\n          }\n        }\n      }\n    }\n\n    <span decorator=\"tooltip:'a','b',2,'c'\">Hover me</span>\n\n    tooltip: function (node, a, b, two, c) { ... }\n\n## [Adaptors](http://docs.ractivejs.org/latest/adaptors)\n\n    myAdaptor = {\n      filter: function (object, keypath, ractive) {\n        // return `true` if a particular object is of the type we want to adapt\n      },\n      wrap: function (ractive, object, keypath, prefixer) {\n        // set up event bindings here\n        object.on('change', function () { ractive.set(prefixer({...})); });\n        // then return a wrapper:\n        return {\n          teardown: function () { .. },\n          // json representation\n          get: function () { return { a:2, b:3, c:4, ... }; },\n          // called on ractive.set\n          set: function (key, val) { },\n          // called on ractive.set on root (return false = die)\n          reset: function (data) { return false; }\n        };\n      }\n    };\n\n## [Computed properties](http://docs.ractivejs.org/latest/computed-properties)\n\n    new Ractive({\n      template: '{{area}}',\n      computed: {\n        area: function () { return this.get('width') * this.get('height'); }\n        area: '${width} * ${height}'\n        fullname: {\n          get: '${first} + \" \" + ${last}\"\n          set: function (name) { ... }\n        }\n      }\n    });\n\n{% endraw %}\n"
  },
  {
    "path": "rails-controllers.md",
    "content": "---\ntitle: Rails controllers\ncategory: Rails\n---\n\n### Common stuff\n\n    redirect_to root_url\n    redirect_to root_url, notice: \"Good.\"\n\n### Special hashes\n\n    session[:user_id] = nil\n\n    flash[:notice] = \"Hello\"    # Gets flushed on next request\n    flash.keep                  # Persist flash values\n    flash.now[:error] = \"Boo\"   # Available on the same request\n\n    cookies[:hello] = \"Hi\"\n\n    params[:page]\n\n    # params is a combination of:\n    query_parameters\n    path_parameters\n    request_parameters\n\n### respond_to\n\n    respond_to do |format|\n      format.html\n      format.xml  { render xml: @users }\n      format.json { render json: @users }\n      format.js    # Will be executed by the browser\n    end\n\n### default_url_options\n\n    # The options parameter is the hash passed in to 'url_for'\n    def default_url_options(options)\n      {:locale => I18n.locale}\n    end\n\n### Filters\n\n    # Filter with callbacks\n    before_filter :authenticate\n    before_filter :authenticate, except: [:login]\n    before_filter :authenticate, only: [:login]\n    def authenticate\n      redirect_to login_url unless controller.logged_in?\n    end\n\n    # Filter with inline\n    before_filter do |controller|\n      redirect_to login_url unless controller.logged_in?\n    end\n\n    # Filter with external classes\n    before_filter LoginFilter\n    class LoginFilter\n      def self.filter(controller) ...; end\n    end\n\n    # Filter exceptions\n    skip_before_filter :require_login, only: [:new, :create]\n\n    # Before/after filters\n    around_filter :wrap_in_transaction\n    def wrap_in_transaction(&blk)\n      ActiveRecord::Base.transaction { yield }\n    end\n\n### HTTP basic authentication\n\n    before_filter :authenticate\n\n    # Basic authentication:\n    def authenticate\n      authenticate_or_request_with_http_basic { |u, p|\n        u == \"root\" && p == \"alpine\"\n      }\n    end\n\n    # ...or digest (hashed) authentication:\n    # uses the ha1 hash (username:realm:password)\n    def authenticate_by_digest\n      realm = \"Secret3000\"\n      users = {\n        \"rsc\" => Digest::MD5.hexdigest(\"rsc:#{realm}:passwordhere\")\n      }\n\n      authenticate_or_request_with_http_digest(realm) { |user|\n        users[user]\n      }\n    end\n\n    # For integration tests\n    def test_access\n      auth = ActionController::HttpAuthentication::Basic.encode_credentials(user, pass)\n      get \"/notes/1.xml\", nil, 'HTTP_AUTHORIZATION' => auth\n    end\n\n    # Token auth\n    is_logged_in = authenticate_with_http_token do |token, options|\n      token == our_secret_token\n    end\n\n    request_http_token_authentication  unless is_logged_in\n\n### Request/response\n\n    request.host            #=> \"www.example.com\"\n    request.domain          #=> \"www.example.com\"\n    request.domain(n=2)     #=> \"example.com\"\n    request.port            #=> 80\n    request.protocol        #=> \"http://\"\n    request.query_string    #=> \"q=duck+tales\"\n    request.url             #=> \"http://www.example.com/search?q=duck+tales\"\n    request.fullpath        #=> \"/search?q=duck+tales\"\n\n    request.headers         # Returns a hash\n\n    request.format          #=> \"text/html\"\n    request.remote_ip       #=> \"203.167.220.220\"\n    request.local?          #=> true (if localhost/127.0.0.1)\n\n    request.xhr?\n\n    request.method          #=> \"POST\"\n    request.method_symbol   #=> :post\n    request.get?\n    request.post?\n    request.put?\n    request.delete?\n    request.head?\n\n### response\n\n    response.body\n    response.status         #=> 404\n    response.location       # Redirect location\n    response.content_type\n    response.charset\n    response.headers\n\n    response.headers[\"Content-Type\"] = \"application/pdf\"\n\n### Streaming\n\n    send_data pdfdata, filename: \"foo.pdf\", type: \"application/pdf\"\n    send_file Rails.root.join('public','filename.txt') [filename: '..', type: '..']\n\n### References\n\n * [Guide](http://guides.rubyonrails.org/action_controller_overview.html)\n * [HttpAuthentication::Basic](http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html)\n * [HttpAuthentication::Token](http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Token.html)\n"
  },
  {
    "path": "rails-forms.md",
    "content": "---\ntitle: Rails form helpers\ncategory: Rails\n---\n\n## Form builder\n\n### Form builder\n\n```haml\n- form_for @post do |f|\n```\n\nField names will be prefixed with `post` (the class name), and values will be derived from this object (eg, `f.text_field :name` from `@post.name`).\n\n### Options\n\n```haml\n- form_for @post, |\n  url: { method: 'put', action: 'create' }, |\n  html: { class: 'nifty_form' } |\n  do |f|\n```\n\n## Fields\n\n### Text\n\n```rb\nf.text_field :title\nf.text_area :body, size: '60x12'\n```\n\n### Checkbox\n\n```rb\nf.check_box :remember_me\nf.label :remember_me, \"Remember me\"\n```\n\n### Radio\n\n```rb\nf.radio_button :gender, 'male'\nf.label :gender_male, \"Male\"\n\nf.radio_button :gender, 'female'\nf.label :gender_female, \"Female\"\n```\n\n### Label\n\n```rb\nf.label :title\nf.label :title, \"Title\"\nf.label :title, \"Title\", class: \"title\"\nf.label(:post, :terms) { \"Accept terms\" }\n```\n\n### Submit button\n\n```rb\nf.submit \"Create\"\n```\n\n### Hidden fields\n\n```rb\nf.hidden_field :id\n```\n\n## Misc\n\n### The model\n\n```ruby\nf.object\n```\n\n### Fields for\n\n```haml\n= form_for @post do |f|\n  = fields_for :author, @post.author do |ff|\n    = ff.text_field :name\n```\n\n### Select dropdowns\n\n```rb\nf.select :city_id, [['Lisbon',1], ['Madrid',2], ...], 4\n# (4 = selected)\n\noptions_for_select [['Lisbon',1], ['Madrid',2], ...], 4\n# Just makes <option> tags\n```\n\n### Collections\n\n```\nf.collection_radio_buttons :author_id, Author.all, :id, :name_with_initial\nf.collection_select :city_id, City.all, :id, :name\n# (field, collection, value_key, label_key)\n```\n\n### Time select\n\n```rb\nf.time_zone_select :time_zone\nf.date_select :birthday\n```\n### I18n\n\n```yaml\nhelpers:\n  submit:\n    # helpers.submit.<action>\n    create: \"Create a %{model}\"\n    update: \"Confirm changes to %{model}\"\n\n    # helpers.submit.<model>.<action>\n    article:\n      create: \"Publish article\"\n      update: \"Update article\"\n\n  # helpers.label.<model>.<field>\n  label:\n    post:\n      body: \"Your body text\"\n```\n\n### Outside `f`\n\n```rb\nradio_button(\"post\", \"category\", \"rails\")\nradio_button(\"post\", \"category\", \"java\")\n\n# picks from @post.category\n# <input type=\"radio\" id=\"post_category_rails\" name=\"post[category]\"\n#  value=\"rails\" checked=\"checked\" />\n```\n\n### Reference\n\n```rb\nselect(method, choices = nil, options = {}, html_options = {}, &block)\n  choices == [ ['label', id], ... ]\n\nsubmit(value=nil, options={})\n```\n\n"
  },
  {
    "path": "rails-helpers.md",
    "content": "---\ntitle: Rails helpers\ncategory: Rails\n---\n\n### Date\n\n    distance_of_time_in_words(Time.now, project.end_date) #=> 3 hours\n    distance_of_time_in_words_to_now(project.end_date)    #=> 3 hours\n\n    time_ago_in_words 3.minutes.ago #=> \"3 minutes\"\n\n### Numbers\n\n    number_to_currency 20.33\n    number_to_currency 20.33, precision: 0\n    number_with_precision 3.14159, precision: 2\n    number_to_percentage 32       #=> \"32%\"\n    number_with_delimiter 2048    #=> \"2,048\"\n    number_to_human 12000000      #=> \"12 million\"\n    number_to_human_size 12000000 #=> \"12 MB\"\n    number_to_phone \"5551234\"     #=> \"555-1234\"\n\n### Cache\n\n    <% cache project do %>\n    <% cache [project, current_user] do %>\n\n    <% cache_if admin?, project do %>\n    <% cache_unless admin?, project do %>\n\n### Tags\n\n    tag(\"br\")\n    tag(\"img\", src: \"image.jpg\")\n    content_tag(:p, \"Hello\")\n\n### Time select\n\n    # Creates a time select tag that, when POSTed, will be stored in the article\n    # variable in the sunrise attribute.\n    time_select \"article\", \"start_time\"\n\n    # All options are optional\n    time_select \"article\", \"start_time\", \\\n      include_seconds: true,\n      minute_step: 15,\n      prompt: true,\n      prompt: { hour: \"Choose hr\", minute: \"Choose min\", second: \"Choose sec\" },\n      ampm: true\n\n    # For dates (all options are optional)\n    date_select \"article\", \"written_on\", \\\n      start_year: 1995,\n      use_month_numbers: true,\n      discard_day: true,\n      include_blank: true,\n      order: [:day, :month, :year],\n      default: 3.days.from_now,\n      default: { day: 20 },\n      prompt: { day: 'Select day', month: 'Select month', year: 'Select year' }\n\n### Time tag\n\n    time_tag Date.today \n    #=> '<time datetime=\"2010-11-04\">November 04, 2010<%rtime>'\n\n    time_tag Time.now\n    #=> '<time datetime=\"2010-11-04T17:55:45+01:00\">November 04, 2010 17:55</time>'\n\n    time_tag Date.yesterday, 'Yesterday'\n    #=> '<time datetime=\"2010-11-03\">Yesterday<%rtime>'\n\n    time_tag Date.today, pubdate: true\n    #=> '<time datetime=\"2010-11-04\" pubdate=\"pubdate\">November 04, 2010</time>'\n\n    time_tag Date.today, \\\n      format: :short_date # (en.time.formats.short_date)\n\n### Files\n\n    = form_for @post, multipart: true do |f|\n      = f.file_field :picture\n\n### i18n\n\n    t('folders')\n    t('folders.save')\n\n    l(Time.now)\n\n    t('x_files', count: files.count)\n    # files:\n    #    one: 'one file'\n    #    other: '%{count} files'\n\n### References\n\n    * http://api.rubyonrails.org/classes/ActionView/Helpers.html\n"
  },
  {
    "path": "rails-i18n.md",
    "content": "---\ntitle: Rails i18n\ncategory: Rails\n---\n\n### References\n\n * <http://guides.rubyonrails.org/i18n.html>\n * <http://rails-i18n.org/wiki>\n * <https://github.com/svenfuchs/i18n>\n * <https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml>\n\n### Example\n\n```rb\nt('my.messages.hello')\n\n# same as 'my.messages.hello'\nt(:hello, scope: 'my.messages')\nt(:hello, scope: [:my, :messages])\n\nt('my.messages.hello', default: \"Hello\")\n```\n\n#### YAML\n\n```yml\nen:\n  my:\n    messages:\n      hello: \"Hello\"\n```\n\n### Interpolation\n\n```rb\nt('hello', name: \"John\")\n```\n\n#### YAML\n\n```yml\nhello: \"Hello %{name}\"\n```\n\n### Lazy lookup\n\n```rb\n# from the 'books/index' view\nt('.title')\n```\n\n#### YAML\n\n```yml\nen:\n  books:\n    index:\n      title: \"Título\"\n```\n\n### Plural\n\n```rb\nt(:inbox, count: 1)  #=> 'one message'\nt(:inbox, count: 2)  #=> '2 messages'\n```\n\n#### YAML\n\n```yml\ninbox:\n  one: 'one message',\n  other: '%{count} messages'\n```\n\n## Localizing\n\n### Time\n\n```rb\nl(Time.now)\nl(Time.now, format: :short)\n```\n\n#### YAML\n\n```yml\nen:\n  time:\n    formats:\n      default: \"%a, %d %b %Y %H:%M:%S %z\"\n      long: \"%B %d, %Y %H:%M\"\n      short: \"%d %b %H:%M\"\n```\n\n### Date\n\n```rb\nl(Date.today)\n```\n\n#### YAML\n\n```yml\nen:\n  date:\n    formats:\n      default: \"%Y-%m-%d\" # 2015-06-25\n      long: \"%B %d, %Y\"   # June 25, 2015\n      short: \"%b %d\"      # Jun 25\n```\n\n## ActiveRecord\n\n### Model names\n\n```rb\nUser.model_name.human            #=> \"User\"\nChild.model_name.human(count: 2) #=> \"Children\"\n```\n\n#### YAML\n\n```yml\nen:\n  activerecord:\n    models:\n      user: \"User\"\n      child:\n        one: \"Child\"\n        other: \"Children\"\n```\n\n### Attributes\n\n```rb\nUser.human_attribute_for :name   #=> \"Name\"\n```\n\n#### YAML\n\n```yml\nen:\n  activerecord:\n    attributes:\n      user:\n        # activerecord.attributes.<model>.<field>\n        name: \"Name\"\n        email: \"Email\"\n```\n\n### Error messages\n\n```rb\nerror_messages_for(...)\n```\n\n#### YAML\n\n```yml\nactiverecord:\n  errors:\n    models:\n      venue:\n        attributes:\n          name:\n            blank: \"Please enter a name.\"\n```\n\n### Scopes\n\nPossible scopes (in order):\n\n```yml\nactiverecord.errors.models.[model_name].attributes.[attribute_name].[error]\nactiverecord.errors.models.[model_name].[error]\nactiverecord.errors.messages.[error]\nerrors.attributes.[attribute_name].[error]\nerrors.messages.[error]\n```\n\nWhere `[error]` can be:\n\n```yml\nvalidates\n  confirmation - :confirmation\n  acceptance   - :accepted\n  presence     - :blank\n  length       - :too_short (%{count})\n  length       - :too_long (%{count})\n  length       - :wrong_length (%{count})\n  uniqueness   - :taken\n  format       - :invalid\n  numericality - :not_a_number\n```\n\n### Form labels\n\n```rb\nform_for @post do\n  f.label :body\n```\n\n#### YAML\n\n```yml\nhelpers:\n  # helpers.label.<model>.<field>\n  label:\n    post:\n      body: \"Your body text\"\n```\n\n### Submit buttons\n\n```rb\nform_for @post do\n  f.submit\n```\n\n#### YAML\n\n```yml\nhelpers:\n  submit:\n    # helpers.submit.<action>\n    create: \"Create a %{model}\"\n    update: \"Confirm changes to %{model}\"\n\n    # helpers.submit.<model>.<action>\n    article:\n      create: \"Publish article\"\n      update: \"Update article\"\n```\n \n\n## Numbers\n\n```rb\nnumber_to_delimited(2000)             #=> \"2,000\"\nnumber_to_currency(12.3)              #=> \"$12.30\"\nnumber_to_percentage(0.3)             #=> \"30%\"\nnumber_to_rounded(3.14, precision: 0) #=> \"3\"\nnumber_to_human(12_000)               #=> \"12 Thousand\"\nnumber_to_human_size(12345)           #=> \"12.3 kb\"\n```\n\n### Delimited\n\n```rb\nnumber_to_delimited(n)\n```\n\n#### YAML\n\n```yml\nnumber:\n  format:\n    separator: '.'\n    delimiter: ','\n    precision: 3\n    significant: false\n    strip_insignificant_zeroes: false\n```\n\n### Currencies\n\n```rb\nnumber_to_currency(n)\n```\n{:.light}\n\n```yml\nnumber:\n  currency:\n    format:\n      format: \"%u%n\" # %u = unit, %n = number\n      unit: \"$\"\n      separator: '.'\n      delimiter: ','\n      precision: 3\n      # (see number.format)\n```\n\n### Percentage\n\n```rb\nnumber_to_percentage(n)\n```\n\n#### YAML\n\n```yml\nnumber:\n  percentage:\n    format:\n      format: \"%n%\"\n      # (see number.format)\n```\n\n## Programmatic access\n\n### Programmatic access\n\n```rb\nI18n.backend.store_translations :en, ok: \"Ok\"\nI18n.locale = :en\nI18n.default_locale = :en\n\nI18n.available_locales\n\nI18n.translate :ok   # aka, I18n.t\nI18n.localize date   # aka, I18n.l\n```\n"
  },
  {
    "path": "rails-migrations.md",
    "content": "---\ntitle: Rails migrations\ncategory: Rails\n---\n\n### Automatically make migrations\n\n    $ rails generate migration RemovePartNumberFromProducts part_number:string\n    $ rails generate migration remove_part_number_from_products part_number # rails assumes string if not type given - and you can use snake_case\n    \n    $ rails generate migration AddNameToWidgets name:string\n    $ rails g migration add_name_to_widgets name:string # you can use the short cut 'g' instead of generate - they both do the same thing\n\n### Run migrations\n\n    $ rake db:migrate\n\n### Creating tables\n\n    create_table :users do |t|\n      t.string :name\n      t.text   :description\n\n      t.primary_key :id\n      t.string      :title\n      t.text        :description\n      t.integer     :games_count\n      t.float       :lol\n      t.decimal     :price\n      t.decimal     :price, :precision => 2, :scale => 10\n      t.datetime    :expiration\n      t.timestamp   :time_in\n      t.time        :time_in\n      t.date        :expiry\n      t.binary      :image_data\n      t.boolean     :is_admin\n    end\n\n    # Options:\n      :null (boolean)\n      :limit (integer)\n      :default\n\n### Operations\n\n    add_column    :users, :first_name, :string\n    remove_column :users, :first_name, :string\n\n    change_column :users, :first_name, :text\n\n    change_column_default :users, :admin, nil\n    change_column_null    :users, :email, false # adds NOT NULL constraint\n\n    create_table\n    change_table\n    drop_table\n\n    add_column\n    change_column\n    rename_column\n    remove_column\n\n    add_index\n    remove_index\n\n### Use models\n\n    class AddFlagToProduct < ActiveRecord::Migration\n      class Product < ActiveRecord::Base\n      end\n     \n      def change\n        add_column :products, :flag, :boolean\n        Product.reset_column_information\n        reversible do |dir|\n          dir.up { Product.update_all flag: false }\n        end\n      end\n    end\n\n### Associations\n    \n    t.references :category   # kinda same as t.integer :category_id\n\n    # Can have different types\n    t.references :category, polymorphic: true\n\n### Auto-Add/remove columns\n  \n    $ rails generate migration RemovePartNumberFromProducts part_number:string\n\n### Indices\n\n    # Simple\n    add_index :suppliers, :name\n\n    # Unique\n    add_index :accounts, [:branch_id, :party_id], :unique => true\n\n    # Named (:name => ...)\n    add_index :accounts, [:branch_id, :party_id], :unique => true, :name => \"by_branch_party\"\n\n    # Length\n    add_index :accounts, :name, :name => ‘by_name’, :length => 10\n    add_index :accounts, [:name, :surname], :name => ‘by_name_surname’,\n      :length => {\n        :name => 10,\n        :surname => 15\n      }\n\n    # Sort order (no MySQL support)\n    add_index :accounts, [:branch_id, :party_id, :surname],\n      :order => {:branch_id => :desc, :part_id => :asc}\n\n### In console\nUse `ActiveRecord::Migration`.\n\n    ActiveRecord::Migration.add_index :posts, :slug\n\n### References\n\n * https://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index\n"
  },
  {
    "path": "rails-models.md",
    "content": "---\ntitle: Rails models\ncategory: Rails\n---\n\nGenerating\n----------\n\n### Generating\n\n    $ rails g model User\n\nUsing models\n------------\n\n### Query methods\n\n```ruby\nitems = Model\n  .where(first_name: 'Harvey')\n  .where('id = 3')\n  .where('id = ?', 3)\n```\n\n```ruby\n  .order(:title)\n  .order(title: :desc)\n  .order(\"title DESC\")\n```\n\n```ruby\n  .reorder(:title)  # discards other .order's\n  .rewhere(...)     # discards other .where's\n```\n\n```ruby\n  .limit(2)\n  .offset(1)\n  .uniq\n```\n\nSee: [QueryMethods](http://devdocs.io/rails/activerecord/querymethods)\n\n### Advanced query methods\n\n```ruby\nitems = Model\n  .select(:id)\n  .select([:id, :name])\n```\n\n```ruby\n  .group(:name)   # GROUP BY name\n  .group('name AS grouped_name, age')\n  .having('SUM(price) > 30')  # needs to be chained with .group\n```\n\n```ruby\n  .includes(:user)\n  .includes(user: [:articles])\n```\n\n```ruby\n  .references(:posts)\n  # aka: .where(\"posts.name = 'foo'\").references(:posts)\n```\n\n### Finder methods\n\n```ruby\nitem = Model.find(id)\nitem = Model.find_by_email(email)\nitem = Model.where(email: email).first\n```\n\n```ruby\nModel\n  .exists?(5)\n  .exists?(name: \"David\")\n```\n\n```ruby\n  .first\n  .last\n  .find_nth(4, [offset])\n```\n\nSee: [FinderMethods](http://devdocs.io/rails/activerecord/findermethods)\n\n### Persistence\n\n```ruby\nitem.new_record?\nitem.persisted?\nitem.destroyed?\n\nitem.serialize_hash\n```\n\n```ruby\nitem.save\nitem.save!      # Same as above, but raises an Exception\n```\n\n```ruby\nitem.update  name: 'John'  # Saves immediately\nitem.update! name: 'John'\n```\n\n```ruby\nitem.update_column  :name, 'John'  # skips validations and callbacks\nitem.update_columns  name: 'John'\nitem.update_columns! name: 'John'\n```\n\n```ruby\nitem.touch                 # updates :updated_at\nitem.touch :published_at\n```\n\n```ruby\nitem.destroy\nitem.delete  # skips callbacks\n```\n\n```ruby\nModel.create     # Same an #new then #save\nModel.create!    # Same as above, but raises an Exception\n```\n\nSee: [Persistence](http://devdocs.io/rails/activerecord/persistence)\n\n### Attribute Assignment\n\n```ruby\nitem.attributes                      # #<Hash>\n```\n\n```ruby\nitem.attributes = { name: 'John' }   # Merges attributes in. Doesn't save.\nitem.assign_attributes name: 'John'  # Same as above\n```\n\nSee: [AttributeAssignment](http://devdocs.io/rails/activerecord/attributeassignment)\n\n### Dirty\n\n```ruby\nitem.changed?\nitem.changed             # ['name']\nitem.changed_attributes  # { 'name' => 'Bob' } - original values\nitem.changes             # { 'name' => ['Bob', 'Robert'] }\nitem.previous_changes    # available after #save\nitem.restore_attributes\n```\n\n```ruby\nitem.name = 'Robert'\nitem.name_was         # 'Bob'\nitem.name_change      # [ 'Bob', 'Robert' ]\nitem.name_changed?    # true\nitem.name_changed?(from: 'Bob', to: 'Robert')\n```\n\nSee: [Dirty](http://devdocs.io/rails/activemodel/dirty)\n\n### Validations\n\n```ruby\nitem.valid?\nitem.invalid?\n```\n\nSee: [Validations](http://devdocs.io/rails/activerecord/validations)\n\n### Calculations\n\n```ruby\nPerson.count\nPerson.count(:age)    # counts non-nil's\n```\n\n```ruby\nPerson.average(:age)\nPerson.maximum(:age)\nPerson.minimum(:age)\nPerson.sum('2 * age')\n```\n\n```ruby\nPerson.calculate(:count, :all)\n```\n\nAdvanced:\n\n```ruby\nPerson.distinct.count\nPerson.group(:city).count\n```\n\nSee: [Calculations](http://devdocs.io/rails/activerecord/calculations)\n\n### Dynamic attribute-based finders\n\nGiven a field called `name`:\n{: .-setup}\n\n```ruby\n# Returns one record\nPerson.find_by_name(name)\nPerson.find_last_by_name(name)\nPerson.find_or_create_by_name(name)\nPerson.find_or_initialize_by_name(name)\n```\n\n```ruby\n# Returns a list of records\nPerson.find_all_by_name(name)\n```\n\n```ruby\n# Add a bang to make it raise an exception\nPerson.find_by_name!(name)\n```\n\n```ruby\n# You may use `scoped` instead of `find`\nPerson.scoped_by_user_name\n```\n\nAssociations\n------------\n\n### Associations\n\n- `belongs_to`\n- `has_one`\n- `has_many`\n- `has_many :through`\n- `has_one :through`\n- `has_and_belongs_to_many`\n\n### Has many\n\n```ruby\nbelongs_to :parent, :foreign_key => 'parent_id' class_name: 'Folder'\nhas_many :folders, :foreign_key => 'parent_id', class_name: 'Folder'\n\nhas_many :comments,                -> { order('posted_on DESC') }\nhas_many :comments,    :include    => :author\nhas_many :people,      :class_name => \"Person\"\nhas_many :people,      :conditions => \"deleted = 0\"\nhas_many :tracks,                  -> { order(:position) }\nhas_many :comments,    :dependent  => :nullify\nhas_many :comments,    :dependent  => :destroy\nhas_many :tags,        :as         => :taggable\nhas_many :reports,     :readonly   => true\nhas_many :subscribers, :through    => :subscriptions, class_name: \"User\", :source => :user\nhas_many :subscribers, :finder_sql =>\n    'SELECT DISTINCT people.* ' +\n    'FROM people p, post_subscriptions ps ' +\n    'WHERE ps.post_id = #{id} AND ps.person_id = p.id ' +\n    'ORDER BY p.first_name'\n```\n\n### belongs to\n\n```ruby\nbelongs_to :author,\n  :dependent      => :destroy    # or :delete\n\n  :class_name     => \"Person\"\n  :select         => \"*\"\n  :counter_cache  => true\n  :counter_cache  => :custom_counter\n  :include        => \"Book\"\n  :readonly       => true\n\n  :conditions     => 'published = true'\n\n  :touch          => true\n  :touch          => :authors_last_updated_at\n\n  :primary_key    => \"name\"\n  :foreign_key    => \"author_name\"\n```\n\n### Many-to-many\n\nIf you have a join model:\n{: .-setup}\n\n```ruby\nclass Programmer < ActiveRecord::Base\n  has_many :assignments\n  has_many :projects, :through => :assignments\nend\n```\n{: data-line=\"2,3\"}\n\n```ruby\nclass Project < ActiveRecord::Base\n  has_many :assignments\n  has_many :programmers, :through => :assignments\nend\n```\n{: data-line=\"2,3\"}\n\n```ruby\nclass Assignment\n  belongs_to :project\n  belongs_to :programmer\nend\n```\n{: data-line=\"2,3\"}\n\n### Many-to-many (HABTM)\n\n```ruby\nhas_and_belongs_to_many :projects\nhas_and_belongs_to_many :projects, :include => [ :milestones, :manager ]\nhas_and_belongs_to_many :nations, :class_name => \"Country\"\nhas_and_belongs_to_many :categories, :join_table => \"prods_cats\"\nhas_and_belongs_to_many :categories, :readonly => true\nhas_and_belongs_to_many :active_projects, :join_table => 'developers_projects', :delete_sql =>\n\"DELETE FROM developers_projects WHERE active=1 AND developer_id = #{id} AND project_id = #{record.id}\"\n```\n\n### Polymorphic associations\n\n```ruby\nclass Post\n  has_many :attachments, as: :parent\nend\n```\n{: data-line=\"2\"}\n\n```ruby\nclass Image\n  belongs_to :parent, polymorphic: true\nend\n```\n{: data-line=\"2\"}\n\nAnd in migrations:\n\n```ruby\ncreate_table :images do |t|\n  t.references :post, polymorphic: true\nend\n```\n{: data-line=\"2\"}\n\nValidation\n----------\n\n### Validation\n\n```ruby\nclass Person < ActiveRecord::Base\n```\n{:.-setup}\n\n```ruby\n  # Presence\n  validates :name,     presence: true\n```\n{: data-line=\"2\"}\n\n```ruby\n  # Acceptance\n  validates :terms,    acceptance: true\n```\n\n```ruby\n  # Confirm\n  validates :email,    confirmation: true\n```\n\n```ruby\n  # Unique\n  validates :slug,     uniqueness: true\n  validates :slug,     uniqueness: { case_sensitive: false }\n  validates :holiday,  uniqueness: { scope: :year, message: 'yearly only' }\n```\n\n```ruby\n  # Format\n  validates :code,     format: /regex/\n  validates :code,     format: { with: /regex/ }\n```\n\n```ruby\n  # Length\n  validates :name,     length: { minimum: 2 }\n  validates :bio,      length: { maximum: 500 }\n  validates :password, length: { in: => 6..20 }\n  validates :number,   length: { is: => 6 }\n```\n\n```ruby\n  # Include/exclude\n  validates :gender,   inclusion: %w(male female)\n  validates :gender,   inclusion: { in: %w(male female) }\n  validates :lol,      exclusion: %w(xyz)\n```\n\n```ruby\n  # Numeric\n  validates :points,   numericality: true\n  validates :played,   numericality: { only_integer: true }\n  # ... greater_than, greater_than_or_equal_to,\n  # ... less_than, less_than_or_equal_to\n  # ... odd, even, equal_to\n```\n\n```ruby\n  # Validate the associated records to ensure they're valid as well\n  has_many :books\n  validates_associated :books\n```\n\n```ruby\n  # Length (full options)\n  validates :content, length: {\n    minimum:   300,\n    maximum:   400,\n    tokenizer: lambda { |str| str.scan(/\\w+/) },\n    too_short: \"must have at least %{count} words\",\n    too_long:  \"must have at most %{count} words\" }\n```\n\n```ruby\n  # Multiple\n  validates :login, :email, presence: true\n```\n\n```ruby\n  # Conditional\n  validates :description, presence: true, if: :published?\n  validates :description, presence: true, if: lambda { |obj| .. }\n```\n\n```ruby\n  validates :title, presence: true, on: :save   # :save | :create | :update\n```\n\n```ruby\nend\n```\n{: .-setup}\n\n### Custom validations\n\n```ruby\nclass Person < ActiveRecord::Base\n  validate :foo_cant_be_nil\n\n  def foo_cant_be_nil\n    errors.add(:foo, 'cant be nil')  if foo.nil?\n  end\nend\n```\n{: data-line=\"2\"}\n\n### Errors\n\n```ruby\nrecord.errors.valid?      # → false\nrecord.errors             # → { :name => [\"can't be blank\"] }\nrecord.errors.messages    # → { :name => [\"can't be blank\"] }\n```\n\n```ruby\nrecord.errors[:name].any?\n```\n\nOther API\n---------\n\n### Callbacks\n\n * [Guides: callbacks](http://guides.rubyonrails.org/active_record_validations_callbacks.html)\n\n### Mass updates\n\n ```ruby\n# Updates person id 15\nPerson.update 15, name: \"John\", age: 24\nPerson.update [1,2], [{name: \"John\"}, {name: \"foo\"}]\n```\n\n### Joining\n\n```ruby\n# Basic joins\nStudent.joins(:schools).where(schools: { type: 'public' })\nStudent.joins(:schools).where('schools.type' => 'public' )\n```\n\n```ruby\n# Multiple associations\nArticle.joins(:category, :comments)\n```\n\n```ruby\n# Nested associations\nArticle.joins(comments: :guest)\n```\n\n```ruby\n# SQL\nAuthor.joins(\n  'INNER JOIN posts ' +\n  'ON posts.author_id = authors.id ' +\n  'AND posts.published = \"t\"'\n)\n```\n\n### Where interpolation\n\n```ruby\nwhere('name = ?', 'John')\nwhere(['name = :name', { name: 'John' }])\n```\n\n### Serialize\n\n```ruby\nclass User < ActiveRecord::Base\n  serialize :preferences\nend\n```\n{: data-line=\"2\"}\n\n```ruby\nuser = User.create(\n  preferences: {\n    'background' => 'black',\n    'display' => 'large'\n  }\n)\n```\n\nYou can also specify a class option as the second parameter that’ll raise an \nexception if a serialized object is retrieved as a descendant of a class not in \nthe hierarchy.\n\n```ruby\n# Only Hash allowed!\nclass User < ActiveRecord::Base\n  serialize :preferences, Hash\nend\n```\n{: data-line=\"3\"}\n\n```ruby\n# Reading it raises SerializationTypeMismatch\nuser = User.create(preferences: %w(one two three))\nUser.find(user.id).preferences\n```\n\nOther tricks\n------------\n\n### Overriding accessors\n\n```ruby\nclass Song < ActiveRecord::Base\n  # Uses an integer of seconds to hold the length of the song\n\n  def length=(minutes)\n    write_attribute(:length, minutes.to_i * 60)\n  end\n\n  def length\n    read_attribute(:length) / 60\n  end\nend\n```\n{: data-line=\"4,8\"}\n\nSee: <http://api.rubyonrails.org/classes/ActiveRecord/Base.html>\n\nCallbacks\n---------\n\n- after_initialize\n- before_validation / after_validation\n- before_save / after_save / around_save\n- before_create / after_create / around_create\n- before_update / after_update / around_update\n- before_destroy / after_destroy / around_destroy\n- after_commit\n- after_rollback\n\nSee: [ActiveRecord Callbacks](https://guides.rubyonrails.org/active_record_callbacks.html)\n"
  },
  {
    "path": "rails-plugins.md",
    "content": "---\ntitle: Rails plugins\ncategory: Rails\n---\n\n### Generate a plugin\n\nGenerate a Rails Engine plugin:\n\n    rails plugin new myplugin --skip-bundle --full\n\nInitializers\n------------\n\n### Initializers\n\n* [Rails::Railtie](http://edgeapi.rubyonrails.org/classes/Rails/Railtie.html)\n* [EngineYard blog \n  post](http://www.engineyard.com/blog/2010/extending-rails-3-with-railties/)\n\n### Initializer method\n\nSubclass Railtie and provide an `initializer` method.\n\n    module NewPlugin\n      class Railtie < Rails::Railtie\n        initializer \"newplugin.initialize\" do |app|\n     \n          # subscribe to all rails notifications: controllers, AR, etc.\n          ActiveSupport::Notifications.subscribe do |*args|\n            event = ActiveSupport::Notifications::Event.new(*args)\n            puts \"Got notification: #{event.inspect}\"\n          end\n     \n        end\n      end\n    end\n     \nCustom routes\n-------------\n\n### Custom routes\n\n* [ActionDispatch::Routing::Mapper](http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper.html)\n\n### Creating routes\n\nTo create custom `routes.rb` keywords:\n\n    # # routes.rb:\n    # myplugin_for x\n    #\n    class ActionDispatch::Routing\n      class Mapper\n        def myplugin_for(*x)\n        end\n      end\n    end\n\nExample with a block:\n\n    # authenticated do\n    #   resources :users\n    # end\n    #\n    def authenticated\n      constraint = lambda { |request| request... }\n\n      constraints(constraint) { yield }\n    end\n\nCustom generators\n-----------------\n\n### Custom generators\n\n* [Guide: generators](http://guides.rubyonrails.org/generators.html)\n* [ActiveRecord::Generators::Base](http://api.rubyonrails.org/classes/ActiveRecord/Generators/Base.html)\n\n### Basic\n\n    # rails g initializer\n    # lib/generators/initializer_generator.rb\n    class InitializerGenerator < Rails::Generators::Base\n      def create_initializer_file\n        create_file \"config/initializers/initializer.rb\", \"# Add initialization content here\"\n      end\n    end\n\n * Extend `Rails::Generators::Base`.\n * Each public method in the generator is executed when a generator is invoked. \n\n### Generating a generator\n \n    $ rails generate generator initializer\n\n### NamedBase\n\nUse `NamedBase` instead if you want to take an argument. It will be available as \n`file_name`.\n\n    class InitializerGenerator < Rails::Generators::Base\n      def lol\n        puts file_name\n      end\n    end\n\n### More\n\n    class InitializerGenerator < Rails::Generators::NamedBase\n      # \n      source_root File.expand_path(\"../templates\", __FILE__)\n      desc \"Description goes here.\"\n    end\n\n### Generators lookup\n  \nWhen invoking `rails g XXX`:\n\n    [rails/]generators/XXX/XXX_generator.rb\n    [rails/]generators/XXX_generator.rb\n\nWhen invoking `rails g XXX:YYY`:\n\n    [rails/]generators/XXX/YYY_generator.rb\n\nActiveModel 'acts as'\n---------------------\n\n### acts as\n\n    # yaffle/lib/yaffle/acts_as_yaffle.rb\n    module Yaffle\n      module ActsAsYaffle\n        extend ActiveSupport::Concern\n     \n        included do\n        end\n     \n        module ClassMethods\n          def acts_as_yaffle(options = {})\n            # your code will go here\n          end\n        end\n      end\n    end\n     \n    ActiveRecord::Base.send :include, Yaffle::ActsAsYaffle\n\n"
  },
  {
    "path": "rails-routes.md",
    "content": "---\ntitle: Routes\ncategory: Rails\n---\n\n## Resources\n\n### Multiple resources (`resources`)\n\n    resources :photos\n\n    # PhotosController:\n    # index  =>    GET /photos\n    # new    =>    GET /photos/new\n    # create =>   POST /photos/new\n    # show   =>    GET /photos/:id\n    # edit   =>    GET /photos/:id/edit\n    # update =>    PUT /photos/:id\n    # delete => DELETE /photos/:id\n    #\n    # Helpers:\n    # new_photo_path\n    # photo_path(id)\n    # edit_photo_path(id)\n\n### Custom actions\n\n    resources :photos do\n      member { get 'preview' }       # /photo/1/preview\n      collection { get 'search' }    # /photos/search\n\n      get 'preview', on: :member     # (..same as the first)\n    end\n\n### Options\n\n    resources :photos,\n      path_names: { new: 'brand_new' }    # /photos/1/brand_new\n      path: 'postings'                    # /postings\n      only: :index\n      only: [:index, :show]\n      except: :show\n      except: [:index, :show]\n\n      shallow: true                       # also generate shallow routes\n      shalow_path: 'secret'\n      shallow_prefix: 'secret'\n\n## Single resource (`resource`)\n\n    resource :coder\n\n    # CodersController:\n    # new    =>    GET /coder/new\n    # create =>   POST /coder/new\n    # show   =>    GET /coder\n    # edit   =>    GET /coder/edit\n    # update =>    PUT /coder\n    # delete => DELETE /coder\n\n## Matching (`match`)\n\n    match 'photo/:id' => 'photos#show'  # /photo/what-is-it\n    match 'photo/:id', id: /[0-9]+/     # /photo/0192\n    match 'photo/:id' => 'photos#show', constraints: { id: /[0-9]+/ }\n    match 'photo/:id', via: :get\n    match 'photo/:id', via: [:get, :post]\n\n    match 'photo/*path' => 'photos#unknown'    # /photo/what/ever\n\n    # params[:format] == 'jpg'\n    match 'photos/:id' => 'photos#show', :defaults => { :format => 'jpg' }\n\n### Get/post\n\n`get` is the same as `match via: :get`.\n\n    get 'photo/:id' => 'photos#show'\n    # same as match 'photo/:id' => 'photos#show', via: :get\n\n    post 'photo/:id' => 'photos#update'\n    # same as match 'photo/:id' => 'photos#show', via: :post\n\n### Redirection\n\n    match '/stories' => redirect('/posts')\n    match '/stories/:name' => redirect('/posts/%{name}')\n\n### Named\n\n    # logout_path\n    match 'exit' => 'sessions#destroy', as: :logout\n    \n### Constraints\n\n    match '/', constraints: { subdomain: 'admin' }\n\n    # admin.site.com/admin/photos\n    namespace 'admin' do\n      constraints subdomain: 'admin' do\n        resources :photos\n      end\n    end\n\n### Custom constraints\n\n    class BlacklistConstraint\n      def initialize\n        @ips = Blacklist.retrieve_ips\n      end\n     \n      def matches?(request)\n        @ips.include?(request.remote_ip)\n      end\n    end\n     \n    TwitterClone::Application.routes.draw do\n      match \"*path\" => \"blacklist#index\",\n        :constraints => BlacklistConstraint.new\n    end\n\n### Scopes\n\n    scope 'admin', constraints: { subdomain: 'admin' } do\n      resources ...\n    end\n\n### Rack middleware\n\n    # Yes, Sprockets is middleware\n    match '/application.js' => Sprockets\n\n### Route helpers\n\n    projects_path   # /projects\n    projects_url    # http://site.com/projects\n\n\n### Default help text\n\n    # The priority is based upon order of creation:\n    # first created -> highest priority.\n\n    # Sample of regular route:\n    match 'products/:id' => 'catalog#view'\n\n    # Keep in mind you can assign values other than :controller and :action\n\n    # Sample of named route:\n    match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase\n\n    # This route can be invoked with purchase_url(:id => product.id)\n\n    # Sample resource route (maps HTTP verbs to controller actions automatically):\n    resources :products\n\n    # Sample resource route with options:\n    resources :products do\n      member do\n        get 'short'\n        post 'toggle'\n      end\n    \n      collection do\n        get 'sold'\n      end\n    end\n\n    # Sample resource route with sub-resources:\n    resources :products do\n      resources :comments, :sales\n      resource :seller\n    end\n\n    # Sample resource route with more complex sub-resources\n    resources :products do\n      resources :comments\n      resources :sales do\n        get 'recent', :on => :collection\n      end\n    end\n\n    # Sample resource route within a namespace:\n    namespace :admin do\n      # Directs /admin/products/* to Admin::ProductsController\n      # (app/controllers/admin/products_controller.rb)\n      resources :products\n    end\n\n    # You can have the root of your site routed with \"root\"\n    # just remember to delete public/index.html.\n    root :to => 'welcome#index'\n\n    # See how all your routes lay out with \"rake routes\"\n\n    # This is a legacy wild controller route that's not recommended for RESTful applications.\n    # Note: This route will make all actions in every controller accessible via GET requests.\n    match ':controller(/:action(/:id(.:format)))'\n\n### References\n\n * [Guides/Routing](http://guides.rubyonrails.org/routing.html)\n\n * [ActionDispatch::Routing::Mapper](http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper.html)\n    (See included modules)\n\n"
  },
  {
    "path": "rails-tricks.md",
    "content": "---\ntitle: Rails tricks\ncategory: Rails\ntags: [Archived]\narchived: This sheet may describe practices that might be outdated.\n---\n\n### Sass source maps\n\nin config/environments/development.rb:\n\n    # Source maps for Sass\n    config.sass.debug_info = true\n    config.sass.line_comments = false\n\n    # Don't break apart\n    config.assets.debug = false\n\n### Partial locals\n\n    <%= render 'article', full: true %>\n    <%= render 'article' %>\n\n    <% if local_assigns[:full] %>\n      ...\n    <% end %>\n\n### HTML in i18n\n\n    en:\n      read_more_html: \"read <b>more</b>...\"\n\n### Exception handling\n\n    # config/application.rb\n    config.exceptions_app = self.routes\n\n    get '/404', to: 'errors#not_found'\n    get '/500', to: 'errors#server_error'\n\n    class ErrorsController\n      def not_found\n        render status: :not_found\n      end\n     end\n\n### Rails updating\n\n    rake rails:update\n\n### Distinct pluck\n\n    Article.distinct.pluck('author')\n\n### Relation#merge\n\n    scope :with_drafts, -> {\n      uniq.joins(:articles).merge(Article.draft)\n    }\n\n### Order\n\n    scope :recent, -> { order created_at: :desc }\n\n### Group by month\n\n    .group(\"to_char(created_at, 'YYYY-MM')\")\n    .group(\"to_char(created_at, 'YYYY-MM')\").count\n"
  },
  {
    "path": "rails.md",
    "content": "---\ntitle: Rails\ncategory: Rails\n---\n\nHelpers\n-------\n\n    class ApplicationController\n      helper_method :logged_in?\n    \n      def logged_in?\n        \"Something\"\n      end\n    end\n\n### CSS/JS packages\n\n    stylesheet_link_tag :monkey\n    javascript_link_tag :monkey\n\n### Forms\n\n    # http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html\n\n    - form_for @person do |f|\n      = f.label :first_name\n      = f.label :first_name, \"First name\"\n      = f.text_field :first_name\n\n      = f.label :last_name>\n      = f.text_field :last_name>\n\n      - fields_for @person.permission do |fields|\n        = fields.checkbox :admin\n\n      -# name=\"person[admin]\"\n      - fields_for :person, @client do |fields|\n        = fields.checkbox :admin\n\n      = f.submit\n\n    # Also: check_box, email_field, fields_for\n    # file_field, hidden_field, label, number_field, password_field\n    # radio_button, range_field, search_field, telephonen_field,\n    # text_area, text_field, url_field\n\nControllers\n-----------\n\nhttp://apidock.com/rails/ActionController/Base\n\n    class ProjectsController\n      layout 'project'   # Actually defaults to `projects` based\n                         # on the controller name\n\n      def save\n      end\n\n      def edit\n      end\n    end\n\n### Before filter\n  \n    class ApplicationController < ActionController::Base\n      before_filter :validate, only: [:save, :edit]\n      before_filter :ensure_auth, except: [:logout]\n\n      before_filter :require_login\n     \n      private\n     \n      def require_login\n        unless logged_in?\n          flash[:error] = \"You must be logged in to access this section\"\n          redirect_to new_login_url # halts request cycle\n        end\n      end\n    end\n\n### Default URL options\n\n    class ApplicationController < ActionController::Base\n      # The options parameter is the hash passed in to 'url_for'\n      def default_url_options(options)\n        {:locale => I18n.locale}\n      end\n    end\n\n### Hashes\n\n    session[:what]\n    flash[:notice] = \"Your session expired\"\n    params[:id]\n\n### XML and JSON\n  \n    class UsersController < ApplicationController\n      def index\n        @users = User.all\n        respond_to do |format|\n          format.html # index.html.erb\n          format.xml  { render :xml => @users}\n          format.json { render :json => @users}\n        end\n      end\n    end\n\n### Redirection\n\n    redirect_to action: 'show', id: @entry.id\n    redirect_to root_url          # a path\n\n### Render\n\n    render nothing: true\n    render template: 'products/show'\n    render status: 500\n    render status: :forbidden\n    render text: '...'\n    render layout: 'special_layout'\n    render layout: false\n    render action: 'something'    # same as `file: 'my/something'`\n                                  # Renders the template only, does not execute\n                                  # the action\n\n    render json: object\n    render xml: object\n\n    render location: photo_url(photo)\n\n### Head-only responses\n\n    head :bad_request\n    head :created, location: photo_path(@photo)\n\nLayouts\n-------\n\n    # app/views/layouts/application.html.erb\n    <%= content_for?(:content) ? yield :content : yield %>\n\n    # app/views/layouts/news.html.erb\n    <% content_for :content do %>\n       ...\n    <% end %>\n    <% render template: :'layouts/application' %>\n    \n"
  },
  {
    "path": "rake.md",
    "content": "---\ntitle: Rake\ncategory: Ruby\n---\n\n### Basic syntax\n\n```rb\nnamespace :foo do\n  desc \"Description\"\n  task :bar do\n    ...\n  end\n\n  task :baz => :dependency do\n  end\n\n  task :baz => [:dep1, :dep2, :dep3] do\n  end\nend\n\n# rake foo:bar\n```\n\n### Rake task with arguments\n\n```rb\ndesc \"Do something\"\ntask :workit, [:id] => :environment do |_, args|\n  id = args[:id]\nend\n\n# rake workit[234]\n```\n"
  },
  {
    "path": "rbenv.md",
    "content": "---\ntitle: rbenv\ncategory: Ruby\nupdated: 2018-02-20\nweight: -1\ndescription: |\n  A one-page guide to rbenv Ruby version manager, with usage examples and more.\nintro: |\n  [rbenv](https://github.com/rbenv/rbenv) lets you manage installations of multiple Ruby versions.\n---\n\n### Installation\n\n#### Install rbenv and ruby-build\n\n```bash\ngit clone https://github.com/sstephenson/rbenv.git ~/.rbenv\ngit clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build\n```\n\n#### Add to ~/.bash_profile\n\n```bash\necho 'export PATH=\"$HOME/.rbenv/bin:$PATH\"' >> ~/.bash_profile\necho 'eval \"$(rbenv init -)\"' >> ~/.bash_profile\n```\n\n#### Verify installation\n\n```bash\ntype rbenv   # → \"rbenv is a function\"\n```\n\nThese are generic instructions; there may be rbenv packages available for your OS.\n\nSee: [Installation](https://github.com/rbenv/rbenv#installation)\n\n### Managing versions\n\n| Command                 | Description                 |\n| ---                     | ---                         |\n| `rbenv install -l`      | List all available versions |\n| ---                     | ---                         |\n| `rbenv install 2.2.1`   | Install Ruby _2.2.1_        |\n| `rbenv uninstall 2.2.1` | Uninstall Ruby _2.2.1_      |\n| ---                     | ---                         |\n| `rbenv versions`        | See installed versions      |\n| `rbenv version`         | See current version         |\n| ---                     | ---                         |\n| `rbenv which <NAME>`    | Display path to executable  |\n| `rbenv rehash`          | Re-write binstubs           |\n\n## Using versions\n{: .-three-column}\n\n### Locally\n\n| Command               | Description                 |\n| ---                   | ---                         |\n| `rbenv local 2.2.2`   | Use Ruby _2.2.2_ in project |\n| `rbenv local --unset` | Undo above                  |\n\nApplication-specific version numbers are stored in `.ruby-version`.\n\n### Globally\n\n| Command                | Description               |\n| ---                    | ---                       |\n| `rbenv global 2.2.2`   | Use Ruby _2.2.2_ globally |\n| `rbenv global --unset` | Undo above                |\n\nGlobal version numbers are stored in `~/.rbenv/version`.\n\n### Shell\n\n| Command               | Description               |\n| ---                   | ---                       |\n| `rbenv shell 2.2.2`   | Use Ruby _2.2.2_ in shell |\n| `rbenv shell --unset` | Undo above                |\n\nShell-local version numbers are stored as environment variables.\n\n## References\n\n- [rbenv project page](https://github.com/rbenv/rbenv) _(github.com)_\n- [rbenv ubuntu server cheatsheet](https://gist.github.com/rahul286/7160839f4425a3b7e718) _(gist.github.com)_\n"
  },
  {
    "path": "rclone.md",
    "content": "---\ntitle: rclone\ncategory: CLI\n---\n\n### Basic configuration\n\n```bash\nrclone config       # Start the interactive configuration wizard to add new remotes\nrclone config show  # Display the current configuration\nrclone listremotes  # List the names of all configured remotes\n```\n\n### Listing files & directories\n\n```bash\nrclone ls <remote>:<path>    # List files and file sizes\nrclone lsl <remote>:<path>   # List files, sizes, and modification times\nrclone lsd <remote>:<path>   # List directories only\nrclone tree <remote>:<path>  # List contents in a tree-like structure\n```\n\n### Copying & syncing\n\n#### Copy\n\n```bash\nrclone copy <source> <dest>            # Copy new/changed files\nrclone copy <source> <dest> --dry-run  # Test the copy operation without making changes\n```\n\n#### Sync\n\n```bash\nrclone sync <source> <dest>            # Sync source to destination\nrclone sync <source> <dest> --dry-run  # Test the sync operation (recommended before actual sync)\n```\n\n### Deleting & moving\n\n```bash\nrclone move <source> <dest>    # Move files (copy and then delete the source)\nrclone delete <remote>:<path>  # Delete the files in the path\nrclone purge <remote>:<path>   # Delete the path and all of its contents (Irrecoverable!)\nrclone rmdir <remote>:<path>   # Remove an empty directory\n```\n\n### File manipulation\n\n```bash\nrclone mkdir <remote>:<path>           # Create a new directory\nrclone touch <remote>:<path>/file.txt  # Create a new file with the current time\nrclone cat <remote>:<path>/file.txt    # Output the file content to standard output\nrclone check <source> <dest>           # Check if the files in source and dest are identical\n```\n\n### Important flags (general)\n\n```bash\n--dry-run                     # Show what would be transferred without doing it\n-P or --progress              # Show progress during transfer\n--transfers=N                 # Set number of file transfers to run in parallel (default 4)\n--checkers=N                  # Set number of checkers to run in parallel (default 8)\n--max-age <time>              # Don't transfer files older than <time>\n--min-age <time>              # Don't transfer files newer than <time>\n--include <filter>            # Include files matching this pattern\n--exclude <filter>            # Exclude files matching this pattern\n--fast-list                   # Use recursive listing to speed up checks (may use more memory)\n--multi-thread-cutoff <size>  # Use multiple threads for files bigger than <size>\n--multi-thread-streams <N>    # Number of streams to use for multi-thread transfers\n```"
  },
  {
    "path": "rdoc.md",
    "content": "---\ntitle: Rdoc\ncategory: Markup\n---\n\n### Basic RDoc format\n\n```rb\n# Foo.\n#\n# @example\n#\n#   y\n#   g\n#\n# @param [String] param_name The xx and xx.\n#\n# @see https://example.com/\n#\n# @return [true] if so\n```\n\n### Hash parameters\n\n```rb\n# @param [Hash] opts the options to create a message with.\n# @option opts [String] :subject The subject\n# @option opts [String] :from ('nobody') From address\n# @option opts [String] :to Recipient email\n# @option opts [String] :body ('') The email's body\n```\n\n### Parameter types\n\n```rb\n# @param (see User#initialize)\n# @param [OptionParser] opts the option parser object\n# @param [Array<String>] args the arguments passed from input. This\n#   array will be modified.\n# @param [Array<String, Symbol>] list the list of strings and symbols.\n# @param [Hash<Symbol, String>] a hash with symbol keys and string values\n#\n# The options parsed out of the commandline.\n# Default options are:\n#   :format => :dot\n```\n\n### Exceptions\n```rb\n# @raise [AccountBalanceError] if the account does not have\n#   sufficient funds to perform the transaction\n```\n\n### Inline\n\n```markdown\n*bold*\n_emphasized_\n+code+\n```\n\n```markdown\n{ObjectName#method optional title}\n{Class::CONSTANT My constant's title}\n{#method_inside_current_namespace}\n```\n\n```markdown\nhttps://www.example.com/\nSee Models::User@Examples\n{Google}[https://google.com/]\n```\n\n### Skip\n\n```rb\ndef input # :nodoc:\n```\n\n```rb\nmodule MyModule # :nodoc: all\n```\n\n### Definition lists\n\n```rb\n# == Definition lists\n#\n# list::  hi.\n# +foo+:: parameterized\n```\n\n```rb\n# == Definition lists\n# [foo]   also\n# [bar]   like this\n```\n\n### Return types\n\n```rb\n# @return [String]\n# @return [String, nil] the name\n```\n\n### Callseq\n\n```rb\n# :call-seq:\n#   ARGF.readlines(sep=$/)     -> array\n#   ARGF.readlines(limit)      -> array\n#   ARGF.readlines(sep, limit) -> array\n#\n#   ARGF.to_a(sep=$/)     -> array\n#   ARGF.to_a(limit)      -> array\n#   ARGF.to_a(sep, limit) -> array\n```\n\n### Category\n\n```rb\n# :category: Utilities\n```\n\n### Sections\n\n```rb\n# :section: Expiry methods\n# methods relating to expiring\n\ndef expire!\ndef expired?\n...\n```\n\n### Using tomdoc\n\n```rb\n# :markup: TomDoc\n```\n\nPlace this at the beginning of the file.\n\n## Also see\n{: .-one-column}\n\n* <https://docs.ruby-lang.org/en/2.1.0/RDoc/Markup.html>\n* <https://www.rubydoc.info/gems/yard/file/docs/GettingStarted.md>\n* <https://rubydoc.info/gems/yard/file/docs/Tags.md>\n{: .-also-see}\n"
  },
  {
    "path": "react-router.md",
    "content": "---\ntitle: React-router\ncategory: React\n---\n\n### About\n{: .-intro}\n\n- <https://reactrouter.com/>\n\n{% raw %}\n\n### Basic\n\n```js\nimport { default as Router, Route } from 'react-router'\n\nconst routes = (\n  <Route>\n    <Route path='*' handler={RootView} />\n  </Route>\n)\n\nRouter.run(routes, Router.HashLocation, (Root) => {\n  React.render(<Root />, document.getElementById('all'))\n})\n```\n\n### Nesting\n\n```js\nconst routes = (\n  <Route handler={Chrome}>\n    <Route path='about' handler={About} />\n    <Route path='inbox' handler={Inbox} />\n    <Route path='messages/:id' handler={Message} />\n  </Route>\n)\n\nimport { RouteHandler } from 'react-router'\n\nconst Chrome = React.createClass({\n  render () {\n    return (\n      <div>\n        <h1>App</h1>\n        <RouteHandler />\n      </div>\n    )\n  }\n})\n```\n\n### URL params\n\n```js\nvar Message = React.createClass({\n  componentDidMount: function () {\n    // from the path `/inbox/messages/:id`\n    var id = this.props.params.id\n    ...\n```\n\n### Link\n\n```js\nimport { Link } from 'react-router'\n\n<!-- make a named route `user` -->\n<Link to='user' params={{userId: 10}} />\n\n<Link to='login'\n  activeClassName='-active'\n  onClick='...'>\n\n```\n\n### Other config\n\n```js\n<Route path='/'>\n  <DefaultRoute handler={Home} />\n  <NotFoundRoute handler={NotFound} />\n  \n  <Redirect from='login' to='sessions/new' />\n  <Redirect from='login' to='sessions/new' params={{from: 'home'}} />\n  <Redirect from='profile/:id' to='about-user' />\n\n  <Route name='about-user' ... />\n```\n\n### Router.create\n\n```js\nvar router = Router.create({\n  routes: <Route>...</Route>,\n  location: Router.HistoryLocation\n})\n\nrouter.run((Root) => { ... })\n```\n\n### Navigation\n\n```js\nimport { Navigation } from 'react-router'\n\nReact.createClass({\n  mixins: [ Navigation ], ...\n})\n\nthis\n  .transitionTo('user', {id: 10})\n  .transitionTo('/path')\n  .transitionTo('http://...')\n  .replaceWith('about')\n  .makePath('about') // return URL\n  .makeHref('about') // return URL\n  .goBack()\n```\n\n{% endraw %}\n"
  },
  {
    "path": "react.md",
    "content": "---\ntitle: React.js\ncategory: React\nads: true\ntags: [Featured]\nupdated: 2020-07-05\nweight: -10\nkeywords:\n  - React.Component\n  - render()\n  - componentDidMount()\n  - props/state\n  - dangerouslySetInnerHTML\nintro: |\n  [React](https://reactjs.org/) is a JavaScript library for building user interfaces. This guide targets React v15 to v16.\n---\n\n{%raw%}\n\nComponents\n----------\n{: .-three-column}\n\n### Components\n{: .-prime}\n\n```jsx\nimport React from 'react'\nimport ReactDOM from 'react-dom'\n```\n{: .-setup}\n\n```jsx\nclass Hello extends React.Component {\n  render () {\n    return <div className='message-box'>\n      Hello {this.props.name}\n    </div>\n  }\n}\n```\n\n```jsx\nconst el = document.body\nReactDOM.render(<Hello name='John' />, el)\n```\n\nUse the [React.js jsfiddle](http://jsfiddle.net/reactjs/69z2wepo/) to start hacking. (or the unofficial [jsbin](http://jsbin.com/yafixat/edit?js,output))\n\n### Import multiple exports\n{: .-prime}\n\n```jsx\nimport React, {Component} from 'react'\nimport ReactDOM from 'react-dom'\n```\n{: .-setup}\n\n```jsx\nclass Hello extends Component {\n  ...\n}\n```\n\n### Properties\n\n```html\n<Video fullscreen={true} autoplay={false} />\n```\n{: .-setup}\n\n```jsx\nrender () {\n  this.props.fullscreen\n  const { fullscreen, autoplay } = this.props\n  ···\n}\n```\n{: data-line=\"2,3\"}\n\nUse `this.props` to access properties passed to the component.\n\nSee: [Properties](https://reactjs.org/docs/tutorial.html#using-props)\n\n### States\n\n```jsx\nconstructor(props) {\n  super(props)\n  this.state = { username: undefined }\n}\n```\n\n```jsx\nthis.setState({ username: 'rstacruz' })\n```\n\n```jsx\nrender () {\n  this.state.username\n  const { username } = this.state\n  ···\n}\n```\n{: data-line=\"2,3\"}\n\nUse states (`this.state`) to manage dynamic data.\n\nWith [Babel](https://babeljs.io/) you can use [proposal-class-fields](https://github.com/tc39/proposal-class-fields) and get rid of constructor\n\n```jsx\nclass Hello extends Component {\n  state = { username: undefined };\n  ...\n}\n```\n\nSee: [States](https://reactjs.org/docs/tutorial.html#reactive-state)\n\n\n### Nesting\n\n```jsx\nclass Info extends Component {\n  render () {\n    const { avatar, username } = this.props\n\n    return <div>\n      <UserAvatar src={avatar} />\n      <UserProfile username={username} />\n    </div>\n  }\n}\n```\nAs of React v16.2.0, fragments can be used to return multiple children without adding extra wrapping nodes to the DOM.\n\n```jsx\nimport React, {\n  Component,\n  Fragment\n} from 'react'\n\nclass Info extends Component {\n  render () {\n    const { avatar, username } = this.props\n\n    return (\n      <Fragment>\n        <UserAvatar src={avatar} />\n        <UserProfile username={username} />\n      </Fragment>\n    )\n  }\n}\n```\n{: data-line=\"5,6,7,8,9,10\"}\n\nNest components to separate concerns.\n\nSee: [Composing Components](https://reactjs.org/docs/components-and-props.html#composing-components)\n\n### Children\n\n```jsx\n<AlertBox>\n  <h1>You have pending notifications</h1>\n</AlertBox>\n```\n{: data-line=\"2\"}\n\n```jsx\nclass AlertBox extends Component {\n  render () {\n    return <div className='alert-box'>\n      {this.props.children}\n    </div>\n  }\n}\n```\n{: data-line=\"4\"}\n\nChildren are passed as the `children` property.\n\nDefaults\n--------\n\n### Setting default props\n\n```jsx\nHello.defaultProps = {\n  color: 'blue'\n}\n```\n{: data-line=\"1\"}\n\nSee: [defaultProps](https://reactjs.org/docs/react-component.html#defaultprops)\n\n### Setting default state\n\n```jsx\nclass Hello extends Component {\n  constructor (props) {\n    super(props)\n    this.state = { visible: true }\n  }\n}\n```\n{: data-line=\"4\"}\n\nSet the default state in the `constructor()`.\n\nAnd without constructor using [Babel](https://babeljs.io/) with [proposal-class-fields](https://github.com/tc39/proposal-class-fields).\n\n```jsx\nclass Hello extends Component {\n  state = { visible: true }\n}\n```\n{: data-line=\"2\"}\n\nSee: [Setting the default state](https://reactjs.org/docs/react-without-es6.html#setting-the-initial-state)\n\nOther components\n----------------\n{: .-three-column}\n\n### Functional components\n\n```jsx\nfunction MyComponent ({ name }) {\n  return <div className='message-box'>\n    Hello {name}\n  </div>\n}\n```\n{: data-line=\"1\"}\n\nFunctional components have no state. Also, their `props` are passed as the first parameter to a function.\n\nSee: [Function and Class Components](https://reactjs.org/docs/components-and-props.html#functional-and-class-components)\n\n### Pure components\n\n```jsx\nimport React, {PureComponent} from 'react'\n\nclass MessageBox extends PureComponent {\n  ···\n}\n```\n{: data-line=\"3\"}\n\nPerformance-optimized version of `React.Component`. Doesn't rerender if props/state hasn't changed.\n\nSee: [Pure components](https://reactjs.org/docs/react-api.html#react.purecomponent)\n\n### Component API\n\n```jsx\nthis.forceUpdate()\n```\n\n```jsx\nthis.setState({ ... })\nthis.setState(state => { ... })\n```\n\n```jsx\nthis.state\nthis.props\n```\n\nThese methods and properties are available for `Component` instances.\n\nSee: [Component API](http://facebook.github.io/react/docs/component-api.html)\n\nLifecycle\n---------\n{: .-two-column}\n\n### Mounting\n\n| Method                   | Description                                                                                          |\n| ------------------------ | ---------------------------------------------------------------------------------------------------- |\n| `constructor` _(props)_  | Before rendering [#](https://reactjs.org/docs/react-component.html#constructor)                      |\n| `componentWillMount()`   | _Don't use this_ [#](https://reactjs.org/docs/react-component.html#componentwillmount)               |\n| `render()`               | Render [#](https://reactjs.org/docs/react-component.html#render)                                     |\n| `componentDidMount()`    | After rendering (DOM available) [#](https://reactjs.org/docs/react-component.html#componentdidmount) |\n| ---                      | ---                                                                                                  |\n| `componentWillUnmount()` | Before DOM removal [#](https://reactjs.org/docs/react-component.html#componentwillunmount)           |\n| ---                      | ---                                                                                                  |\n| `componentDidCatch()`    | Catch errors (16+) [#](https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html)          |\n\nSet initial the state on `constructor()`.\nAdd DOM event handlers, timers (etc) on `componentDidMount()`, then remove them on `componentWillUnmount()`.\n\n### Updating\n\n| Method                                                  | Description                                          |\n| ------------------------------------------------------- | ---------------------------------------------------- |\n| `componentDidUpdate` _(prevProps, prevState, snapshot)_ | Use `setState()` here, but remember to compare props |\n| `shouldComponentUpdate` _(newProps, newState)_          | Skips `render()` if returns false                    |\n| `render()`                                              | Render                                               |\n| `componentDidUpdate` _(prevProps, prevState)_           | Operate on the DOM here                              |\n\nCalled when parents change properties and `.setState()`. These are not called for initial renders.\n\nSee: [Component specs](http://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops)\n\nHooks (New)\n-----------\n{: .-two-column}\n\n### State Hook\n\n```jsx\nimport React, { useState } from 'react';\n\nfunction Example() {\n  // Declare a new state variable, which we'll call \"count\"\n  const [count, setCount] = useState(0);\n\n  return (\n    <div>\n      <p>You clicked {count} times</p>\n      <button onClick={() => setCount(count + 1)}>\n        Click me\n      </button>\n    </div>\n  );\n}\n```\n{: data-line=\"5,10\"}\n\nHooks are a new addition in React 16.8.\n\nSee: [Hooks at a Glance](https://reactjs.org/docs/hooks-overview.html)\n\n### Declaring multiple state variables\n\n```jsx\nimport React, { useState } from 'react';\n\nfunction ExampleWithManyStates() {\n  // Declare multiple state variables!\n  const [age, setAge] = useState(42);\n  const [fruit, setFruit] = useState('banana');\n  const [todos, setTodos] = useState([{ text: 'Learn Hooks' }]);\n  // ...\n}\n```\n\n### Effect hook\n\n```jsx\nimport React, { useState, useEffect } from 'react';\n\nfunction Example() {\n  const [count, setCount] = useState(0);\n\n  // Similar to componentDidMount and componentDidUpdate:\n  useEffect(() => {\n    // Update the document title using the browser API\n    document.title = `You clicked ${count} times`;\n  }, [count]);\n\n  return (\n    <div>\n      <p>You clicked {count} times</p>\n      <button onClick={() => setCount(count + 1)}>\n        Click me\n      </button>\n    </div>\n  );\n}\n```\n{: data-line=\"6,7,8,9,10\"}\n\nIf you’re familiar with React class lifecycle methods, you can think of `useEffect` Hook as `componentDidMount`, `componentDidUpdate`, and `componentWillUnmount` combined.\n\nBy default, React runs the effects after every render — including the first render.\n\n### Building your own hooks\n\n#### Define FriendStatus\n```jsx\nimport React, { useState, useEffect } from 'react';\n\nfunction FriendStatus(props) {\n  const [isOnline, setIsOnline] = useState(null);\n\n  useEffect(() => {\n    function handleStatusChange(status) {\n      setIsOnline(status.isOnline);\n    }\n\n    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);\n    return () => {\n      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);\n    };\n  }, [props.friend.id]);\n\n  if (isOnline === null) {\n    return 'Loading...';\n  }\n  return isOnline ? 'Online' : 'Offline';\n}\n```\n{: data-line=\"11,12,13,14\"}\n\nEffects may also optionally specify how to “clean up” after them by returning a function. \n\n#### Use FriendStatus\n\n```jsx\nfunction FriendStatus(props) {\n  const isOnline = useFriendStatus(props.friend.id);\n\n  if (isOnline === null) {\n    return 'Loading...';\n  }\n  return isOnline ? 'Online' : 'Offline';\n}\n```\n{: data-line=\"2\"}\n\nSee: [Building Your Own Hooks](https://reactjs.org/docs/hooks-custom.html)\n\n### Hooks API Reference\n\nAlso see: [Hooks FAQ](https://reactjs.org/docs/hooks-faq.html)\n\n#### Basic Hooks\n\n| Hook                         | Description                               |\n| ---------------------------- | ----------------------------------------- |\n| `useState`_(initialState)_   |                                           |\n| `useEffect`_(() => { ... })_ |                                           |\n| `useContext`_(MyContext)_    | value returned from `React.createContext` |\n\nFull details: [Basic Hooks](https://reactjs.org/docs/hooks-reference.html#basic-hooks)\n\n#### Additional Hooks\n\n| Hook                                         | Description                                                                 |\n| -------------------------------------------- | ---------------------------------------------------------------------------- |\n| `useReducer`_(reducer, initialArg, init)_    |                                                                              |\n| `useCallback`_(() => { ... })_               |                                                                              |\n| `useMemo`_(() => { ... })_                   |                                                                              |\n| `useRef`_(initialValue)_                     |                                                                              |\n| `useImperativeHandle`_(ref, () => { ... })_  |                                                                              |\n| `useLayoutEffect`                            | identical to `useEffect`, but it fires synchronously after all DOM mutations |\n| `useDebugValue`_(value)_                     | display a label for custom hooks in React DevTools                           |\n\nFull details: [Additional Hooks](https://reactjs.org/docs/hooks-reference.html#additional-hooks)\n\nDOM nodes\n---------\n{: .-two-column}\n\n### References\n\n```jsx\nclass MyComponent extends Component {\n  render () {\n    return <div>\n      <input ref={el => this.input = el} />\n    </div>\n  }\n\n  componentDidMount () {\n    this.input.focus()\n  }\n}\n```\n{: data-line=\"4,9\"}\n\nAllows access to DOM nodes.\n\nSee: [Refs and the DOM](https://reactjs.org/docs/refs-and-the-dom.html)\n\n### DOM Events\n\n```jsx\nclass MyComponent extends Component {\n  render () {\n    <input type=\"text\"\n        value={this.state.value}\n        onChange={event => this.onChange(event)} />\n  }\n\n  onChange (event) {\n    this.setState({ value: event.target.value })\n  }\n}\n```\n{: data-line=\"5,9\"}\n\nPass functions to attributes like `onChange`.\n\nSee: [Events](https://reactjs.org/docs/events.html)\n\n## Other features\n\n### Transferring props\n\n```html\n<VideoPlayer src=\"video.mp4\" />\n```\n{: .-setup}\n\n```jsx\nclass VideoPlayer extends Component {\n  render () {\n    return <VideoEmbed {...this.props} />\n  }\n}\n```\n{: data-line=\"3\"}\n\nPropagates `src=\"...\"` down to the sub-component.\n\nSee [Transferring props](http://facebook.github.io/react/docs/transferring-props.html)\n\n### Top-level API\n\n```jsx\nReact.createClass({ ... })\nReact.isValidElement(c)\n```\n\n```jsx\nReactDOM.render(<Component />, domnode, [callback])\nReactDOM.unmountComponentAtNode(domnode)\n```\n\n```jsx\nReactDOMServer.renderToString(<Component />)\nReactDOMServer.renderToStaticMarkup(<Component />)\n```\n\nThere are more, but these are most common.\n\nSee: [React top-level API](https://reactjs.org/docs/react-api.html)\n\nJSX patterns\n------------\n{: .-two-column}\n\n### Style shorthand\n\n```jsx\nconst style = { height: 10 }\nreturn <div style={style}></div>\n```\n\n```jsx\nreturn <div style={{ margin: 0, padding: 0 }}></div>\n```\n\nSee: [Inline styles](https://reactjs.org/tips/inline-styles.html)\n\n### Inner HTML\n\n```jsx\nfunction markdownify() { return \"<p>...</p>\"; }\n<div dangerouslySetInnerHTML={{__html: markdownify()}} />\n```\n\nSee: [Dangerously set innerHTML](https://reactjs.org/tips/dangerously-set-inner-html.html)\n\n### Lists\n\n```jsx\nclass TodoList extends Component {\n  render () {\n    const { items } = this.props\n\n    return <ul>\n      {items.map(item =>\n        <TodoItem item={item} key={item.key} />)}\n    </ul>\n  }\n}\n```\n{: data-line=\"6,7\"}\n\nAlways supply a `key` property.\n\n### Conditionals\n\n```jsx\n<Fragment>\n  {showMyComponent\n    ? <MyComponent />\n    : <OtherComponent />}\n</Fragment>\n```\n\n### Short-circuit evaluation\n\n```jsx\n<Fragment>\n  {showPopup && <Popup />}\n  ...\n</Fragment>\n```\n\nNew features\n------------\n{: .-three-column}\n\n### Returning multiple elements\n\nYou can return multiple elements as arrays or fragments.\n\n#### Arrays\n\n```js\nrender () {\n  // Don't forget the keys!\n  return [\n    <li key=\"A\">First item</li>,\n    <li key=\"B\">Second item</li>\n  ]\n}\n```\n{: data-line=\"3,4,5,6\"}\n\n#### Fragments\n```js\nrender () {\n  return (\n    <Fragment>\n      <li>First item</li>\n      <li>Second item</li>\n    </Fragment>\n  )\n}\n```\n{: data-line=\"3,4,5,6,7,8\"}\n\nSee: [Fragments and strings](https://reactjs.org/blog/2017/09/26/react-v16.0.html#new-render-return-types-fragments-and-strings)\n\n### Returning strings\n\n```js\nrender() {\n  return 'Look ma, no spans!';\n}\n```\n{: data-line=\"2\"}\n\nYou can return just a string.\n\nSee: [Fragments and strings](https://reactjs.org/blog/2017/09/26/react-v16.0.html#new-render-return-types-fragments-and-strings)\n\n### Errors\n\n```js\nclass MyComponent extends Component {\n  ···\n  componentDidCatch (error, info) {\n    this.setState({ error })\n  }\n}\n```\n{: data-line=\"3,4,5\"}\n\nCatch errors via `componentDidCatch`. (React 16+)\n\nSee: [Error handling in React 16](https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html)\n\n### Portals\n\n```js\nrender () {\n  return React.createPortal(\n    this.props.children,\n    document.getElementById('menu')\n  )\n}\n```\n{: data-line=\"2,3,4,5\"}\n\nThis renders `this.props.children` into any location in the DOM.\n\nSee: [Portals](https://reactjs.org/docs/portals.html)\n\n### Hydration\n\n```js\nconst el = document.getElementById('app')\nReactDOM.hydrate(<App />, el)\n```\n{: data-line=\"2\"}\n\nUse `ReactDOM.hydrate` instead of using `ReactDOM.render` if you're rendering over the output of [ReactDOMServer](https://reactjs.org/docs/react-dom-server.html).\n\nSee: [Hydrate](https://reactjs.org/docs/react-dom.html#hydrate)\n\nProperty validation\n-------------------\n{: .-three-column}\n\n### PropTypes\n\n```js\nimport PropTypes from 'prop-types'\n```\n{: .-setup}\n\nSee: [Typechecking with PropTypes](https://reactjs.org/docs/typechecking-with-proptypes.html)\n\n| Key   | Description |\n| ----- | ----------- |\n| `any` | Anything    |\n\n#### Basic\n\n| Key      | Description   |\n| -------- | ------------- |\n| `string` |               |\n| `number` |               |\n| `func`   | Function      |\n| `bool`   | True or false |\n\n#### Enum\n\n| Key                       | Description |\n| ------------------------- | ----------- |\n| `oneOf`_(any)_            | Enum types  |\n| `oneOfType`_(type array)_ | Union       |\n\n#### Array\n\n| Key              | Description |\n| ---------------- | ----------- |\n| `array`          |             |\n| `arrayOf`_(...)_ |             |\n\n#### Object\n\n| Key                 | Description                          |\n| ------------------- | ------------------------------------ |\n| `object`            |                                      |\n| `objectOf`_(...)_   | Object with values of a certain type |\n| `instanceOf`_(...)_ | Instance of a class                  |\n| `shape`_(...)_      |                                      |\n\n#### Elements\n\n| Key       | Description   |\n| --------- | ------------- |\n| `element` | React element |\n| `node`    | DOM node      |\n\n#### Required\n\n| Key                | Description |\n| ------------------ | ----------- |\n| `(···).isRequired` | Required    |\n\n### Basic types\n\n```jsx\nMyComponent.propTypes = {\n  email:      PropTypes.string,\n  seats:      PropTypes.number,\n  callback:   PropTypes.func,\n  isClosed:   PropTypes.bool,\n  any:        PropTypes.any\n}\n```\n\n### Required types\n\n```jsx\nMyCo.propTypes = {\n  name:  PropTypes.string.isRequired\n}\n```\n\n### Elements\n\n```jsx\nMyCo.propTypes = {\n  // React element\n  element: PropTypes.element,\n\n  // num, string, element, or an array of those\n  node: PropTypes.node\n}\n```\n\n### Enumerables (oneOf)\n\n```jsx\nMyCo.propTypes = {\n  direction: PropTypes.oneOf([\n    'left', 'right'\n  ])\n}\n```\n\n### Arrays and objects\n\n```jsx\nMyCo.propTypes = {\n  list: PropTypes.array,\n  ages: PropTypes.arrayOf(PropTypes.number),\n  user: PropTypes.object,\n  user: PropTypes.objectOf(PropTypes.number),\n  message: PropTypes.instanceOf(Message)\n}\n```\n\n```jsx\nMyCo.propTypes = {\n  user: PropTypes.shape({\n    name: PropTypes.string,\n    age:  PropTypes.number\n  })\n}\n```\n\nUse `.array[Of]`, `.object[Of]`, `.instanceOf`, `.shape`.\n\n### Custom validation\n\n```jsx\nMyCo.propTypes = {\n  customProp: (props, key, componentName) => {\n    if (!/matchme/.test(props[key])) {\n      return new Error('Validation failed!')\n    }\n  }\n}\n```\n\nAlso see\n--------\n\n* [React website](https://reactjs.org) _(reactjs.org)_\n* [React cheatsheet](https://reactcheatsheet.com/) _(reactcheatsheet.com)_\n* [Awesome React](https://github.com/enaqx/awesome-react) _(github.com)_\n* [React v0.14 cheatsheet](react@0.14) _Legacy version_\n\n{%endraw%}\n"
  },
  {
    "path": "react@0.14.md",
    "content": "---\ntitle: React.js (v0.14)\ncategory: React\ndeprecated: true\nintro: |\n  **Deprecated:** this guide targets an old version of React (v0.14). See the [updated React cheatsheet](react) for new versions.\n---\n\n{%raw%}\n\n### Components\n\n```js\nvar Component = React.createClass({\n  render: function () {\n    return <div>Hello {this.props.name}</div>;\n  }\n});\n```\n\n```js\nReactDOM.render(<Component name=\"John\" />, document.body);\n```\n{:.light}\n\nUse the [React.js jsfiddle](http://jsfiddle.net/reactjs/69z2wepo/) to start hacking. (or the unofficial [jsbin](http://jsbin.com/yafixat/edit?js,output))\n\n### Nesting\n\n```js\nvar UserAvatar  = React.createClass({...});\nvar UserProfile = React.createClass({...});\n```\n{:.light}\n\n```js\nvar Info = React.createClass({\n  render() {\n    return <div>\n      <UserAvatar src={this.props.avatar} />\n      <UserProfile username={this.props.username} />\n    </div>;\n  }\n});\n```\n\nNest components to separate concerns. See [multiple components](http://facebook.github.io/react/docs/multiple-components.html).\n\n## States & Properties\n{:.center}\n\n### States and props\n\n```html\n<MyComponent fullscreen={true} />\n```\n{:.light}\n \n```js\n// props\n  this.props.fullscreen //=> true\n\n// state\n  this.setState({ username: 'rstacruz' });\n  this.replaceState({ ... });\n  this.state.username //=> 'rstacruz'\n```\n\n```js\nrender: function () {\n  return <div className={this.props.fullscreen ? 'full' : ''}>\n    Welcome, {this.state.username}\n  </div>;\n}\n```\n\nUse [props](https://facebook.github.io/react/docs/tutorial.html#using-props) (`this.props`) to access parameters passed from the parent.\nUse [states](https://facebook.github.io/react/docs/tutorial.html#reactive-state) (`this.state`) to manage dynamic data.\n\n### Setting defaults\n\n```js\nReact.createClass({\n  getInitialState: function () {\n    return { comments: [] };\n  },\n\n  getDefaultProps: function () {\n    return { name: \"Hello\" };\n  }\n);\n```\n\nPre-populates `this.state.comments` and `this.props.name`.\n\n## Components\n\n### Component API\n\n```js\nReactDOM.findDOMNode(c)  // 0.14+\nReact.findDOMNode(c)  // 0.13\nc.getDOMNode()        // 0.12 below\n```\n{:.light}\n\n```js\nc.forceUpdate()\nc.isMounted()\n\nc.state\nc.props\n\nc.setState({ ... })\nc.replaceState({ ... })\n\nc.setProps({ ... })       // for deprecation\nc.replaceProps({ ... })   // for deprecation\n\nc.refs\n```\n\nThese are methods available for `Component` instances. See [Component API](http://facebook.github.io/react/docs/component-api.html).\n\n### Component specs\n\n| Method | What |\n| ---- | ---- |\n| [`render()`](http://facebook.github.io/react/docs/component-specs.html#render) | |\n| ---- | ---- |\n| [`getInitialState()`](http://facebook.github.io/react/docs/component-specs.html#getinitialstate) | |\n| [`getDefaultProps()`](http://facebook.github.io/react/docs/component-specs.html#getdefaultprops) |  |\n| ---- | ---- |\n| [`mixins: [ ... ]`](http://facebook.github.io/react/docs/component-specs.html#mixins) | Mixins ... [more](#mixins) |\n| [`propTypes: { ... }`](http://facebook.github.io/react/docs/component-specs.html#proptypes) | Validation ... [more](#property-validation) |\n| [`statics: { ... }`](http://facebook.github.io/react/docs/component-specs.html#statics) | Static methods |\n| [`displayName: \"...\"`](http://facebook.github.io/react/docs/component-specs.html#displayname) | Automatically filled by JSX |\n{:.greycode.no-head}\n\nMethods and properties you can override. See [component specs](http://facebook.github.io/react/docs/component-specs.html).\n\n## Lifecycle\n\n### Mounting\n\n| `componentWillMount()` | Before rendering (no DOM yet) |\n| `componentDidMount()` | After rendering |\n{:.greycode.no-head.lc}\n\nBefore initial rendering occurs. Add your DOM stuff on didMount (events, timers, etc). See [reference](http://facebook.github.io/react/docs/component-specs.html#mounting-componentwillmount).\n\n### Updating\n\n| `componentWillReceiveProps`*(newProps={})* | Use `setState()` here |\n| `shouldComponentUpdate`*(newProps={}, newState={})* | Skips `render()` if returns false |\n| `componentWillUpdate`*(newProps={}, newState={})* | Can't use `setState()` here |\n| `componentDidUpdate`*(prevProps={}, prevState={})* | Operate on the DOM here |\n{:.greycode.no-head.lc}\n\nCalled when parents change properties and `.setState()`. These are not called for initial renders. See [reference](http://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops).\n\n### Unmounting\n\n| `componentWillUnmount()` | Invoked before DOM removal |\n{:.greycode.no-head.lc}\n\nClear your DOM stuff here (probably done on didMount). See [reference](http://facebook.github.io/react/docs/component-specs.html#unmounting-componentwillunmount).\n\n## Examples\n\n### Example: loading data\n\n```js\nReact.createClass({\n  componentDidMount: function () {\n    $.get(this.props.url, function (data) {\n      this.setState(data);\n    }.bind(this));\n  },\n\n  render: function () {\n    return <CommentList data={this.state.data} />\n  }\n});\n```\n\nSee [initial AJAX data](http://facebook.github.io/react/tips/initial-ajax.html).\n\n## DOM nodes\n\n### References\n\n```html\n<input ref=\"myInput\">\n```\n{:.light}\n\n```js\nthis.refs.myInput\nReactDOM.findDOMNode(this.refs.myInput).focus()\nReactDOM.findDOMNode(this.refs.myInput).value\n```\n\n### DOM Events\nAdd attributes like `onChange`. See [events](https://facebook.github.io/react/docs/events.html).\n\n```html\n<input type=\"text\"\n    value={this.state.value}\n    onChange={this.handleChange} />\n```\n{:.light}\n\n```js\nhandleChange: function(event) {\n  this.setState({ value: event.target.value });\n}\n```\n\nAllows access to DOM nodes. See [References](http://facebook.github.io/react/docs/more-about-refs.html).\n\n### Two-way binding\n\n```html\nEmail: <input type=\"text\" valueLink={this.linkState('email')} />\n```\n{:.light}\n\n```js\nReact.createClass({\n  mixins: [React.addons.LinkedStateMixin]\n});\n```\n\n```js\nthis.state.email\n```\n\nUse [LinkedStateMixin](http://facebook.github.io/react/docs/two-way-binding-helpers.html) for easier two-way binding.\n\n## Property validation\n\n### Basic types\n\n```js\nReact.createClass({\n  propTypes: {\n    email:      React.PropTypes.string,\n    seats:      React.PropTypes.number,\n    settings:   React.PropTypes.object,\n    callback:   React.PropTypes.func,\n    isClosed:   React.PropTypes.bool,\n    any:        React.PropTypes.any,\n  }\n});\n```\nPrimitive types: `.string`, `.number`, `.func`, and `.bool`. See [propTypes](http://facebook.github.io/react/docs/reusable-components.html#prop-validation).\n\n### Required types\n\n```js\npropTypes: {\n  requiredFunc:  React.PropTypes.func.isRequired,\n  requiredAny:   React.PropTypes.any.isRequired,\n```\n\nAdd `.isRequired`.\n\n### React elements\n\n```js\npropTypes: {\n  element:  React.PropTypes.element,  // react element\n  node:     React.PropTypes.node,     // num, string, element\n                                      // ...or array of those\n```\n\nUse `.element`, `.node`.\n\n### Enumerables\n\n```\npropTypes: {\n  enum:     React.PropTypes.oneOf(['M','F']),  // enum\n  union:    React.PropTypes.oneOfType([        // any\n              React.PropTypes.string,\n              React.PropTypes.number ]),\n```\n\nUse `.oneOf`, `.oneOfType`.\n\n### Arrays and objects\n\n```js\npropTypes: {\n  array:    React.PropTypes.array,\n  arrayOf:  React.PropTypes.arrayOf(React.PropTypes.number),\n  object:   React.PropTypes.object,\n  objectOf: React.PropTypes.objectOf(React.PropTypes.number),\n\n  message:  React.PropTypes.instanceOf(Message),\n\n  object2:  React.PropTypes.shape({\n    color:  React.PropTypes.string,\n    size:   React.PropTypes.number\n  }),\n```\n\nUse `.array[Of]`, `.object[Of]`, `.instanceOf`, `.shape`.\n\n### Custom validation\n\n```js\npropTypes: {\n  customProp: function(props, propName, componentName) {\n    if (!/matchme/.test(props[propName])) {\n      return new Error('Validation failed!');\n    }\n  }\n}\n```\n\nSupply your own function.\n\n## Other features\n\n### Class set\n\n```js\nvar cx = require('classnames');\n\nrender: function() {\n  var classes = cx({\n    'message': true,\n    'message-important': this.props.isImportant,\n    'message-read': this.props.isRead\n  });\n\n  return <div className={classes}>Great Scott!</div>;\n}\n```\n\nManipulate DOM classes with [classnames](https://www.npmjs.org/package/classnames), previously known as `React.addons.classSet`. See [Class set](http://facebook.github.io/react/docs/class-name-manipulation.html).\n\n### Propagating properties\n\n```html\n<VideoPlayer src=\"video.mp4\" />\n```\n{:.light}\n\n```js\nvar VideoPlayer = React.createClass({\n  render: function() {\n    /* propagates src=\"...\" down to this sub component */\n    return <VideoEmbed {...this.props} controls='false' />;\n  }\n});\n```\n\nSee [Transferring props](http://facebook.github.io/react/docs/transferring-props.html).\n\n### Mixins\n\n```js\nvar SetIntervalMixin = {\n  componentWillMount: function() { .. }\n}\n```\n{:.light}\n\n```js\nvar TickTock = React.createClass({\n  mixins: [SetIntervalMixin]\n}\n```\n\nSee [addons](https://facebook.github.io/react/docs/addons.html) for some built-in mixins.\n\n## [Top level API](https://facebook.github.io/react/docs/top-level-api.html)\n\n```js\nReact.createClass({ ... })\n\nReact.isValidElement(c)\n\nReactDOM.findDOMNode(c) // 0.14+\nReactDOM.render(<Component />, domnode, [callback]) // 0.14+\nReactDOM.unmountComponentAtNode(domnode) // 0.14+\n\nReactDOMServer.renderToString(<Component />) // 0.14+\nReactDOMServer.renderToStaticMarkup(<Component />) // 0.14+\n```\n\n## JSX patterns\n\n### Style shorthand\n\n```js\nvar style = { backgroundImage: 'url(x.jpg)', height: 10 };\nreturn <div style={style}></div>;\n```\n\nSee [inline styles](https://facebook.github.io/react/tips/inline-styles.html).\n\n### InnerHTML\n\n```js\nfunction markdownify() { return \"<p>...</p>\"; }\n<div dangerouslySetInnerHTML={{__html: markdownify()}} />\n```\n\nSee [dangerously set innerHTML](https://facebook.github.io/react/tips/dangerously-set-inner-html.html).\n\n### Lists\n\n```js\nvar TodoList = React.createClass({\n  render: function() {\n    function item(itemText) {\n      return <li>{itemText}</li>;\n    };\n    return <ul>{this.props.items.map(item)}</ul>;\n  }\n});\n```\n\n## See also\n\n* [Animations](http://facebook.github.io/react/docs/animation.html)\n{%endraw%}\n"
  },
  {
    "path": "redux.md",
    "content": "---\ntitle: Redux\ncategory: React\nupdated: 2018-01-17\nweight: -3\n---\n\n### Creating a store\n\n```js\nimport { createStore } from 'redux'\n```\n{: .-setup}\n\n```js\n// Reducer\nfunction counter (state = { value: 0 }, action) {\n  switch (action.type) {\n  case 'INCREMENT':\n    return { value: state.value + 1 }\n  case 'DECREMENT':\n    return { value: state.value - 1 }\n  default:\n    return state\n  }\n}\n```\n\n```js\nlet store = createStore(counter)\n```\n\n```js\n// Optional - you can pass `initialState` as a second arg\nlet store = createStore(counter, { value: 0 })\n```\n\nA store is made from a reducer function, which takes the current `state`, and\nreturns a new `state` depending on the `action` it was given.\n\n### Using a store\n\n```js\nlet store = createStore(counter)\n```\n{: .-setup}\n\n```js\n// Dispatches an action; this changes the state\nstore.dispatch({ type: 'INCREMENT' })\nstore.dispatch({ type: 'DECREMENT' })\n```\n\n```js\n// Gets the current state\nstore.getState()\n```\n\n```js\n// Listens for changes\nstore.subscribe(() => { ... })\n```\n\nDispatch actions to change the store's state.\n\n## React Redux\n\n### Provider\n\n```js\nimport { Provider } from 'react-redux'\n```\n{: .-setup}\n\n```js\nReact.render(\n  <Provider store={store}>\n    <App />\n  </Provider>, mountNode)\n```\n\nThe `<Provider>` component makes the store available in your React components. You need this so you can use `connect()`.\n\n### Mapping state\n\n```js\nimport { connect } from 'react-redux'\n```\n{: .-setup}\n\n```js\n// A functional React component\nfunction App ({ message, onMessageClick }) {\n  return (\n    <div onClick={() => onMessageClick('hello')}>\n      {message}\n    </div>\n  )\n}\n```\n\n```js\n// Maps `state` to `props`:\n// These will be added as props to the component.\nfunction mapState (state) {\n  return { message: state.message }\n}\n\n// Maps `dispatch` to `props`:\nfunction mapDispatch (dispatch) {\n  return {\n    onMessageClick (message) {\n      dispatch({ type: 'click', message })\n    }\n  }\n}\n\n// Connect them:\nexport default connect(mapState, mapDispatch)(App)\n```\n\n### Shorthand\n\n```js\nexport default connect(\n  (state) => ({\n    message: state.message\n  }),\n  (dispatch) => ({\n    onMessageClick: (message) => {\n      dispatch({ type: 'click', message })\n    }\n  })\n)(App)\n```\n\nSame as above, but shorter.\n\n### Combining reducers\n\n```js\nconst reducer = combineReducers({\n  counter, user, store\n})\n```\n\nCombines multiple reducers into one reducer function. See: [combineReducers](https://redux.js.org/docs/api/combineReducers.html) _(redux.js.org)_\n\n## Middleware\n\n### Signature\n\n```js\n// noop middleware\nconst logger = store => dispatch => action { dispatch(action) }\n```\n\n```js\nconst logger = store => {\n  // This function runs on createStore().\n  // It returns a decorator for dispatch().\n\n  return dispatch => {\n    // Runs on createStore(), too.\n    // It returns a new dispatch() function\n\n    return action => {\n      // Runs on every dispatch()\n    }\n  }\n}\n```\n\nMiddlewares are simply decorators for `dispatch()` to allow you to take\ndifferent kinds of actions, and to perform different tasks when receiving\nactions.\n\n### Applying middleware\n\n```js\nconst enhancer = applyMiddleware(logger, thunk, ...)\n```\n\n```js\nconst store = createStore(reducer, {}, enhancer)\n```\n{: data-line=\"1\"}\n\n## References\n{: .-one-column}\n\n* [Redux](https://www.npmjs.com/package/redux) _(npmjs.com)_\n* [React-redux](https://www.npmjs.com/package/react-redux) _(npmjs.com)_\n* [Usage with React](http://redux.js.org/docs/basics/UsageWithReact.html) _(redux.js.org)_\n{: .-also-see}\n"
  },
  {
    "path": "regexp.md",
    "content": "---\ntitle: regexp\ncategory: Others\nweight: -1\nauthors:\n  - github: rizqyhi\n  - github: izzergh\n  - github: kolapsys\n  - github: samtrion\nupdated: 2020-03-10\ndescription: |\n  Basic cheatsheets for regular expression\n---\n\n## RegExp\n{: .-three-column}\n\n### Character classes\n\n| Pattern       | Description                              |\n| ------------- | ---------------------------------------- |\n| `.`           | Any character, except newline            |\n| `\\w`          | Word                                     |\n| `\\d`          | Digit                                    |\n| `\\s`          | Whitespace                               |\n| `\\W`          | Not word                                 |\n| `\\D`          | Not digit                                |\n| `\\S`          | Not whitespace                           |\n| `[abc]`       | Any of a, b, or c                        |\n| `[a-e]`       | Characters between `a` and `e`           |\n| `[1-9]`       | Digit between `1` and `9`                |\n| `[[:print:]]` | Any printable character including spaces |\n| `[^abc]`      | Any character except `a`, `b` or `c`     |\n\n### Anchors\n\n| Pattern | Description            |\n| ------- | ---------------------- |\n| `\\G`    | Start of match         |\n| `^`     | Start of string \\*     |\n| `$`     | End of string \\*       |\n| `\\A`    | Start of string        |\n| `\\Z`    | End of string          |\n| `\\z`    | Absolute end of string |\n| `\\b`    | A word boundary        |\n| `\\B`    | Non-word boundary      |\n| `^abc`  | Start with `abc`       |\n| `abc$`  | End with `abc`         |\n\nFor multiline patterns (`m` flag), `^` and `$` will act as start and end of line.\n\n### Escaped characters\n\n| Pattern    | Description                            |\n| ---------- | -------------------------------------- |\n| `\\. \\* \\\\` | Escape special character used by regex |\n| `\\t`       | Tab                                    |\n| `\\n`       | Newline                                |\n| `\\r`       | Carriage return                        |\n\n### Groups\n\n| Pattern   | Description                                              |\n| --------- | -------------------------------------------------------- |\n| `(abc)`   | Capture group                                            |\n| `(a|b)`   | Match `a` or `b`                                         |\n| `(?:abc)` | Match `abc`, but don't capture                           |\n| `\\1`      | Substituted with text matched of the 1st capturing group |\n\n\n### Quantifiers\n\n| Pattern  | Description           |\n| -------- | --------------------- |\n| `a*`     | Match 0 or more       |\n| `a+`     | Match 1 or more       |\n| `a?`     | Match 0 or 1          |\n| `a{5}`   | Match exactly 5       |\n| `a{,3}`  | Match up to 3         |\n| `a{3,}`  | Match 3 or more       |\n| `a{1,3}` | Match between 1 and 3 |\n\n### Lookahead & Lookbehind\n\n| Pattern      | Description                               |\n| ---          | ---                                       |\n| `a(?=b)`     | Match `a` in `baby` but not in `bay`      |\n| `a(?!b)`     | Match `a` in `Stan` but not in `Stab`     |\n| ---          | ---                                       |\n| `(?<=a)b`    | Match `b` in `crabs` but not in `cribs`   |\n| `(?<!a)b`    | Match `b` in `fib` but not in `fab`       |\n"
  },
  {
    "path": "rename.md",
    "content": "---\ntitle: rename\ncategory: CLI\n---\n\n### Installation\n\n```bash\nbrew install rename\n```\n\nSee: <http://plasmasturm.org/code/rename/>\n\n### Regex substitution\n\n```bash\nrename 's/hello/world/' *.txt\n```\n\nRename `hello.txt` to `world.txt` and so on in `*.txt`.\n\n### Replace extension\n\n```bash\nrename -s .png .jpg.png *.png\n```\n\nReplace `.png` with `.jpg.png` in `*.png`.\n\n### Options\n\n| Option | Description               |\n| ---    | ---                       |\n| `-n`   | Simulation                |\n| `-l`   | Symlink instead of rename |\n| `-i`   | Interactive               |\n\n## Also see\n\n- [Rename website](http://plasmasturm.org/code/rename/) _(plasmasturm.org)_\n"
  },
  {
    "path": "resolutions.md",
    "content": "---\ntitle: Screen resolutions\nupdated: 2020-07-03\nweight: -1\n---\n\n## Resolutions\n{: .-one-column}\n\n### Mobile\n\n| Resolution | DPPX  | Actual resolution | DPPI    | Actual PPI | Size  | Devices                      |\n| ---        | ---   | ---               | ---     | ---        | ---   | ---                          |\n| 320 x 480  | @1x   | 320 x 480         | 163 ppi | 163 ppi    | 3.5\"  | iPhone 2G/3G/3GS             |\n| 320 x 480  | @2x   | 640 x 960         | 163 ppi | 326 ppi    | 3.5\"  | iPhone 4/4S                  |\n| 320 x 568  | @2x   | 640 x 1136        | 163 ppi | 326 ppi    | 4\"    | iPhone 5/5C/5S               |\n| 320 x 568  | @2x   | 640 x 1136        | 163 ppi | 326 ppi    | 4\"    | iPhone SE                    |\n| 375 x 667  | @2x   | 750 x 1334        | 163 ppi | 326 ppi    | 4.7\"  | iPhone 6/6S/7/8/SE2          |\n| 414 x 736  | @3x   | 1242 x 2208       | 133 ppi | 401 ppi    | 5.5\"  | iPhone 6+/6S+/7+/8+          |\n| 414 x 896  | @2x   | 828 x 1792        | 163 ppi | 326 ppi    | 6.1\"  | iPhone Xr/11                 |\n| 375 x 812  | @3x   | 1125 x 2436       | 152 ppi | 458 ppi    | 5.8\"  | iPhone X/Xs/11 Pro           |\n| 414 x 896\t | @3x   | 1242 x 2688\t     | 162 ppi | 458 ppi    | 6.5\"  | iPhone Xs Max/11 Pro Max     |\n| 390 x 844\t | @3x   | 1170 x 2532\t     | 153 ppi | 460 ppi\t  | 6.1\"  | iPhone 12/12 Pro/13/13 Pro   |\n| 428 x 926\t | @3x   | 1284 x 2778\t     | 152 ppi | 458 ppi\t  | 6.7\"  | iPhone 12 Pro Max/13 Pro Max |\n| 375 x 812  | @3x   | 1080 x 2540       | 158 ppi | 476 ppi    | 5.4\"  | iPhone 13 Mini               |\n| ---        | ---   | ---               | ----    | ---        | ---   | ---                          |\n| 320 x 533  | @1.5x |  480 x  800       | 155 ppi | 233 ppi    |       | Galaxy S                     |\n| 320 x 533  | @1.5x |  480 x  800       | 145 ppi | 217 ppi    |       | Galaxy S2                    |\n| 360 x 640  | @2x   |  720 x 1280       | 153 ppi | 306 ppi    | 4.8\"  | Galaxy S3                    |\n| 320 x 533  | @1.5x |  480 x 1200       | 155 ppi | 233 ppi    |       | Galaxy S3 Mini               |\n| 360 x 640  | @3x   | 1080 x 1920       | 147 ppi | 441 ppi    | 5\"    | Galaxy S4                    |\n| 360 x 640  | @3x   | 1080 x 1920       | 144 ppi | 432 ppi    | 5.1\"  | Galaxy S5                    |\n| 360 x 640  | @4x   | 1440 x 2560       | 144 ppi | 577 ppi    | 5.1\"  | Galaxy S6/Edge               |\n| 360 x 640  | @4x   | 1440 x 2560       | 144 ppi | 576 ppi    | 5.1\"  | Galaxy S7                    |\n| 360 x 640  | @4x   | 1440 x 2560       | 134 ppi | 534 ppi    | 5.5\"  | Galaxy S7 Edge               |\n| 360 x 740  | @4x   | 1440 x 2960       | 142 ppi | 568 ppi    | 5.8\"  | Galaxy S8                    |\n| 412 x 846  | @4x   | 1440 x 2960       | 133 ppi | 531 ppi    | 6.2\"  | Galaxy S8 Plus               |\n| 360 x 740  | @4x   | 1440 x 2960       | 142 ppi | 568 ppi    | 5.8\"  | Galaxy S9                    |\n| 412 x 846  | @4x   | 1440 x 2960       | 133 ppi | 531 ppi    | 6.2\"  | Galaxy S9 Plus               |\n{: .-headers}\n\n### Tablet\n\n| Resolution | DPPX | Actual resolution | DPPI    | Actual PPI | Size | Devices          |\n| ---        | ---- | ---               | ---     | ---        | ---- | ---              |\n| 1024 x 768 | @2x  | 2048 x 1536       | 163 ppi | 326 ppi    | 7.9\" | iPad Mini Retina |\n| 1024 x 768 | @2x  | 2048 x 1536       | 132 ppi | 264 ppi    | 9.7\" | iPad Air         |\n{: .-headers}\n"
  },
  {
    "path": "rest-api.md",
    "content": "---\ntitle: RESTful API\nupdated: 2019-07-07\ncategory: API\n---\n\n### Status codes\n\n| Code                  | Description                                  |\n| --------------------- | -------------------------------------------- |\n| `200 OK`              | Successful get, patch (return a JSON object) |\n| `201 Created`         | Successful post (return a JSON object)       |\n| `202 Accepted`        | Successful post, delete, path - async        |\n| `204 No content`      | Successful delete                            |\n| `206 Partial content` | Successful get - async                       |\n\n### Error status\n\n| Code                       | Description                       |\n| -------------------------- | --------------------------------- |\n| `401 Unauthorized`         | Not authenticated                 |\n| `403 Forbidden`            | Authenticated, but no permissions |\n| `422 Unprocessable entity` | Validation                        |\n\n### Errors\n\n```\nHTTP/1.1 401 Unauthorized\nContent-Type: application/json\n{\n  'id': 'auth_failed',\n  'message': \"You're not logged in.\"\n}\n```\n\nHere's an example of a possible error reply.\n\n### Versioning\n\n```\nGET /api/foo\nAccept: application/json; version=1\n```\n\nYou can pass a `version=x` to the Accept request header. [Info here](https://github.com/interagent/http-api-design#version-with-accepts-header)\n\n### Authentication\n\n```\ncurl -is https://$TOKEN@api.example.com/\n```\n\n### Methods\n\n| Request              | Description                   |\n| -------------------- | ----------------------------- |\n| `GET /articles/1`    | read, returns _200_           |\n| `PUT /articles/1`    | edit (or path), returns _200_ |\n| `DELETE /articles/1` | delete, returns _200_         |\n| `POST /articles`     | create, returns _201_         |\n| `GET /articles`      | list, returns _200_           |\n\n### References\n\n* [interagent/http-api-design](https://github.com/interagent/http-api-design) _(github.com)_\n"
  },
  {
    "path": "riot.md",
    "content": "---\ntitle: Riot.js\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\nRiot is a UI library for JavaScript.\n\n- <https://riot.js.org/>\n\n### Tags\n\n```js\n/* tag-name.tag */\n<tag-name>\n  <div>\n    hello {name}\n  </div>\n\n  this.name = opts.name\n</tag-name>\n```\n\n```html\n<!-- in html -->\n<tag-name>\n<script>riot.mount('*')</script>\n<script>riot.mount('tag-name')</script>\n<script>riot.mount('tag-name', { title: 'my app', ... })</script>\n```\n\n### Expressions\n\n```\n{value}\n{value || 'its a js expression'}\n\n<input checked={null}>   /* null values ignore the tag */\n<p class={ selected: true }>\n```\n\n### Loops\n\n```\n<li each={movies}>{title}</li>\n```\n\n### Conditional\n```\n<div if={error}>\n<div show={error}> /* show using display: '' */\n<div hide={error}> /* hide using display: none */\n```\n\n### Events\n\n```js\n<button onclick={go}>\n\nthis.go = function (e) { ... }\n```\n\n## API\n\n```js\nthis.update()\nthis.update({ data: 'hi' }\n\nthis.unmount()\nthis.unmount(true) // keep parent tag\n\nriot.update() // update all\n```\n\n## Nesting\n\n### Nesting\n\n```\n<my-tag>\n  <child></child>\n  var child = this.tags.child\n</my-tag>\n```\n\n### Names\n\n```\n<my-tag>\n  <child name='xyz'></child>\n  var child = this.tags.xyz\n</my-tag>\n```\n\n## Nested HTML\n\n### Yield\n\n```js\n<yield/>\n```\n\n### Yield to/from\n\n```js\n<post>\n  <yield to='title'>Hello</yield>\n  <yield to='body'>Hey there world</yield>\n</post>\n```\n\n```js\n<post>\n  <yield from='title'/>\n  <yield from='body'/>\n</post>\n```\n\n## Router\n\n```js\nriot.route('customers/*/edit', (id) => {\n})\nriot.route('customers/234/edit')\nriot.route.start()\nriot.route.start(true) // exec the current url\n```\n\n## Lifecycle\n\n```js\nthis.on('before-mount', function() {\n// before the tag is mounted\n})\n\nthis.on('mount', function() {\n// right after the tag is mounted on the page\n})\n\nthis.on('update', function() {\n// allows recalculation of context data before the update\n})\n\nthis.on('updated', function() {\n// right after the tag template is updated\n})\n\nthis.on('before-unmount', function() {\n// before the tag is removed\n})\n\nthis.on('unmount', function() {\n// when the tag is removed from the page\n})\n\n// curious about all events ?\nthis.on('all', function(eventName) {\nconsole.info(eventName)\n})\n```\n"
  },
  {
    "path": "rollup.md",
    "content": "---\ntitle: Rollup.js\ncategory: JavaScript libraries\nupdated: 2020-01-29\nauthors:\n  - github: ryanSN\nkeywords:\n  - rollup.watch\n  - bundle\n  - rollup.config.js\nintro: |\n  [Rollup](https://rollupjs.org/) Rollup is a module bundler for JavaScript which compiles small pieces of code into something larger and more complex, such as a library or application.\n---\n\n### Basic config\n\n#### rollup.config.js\n\n```js\nexport default {\n  input: 'src/main.js',\n  output: {\n    file: 'bundle.js',\n    format: 'cjs'\n  }\n}\n```\n#### Terminal\n\n```bash\nnpm install -D rollup\n```\n\n| Command                                | Description         |\n| ---                                    | ---                 |\n| `rollup -c -o bundle.js`               | bundle using config |\n| `rollup main.js --o bundle.js --f cjs` | bundle              |\n| `rollup --watch`                       | bundle continuously |\n\nYou may need to use `./node_modules/.bin/rollup` as a command if you did not install rollup globally.\n\n### Multiple outputs\n\n#### rollup.config.js\n\n```js\nexport default [\n  {\n    input: 'src/main.js',\n    output: {\n      file: __dirname + '/public/main.js',\n      format: 'cjs',\n      name: 'main'\n    }\n  },\n  {\n    input: 'src/vendor.js',\n    output: {\n      file: __dirname + 'public/vendor.js',\n      format: 'cjs',\n      name: 'vendor'\n    }\n  }\n]\n```\n\nThis creates `main.js` and `vendor.js`.\n\n## Using plugins\n\n### Plugins\n\n#### Terminal\n\n```bash\nnpm install -D @rollup/plugin-json\n```\n\n#### rollup.config.js\n\n```js\nimport json from '@rollup/plugin-json'\n\nexport default {\n  input: 'src/main.js',\n  output: {\n    file: 'bundle.js',\n    format: 'cjs'\n  },\n  plugins: [ json() ]\n}\n\n```\n\n### npm packages\n\n#### Terminal\n```bash\nnpm install -D @rollup/plugin-node-resolve\n```\n\n#### rollup.config.js\n```js\nimport resolve from '@rollup/plugin-node-resolve'\n\nexport default {\n  input: 'src/main.js',\n  output: {\n    file: 'bundle.js',\n    format: 'cjs'\n  },\n  plugins: [ resolve() ]\n}\n```\n\nWhen you run a npm run build, no warning is emitted and contains the imported modules.\n\n### Peer dependencies\n\n#### Terminal\n\n```bash\nnpm install -D @rollup/plugin-node-resolve\n```\n\n#### rollup.config.js\n\n```js\nimport resolve from '@rollup/plugin-node-resolve'\n\nexport default {\n  input: 'src/main.js',\n  output: {\n    file: 'bundle.js',\n    format: 'cjs'\n  },\n  plugins: [resolve({\n    // pass custom options to the resolve plugin\n    customResolveOptions: {\n      moduleDirectory: 'node_modules'\n    }\n  })],\n  // indicate which modules should be treated as external\n  external: ['lodash']\n}\n```\n\n### Babel\n\n#### Terminal\n\n```bash\nnpm install -D @rollup/plugin-babel\n```\n\n#### rollup.config.js\n\n```js\nimport resolve from '@rollup/plugin-node-resolve'\nimport babel from '@rollup/plugin-babel'\n\nexport default {\n  input: 'src/main.js',\n  output: {\n    file: 'bundle.js',\n    format: 'cjs'\n  },\n  plugins: [\n    resolve(),\n    babel({\n      exclude: 'node_modules/**' // only transpile our source code\n    })\n  ]\n}\n```\n\n#### src/.babelrc\n\n```js\n{\n  \"presets\": [\n    [\"latest\", {\n      \"es2015\": {\n        \"modules\": false\n      }\n    }]\n  ],\n  \"plugins\": [\"external-helpers\"]\n}\n```\n"
  },
  {
    "path": "ronn.md",
    "content": "---\ntitle: Ronn\ncategory: Ruby libraries\nupdated: 2017-10-15\nweight: -1\nprism_languages: [bash, ruby, json, markdown]\nintro: |\n  Ronn generates Man pages. See [ronn(1)](https://rtomayko.github.io/ronn/ronn.1.html), [ronn-format(7)](https://rtomayko.github.com/ronn/ronn-format.7.html). Also see it on GitHub: [rtomayko/ronn](httpss://github.com/rtomayko/ronn).\n---\n\n## Getting started\n{: .-left-reference}\n\n### Installation\n\n#### Installation\n\n```bash\ngem install ronn\n```\n\n#### Usage\n\n```bash\nronn foo.1.md        # creates foo.1.html\nronn -r foo.1.md     # creates foo.1 (--roff)\nronn -r -h foo.1.md  # builds --roff and --html\nronn -m foo.1.md     # view as manpage\n```\n\nRonn is a Ruby gem.\n\n### Basic template\n\n```markdown\nname(1) -- short, single-sentence description\n=============================================\n\n## SYNOPSIS\n\n`name` [<optional>...] <flags>\n\n## DESCRIPTION\n\nA normal paragraph. This can span multiple lines and is terminated with two\nor more line endings just like Markdown.\n\n## OPTIONS\n\n * `-h`, `--help` :\n   Displays the help screen.\n\n * `--version` : \n   Displays version information.\n\n## EXAMPLES\n\nIndent examples with 4 spaces.\n\n    $ ls\n    $ ls -la\n\n## COPYRIGHT\n\n**PROJECTNAME** is copyright (c) 2015, Rico Sta. Cruz. Released under the MIT\nlicense.\n\n## SEE ALSO\n\nronn-format(7), ronn(1)\n```\n\n## Formatting tags\n\n### Inline\n\n#### Bold\n\n```\n`code`\n**strong**\n```\n\n#### Underline\n\n```\n<variable>\n_emphasis_\n*emphasis*\n```\n\n### Linking\n\n#### Manual references\n\n```\nsh(1)\nmarkdown(7)\n```\n\n#### Sections\n\n```\n[STANDARDS][]\n[SEE ALSO][]\n[DIFFERENT TEXT][#SEE-ALSO]\n```\n\n#### URL links\n\n```\n[URL link](https://github.com/rstacruz)\n<https://github.com>\n```\n\n## Frequently-used sections\n{: .-one-column}\n\n### Sections\n\n- `## SYNOPSIS`\n- `## DESCRIPTION`\n- `## OPTIONS`\n- `## SYNTAX`\n- `## ENVIRONMENT`\n- `## RETURN VALUES`\n- `## STANDARDS`\n- `## SECURITY CONSIDERATIONS`\n- `## BUGS`\n- `## HISTORY`\n- `## AUTHOR`\n- `## COPYRIGHT`\n- `## SEE ALSO`\n{: .-four-column}\n\n## Other CLI options\n\n### Options\n\n```bash\n--pipe                       # write to stdout\n--server, -S                 # serve in http://localhost:1207\n```\n\n```bash\n--html, -5                   # default\n--fragment, -f               # html without header/title/footer\n```\n\n```bash\n--style=toc,80c              # toc (table of contents)\n                             # 80c (use 80c instead of 100c)\n                             # print (include print stylesheet)\n                             # dark\n```\n\n```bash\n--manual=\"MY MANUAL\"         # shown on top-center\n--organization=\"RONN 0.7.0\"  # shown on bottom-left\n--date=\"YYYY-MM-DD\"          # shown on bottom-center\n```\n\n## Sections\n\n| Section | Description                                   |\n| ---     | ---                                           |\n| `1`     | General commands                              |\n| `2`     | System calls                                  |\n| `3`     | C standard lib                                |\n| `4`     | Special files (/dev) and drivers              |\n| `5`     | File formats                                  |\n| `6`     | Games                                         |\n| `7`     | Misc                                          |\n| `8`     | System administration commands and procedures |\n\nSee [Man page sections](https://www.december.com/unix/ref/mansec.html) (december.com).\n\n## Using with npm\n\n### npm scripts\n\nPlace manual files in `man/xxx.1.md`, then in package.json:\n{: .-setup}\n\n```json\n\"scripts\": {\n  \"prepublish\": \"npm run build-man\",\n  \"build-man\": \"if which ronn; then ronn man/*.md --html --roff --style=toc,80c --organization=\\\"@rstacruz\\\"; fi\"\n},\n\"directories\": {\n  \"man\": \"man\"\n}\n```\n\n### marked-man\n\n```\nnpm install -g marked-man\nmarked-man foo.1.md > foo.1\n```\n\n#### Differences\n\n* No definition lists\n* Can't use `<br>`\n\nSee [marked-man](https://github.com/kapouer/marked-man).\n\n"
  },
  {
    "path": "rspec-rails.md",
    "content": "---\ntitle: Rspec-rails\ncategory: Ruby\n---\n\n### About\n{: .-intro}\n\nRSpec is a Ruby library for testing. [rspec-rails](https://github.com/rspec/rspec-rails) is its Rails integration.\n\n- <https://rspec.info/>\n- <https://github.com/rspec/rspec-rails>\n\n### Spec tasks\n\n    rake spec:controllers\n    rake spec:helpers\n    rake spec:lib\n    rake spec:mailers\n    rake spec:models\n    rake spec:requests\n    rake spec:routing\n    rake spec:views\n\n### Models\n\n```rb\n# spec/models/*.rb\ndescribe MyModel do\nend\n```\n\n### Controllers\n\n```rb\n# spec/controllers/*.rb\ndescribe MyController do\n  describe \"POST update\" do\n    render_views #optional\n\n    it \"works\" do\n      post :update, { user: { name: \"john\" } }\n\n      controller\n      controller.send ...\n\n      response\n      expect(response).to be_success\n      expect(response).to have_http_status(200)\n      expect(response).to render_template(\"index\")\n      expect(response).to redirect_to '/..'\n\n      expect(assigns :article).to eq article\n\n      response.status\n    end\n  end\nend\n```\n\n### Request\n\n```js\n# spec/requests/*.rb\ndescribe \"home page\" do\n  it \"displays the user's username after successful login\" do\n    get \"/login\"\n    post \"/login\", username: \"jdoe\", password: \"secret\"\n\n    expect(response.status).to eql 200\n    expect(response).to redirect_to(...)\n    expect(response).to render_template(:show)\n    expect(response.body).to include 'hello'\n    follow_redirect!\n  end\nend\n```\n\n### Routing\n\n```rb\n# spec/routing/*.rb\ndescribe \"routing to profiles\" do\n  it \"routes /profile/:username to profile#show for username\" do\n    expect(get: \"/profiles/jsmith\").to route_to(\n      controller: \"profiles\",\n      action: \"show\",\n      username: \"jsmith\"\n    )\n  end\n\n  it \"does not expose a list of profiles\" do\n    expect(get: \"/profiles\").not_to be_routable\n  end\nend\n```\n\n### Helpers\n\n```rb\n# spec/helpers/*.rb\ndescribe EventsHelper do\n  describe \"#link_to_event\" do\n    it \"displays the title, and formatted date\" do\n      event = Event.new(\"Ruby Kaigi\", Date.new(2010, 8, 27))\n\n      # helper is an instance of ActionView::Base configured with the\n      # EventsHelper and all of Rails' built-in helpers\n      expect(helper.link_to_event).to match /Ruby Kaigi, 27 Aug, 2010/\n    end\n  end\nend\n```\n\n### Features\n\n```rb\n# spec/features/*.rb\nfeature 'Signing in' do\n  given(:something) { \"hi\" }\n\n  background do\n    User.make email: 'hi@gmail.com'\n  end\n\n  scenario 'Signing in with credentials' do\n  end\nend\n```\n\n### Matchers\n\n```rb\nbe_a_new(Widget)  # new_record?\nrender_template(\"new\")\nrender_template(partial: 'form', locals: {...})\nredirect_to(widgets_path)\nroute_to(..)\nbe_routable\nhave_http_status(500)\nhave_http_status(:created)\n```\n\n### Time helpers\n\n```\ntravel_to Time.new(2014, 11, 14, 01, 04, 44)\n...\ntravel_back\n\ntravel_to Time.new(2014, 11, 14, 01, 04, 44) do\n  ...\nend\n```\n"
  },
  {
    "path": "rspec.md",
    "content": "---\ntitle: RSpec\ncategory: Ruby\n---\n\n### About\n{: .-intro}\n\nRSpec is a Ruby library for testing.\n\n- <https://rspec.info/>\n\n### Invoking tests\n\n```sh\nrake -T spec      # List spec tasks\n\nrake spec         # Run all\n\nrake spec/models/mymodel_spec.rb\nrake spec/models/mymodel_spec.rb:27\n```\n\n## Writing tests\n\n```rb\ndescribe \"A User (in general)\" do\n  include UserSpecHelper\n\n  subject { Person.new }\n\n  let(:admin) { Person.new(role: :admin) }\n\n  context \"setter methods\" do\n    it \"should do this\" do\n      pending \"some other thing\"\n\n      expect(subject.name).to eq 'x'\n    end\n  end\nend\n```\n\n### Before/after\n\n```rb\nbefore :each do\n  # before all tests\nend\n\nbefore :all do\n  # before this suite\nend\n\nafter : all do\n  # after this suite\nend\n```\n\n### Subjects\n\n```rb\nsubject { CheckingAccount.new }\nit { is_expected.to be_empty }\n\n# also names: subject(:account) { ... }\n```\n\n## Expectations\n\n```rb\ntarget.should eq 1\ntarget.should_not eq 1\n\nexpect(target).to eq 1\nexpect(target).not_to eq 1\n```\n\n### Numeric\n\n```rb\nexpect(5).to be < 6\nexpect(5).to == 5\nexpect(5).to equal value\nexpect(5).to be_between(1, 10)\nexpect(5).to be_within(0.05).of value\n```\n\n### Compound expectations\n\n```rb\nexpect(1).to (be < 2).or be > 5\n```\n\nUse `or`/`and` to string multiple matchers together. See: [Compound expectations](https://relishapp.com/rspec/rspec-expectations/docs/compound-expectations)\n\n### Comparison\n\n```rb\nexpect(x).to be value\nexpect(x).to satisfy { |arg| ... }\nexpect(x).to match /regexp/\n```\n\n### Predicate\n\n```rb\nexpect(x).to be_zero    # FixNum#zero?\nexpect(x).to be_empty   # Array#empty?\nexpect(x).to have_key   # Hash#has_key?\n```\n\n### Objects\n\n```rb\nexpect(obj).to be_an_instance_of MyClass\nexpect(obj).to be_a_kind_of MyClass\nexpect(obj).to respond_to :save!\n```\n\n### Control flow\n\n```rb\nexpect { user.save! }.to raise_error\nexpect { user.save! }.to raise_error(ExceptionName, /msg/)\nexpect { user.save! }.to throw :symbol\n```\n\n### Enumerables/arrays\n\n```rb\nexpect(list).to include(<object>)\n\nexpect(list).to have(1).things\nexpect(list).to have_at_least(2).things\nexpect(list).to have_at_most(3).things\n\nexpect(list).to have(2).errors_on(:field)\n\nexpect(list).to contain_exactly(1, 2)\nexpect(list).to match_array([1, 2])\n```\n\n### Change\n\n```rb\nexpect { thing.approve! }.to \\\n  change(thing, :status)\n  .from(Status::AWAITING_APPROVAL)\n  .to(Status::APPROVED)\n\nexpect { thing.destroy }.to \\\n  change(Thing, :count)\n  .by(-1)\n```\n\n## Doubles\n\n```rb\nbook = double('book')\nbook = instance_double('Book', pages: 250)\n```\n\n### Method stubs\n\n```rb\nallow(die).to receive(:roll)\nallow(die).to receive(:roll) { 3 }\nallow_any_instance_of(Die).to receive(:roll)\n\nexpect(die).to receive(:roll)\n  .with(1)\n  .with(1, true)\n  .with(boolean)\n  .with(anything)\n  .with(any_args)\n  .with(1, any_args)\n  .with(no_args)\n  .with(hash_including(a: 1))\n  .with(hash_excluding(a: 1))\n  .with(array_including(:a, :b))\n  .with(array_excluding(:a, :b))\n  .with(instance_of(Fixnum))\n  .with(kind_of(Numeric))\n  .with(<matcher>)\n\n  .once\n  .twice\n  .exactly(n).times\n  .at_least(:once)\n  .at_least(:twice)\n  .at_least(n).times\n  .at_most(:once)\n  .at_most(:twice)\n  .at_most(n).times\n```\n\nhttps://relishapp.com/rspec/rspec-mocks/docs\n\n## Spec helpers\n\n```rb\nmodule UserSpecHelper\n  def valid_user_attributes\n    { :email => \"joe@bloggs.com\",\n      :username => \"joebloggs\",\n      :password => \"abcdefg\"}\n  end\nend\n```\n\n```rb\ndescribe User do\n  include UserSpecHelper\n\n  ...\nend\n```\n"
  },
  {
    "path": "rst.md",
    "content": "---\ntitle: ReStructuredText\ncategory: Markup\n---\n\n### About\n{: .-intro}\n\nReStructuredText is a markup language for writing documents.\n\n- <https://en.wikipedia.org/wiki/ReStructuredText>\n\n### Comments\n\n    .. @theme 2010\n    .. include:: ../themes/2010/common.rst\n    .. contents::\n    .. |substitute| replace:: replacement name\n\n### Headings\n\n    Heading\n    =======\n    \n    .. class:: brief\n    \n    Hello there. |substitute| **This is bold**\n    \n    \n     - Bullet list with a link_ (or `link with words`_)\n     - Yes\n    \n    .. _link: http://link.org\n    \n### PDF page break\n\n    .. raw:: pdf\n    \n       PageBreak oneColumn\n    \n### Link targets\n    \n    Internal link target_.\n    \n    .. _target:\n    \n    This is where _target will end up in.\n    \n### Tables (?)\n    \n    .. class:: hash-table\n    \n    .. list-table::\n    \n       * - :key:`Cuisine:`\n         - :val:`French/fusion`\n       * - :key:`Number of ingredients:`\n         - :val:`8`\n       * - :key:`Preparation time:`\n         - :val:`30 hours`\n"
  },
  {
    "path": "rsync.md",
    "content": "---\ntitle: Rsync\ncategory: CLI\nweight: -1\n---\n\n### Basic example\n{: .-prime}\n\n```bash\n# syncing folder src into dest:\nrsync -avz ./src /dest\n# syncing the content of src into dest:\nrsync -avz ./src/ /dest\n```\n\n### OSX\n\n```bash\n--exclude '.Trashes'\n--exclude '.Spotlight-V100'\n--exclude '.fseventsd'\n```\n\n### Transfer options\n\n```bash\n-z, --compress\n-n, --dry-run\n    --partial   # allows resuming of aborted syncs\n    --bwlimit=RATE    # limit socket I/O bandwidth\n```\n\n### Display options\n\n```bash\n-q, --quiet\n-v, --verbose\n    --stats\n-h, --human-readable\n    --progress\n-P                     # same as --partial --progress\n```\n\n### Skipping options\n\n```bash\n-u, --update     # skip files newer on dest\n-c, --checksum   # skip based on checksum, not mod-time & size\n```\n\n### Backup options\n\n```bash\n-b, --backup           # backup with suffix\n    --suffix=SUFFIX    # default ~ without --backup-dir\n    --backup-dir=DIR\n```\n\n### Include options\n\n```bash\n--exclude=PATTERN\n--include=PATTERN\n```\n\n```bash\n--exclude-from=FILE\n--include-from=FILE\n--files-from=FILE    # read list of filenames from FILE\n```\n\n```bash\n-C, --cvs-exclude    # exclude from local/global .cvsignore\n```\n\n### Archive options\n\n```bash\n-a, --archive    # archive (-rlptgoD)\n```\n\n```bash\n-r, --recursive\n-l, --links      # copy symlinks as links\n-p, --perms      # preserve permissions\n-t, --times      # preserve times\n-g, --group      # preserve group\n-o, --owner      # preserve owner\n-D               # same as --devices --specials\n```\n\n```bash\n--delete         # Delete extra files\n```\n"
  },
  {
    "path": "rtorrent.md",
    "content": "---\ntitle: rTorrent\ncategory: CLI\nintro: |\n  [rTorrent](https://rakshasa.github.io/rtorrent/) is a command-line torrent application. Here are some shortcut keys.\n---\n\n## Shortcuts\n{: .-three-column}\n\n### Global\n\n| `^q` | Quit |\n{: .-shortcuts}\n\n### Main view\n\n| Shortcut | Description |\n| --- | --- |\n| `bksp` | Add torrent |\n| --- | --- |\n| `->` | View download |\n| --- | --- |\n| `1` _-_ `7` | Change view |\n| --- | --- |\n| `^S` | Start download |\n| `^D` | Stop download (or remove stopped) |\n| `^K` | Close a torrent |\n| --- | --- |\n| `+` _/_ `-` | Change priority |\n{: .-shortcuts}\n\n### Throttling\n\n#### Upload\n\n| `a` _/_ `s` _/_ `d` | Increase upload throttle by 1/5/50 KB   |\n| `z` _/_ `x` _/_ `c` | Decrease upload throttle by 1/5/50 KB   |\n{: .-shortcuts}\n\n#### Download\n\n| `A` _/_ `S` _/_ `D` | Increase download throttle by 1/5/50 KB |\n| `Z` _/_ `X` _/_ `C` | Decrease download throttle by 1/5/50 KB |\n{: .-shortcuts}\n\n### Download view\n\n| `1` _/_ `2` | Adjust max uploads |\n| `3` _/_ `4` | Adjust min peers   |\n| `5` _/_ `6` | Adjust max peers   |\n{: .-shortcuts}\n\n### File list view\n\n| `space` | Change priority |\n{: .-shortcuts}\n\n## Also see\n\n- [rTorrent website](https://rakshasa.github.io/rtorrent/) _(rakshasa.github.io)_\n- [rTorrent wiki](https://github.com/rakshasa/rtorrent/wiki) _(github.com)_\n"
  },
  {
    "path": "ruby.md",
    "content": "---\ntitle: Ruby\ncategory: Ruby\ntags: [WIP]\nintro: |\n  Quick reference to some features of the Ruby programming language.\n---\n\n### Reference\n{:.-one-column}\n\n| Code                    | Description                                               |\n| ----------------------- | --------------------------------------------------------- |\n| `$!`                    | latest error message                                      |\n| `$@`                    | location of error                                         |\n| `$_`                    | string last read by gets                                  |\n| `$.`                    | line number last read by interpreter                      |\n| `$&`                    | string last matched by regexp                             |\n| `$~`                    | the last regexp match, as an array of subexpressions      |\n| `$n`                    | the nth subexpression in the last match (same as `$~[n]`) |\n| `$=`                    | case-insensitivity flag                                   |\n| `$/`                    | input record separator                                    |\n| `$\\`                    | output record separator                                   |\n| `$0`                    | the name of the ruby script file                          |\n| `$*` (or `ARGV`)        | the command line arguments                                |\n| `$$`                    | interpreter's process ID                                  |\n| `$?`                    | exit status of last executed child process                |\n| `$-i` `$-l` `$-p` `$-v` | Command line switches                                     |\n| `$-v` (or `$VERBOSE`)   | verbose mode                                              |\n"
  },
  {
    "path": "ruby21.md",
    "content": "---\ntitle: Ruby 2.1\ncategory: Ruby\ntags: [Archived]\nintro: |\n  Quick reference to the [new features in Ruby 2.1](https://www.ruby-lang.org/).\n---\n\n### Named arguments with defaults\n\n```ruby\n# length is required\ndef pad(num, length:, char: \"0\")\n  num.to_s.rjust(length, char)\nend\n```\n\n```ruby\npad(42, length: 6) #=> \"000042\"\npad(42) #=> #<ArgumentError: missing keyword: length>\n```\n\n### Module.prepend\n\n```ruby\nprepend(\n  Module.new do\n    define_method ...\n  end\n)\n```\n\n### References\n\n- http://globaldev.co.uk/2013/03/ruby-2-0-0-in-detail\n- http://globaldev.co.uk/2014/05/ruby-2-1-in-detail\n"
  },
  {
    "path": "rubygems.md",
    "content": "---\ntitle: Rubygems\ncategory: Ruby\nintro: |\n  A quick reference to common [rubygems](https://rubygems.org) CLI commands.\n---\n\n### Building and publishing\n\n```sh\ngem build *.gemspec         # Build a gem\ngem install *.gem           # Install locally\ngem push *.gem              # Upload to rubygems.org\ngem yank foogem -v 0.0.1    # Take it back\n```\n\n### Querying\n\n```sh\ngem owner foogem -a rico@ricostacruz.com\n\ngem list                    # List local gems\ngem which rake              # Point to where lib/rake.rb is\ngem search -r rails         # [remote] Search for gems\n```\n\n### Opening a gem\n\n```sh\n# https://github.com/fnando/gem-open\ngem open foogem\nGEM_EDITOR=\"vim\" gem open foogem\n```\n\n### Changing to a directory\n\n```sh\ncd $(basename `gem which rake`)  # Go to a gem's path\n```\n"
  },
  {
    "path": "sass.md",
    "content": "---\ntitle: Sass\ncategory: CSS\ntags: [Featured]\nupdated: 2020-07-03\nweight: -5\nkeywords:\n  - Variables\n  - mixins\n  - darken()\n  - adjust-color()\n  - \"@for @each @while @if @else\"\n  - \"$list: (a b c)\"\n  - \"$map: (a: b, c: d)\"\n---\n\n## Basics\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\nThis is a quick reference to [Sass stylesheets](https://sass-lang.com).\n\n- [Sass documentation](https://sass-lang.com/documentation) _(sass-lang.com)_\n\n### Variables\n\n```scss\n$red: #833;\n```\n\n```scss\nbody {\n  color: $red;\n}\n```\n\n### Nesting\n\n```scss\n.markdown-body {\n  a {\n    color: blue;\n    &:hover {\n      color: red;\n    }\n  }\n}\n```\n\n#### to properties\n```scss\ntext: {\n  align: center;          // like text-align: center\n  transform: uppercase;   // like text-transform: uppercase\n}\n```\n\n### Comments\n\n```scss\n/* Block comments */\n// Line comments\n```\n\n### Mixins\n\n```scss\n@mixin heading-font {\n  font-family: sans-serif;\n  font-weight: bold;\n}\n```\n\n```scss\nh1 {\n  @include heading-font;\n}\n```\n\n#### with parameters\n\n```scss\n@mixin font-size($n) {\n  font-size: $n * 1.2em;\n}\n```\n\n```scss\nbody {\n  @include font-size(2);\n}\n```\n\n#### with default values\n\n```scss\n@mixin pad($n: 10px) {\n  padding: $n;\n}\n```\n\n```scss\nbody {\n  @include pad(15px);\n}\n```\n\n#### with a default variable\n\n```scss\n// Set a default value\n$default-padding: 10px;\n```\n\n```scss\n@mixin pad($n: $default-padding) {\n  padding: $n;\n}\n```\n\n```scss\nbody {\n  @include pad(15px);\n}\n```\n\n### Extend\n\n```scss\n.button {\n  ···\n}\n```\n\n```scss\n.push-button {\n  @extend .button;\n}\n```\n\n### Composing\n\n```scss\n@import './other_sass_file';\n@use './other_sass_file';\n```\n\nThe `@import` rule is discouraged because will get eventually [removed from the language](https://sass-lang.com/documentation/at-rules/import).  \nInstead, we should use the [`@use` rule](https://sass-lang.com/documentation/at-rules/use).  \nThe `.scss` or `.sass` extension is optional.\n\n## Color functions\n\n### rgba\n\n```scss\nrgb(100, 120, 140)\nrgba(100, 120, 140, .5)\nrgba($color, .5)\n```\n\n### Mixing\n\n```scss\nmix($a, $b, 10%)   // 10% a, 90% b\n```\n\n### Modifying HSLA\n\n```scss\ndarken($color, 5%)\nlighten($color, 5%)\n```\n\n```scss\nsaturate($color, 5%)\ndesaturate($color, 5%)\ngrayscale($color)\n```\n\n```scss\nadjust-hue($color, 15deg)\ncomplement($color)    // like adjust-hue(_, 180deg)\ninvert($color)\n```\n\n```scss\nfade-in($color, .5)   // aka opacify()\nfade-out($color, .5)  // aka transparentize() - halves the opacity\nrgba($color, .5)      // sets alpha to .5\n```\n\n### Getting individual values\n\n#### HSLA\n\n```scss\nhue($color)         // → 0deg..360deg\nsaturation($color)  // → 0%..100%\nlightness($color)   // → 0%..100%\nalpha($color)       // → 0..1 (aka opacity())\n```\n\n#### RGB\n\n```scss\nred($color)         // → 0..255\ngreen($color)\nblue($color)\n```\n\nSee: [hue()](http://sass-lang.com/documentation/Sass/Script/Functions.html#hue-instance_method), [red()](http://sass-lang.com/documentation/Sass/Script/Functions.html#red-instance_method)\n\n### Adjustments\n\n```scss\n// Changes by fixed amounts\nadjust-color($color, $blue: 5)\nadjust-color($color, $lightness: -30%)   // like darken(_, 30%)\nadjust-color($color, $alpha: -0.4)       // like fade-out(_, .4)\nadjust-color($color, $hue: 30deg)        // like adjust-hue(_, 15deg)\n```\n\n```scss\n// Changes via percentage\nscale-color($color, $lightness: 50%)\n```\n\n```scss\n// Changes one property completely\nchange-color($color, $hue: 180deg)\nchange-color($color, $blue: 250)\n```\n\nSupported: `$red` `$green` `$blue` `$hue` `$saturation` `$lightness` `$alpha`\n\n## Other functions\n\n### Strings\n\n```scss\nunquote('hello')\nquote(hello)\n```\n\n```scss\nto-upper-case(hello)\nto-lower-case(hello)\n```\n\n```scss\nstr-length(hello world)\nstr-slice(hello, 2, 5)      // \"ello\" - it's 1-based, not 0-based\nstr-insert(\"abcd\", \"X\", 1)  // \"Xabcd\"\n```\n\n### Units\n\n```scss\nunit(3em)        // 'em'\nunitless(100px)  // false\n```\n\n### Numbers\n\n```scss\nfloor(3.5)\nceil(3.5)\nround(3.5)\nabs(3.5)\n```\n\n```scss\nmin(1, 2, 3)\nmax(1, 2, 3)\n```\n\n```scss\npercentage(.5)   // 50%\nrandom(3)        // 0..3\n```\n\n### Misc\n\n```scss\nvariable-exists(red)    // checks for $red\nmixin-exists(red-text)  // checks for @mixin red-text\nfunction-exists(redify)\n```\n\n```scss\nglobal-variable-exists(red)\n```\n\n```scss\nselector-append('.menu', 'li', 'a')   // .menu li a\nselector-nest('.menu', '&:hover li')  // .menu:hover li\nselector-extend(...)\nselector-parse(...)\nselector-replace(...)\nselector-unify(...)\n```\n\n## Feature checks\n\n### Feature check\n\n```scss\nfeature-exists(global-variable-shadowing)\n```\n\n### Features\n\n* global-variable-shadowing\n* extend-selector-pseudoclass\n* units-level-3\n* at-error\n\n## Loops\n\n### For loops\n\n```scss\n@for $i from 1 through 4 {\n  .item-#{$i} { left: 20px * $i; }\n}\n```\n\n### Each loops (simple)\n\n```scss\n$menu-items: home about services contact;\n\n@each $item in $menu-items {\n  .photo-#{$item} {\n    background: url('images/#{$item}.jpg');\n  }\n}\n```\n\n### Each loops (nested)\n```scss\n$backgrounds: (home, 'home.jpg'), (about, 'about.jpg');\n\n@each $id, $image in $backgrounds {\n  .photo-#{$id} {\n    background: url($image);\n  }\n}\n```\n\n### While loops\n\n```scss\n$i: 6;\n@while $i > 0 {\n  .item-#{$i} { width: 2em * $i; }\n  $i: $i - 2;\n}\n```\n\n## Other features\n\n### Conditionals\n\n```scss\n@if $position == 'left' {\n   position: absolute;\n   left: 0;\n}\n@else if $position == 'right' {\n   position: absolute;\n   right: 0;\n}\n@else {\n   position: static;\n}\n```\n\n### Interpolation\n\n```scss\n.#{$klass} { ... }      // Class\ncall($function-name)    // Functions\n\n@media #{$tablet}\nfont: #{$size}/#{$line-height}\nurl(\"#{$background}.jpg\")\n```\n\n### Lists\n\n```scss\n$list: (a b c);\n\nnth($list, 1)  // starts with 1\nlength($list)\n\n@each $item in $list { ... }\n```\n\n### Maps\n\n```scss\n$map: (key1: value1, key2: value2, key3: value3);\n\nmap-get($map, key1)\n```\n\n## See also\n{: .-one-column}\n\n- <http://sass-lang.com/documentation/Sass/Script/Functions.html>\n- <http://sass-lang.com/documentation/file.SASS_REFERENCE.html#sassscript>\n"
  },
  {
    "path": "saucelabs.md",
    "content": "---\ntitle: Saucelabs\n---\n\n### Getting started\n\nSign up for opensauce:\n{: .-setup}\n\n- http://saucelabs.com/opensauce\n\nInstall [zuul](https://npmjs.com/package/zuul):\n\n```\nnpm i -g zuul\n```\n\nConfigure zuul:\n\n```yml\n# ~/.zuulrc\nsauce_username: me\nsauce_key: abc12348-e3e2-...\n```\n\nAdd `.zuul.yml` to your project:\n\n```yml\n# .zuul.yml\nui: mocha-bdd\nbrowsers:\n  - name: chrome\n    version: latest\n  - name: ie\n    version: 6..latest\n  - name: firefox\n    version: latest\n```\n\nTry to run tests:\n\n```\nzuul test/test.js\nzuul --local test/test.js\n```\n"
  },
  {
    "path": "scp.md",
    "content": "---\ntitle: scp\ncategory: CLI\nupdated: 2018-12-25\nauthors:\n  - github: vastpeng\n---\n\n### Usage\n{: .-prime}\n\n```bash\nscp <options> source_path destination_path\n```\n\n### Conditions\n\n```bash\n-r      # transfer directory \n-v      # see the transfer details\n-C      # copy files with compression\n-l 800  # limit bandwidth with 800\n-p      # preserving the original attributes of the copied files\n-P      # connection port\n-q      # hidden the output\n```\n\n### Commands\n\n```bash\n$ scp file user@host:/path/to/file                        # copying a file to the remote system using scp command\n$ scp user@host:/path/to/file /local/path/to/file         # copying a file from the remote system using scp command\n```\n\n```bash\n$ scp file1 file2 user@host:/path/to/directory            # copying multiple files using scp command\n$ scp -r /path/to/directory user@host:/path/to/directory  # Copying an entire directory with scp command\n```\n"
  },
  {
    "path": "screen.md",
    "content": "---\ntitle: Screen\ncategory: CLI\nupdated: 2024-02-03\nkeywords:\n  - Screen\n  - Linux\n  - Unix\n  - CLI\n  - Command\n  - Line\nintro: |\n  Screen or GNU Screen is a terminal multiplexer. In other words, it means that you can start a screen session and then open any number of windows (virtual terminals).\n  This does not contain **all** of screen's commands and options, read [GNU's manual](https://www.gnu.org/software/screen/manual/screen.html#Commands) to see everything\n---\n\n## Basics\n{: .-three-column}\n\n### Basics\n\n| Options/Keybind           | Description                                                                              |\n| ------------------------- | ---------------------------------------------------------------------------------------- |\n| `screen -S [name]`        | Start a named session                                                                    |\n| `ctrl+a ctrl+d`           | Detach the current screen and go back to the terminal (screen session will stay running) |\n| `screen -ls` _or_ <br /> `screen -list`   | List all sessions                                                                        |\n| `screen -r [name]`        | Reattach to a screen (optionally by name)                                                |\n\n### Screens\n\n| Keybind         | Description                                                                              |\n| --------------- | ---------------------------------------------------------------------------------------- |\n| `ctrl+a c`      | Create a new screen tab inside a screen                                                  |\n| `ctrl+a [0-9]`  | Switch to a screen tab by number 0 through 9                                             |\n| `ctrl+a n`      | Go to the next screen tab                                                                |\n| `ctrl+a p`      | Go to the previous screen tab                                                            |\n| `ctrl+a k`      | Kill current screen tab                                                                  |\n\n### Visual pleasure\n\n| Keybind                         | Description                  |\n| ------------------------------- | ---------------------------- |\n| `ctrl+a S`                      | Split a screen horizontally  |\n| `ctrl+a |`                      | Split a screen vertically    |\n| `ctrl+a ctrl+I` _or_ <br /> `ctrl+a tab` | Change screen split          |\n| `ctrl+a Q`                      | Remove all screen splits     |\n| `ctrl+a C`                      | Clear the current screen tab |\n\n### Accessibility\n\n| Keybind         | Description                                         |\n| --------------- | --------------------------------------------------- |\n| `ctrl+a A`      | Rename current screen tab                           |\n| `ctrl+a k`      | Kill current screen tab                             |\n| `ctrl+a ctrl+a` | Switch to last used screen tab                      |\n| `ctrl+a a`      | Send `ctrl+a` to current screen tab                 |\n| `ctrl+a ctrl+w` | See a list of all screen tabs in the current screen |\n"
  },
  {
    "path": "sed.md",
    "content": "---\ntitle: sed\ncategory: CLI\nintro: |\n  Here's some hints on using sed.\n---\n\n### Replacements\n\n#### In-place replacement (GNU)\n\n```bash\nsed -i -e 's/foo/bar/' example.md\n```\n\nIn GNU sed: use `-i` without arg.\n\n#### In-place replacement (BSD)\n\n```bash\nsed -i '' -e 's/foo/bar/' example.md\n```\n\nIn OSX, `-i ''` is required.\n\n#### In-place Multiple replacements\n\n```bash\nsed -i 's/match1/replace1/g; s/match2/replace2/g' \\\n\n```\n\nreplace different matches with different values\n\n```bash\nsed -i 's/\\(MATCH1\\|MATCH2\\)/VALUE/g' \\\n\n```\n\nreplace multiple matches with the same value\n\n## File regions\n{:.-three-column}\n\n### Print until a certain line is met\n\n```bash\nsed '/begin api/q'\n```\n\n### Print until a certain line is met, but not that line\n\n```bash\nsed '/^# begin/,$d'\n```\n\n### Print everything after a given line\n\n```bash\nsed -n '/end api/,$p'\n```\n\nPrint after a given line is found.\n\n### Print everything except matching\n\n```bash\nsed -n '/regex/!p'\n```\n\nPrint everything except lines matching regex. Useful for printing files with comments.\n\n#### Printing REGEX ranges\n\n```bash\nsed -n -e '/^START$/,/^END$/p'\n```\n\nsuppress output and print REGEX range\ninclude (^START$,^END$) lines.\n\n**OR** without \"-n\" (same result)\n\n```bash\nsed -e '/^START$/,/^END$/p;d'\n```\n\nprint REGEX range and delete other\noutput, the [;] character means run another\nexpression on the input file which is 'd' stands for delete .\n\n### Append a text after a specific line number\n\n```bash\nsed -e \"1a ## HEADING 02:\" README.md\n```\n\nthis appends \"## HEADING 02:\" after the first line in the file README.md\nand print the result to stdout replace -e with -i to write the file .\n\n### Insert text before a specific line number\n\n```bash\nsed -e \"1i # HEADING 01:\" README.md\n```\n\nthe same as appending but before the first line.\n\n### Deleting text\n\n#### With line number\n\n```bash\nsed -e \"1,5d\" README.md\n```\n\ndelete a RANGE (i.e. including lines 1 to 5)\n\n```bash\nsed -e '1,5!d' README.md\n```\n\ndelete everything (i.e. excluding lines 1 to 5)\nit is better to quote sed expressions with single quotes\nespecially when there is a [!] character.\n\n#### With REGEX matching\n\n```bash\nsed -e \"/REGEX/Id\" README.md\n```\n\ndelete lines with /REGEX/ matched\n/I is for insensitive search\n\n```bash\nsed -e '/REGEX/Ip;d' README.md\n```\n\nthis invert the previous sed command\ndelete everything (excluding lines with REGEX)\n"
  },
  {
    "path": "semver.md",
    "content": "---\ntitle: Semver\nupdated: 2019-12-31\nweight: -3\n---\n\n### Semver\n\nGiven a version number `MAJOR.MINOR.PATCH`:\n{: .-setup}\n\n| `MAJOR` | incompatible API changes                 |\n| `MINOR` | add functionality (backwards-compatible) |\n| `PATCH` | bug fixes (backwards-compatible)         |\n\n### Simple ranges\n\n      1.2.3\n     =1.2.3\n     >1.2.3\n     <1.2.3\n    >=1.2.3\n\nNote that suffixed versions (`1.2.3-rc1`) are not matched.\n\n### Ranges\n\n| Range    | Description         | Notes              |\n| ---      | ---                 | ---                |\n| `~1.2.3` | is `>=1.2.3 <1.3.0` |                    |\n| ---      | ---                 | ---                |\n| `^1.2.3` | is `>=1.2.3 <2.0.0` |                    |\n| `^0.2.3` | is `>=0.2.3 <0.3.0` | (0.x.x is special) |\n| `^0.0.1` | is  `=0.0.1`        | (0.0.x is special) |\n| ---      | ---                 | ---                |\n| `^1.2`   | is `>=1.2.0 <2.0.0` | (like ^1.2.0)      |\n| `~1.2`   | is `>=1.2.0 <1.3.0` | (like ~1.2.0)      |\n| ---      | ---                 | ---                |\n| `^1`     | is `>=1.0.0 <2.0.0` |                    |\n| `~1`     | same                |                    |\n| `1.x`    | same                |                    |\n| `1.*`    | same                |                    |\n| `1`      | same                |                    |\n| ---      | ---                 | ---                |\n| `*`      | any version         |                    |\n| `x`      | same                |                    |\n{: .-shortcuts}\n\n### Hyphenated ranges\n\n| Range              | Description           |\n| ---                | ---                   |\n| `1.2.3 - 2.3.4`    | is `>=1.2.3 <=2.3.4`  |\n\n#### Partial right\n\n| Range              | Description           |\n| ---                | ---                   |\n| `1.2.3 - 2.3`      | is `>=1.2.3 <2.4.0`   |\n| `1.2.3 - 2`        | is `>=1.2.3 <3.0.0`   |\n\n#### Partial left\n\n| Range              | Description           |\n| ---                | ---                   |\n| `1.2 - 2.3.0`      | is `1.2.0 - 2.3.0`    |\n\nWhen the right is partial (eg, `2.3`), missing pieces are assumed to be `x` (eg, `2.3.x`).\n\nWhen the left is partial (eg, `1.2`), missing pieces are assumed to be `0` (eg, `1.2.0`).\n\n### Combining ranges\n\n| Range              | Description           |\n| ---                | ---                   |\n| `>=0.14 <16`       | And (space-separated) |\n| `0.14.x || 15.x.x` | Or (pipe-separated)   |\n\n### Pre-releases\n\n    1.2.3-prerelease+build\n\n### Explanation\n\n| `^` | means \"compatible with\" |\n| `~` | means \"reasonably close to\" |\n| `0.x.x` | is for \"initial development\" |\n| `1.x.x` | means public API is defined |\n{: .-shortcuts}\n\n## References\n{: .-one-column}\n\n * <https://semver.org/>\n * <https://docs.npmjs.com/misc/semver>\n"
  },
  {
    "path": "sequel.md",
    "content": "---\ntitle: Sequel\ncategory: Ruby libraries\n---\n\n### About\n{: .-intro}\n\nSequel is a database toolkit for Ruby.\n\n- <https://github.com/jeremyevans/sequel>\n\n### Open a database\n\n```\nrequire 'rubygems'\nrequire 'sequel'\n\nDB = Sequel.sqlite('my_blog.db')\nDB = Sequel.connect('postgres://user:password@localhost/my_db')\nDB = Sequel.postgres('my_db', :user => 'user', :password => 'password', :host => 'localhost')\nDB = Sequel.ado('mydb')\n```\n\n### Open an SQLite memory database\n\nWithout a filename argument, the sqlite adapter will setup a new sqlite database in memory.\n\n```\nDB = Sequel.sqlite\n```\n\n### Logging SQL statements\n\n```\nrequire 'logger'\nDB = Sequel.sqlite '', :loggers => [Logger.new($stdout)]\n# or\nDB.loggers << Logger.new(...)\n```\n\n### Using raw SQL\n\n```\nDB.run \"CREATE TABLE users (name VARCHAR(255) NOT NULL, age INT(3) NOT NULL)\"\ndataset = DB[\"SELECT age FROM users WHERE name = ?\", name]\ndataset.map(:age)\nDB.fetch(\"SELECT name FROM users\") do |row|\n  p row[:name]\nend\n```\n\n### Create a dataset\n\n```\ndataset = DB[:items]\ndataset = DB.from(:items)\n```\n\n### Most dataset methods are chainable\n\n```\ndataset = DB[:managers].where(:salary => 5000..10000).order(:name, :department)\n```\n\n### Insert rows\n\n```\ndataset.insert(:name => 'Sharon', :grade => 50)\n```\n\n### Retrieve rows\n\n```\ndataset.each{|r| p r}\ndataset.all # => [{...}, {...}, ...]\ndataset.first # => {...}\n```\n\n### Update/Delete rows\n\n```\ndataset.filter(~:active).delete\ndataset.filter('price < ?', 100).update(:active => true)\n```\n\n### Datasets are Enumerable\n\n```\ndataset.map{|r| r[:name]}\ndataset.map(:name) # same as above\n\ndataset.inject(0){|sum, r| sum + r[:value]}\ndataset.sum(:value) # same as above\n```\n\n### Filtering (see also doc/dataset_filtering.rdoc)\n\n#### Equality\n\n```\ndataset.filter(:name => 'abc')\ndataset.filter('name = ?', 'abc')\n```\n\n#### Inequality\n\n```\ndataset.filter{value > 100}\ndataset.exclude{value <= 100}\n```\n\n#### Inclusion\n\n```\ndataset.filter(:value => 50..100)\ndataset.where{(value >= 50) & (value <= 100)}\n\ndataset.where('value IN ?', [50,75,100])\ndataset.where(:value=>[50,75,100])\n\ndataset.where(:id=>other_dataset.select(:other_id))\n```\n\n#### Subselects as scalar values\n\n```\ndataset.where('price > (SELECT avg(price) + 100 FROM table)')\ndataset.filter{price > dataset.select(avg(price) + 100)}\n```\n\n#### LIKE/Regexp\n\n```\nDB[:items].filter(:name.like('AL%'))\nDB[:items].filter(:name => /^AL/)\n```\n\n#### AND/OR/NOT\n\n```\nDB[:items].filter{(x > 5) & (y > 10)}.sql\n# SELECT * FROM items WHERE ((x > 5) AND (y > 10))\n\nDB[:items].filter({:x => 1, :y => 2}.sql_or & ~{:z => 3}).sql\n# SELECT * FROM items WHERE (((x = 1) OR (y = 2)) AND (z != 3))\n```\n\n#### Mathematical operators\n\n```\nDB[:items].filter((:x + :y) > :z).sql\n# SELECT * FROM items WHERE ((x + y) > z)\n\nDB[:items].filter{price - 100 < avg(price)}.sql\n# SELECT * FROM items WHERE ((price - 100) < avg(price))\n```\n\n### Ordering\n\n```\ndataset.order(:kind)\ndataset.reverse_order(:kind)\ndataset.order(:kind.desc, :name)\n```\n\n### Limit/Offset\n\n```\ndataset.limit(30) # LIMIT 30\ndataset.limit(30, 10) # LIMIT 30 OFFSET 10\n```\n\n### Joins\n\n```\nDB[:items].left_outer_join(:categories, :id => :category_id).sql\n# SELECT * FROM items LEFT OUTER JOIN categories ON categories.id = items.category_id\n\nDB[:items].join(:categories, :id => :category_id).join(:groups, :id => :items__group_id)\n# SELECT * FROM items INNER JOIN categories ON categories.id = items.category_id INNER JOIN groups ON groups.id = items.group_id\n```\n\n### Aggregate functions methods\n\n```\ndataset.count #=> record count\ndataset.max(:price)\ndataset.min(:price)\ndataset.avg(:price)\ndataset.sum(:stock)\n\ndataset.group_and_count(:category)\ndataset.group(:category).select(:category, :AVG.sql_function(:price))\n```\n\n### SQL Functions / Literals\n\n```\ndataset.update(:updated_at => :NOW.sql_function)\ndataset.update(:updated_at => 'NOW()'.lit)\n\ndataset.update(:updated_at => \"DateValue('1/1/2001')\".lit)\ndataset.update(:updated_at => :DateValue.sql_function('1/1/2001'))\n```\n\n### Schema Manipulation\n\n```\nDB.create_table :items do\n  primary_key :id\n  String :name, :unique => true, :null => false\n  TrueClass :active, :default => true\n  foreign_key :category_id, :categories\n  DateTime :created_at\n\n  index :created_at\nend\n\nDB.drop_table :items\n\nDB.create_table :test do\n  String :zipcode\n  enum :system, :elements => ['mac', 'linux', 'windows']\nend\n```\n\n### Aliasing\n\n```\nDB[:items].select(:name.as(:item_name))\nDB[:items].select(:name___item_name)\nDB[:items___items_table].select(:items_table__name___item_name)\n# SELECT items_table.name AS item_name FROM items AS items_table\n```\n\n### Transactions\n\n```\nDB.transaction do\n  dataset.insert(:first_name => 'Inigo', :last_name => 'Montoya')\n  dataset.insert(:first_name => 'Farm', :last_name => 'Boy')\nend # Either both are inserted or neither are inserted\n```\n\nDatabase#transaction is re-entrant:\n\n```\nDB.transaction do # BEGIN issued only here\n  DB.transaction\n    dataset << {:first_name => 'Inigo', :last_name => 'Montoya'}\n  end\nend # COMMIT issued only here\n```\n\nTransactions are aborted if an error is raised:\n\n```\nDB.transaction do\n  raise \"some error occurred\"\nend # ROLLBACK issued and the error is re-raised\n```\n\nTransactions can also be aborted by raising Sequel::Rollback:\n\n```\nDB.transaction do\n  raise(Sequel::Rollback) if something_bad_happened\nend # ROLLBACK issued and no error raised\n```\n\nSavepoints can be used if the database supports it:\n\n```\nDB.transaction do\n  dataset << {:first_name => 'Farm', :last_name => 'Boy'} # Inserted\n  DB.transaction(:savepoint=>true) # This savepoint is rolled back\n    dataset << {:first_name => 'Inigo', :last_name => 'Montoya'} # Not inserted\n    raise(Sequel::Rollback) if something_bad_happened\n  end\n  dataset << {:first_name => 'Prince', :last_name => 'Humperdink'} # Inserted\nend\n```\n\n### Miscellaneous:\n\n```\ndataset.sql # \"SELECT * FROM items\"\ndataset.delete_sql # \"DELETE FROM items\"\ndataset.where(:name => 'sequel').exists # \"EXISTS ( SELECT * FROM items WHERE name = 'sequel' )\"\ndataset.columns #=> array of columns in the result set, does a SELECT\nDB.schema(:items) => [[:id, {:type=>:integer, ...}], [:name, {:type=>:string, ...}], ...]\n```\n\n---\n\n### Documents\n\n```\nhttp://sequel.rubyforge.org/rdoc/files/doc/association_basics_rdoc.html\nhttp://sequel.rubyforge.org/rdoc/classes/Sequel/Schema/Generator.html\nhttp://sequel.rubyforge.org/rdoc/files/doc/validations_rdoc.html\nhttp://sequel.rubyforge.org/rdoc/classes/Sequel/Model.html\n```\n\n### Alter table\n\n```\ndatabase.alter_table :deals do\n  add_column :name, String\n  drop_column :column_name\n  rename_column :from, :to\n\n  add_constraint :valid_name, :name.like('A%')\n  drop_constraint :constraint\n\n  add_full_text_index :body\n  add_spacial_index [columns]\n\n  add_index :price\n  drop_index :index\n\n  add_foreign_key :artist_id, :table\n  add_primary_key :id\n  add_unique_constraint [columns]\n  set_column_allow_null :foo, false\n  set_column_default :title, ''\n\n  set_column_type :price, 'char(10)'\nend\n```\n\n### Model associations\n\n```\nclass Deal < Sequel::Model\n\n  # Us (left) <=> Them (right)\n  many_to_many  :images,\n    left_key:   :deal_id,\n    right_key:  :image_id,\n    join_table: :image_links\n\n  one_to_many   :files,\n    key:        :deal_id,\n    class:      :DataFile,\n\n  many_to_one   :parent, class: self\n  one_to_many   :children, key: :parent_id, class: self\n\n  one_to_many :gold_albums, class: :Album do |ds|\n    ds.filter { copies_sold > 50000 }\n  end\n```\n\nProvided by many_to_many\n\n```\nDeal[1].images\nDeal[1].add_image\nDeal[1].remove_image\nDeal[1].remove_all_images\n```\n\n### Validations\n\n```\ndef validate\n    super\n    errors.add(:name, 'cannot be empty') if !name || name.empty?\n\n    validates_presence [:title, :site]\n    validates_unique :name\n    validates_format /\\Ahttps?:\\/\\//, :website, :message=>'is not a valid URL'\n    validates_includes %w(a b c), :type\n    validates_integer :rating\n    validates_numeric :number\n    validates_type String, [:title, :description]\n\n    validates_integer :rating  if new?\n\n    # options: :message =>, :allow_nil =>, :allow_blank =>,\n    #          :allow_missing =>,\n\n    validates_exact_length 17, :isbn\n    validates_min_length 3, :name\n    validates_max_length 100, :name\n    validates_length_range 3..100, :name\n\n    # Setter override\n    def filename=(name)\n      @values[:filename] = name\n    end\n  end\nend\n\ndeal.errors\n```\n\n### Model stuff\n\n```\ndeal = Deal[1]\ndeal.changed_columns\ndeal.destroy  # Calls hooks\ndeal.delete   # No hooks\ndeal.exists?\ndeal.new?\ndeal.hash  # Only uniques\ndeal.keys  #=> [:id, :name]\ndeal.modified!\ndeal.modified?\n\ndeal.lock!\n```\n\n### Callbacks\n\n```\nbefore_create\nafter_create\n\nbefore_validation\nafter_validation\nbefore_save\nbefore_update\nUPDATE QUERY\nafter_update\nafter_save\n\nbefore_destroy\nDELETE QUERY\nafter_destroy\n```\n\n### Schema\n\n```\nclass Deal < Sequel::Model\n  set_schema do\n    primary_key :id\n    primary_key [:id, :title]\n    String :name, primary_key: true\n\n    String  :title\n    Numeric :price\n    DateTime :expires\n\n    unique :whatever\n    check(:price) { num > 0 }\n\n    foreign_key :artist_id\n    String :artist_name, key: :id\n\n    index :title\n    index [:artist_id, :name]\n    full_text_index :title\n\n    # String, Integer, Fixnum, Bignum, Float, Numeric, BigDecimal,\n    # Date, DateTime, Time, File, TrueClass, FalseClass\n  end\nend\n```\n\n### Unrestrict primary key\n\n```\nCategory.create id: 'travel'   # error\nCategory.unrestrict_primary_key\nCategory.create id: 'travel'   # ok\n```\n"
  },
  {
    "path": "sequelize.md",
    "content": "---\ntitle: Sequelize\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\nSequelize is an ORM for JavaScript.\n\n- <https://sequelize.org/>\n\n### API\n\n    sequelize.sync().done -> ...\n\n### Models\n\n    Project = sequelize.define('Project', {\n      title: Sequelize.STRING,\n      description: Sequelize.TEXT,\n      myDate: { type: Sequelize.DATE, defaultValue: Sequelize.NOW },\n      title: { type: Sequelize.STRING, allowNull: false },\n      id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },\n    }, {\n      classMethods: { ... },\n      instanceMethods: { ... }\n    });\n\n    Project.hasMany(Task)\n\n### Finders\n\n    Project.find(123).success (project) ->\n\n    Project.find({ where: {title: 'Hello'} })\n    Project.find({ where: {id: [1,3,4]} })\n    Project.find({ where: [\"id > ?\", 25] })\n\n    Project.find(\n      where: {title: 'a'}\n      attributes: ['id', ['name', 'title']]\n    )\n\n    .findOrCreate(...)\n\n    .findAll\n    .findAll({ where: ... })\n    .findAll({ order: 'title DESC' })\n    .findAll({ limit: 10 })\n    .findAll({ offset: 10, limit: 2 })\n\n    .count()\n\n\n### Build\n\n    item = Project.build({ ... })\n\n    item.title = '...'\n\n    item.save().success (item) ->\n\n    item.updateAttributes({ title: '...' })\n\n    item.destroy().success ->\n\n    item.values\n\n"
  },
  {
    "path": "sh-pipes.md",
    "content": "---\ntitle: \"Shell: named pipes\"\ncategory: CLI\n---\n\n### Named pipes\n\n```sh\ndiff <(ls ./old) <(ls ./new)\n```\n\nThis creates a virtual file with the contents of the output of `ls ./old`.\n\n### References\n\n* [Named pipe](https://en.wikipedia.org/wiki/Named_pipe) _(wikipedia.org)_\n"
  },
  {
    "path": "sh.md",
    "content": "---\ntitle: Shell scripting\ncategory: CLI\nredirect_to: /bash\n---\n"
  },
  {
    "path": "shelljs.md",
    "content": "---\ntitle: Shell.js\ncategory: JavaScript libraries\nupdated: 2017-10-27\nweight: -1\nintro: |\n  [ShellJS](https://github.com/shelljs/shelljs) is a portable (Windows/Linux/OS X) implementation of Unix shell commands on top of the Node.js API. \n---\n\n### Example\n\n```js\nvar shell = require('shelljs')\n```\n\n```js\nif (!shell.which('git')) {\n  shell.echo('Sorry, this script requires git')\n  shell.exit(1)\n}\n```\n\n```js\n// Copy files to release dir\nshell.rm('-rf', 'out/Release')\nshell.cp('-R', 'stuff/', 'out/Release')\n```\n\n```js\n// Replace macros in each .js file\nshell.cd('lib')\nshell.ls('*.js').forEach(function (file) {\n  shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file)\n  shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file)\n  shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\\n/, shell.cat('macro.js'), file)\n})\nshell.cd('..')\n```\n\n```js\n// Run external tool synchronously\nif (shell.exec('git commit -am \"Auto-commit\"').code !== 0) {\n  shell.echo('Error: Git commit failed')\n  shell.exit(1)\n}\n```\n\nTaken from the [Readme](https://github.com/shelljs/shelljs).\n\n### Require\n\n```js\nconst sh = require('shelljs')\n```\n\n### Paths\n\n```js\nsh.cd('dir')\n```\n\n```js\nsh.mkdir('dir')\nsh.mkdir('-p', 'dir')\n```\n\n### File manipulation\n\n```js\nsh.cp('src', 'dest')\nsh.cp('-rf', 'src', 'dest')\n```\n\n```js\nsh.rm('file')\nsh.rm('-rf', 'file')\n```\n\n```js\nsh.mv('src', 'dest')\nsh.mv(['src1','src2'], 'dest')\n```\n\n```js\nsh.chmod('644', 'file')\nsh.chmod(755, 'file')\nsh.chmod('u+x', 'file')\n```\n\n### Tests\n\n```js\nsh.test('-b', 'path')  // block device\nsh.test('-d', 'path')  // dir\nsh.test('-e', 'path')  // exists\nsh.test('-f', 'path')  // file\nsh.test('-L', 'path')  // symlink\n```\n\n### Cat and output\n\n```js\nsrc = sh.cat('file*.txt')\n```\n\n```js\n'hello'.to('output.txt')\n'hello'.toEnd('append.txt')\n```\n\n```js\nsh.cat('input.txt').to('output.txt')\n```\n\n### Utils\n\n```js\nsh.which('x')\nsh.pwd()\n```\n\n```js\nsh.echo('hi')\n```\n\n```js\nsh.exec('node --version').code\nsh.exec('node --version').output\nsh.exec('node --version', { silent: true }).output\n```\n\n```js\nsh.exec('node --version', (code, output) => {\n  sh.echo(`exit code ${code}`)\n})\n```\n\n```js\nsh.tempdir()\n```\n\n```js\nsh.error()  // null if no error\n```\n\n## Also see\n\n* <https://github.com/shelljs/shelljs>\n"
  },
  {
    "path": "siege.md",
    "content": "---\ntitle: Siege\ncategory: Others\nintro: |\n  [Siege](https://www.joedog.org/siege-home/) is an HTTP and HTTPS load testing tool.\n---\n\n### Basic usage\n\n```sh\nsiege -b -c=10 -t=5m \"http://...\"\n```\n\n### Options\n\n#### Repetitions\n\n```\n-c, --concurrent=N\n-t, --time=MINSm\n-r, --reps=N\n```\n\n#### Modes\n\n```\n-i, --internet       Hit URLs randomly\n-b, --benchmark      No delay between requests\n```\n\n#### Configuration\n\n```\n-f, --file=FILE      load urls.txt\n-R, --rc=FILE        load siegerc\n```\n\n#### Headers\n\n```\n-H, --header=\"Cookie: foo=bar\"\n-A, --user-agent=\"Mozilla\"\n-T, --content-type=\"text/html\"\n```\n\n### References\n\nAlso see: [siegerc](https://gist.github.com/stansmet/3067988)\n"
  },
  {
    "path": "simple_form.md",
    "content": "---\ntitle: SimpleForm\ntags: [WIP]\n---\n\n### Inputs\n\n```ruby\n<%= f.input :email, required: false, autofocus: true %>\n<%= f.input :password, required: false %>\n<%= f.input :remember_me, as: :boolean %>\n<%= f.button :submit, \"Sign in\" %>\n```\n\n### Adding a wrapper\n\n```ruby\nsimple_form_for @x, wrapper: :small\n```\n"
  },
  {
    "path": "sinon-chai.md",
    "content": "---\ntitle: Sinon-chai\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\n  * [Sinon-chai](https://github.com/domenic/sinon-chai)\n\n### Initialization\n\n```js\nvar sinon = require('sinon');\nrequire('chai').use(require('sinon-chai'));\n```\n\n### Assert\n\n    expect(spy).called\n    expect(spy).calledOnce\n    expect(spy).calledTwice\n    expect(spy).calledThrice\n    expect(spy).calledBefore\n    expect(spy).calledAfter\n    expect(spy).calledWithNew\n    expect(spy).alwaysCalledWithNew\n    expect(spy).calledOn\n    expect(spy).alwaysCalledOn\n    expect(spy).calledWith\n    expect(spy).alwaysCalledWith\n    expect(spy).calledWithExactly\n    expect(spy).alwaysCalledWithExactly\n    expect(spy).calledWithMatch\n    expect(spy).alwaysCalledWithMatch\n    expect(spy).returned\n    expect(spy).alwaysReturned\n    expect(spy).threw\n    expect(spy).alwaysThrew\n\n### Should\n\n    spy.should.have.been.called\n    spy.should.have.been.calledOnce\n    spy.should.have.been.calledTwice\n    spy.should.have.been.calledThrice\n    spy1.should.have.been.calledBefore(spy2)\n    spy1.should.have.been.calledAfter(spy2)\n    spy.should.have.been.calledWithNew\n    spy.should.always.have.been.calledWithNew\n    spy.should.have.been.calledOn(context)\n    spy.should.always.have.been.calledOn(context)\n    spy.should.have.been.calledWith(...args)\n    spy.should.always.have.been.calledWith(...args)\n    spy.should.always.have.been.calledWithExactly(...args)\n    spy.should.always.have.been.calledWithExactly(...args)\n    spy.should.have.been.calledWithMatch(...args)\n    spy.should.always.have.been.calledWithMatch(...args)\n    spy.should.have.returned(returnVal)\n    spy.should.have.always.returned(returnVal)\n    spy.should.have.thrown(errorObjOrErrorTypeStringOrNothing)\n    spy.should.have.always.thrown(errorObjOrErrorTypeStringOrNothing)\n"
  },
  {
    "path": "sinon.md",
    "content": "---\ntitle: Sinon\ncategory: JavaScript libraries\nweight: -1\nupdated: 2017-10-27\n---\n\n### Creating spies\n\n```js\nfn = sinon.spy()\nfn()\n```\n\n```js\nfn.calledOnce == true\nfn.callCount == 1\n```\n\n### Spying/stubbing\n\n```js\nsinon.spy($, 'ajax')\n```\n\n```js\n$.ajax();\n$.ajax.calledOnce == true\n```\n\n```js\nsinon.stub($, 'ajax', function () { ... }) // function optional\n```\n\n```js\n$.ajax.calledWithMatch({ url: '/x' })\n$.ajax.restore()\n```\n\n### Spy/stub properties\n\n```js\nspy\n  .args        //=> [ [..], [..] ] one per call\n  .thisValues\n  .returnValues\n```\n\n```js\n  .called      //=> true\n  .notCalled\n  .callCount\n  .calledOnce\n  .calledTwice\n  .calledThrice\n```\n\n```js\n  .getCalls()   //=> Array\n  .getCall(0)\n  .firstCall\n```\n\n### Anonymous stub\n\n```js\nstub = sinon.stub().returns(42)\nstub() == 42\n```\n\n```js\nstub\n  .withArgs(42).returns(1)\n  .withArgs(43).throws(\"TypeError\")\n```\n\n```js\nstub\n  .returns(1)\n  .throws(\"TypeError\")\n  .returnsArg(0) // Return 1st argument\n  .callsArg(0)\n```\n\n### Fake date\n\n```js\nsinon.useFakeTimers(+new Date(2011,9,1));\n```\n\n### Fake server\n\n```js\nserver = sinon.fakeServer.create()\n```\n\n```js\n$.get('/file.json', ...)\nserver.requests[0].respond(\n  200,\n  { 'Content-Type': 'application/json' },\n  JSON.stringify({ hello: 'world' })\n)\n```\n\n```js\nserver.restore()\n```\n\n### Fake XHR\n\n```js\nxhr = sinon.useFakeXMLHttpRequest()\nxhr.restore()\n```\n\n### Sandbox\n\n```js\nbeforeEach(function() {\n  global.sinon = require('sinon').sandbox.create()\n})\n```\n\n```js\nafterEach(function() {\n  global.sinon.restore()\n})\n```\n"
  },
  {
    "path": "sketch.md",
    "content": "---\ntitle: Sketch\ncategory: Apps\nupdated: 2017-08-30\n---\n\n## Shortcuts\n{: .-three-column}\n\n### Insert\n\n| Shortcut | Description |\n| ---      | ---         |\n| `V`      | Vector      |\n| `P`      | Pencil      |\n| `T`      | Text        |\n| `L`      | Line        |\n| `R`      | Rectangle   |\n| `O`      | Oval        |\n| `U`      | Rounded     |\n{: .-shortcuts}\n\n### Show\n\n| Shortcut | Description            |\n| ---      | ---                    |\n| `^G`     | Show grid              |\n| `^L`     | Show layout            |\n| `^P`     | Show pixels            |\n| `^H`     | Show selection handles |\n| `^R`     | Show rulers            |\n{: .-shortcuts}\n\n### Sidebars\n\n| Shortcut | Description              |\n| ---      | ---                      |\n| `⌘⌥1`    | Toggle left (layers)     |\n| `⌘⌥2`    | Toggle right (inspector) |\n| `⌘⌥3`    | Toggle both              |\n| `⌘.`     | Presentation mode        |\n{: .-shortcuts}\n\n### Zoom\n\n| Shortcut | Description             |\n| ---      | ---                     |\n| `⌘0`     | 100%                    |\n| `⌘1`     | Fit to screen           |\n| `⌘2`     | Fit selection to screen |\n| `⌘3`     | Center selection        |\n{: .-shortcuts}\n\n### Arrange\n\n| Shortcut       | Description         |\n| ---            | ---                 |\n| `⌘⌥↑` _/_ `↓`  | Forward or backward |\n| `^⌘⌥↑` _/_ `↓` | Front or back       |\n{: .-shortcuts}\n\n### Distribute\n\n| Shortcut | Description |\n| ---      | ---         |\n| `^⌘H`    | Horizontal  |\n| `^⌘V`    | Vertical    |\n{: .-shortcuts}\n\n### Layers\n\n| Shortcut | Description  |\n| ---      | ---          |\n| `⌘R`     | Rename layer |\n| `⌘F`     | Find layer   |\n| `⌘G`     | Group        |\n| `⌘⇧G`    | Ungroup      |\n{: .-shortcuts}\n\n### Font\n\n| Shortcut       | Description    |\n| ---            | ---            |\n| `⌘⌥ +` _/_ `-` | Bigger/smaller |\n| `⌘⇧[`          | Left align     |\n| `⌘⇧\\`          | Center align   |\n| `⌘⇧]`          | Right align    |\n{: .-shortcuts}\n"
  },
  {
    "path": "slim.md",
    "content": "---\ntitle: Slim\ncategory: Ruby libraries\nprism_languages: [jade]\nweight: -1\n---\n\n### Example\n\n```jade\ndoctype html\nhtml\n  head\n    title Slim Examples\n    meta[charset='utf-8']\n    meta(name=\"keywords\" content=\"template language\")\n    meta name=\"author\" content=author\n    meta property='og:image' content=asset_url('foo.png')\n    meta property='og:image' content=(path_to_user user)\n    meta(\n      property='description'\n      content='this is the song that never ends')\n```\n\n### Attributes\n\n```jade\nmeta[charset='utf-8']\nmeta(name=\"keywords\" content=\"template language\")\nmeta name=\"author\" content=author\n```\n\nYou can use parentheses, brackets, or none at all.\n\n### Ruby attributes\n\n```jade\na class=[:menu,:highlight]\n```\n\nYou can use Ruby expressions in attributes.\n\n### Hash attributes\n\n```jade\n.card *{'data-url' => place_path(place)}\n```\n\nYou can destructure Ruby hashes as attributes.\n\n### Inline Ruby\n\n```jade\nruby:\n  def foobar\n    \"hello\"\n  end\n\ndiv= foobar\n```\n\n### Inline Markdown\n\n```jade\nmarkdown:\n  ### On Markdown\n\n  I am *Markdown* _text_!\n  {: .classname}\n```\n\nSlim can handle your [Markdown](https://daringfireball.net/projects/markdown/syntax) content for longer content blocks or `code`.\nDepending on your parser, like [Kramdown](https://kramdown.gettalong.org/quickref.html), other features might work, like assigning attributes or classes.\n\n### Embedded JavaScript\n\n```jade\njavascript:\n  alert('Slim supports embedded javascript!')\n```\n\n\n### Comments\n\n```jade\n/ Comment\n/! HTML comment\n```\n\n### Ruby\n\n```jade\n== yield\n= t('.hello')\n- 3.times do |i|\n  div\n```\n\n### Verbatim text\n\n```jade\ndiv\n  | This is text\n    it is nice\n```\n\n### Advanced whitespaces\n\n```jade\ndiv\n  ' This appends a whitespace\ndiv\n  |  This hackily prepends a whitespace\ndiv\n  => 'This appends a whitespace'\ndiv\n  =< 'This prepends a whitespace'\n```\n\n### Inline HTML\n\n```jade\n<div class='foo'>\n  - if articles.empty?\n    | Nothing here\n</div>\n```\n\n### Inline tags\n\n```jade\nul\n  li: a(href='/') Home\n```\n\n### References\n\n- <http://slim-lang.com/>\n"
  },
  {
    "path": "social-images.md",
    "content": "---\ntitle: Social media images\n---\n\n### Facebook\n\n| What | Dimensions |\n|:---- | ----------:|\n| Cover photo | 851 x 315 |\n| Display picture | 168 x 168 ? |\n| Highlighted image | 1200 x 717 (appears 843 x 504) |\n| Share link (og:image) | 940 x 492 (1.91:1, appears as 470 x 246) |\n| Share link (square) | 1:1, appears as 114 x 114? |\n\n### Twitter\n\n| What | Dimensions |\n|:---- | ----------:|\n| Page header | 1500 x 500 |\n| Display picture | 400 x 400 (shown as 200x200) |\n| In-stream photo preview | 440 x 220 (2:1) |\n\n### References\n\n * <https://developers.facebook.com/docs/plugins/checklist/>\n"
  },
  {
    "path": "spacemacs.md",
    "content": "---\ntitle: Spacemacs\ncategory: Apps\nupdated: 2020-05-22\ntags: [WIP]\nintro: |\n  [Spacemacs](http://spacemacs.org) is a distribution for Emacs.\n---\n\nShortcuts\n---------\n{: .-three-column}\n\n### Layers\n\n| Shortcut  | Description       |\n| ---       | ---               |\n| `SPC` `f` | File              |\n| `SPC` `p` | Project           |\n| `SPC` `t` | Toggle            |\n| `SPC` `b` | Buffer            |\n| ---       | ---               |\n| `SPC` `m` | Major mode        |\n| `,`       | Same as `SPC` `m` |\n| ---       | ---               |\n| `SPC` `g` | Git               |\n| `SPC` `l` | Layout            |\n| `SPC` `a` | Apps              |\n| `SPC` `h` | Help              |\n{: .-shortcuts.-prime}\n\n### More\n\n| Description | Shortcut    |\n| ---         | ---         |\n| **M-x**     | `SPC` `SPC` |\n| Terminal    | `SPC` `'`   |\n| Search      | `SPC` `/`   |\n{: .-shortcuts-right}\n\n### `SPC` `h` - Help\n\n| Description        | Shortcut |\n| ---                | ---      |\n| **Spacemacs help** | `SPC`    |\n| ---                | ---      |\n| Layers             | `l`      |\n| Documentation      | `r`      |\n| FAQ                | `f`      |\n| Vimtutor           | `T`      |\n{: .-shortcuts-right}\n\n### `SPC` `f` - File\n\n| Description   | Shortcut |\n| ---           | ---      |\n| **Save**      | `s`      |\n| Save all      | `S`      |\n| Copy          | `c`      |\n| Delete        | `D`      |\n| ---           | ---      |\n| Show filename | `y`      |\n{: .-shortcuts-right}\n\n### `SPC` `b` - Buffer\n\n| Description                | Shortcut |\n| ---                        | ---      |\n| Next buffer (`:bnext`)     | `n`      |\n| Previous buffer (`:bprev`) | `p`      |\n| Delete buffer (`:bd`)      | `d`      |\n{: .-shortcuts-right}\n\n### `SPC` `f` `e` - Config\n\n| Description              | Shortcut |\n| ---                      | ---      |\n| **Edit config**          | `d`      |\n| Edit config and template | `D`      |\n| ---                      | ---      |\n| Reload config            | `R`      |\n{: .-shortcuts}\n\n### `SPC` `w` - Window\n\n| Description         | Shortcut              |\n| ---                 | ---                   |\n| Help                | `.`                   |\n|                     | ---                   |\n| Select              | `h` / `j` / `k` / `l` |\n| Move                | `H` / `J` / `K` / `L` |\n| ---                 | ---                   |\n| Split               | `s`                   |\n| Split & follow      | `S`                   |\n| ---                 | ---                   |\n| Split vert          | `v`                   |\n| Split vert & follow | `V`                   |\n{: .-shortcuts-right}\n\n### `SPC` `p` - Project\n\n| Description             | Shortcut |\n| ---                     | ---      |\n| **Switch project**      | `l`      |\n| Switch project          | `p`      |\n| ---                     | ---      |\n| **Open files & recent** | `h`      |\n| Open files              | `f`      |\n| ---                     | ---      |\n| **Show tree**           | `t`      |\n| ---                     | ---      |\n| Open terminal           | `'`      |\n| Open terminal in root   | `$` `t`  |\n{: .-shortcuts-right}\n\n### `SPC` `l` `w` - Workspaces\n\n| Description                 | Shortcut    |\n| ---                         | ---         |\n| Help                        | `?`         |\n| ---                         | ---         |\n| Switch previous layout      | `TAB`       |\n| **Switch to nth workspace** | `0` ... `9` |\n| ---                         | ---         |\n| Rename                      | `R`         |\n{: .-shortcuts-right}\n\n### `SPC` `t` - Toggle\n\n| Description  | Shortcut |\n| ---          | ---      |\n| Line numbers | `n`      |\n{: .-shortcuts\n\n### `SPC` `j` - Jump\n\n| Description | Shortcut |\n| ---         | ---      |\n| Character   | `j`      |\n| Line        | `l`      |\n| Word        | `w`      |\n{: .-shortcuts-right}\n\n## Major modes\n\n### Markdown\n\n| Shortcut    | Description            |\n| ---         | ---                    |\n| `,` `-`     | Insert horizontal rule |\n| `,` `h` `1` | Insert H1              |\n{: .-shortcuts}\n\n## Other layers\n\n### version-control\n\n| Shortcut              | Description            |\n| ---                   | ---                    |\n| `SPC` `g` `s`         | **Status**             |\n| ---                   | ---                    |\n| `SPC` `g` `m`         | **Open dispatch menu** |\n| `SPC` `g` `m` `s`     | Stage                  |\n| `SPC` `g` `m` `P` `p` | Push                   |\n| `SPC` `g` `m` `c`     | Commit                 |\n| ---                   | ---                    |\n| `SPC` `g` `t`         | Open time machine      |\n| ---                   | ---                    |\n| `SPC` `g` `l` `l`     | Open in GitHub         |\n| `SPC` `g` `l` `L`     | Show GitHub URL        |\n{: .-shortcuts}\n\nVersion control is provided by Magit.\n\n## Emacs standard\n\n### File\n\n| Description      | Emacs       | Spacemacs     |\n| ---              | ---         | ---           |\n| Save             | `C-x` `C-s` | `SPC` `f` `s` |\n| Open             | `C-x` `C-f` | `SPC` `f` `f` |\n| Close            | `C-x` `C-k` |               |\n| ---              | ---         | ---           |\n| Split horizontal | `C-x` `2`   | `SPC` `w` `h` |\n| Split vertical   | `C-x` `3`   | `SPC` `w` `v` |\n| ---              | ---         | ---           |\n| Confirm          | `C-c` `C-c` |               |\n| Abort            | `C-c` `C-k` |               |\n{: .-shortcuts-right}\n\n## References\n\n- [Spacemacs documentation](https://github.com/syl20bnr/spacemacs/blob/master/doc/DOCUMENTATION.org) _(github.com)_\n"
  },
  {
    "path": "spine.md",
    "content": "---\ntitle: Spine\ncategory: JavaScript libraries\ntags: [Outdated]\n---\n\n## Models\n\n### About\n{: .-intro}\n\nSpine is an MVC framework for JavaScript.\n\n- <https://spine.github.io/>\n\n### Models\n\n    class User extends Spine.Model\n      @configure \"User\", \"name\", \"address\"\n\n      fullName: ->\n        [@first, @last].join ' '\n\n### JavaScript\n\n    // Subclassing\n    User = Spine.Model.sub()\n\n### Class methods\n\n    .configure 'modelname', attributes...\n\n    # Inheritance\n    .include(Module)\n    .extend(Module)\n\n    .create(name: \"John\")\n\n    .count()\n\n    # Events\n    .on 'refresh change', (user) -> ...\n    .trigger 'event'\n\n    .change (user) -> ...  # same as on('change')\n    .fetch (user) -> ...   # same as on('fetch')\n\n    # JSON\n    .toJSON()         # all records\n    .fromJSON(json)   # from json string\n    .fromForm(el)\n\n    # Data\n    .records     # Hash of instances\n    .attributes  # array of attributes (from .configure)\n\n    # Convenience\n    .toString()  #=> \"User\"\n\n    # Find by ID\n    .exists(1)\n    .find(1)     # throws error\n\n    # Find by something\n    .select (u) u.name == 'bob'\n    .findByAttribute 'name', 'bob'\n    .findAllByAttribute 'name', 'bob'\n\n    .all()\n    .slice(6, 13)  # cloned copies of instances\n\n    # Iterating\n    .each (user) ->\n\n    # Ends\n    .first()\n    .last()\n\n    # Deleting\n    .deleteAll()\n    .destroyAll()\n    .destroyAll({ ..options.. })\n    .destroy(2)\n\n### Instance methods\n\n    user = new User();\n\n    user\n    .isNew()\n    .exists()\n\n    # Validation\n    .isValid()\n    .validate()    # validate = (-> \"Name required\" unless @name)\n\n    .attributes()  # hash of attr values\n    .eql(other)    # equality check\n\n    # Update\n    .load(attrs)\n    .reload()\n    .fromForm(form)\n    .updateAttribute(\"name\", \"john\")\n    .updateAttributes(name: \"John\")\n\n    # Event\n    .on 'event', -> ...\n    .trigger 'event'\n\n    # Retrieve\n    .toJSON()\n\n    # Persistence\n    .save()\n\n    .destroy()\n    .dup()         # clone as unsaved\n\n### Mixins\n\n    class User extends Spine.Model\n      @include MyModule\n      @extend MyModule\n\n### Events\n\n    .on 'create'\n    .on 'update'\n    .on 'destroy'\n\n    .on 'save'    # create / update\n    .on 'change'  # create / update / destroy\n\n    .on 'refresh'\n    .on 'error'    # validation error\n\n## Ajax\n\n### Ajax\n\n    class User extends Spine.Model\n      @extend Spine.Model.Ajax\n\n      @url: '/users'\n      @url: -> '/users'\n      scope: '2013'\n\n### Using\n\n    User.fetch()\n    user = new User()\n\n    user.url()            #=> \"/users\"\n    user.url('bands')     #=> \"/users/bands\"\n\n    user.scope = 'admin'\n    user.url()            #=> \"/admin/users\"\n\n### Host\n\n    Spine.Model.host = 'http://endpoint'\n\n### Ajax mapping\n\n    read    → GET    /collection\n    create  → POST   /collection (201 created)\n    update  → PUT    /collection/id\n    destroy → DELETE /collection/id\n\n### Associations\n\n    class Photo extends Spine.Model\n      @belongsTo 'album', 'Album'          # window['Album']\n      @belongsTo 'album', 'models/album'   # via require.js\n\n    class Album\n      @hasMany 'photos', 'models/photo'\n\n    album.photos().all()\n    album.photos().create(name: \"Vacation\")\n    album.photos().find(id)\n\n    photo = Photo.create(album: album)\n    photo.album()\n    photo.album_id\n"
  },
  {
    "path": "spreadsheet.md",
    "content": "---\ntitle: Spreadsheet functions\ntags: [WIP]\n---\n\n### If\n\n```\n=IF(test, then, else)\n=IF(EQ(A1, \"paid\"), \"true\", \"false\")\n```\n\n### Comparators\n\n```\n=EQ(a,b)\n=NE(a,b)\n=GT(a,b)\n=GTE(a,b)\n=LT(a,b)\n=LTE(a,b)\n```\n\n### Math\n\n```\n=POW(2, 32)   # 2^32\n=SIN() ACOS() etc\n=CEILING(n,sig,mode)\n=FLOOR(n,sig,mode)\n=INT(n)\n```\n\n```\n=SUM(range)\n```\n\n```\n=SUMIF(range, criteria, sum_range)\n=SUMIF(A1:A5, \">300\", B1:B5)          # if A# is >300, use B#\n```\n\n### Core\n\n```\n=TO_DATE(number)\n```\n\n### Vlook\n\n```\n=VLOOKUP(value, range, column_index)\n```\n"
  },
  {
    "path": "sql-join.md",
    "content": "---\ntitle: SQL joins\ncategory: Databases\nupdated: 2018-12-06\nweight: -1\n---\n\n### Example\n\n```\nSELECT * FROM order_items \\\n  LEFT OUTER JOIN orders \\\n  ON order_items.order_id = orders.id\n```\n{: .-wrap}\n\nJoins are typically added to `SELECT` statements to add more columns and records.\n\n### Diagram\n\n```\nSELECT * FROM `A` INNER JOIN `B`\n```\n{: .-setup}\n\n```\n┌────────┐\n│ A  ┌───┼────┐\n│    │ ∩ │    │\n└────┼───┘  B │\n     └────────┘\n```\n{: .-box-chars.-setup}\n\n| Join             | What            |\n| ----             | ----            |\n| Inner join       | `∩`             |\n| Left outer join  | `A` + `∩`       |\n| Right outer join | `∩` + `B`       |\n| Full outer join  | `A` + `∩` + `B` |\n"
  },
  {
    "path": "src/analytics/CloudflareAnalytics.astro",
    "content": "---\ntype Props = { token: string }\nconst props = Astro.props as Props\nconst { token } = props\n---\n\n<script\n  defer\n  type=\"text/partytown\"\n  src=\"https://static.cloudflareinsights.com/beacon.min.js\"\n  data-cf-beacon={`{\"token\": \"${token}\"}`}></script>\n"
  },
  {
    "path": "src/analytics/GoogleAnalytics.astro",
    "content": "---\ntype Props = { measurementId: string }\nconst props = Astro.props as Props\nconst measurementId = props.measurementId\n---\n\n<script\n  type=\"text/partytown\"\n  src={`https://www.googletagmanager.com/gtag/js?id=${measurementId}`}></script>\n{/* prettier-ignore */}\n<script\n  type=\"text/partytown\"\n  data-ga-measurement-id={measurementId}\n  id=\"ga-init\"\n>\n  const measurementId = document\n    .getElementById('ga-init')\n    .getAttribute('data-ga-measurement-id')\n  window.dataLayer = window.dataLayer || []\n  function gtag() {\n    dataLayer.push(arguments) // eslint-disable-line\n  }\n  gtag('js', new Date())\n  gtag('config', measurementId)\n</script>\n"
  },
  {
    "path": "src/components/BaseLayout.astro",
    "content": "---\nimport 'hint.css'\nimport '~/sass/full.scss'\nimport '~/sass/2017/base/prism_line_highlight.scss'\n\nimport '@fontsource/cousine/400.css'\nimport '@fontsource/cousine/700.css'\nimport '@fontsource/manrope/800.css'\nimport GoogleAnalytics from '~/analytics/GoogleAnalytics.astro'\nimport { googleAnalytics } from '~/config'\n\nexport type Props = {\n  title?: string\n  bodyClass?: string\n}\n\nconst props = Astro.props as Props\nconst analyticsEnabled = googleAnalytics.enabled\n---\n\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <meta name=\"generator\" content={Astro.generator} />\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"/assets/favicon.png\" />\n    {/* Title */}\n    {props.title ? <title>{props.title}</title> : null}\n    {/* Google tag */}\n    {\n      analyticsEnabled && googleAnalytics.measurementId ? (\n        <GoogleAnalytics measurementId={googleAnalytics.measurementId} />\n      ) : null\n    }\n    <slot name=\"head\" />\n  </head>\n  <body class={props.bodyClass ?? ''}>\n    <slot />\n  </body>\n</html>\n"
  },
  {
    "path": "src/components/SEO/SEO.astro",
    "content": "---\n/*\n * Simplified replacement for astro-seo. Is less opinionated\n */\n\nexport type Props = {\n  title?: string\n  meta?: Record<string, string | string[]>\n  metaProperties?: Record<string, string | string[]>\n  links?: Record<string, string>\n}\n\nconst props = Astro.props as Props\n\nfunction toArray(input: string | string[]): string[] {\n  return (Array.isArray(input) ? input : [input]).filter(Boolean)\n}\n---\n\n{props.title ? <title>{props.title}</title> : null}\n\n{\n  props.meta\n    ? Object.entries(props.meta).flatMap(([name, contents]) =>\n        toArray(contents).map((content) => (\n          <meta name={name} content={content} />\n        ))\n      )\n    : null\n}\n{\n  props.metaProperties\n    ? Object.entries(props.metaProperties).flatMap(([property, contents]) =>\n        toArray(contents).map((content) => (\n          <meta property={property} content={content} />\n        ))\n      )\n    : null\n}\n{\n  props.links\n    ? Object.entries(props.links).map(([rel, href]) => (\n        <link rel={rel} href={href} />\n      ))\n    : null\n}\n"
  },
  {
    "path": "src/components/SocialList.astro",
    "content": "---\nimport { getUrlFromPage } from '~/lib/links'\nimport type { SheetPage } from '~/lib/page'\n\nexport type Props = {\n  class?: string\n  page?: SheetPage\n}\nconst props = Astro.props as Props\nconst page = props.page\nconst url = getUrlFromPage(page, Astro.site)\n\nconst t = {\n  facebookShare: 'Share on Facebook',\n  twitterShare: 'Share on Twitter',\n  sheetDescription: 'The ultimate cheatsheet for {title}',\n  defaultDescription: 'Ridiculous collection of web development cheatsheets'\n}\n\nconst title = page?.frontmatter?.title\n\nconst description = title\n  ? t.sheetDescription.replace('{title}', title)\n  : t.defaultDescription\n\nconst tweet = `${description} ${url}`\n\n// prettier-ignore\nconst facebookURL = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}`\n// prettier-ignore\nconst twitterURL = `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweet)}`\n---\n\n<ul class={`social-list ${props.class ?? ''}`}>\n  <li class=\"facebook link hint--bottom\" data-hint={t.facebookShare}>\n    <a\n      href={facebookURL}\n      target=\"share\"\n      aria-label={t.facebookShare}\n      role=\"button\"><span class=\"text\"></span></a\n    >\n  </li>\n  {' '}\n  <li class=\"twitter link hint--bottom\" data-hint={t.twitterShare}>\n    <a\n      href={twitterURL}\n      target=\"share\"\n      aria-label={t.twitterShare}\n      role=\"button\"><span class=\"text\"></span></a\n    >\n  </li>\n</ul>\n"
  },
  {
    "path": "src/components/TopNav.astro",
    "content": "---\nimport type { SheetPage } from '~/lib/page'\nimport SocialList from './SocialList.astro'\nimport { getEditLink } from '~/lib/links'\n\nexport type Props = {\n  noBack?: boolean\n  noShare?: boolean\n  noEdit?: boolean\n  page?: SheetPage\n}\nconst props = Astro.props as Props\n\nconst t = {\n  title: 'Devhints.io',\n  editOnGitHub: 'Edit on GitHub',\n  edit: 'Edit',\n  backToHome: 'Back to home'\n}\n\nconst editLink = getEditLink(props.page)\n---\n\n<nav class=\"top-nav\" data-js-no-preview role=\"navigation\">\n  <div class=\"container\">\n    {\n      props.noBack !== true ? (\n        <div class=\"left\">\n          <a class=\"home back-button\" href=\"/\" aria-label={t.backToHome} />\n        </div>\n      ) : null\n    }\n\n    <a class=\"brand\" href=\"/\">\n      {t.title}\n    </a>\n\n    {\n      props.noShare !== true ? (\n        <div class=\"actions\">\n          {/* Social share links */}\n          <SocialList class=\"social page-actions\" page={props.page} />\n\n          {props.noEdit !== true ? (\n            <ul class=\"page-actions\">\n              <li\n                class=\"link github -button hint--bottom\"\n                data-hint={t.editOnGitHub}\n              >\n                <a href={editLink}>\n                  <span class=\"text -visible\">{t.edit}</span>\n                </a>\n              </li>\n            </ul>\n          ) : null}\n        </div>\n      ) : null\n    }\n  </div>\n</nav>\n\n<style lang=\"scss\" is:global>\n  @import '../sass/2017/utils';\n  @import '../sass/2017/components/back-button';\n  @import '../sass/2017/components/page-actions';\n  @import '../sass/2017/components/top-nav';\n</style>\n"
  },
  {
    "path": "src/components/V2017/CarbonBox.astro",
    "content": "---\nimport { carbon } from '~/config'\nconst useCarbon = carbon.enabled\n---\n\n<div class=\"HeadlinePub\" role=\"complementary\">\n  {useCarbon ? <script async src={carbon.src} id=\"_carbonads_js\" /> : null}\n  <span class=\"placeholder -one\"></span>\n  <span class=\"placeholder -two\"></span>\n  <span class=\"placeholder -three\"></span>\n  <span class=\"placeholder -four\"></span>\n</div>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/headline-pub';\n</style>\n"
  },
  {
    "path": "src/components/V2017/PushButton.astro",
    "content": "---\nexport type Props = {\n  class?: string\n}\nconst props = Astro.props as Props\n---\n\n<div class={`push-button ${props.class ?? ''}`}>\n  <slot />\n</div>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/placeholders/push-button';\n  @import '../../sass/2017/components/push-button';\n</style>\n"
  },
  {
    "path": "src/components/V2017Home/Announcements.astro",
    "content": "---\nimport { announcement } from '~/config'\nimport snarkdown from 'snarkdown'\n\nconst body = snarkdown(announcement.body)\n  .split('<br />')\n  .map((text) => `<p>${text}</p>`)\n  .join('')\n---\n\n<div class=\"announcements-list\">\n  <div\n    class=\"announcements-item item -hide\"\n    data-js-dismissable={`{\"id\":\"${announcement.id}\"}`}\n  >\n    <h3 class=\"title\">{announcement.title}</h3>\n    <div class=\"body\" set:html={body} />\n    <button data-js-dismiss class=\"close\"></button>\n  </div>\n</div>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/announcements-item';\n  @import '../../sass/2017/components/announcements-list';\n</style>\n\n<script>\n  import { setupDismiss } from '~/scripts/v2017/behaviors_2/dismiss'\n  import { setupDismissable } from '~/scripts/v2017/behaviors_2/dismissable'\n\n  setupDismiss()\n  setupDismissable()\n</script>\n"
  },
  {
    "path": "src/components/V2017Home/FeaturedPages.astro",
    "content": "---\nimport type { SheetPage } from '~/lib/page'\nimport PageListItem from './PageListItem.astro'\n\nexport type Props = {\n  pages: SheetPage[]\n}\n\nconst props = Astro.props as Props\n---\n\n{props.pages.map((page) => <PageListItem page={page} class=\"top-sheet\" />)}\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/top-sheet';\n</style>\n"
  },
  {
    "path": "src/components/V2017Home/PageListItem.astro",
    "content": "---\nimport type { SheetPage } from '../../lib/page'\n\nexport type Props = {\n  page: SheetPage\n  class?: string\n}\nconst props = Astro.props as Props\nconst page = props.page\nconst url = `/${page.slug}`\n---\n\n<a href={url} class={`article item -item-${page.slug} ${props.class ?? ''}`}>\n  <span class=\"info\">\n    <code class=\"slug\">{page.slug}</code>\n    <span class=\"title\">\n      {page.frontmatter.title ?? page.slug}\n    </span>\n  </span>\n</a>\n"
  },
  {
    "path": "src/components/V2017Sheet/CommentsArea.astro",
    "content": "---\nimport { disqus, site } from '../../config'\n\nconst t = {\n  suffix: 'for this cheatsheet.',\n  link: 'Write yours!'\n}\n\nexport type Props = {\n  identifier: string\n}\n\nconst props = Astro.props as Props\nconst url = `${site.url}/${props.identifier}`\nconst { identifier } = props\n---\n\n<section class=\"comments-area\" id=\"comments\" data-js-no-preview>\n  <div class=\"container\">\n    <details class=\"comments-details\">\n      <summary>\n        <strong class=\"count\">\n          <span\n            class=\"disqus-comment-count\"\n            data-disqus-identifier={identifier}\n            data-disqus-url={url}>0 Comments</span\n          >\n        </strong>\n        {' '}\n        <span class=\"suffix\">{t.suffix}</span>\n        {' '}\n        <span class=\"fauxlink\">{t.link}</span>\n      </summary>\n      <div class=\"comments-section\">\n        <div class=\"comments\">\n          <div id=\"disqus_thread\"></div>\n        </div>\n      </div>\n    </details>\n  </div>\n  <noscript\n    data-js-disqus={JSON.stringify({\n      host: disqus.host,\n      url,\n      identifier\n    })}></noscript>\n</section>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/comments-area';\n  @import '../../sass/2017/components/comments-details';\n  @import '../../sass/2017/components/comments-section';\n</style>\n\n<script>\n  import { setupDisqus } from '~/scripts/v2017/behaviors_2/disqus'\n\n  setupDisqus()\n</script>\n"
  },
  {
    "path": "src/components/V2017Sheet/NoticeBox.astro",
    "content": "---\n\n---\n\n<aside class=\"notice-box MarkdownBody\">\n  <slot />\n</aside>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/notice-box';\n</style>\n"
  },
  {
    "path": "src/components/V2017Sheet/RelatedPostItem.astro",
    "content": "---\nimport type { SheetPage } from '~/lib/page'\n\nexport type Props = {\n  class?: string\n  page: SheetPage\n}\nconst props = Astro.props as Props\nconst page = props.page\nconst url = `/${page.slug}`\n\nconst t = {\n  suffix: 'cheatsheet'\n}\n---\n\n<li class={`related-post-item ${props.class ?? ''}`}>\n  <a href={url}>\n    <strong>{page.frontmatter.title}</strong>\n    {' '}\n    <span>\n      {t.suffix}\n    </span>\n  </a>\n</li>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/related-post-item';\n</style>\n"
  },
  {
    "path": "src/components/V2017Sheet/RelatedPosts.astro",
    "content": "---\nimport { getPages, type SheetPage } from '~/lib/page'\nimport { getTopPages, getRelatedPages } from '~/lib/page/queries'\nimport { etc } from '~/config'\nimport RelatedPostItem from '~/components/V2017Sheet/RelatedPostItem.astro'\nimport PushButton from '~/components/V2017/PushButton.astro'\n\nexport type Props = {\n  page: SheetPage\n}\n\nconst props = Astro.props as Props\nconst page = props.page\n\nconst t = {\n  callout: {\n    description:\n      'Over {size} curated cheatsheets, by developers for developers.',\n    link: 'Devhints home'\n  },\n\n  group: {\n    top: 'Top cheatsheets',\n    other: 'Other cheatsheets',\n    category: 'Other {category} cheatsheets'\n  }\n}\n\nconst calloutDescription = t.callout.description.replace(\n  '{size}',\n  etc.advertisedSheetCount.toString()\n)\n\nconst category = page.frontmatter.category\n\nconst categoryHeading = category\n  ? t.group.category.replace('{category}', category)\n  : t.group.other\n\nconst pages = await getPages()\nconst relatedPages = getRelatedPages(pages, page, { maxCount: 6 })\nconst topPages = getTopPages(pages, page, { maxCount: 6 })\n---\n\n<footer class=\"related-posts-area\" id=\"related\" data-js-no-preview>\n  <div class=\"container\">\n    <div class=\"related-posts-section\">\n      {/* Callout */}\n      <div class=\"callout\">\n        <a class=\"related-posts-callout\" href=\"/\">\n          <div class=\"text\">\n            <i class=\"icon\"></i>\n            <span class=\"description\">{calloutDescription}</span>\n            <PushButton class=\"-dark\">{t.callout.link}</PushButton>\n          </div>\n        </a>\n      </div>\n\n      {/* Posts in the same category */}\n      <div class=\"group\">\n        <div class=\"related-posts-group\">\n          <h3>{categoryHeading}</h3>\n        </div>\n        <ul class=\"related-post-list\">\n          {\n            relatedPages.map((page) => (\n              <RelatedPostItem page={page} class=\"item\" />\n            ))\n          }\n        </ul>\n      </div>\n\n      {/* Top pages */}\n      <div class=\"group\">\n        <div class=\"related-posts-group\">\n          <h3>{t.group.top}</h3>\n        </div>\n        <ul class=\"related-post-list\">\n          {topPages.map((page) => <RelatedPostItem page={page} class=\"item\" />)}\n        </ul>\n      </div>\n    </div>\n  </div>\n</footer>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/related-posts-area';\n  @import '../../sass/2017/components/related-posts-callout';\n  @import '../../sass/2017/components/related-posts-group';\n  @import '../../sass/2017/components/related-posts-section';\n  @import '../../sass/2017/components/related-post-list';\n</style>\n"
  },
  {
    "path": "src/components/V2017Sheet/SearchFooter.astro",
    "content": "---\nimport SearchForm from './SearchForm.astro'\n---\n\n<footer class=\"search-footer\" data-js-no-preview>\n  <div class=\"container\">\n    <div class=\"search-footer-section\">\n      <div class=\"search\">\n        <SearchForm class=\"-small\" />\n      </div>\n      <div class=\"links\">\n        <a class=\"home-button\" href=\"/\"><i></i></a>\n      </div>\n    </div>\n  </div>\n</footer>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/home-button';\n  @import '../../sass/2017/components/search-footer';\n</style>\n"
  },
  {
    "path": "src/components/V2017Sheet/SearchForm.astro",
    "content": "---\nimport 'autocompleter/autocomplete.css'\n\nimport { etc } from '../../config'\n\nexport type Props = {\n  class?: string\n  /** True for the homepage */\n  isLive: boolean\n}\nconst t = {\n  prefix: 'devhints.io',\n  defaultPlaceholder: 'Search {size}+ cheatsheets',\n  homePlaceholder: 'Search...'\n}\n\nconst props = Astro.props as Props\n\nlet placeholder = props.isLive ? t.homePlaceholder : t.defaultPlaceholder\n\nplaceholder = placeholder.replace('{size}', etc.advertisedSheetCount.toString())\n---\n\n<form class=\"search\" action=\"/\" method=\"get\" data-js-search-form>\n  <label class={`search-box ${props.class ?? ''}`}>\n    <span class=\"prefix\">{t.prefix}</span>\n    <span class=\"sep\">/</span>\n    {\n      (\n        <input\n          name=\"q\"\n          type=\"text\"\n          class=\"input\"\n          {...(props.isLive ? { autofocus: true } : {})}\n          data-js-search-input\n          placeholder={placeholder}\n          autocomplete=\"off\"\n        />\n      )\n    }\n  </label>\n</form>\n\n<script>\n  import { onScrollVisible } from '~/lib/domutils/onScrollVisible'\n\n  // Prevent <enter> from submitting the form\n  document\n    .querySelectorAll<HTMLFormElement>('[data-js-search-form]')\n    .forEach((form) => {\n      form.addEventListener('submit', (event) => {\n        event.preventDefault()\n      })\n    })\n\n  document\n    .querySelectorAll<HTMLInputElement>('[data-js-search-input]')\n    .forEach((input) => {\n      onScrollVisible(input, async () => {\n        const { setup } = await import('./SearchForm.script')\n        setup(input)\n      })\n    })\n</script>\n\n<style lang=\"scss\" is:global>\n  @import '../../sass/2017/utils';\n  @import '../../sass/2017/components/search-box';\n  @import '../../sass/2017/components/autocomplete';\n</style>\n"
  },
  {
    "path": "src/components/V2017Sheet/SearchForm.script.ts",
    "content": "import autocomplete from 'autocompleter'\nimport { fetchFuse, parseFuse } from '~/lib/fuseSearch/fuseSearch'\n\nexport async function setup(input: HTMLInputElement) {\n  let fuse\n\n  autocomplete<{ label: string; value: string }>({\n    input,\n    fetch: async (text: string, update) => {\n      fuse ??= parseFuse(await fetchFuse())\n\n      const rows: Array<{ item: { title: string; slug: string } }> =\n        fuse.search(text, { limit: 10 })\n\n      update(\n        rows.map((row) => ({ label: row.item.title, value: row.item.slug }))\n      )\n    },\n    onSelect: (item) => {\n      // ^ { label, value }\n      const slug = item.value\n      window.location.href = `/${slug}`\n    }\n  })\n}\n"
  },
  {
    "path": "src/components/V2017Sheet.astro",
    "content": "---\n// import \"../sass/critical-sheet.scss\";\nimport cx from 'clsx'\nimport snarkdown from 'snarkdown'\nimport { render } from '../lib/render'\nimport type { SheetPage } from '../lib/page'\nimport BaseLayout from './BaseLayout.astro'\nimport TopNav from './TopNav.astro'\nimport CommentsArea from './V2017Sheet/CommentsArea.astro'\nimport SearchFooter from './V2017Sheet/SearchFooter.astro'\nimport RelatedPosts from './V2017Sheet/RelatedPosts.astro'\nimport CarbonBox from './V2017/CarbonBox.astro'\nimport { getSEOPropsForPage } from '~/lib/seo/seo'\nimport { getJSONLDsForPage } from '~/lib/seo/jsonLd'\nimport SEO from '~/components/SEO/SEO.astro'\nimport NoticeBox from './V2017Sheet/NoticeBox.astro'\nimport { getEditLink } from '~/lib/links'\nimport { typeStyles } from '~/styles/CommonStyles'\n\nexport type Props = {\n  page: SheetPage\n}\n\nconst props = Astro.props as Props\nconst page = props.page\nconst mkdn = await render(page.markdown)\nconst seoProps = getSEOPropsForPage(page)\nconst jsonLdSchemas = getJSONLDsForPage(page)\nconst tags = page.frontmatter.tags ?? []\nconst deprecatedBy = page.frontmatter.deprecated_by\nconst title: string = page.frontmatter.title ?? page.slug\nconst editUrl = getEditLink(page)\nconst intro: string | null = page.frontmatter.intro\n  ? `<p>${snarkdown(page.frontmatter.intro)}</p>`\n  : null\n\nconst styles = {\n  body: cx('V2017Sheet__body max-w-content p-6 md:px-8 mx-auto')\n}\n\nconst headingStyles = {\n  root: cx(\n    'MainHeading__root',\n    'mt-4 md:pt-8 w-full',\n    'flex flex-col md:flex-row gap-12',\n    'items-center md:items-end'\n  ),\n  spacer: cx('MainHeading__spacer', 'mt-12'),\n  h1: cx(\n    'MainHeading__h1',\n    typeStyles.manrope,\n    'text-5xl leading-[1.2] text-zinc-950',\n    'text-center md:text-left',\n    'flex-1'\n  ),\n  title: cx('MainHeading__title'),\n  pubbox: cx('MainHeading__pubbox')\n}\n---\n\n<BaseLayout bodyClass=\"HighlightPubFirstLine\">\n  <Fragment slot=\"head\">\n    <SEO {...seoProps} />\n    {\n      jsonLdSchemas.map((schema) => (\n        <script type=\"application/ld+json\" set:html={JSON.stringify(schema)} />\n      ))\n    }\n  </Fragment>\n\n  <TopNav page={page} />\n  <div class={styles.body}>\n    <header class={headingStyles.root} role=\"banner\">\n      <h1 class={headingStyles.h1}>\n        <span class={headingStyles.title}>{title}</span>\n        <span class={headingStyles.suffix}> cheatsheet</span>\n      </h1>\n\n      {/* Publicite */}\n      <div class={headingStyles.pubbox} data-js-no-preview><CarbonBox /></div>\n    </header>\n\n    <div class={headingStyles.spacer}></div>\n\n    {/* WIP */}\n    {\n      tags.includes('WIP') ? (\n        <NoticeBox>\n          This page is a work in progress. You can help by{' '}\n          <a href={editUrl}>suggesting edits</a>!\n        </NoticeBox>\n      ) : null\n    }\n\n    {/* Deprecated */}\n    {\n      deprecatedBy ? (\n        <NoticeBox>\n          <strong>Deprecated:</strong> This guide covers an older version.\n          <a href={deprecatedBy}>A newer version is available here.</a>\n        </NoticeBox>\n      ) : null\n    }\n\n    {\n      intro ? (\n        <div class=\"intro-content text-xl MarkdownBody\">\n          <Fragment set:html={intro} />\n        </div>\n      ) : null\n    }\n\n    <div class={headingStyles.spacer}></div>\n\n    <main\n      class=\"post-content MarkdownBody\"\n      data-js-main-body\n      data-js-anchors\n      role=\"main\"\n    >\n      <Fragment set:html={mkdn.html} />\n    </main>\n  </div>\n\n  <div class=\"pre-footer\" data-js-no-preview><i class=\"icon\"></i></div>\n  <CommentsArea identifier={page.slug} />\n  <SearchFooter />\n  <RelatedPosts page={page} />\n</BaseLayout>\n\n<style lang=\"scss\" is:global>\n  @import '../sass/2017/utils';\n  @import '../sass/2017/markdown/a-em';\n  @import '../sass/2017/markdown/code';\n  @import '../sass/2017/markdown/headings';\n  @import '../sass/2017/markdown/p';\n  @import '../sass/2017/markdown/table';\n  @import '../sass/2017/markdown/ul';\n  @import '../sass/2017/components/h2-section';\n  @import '../sass/2017/components/h3-section';\n  @import '../sass/2017/components/h3-section-list';\n  @import '../sass/2017/components/hint-mark';\n  @import '../sass/2017/components/intro-content';\n  @import '../sass/2017/components/main-heading';\n  @import '../sass/2017/components/pre-footer';\n</style>\n\n<script>\n  import { setupNoPreview } from '~/scripts/v2017/behaviors_2/no-preview'\n  import { setupAnchors } from '~/scripts/v2017/behaviors_2/anchors'\n\n  setupNoPreview()\n  setupAnchors()\n</script>\n"
  },
  {
    "path": "src/components/gaEnabled.tsx",
    "content": ""
  },
  {
    "path": "src/config.ts",
    "content": "const isProd = Boolean(import.meta.env.PROD)\n\nexport const site = {\n  url: 'https://devhints.io',\n  title: 'Devhints.io cheatsheets'\n} as const\n\nexport const etc = {\n  advertisedSheetCount: 357\n} as const\n\nexport const disqus = {\n  enabled: true,\n  host: 'devhints.disqus.com'\n} as const\n\nexport const googleAnalytics = {\n  enabled: isProd,\n  measurementId: 'G-N7TC6B227L'\n} as const\n\nexport const github = {\n  repositoryUrl: 'https://github.com/rstacruz/cheatsheets',\n  branch: 'master'\n} as const\n\nexport const urls = {\n  newCheatsheetUrl: 'https://github.com/rstacruz/cheatsheets/issues/907'\n} as const\n\nexport const carbon = {\n  enabled: isProd,\n  // src: 'https://cdn.carbonads.com/carbon.js?serve=CE7IK5QM&placement=devhintsio'\n  src: 'https://pubsrv.devhints.io/carbon.js?serve=CE7IK5QM&placement=devhintsio'\n} as const\n\nexport const categories = [\n  'Analytics',\n  'Ansible',\n  'Apps',\n  'C-like',\n  'CLI',\n  'CSS',\n  'Databases',\n  'Devops',\n  'Elixir',\n  'Git',\n  'HTML',\n  'Java & JVM',\n  'JavaScript',\n  'JavaScript libraries',\n  'Jekyll',\n  'Ledger',\n  'Markup',\n  'macOS',\n  'Node.js',\n  'PHP',\n  'Python',\n  'Rails',\n  'React',\n  'Ruby',\n  'Ruby libraries',\n  'Vim',\n  'Fitness',\n  'Others'\n]\n\nexport const announcement = {\n  id: '2023-12-14',\n  title: `We're on Twitter ♥️`,\n  body: [\n    `Follow [@devhints](https://twitter.com/devhints) on X/Twitter for daily \"today I learned\" snippets.`,\n    ``,\n    `Also: I've started a new blog with some insights on web development. Have a look! [**ricostacruz.com/posts**](https://ricostacruz.com/posts?utm_source=devhints)`\n  ].join('\\n')\n}\n"
  },
  {
    "path": "src/env.d.ts",
    "content": "/// <reference types=\"astro/client\" />\n"
  },
  {
    "path": "src/lib/domutils/onScrollVisible.ts",
    "content": "/**\n * Trigger a `callback` when an `element` is made visible.\n */\n\nexport function onScrollVisible(element: HTMLElement, callback: () => void) {\n  if (typeof IntersectionObserver !== 'function') {\n    callback()\n    return\n  }\n\n  const observer = new IntersectionObserver((entries) => {\n    entries.forEach((entry) => {\n      if (entry.isIntersecting) {\n        callback()\n        observer.unobserve(element)\n      }\n    })\n  })\n  observer.observe(element)\n}\n"
  },
  {
    "path": "src/lib/fuseSearch/__snapshots__/fuseSearch.test.ts.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`Simple pages scenario > multi-result search 1`] = `\n[\n  {\n    \"item\": {\n      \"slug\": \"react\",\n      \"title\": \"React\",\n    },\n    \"refIndex\": 0,\n  },\n  {\n    \"item\": {\n      \"slug\": \"react-router\",\n      \"title\": \"React Router\",\n    },\n    \"refIndex\": 2,\n  },\n]\n`;\n\nexports[`Simple pages scenario > no-result search 1`] = `[]`;\n\nexports[`Simple pages scenario > one-result search 1`] = `\n[\n  {\n    \"item\": {\n      \"slug\": \"vim\",\n      \"title\": \"Vim\",\n    },\n    \"refIndex\": 1,\n  },\n]\n`;\n"
  },
  {
    "path": "src/lib/fuseSearch/fuseSearch.test.ts",
    "content": "import { buildFuseIndex, parseFuse } from './fuseSearch'\n\ndescribe('Simple pages scenario', () => {\n  // prettier-ignore\n  const pages = {\n    \"react\": { slug: \"react\", frontmatter: { title: \"React\" } },\n    \"vim\": { slug: \"vim\", frontmatter: { title: \"Vim\" } },\n    \"react-router\": { slug: \"react-router\", frontmatter: { title: \"React Router\" } },\n  }\n\n  let fuse: ReturnType<typeof parseFuse>\n\n  runTest({\n    label: 'one-result search',\n    query: 'vim'\n  })\n  runTest({\n    label: 'multi-result search',\n    query: 'react'\n  })\n  runTest({\n    label: 'no-result search',\n    query: 'skinamarink'\n  })\n\n  beforeEach(() => {\n    const externalData = buildFuseIndex(pages)\n    fuse = parseFuse(externalData)\n  })\n\n  function runTest({ label, query }: { label: string; query: string }) {\n    test(label, () => {\n      const results = fuse.search(query)\n      expect(results).toMatchSnapshot()\n    })\n  }\n})\n"
  },
  {
    "path": "src/lib/fuseSearch/fuseSearch.ts",
    "content": "import Fuse from 'fuse.js'\nimport type { SheetPage } from '~/lib/page'\n\n/**\n * This is what gets served in searchindex.json\n */\n\nexport type ExternalSearchData = {\n  index: ReturnType<FuseIndex['toJSON']>\n  rows: Array<{ title: string; slug: string }>\n}\n\nexport type Row = { title: string; slug: string }\n\nexport type FuseIndex = Fuse.FuseIndex<Row>\n\n/** A subset of `SheetPage` needed for search indexing */\ntype PartialSheetPage = {\n  slug: SheetPage['slug']\n  frontmatter: Pick<SheetPage['frontmatter'], 'title'>\n}\n\n/**\n * Get `pages` and turn them into a fuse index json.\n */\n\nexport function buildFuseIndex(pages: Record<string, PartialSheetPage>) {\n  const rows = Object.values(pages).map((page): Row => {\n    return { title: (page.frontmatter.title ?? '') as string, slug: page.slug }\n  })\n  const myIndex: FuseIndex = Fuse.createIndex(['title', 'slug'], rows)\n  const indexJSON = myIndex.toJSON()\n\n  const result = { index: indexJSON, rows }\n  return result\n}\n\nexport async function fetchFuse() {\n  const res = await fetch('/searchindex.json')\n  if (res.status > 400) throw new Error('Failed to fetch searchindex.json')\n  return res.json()\n}\n\nexport function parseFuse(data: ExternalSearchData) {\n  const index = Fuse.parseIndex(data.index)\n  const fuse = new Fuse<Row>(data.rows, {}, index)\n  return fuse\n}\n"
  },
  {
    "path": "src/lib/kramdown.ts",
    "content": "import { spawn } from 'node:child_process'\nimport crypto from 'node:crypto'\nimport { readFile } from 'node:fs/promises'\n\nexport type KramdownResult = {\n  html: string\n}\n\n/**\n * Renders via Ruby Kramdown\n */\n\nexport async function renderKramdown(input: string): Promise<KramdownResult> {\n  return (await renderKramdownFromCache(input)) ?? renderKramdownJIT(input)\n}\n\n/**\n * Tries to get from .cache/ (left by `npm run cache_markdown`).\n */\n\nasync function renderKramdownFromCache(\n  input: string\n): Promise<KramdownResult | undefined> {\n  const digest = crypto.createHash('sha256').update(input.trim()).digest('hex')\n  const cachePath = `.cache/${digest}.html`\n\n  try {\n    const result = await readFile(cachePath, 'utf-8')\n    return { html: result }\n  } catch (err) {\n    if (import.meta.env.PROD) console.log(`Cache MISS (${cachePath})`)\n  }\n}\n\n/**\n * Renders via Kramdown by invoking Ruby.\n */\n\nfunction renderKramdownJIT(input: string): Promise<KramdownResult> {\n  return new Promise((resolve, reject) => {\n    let output = ''\n    const child = spawn('bundle', ['exec', 'ruby', './src/ruby/kramdown.rb'])\n    child.stdin.write(input)\n    child.stdin.end()\n\n    child.stdout.on('data', (data: string) => {\n      output += data\n    })\n\n    child.on('exit', (code: number) => {\n      if (code !== 0) {\n        reject(new Error(`Exited with code ${code}`))\n      } else {\n        resolve({ html: output })\n      }\n    })\n  })\n}\n"
  },
  {
    "path": "src/lib/links.ts",
    "content": "import { github } from '~/config'\nimport type { SheetPage } from './page'\n\nexport function getEditLink(page: { slug: string } | null | undefined) {\n  if (!page) return null\n  return `${github.repositoryUrl}/blob/${github.branch}/${page.slug}.md`\n}\n\nexport function getUrlFromPage(\n  page?: SheetPage | undefined,\n  siteUrl?: URL | undefined\n) {\n  if (!siteUrl) throw new Error('No site URL found')\n  if (!page) return siteUrl.toString()\n  if (page.slug) return `${siteUrl}${page.slug}`\n  throw new Error(\"Can't get URL from page\")\n}\n"
  },
  {
    "path": "src/lib/page/accessors.ts",
    "content": "/*\n * Accessors: things that get stuff from a specific record. Usually in the form\n * of `get(page, ...) -> any`\n */\n\nimport type { SheetPage } from '../page'\n\n/**\n * Check if a page has a tag\n */\n\nexport function hasTag(page: SheetPage, tagName: string): boolean {\n  return (\n    (page.frontmatter.tags && page.frontmatter.tags.includes(tagName)) || false\n  )\n}\n\n/**\n * Checks if something should appear on the homepage\n */\n\nexport function isListed(page: SheetPage): boolean {\n  return page.frontmatter.category !== 'Hidden'\n}\n"
  },
  {
    "path": "src/lib/page/queries.ts",
    "content": "import { categories } from '../../config'\nimport type { SheetPage } from '../page'\nimport { hasTag, isListed } from './accessors'\n\nexport type Category = {\n  pages: SheetPage[]\n  title: string\n  id: string\n}\n\n/**\n * Returns categories and their corresponding pages.\n */\n\nexport function getPagesByCategory(pages: Record<string, SheetPage>) {\n  const pageCategories: Record<string, Category> = {}\n\n  for (const category of categories) {\n    pageCategories[category] = { pages: [], title: category, id: category }\n  }\n\n  for (const page of Object.values(pages)) {\n    if (!isListed(page)) continue\n\n    const categoryName = page.frontmatter.category ?? 'Others'\n    if (!categoryName) continue\n\n    let cat = pageCategories[categoryName]\n    if (!cat) cat = pageCategories['Others']\n\n    cat.pages.push(page)\n  }\n  return pageCategories\n}\n\n/**\n * Returns categories and their corresponding pages.\n */\n\nexport function getRecentPages(\n  pages: Record<string, SheetPage>,\n  options?: { maxCount?: number }\n): SheetPage[] {\n  const { maxCount = 8 } = options ?? {}\n\n  return Object.values(pages)\n    .filter((page) => isListed(page) && page.frontmatter.updated)\n    .sort(compare('desc', (page: SheetPage) => page.frontmatter.updated ?? ''))\n    .slice(0, maxCount)\n}\n\n/**\n * Return featured pages for the home page\n */\n\nexport function getFeaturedPages(\n  pages: Record<string, SheetPage>,\n  options?: { maxCount?: number }\n): SheetPage[] {\n  const { maxCount = 8 } = options ?? {}\n\n  return Object.values(pages)\n    .filter((page) => isListed(page) && hasTag(page, 'Featured'))\n    .sort(compare('asc', (page: SheetPage) => page.slug ?? ''))\n    .slice(0, maxCount)\n}\n\n/**\n * Top pages (highest weight)\n */\n\nexport function getTopPages(\n  pages: Record<string, SheetPage>,\n  referencePage: SheetPage,\n  options?: { maxCount?: number }\n): SheetPage[] {\n  const { maxCount = 6 } = options ?? {}\n\n  return Object.values(pages)\n    .filter((page) => isListed(page) && 'weight' in page.frontmatter)\n    .filter((page) => page.slug !== referencePage.slug)\n    .sort(compare('asc', (page: SheetPage) => page.slug ?? ''))\n    .sort(compare('asc', (page: SheetPage) => page.frontmatter.weight ?? 0))\n    .slice(0, maxCount)\n}\n\n/**\n * Top pages (highest weight)\n */\n\nexport function getRelatedPages(\n  pages: Record<string, SheetPage>,\n  referencePage: SheetPage,\n  options?: { maxCount?: number }\n): SheetPage[] {\n  const { maxCount = 6 } = options ?? {}\n  const category = referencePage.frontmatter.category\n\n  return Object.values(pages)\n    .filter((page) => isListed(page) && page.frontmatter.category === category)\n    .filter((page) => page.slug !== referencePage.slug)\n    .sort(compare('asc', (page: SheetPage) => page.slug ?? ''))\n    .sort(compare('asc', (page: SheetPage) => page.frontmatter.weight ?? 0))\n    .slice(0, maxCount)\n}\n\n/**\n * Helper: Create a comparator function\n */\n\nfunction compare<T>(\n  direction: 'asc' | 'desc',\n  accessor: (input: T) => number | string\n) {\n  const k = direction === 'desc' ? -1 : 1\n\n  return (a: T, b: T): number => {\n    const va = accessor(a)\n    const vb = accessor(b)\n    return k * (va === vb ? 0 : va > vb ? 1 : -1)\n  }\n}\n"
  },
  {
    "path": "src/lib/page.test.ts",
    "content": "import { getPages, mapGlobToPages } from './page'\n\nlet pages: Awaited<ReturnType<typeof getPages>>\nlet keys: string[]\n\nbeforeEach(async () => {\n  pages ??= await getPages()\n  keys ??= Object.keys(pages)\n})\n\ntest('return pages', () => {\n  expect(keys).toContain('react')\n  expect(keys).toContain('bash')\n  expect(keys).toContain('tests/basic')\n})\n\ntest('frontmatter', () => {\n  const page = pages.bash\n  expect(page.slug).toEqual('bash')\n  expect(typeof page.markdown).toEqual('string')\n  expect(typeof page.frontmatter.title).toEqual('string')\n  expect(typeof page.frontmatter.keywords).toEqual('object')\n})\n\ndescribe('mapGlobToPages()', () => {\n  test('basic scenario', () => {\n    const result = mapGlobToPages({\n      bash: ['---', 'title: Bash', '---', '# hi'].join('\\n')\n    })\n\n    expect(result).toMatchInlineSnapshot(`\n      {\n        \"bash\": {\n          \"frontmatter\": {\n            \"title\": \"Bash\",\n          },\n          \"markdown\": \"# hi\",\n          \"slug\": \"bash\",\n        },\n      }\n    `)\n  })\n\n  test('parsing numbers', () => {\n    const result = mapGlobToPages({\n      '101': ['---', 'title: 101', '---', '# hi'].join('\\n')\n    })\n\n    expect(result).toMatchInlineSnapshot(`\n      {\n        \"101\": {\n          \"frontmatter\": {\n            \"title\": \"101\",\n          },\n          \"markdown\": \"# hi\",\n          \"slug\": \"101\",\n        },\n      }\n    `)\n  })\n\n  test('invalid type', () => {\n    expect(() => {\n      mapGlobToPages({\n        '101': ['---', 'title: false', '---', '# hi'].join('\\n')\n      })\n    }).toThrowErrorMatchingInlineSnapshot(\n      `[FrontmatterValidationError: Zod validation error: '101' {\"title\":[\"Invalid input\"]}]`\n    )\n  })\n\n  test('missing frontmatter', () => {\n    const result = mapGlobToPages({\n      '101': ['---', 'title: 101', '---', '# hi'].join('\\n')\n    })\n\n    expect(result).toMatchInlineSnapshot(`\n      {\n        \"101\": {\n          \"frontmatter\": {\n            \"title\": \"101\",\n          },\n          \"markdown\": \"# hi\",\n          \"slug\": \"101\",\n        },\n      }\n    `)\n  })\n})\n"
  },
  {
    "path": "src/lib/page.ts",
    "content": "import grayMatter from 'gray-matter'\nimport { ZodError } from 'zod'\nimport {\n  SheetFrontmatterSchema,\n  type SheetFrontmatter\n} from '~/types/SheetFrontmatter'\n\nexport type SheetPage = {\n  slug: string\n  markdown: string\n  frontmatter: SheetFrontmatter\n}\n\nclass FrontmatterValidationError extends Error {\n  filePath: string\n\n  constructor(message: string, options: ErrorOptions & { filePath: string }) {\n    super(message, options)\n    this.name = 'FrontmatterValidationError'\n    this.filePath = options.filePath\n  }\n}\n/**\n * Returns pages\n */\n\nexport async function getPages(): Promise<Record<string, SheetPage>> {\n  const files = import.meta.glob(\n    [\n      '../../*.md',\n      '../../*/*.md',\n      '!../../README.md',\n      '!../../CONTRIBUTING.md',\n      '!../../404.md',\n      '!../../index.md',\n      '!../../index@2016.md'\n    ],\n    {\n      eager: true,\n      query: '?raw',\n      import: 'default'\n    }\n  ) as Record<string, string>\n\n  return mapGlobToPages(files)\n}\n\nexport function mapGlobToPages(\n  files: Record<string, string>\n): Record<string, SheetPage> {\n  const result: Record<string, SheetPage> = {}\n\n  for (const [filePath, rawContent] of Object.entries(files)) {\n    const slug = filePath.replace(/^\\.\\.\\/\\.\\.\\//, '').replace(/\\.md$/, '')\n    // ^ filePath == \"../../README.md\"\n\n    const res = grayMatter(rawContent)\n    // ^ res == { content: '...', data: {} }\n\n    const frontmatter = (() => {\n      try {\n        return SheetFrontmatterSchema.parse(res.data)\n      } catch (err) {\n        if (!(err instanceof ZodError)) throw err\n        const debugInfo = JSON.stringify(err.flatten().fieldErrors)\n        const newErr = new FrontmatterValidationError(\n          `Zod validation error: '${filePath}' ${debugInfo}`,\n          { cause: err, filePath }\n        )\n\n        throw newErr\n      }\n    })()\n\n    result[slug] = { slug, markdown: res.content, frontmatter }\n  }\n  return result\n}\n"
  },
  {
    "path": "src/lib/render.test.ts",
    "content": "import { render } from './render'\n\nit('h3 only', async () => {\n  const input = ['### H3', '', 'This is some h3'].join('\\n')\n  const { html } = await render(input)\n  expect(html).toMatchInlineSnapshot(`\n    \"<section class=\"h2-section\"><div class=\"body h3-section-list\">\n    <section class=\"h3-section\"><h3 id=\"h3\">H3</h3><div class=\"body\">\n\n    <p>This is some h3</p>\n    </div></section></div></section>\"\n  `)\n})\n\nit('multiple h3s', async () => {\n  const input = ['### One', 'x', '### Two', 'y'].join('\\n')\n  const { html } = await render(input)\n  expect(html).toMatchInlineSnapshot(`\n    \"<section class=\"h2-section\"><div class=\"body h3-section-list\">\n    <section class=\"h3-section\"><h3 id=\"one\">One</h3><div class=\"body\">\n    <p>x</p>\n    </div></section><section class=\"h3-section\"><h3 id=\"two\">Two</h3><div class=\"body\">\n    <p>y</p>\n    </div></section></div></section>\"\n  `)\n})\n\nit('multiple h2s and h3s', async () => {\n  const input = [\n    '## Sun',\n    '### One',\n    'x',\n    '### Two',\n    'y',\n    '## Moon',\n    '### Three',\n    'x',\n    '### Four',\n    'y'\n  ].join('\\n')\n  const { html } = await render(input)\n  expect(html).toMatchInlineSnapshot(`\n    \"<section class=\"h2-section\"><h2 id=\"sun\">Sun</h2><div class=\"body h3-section-list\">\n    <section class=\"h3-section\"><h3 id=\"one\">One</h3><div class=\"body\">\n    <p>x</p>\n    </div></section><section class=\"h3-section\"><h3 id=\"two\">Two</h3><div class=\"body\">\n    <p>y</p>\n    </div></section></div></section><section class=\"h2-section\"><h2 id=\"moon\">Moon</h2><div class=\"body h3-section-list\">\n    <section class=\"h3-section\"><h3 id=\"three\">Three</h3><div class=\"body\">\n    <p>x</p>\n    </div></section><section class=\"h3-section\"><h3 id=\"four\">Four</h3><div class=\"body\">\n    <p>y</p>\n    </div></section></div></section>\"\n  `)\n})\n\nit('nothing', async () => {\n  const input = ['Nothing'].join('\\n')\n  const { html } = await render(input)\n  expect(html).toMatchInlineSnapshot(`\n    \"<section class=\"h2-section\"><div class=\"body h3-section-list\">\n    <section class=\"h3-section\"><div class=\"body\"><p>Nothing</p>\n    </div></section></div></section>\"\n  `)\n})\n\nit('h3s with a class', async () => {\n  const input = ['### One', 'x', '### Two', '{: .-prime}', 'y'].join('\\n')\n  const { html } = await render(input)\n  expect(html).toMatchInlineSnapshot(`\n    \"<section class=\"h2-section\"><div class=\"body h3-section-list\">\n    <section class=\"h3-section\"><h3 id=\"one\">One</h3><div class=\"body\">\n    <p>x</p>\n    </div></section><section class=\"h3-section -prime\"><h3 class=\"-prime\" id=\"two\">Two</h3><div class=\"body -prime\">\n    <p>y</p>\n    </div></section></div></section>\"\n  `)\n})\n\nit('h2 class', async () => {\n  const input = ['## Intro', '{: .-three-column}', '### One', 'x'].join('\\n')\n  const { html } = await render(input)\n  expect(html).toMatchInlineSnapshot(`\n    \"<section class=\"h2-section -three-column\"><h2 class=\"-three-column\" id=\"intro\">Intro</h2><div class=\"body h3-section-list -three-column\">\n    <section class=\"h3-section\"><h3 id=\"one\">One</h3><div class=\"body\">\n    <p>x</p>\n    </div></section></div></section>\"\n  `)\n})\n"
  },
  {
    "path": "src/lib/render.ts",
    "content": "import rehypePrism from '@mapbox/rehype-prism'\nimport rehypeParse from 'rehype-parse'\nimport rehypeStringify from 'rehype-stringify'\nimport { unified } from 'unified'\nimport { renderKramdown } from './kramdown'\nimport { plugin as rehypeSectionize } from '@rstacruz/rehype-sectionize'\n\nconst PRISM_CONFIG = {\n  // For a list of languages Prism supports:\n  // https://github.com/PrismJS/prism/tree/master/components\n  alias: {\n    bash: ['sh', 'fish'],\n    ini: ['dosini'],\n    pug: ['jade'],\n    // \"ignore\" actually is for gitignore files, but it's closest to a\n    // neutral highlighting that I can find\n    ignore: [\n      // \"nohighlight\" was a Jekyll thing to prevent syntax highlighting\n      'nohighlight',\n      'org'\n    ]\n  }\n}\n\nconst REHYPE_SECTIONIZE_CONFIG = [\n  {\n    level: 'h2',\n    prelude: {\n      enabled: true,\n      tagName: 'section',\n      properties: { className: 'h3-section-list' }\n    },\n    section: {\n      addHeadingClass: true,\n      tagName: 'section',\n      properties: { className: 'h2-section' }\n    },\n    body: {\n      addHeadingClass: true,\n      enabled: true,\n      tagName: 'div',\n      properties: { className: 'body h3-section-list' }\n    }\n  },\n  {\n    level: 'h3',\n    prelude: {\n      enabled: false\n    },\n    section: {\n      addHeadingClass: true,\n      properties: { className: 'h3-section' },\n      tagName: 'section'\n    },\n    body: {\n      addHeadingClass: true,\n      enabled: true,\n      properties: { className: 'body' },\n      tagName: 'div'\n    }\n  }\n]\n\n/**\n * Renders Markdown to HTML via Kramdown and applies some post-processing.\n */\n\nexport async function render(input: string): Promise<{ html: string }> {\n  let { html } = await renderKramdown(input)\n  html = addInitialH2(html)\n  html = addH3s(html)\n  html = await processRehype(html)\n  html = removeBlankHeadings(html)\n  return { html }\n}\n\n// Inject extra H2 if needed. This fixes layout issues\nfunction addInitialH2(html: string): string {\n  if (html.trim().startsWith('<h2')) return html\n  return `<h2></h2>\\n${html}`\n}\n\n// Add extra H3's in cases of `h2 + (ul|p|ol)`\n// Fixes layout issues in \"Also see\" sections (eg, /awscli)\n// The blank H3's will be removed later\nfunction addH3s(html: string): string {\n  html = html.replace(\n    /(\\/h2>[\\s\\r\\n]*)(<(?:ul|p|ol))/g,\n    (_, closing, opening) => {\n      return `${closing}<h3></h3>${opening}`\n    }\n  )\n  return html\n}\n\nfunction removeBlankHeadings(html: string): string {\n  return html.replace(/<h3><\\/h3>/g, '').replace(/<h2><\\/h2>/g, '')\n}\n\n/**\n * Runs through Rehype to add syntax highlighting and more.\n */\n\nasync function processRehype(inputHtml: string): Promise<string> {\n  const processResult = await unified()\n    .use(rehypeParse)\n    // @ts-expect-error dunno how to fix this\n    .use(rehypePrism, PRISM_CONFIG)\n    .use(rehypeStringify)\n    // @ts-expect-error dunno how to fix this\n    .use(rehypeSectionize, REHYPE_SECTIONIZE_CONFIG)\n    .process(inputHtml)\n\n  let html = String(processResult)\n  html = html\n    .replace('<html><head></head><body>', '')\n    .replace('</body></html>', '')\n  return html\n}\n"
  },
  {
    "path": "src/lib/seo/__snapshots__/seo.test.ts.snap",
    "content": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`getSEOPropsForPage() > title only 1`] = `\n{\n  \"links\": {\n    \"canonical\": \"https://devhints.io/react\",\n  },\n  \"meta\": {\n    \"app:pageurl\": \"https://devhints.io/react\",\n    \"description\": \"The one-page guide to React: usage, examples, links, snippets, and more.\",\n  },\n  \"metaProperties\": {\n    \"article:tag\": [],\n    \"og:description\": \"The one-page guide to React: usage, examples, links, snippets, and more.\",\n    \"og:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"og:image:height\": \"471\",\n    \"og:image:width\": \"900\",\n    \"og:site_name\": \"Devhints.io cheatsheets\",\n    \"og:title\": \"React cheatsheet\",\n    \"og:type\": \"article\",\n    \"og:url\": \"https://devhints.io/react\",\n    \"twitter:description\": \"The one-page guide to React: usage, examples, links, snippets, and more.\",\n    \"twitter:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"twitter:title\": \"React cheatsheet\",\n  },\n  \"title\": \"React cheatsheet\",\n}\n`;\n\nexports[`getSEOPropsForPage() > with Markdown description 1`] = `\n{\n  \"links\": {\n    \"canonical\": \"https://devhints.io/react\",\n  },\n  \"meta\": {\n    \"app:pageurl\": \"https://devhints.io/react\",\n    \"description\": \"A React cheatsheet (Markdown text) · One-page guide to React\",\n  },\n  \"metaProperties\": {\n    \"article:tag\": [],\n    \"og:description\": \"A React cheatsheet (Markdown text) · One-page guide to React\",\n    \"og:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"og:image:height\": \"471\",\n    \"og:image:width\": \"900\",\n    \"og:site_name\": \"Devhints.io cheatsheets\",\n    \"og:title\": \"React cheatsheet\",\n    \"og:type\": \"article\",\n    \"og:url\": \"https://devhints.io/react\",\n    \"twitter:description\": \"A React cheatsheet (Markdown text) · One-page guide to React\",\n    \"twitter:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"twitter:title\": \"React cheatsheet\",\n  },\n  \"title\": \"React cheatsheet\",\n}\n`;\n\nexports[`getSEOPropsForPage() > with description 1`] = `\n{\n  \"links\": {\n    \"canonical\": \"https://devhints.io/react\",\n  },\n  \"meta\": {\n    \"app:pageurl\": \"https://devhints.io/react\",\n    \"description\": \"A React cheatsheet · One-page guide to React\",\n  },\n  \"metaProperties\": {\n    \"article:tag\": [],\n    \"og:description\": \"A React cheatsheet · One-page guide to React\",\n    \"og:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"og:image:height\": \"471\",\n    \"og:image:width\": \"900\",\n    \"og:site_name\": \"Devhints.io cheatsheets\",\n    \"og:title\": \"React cheatsheet\",\n    \"og:type\": \"article\",\n    \"og:url\": \"https://devhints.io/react\",\n    \"twitter:description\": \"A React cheatsheet · One-page guide to React\",\n    \"twitter:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"twitter:title\": \"React cheatsheet\",\n  },\n  \"title\": \"React cheatsheet\",\n}\n`;\n\nexports[`getSEOPropsForPage() > with description, keywords 1`] = `\n{\n  \"links\": {\n    \"canonical\": \"https://devhints.io/react\",\n  },\n  \"meta\": {\n    \"app:pageurl\": \"https://devhints.io/react\",\n    \"description\": \"A React cheatsheet · One-page guide to React\",\n  },\n  \"metaProperties\": {\n    \"article:tag\": [],\n    \"og:description\": \"A React cheatsheet · One-page guide to React\",\n    \"og:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"og:image:height\": \"471\",\n    \"og:image:width\": \"900\",\n    \"og:site_name\": \"Devhints.io cheatsheets\",\n    \"og:title\": \"React cheatsheet\",\n    \"og:type\": \"article\",\n    \"og:url\": \"https://devhints.io/react\",\n    \"twitter:description\": \"A React cheatsheet · One-page guide to React\",\n    \"twitter:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"twitter:title\": \"React cheatsheet\",\n  },\n  \"title\": \"React cheatsheet\",\n}\n`;\n\nexports[`getSEOPropsForPage() > with keywords 1`] = `\n{\n  \"links\": {\n    \"canonical\": \"https://devhints.io/react\",\n  },\n  \"meta\": {\n    \"app:pageurl\": \"https://devhints.io/react\",\n    \"description\": \"hooks · components · props · One-page guide to React\",\n  },\n  \"metaProperties\": {\n    \"article:tag\": [],\n    \"og:description\": \"hooks · components · props · One-page guide to React\",\n    \"og:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"og:image:height\": \"471\",\n    \"og:image:width\": \"900\",\n    \"og:site_name\": \"Devhints.io cheatsheets\",\n    \"og:title\": \"React cheatsheet\",\n    \"og:type\": \"article\",\n    \"og:url\": \"https://devhints.io/react\",\n    \"twitter:description\": \"hooks · components · props · One-page guide to React\",\n    \"twitter:image\": \"https://assets.devhints.io/previews/react.jpg\",\n    \"twitter:title\": \"React cheatsheet\",\n  },\n  \"title\": \"React cheatsheet\",\n}\n`;\n"
  },
  {
    "path": "src/lib/seo/jsonJd.test.ts",
    "content": "import { getJSONLDsForPage } from './jsonLd'\n\nit('works', () => {\n  const page = {\n    slug: 'react',\n    frontmatter: {\n      title: 'React',\n      description: 'A React cheatsheet',\n      category: 'JavaScript'\n    }\n  }\n\n  const output = getJSONLDsForPage(page)\n  expect(output).toMatchInlineSnapshot(`\n    [\n      {\n        \"@context\": \"http://schema.org\",\n        \"@type\": \"NewsArticle\",\n        \"description\": \"A React cheatsheet · One-page guide to React\",\n        \"headline\": \"React cheatsheet\",\n        \"image\": [\n          \"https://assets.devhints.io/previews/react.jpg\",\n        ],\n        \"mainEntityOfPage\": {\n          \"@id\": \"https://google.com/article\",\n          \"@type\": \"WebPage\",\n        },\n      },\n      {\n        \"@context\": \"http://schema.org\",\n        \"@type\": \"BreadcrumbList\",\n        \"itemListElement\": [\n          {\n            \"@type\": \"ListItem\",\n            \"item\": {\n              \"@id\": \"https://devhints.io/#javascript\",\n              \"name\": \"JavaScript\",\n            },\n            \"position\": 1,\n          },\n          {\n            \"@type\": \"ListItem\",\n            \"item\": {\n              \"@id\": \"https://devhints.io/react\",\n              \"name\": \"React cheatsheet\",\n            },\n            \"position\": 2,\n          },\n        ],\n      },\n    ]\n  `)\n})\n"
  },
  {
    "path": "src/lib/seo/jsonLd.ts",
    "content": "import type { JsonLdDocument } from '~/types/JsonLdDocument'\nimport { site } from '../../config'\nimport { getDescription, getPageImage, getPageURL } from './seo'\n\nexport function getJSONLDsForPage(page: {\n  // TODO: rename getJsonLdSchemasForPage\n  slug: string\n  frontmatter: {\n    title?: string\n    description?: string\n    category?: string\n  }\n}): Array<JsonLdDocument> {\n  const description = getDescription(page)\n  const image = getPageImage(page)\n  const url = getPageURL(page)\n  const category = page.frontmatter.category ?? 'Others'\n  const categoryAnchor = category.toLowerCase().replace(/ /g, '-')\n  const headline = page.frontmatter.title\n    ? `${page.frontmatter.title} cheatsheet`\n    : ''\n\n  const newsArticle: JsonLdDocument = {\n    '@context': 'http://schema.org',\n    '@type': 'NewsArticle',\n    mainEntityOfPage: {\n      '@type': 'WebPage',\n      '@id': 'https://google.com/article'\n    },\n    headline,\n    image: [image],\n    description: description\n  }\n\n  const breadcrumb: JsonLdDocument = {\n    '@context': 'http://schema.org',\n    '@type': 'BreadcrumbList',\n    itemListElement: [\n      {\n        '@type': 'ListItem',\n        position: 1,\n        item: {\n          '@id': `${site.url}/#${categoryAnchor}`,\n          name: category\n        }\n      },\n      {\n        '@type': 'ListItem',\n        position: 2,\n        item: {\n          '@id': url,\n          name: headline\n        }\n      }\n    ]\n  }\n\n  return [newsArticle, breadcrumb]\n}\n"
  },
  {
    "path": "src/lib/seo/seo.test.ts",
    "content": "import { getSEOPropsForPage, toPlainText } from './seo'\n\nconst slug = 'react'\nconst title = 'React'\nconst description = 'A React cheatsheet'\nconst markdownDescription =\n  'A [React](https://react.dev) cheatsheet (*Markdown text*)'\nconst keywords = ['hooks', 'components', 'props']\n\ndescribe('getSEOPropsForPage()', () => {\n  runTest({\n    title: 'title only',\n    input: { slug, frontmatter: { title } }\n  })\n  runTest({\n    title: 'with description',\n    input: { slug, frontmatter: { title, description } }\n  })\n  runTest({\n    title: 'with Markdown description',\n    input: { slug, frontmatter: { title, description: markdownDescription } }\n  })\n  runTest({\n    title: 'with description, keywords',\n    input: { slug, frontmatter: { title, description, keywords } }\n  })\n  runTest({\n    title: 'with keywords',\n    input: { slug, frontmatter: { title, keywords } }\n  })\n\n  function runTest({ title, input }: { title: string; input: any }) {\n    test(title, () => {\n      const output = getSEOPropsForPage(input)\n      expect(output).toMatchSnapshot()\n    })\n  }\n})\n\ndescribe('toPlainText()', () => {\n  test('converts markdown to plain text', () => {\n    const input = 'This is a **bold** text'\n    const output = toPlainText(input)\n    expect(output).toEqual('This is a bold text')\n  })\n\n  test('removes HTML tags', () => {\n    const input = '<p>This is a <strong>bold</strong> text</p>'\n    const output = toPlainText(input)\n    expect(output).toEqual('This is a bold text')\n  })\n\n  test('handles empty input', () => {\n    const input = ''\n    const output = toPlainText(input)\n    expect(output).toEqual('')\n  })\n})\n"
  },
  {
    "path": "src/lib/seo/seo.ts",
    "content": "import snarkdown from 'snarkdown'\nimport { site } from '../../config'\nimport type { SheetPage } from '../page'\n\nexport function getSEOPropsForHome() {\n  const t = {\n    title: 'Devhints — TL;DR for developer documentation',\n    description: 'A ridiculous collection of web development cheatsheets'\n  }\n  const url = site.url\n  const image = 'https://assets.devhints.io/previews/index.jpg'\n\n  return {\n    title: t.title,\n    links: {\n      canonical: url\n    },\n    meta: {\n      description: t.description,\n      'app:pageurl': url\n    },\n    metaProperties: denull({\n      'og:description': t.description,\n      'og:image:height': '471',\n      'og:image': image,\n      'og:image:width': '900',\n      'og:site_name': site.title,\n      'og:title': t.title,\n      'og:type': 'website',\n      'og:url': url,\n      // BUG: twitter card props should be metaNames\n      'twitter:title': image,\n      'twitter:image': image,\n      'twitter:description': t.description\n    })\n  }\n}\n\nexport function getSEOPropsForPage(\n  page: Pick<SheetPage, 'slug' | 'frontmatter'>\n) {\n  const title = `${page.frontmatter.title} cheatsheet`\n  const description = getDescription(page)\n  const image = getPageImage(page)\n  const url = getPageURL(page)\n\n  return {\n    title: title,\n    links: {\n      canonical: url\n    },\n    meta: {\n      description,\n      'app:pageurl': url\n    },\n    metaProperties: denull({\n      'og:description': description,\n      'og:image:height': '471',\n      'og:image': image,\n      'og:image:width': '900',\n      'og:site_name': site.title,\n      'og:title': title,\n      'og:type': 'article',\n      'og:url': url,\n      'article:tag': page.frontmatter.tags ?? [],\n      'article:section': page.frontmatter.category,\n      // BUG: twitter card props should be metaNames\n      'twitter:title': title,\n      'twitter:image': image,\n      'twitter:description': description\n    })\n  }\n}\n\n/**\n * Return a description for a page\n */\n\nexport function getDescription(page: {\n  frontmatter: {\n    title?: string\n    intro?: string\n    description?: string\n    keywords?: string[]\n  }\n}) {\n  const t = {\n    withDescriptionAndIntro: `{description} {intro}`,\n    withDescription: `{description} · One-page guide to {title}`,\n    withKeywordsAndIntro: `{keywords} · {intro}`,\n    withKeywords: `{keywords} · One-page guide to {title}`,\n    withIntro: `One-page guide to {title}: usage, examples, and more. {intro}`,\n    default: `The one-page guide to {title}: usage, examples, links, snippets, and more.`\n  }\n\n  let fmt: string = t.default\n\n  if (page.frontmatter.description && page.frontmatter.intro) {\n    fmt = t.withDescriptionAndIntro\n  } else if (page.frontmatter.description) {\n    fmt = t.withDescription\n  } else if (page.frontmatter.keywords && page.frontmatter.intro) {\n    fmt = t.withKeywordsAndIntro\n  } else if (page.frontmatter.keywords) {\n    fmt = t.withKeywords\n  } else if (page.frontmatter.intro) {\n    fmt = t.withIntro\n  } else {\n    fmt = t.default\n  }\n\n  return fmt\n    .replace('{title}', () => page.frontmatter.title ?? '')\n    .replace('{keywords}', () => (page.frontmatter.keywords ?? []).join(' · '))\n    .replace('{intro}', () => toPlainText(page.frontmatter.intro ?? ''))\n    .replace('{description}', () =>\n      toPlainText(page.frontmatter.description ?? '')\n    )\n}\n\n/**\n * Remove falsy values from an object\n */\n\nfunction denull(\n  record: Record<string, string | string[] | null | undefined>\n): Record<string, string | string[]> {\n  return Object.fromEntries(\n    Object.entries(record).filter((entry): entry is [string, string] =>\n      Boolean(entry[1])\n    )\n  )\n}\n\nexport function getPageImage({ slug }: { slug: string }) {\n  return `https://assets.devhints.io/previews/${slug}.jpg`\n}\n\nexport function getPageURL({ slug }: { slug: string }) {\n  return new URL(`/${slug}`, site.url).toString()\n}\n\n/**\n * Convert Markdown to plain text.\n */\n\nexport function toPlainText(input: string) {\n  const html = snarkdown(input)\n  const plainText = html.replace(/<[^>]*>/g, '').replace(/\\n/g, ' ')\n  return plainText\n}\n"
  },
  {
    "path": "src/pages/404.astro",
    "content": "---\nimport cx from 'clsx'\nimport BaseLayout from '~/components/BaseLayout.astro'\nimport TopNav from '~/components/TopNav.astro'\nimport SearchForm from '~/components/V2017Sheet/SearchForm.astro'\n\nconst t = {\n  title: '404',\n  description: \"Sorry, we don't have a cheatsheet for this yet. Try searching!\",\n  goHome: 'Back to home'\n}\n\nconst styles = {\n  body: 'V2017Sheet__body max-w-slim p-6 md:px-8 mx-auto'\n}\n\nconst headingStyles = {\n  root: cx('SiteHeading404__root', 'my-12 mt-[30svh] text-center'),\n  h1: cx('SiteHeading404__h1', `text-5xl font-bold`),\n  tagline: cx('SiteHeading404__tagline', 'mt-4', 'text-2xl')\n}\n---\n\n<BaseLayout title=\"Not found\">\n  <TopNav noEdit noBack />\n  <div class={styles.body}>\n    <div class={headingStyles.root}>\n      <h1 class={headingStyles.h1}>{t.title}</h1>\n      <p class={headingStyles.tagline}>{t.description}</p>\n    </div>\n    <div>\n      <SearchForm isLive />\n      <div class=\"mt-8\"></div>\n      <p class=\"text-center\">\n        <a class=\"push-button\" href=\"/\">{t.goHome}</a>\n      </p>\n    </div>\n  </div>\n</BaseLayout>\n\n<style lang=\"scss\" is:global>\n  @import '../sass/2017/utils';\n  @import '../sass/2017/placeholders/push-button';\n  @import '../sass/2017/components/push-button';\n</style>\n"
  },
  {
    "path": "src/pages/[...slug].astro",
    "content": "---\nimport V2017Sheet from '~/components/V2017Sheet.astro'\nimport { getPages } from '~/lib/page'\nimport type { SheetPage } from '~/lib/page'\n\nexport type Props = {\n  page: SheetPage\n}\n\nconst props = Astro.props as Props\n\nexport async function getStaticPaths() {\n  const pages = await getPages()\n\n  return Promise.all(\n    Object.values(pages).map((page) => {\n      return { props: { page }, params: { slug: page.slug } }\n    })\n  )\n}\n---\n\n<V2017Sheet page={props.page} />\n"
  },
  {
    "path": "src/pages/__tests__/searchindex.json.test.ts",
    "content": "import { GET } from '../searchindex.json'\n\ntest('has data', async () => {\n  const response = await GET()\n  const data = await response.json()\n  expect(typeof data.index).toEqual('object')\n  expect(Array.isArray(data.index.records)).toBeTruthy()\n  expect(Array.isArray(data.rows)).toBeTruthy()\n\n  for (const row of data.rows) {\n    expect(typeof row.title).toBeTruthy() // some titles are numbers?\n    expect(typeof row.slug).toEqual('string')\n  }\n})\n"
  },
  {
    "path": "src/pages/__tests__/sitemap.xml.test.ts",
    "content": "import { GET } from '../sitemap.xml'\n\nlet lines: string[]\n\nbeforeEach(async () => {\n  if (lines) return\n  const response = await GET()\n  const body = await response.text()\n  lines = body.split('\\n')\n})\n\ntest('has data', async () => {\n  expect(lines).toContain('<url><loc>https://devhints.io/react</loc></url>')\n  expect(lines).toContain('<url><loc>https://devhints.io/bash</loc></url>')\n})\n\ntest('skip unlisted sheets', async () => {\n  expect(lines).not.toContain(\n    '<url><loc>https://devhints.io/tests/basic</loc></url>'\n  )\n})\n"
  },
  {
    "path": "src/pages/index.astro",
    "content": "---\nimport cx from 'clsx'\nimport { getPages } from '~/lib/page'\nimport { getSEOPropsForHome } from '~/lib/seo/seo'\nimport {\n  getPagesByCategory,\n  getFeaturedPages,\n  getRecentPages\n} from '~/lib/page/queries'\nimport TopNav from '~/components/TopNav.astro'\nimport BaseLayout from '~/components/BaseLayout.astro'\nimport PageListItem from '~/components/V2017Home/PageListItem.astro'\nimport FeaturedPages from '~/components/V2017Home/FeaturedPages.astro'\nimport Announcements from '~/components/V2017Home/Announcements.astro'\nimport SearchForm from '~/components/V2017Sheet/SearchForm.astro'\nimport CarbonBox from '~/components/V2017/CarbonBox.astro'\nimport SEO from '~/components/SEO/SEO.astro'\nimport { typeStyles } from '~/styles/CommonStyles'\nimport { urls } from '~/config'\n\nconst pages = await getPages()\nconst pageCategories = getPagesByCategory(pages)\nconst featuredPages = getFeaturedPages(pages, { maxCount: 8 })\nconst recentPages = getRecentPages(pages, { maxCount: 18 })\n\nconst seoProps = getSEOPropsForHome()\nconst t = {\n  title: \"Rico's cheatsheets\",\n  tagline: `Hey! I'm <a href='https://ricostacruz.com'>@rstacruz</a> and this is a modest collection of cheatsheets I've written.`,\n  recentlyUpdated: 'Recently updated',\n  seeSomethingMissing: 'See something missing?',\n  requestCheatsheet: 'Request cheatsheet'\n}\n\nconst styles = {\n  body: 'V2017Sheet__body max-w-slim p-6 md:px-8 mx-auto'\n}\n\nconst headingStyles = {\n  root: cx('SiteHeading__root', 'my-12 text-center'),\n  h1: cx('SiteHeading__h1', typeStyles.manrope, 'text-5xl text-zinc-950'),\n  tagline: cx('SiteHeading__tagline', 'text-xl', 'mt-4')\n}\n---\n\n<BaseLayout>\n  <Fragment slot=\"head\">\n    <SEO {...seoProps} />\n  </Fragment>\n  <TopNav noEdit noBack />\n  <div class={styles.body}>\n    <div class={headingStyles.root}>\n      <h1 class={headingStyles.h1}>{t.title}</h1>\n      <p class={headingStyles.tagline} set:html={t.tagline} />\n    </div>\n    <div role=\"banner\">\n      <SearchForm isLive />\n\n      <div class=\"mt-8\"></div>\n\n      {/* Publicite */}\n      <div class=\"pubbox\"><CarbonBox /></div>\n\n      <div class=\"mt-8\"></div>\n    </div>\n\n    <div class=\"pages-list\" role=\"main\">\n      {/* Featured pages */}\n      <FeaturedPages pages={featuredPages} />\n\n      {/* Recent pages */}\n      <h2 class=\"category item\" data-js-searchable-header>\n        <span>{t.recentlyUpdated}</span>\n      </h2>\n      {recentPages.map((page) => <PageListItem page={page} />)}\n\n      {\n        Object.values(pageCategories).map((category) => {\n          if (category.pages.length === 0) return\n\n          return (\n            <>\n              <h2 class=\"category item\" data-js-searchable-header>\n                <span>{category.title}</span>\n              </h2>\n\n              {category.pages.map((page) => (\n                <PageListItem page={page} />\n              ))}\n            </>\n          )\n        })\n      }\n\n      <div class=\"message item missing-message\">\n        <h3>{t.seeSomethingMissing}</h3>\n        <p>\n          <a class=\"push-button\" href={urls.newCheatsheetUrl}\n            >{t.requestCheatsheet}</a\n          >\n        </p>\n      </div>\n    </div>\n  </div>\n  <Announcements />\n</BaseLayout>\n\n<style lang=\"scss\" is:global>\n  @import '../sass/2017/utils';\n  @import '../sass/2017/components/missing-message';\n  @import '../sass/2017/components/pages-list';\n  @import '../sass/2017/components/push-button';\n  @import '../sass/2017/components/notice-box';\n</style>\n"
  },
  {
    "path": "src/pages/searchindex.json.ts",
    "content": "import { buildFuseIndex } from '~/lib/fuseSearch/fuseSearch'\nimport { getPages } from '~/lib/page'\n\n/*\n * Returns a search index that can be hydrated later\n */\n\nexport async function GET() {\n  const result = buildFuseIndex(await getPages())\n  return new Response(JSON.stringify(result), {\n    status: 200,\n    headers: {\n      'Content-Type': 'application/json'\n    }\n  })\n}\n"
  },
  {
    "path": "src/pages/sitemap.xml.ts",
    "content": "import { site } from '~/config'\nimport { getPages } from '~/lib/page'\nimport { isListed } from '~/lib/page/accessors'\n\nexport async function GET() {\n  const lines = [\n    `<?xml version=\"1.0\" encoding=\"UTF-8\"?>`,\n    `<urlset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">`\n  ]\n\n  const visiblePages = Object.values(await getPages()).filter(isListed)\n\n  for (const page of visiblePages) {\n    const url = `${site.url}/${page.slug}`\n    lines.push(`<url><loc>${url}</loc></url>`)\n  }\n\n  lines.push(`</urlset>`)\n\n  const data = lines.join('\\n') + '\\n'\n\n  return new Response(data, {\n    status: 200,\n    headers: { 'Content-Type': 'application/xml' }\n  })\n}\n"
  },
  {
    "path": "src/pages/test_scenarios/seo_tags_test.astro",
    "content": "---\nimport SEO from '~/components/SEO/SEO.astro'\n---\n\n<SEO metaProperties={{ 'article:tags': ['WIP', 'Featured'] }} />\n"
  },
  {
    "path": "src/ruby/cache_kramdown.rb",
    "content": "# frozen_string_literal: true\n\n# Caches Kramdown results in .cache/\n# Normally, Kramdown is invoked as needed (kramdown.rb), but this is\n# going to be slow down builds significantly. By doing all Kramdown\n# rendering beforehand, this cuts down the time from 70s to 10s.\nrequire 'fileutils'\nrequire 'digest'\nrequire_relative 'renderer'\n\n# This seems to default to US-ASCII in some environments, which causes\n# errors in some sheets\nEncoding.default_external = Encoding::UTF_8\n\ndef remove_frontmatter(input_string)\n  input_string.sub(/\\A(---\\s*\\n.*?\\n?)^((---|\\.\\.\\.)\\s*$\\n?)/m, '')\nend\n\nFileUtils.mkdir_p '.cache'\n\nARGV.each do |filepath|\n  input = File.read(filepath)\n  input = remove_frontmatter(input)\n  digest = Digest::SHA2.hexdigest(input.strip)\n  outfile = \".cache/#{digest}.html\"\n  output = Renderer.render(input: input)\n  File.write(outfile, output)\nend\n"
  },
  {
    "path": "src/ruby/kramdown.rb",
    "content": "# frozen_string_literal: true\n\nrequire_relative 'renderer'\nputs Renderer.render(input: $stdin.read)\n"
  },
  {
    "path": "src/ruby/renderer.rb",
    "content": "# frozen_string_literal: true\n\n# Renders Markdown to HTML, emulating Jekyll 2 quirks.\nmodule Renderer\n  module_function\n\n  KRAMDOWN_OPTIONS = {\n    input: 'GFM',\n    hard_wrap: false\n  }.freeze\n\n  def render(input:)\n    require 'kramdown'\n\n    new_input = input.to_s\n      .gsub(/^{% ?raw ?%}\\n/, '') # raw on its own line\n      .gsub(/{% ?raw ?%}/, '') # inline in another line\n      .gsub(/{% include (common\\/[^ ]+) title=\"([^\"]+)\" %}/) {\n        # a reduced subset of Jekyll includes\n        title = $2\n        file = $1\n        filepath = Pathname.new(\"_includes/#{file}\").cleanpath.to_s\n\n        if filepath.start_with?(\"/\") || filepath.start_with?(\".\")\n          raise Errno::ENOENT, \"Invalid include - #{filepath}\"\n        end\n\n        if !File.exist?(filepath)\n          raise Errno::ENOENT, \"Cannot find include - #{filepath}\"\n        end\n\n        data = File.read(filepath)\n        data = data.gsub(/{{ include.title }}/m, title)\n        data\n      }\n      .gsub(/^{% ?endraw ?%}\\n/, '')\n      .gsub(/{% ?endraw ?%}/, '')\n      .gsub(/ {%- if 0 -%}{%- endif -%} /, '') # Used in jinja.md\n      .gsub(/{%- raw -%}\\n?/, '') # Used in jinja.md\n    Kramdown::Document.new(new_input, KRAMDOWN_OPTIONS).to_html\n  end\nend\n"
  },
  {
    "path": "src/ruby/renderer.test.rb",
    "content": "# frozen_string_literal: true\n\nrequire 'minitest/autorun'\n\nrequire_relative 'renderer'\n\ndef run_test(input:, expected:, label:)\n  label ||= (input[0...20]).to_s\n  it(label) do\n    output = Renderer.render(input: input)\n    assert_equal(output.strip, expected.strip)\n  end\nend\n\ndescribe 'Renderer' do\n  it 'with react.md' do\n    input = File.read('./react.md').split(\"---\")[2].strip\n    output = Renderer.render(input: input)\n    refute_includes(output, %(%raw%))\n    refute_includes(output, %(% raw %))\n  end\n\n  it 'With \"{% include %}\" tags' do\n    input = ['{% include common/moment_format.md title=\"Moment\" %}', 'This is some text'].join(\"\\n\")\n    output = Renderer.render(input: input)\n    assert_includes(output, %(<h2 class=\"-three-column\" id=\"moment\">Moment</h2>))\n    assert_includes(output, %(<p>This is some text</p>))\n  end\n\n  run_test(\n    label: 'Basic test',\n    input: 'hola mundo',\n    expected: '<p>hola mundo</p>'\n  )\n\n  run_test(\n    label: 'H1',\n    input: '# hola mundo',\n    expected: %(<h1 id=\"hola-mundo\">hola mundo</h1>)\n  )\n\n  run_test(\n    label: 'H1 with class',\n    input: \"# hola mundo\\n{: .heading}\",\n    expected: %(<h1 class=\"heading\" id=\"hola-mundo\">hola mundo</h1>)\n  )\n\n  run_test(\n    label: 'With \"{% raw %}\" tags',\n    input: ['{% raw %}', 'This is some text', '{% endraw %}'].join(\"\\n\"),\n    expected: %(<p>This is some text</p>)\n  )\n\n  run_test(\n    label: 'With \"{%raw%}\" tags',\n    input: ['{%raw%}', 'This is some text', '{%endraw%}'].join(\"\\n\"),\n    expected: %(<p>This is some text</p>)\n  )\n\n  run_test(\n    label: 'With \"{% raw %}\" tags with new line',\n    input: ['{% raw %}', 'This is some text', '{% endraw %}', 'next line'].join(\"\\n\"),\n    expected: %(<p>This is some text\\nnext line</p>)\n  )\n\n  run_test(\n    label: 'With \"{% raw %}\" tags with 2 new lines',\n    input: ['{% raw %}', 'This is some text', '{% endraw %}', '', 'next paragraph'].join(\"\\n\"),\n    expected: %(<p>This is some text</p>\\n\\n<p>next paragraph</p>)\n  )\nend\n"
  },
  {
    "path": "src/sass/2017/_utils.scss",
    "content": "// Vendor\n@import './variables';\n@import '../vendor/ionicons-inline/ionicons';\n@import '../vendor/modularscale/modularscale';\n\n// Utilities\n@import './utils/font-size';\n@import './utils/gutter';\n@import './utils/heading-style';\n@import './utils/section-gutter';\n@import './utils/section-with-container';\n"
  },
  {
    "path": "src/sass/2017/base/prism_line_highlight.scss",
    "content": "// Based on https://github.com/PrismJS/prism/blob/master@%7B2024-03-01%7D/plugins/line-highlight/prism-line-highlight.css\n// Corrects `color-adjust` (a deprecated CSS property) to `print-color-adjust`.\n// See: https://github.com/PrismJS/prism/issues/3768\n\npre[data-line] {\n  position: relative;\n  padding: 1em 0 1em 3em;\n}\n\n.line-highlight {\n  position: absolute;\n  left: 0;\n  right: 0;\n  padding: inherit 0;\n  margin-top: 1em; /* Same as .prism’s padding-top */\n\n  background: hsla(24, 20%, 50%, 0.08);\n  background: linear-gradient(\n    to right,\n    hsla(24, 20%, 50%, 0.1) 70%,\n    hsla(24, 20%, 50%, 0)\n  );\n\n  pointer-events: none;\n\n  line-height: inherit;\n  white-space: pre;\n}\n\n@media print {\n  .line-highlight {\n    /*\n\t\t * This will prevent browsers from replacing the background color with white.\n\t\t * It's necessary because the element is layered on top of the displayed code.\n\t\t */\n    print-color-adjust: exact;\n  }\n}\n\n.line-highlight:before,\n.line-highlight[data-end]:after {\n  content: attr(data-start);\n  position: absolute;\n  top: 0.4em;\n  left: 0.6em;\n  min-width: 1em;\n  padding: 0 0.5em;\n  background-color: hsla(24, 20%, 50%, 0.4);\n  color: hsl(24, 20%, 95%);\n  font: bold 65%/1.5 sans-serif;\n  text-align: center;\n  vertical-align: 0.3em;\n  border-radius: 999px;\n  text-shadow: none;\n  box-shadow: 0 1px white;\n}\n\n.line-highlight[data-end]:after {\n  content: attr(data-end);\n  top: auto;\n  bottom: 0.4em;\n}\n\n.line-numbers .line-highlight:before,\n.line-numbers .line-highlight:after {\n  content: none;\n}\n\npre[id].linkable-line-numbers span.line-numbers-rows {\n  pointer-events: all;\n}\npre[id].linkable-line-numbers span.line-numbers-rows > span:before {\n  cursor: pointer;\n}\npre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before {\n  background-color: rgba(128, 128, 128, 0.2);\n}\n"
  },
  {
    "path": "src/sass/2017/components/announcements-item.scss",
    "content": ".announcements-item {\n  & {\n    position: relative;\n    padding: 16px;\n    box-shadow: $shadow6;\n    border-radius: 1px;\n    background: white;\n    padding-right: 48px;\n    animation: announcements-item-flyin 500ms ease-out;\n    transition:\n      opacity 500ms linear,\n      transform 500ms ease-out;\n  }\n\n  &.-hide {\n    display: none;\n  }\n\n  & > .title {\n    @include font-size(1);\n    font-weight: normal;\n    color: $base-a;\n    margin: 0;\n    padding: 0;\n  }\n\n  & > .body > p {\n    margin: 0;\n    padding: 0;\n\n    & + p {\n      margin-top: 1em;\n    }\n  }\n\n  & > .close {\n    position: absolute;\n    right: 0;\n    top: 0;\n    width: 40px;\n    height: 40px;\n    line-height: 40px;\n    text-align: center;\n    border: 0;\n    margin: 0;\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n\n    &:hover,\n    &:focus {\n      color: $base-a;\n    }\n  }\n\n  & > .close::before {\n    // https://stackoverflow.com/a/30421654\n    content: unquote('\"') + str-insert('00D7', '\\\\', 1) + unquote('\"');\n    font-size: 14px;\n  }\n}\n\n@keyframes announcements-item-flyin {\n  0% {\n    transform: translate3d(0, 32px, 0);\n    opacity: 0;\n  }\n\n  100% {\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/announcements-list.scss",
    "content": ".announcements-list {\n  & {\n    position: fixed;\n    left: 0;\n    bottom: 0;\n    max-width: 420px;\n    padding: 0;\n    z-index: 10;\n  }\n\n  @media (min-width: 481px) {\n    padding: 16px;\n  }\n\n  @media (min-width: 769px) {\n    padding: 32px;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/autocomplete.scss",
    "content": "// Overrides for npm:autocompleter\n\n.autocomplete {\n  border: none;\n  padding: 0.5rem;\n  padding-top: 0;\n  border-bottom-left-radius: 4px;\n  border-bottom-right-radius: 4px;\n  box-shadow: $shadow3;\n  transform: translate(-8px, -2px);\n}\n.autocomplete > div {\n  padding: 0.5rem;\n  border-radius: 4px;\n}\n.autocomplete > div:hover:not(.group) {\n  background: $base-body;\n}\n.autocomplete > div + div:not(.selected) {\n  box-shadow: inset 0 1px $line-color;\n}\n.autocomplete > div.selected,\n.autocomplete > div.selected:hover {\n  background: $base-c;\n  color: #fff;\n}\n"
  },
  {
    "path": "src/sass/2017/components/back-button.scss",
    "content": "/*\n * Home link\n */\n\n.back-button {\n  text-decoration: none;\n  width: 48px;\n  height: 48px;\n  line-height: 48px - 2px;\n  text-align: center;\n  display: inline-block;\n  border-radius: 50%;\n  transition: all 100ms linear;\n\n  // Smaller on mobile\n  @media (max-width: 480px) {\n    width: 32px;\n    height: 32px;\n    line-height: 32px - 2;\n  }\n\n  // Colors\n  &,\n  &:visited {\n    color: $base-mute;\n  }\n\n  // Active\n  &:hover,\n  &:focus {\n    color: white;\n    background: $base-a;\n    opacity: 1;\n  }\n\n  // Icon\n  &::before {\n    content: '';\n    @include ion-md-arrow-back(24px, $base-text);\n    vertical-align: middle;\n  }\n\n  &:hover::before,\n  &:focus::before {\n    @include ion-md-arrow-back(24px, white);\n  }\n\n  // Icon: smaller on mobile\n  @media (max-width: 480px) {\n    &::before {\n      font-size: 16px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/comments-area.scss",
    "content": "/*\n * Disqus\n */\n\n.comments-area {\n  & {\n    margin: 32px 0 16px 0;\n  }\n\n  // Container\n  & > .container {\n    @include gutter(padding-left);\n    @include gutter(padding-right);\n    max-width: $area-width;\n    margin: 0 auto;\n  }\n\n  // Horizontal line\n  & > .container::before {\n    content: '';\n    display: block;\n    background: linear-gradient(to right, $dark-line-color 50%, transparent);\n    height: 1px;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/comments-details.scss",
    "content": "/*\n * Comments disclosure triangle\n */\n\n.comments-details {\n  & {\n    margin-bottom: -16px;\n  }\n\n  &[open] {\n    margin-bottom: 0;\n  }\n\n  & > summary {\n    @include font-size(1);\n    color: $base-a;\n    padding: 24px 0;\n    white-space: nowrap;\n    cursor: pointer;\n  }\n\n  & > summary:hover,\n  & > summary:focus {\n    &,\n    & > .suffix {\n      color: $base-a7;\n    }\n\n    & > .fauxlink {\n      border-bottom: solid 1px $base-a7;\n    }\n  }\n\n  & > summary > .count {\n    font-weight: bold;\n  }\n\n  & > summary > .count::before {\n    @include ion-md-chatboxes(24px, $base-a);\n    content: '';\n    vertical-align: middle;\n    color: $base-a;\n    margin: 0 8px;\n  }\n\n  & > summary > .suffix {\n    color: $base-mute;\n  }\n\n  & > summary > .fauxlink {\n    margin-left: 4px;\n    border-bottom: solid 1px rgba($base-a, 0.25);\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/comments-section.scss",
    "content": "/*\n * Disqus\n */\n\n.comments-section {\n  & {\n    display: flex;\n  }\n\n  // Mobile: full width\n  @media (max-width: 768px) {\n    & > .comments {\n      flex: 1 0 100%;\n      width: 100%;\n    }\n  }\n\n  // Desktop: partial width\n  @media (min-width: 769px) {\n    & > .comments {\n      flex: 0 1 66%;\n      min-width: 300px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/h2-section.scss",
    "content": "/*\n * h2 section\n */\n\n.h2-section {\n  // Hide first h2 heading\n  @apply [&:first-child>h2]:hidden;\n\n  // Space between\n  @apply md:mt-16 md:first-of-type:mt-0;\n}\n\n.h2-section h2 {\n  @apply font-manrope font-extrabold tracking-[-0.02em];\n  @apply text-3xl text-zinc-950 target:text-mildindigo-600;\n  @apply scroll-mt-6;\n}\n\na.local-anchor {\n  @apply text-2xl ml-2 text-mildindigo-500 opacity-0;\n  @apply hover:opacity-100 focus:opacity-100;\n  @apply hover:no-underline;\n}\n\n.h2-section h2:hover a.local-anchor {\n  @apply opacity-100;\n}\n"
  },
  {
    "path": "src/sass/2017/components/h3-section-list.scss",
    "content": "/*\n * H3 section list:\n * The body that is isotoped.\n */\n\n.h3-section-list {\n  @apply px-0 gap-6 lg:gap-8 my-0;\n  // @apply grid grid-cols-3;\n}\n\n.h3-section {\n  @apply w-full break-inside-avoid;\n  @apply pb-12 pt-0;\n}\n\n/*\n * Two column (default)\n */\n\n.h3-section-list,\n.h3-section-list.-two-column {\n  @media (min-width: 769px) {\n    columns: 2;\n  }\n}\n\n/*\n * One column\n */\n\n.h3-section-list.-one-column {\n  @media (min-width: 769px) {\n    columns: 1;\n  }\n\n  & > .h3-section + .h3-section {\n    margin-top: 16px;\n  }\n}\n\n/*\n * Three column\n */\n\n.h3-section-list.-three-column {\n  @media (min-width: 769px) {\n    columns: 2;\n  }\n\n  @media (min-width: 961px) {\n    columns: 3;\n  }\n}\n\n.h3-section-list.-left-reference {\n  @media (min-width: 769px) {\n    columns: 3;\n  }\n\n  & > .h3-section + .h3-section {\n    width: 200%;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/h3-section.scss",
    "content": "/*\n * H3 section\n */\n\n/*\n * Heading\n */\n\n.h3-section > .body {\n  @apply bg-white shadow-md-cool;\n  @apply overflow-x-auto;\n  @apply rounded-md [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md;\n  @apply [&>pre]:m-0 [&>pre]:p-4;\n}\n\n.h3-section > h3 {\n  @apply border-t-mildindigo-500 border-t-2;\n  @apply text-mildindigo-800;\n  @apply text-xl;\n  @apply pt-4;\n  @apply font-manrope font-extrabold tracking-[-0.02em];\n  @apply mt-0 mb-4 whitespace-nowrap overflow-hidden;\n}\n\n/*\n * Children\n */\n\n.h3-section > .body {\n  /* Lists */\n  & > ul {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n  }\n\n  & > ul > li {\n    padding: 8px;\n    padding-left: 32px + 4px;\n    position: relative;\n  }\n\n  & > ul > li > p {\n    margin: 0;\n    padding: 0;\n  }\n\n  & > ul > li::before {\n    content: '';\n    position: absolute;\n    display: inline-block;\n    width: 4px;\n    height: 4px;\n    background: $gray-text;\n    border-radius: 50%;\n    left: 16px;\n    top: 16px + 2px;\n  }\n\n  & > ul > li + li {\n    border-top: solid 1px $line-color;\n  }\n\n  /* Paragraphs */\n  & > p {\n    padding: 16px;\n    margin: 0;\n  }\n\n  /* Headings in between bodies */\n  & > h4 {\n    @include font-size(-1);\n    margin: 0;\n    padding: 4px 16px;\n    font-weight: normal;\n    background: $gray-bg;\n    color: $gray-text;\n\n    & + * {\n      border-top: solid 1px $line-color;\n    }\n  }\n\n  /* Description paragraphs */\n  & > p,\n  & :not(li) > p {\n    background: $gray-bg;\n    color: $base-text;\n\n    /* Links */\n    & a,\n    & a:visited {\n      color: $base-text;\n      text-decoration: none;\n      border-bottom: solid 1px $line-color;\n    }\n\n    & a:hover {\n      color: $base-b;\n    }\n  }\n\n  // Line divisions\n  & > *:not(:first-child) {\n    border-top: solid 1px $line-color;\n  }\n\n  // Collapse paragraphs together\n  & > p + p,\n  & > p + p:not(:first-child) {\n    margin-top: -1.5em;\n    border-top: 0;\n  }\n}\n\n/*\n * Variant: Also see :\\\n */\n\nul.-also-see.-also-see.-also-see {\n  display: flex;\n  flex-wrap: wrap;\n  background: $gray-bg;\n\n  & > li {\n    flex: 1 0 20%;\n    padding: 24px;\n    border-top: solid 1px $dark-line-color;\n\n    & + li {\n      border-left: solid 1px $dark-line-color;\n    }\n  }\n\n  &,\n  & > li {\n    list-style-type: none;\n  }\n\n  & > li::before {\n    display: none;\n  }\n\n  & > li > a {\n    @include font-size(1);\n    display: block;\n  }\n\n  & > li > em {\n    @include font-size(-1);\n    display: block;\n  }\n}\n\n.h3-section.-intro {\n  & > .body > p {\n    @include font-size(1);\n  }\n\n  & > .body > ul > li {\n    padding-left: 16px;\n    position: relative;\n  }\n\n  & > .body > ul > li::before {\n    display: none;\n  }\n\n  & > .body > ul > li > a {\n    @include font-size(1);\n    display: block;\n    font-weight: bold;\n  }\n\n  // Cover the full card\n  & > .body > ul > li > a::before {\n    content: '';\n    @include ion-md-arrow-forward(24px, $base-a3);\n    position: absolute;\n    right: 16px;\n    top: 50%;\n    margin-top: -12px;\n  }\n  & > .body > ul > li:hover > a::before {\n    @include ion-md-arrow-forward(24px, $base-a);\n  }\n\n  & > .body > ul > li > a::after {\n    content: '';\n    position: absolute;\n    display: block;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n  }\n\n  & > .body > ul > li em {\n    color: $base-mute;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/headline-pub.scss",
    "content": "@use 'sass:math';\n\n$placeholder-bg-size: 450px;\n\n$image-width: 83px;\n$image-height: 64px;\n$image-margin: 16px;\n\n$image-width: 130px;\n$image-height: 100px;\n$image-margin: 24px;\n\n$ad-width: 380px;\n$ad-height: $image-height;\n\n/*\n * Base carbon ads style\n */\n\n@mixin carbon-style {\n  .carbon-img,\n  .carbon-text,\n  .carbon-poweredby {\n    text-decoration: none;\n  }\n\n  // Increase hit area\n  .carbon-text,\n  .carbon-poweredby {\n    padding-top: 4px;\n    padding-bottom: 4px;\n  }\n\n  .carbon-img > img {\n    width: $image-width;\n    height: $image-height;\n    box-shadow: $shadow3;\n    border-radius: 3px;\n    background: rgba($gray-text, 0.2);\n    color: transparent;\n  }\n\n  .carbon-img:hover img {\n    transform: translate3d(0, -1px, 0);\n    box-shadow: $shadow6;\n  }\n\n  .carbon-text,\n  .carbon-text:visited {\n    color: $base-text;\n  }\n\n  // Allow line breaks\n  .carbon-text::after {\n    content: '  ';\n  }\n\n  .carbon-text:hover,\n  .carbon-poweredby:hover {\n    color: $base-b;\n  }\n\n  .carbon-poweredby,\n  .carbon-poweredby:visited {\n    display: block;\n    margin-top: 8px;\n    white-space: nowrap;\n    color: $gray-text;\n  }\n}\n\n/*\n * Carbon ads\n *\n *     .HeadlinePub\n *       div#carbonads\n *         span\n *           span.carbon-wrap\n *             a.carbon-img > img\n *             a.carbon-text {description}\n *           a.carbon-poweredby {powered by Carbon}\n */\n\n.HeadlinePub {\n  @include carbon-style;\n\n  & {\n    position: relative;\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Hide placeholders after carbon has loaded\n  #carbonads ~ .placeholder {\n    opacity: 0;\n    transition: opacity 250ms linear;\n    pointer-events: none;\n  }\n\n  & > .placeholder {\n    background-image: linear-gradient(\n      92deg,\n      rgba($gray-text, 0.1),\n      rgba($gray-text, 0.17) 15%,\n      rgba($gray-text, 0.1) 30%\n    );\n    background-size: $placeholder-bg-size 100%;\n    background-repeat: repeat;\n    animation: 2.5s ease-in-out infinite placeholder-swish;\n    border-radius: 3px;\n    position: absolute;\n    display: block;\n  }\n\n  & > .placeholder.-one {\n    left: 0;\n    top: 0;\n    width: $image-width;\n    height: $image-height;\n  }\n\n  & > .placeholder.-two,\n  & > .placeholder.-three,\n  & > .placeholder.-four {\n    left: $image-width + $image-margin;\n    top: 6px;\n    height: 8px;\n    width: $ad-width - $image-width - $image-margin;\n  }\n\n  & > .placeholder.-three {\n    top: 28px;\n  }\n\n  & > .placeholder.-four {\n    top: 50px;\n    width: ($ad-width - $image-width - $image-margin) * 0.28;\n  }\n\n  // Make the ad show up above the placeholder\n  #carbonads {\n    position: relative;\n    z-index: 1;\n  }\n\n  // Carbon wrapper\n  &,\n  & > div > span {\n    display: block;\n    width: $ad-width;\n    height: $ad-height;\n    text-align: left;\n  }\n\n  .HighlightPubFirstLine & > div > span:first-line {\n    font-weight: bold;\n  }\n\n  // Clearfix\n  & > div > span::after {\n    content: '';\n    display: table;\n    clear: both;\n    zoom: 1;\n  }\n\n  .carbon-img {\n    float: left;\n    margin-right: $image-margin;\n  }\n}\n\n#carbonads {\n  animation: 500ms ease-out pub-text-enter;\n}\n\n@keyframes placeholder-swish {\n  0% {\n    background-position: math.div($placeholder-bg-size * -1, 3) 0%;\n  }\n\n  50% {\n    background-position: math.div($placeholder-bg-size * 2, 3) 0%;\n  }\n\n  100% {\n    background-position: math.div($placeholder-bg-size * 2, 3) 0%;\n  }\n}\n\n@keyframes pub-text-enter {\n  0% {\n    opacity: 0;\n    transform: scale(0.9);\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/hint-mark.scss",
    "content": ".hint-mark {\n  & {\n    cursor: help;\n  }\n\n  & > i::before {\n    content: '?';\n    font-size: 11px;\n    font-weight: bold;\n    font-style: normal;\n  }\n\n  & > i {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    line-height: 16px - 4px;\n    text-align: center;\n    border-radius: 50%;\n    background: rgba($base-b3, 0.3);\n    color: $base-mute;\n    margin: 0 0.4em;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/home-button.scss",
    "content": "/*\n * Home button inside `search-footer`\n */\n\n.home-button {\n  & {\n    display: inline-block;\n    box-shadow: inset 0 0 0 1px $dark-line-color;\n    border-radius: 50%;\n  }\n\n  &,\n  &:visited {\n    color: $base-mute;\n  }\n\n  &:hover,\n  &:focus {\n    background-color: $base-a;\n    color: white;\n  }\n\n  & > i::before {\n    content: '';\n    @include ion-ios-home-outline(24px, $base-mute);\n    height: 48px;\n    line-height: 48px;\n    width: 48px;\n  }\n\n  &:hover > i::before {\n    background-image: ion-ios-home-image(white);\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/intro-content.scss",
    "content": "/*\n * A prelude/intro to the article\n */\n\n.intro-content {\n  // Horizontal line, but I don't like how it looks!\n  // &::before {\n  //   content: '';\n  //   display: block;\n  //   margin-bottom: 16px;\n  //   height: 1px;\n  //   background: linear-gradient(to right, $dark-line-color, transparent 50%);\n\n  //   @media (min-width: 769px) {\n  //     margin-bottom: 32px;\n  //   }\n  // }\n}\n"
  },
  {
    "path": "src/sass/2017/components/main-heading.scss",
    "content": "/*\n * The top-level heading\n */\n\n.main-heading {\n  @include heading-style;\n\n  & {\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n\n  & > h1 {\n    @include font-size(8);\n    line-height: 1.2;\n    font-weight: 200;\n    font-family: $body-font;\n    margin: 0;\n    text-align: center;\n  }\n\n  & > h1 > em {\n    font-style: normal;\n    color: lighten($gray-text, 20%);\n  }\n\n  & > .pubbox {\n    margin-top: 16px;\n    text-align: center;\n  }\n\n  @media (min-width: 769px) {\n    & > .pubbox {\n      margin-top: 24px;\n      margin-bottom: 24px;\n    }\n  }\n}\n\n.UseCompactHeader .main-heading {\n  @media (min-width: 769px) {\n    & {\n      display: flex;\n      align-items: flex-end;\n      margin-bottom: 32px;\n    }\n\n    & > h1 {\n      flex: 1 0 auto;\n      text-align: left;\n      padding-right: 32px;\n    }\n\n    & > .pubbox {\n      flex: 0 0 auto;\n      margin-top: 0;\n      margin-bottom: 0;\n    }\n  }\n}\n\n/**\n * Add some space in preview mode\n */\n\n.PreviewMode .main-heading {\n  margin-top: 16px;\n}\n"
  },
  {
    "path": "src/sass/2017/components/missing-message.scss",
    "content": ".missing-message.missing-message {\n  text-align: center;\n  margin: 32px 0;\n  display: flex;\n  align-items: center;\n  border-top: solid 1px $dark-line-color;\n  padding-top: 16px;\n\n  @media (min-width: 769px) {\n    padding-top: 32px;\n  }\n\n  & > h3,\n  & > p {\n    margin: 0;\n    padding: 0;\n  }\n\n  & > h3 {\n    @include font-size(1);\n    font-weight: normal;\n    color: $base-text;\n    flex: 1 0 auto;\n    text-align: left;\n  }\n\n  & > h3::before {\n    content: '';\n    @include ion-md-arrow-forward(24px, $base-a);\n    margin-right: 16px;\n  }\n\n  & > p {\n    color: $base-mute;\n    flex: 0 0 auto;\n  }\n\n  @media (max-width: 480px) {\n    flex-wrap: wrap;\n\n    & > p {\n      margin-top: 16px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/notice-box.scss",
    "content": ".notice-box {\n  & {\n    margin-bottom: 24px;\n    color: $base-mute;\n  }\n\n  @media (max-width: 480px) {\n    margin-bottom: 16px;\n  }\n\n  &::before {\n    content: '';\n    @include ion-md-information-circle(24px, $base-mute3);\n    margin-right: 8px;\n  }\n\n  & > a {\n    text-decoration: none;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/page-actions.scss",
    "content": "@mixin action-bar {\n  & {\n    height: 32px;\n  }\n\n  & > .link.link > a {\n    display: inline-block;\n    height: 32px;\n    line-height: 32px;\n    vertical-align: top;\n    width: auto;\n  }\n\n  & > li {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n  }\n\n  & > li > a,\n  & > li > a:visited {\n    color: $base-mute;\n    text-decoration: none;\n  }\n\n  & > li > a:hover,\n  & > li > a:focus {\n    color: $base-a;\n\n    & > .text {\n      color: $base-a;\n    }\n  }\n\n  & > li > a > .text {\n    @include font-size(-1);\n    display: none;\n  }\n\n  & > li > a > .text.-visible {\n    display: inline;\n  }\n}\n\n.page-actions {\n  & {\n    @include action-bar;\n    margin: 0;\n    padding: 0;\n  }\n\n  & + & {\n    margin-left: 8px;\n  }\n\n  & > .facebook > a::before,\n  & > .twitter > a::before,\n  & > .github > a::before {\n    content: '';\n    vertical-align: middle;\n  }\n\n  & > .facebook > a::before {\n    @include ion-logo-facebook(16px, #334455);\n  }\n\n  & > .twitter > a::before {\n    @include ion-logo-twitter(16px, #334455);\n  }\n\n  & > .github > a::before {\n    @include ion-logo-github(16px, #334455);\n  }\n\n  & > .github > a:hover::before {\n    background-image: ion-logo-github-image(white);\n  }\n\n  & > .facebook > a::before,\n  & > .twitter > a::before {\n    width: 32px;\n    height: 32px;\n  }\n\n  // Compensate alignment\n  & > .github > a::before {\n    position: relative;\n    top: -2px;\n  }\n\n  & > .link.-button > a {\n    box-shadow: inset 0 0 0 1px $dark-line-color;\n    border-radius: 2px;\n    padding: 0 16px;\n    margin: 0 8px;\n    transition: all 100ms linear;\n\n    & > .text {\n      margin-left: 4px;\n      position: relative;\n      top: -1px;\n    }\n\n    &:hover,\n    &:focus {\n      background: $base-a-gradient;\n      box-shadow: $shadow2;\n\n      &,\n      & > .text {\n        color: white;\n      }\n    }\n  }\n\n  // Space them out in mobile\n  @media (max-width: 768px) {\n    & > .link {\n      margin-left: 16px;\n    }\n  }\n\n  // Collapse\n  & > .link:first-child > a {\n    margin-left: 0;\n  }\n\n  & > .link:last-child > a {\n    margin-right: 0;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/pages-list.scss",
    "content": "// search-box.scss\n\n.pages-list {\n  & {\n    display: flex;\n    flex-wrap: wrap;\n  }\n\n  > .item {\n    flex: 0 0 100%;\n  }\n\n  > .item.article {\n    flex: 0 0 50%;\n  }\n\n  @media (min-width: 581px) {\n    > .item.top-sheet {\n      flex: 0 0 25%;\n    }\n  }\n}\n\n// Article\n.pages-list > .article {\n  text-decoration: none;\n  display: block;\n  white-space: nowrap;\n  padding: 4px 0;\n\n  &,\n  &:visited {\n    color: $base-mute3;\n  }\n\n  & > .info > .slug {\n    color: $base-head;\n  }\n\n  &:visited > .info > .slug {\n    color: $base-text;\n  }\n\n  & > .info > .title::before {\n    content: '';\n    margin: 0 4px;\n  }\n\n  & > .info > .title {\n    opacity: 0;\n  }\n\n  @media (max-width: 768px) {\n    & > .info > .title {\n      display: none;\n    }\n  }\n\n  &:hover,\n  &:focus {\n    & {\n      color: $base-mute;\n    }\n\n    & > .info > .title {\n      opacity: 1;\n      color: $base-a;\n    }\n  }\n}\n\n.pages-list > .category {\n  @include font-size(1);\n  border-bottom: solid 1px $dark-line-color;\n  margin: 16px 0;\n  padding: 0 0 16px 0;\n  font-weight: normal;\n  color: $base-a;\n}\n"
  },
  {
    "path": "src/sass/2017/components/pre-footer.scss",
    "content": "/*\n    content: '';\n * Spacer before footer\n */\n\n.pre-footer {\n  & {\n    padding: 32px;\n    padding-top: 24px;\n    padding-bottom: 48px;\n    text-align: center;\n  }\n\n  & > .icon::before {\n    content: '';\n    @include ion-ios-flash(32px, $base-mute);\n    opacity: 0.25;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/push-button.scss",
    "content": ".push-button {\n  display: inline-block;\n  text-decoration: none;\n  padding: 8px 16px;\n  border-radius: 3px;\n\n  &,\n  &:visited {\n    background-color: $base-a;\n    background: $base-a-gradient;\n    color: white;\n  }\n\n  &:hover,\n  &:focus {\n    background: darken($base-a, 16%);\n    box-shadow: none;\n    color: white;\n  }\n}\n\n.push-button.-dark {\n  &,\n  &:visited {\n    background: darken($base-a, 16%);\n    color: white;\n  }\n\n  &:hover,\n  &:focus {\n    background: darken($base-a, 24%);\n    color: white;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/related-post-item.scss",
    "content": ".related-post-item {\n  & {\n    display: flex;\n    text-align: left;\n    line-height: 1.4;\n  }\n\n  // Layout\n  & > a {\n    flex: 1 1 100%;\n    display: block;\n    border-radius: 2px;\n    box-shadow: $shadow2;\n    padding: 16px;\n    text-decoration: none;\n  }\n\n  // Color\n  & > a,\n  & > a:visited {\n    background: white;\n    color: $base-mute;\n\n    & > strong {\n      color: $base-a;\n    }\n\n    &:hover,\n    &:focus {\n      color: $base-a;\n    }\n\n    &:hover > strong,\n    &:focus > strong {\n      color: darken($base-a, 16%);\n    }\n  }\n\n  &:first-of-type > a,\n  &:first-of-type > a:visited {\n    background: $base-a;\n    color: rgba(white, 0.5);\n\n    & > strong {\n      color: white;\n    }\n\n    &:hover,\n    &:focus {\n      color: white;\n    }\n\n    &:hover > strong,\n    &:focus > strong {\n      color: white;\n    }\n\n    &:hover,\n    &:focus {\n      background: darken($base-a, 8%);\n    }\n  }\n\n  // Two lines when bigger\n  @media (min-width: 481px) {\n    & > a > strong,\n    & > a > span {\n      display: block;\n    }\n  }\n\n  & > a > strong {\n    @include font-size(1);\n    font-weight: normal;\n  }\n\n  & > a > span {\n    @include font-size(-1);\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/related-post-list.scss",
    "content": ".related-post-list {\n  &,\n  & > li {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n  }\n\n  & {\n    display: flex;\n    margin: -4px;\n    flex-wrap: wrap;\n  }\n\n  @media (max-width: 768px) {\n    flex-wrap: wrap;\n  }\n\n  & > .item {\n    flex: 1 1 auto;\n    margin: 4px;\n\n    @media (min-width: 481px) {\n      flex: 1 1 40%;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/related-posts-area.scss",
    "content": "/*\n * Related posts\n */\n\n.related-posts-area {\n  & {\n    @include section-with-container;\n    padding-top: 16px;\n    padding-bottom: 16px;\n    background: $gray-bg;\n  }\n\n  @media (min-width: 481px) {\n    padding-top: 64px;\n    padding-bottom: 64px;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/related-posts-callout.scss",
    "content": "/*\n * Callout\n */\n\n.related-posts-callout {\n  & {\n    display: flex;\n    text-decoration: none;\n    background: $base-a-gradient;\n    padding: 32px;\n    align-items: center;\n    justify-content: center;\n    color: white;\n    border-radius: 2px;\n    box-shadow: $shadow2;\n    text-shadow: 0 1px 1px rgba(black, 0.2);\n  }\n\n  &,\n  &:visited {\n    color: white;\n  }\n\n  &:hover,\n  &:focus {\n    background: darken($base-a, 8%);\n  }\n\n  & > .text {\n    margin: auto;\n    text-align: center;\n  }\n\n  & > .text > .icon {\n    margin-bottom: 16px;\n    display: block;\n  }\n\n  & > .text > .icon::before {\n    content: '';\n    @include ion-ios-arrow-back(\n      48px,\n      adjust-color($base-a, $lightness: 16%, $hue: 20deg)\n    );\n    height: 64px;\n    width: 64px;\n    border: solid 2px adjust-color($base-a, $lightness: 16%, $hue: 20deg);\n    border-radius: 50%;\n    text-indent: -2px;\n    text-shadow: none;\n  }\n\n  & > .text > .description {\n    @include font-size(1);\n    line-height: 1.4;\n    font-weight: 300;\n    display: block;\n    margin-bottom: 16px;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/related-posts-group.scss",
    "content": "/*\n * Group\n */\n\n.related-posts-group {\n  & > h3 {\n    @include font-size(1);\n    color: $base-a;\n    margin: 0;\n    padding: 0;\n    margin-bottom: 16px;\n    padding-bottom: 16px;\n    border-bottom: solid 1px $dark-line-color;\n    line-height: 1.2;\n    font-weight: 400;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/related-posts-section.scss",
    "content": "/*\n * Section\n * has callout and group\n */\n\n.related-posts-section {\n  & {\n    display: flex;\n    @include section-gutter(margin-left, $multiplier: -1);\n    @include section-gutter(margin-right, $multiplier: -1);\n  }\n\n  & > .callout,\n  & > .group {\n    margin: 0;\n    @include section-gutter(margin-left);\n    @include section-gutter(margin-right);\n  }\n\n  & > .callout {\n    flex: 1 1 33%;\n  }\n\n  & > .group {\n    flex: 1 1 50%;\n  }\n\n  & > .callout {\n    display: flex;\n\n    & > * {\n      flex: 1 0 100%;\n    }\n  }\n\n  // Mobile\n  @media (max-width: 480px) {\n    & {\n      flex-wrap: wrap;\n    }\n\n    & > .callout,\n    & > .group {\n      @include section-gutter(margin-top);\n      @include section-gutter(margin-bottom);\n      flex: 1 1 100%;\n    }\n  }\n\n  // Tablet\n  @media (min-width: 481px) {\n    @media (max-width: 768px) {\n      & {\n        flex-wrap: wrap;\n      }\n\n      & > .callout,\n      & > .group {\n        @include section-gutter(margin-top);\n        @include section-gutter(margin-bottom);\n        flex: 1 1 100%;\n      }\n\n      & > .group {\n        flex: 1 1 40%;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/search-box.scss",
    "content": ".search-box {\n  background: $base-panel;\n  box-shadow: $shadow3;\n  border-radius: 4px;\n  display: flex;\n  height: 64px;\n  align-items: center;\n  cursor: text;\n\n  &:focus-within {\n    box-shadow:\n      inset 0 0 0 1px $base-c,\n      0 0 0 3px rgba($base-c, 0.1);\n  }\n\n  & > input {\n    font-family: $body-font;\n    @include font-size(2);\n    padding: 16px;\n    height: 64px;\n    background: transparent;\n    border: 0;\n    flex: 1 1 auto;\n    padding-left: 0;\n    font-weight: bold;\n    color: $base-head;\n    min-width: 48px;\n    cursor: text; // Undoes [aria-controls] in sanitize.css\n\n    &::placeholder {\n      font-weight: normal;\n      color: $base-mute;\n    }\n  }\n\n  & > input:focus {\n    outline: 0;\n  }\n\n  & > .prefix {\n    @include font-size(0);\n    display: block;\n    color: rgba($base-mute, 0.5);\n    font-weight: 400;\n    user-select: none;\n    line-height: 1.5em;\n    padding: 2px 8px;\n    border-radius: 3px;\n    background: rgba($base-body, 0.5);\n    margin: 0 0 0 16px;\n    box-shadow: 0 1px 1px rgba($base-mute, 0.25);\n  }\n\n  & > .sep {\n    color: rgba($base-mute, 0.5);\n    @include font-size(2);\n    margin: 0 8px;\n  }\n\n  // Hide prefix in mobiel\n  @media (max-width: 768px) {\n    & > .prefix,\n    & > .sep {\n      display: none;\n    }\n\n    & > input {\n      padding-left: 16px;\n    }\n  }\n\n  // Icon\n  &::before {\n    content: '';\n    @include ion-md-search(32px, $base-head);\n    background-position: center center;\n    flex: 0 0 64px;\n    width: 64px;\n    order: 2;\n  }\n}\n\n/*\n * Small\n */\n\n.search-box.-small {\n  & {\n    height: 48px;\n  }\n\n  & > input {\n    padding: 8px;\n    height: 48px;\n    padding-left: 0;\n  }\n\n  & > .prefix,\n  & > .sep,\n  & > input {\n    @include font-size(1);\n  }\n\n  &::before {\n    flex: 0 0 48px;\n    width: 48px;\n    line-height: 48px;\n    background-size: 24px 24px;\n    background-position: center center;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/search-footer.scss",
    "content": "/*\n * Search bar around the footer\n */\n\n.search-footer {\n  & {\n    @include section-with-container;\n    padding-top: 16px;\n    padding-bottom: 16px;\n    background: $gray-bg;\n    border-top: solid 1px $dark-line-color;\n    border-bottom: solid 1px $dark-line-color;\n  }\n}\n\n.search-footer-section {\n  & {\n    display: flex;\n  }\n\n  & > .search {\n    flex: 0 1 640px;\n  }\n\n  & > .links {\n    @include gutter(padding-left);\n    flex: 0 1 auto;\n    margin-left: auto;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/top-nav.scss",
    "content": ".top-nav {\n  &,\n  & > .container {\n    height: 64px;\n    line-height: 64px;\n    text-align: center;\n    position: relative;\n  }\n\n  // Smaller on mobile\n  @media (max-width: 480px) {\n    & > .container {\n      height: 32px;\n      line-height: 32px;\n      margin-top: 8px;\n    }\n\n    & {\n      height: 32px + 8px + 8px;\n      padding: 8px 0;\n      border-bottom: solid 1px $dark-line-color;\n      margin-bottom: 8px;\n    }\n  }\n\n  & > .container {\n    @include gutter(padding-left);\n    @include gutter(padding-right);\n    max-width: $area-width;\n    margin: 0 auto;\n  }\n}\n\n.top-nav > .container {\n  & {\n    display: flex;\n    align-items: center;\n    position: relative;\n  }\n\n  & > .left {\n    flex: 0 0 auto;\n    line-height: 32px;\n  }\n\n  & > .brand {\n    flex: 1 1 auto;\n  }\n\n  & > .actions {\n    flex: 0 0 auto;\n    display: flex;\n  }\n\n  & > .brand {\n    @include font-size(-1);\n    display: inline-block;\n    font-weight: bold;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    text-decoration: none;\n\n    &,\n    &:visited {\n      color: $base-text;\n    }\n\n    &:hover {\n      color: $base-a;\n    }\n  }\n\n  // Mobile\n  @media (max-width: 480px) {\n    & > .brand {\n      display: none;\n    }\n\n    & > .actions {\n      margin-left: auto;\n    }\n  }\n\n  // Desktop: absolute the actions\n  @media (min-width: 481px) {\n    & > .actions {\n      position: absolute;\n      @include gutter(right);\n      top: (64px - 32px) * 0.5;\n    }\n\n    & > .left {\n      position: absolute;\n      @include gutter(left);\n      top: (64px - 32px) * 0.5;\n    }\n  }\n\n  // Offset so it doesn't look misasligned\n  @media (min-width: $area-width) {\n    & > .left > .home {\n      position: relative;\n      left: -16px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/components/top-sheet.scss",
    "content": ".top-sheet[class][class] {\n  padding: 4px;\n  text-decoration: none;\n\n  & > .info {\n    display: block;\n    background: darken($base-a, 0%);\n    text-align: left;\n    padding: 16px;\n    width: auto;\n    border-radius: 3px;\n    box-shadow: $shadow2;\n    text-shadow: 0 1px 1px rgba($base-text, 0.3);\n    white-space: nowrap;\n  }\n\n  & > .info,\n  & > .info > .slug[class] {\n    color: white; // overridecs pages-list > info > slug\n  }\n\n  &:hover > .info,\n  &:focus > .info {\n    box-shadow: $shadow3;\n  }\n\n  &:nth-of-type(3n + 1) {\n    & > .info {\n      background: linear-gradient(\n        15deg,\n        $base-a,\n        adjust-color($base-a, $lightness: 4%, $hue: 20deg)\n      );\n    }\n\n    &:hover > .info,\n    &:focus > .info {\n      background: darken($base-a, 8%);\n    }\n  }\n\n  &:nth-of-type(3n + 2) {\n    & > .info {\n      background: linear-gradient(\n        15deg,\n        $base-mute,\n        adjust-color($base-mute, $lightness: 4%, $hue: -10deg)\n      );\n    }\n\n    &:hover > .info,\n    &:focus > .info {\n      background: darken($base-mute, 8%);\n    }\n  }\n\n  &:nth-of-type(3n + 3) {\n    & > .info {\n      background: linear-gradient(\n        15deg,\n        $base-c,\n        adjust-color($base-c, $lightness: 2%, $hue: 6deg)\n      );\n    }\n\n    &:hover > .info,\n    &:focus > .info {\n      background: darken($base-c, 8%);\n    }\n  }\n\n  & > .info > .title {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/markdown/a-em.scss",
    "content": "/*\n * For links with sources, eg,\n * [Foo](foo.com) _(foo.com)_\n */\n\n.MarkdownBody.MarkdownBody {\n  a + em {\n    opacity: 0.5;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/markdown/code.scss",
    "content": ".MarkdownBody code {\n  color: $gray-text;\n  font-size: $code-size;\n}\n\n.MarkdownBody pre,\n.MarkdownBody code {\n  font-family: $monospace-font;\n}\n\n// Reduce line height for box drawing characters\n.MarkdownBody pre.-box-chars {\n  line-height: 1.32;\n}\n\n// For figlet.md\n.MarkdownBody pre.-figlet {\n  line-height: 1;\n  font-size: 11px;\n}\n\n/*\n * Undo prism theme crap\n */\n\n.MarkdownBody {\n  pre {\n    box-shadow: none;\n    border-left: 0;\n    overflow: hidden;\n    overflow-x: auto;\n    background: white;\n    font-size: $code-size;\n    line-height: $code-line-height;\n  }\n\n  pre.-wrap {\n    white-space: pre-wrap;\n  }\n\n  pre > code {\n    color: $base-head;\n    max-height: auto;\n    padding: 0;\n    background: transparent;\n    overflow: visible;\n    font-size: 1em;\n  }\n\n  // Line highlight\n  .line-highlight {\n    transform: translate3d(0, 2px, 0);\n    background: linear-gradient(to right, rgba($base-c, 0.05) 25%, transparent);\n  }\n\n  // Line highlight ranges\n  .line-highlight[data-end] {\n    margin-top: 0;\n  }\n\n  .line-highlight::before,\n  .line-highlight::after {\n    display: none;\n  }\n}\n\n.MarkdownBody pre.-setup,\n.MarkdownBody p.-setup,\n.MarkdownBody ul.-setup,\n.MarkdownBody p.-crosslink {\n  background: $gray-bg;\n}\n\n/*\n * Syntax kighlight\n */\n\n.token {\n  $cA: $base-b;\n  $cA-3: adjust-color($cA, $lightness: 8%, $hue: -10deg);\n  $cA-7: adjust-color($cA, $lightness: -8%, $hue: 10deg);\n\n  $cB: $base-c;\n  $cB-3: adjust-color($cB, $lightness: 8%, $hue: -10deg);\n\n  $cM: #669; // Mute\n\n  &.tag,\n  &.keyword {\n    color: $cA;\n  }\n\n  &.tag {\n    color: $cA-7;\n  }\n\n  &.value,\n  &.string,\n  &.number,\n  &.attr-value,\n  &.boolean,\n  &.regex {\n    color: $cB;\n  }\n\n  &.function,\n  &.attr-name {\n    color: $cA-3;\n  }\n\n  &.punctuation,\n  &.operator {\n    color: $cM;\n  }\n\n  &.comment {\n    color: #569;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/markdown/headings.scss",
    "content": "/*\n * MarkdownBody context\n */\n\n.MarkdownBody h2 {\n  @include heading-style;\n  @include font-size(6);\n  line-height: 1.2;\n  font-weight: 200;\n  font-family: $heading-font;\n  margin-top: 0;\n}\n\n.MarkdownBody h3 {\n  margin: 0;\n  padding: 0;\n  margin-bottom: 16px;\n  font-family: $heading-font;\n  @include font-size(2);\n  font-weight: 400;\n  color: $base-a;\n}\n\n.MarkdownBody {\n  a,\n  a:visited {\n    color: $base-b;\n    text-decoration: none;\n  }\n\n  a:hover {\n    text-decoration: underline;\n  }\n\n  em {\n    font-style: normal;\n    color: $gray-text;\n  }\n\n  iframe {\n    border: 0;\n    margin: 0;\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/markdown/p.scss",
    "content": "/*\n * Crosslink (eg, phoenix.md)\n */\n\n.MarkdownBody.MarkdownBody {\n  img {\n    max-width: 100%;\n  }\n}\n\n.MarkdownBody.MarkdownBody p.-crosslink {\n  & > a {\n    display: block;\n    text-decoration: none;\n    color: $base-a;\n    border-bottom: 0;\n    box-shadow: none;\n    margin: -16px;\n    padding: 16px;\n  }\n\n  & > a:visited {\n    color: $base-a;\n  }\n\n  & > a::before {\n    content: '';\n    @include ion-md-arrow-forward(16px, white);\n    margin-right: 16px;\n    width: 32px;\n    height: 32px;\n    line-height: 32px;\n    border-radius: 50%;\n  }\n\n  & > a,\n  & > a:visited {\n    &::before {\n      background-color: $base-a;\n      color: white;\n    }\n  }\n\n  & > a:hover,\n  & > a:focus {\n    & {\n      color: $base-a7;\n    }\n\n    &::before {\n      background-color: $base-a7;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/markdown/table.scss",
    "content": "@mixin table-align-left {\n  & tr th,\n  & tr td,\n  & tr td:last-child {\n    text-align: left;\n  }\n}\n\n/*\n * Table\n */\n\n.MarkdownBody table {\n  & {\n    width: 100%;\n  }\n\n  & tr + tr {\n    border-top: solid 1px $line-color;\n  }\n\n  /* Horizontal lines */\n  & tbody + tbody {\n    border-top: solid 1px $dark-line-color;\n  }\n\n  & td,\n  & th {\n    padding: 8px 16px;\n    vertical-align: top;\n    text-align: left;\n  }\n\n  // & tr th:last-child,\n  // & tr td:last-child {\n  //   text-align: right;\n  // }\n\n  & td:first-child {\n    white-space: nowrap;\n  }\n\n  & td > code {\n    font-size: $code-size;\n  }\n\n  & td:first-child > code {\n    color: #35a;\n  }\n\n  & a,\n  & a:visited {\n    color: #35a;\n    text-decoration: none;\n  }\n\n  & td:first-child > code ~ em {\n    @include font-size(-1);\n    font-style: normal;\n    color: $gray-text;\n  }\n\n  & thead {\n    display: none;\n  }\n\n  & thead th {\n    font-weight: normal;\n    color: $base-a;\n  }\n}\n\n@mixin shortcut-span {\n  font-size: 1rem;\n  padding: 5px 6px;\n  padding-left: 8px; // compensation\n  background: $gray-bg;\n  border-radius: 3px;\n  margin-right: 2px;\n  color: $base-text;\n}\n\n.MarkdownBody table.-shortcuts {\n  td:first-child > code {\n    @include shortcut-span;\n  }\n}\n\n.MarkdownBody table.-shortcuts-right {\n  td:last-child > code {\n    @include shortcut-span;\n  }\n}\n\n.MarkdownBody table.-left-align {\n  @include table-align-left;\n}\n\n.MarkdownBody table.-headers {\n  & thead {\n    display: table-header-group;\n    border-bottom: solid 1px $dark-line-color;\n  }\n}\n\n/*\n * Key-value pairs (like in css)\n */\n\n.MarkdownBody table.-key-values {\n  & tbody tr td + td code {\n    display: block;\n    text-align: left;\n  }\n}\n\n.MarkdownBody table.-css-breakdown {\n  @include table-align-left;\n\n  & tr td {\n    @include font-size(1);\n    white-space: nowrap;\n  }\n\n  & tr td:not(:last-child) {\n    padding-right: 4px;\n  }\n\n  & tr td:not(:first-child) {\n    padding-left: 4px;\n  }\n\n  & tr:last-child {\n    background: $gray-bg;\n  }\n\n  & tr:last-child td {\n    @include font-size(-1);\n    color: $base-mute;\n    white-space: auto;\n  }\n}\n\n.MarkdownBody table.-bold-first {\n  & tr > td:first-child {\n    font-weight: bold;\n  }\n}\n\n.MarkdownBody table.-no-wrap {\n  & td,\n  & th {\n    white-space: nowrap;\n  }\n}\n\n.MarkdownBody table.-mute-em {\n  & td,\n  & th {\n    & em {\n      opacity: 0.5;\n    }\n\n    & em > code {\n      margin-right: 0.5em;\n    }\n  }\n}\n\n/* Separators (rehype-table-separators) */\n.MarkdownBody table tr.separator {\n  & > td {\n    padding: 0;\n    height: 4px;\n    background: $line-color;\n    box-shadow:\n      inset 0 1px 0 $dark-line-color,\n      inset 0 2px 4px $line-color;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/markdown/ul.scss",
    "content": "@use 'sass:math';\n\n.MarkdownBody ul.-six-column {\n  & {\n    display: flex;\n    flex-wrap: wrap;\n  }\n\n  & > li {\n    flex: 0 0 math.div(100%, 6);\n\n    @media (max-width: 480px) {\n      flex: 0 0 (100% * 0.5);\n    }\n\n    @media (max-width: 768px) {\n      flex: 0 0 (100% * 0.25);\n    }\n  }\n}\n\n.MarkdownBody ul.-four-column {\n  & {\n    display: flex;\n    flex-wrap: wrap;\n  }\n\n  & > li {\n    flex: 0 0 (100% * 0.25);\n\n    @media (max-width: 480px) {\n      flex: 0 0 (100% * 0.5);\n    }\n\n    @media (max-width: 768px) {\n      flex: 0 0 math.div(100%, 3);\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/placeholders/push-button.scss",
    "content": "// noop\n"
  },
  {
    "path": "src/sass/2017/utils/_font-size.scss",
    "content": "@mixin font-size($n) {\n  @include ms-respond(font-size, $n);\n}\n"
  },
  {
    "path": "src/sass/2017/utils/_gutter.scss",
    "content": "@mixin gutter($property, $multiplier: 1) {\n  #{$property}: $gut * $multiplier;\n\n  @media (max-width: 480px) {\n    #{$property}: $gut-small * $multiplier;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/utils/_heading-style.scss",
    "content": "@mixin heading-style {\n  margin: 0;\n  padding: 0;\n  margin-bottom: 16px + 8px;\n  margin-top: 64px;\n  position: relative;\n\n  @media (max-width: 768px) {\n    margin-bottom: 8px;\n    margin-top: 32px;\n  }\n\n  @media (max-width: 480px) {\n    margin-bottom: 8px;\n    margin-top: 32px;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/utils/_section-gutter.scss",
    "content": "@mixin section-gutter($property, $multiplier: 1) {\n  #{$property}: 16px * $multiplier;\n\n  @media (max-width: $area-width + 32px) {\n    #{$property}: 8px * $multiplier;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/utils/_section-with-container.scss",
    "content": "@mixin section-with-container {\n  & > .container {\n    @include gutter(padding-left);\n    @include gutter(padding-right);\n    max-width: $area-width;\n    margin: 0 auto;\n  }\n}\n"
  },
  {
    "path": "src/sass/2017/variables.scss",
    "content": "/*\n * Metrics\n */\n\n$gut-small: 16px; // max 480px width\n$gut: 16px;\n$column: 400px;\n$code-size: 0.96em;\n$code-line-height: 1.5;\n$area-width: $column * 3 + 32px;\n\n/*\n * Fonts\n */\n\n$system-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n  'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n$system-mono: 'SFMono-Regular', Consolas, Menlo, 'Liberation Mono',\n  'Ubuntu Mono', Courier, monospace;\n$body-font: $system-sans;\n$heading-font: $system-sans;\n$monospace-font: cousine, $system-mono;\n\n/*\n * Base colors\n */\n\n$base-body: #fafafc;\n$base-panel: white;\n$base-head: #111;\n$base-text: #345;\n$base-mute: #556677; // gray\n\n$base-a: adjust-color(#8370bd, $lightness: -5%); // indigo\n$base-b: adjust-color(#2b72a2, $lightness: -5%); // blue\n$base-c: adjust-color(#17c694, $lightness: -5%); // teal\n\n$base-a3: adjust-color($base-a, $lightness: 16%, $hue: -20deg);\n$base-a7: adjust-color($base-a, $lightness: -16%, $hue: 20deg);\n$base-b3: adjust-color($base-b, $lightness: 16%, $hue: -20deg);\n$base-b7: adjust-color($base-b, $lightness: -16%, $hue: 20deg);\n$base-mute7: adjust-color($base-mute, $lightness: -16%);\n$base-mute6: adjust-color($base-mute, $lightness: -8%);\n$base-mute4: adjust-color($base-mute, $lightness: 8%);\n$base-mute3: adjust-color($base-mute, $lightness: 16%);\n\n$body-bg: $base-body;\n$gray-bg: #f3f5fc;\n$gray-text: $base-mute;\n\n$line-color: rgba($base-mute, 0.18);\n$dark-line-color: rgba($base-mute, 0.3);\n\n//\n// Variants\n//\n\n$base-a-gradient: linear-gradient(\n  5deg,\n  $base-a,\n  adjust-color($base-a, $lightness: 2%, $hue: 16deg)\n);\n\n//\n// Shadows\n//\n\n$shadow2: 0 1px 1px rgba($base-mute, 0.55);\n\n$shadow3:\n  0 6px 8px rgba($base-mute, 0.03),\n  0 1px 1px rgba($base-mute, 0.4);\n\n$shadow6:\n  0 6px 8px rgba($base-mute, 0.03),\n  0 1px 1px rgba($base-mute, 0.4),\n  0 8px 12px rgba($base-b3, 0.1);\n\n/*\n * Mod scale\n */\n\n$modularscale: (\n  base: 14px,\n  ratio: 1.2,\n  480px: (\n    base: 13px,\n    ratio: 1.15\n  ),\n  768px: (\n    base: 14px,\n    ratio: 1.16\n  ),\n  1280px: (\n    base: 14px,\n    ratio: 1.17\n  )\n);\n"
  },
  {
    "path": "src/sass/full.scss",
    "content": "@import './2017/variables';\n@import './2017/utils/font-size';\n@import './vendor/modularscale/modularscale';\n\n/*\n * Base\n */\n\nhtml,\nbody {\n  background: $base-body;\n  font-family: $body-font;\n  font-size: 14px;\n  line-height: 1.6;\n  color: $base-text;\n  overflow-x: hidden;\n}\n\nbody {\n  @include font-size(0);\n  padding: 0;\n  margin: 0;\n}\n\n/*\n * Code\n */\n\npre,\ncode {\n  font-family: $monospace-font;\n  letter-spacing: -0.03em;\n}\n\npre {\n  font-size: $code-size;\n}\n\n/*\n * Antialias\n */\n\n*:not(pre):not(code) {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n/*\n * Links\n */\n\na {\n  color: $base-b;\n}\n\na:visited {\n  color: $base-b7;\n}\n\na:hover {\n  color: $base-b3;\n}\n\n// No tooltips on mobile\n@media (max-width: 580px) {\n  .hint--bottom {\n    &::before,\n    &::after {\n      display: none;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/vendor/ionicons-inline/ionicons.scss",
    "content": "@mixin ion-base {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n@function ion-fix-color($color) {\n  @return unquote(\"rgb(#{red($color)}%2C#{green($color)}%2C#{blue($color)})\")\n}\n\n@function ion-ios-add-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7S150.9%2065.3%20256%2065.3%20446.7%20150.9%20446.7%20256%20361.1%20446.7%20256%20446.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20128h-16v120H128v16h120v120h16V264h120v-16H264z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-add-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-add-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-add-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm128%20216H264v120h-16V264H128v-16h120V128h16v120h120v16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-add-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-add-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-add-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20264H264v120h-16V264H128v-16h120V128h16v120h120v16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-add($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-add-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-alarm-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M438.4%20192.4c12.2-14.2%2019.6-32.3%2019.6-52.2.1-43.8-35.5-79.6-80.4-82.1-1.6-.1-3.1-.1-4.8-.1-20.4-.1-39.1%206.8-53.8%2018.1l53.8%2052.4-10.5%2010.4c-25.7-19.4-57-32-91-34.9v-.1c0-8.5-7-15.5-15.5-15.5s-15.5%207-15.5%2015.5v.1c-33.9%202.9-65.1%2015.5-90.7%2034.9l-10.4-10.4L193%2076.1c-14.7-11.4-33.4-18.2-53.7-18.1-1.6%200-3.2.1-4.8.1-45%202.5-80.6%2038.3-80.4%2082.1%200%2019.8%207.4%2038%2019.6%2052.2l54-52.6%209.5%209.5c-35.1%2031.9-57.1%2078-57.1%20129.2%200%2043.9%2016.2%2084%2043%20114.7l-36.4%2044.6L99%20448l35.2-42.9c31.6%2030.2%2074.4%2048.9%20121.6%2048.9h.4c47.2%200%2090.2-18.7%20121.8-48.9l35.2%2043%2012.3-10.1-36.5-44.7c26.8-30.8%2043-70.9%2043-114.7%200-51.1-22-97.3-57.2-129.3l9.5-9.5%2054.1%2052.6zM76.2%20167.8c-4.2-8.6-6.4-18.4-6.5-28-.1-35.1%2028.4-64.6%2065.5-66.8%2012.7-.7%2023.1%201.4%2032.1%206.1l-91.1%2088.7zm339.7%20108.7c0%2087.7-72%20157.1-160.1%20157.1-88%200-159.8-69.4-159.8-157.1%200-87.7%2071.8-158.7%20159.9-158.7%2088.1%200%20160%2070.9%20160%20158.7zM344.7%2079.2c8.8-4.8%2019.3-6.8%2032.1-6.1%2037.2%202%2065.6%2031.5%2065.5%2066.8%200%209.6-2.3%2019.4-6.5%2028.1l-91.1-88.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20160v128h-96v16h112V160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-alarm-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-alarm-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-alarm-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M438.4%20192.4c12.2-14.2%2019.6-32.3%2019.6-52.2.1-43.8-35.5-79.6-80.4-82.1-1.6-.1-3.1-.1-4.8-.1-20.4-.1-39.1%206.8-53.8%2018.1l53.8%2052.4-10.6%2010.4c-25.7-19.4-57.2-32-91.2-34.9v-.1c0-8.5-7-15.5-15.5-15.5s-15.5%207-15.5%2015.5v.1c-34%202.9-65%2015.5-90.6%2034.9L139%20128.6l53.8-52.4c-14.7-11.4-33.4-18.2-53.7-18.1-1.6%200-3.2.1-4.8.1-45%202.5-80.6%2038.3-80.4%2082.1%200%2019.8%207.4%2038%2019.6%2052.2l54-52.6%209.5%209.5c-35.1%2031.9-57.1%2078-57.1%20129.2%200%2043.9%2016.2%2084%2043%20114.7l-36.4%2044.6L99%20448l35.2-42.9c31.6%2030.2%2074.4%2048.9%20121.6%2048.9h.4c47.2%200%2090.2-18.7%20121.8-48.9l35.2%2043%2012.3-10.1-36.5-44.7c26.8-30.8%2043-70.9%2043-114.7%200-51.1-22-97.3-57.2-129.3l9.5-9.5%2054.1%2052.6zM272%20304H160v-16h96V160h16v144z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-alarm($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-alarm-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-albums-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%20144v288H48V144h416m16-16H32v320h448V128zM72%2096h368v16H72zM104%2064h304v16H104z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-albums-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-albums-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-albums-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20128H32v320h448V128zM72%2096h368v16H72zM104%2064h304v16H104z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-albums($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-albums-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-alert-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20333.1c-8.8%200-16%207.2-16%2016s7.2%2016%2016%2016%2016-7.2%2016-16-7.2-16-16-16zM244.2%20233.2V144h24v89.2l-6%2070.8h-12l-6-70.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-alert-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-alert-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-alert-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm-11.8%2096h24v89.2l-6%2070.8h-12l-6-70.8V144zM256%20365.1c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016c0%208.9-7.2%2016-16%2016z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-alert($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-alert-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-american-football-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M378.605%20133.395C305.902%2060.69%20189.38%2047.998%20116.85%2048c-38.926%200-65.19%203.658-65.19%203.658s-29.985%20215.227%2081.735%20326.947C206.1%20451.31%20322.617%20464%20395.15%20464c38.925%200%2065.19-3.658%2065.19-3.658s29.986-215.226-81.735-326.947zM65.142%2065.208C76.137%2064.194%2094.374%2063%20116.856%2063H117l-.068-.07c27.167%200%2053.167%201.753%2077.792%205.22l-126.6%20126.58a515.877%20515.877%200%200%201-2.64-22.246c-4.586-47.435-2.086-88.228-.342-107.276zM143.9%20368.102c-23.85-23.852-42.793-54.938-56.304-92.396-6.973-19.332-12.51-40.373-16.57-62.866L212.838%2071.05c10.672%201.93%2021.064%204.19%2031.14%206.804%2052.028%2013.492%2093.784%2035.708%20124.14%2066.064%2023.85%2023.85%2042.786%2054.928%2056.297%2092.386%206.974%2019.333%2012.51%2040.375%2016.567%2062.87L299.17%20440.987c-10.66-1.93-21.04-4.19-31.104-6.8-52.03-13.49-93.806-35.727-124.166-66.084zm302.96%2078.766c-10.993%201.012-29.23%202.275-51.71%202.275-27.19%200-53.224-1.77-77.875-5.25l126.607-126.607a516.862%20516.862%200%200%201%202.638%2022.233c4.588%2047.436%202.086%2088.297.34%20107.348z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M307.304%20317.847l22.625%2022.632-28.655%2028.65%2011.315%2011.315%2067.88-67.88-11.313-11.315-28.72%2028.72-22.626-22.63%2028.717-28.717-11.313-11.313-28.715%2028.714-22.634-22.638%2028.702-28.702-11.313-11.314-28.7%2028.7-22.626-22.63%2028.696-28.698-11.314-11.313-28.694%2028.694-22.63-22.637%2028.686-28.687-11.313-11.313-28.684%2028.685-22.624-22.63%2028.682-28.682-11.313-11.313-67.882%2067.882%2011.314%2011.313%2028.693-28.694%2022.624%2022.63-28.692%2028.69%2011.313%2011.313%2028.69-28.69%2022.63%2022.638-28.678%2028.68%2011.313%2011.313%2028.677-28.677%2022.626%2022.63-28.674%2028.675%2011.314%2011.314%2028.67-28.67%2022.634%2022.637-28.66%2028.66%2011.314%2011.315z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-american-football-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-american-football-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-american-football-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M378.605%20133.395C305.902%2060.69%20189.38%2047.998%20116.85%2048c-38.926%200-65.19%203.658-65.19%203.658s-29.985%20215.227%2081.735%20326.947C206.1%20451.31%20322.617%20464%20395.148%20464c38.927%200%2065.193-3.658%2065.193-3.658s29.987-215.226-81.735-326.947zm-310.48%2061.333L194.706%2068.146c6.123.86%2012.164%201.825%2018.112%202.9L71.024%20212.837a476.047%20476.047%200%200%201-2.9-18.11zM267.31%20335.195L296%20306.507l-22.627-22.628-28.688%2028.687-11.313-11.312%2028.688-28.688-22.627-22.627-28.688%2028.688-11.313-11.312%2028.688-28.688L205.492%20216l-28.688%2028.688-11.313-11.312%2028.69-28.69-22.628-22.626-28.688%2028.688-11.314-11.313%2067.884-67.883%2011.313%2011.314-28.688%2028.688%2022.627%2022.627%2028.688-28.687%2011.313%2011.313L216%20205.494l22.628%2022.628%2028.688-28.688%2011.314%2011.313-28.688%2028.688%2022.627%2022.627%2028.687-28.688%2011.313%2011.312-28.688%2028.688%2022.628%2022.628%2028.688-28.688%2011.312%2011.313-28.688%2028.688%2022.627%2022.627%2028.687-28.688%2011.314%2011.312-67.882%2067.884-11.313-11.313%2028.688-28.688-22.628-22.63-28.688%2028.69-11.315-11.315zM317.26%20443.89c-6.122-.862-12.16-1.83-18.105-2.905L440.98%20299.16a474.432%20474.432%200%200%201%202.9%2018.11L317.26%20443.89z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-american-football($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-american-football-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-analytics-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.1%20108.9c-81.2-81.2-212.9-81.2-294.2%200s-81.2%20212.9%200%20294.2c81.2%2081.2%20212.9%2081.2%20294.2%200%2081.2-81.2%2081.2-213%200-294.2zm-281.9%2012.3c74.3-74.3%20195.3-74.3%20269.6%200%2038%2038%2056.5%2088.1%2055.7%20138-2.9-4.6-23.1-35.2-52.5-35.2-27.9%200-42.3%2026.1-51.8%2043.3-1.4%202.6-2.8%205-4%207.1-11.6%2019.5-27.7%2030.4-43.1%2029.3-13.6-1-25.2-11.3-32.6-29.2-9.3-22.4-29.6-46.5-53.7-49.9-11.4-1.6-28.6.9-45.3%2021.7-3.3%204.1-7%209.5-11.2%2015.9-10.6%2015.7-26.5%2039.4-38.7%2041.4-21%203.4-36.6-12.2-39.3-14.6-2-1.7-4.4-4.3-7.3-7.6-7.5-56.9%2010.5-116.6%2054.2-160.2zm269.6%20269.6c-74.3%2074.3-195.3%2074.3-269.6%200-24.2-24.2-40.5-53.3-48.9-84.1%207%205.7%2019.3%2013.3%2035.5%2013.3%202.7%200%205.6-.2%208.5-.7%2019-3.1%2035.8-28.1%2049.4-48.2%203.9-5.8%207.5-11.2%2010.4-14.8%209.7-12%2020-17.4%2030.6-15.9%2012.9%201.8%2031.1%2016.2%2041.1%2040.2%209.9%2023.7%2026.3%2037.6%2046.3%2039%2021.6%201.5%2043.3-12.4%2058-37.1%201.4-2.3%202.8-4.8%204.2-7.5%208.6-15.6%2019.3-35.1%2037.7-35.1%2011.1%200%2020.9%207.3%2027.2%2013.4%207.4%207.2%209%209%2012.9%2014.6%203.4%204.8%206.5%208.7%2010.3%2016.7-5.8%2038.9-23.7%2076.3-53.6%20106.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-analytics-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-analytics-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-analytics-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.1%20108.9c-81.2-81.2-212.9-81.2-294.2%200s-81.2%20212.9%200%20294.2c81.2%2081.2%20212.9%2081.2%20294.2%200%2081.2-81.2%2081.2-213%200-294.2zm-281.9%2012.3c74.3-74.3%20195.3-74.3%20269.6%200%2038%2038%2056.5%2088.1%2055.7%20138-2.9-4.7-23.1-35.2-52.5-35.2-27.9%200-42.3%2026.1-51.8%2043.3-1.4%202.6-2.8%205-4%207.1-11.6%2019.5-27.7%2030.4-43.1%2029.3-13.6-1-25.2-11.3-32.6-29.2-9.3-22.4-29.6-46.5-53.7-49.9-11.4-1.6-28.6.9-45.3%2021.7-3.3%204.1-7%209.5-11.2%2015.9-10.6%2015.7-26.5%2039.4-38.7%2041.4-21%203.4-36.6-12.2-39.3-14.6-2-1.7-4.4-4.3-7.2-7.5-7.6-57%2010.4-116.7%2054.1-160.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-analytics($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-analytics-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-aperture-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256c0%2065.5%2030.3%20123.9%2077.6%20162.1l-.6%201.1%208.3%204.8c34.4%2025.2%2076.8%2040%20122.7%2040%20114.9%200%20208-93.1%20208-208S370.9%2048%20256%2048zm176.9%20133.3c10%2023.7%2015.1%2048.8%2015.1%2074.7%200%205.4-.2%2010.7-.7%2016H284.5l94.4-163.5c4.4%203.7%208.7%207.6%2012.9%2011.7%2017.6%2017.7%2031.4%2038.2%2041.1%2061.1zM237%20257.1l9.9-17.1h18.7l9.4%2016.4-9%2015.6h-20.4l-8.6-14.9zm93.7-178c12.5%205.3%2024.3%2011.9%2035.4%2019.6l-81.8%20141.7-95-164.5C210.6%2068%20233%2064%20256%2064c25.9%200%2051.1%205.1%2074.7%2015.1zm-210.5%2041.1c15.9-15.9%2034.1-28.7%2054.2-38.1l82%20141.9H66.7c2.5-14.7%206.6-28.9%2012.4-42.7%209.7-22.9%2023.5-43.4%2041.1-61.1zm0%20271.6c-17.6-17.6-31.5-38.2-41.2-61-9.9-23.7-15-48.9-15-74.8%200-5.4.2-10.7.7-16h163.8l-94.7%20164c-4.7-3.8-9.2-7.9-13.6-12.2zm61.1%2041.1c-12.3-5.2-23.9-11.6-34.7-19.1l81.2-140.7L322%20436.3c-21.1%207.7-43.3%2011.7-66%2011.7-25.9%200-51.1-5.1-74.7-15.1zm210.5-41.1c-16%2016-34.4%2028.9-54.8%2038.4L254.9%20288h190.5c-2.5%2014.7-6.6%2028.9-12.4%2042.7-9.8%2022.9-23.6%2043.4-41.2%2061.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-aperture-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-aperture-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-aperture-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M246.9%20240l-9.9%2017.1%208.6%2014.9H266l9.1-15.6-9.5-16.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm-1.1%20240L337%20430.1c-2.1%201-4.1%201.9-6.2%202.8-2.9%201.2-5.8%202.4-8.7%203.4l-94.2-163.2-81.2%20140.7c-4.4-3.1-8.7-6.3-12.8-9.7l94.7-164H64.7c.4-5.4%201.1-10.7%202-16h189.7l-81.9-142c2.2-1.1%204.5-2.1%206.8-3%202.7-1.1%205.4-2.2%208.1-3.2l95%20164.5%2081.8-141.7c4.4%203.1%208.7%206.4%2012.8%209.8L284.5%20272h162.8c-.4%205.4-1.1%2010.7-2%2016H254.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-aperture($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-aperture-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-apps-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M154%2080c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6V86c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22V86c0-12.1-9.9-22-22-22zM282%2080c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6V86c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22V86c0-12.1-9.9-22-22-22zM410%2080c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6V86c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22V86c0-12.1-9.9-22-22-22zM154%20224c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6v-52c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22v-52c0-12.1-9.9-22-22-22zM282%20224c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6v-52c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22v-52c0-12.1-9.9-22-22-22zM410%20224c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6v-52c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22v-52c0-12.1-9.9-22-22-22zM154%20368c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6v-52c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22v-52c0-12.1-9.9-22-22-22zM282%20368c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6v-52c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22v-52c0-12.1-9.9-22-22-22zM410%20368c3.3%200%206%202.7%206%206v52c0%203.3-2.7%206-6%206h-52c-3.3%200-6-2.7-6-6v-52c0-3.3%202.7-6%206-6h52m0-16h-52c-12.1%200-22%209.9-22%2022v52c0%2012.1%209.9%2022%2022%2022h52c12.1%200%2022-9.9%2022-22v-52c0-12.1-9.9-22-22-22z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-apps-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-apps-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-apps-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M154%20160h-52c-12.1%200-22-9.9-22-22V86c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM282%20160h-52c-12.1%200-22-9.9-22-22V86c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM410%20160h-52c-12.1%200-22-9.9-22-22V86c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM154%20304h-52c-12.1%200-22-9.9-22-22v-52c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM282%20304h-52c-12.1%200-22-9.9-22-22v-52c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM410%20304h-52c-12.1%200-22-9.9-22-22v-52c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM154%20448h-52c-12.1%200-22-9.9-22-22v-52c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM282%20448h-52c-12.1%200-22-9.9-22-22v-52c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022zM410%20448h-52c-12.1%200-22-9.9-22-22v-52c0-12.1%209.9-22%2022-22h52c12.1%200%2022%209.9%2022%2022v52c0%2012.1-9.9%2022-22%2022z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-apps($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-apps-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-appstore-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M139.3%20352l34.2-28.8-24.7-16.2zM342.2%20298c-6.8%203.2-15.2%2014-3.9%2028.6%209.1%2011.7%2018%208.7%2026.5%2025.4%204.8-4.1%209.4-21.7%207.3-35.7-2.4-15.3-12.3-26.5-29.9-18.3zM251.6%20189.6c1.6-2.7.6-6.3-2.1-7.9l-15.1-8.6c-2.8-1.6-6.3-.6-7.9%202.1L189.1%20240l-18.5%2032-16.9%2029.2%2024.9%2015%2025.5-44.3%2018.4-32%2029.1-50.3zM230.6%20240l-18.5%2032h89.2l-18.1-32zM351%20272h33v-32h-51zM181.1%20240H128v32h34.6zM324.6%20240l-60-105.8c-1.6-2.8-5.2-3.7-7.9-2.1l-15.1%208.6c-2.8%201.6-3.7%205.1-2.1%207.9l51.7%2091.4%2018.1%2032%20.2.3.5-.3%2024.4-14.8-9.8-17.2zM343.2%20272l-4.9-8.7-14.4%208.7-10.4%206.3%2013%2023%2024.9-15.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-appstore-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-appstore-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-appstore-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zM128%20240h53.1l-18.5%2032H128v-32zm11.3%20112l9.5-45%2024.8%2016.2-34.3%2028.8zm39.3-35.7l-24.9-15%2016.9-29.2%2018.5-32%2037.4-64.8c1.6-2.8%205.2-3.7%207.9-2.1l15.1%208.6c2.8%201.6%203.7%205.1%202.1%207.9l-29%2050.4-18.4%2032-25.6%2044.2zm33.5-44.3l18.4-32h52.7l18.1%2032h-89.2zm97.4.3l-.2-.3-18.1-32-51.7-91.4c-1.6-2.7-.6-6.3%202.1-7.9l15.1-8.6c2.8-1.6%206.3-.6%207.9%202.1l60%20105.8%209.8%2017.2L310%20272l-.5.3zm4%206l10.4-6.3%2014.4-8.7%205%208.7%208.1%2014.2-24.9%2015-13-22.9zm51.2%2073.7c-8.5-16.8-17.4-13.7-26.5-25.4-11.3-14.6-2.9-25.4%203.9-28.6%2017.6-8.2%2027.5%203%2029.8%2018.3%202.2%2014-2.4%2031.6-7.2%2035.7zm19.3-80h-33l-18-32h51v32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-appstore($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-appstore-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-archive-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M287.8%20240c8.8%200%2016.1%207.2%2016.1%2016s-7%2016-15.9%2016h-64c-8.8%200-16-7.2-16-16s7.2-16%2016-16h63m1-16h-64c-17.6%200-32%2014.4-32%2032s14.4%2032%2032%2032h64c17.6%200%2032-14.4%2032-32s-14.4-32-32-32z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20112H96v80h16v208h288V192h16v-80zm-32%20272H128V192h256v192zm16-208H112v-48h288v48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-archive-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-archive-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-archive-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M112%20400h288V208H112v192zm112-160h64c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016h-64c-8.8%200-16-7.2-16-16s7.2-16%2016-16zM96%20112v80h320v-80z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-archive($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-archive-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-back-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20128.4L319.7%2096%20160%20256l159.7%20160%2032.3-32.4L224.7%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-back($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-back-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128.4%20160L96%20192.3%20256%20352l160-159.7-32.4-32.3L256%20287.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropdown-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20260.4L349.2%20208l12.8%2013.8L256%20336%20150%20221.8l12.8-13.8L256%20308.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropdown-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropdown-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropdown-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M349.2%20208l12.8%2013.8L256%20336%20150%20221.8l12.8-13.8L256%20308.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%2017.3c105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.5%20190.7-190.7%20190.7-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.6-190.7%20190.7-190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropdown($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropdown-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropleft-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm48%20301.2L290.2%20362%20176%20256l114.2-106%2013.8%2012.8L203.6%20256%20304%20349.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropleft-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropleft-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropleft-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M304%20162.8L290.2%20150%20176%20256l114.2%20106%2013.8-12.8L203.6%20256z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropleft($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropleft-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropright-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20256c0%20114.9%2093.1%20208%20208%20208s208-93.1%20208-208S370.9%2048%20256%2048%2048%20141.1%2048%20256zm260.4%200L208%20162.8l13.8-12.8L336%20256%20221.8%20362%20208%20349.2%20308.4%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropright-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropright-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropright-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M208%20162.8l13.8-12.8L336%20256%20221.8%20362%20208%20349.2%20308.4%20256z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20256c0%20114.9%2093.1%20208%20208%20208s208-93.1%20208-208S370.9%2048%20256%2048%2048%20141.1%2048%20256zm17.3%200c0-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.5%20190.7-190.7%20190.7-105.1%200-190.7-85.6-190.7-190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropright($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropright-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropup-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20464c114.9%200%20208-93.1%20208-208S370.9%2048%20256%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208zm0-260.4L162.8%20304%20150%20290.2%20256%20176l106%20114.2-12.8%2013.8L256%20203.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropup-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropup-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-dropup-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M162.8%20304L150%20290.2%20256%20176l106%20114.2-12.8%2013.8L256%20203.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20464c114.9%200%20208-93.1%20208-208S370.9%2048%20256%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208zm0-17.3c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-dropup($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-dropup-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-forward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M287.3%20256L160%20383.6l32.3%2032.4L352%20256%20192.3%2096%20160%20128.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-forward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-forward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-round-back-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M376%20248H155.3l66.3-74.4c2.9-3.4%203.2-8.1.1-11.2-3.1-3.1-8.5-3.3-11.4-.1l-80%2088c-.2.2-.4.4-.5.6-.1.1-.1.2-.2.3-.1.1-.2.2-.3.4-.1.1-.1.2-.2.3-.1.1-.1.2-.2.3-.1.1-.1.2-.2.4-.1.1-.1.2-.2.3%200%20.1-.1.2-.1.4%200%20.1-.1.3-.1.4%200%20.1-.1.2-.1.4%200%20.1-.1.3-.1.4%200%20.1%200%20.3-.1.4v.3c-.1.5-.1%201.1%200%201.6v.3c0%20.1%200%20.3.1.4%200%20.1.1.3.1.4%200%20.1.1.2.1.4%200%20.1.1.3.1.4%200%20.1.1.2.1.4%200%20.1.1.2.2.3.1.1.1.2.2.4.1.1.1.2.2.3.1.1.1.2.2.3.1.1.2.2.3.4.1.1.1.2.2.3.2.2.3.4.5.6l80%2088c1.6%201.7%203.6%202.3%205.7%202.3%202%200%204.1-.8%205.7-2.3%203.1-3.1%203-8%200-11.3L155.3%20264H376c4.4%200%208-3.6%208-8s-3.6-8-8-8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-round-back($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-round-back-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-round-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M248%20136v220.7l-74.4-66.3c-3.4-2.9-8.1-3.2-11.2-.1-3.1%203.1-3.3%208.5-.1%2011.4l88%2080c.2.2.4.4.6.5.1.1.2.1.3.2.1.1.2.2.4.3.1.1.2.1.3.2.1.1.2.1.3.2.1.1.2.1.4.2.1.1.2.1.3.2.1%200%20.2.1.4.1.1%200%20.3.1.4.1.1%200%20.2.1.4.1.1%200%20.3.1.4.1.1%200%20.3%200%20.4.1h.3c.5.1%201.1.1%201.6%200h.3c.1%200%20.3%200%20.4-.1.1%200%20.3-.1.4-.1.1%200%20.2-.1.4-.1.1%200%20.3-.1.4-.1.1%200%20.2-.1.4-.1.1%200%20.2-.1.3-.2.1-.1.2-.1.4-.2.1-.1.2-.1.3-.2.1-.1.2-.1.3-.2.1-.1.2-.2.4-.3.1-.1.2-.1.3-.2.2-.2.4-.3.6-.5l88-80c1.7-1.6%202.3-3.6%202.3-5.7%200-2-.8-4.1-2.3-5.7-3.1-3.1-8-3-11.3%200L264%20356.7V136c0-4.4-3.6-8-8-8s-8%203.6-8%208z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-round-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-round-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-round-forward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M136%20264h220.7l-66.3%2074.4c-2.9%203.4-3.2%208.1-.1%2011.2%203.1%203.1%208.5%203.3%2011.4.1l80-88c.2-.2.4-.4.5-.6.1-.1.1-.2.2-.3.1-.1.2-.2.3-.4.1-.1.1-.2.2-.3.1-.1.1-.2.2-.3.1-.1.1-.2.2-.4.1-.1.1-.2.2-.3%200-.1.1-.2.1-.4%200-.1.1-.3.1-.4%200-.1.1-.2.1-.4%200-.1.1-.3.1-.4%200-.1%200-.3.1-.4v-.3c.1-.5.1-1.1%200-1.6v-.3c0-.1%200-.3-.1-.4%200-.1-.1-.3-.1-.4%200-.1-.1-.2-.1-.4%200-.1-.1-.3-.1-.4%200-.1-.1-.2-.1-.4%200-.1-.1-.2-.2-.3-.1-.1-.1-.2-.2-.4-.1-.1-.1-.2-.2-.3-.1-.1-.1-.2-.2-.3-.1-.1-.2-.2-.3-.4-.1-.1-.1-.2-.2-.3-.2-.2-.3-.4-.5-.6l-80-88c-1.6-1.7-3.6-2.3-5.7-2.3-2%200-4.1.8-5.7%202.3-3.1%203.1-3%208%200%2011.3l66.3%2074.3H136c-4.4%200-8%203.6-8%208%200%204.5%203.6%208.1%208%208.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-round-forward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-round-forward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-round-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20376V155.3l74.4%2066.3c3.4%202.9%208.1%203.2%2011.2.1%203.1-3.1%203.3-8.5.1-11.4l-88-80c-.2-.2-.4-.4-.6-.5-.1-.1-.2-.1-.3-.2-.1-.1-.2-.2-.4-.3-.1-.1-.2-.1-.3-.2-.1-.1-.2-.1-.3-.2-.1-.1-.2-.1-.4-.2-.1-.1-.2-.1-.3-.2-.1%200-.2-.1-.4-.1-.1%200-.3-.1-.4-.1-.1%200-.2-.1-.4-.1-.1%200-.3-.1-.4-.1-.1%200-.3%200-.4-.1h-.3c-.5-.1-1.1-.1-1.6%200h-.3c-.1%200-.3%200-.4.1-.1%200-.3.1-.4.1-.1%200-.2.1-.4.1-.1%200-.3.1-.4.1-.1%200-.2.1-.4.1-.1%200-.2.1-.3.2-.1.1-.2.1-.4.2-.1.1-.2.1-.3.2-.1.1-.2.1-.3.2-.1.1-.2.2-.4.3-.1.1-.2.1-.3.2-.2.2-.4.3-.6.5l-88%2080c-1.7%201.6-2.3%203.6-2.3%205.7%200%202%20.8%204.1%202.3%205.7%203.1%203.1%208%203%2011.3%200l74.3-66.3V376c0%204.4%203.6%208%208%208%204.5%200%208.1-3.6%208.1-8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-round-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-round-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-arrow-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M383.6%20352l32.4-32.3L256%20160%2096%20319.7l32.4%2032.3L256%20224.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-arrow-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-arrow-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-at-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M433.9%20344.6C401%20408.4%20336.3%20448%20265.1%20448c-50.5%200-97.3-19.9-131.9-56.1-34.4-36-53.3-84.2-53.3-135.9s18.9-99.9%2053.3-135.9C167.8%2083.9%20214.7%2064%20265.1%2064c50.9%200%2093.9%2019.3%20121.1%2054.2%2026.3%2033.8%2034.5%2078.1%2023.2%20124.9-10.9%2045.1-33.5%2065.8-50.5%2075.2-17.5%209.7-41.8%2013.4-52.4%204.4-.3-.3-.6-.6-.8-.9-1.5-1.9-2.3-5.4-2.4-8.5-.1-3.1.2-6.7%201-10.7.8-4%201.9-8.4%203.2-12.7L346.1%20173h-21.3l-10%2026.5c-4.6-12.1-10.6-20.8-18.1-26-7.5-5.3-15.7-7.9-24.5-7.9-14.2%200-27.2%203.5-38.9%2010.4-11.8%206.9-21.8%2015.9-30.1%2027.1-8.3%2011.2-14.7%2023.8-19.3%2037.7-4.6%2013.9-6.8%2027.9-6.8%2041.9%200%208.1%201.2%2015.7%203.6%2022.7%202.4%207%205.9%2013.2%2010.4%2018.6%204.5%205.4%2010.1%209.7%2016.7%2012.8%206.6%203.1%2014%204.7%2022.3%204.7%2010.2%200%2019.7-2.7%2028.5-8.4s16.3-12.1%2022.5-18.1h.8c.8%209%204.7%2015.5%209.8%2020.1%202.6%202.3%206.3%204.5%2011.1%206.1v.1c21.1%207.2%2042.1%203%2063.8-9%2019.8-11%2046.1-34.7%2058.3-85.5%2012.5-51.6%203.2-100.8-26.2-138.6C368.5%2069.4%20321%2048%20265.1%2048c-54.8%200-105.7%2021.7-143.3%2061C84.5%20148%2064%20200.2%2064%20256s20.5%20108%2057.8%20147c37.6%2039.4%2088.6%2061%20143.3%2061%2077.1%200%20147.2-42.9%20182.9-112l-14.1-7.4zm-150.4-58.2c-6.1%209.8-13.3%2018-21.5%2024.8-8.2%206.7-17%2010.1-26.6%2010.1-9.8%200-17.9-3.6-24.3-10.7-6.4-7.2-9.6-16.9-9.6-29.3%200-9.6%201.6-20%204.9-31.2%203.3-11.1%208-21.5%2014.1-31s13.5-17.4%2022.1-23.7c8.6-6.3%2018.1-9.5%2028.4-9.5%204.1%200%208%201.1%2011.9%203.3%203.8%202.2%207.2%205.1%2010.2%208.7%203%203.6%205.5%207.6%207.4%2012.2%201.9%204.5%202.9%209.3%202.9%2014.2%200%209.1-1.8%2019.3-5.3%2030.6-3.6%2011.2-8.5%2021.7-14.6%2031.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-at-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-at-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-at-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%2092.1c5.3%205%2010.2%2010.5%2014.7%2016.3%2029.4%2037.7%2038.7%2086.9%2026.2%20138.6-12.3%2050.7-38.5%2074.5-58.3%2085.5-21.7%2012-42.7%2016.2-63.8%209v-.1c-4.8-1.6-8.5-3.8-11.1-6.1-5.1-4.6-9-11.1-9.8-20.1h-.8c-6.2%206-13.6%2012.4-22.5%2018.1-8.9%205.7-18.3%208.4-28.5%208.4-8.3%200-15.7-1.5-22.3-4.7-6.6-3.1-12.1-7.4-16.7-12.8s-8-11.6-10.4-18.6c-2.4-7-3.6-14.6-3.6-22.7%200-14%202.3-28%206.8-41.9%204.5-13.9%2011-26.5%2019.3-37.7%208.3-11.2%2018.3-20.3%2030.1-27.1%2011.8-6.9%2024.7-10.4%2038.9-10.4%208.8%200%2017%202.6%2024.5%207.9s13.5%2013.9%2018.1%2026l10-26.5h21.3L307.6%20290c-1.3%204.3-2.4%208.7-3.2%2012.7s-1.1%207.6-1%2010.7c.1%203.1.9%206.6%202.4%208.5.2.3.5.6.8.9%2010.6%209.1%2034.9%205.3%2052.4-4.4%2017.1-9.4%2039.7-30.1%2050.5-75.2%2011.3-46.8%203-91.1-23.2-124.9-22.8-29.2-54.6-58.8-96.8-66.5-13.9-2.5-22.1-3.8-33.5-3.8-114.9%200-208%2093.1-208%20208s93.1%20208%20208%20208%20208-93.1%20208-208c0-66.6-31.3-125.9-80-163.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M211.1%20310.6c6.4%207.1%2014.5%2010.7%2024.3%2010.7%209.6%200%2018.4-3.4%2026.6-10.1%208.2-6.8%2015.4-15%2021.5-24.8s11-20.3%2014.5-31.6%205.3-21.5%205.4-30.5c0-4.9-1-9.7-2.9-14.2-1-2.3-2.1-4.5-3.3-6.6-1.2-2-2.6-3.9-4.1-5.7-3-3.6-6.4-6.5-10.2-8.7-3.8-2.2-7.8-3.3-11.9-3.3-10.4%200-19.8%203.2-28.4%209.5-8.6%206.3-16%2014.2-22.1%2023.7-6.1%209.5-10.8%2019.8-14.1%2031-3.3%2011.1-4.9%2021.5-4.9%2031.2v.1c0%2012.4%203.2%2022.1%209.6%2029.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-at($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-at-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-attach-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M343.5%20191.5c-4.7%200-8.5%203.8-8.5%208.5v157c0%2019-7.5%2038.2-20.9%2052.4-13.7%2014.4-33.3%2022.6-52.1%2022.6h-12c-39.5%200-74-36-74-75V135.9c0-30.6%2025.4-54.8%2056-54.8s55%2024.2%2055%2054.8v214.3c0%2017.2-13.6%2033.8-31%2033.8s-32-16.5-32-33.8V232c0-4.7-3.8-8.5-8.5-8.5s-8.5%203.8-8.5%208.5v118.2c0%2028.8%2022.3%2049.8%2049%2049.8s48-20%2048-49.8V135.9C304%2096%20271.6%2064%20231.7%2064S160%2096%20160%20135.9V357c0%2023.2%209.5%2046.8%2027.3%2064.3C205%20438.7%20226.8%20448%20250%20448h12c48%200%2090-41.4%2090-91V200c0-4.7-3.8-8.5-8.5-8.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-attach($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-attach-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-backspace-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M395%2096H230c-46.7%200-73.2%2034.7-102%2063.5s-72.1%2074.7-72.1%2074.7C51%20239.8%2048%20247%2048%20255.1c0%208%203%2015.3%207.9%2021%200%200%2034.3%2037.6%2072.1%2075.5%2037.8%2037.8%2056.7%2064.5%20102%2064.5h165c38.5%200%2069-32.5%2069-71V165c0-38.5-30.5-69-69-69zm53%20249c0%2014.5-5.3%2028.4-15.5%2038.7-10.1%2010.4-23.3%2016.3-37.5%2016.3H230c-32.6%200-48.2-16.3-76.5-45.4l-85.7-89.2C66%20263.3%2064%20259.8%2064%20255c0-4.7%202-8.2%203.8-10.3l83.1-86.1c12.2-12.7%2023.8-24.5%2036.9-33.3%2013.8-9.3%2027.2-13.4%2042.2-13.4h165c14.3%200%2027.5%205.3%2037.6%2015.4%2010.1%2010.1%2015.4%2023.3%2015.4%2037.6V345z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M316.4%20256l63.6-63.4-14.6-14.6-63.6%2063.5-63.2-63.2-14.6%2014.6%2063.3%2063.1-63.3%2063.2%2014.6%2014.5%2063.2-63.1%2063.6%2063.4%2014.6-14.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-backspace-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-backspace-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-backspace-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M395%2096H230c-46.7%200-73.2%2034.7-102%2063.5s-72.1%2074.7-72.1%2074.7C51%20239.8%2048%20247%2048%20255.1c0%208%203%2015.3%207.9%2021%200%200%2034.3%2037.6%2072.1%2075.5%2037.8%2037.8%2056.7%2064.5%20102%2064.5h165c38.5%200%2069-32.5%2069-71V165c0-38.5-30.5-69-69-69zm-29.6%20238l-63.6-63.4-63.3%2063.1-14.5-14.5%2063.3-63.2-63.3-63.1%2014.6-14.6%2063.3%2063.2%2063.6-63.5%2014.6%2014.6-63.7%2063.4%2063.6%2063.5-14.6%2014.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-backspace($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-backspace-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-barcode-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20384h80v-16H64V144h64v-16H48zM384%20128v16h64v224h-64v16h80V128z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M112%20192h16v128h-16zM384%20192h16v128h-16zM320%20160h16v192h-16zM176%20160h16v192h-16zM247%20176h16v160h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-barcode-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-barcode-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-barcode-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20128v256h416V128H48zm80%20192h-16V192h16v128zm64%2032h-16V160h16v192zm71-16h-16V176h16v160zm73%2016h-16V160h16v192zm64-32h-16V192h16v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-barcode($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-barcode-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-baseball-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M462.686%20279.37c.132-1.183.257-2.366.37-3.555l.01-.117c.61-6.485.934-13.053.934-19.698%200-114.863-93.13-208-208-208-7.95%200-15.792.462-23.512%201.33l-.27.03v.002C135.208%2060.41%2058.442%20138.2%2048.988%20235.687h-.003c-.072.748-.13%201.497-.195%202.246a205.782%20205.782%200%200%200-.353%204.743c-.026.418-.056.835-.08%201.254-.064%201.12-.116%202.245-.163%203.37-.01.282-.02.563-.032.844A211.116%20211.116%200%200%200%2048%20256c0%20114.863%2093.137%20208%20208%20208%202.627%200%205.24-.065%207.843-.162a227.567%20227.567%200%200%200%204.202-.193c.455-.025.907-.058%201.36-.086%201.604-.104%203.2-.223%204.795-.36.703-.062%201.41-.116%202.112-.185v-.004c97.494-9.45%20175.28-86.215%20186.326-183.228h.004c.016-.137.028-.275.044-.413zM446.666%20256c0%202.568-.067%205.122-.168%207.666a207.715%20207.715%200%200%201-30.614-3.664l6.11-19.056-15.232-4.884-6.488%2020.235a207.82%20207.82%200%200%201-22.442-7.638%20207.424%20207.424%200%200%201-14.625-6.605l11.518-17.003-13.247-8.974-12.36%2018.246c-12.24-7.35-23.702-15.977-34.304-25.812l14.73-14.73-11.313-11.313-14.73%2014.73c-9.554-10.298-17.963-21.41-25.174-33.255l18.487-12.522-8.972-13.246-17.323%2011.735a207.82%20207.82%200%200%201-7.174-15.74%20208.075%20208.075%200%200%201-7.327-21.352l20.812-6.673-4.885-15.234-19.71%206.32a207.82%20207.82%200%200%201-3.897-31.73c2.544-.1%205.097-.166%207.665-.166C361.133%2065.335%20446.666%20150.87%20446.666%20256zm-381.33%200c0-1.317.024-2.63.05-3.94a207.7%20207.7%200%200%201%2026.892%203.41l-7.115%2022.19%2015.235%204.886%207.5-23.39a208.056%20208.056%200%200%201%2022.738%207.72c5.175%202.1%2010.24%204.404%2015.197%206.896l-13.405%2019.79%2013.246%208.973%2014.22-20.992c12.037%207.28%2023.32%2015.793%2033.764%2025.483l-16.853%2016.853%2011.313%2011.313%2016.854-16.854c9.968%2010.743%2018.7%2022.368%2026.114%2034.795l-20.753%2014.058%208.972%2013.246%2019.473-13.19a208.258%20208.258%200%200%201%2014.363%2037.893l-22.83%207.32%204.883%2015.233%2021.53-6.903a207.698%20207.698%200%200%201%203.216%2025.822c-1.312.026-2.623.05-3.94.05-105.13%200-190.664-85.535-190.663-190.665zm210.557%20189.63a225.09%20225.09%200%200%200-3.86-29.747l24.1-7.727-4.883-15.232-22.896%207.34a222.73%20222.73%200%200%200-16.234-42.053l20.172-13.663-8.973-13.246-18.99%2012.863a223.836%20223.836%200%200%200-28.04-37.145l17.082-17.08-11.313-11.314-17.083%2017.08a223.96%20223.96%200%200%200-36.108-27.413l12.695-18.742-13.246-8.972-13.447%2019.85a222.682%20222.682%200%200%200-42.094-16.494l7.157-22.325-15.235-4.885-7.52%2023.452a224.982%20224.982%200%200%200-30.81-4.067c9.168-88.037%2078.492-158.454%20166.023-169.31a225.012%20225.012%200%200%200%204.543%2035.338l-25.935%208.316%204.885%2015.235%2024.903-7.985a222.673%20222.673%200%200%200%2016.387%2041.246l-22.322%2015.12%208.973%2013.247%2021.236-14.385c7.688%2012.528%2016.735%2024.455%2027.116%2035.59l-19.204%2019.204%2011.313%2011.314%2019.203-19.205a223.968%20223.968%200%200%200%2036.647%2027.746l-14.555%2021.486%2013.248%208.974%2015.328-22.628a222.64%20222.64%200%200%200%2041.23%2016.118l-8.168%2025.477%2015.232%204.884%208.525-26.59a225.095%20225.095%200%200%200%2034.223%204.31c-10.856%2087.53-81.273%20156.853-169.31%20166.022z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-baseball-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-baseball-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-baseball-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c-8.044%200-15.975.473-23.782%201.36C128.555%2061.167%2048%20149.18%2048%20256c0%20114.863%2093.137%20208%20208%20208%20106.827%200%20194.833-80.553%20206.638-184.218A210.028%20210.028%200%200%200%20464%20256c0-114.863-93.13-208-208-208zm3.94%20398.614a208.734%20208.734%200%200%200-3.21-25.804l-21.51%206.896-4.886-15.234%2022.812-7.314a207.982%20207.982%200%200%200-8.02-23.794%20207.873%20207.873%200%200%200-6.34-14.105l-19.465%2013.185-8.97-13.247%2020.743-14.054c-7.416-12.43-16.15-24.057-26.12-34.803l-16.85%2016.854-11.314-11.313%2016.85-16.85c-10.44-9.69-21.72-18.203-33.756-25.48l-14.216%2020.987-13.247-8.973%2013.404-19.788c-4.96-2.49-10.027-4.8-15.206-6.9a208.605%20208.605%200%200%200-22.725-7.717l-7.5%2023.39-15.236-4.884%207.115-22.192a207.708%20207.708%200%200%200-26.904-3.412c.11-5.373.438-10.695.984-15.953a225.56%20225.56%200%200%201%2030.827%204.067l7.517-23.454%2015.237%204.886-7.16%2022.327a222.766%20222.766%200%200%201%2042.09%2016.494l13.45-19.853%2013.248%208.973-12.7%2018.748a223.996%20223.996%200%200%201%2036.1%2027.41l17.082-17.08%2011.314%2011.313-17.083%2017.083a223.794%20223.794%200%200%201%2028.044%2037.15l18.998-12.868%208.973%2013.248-20.182%2013.67a222.582%20222.582%200%200%201%2016.232%2042.058l22.92-7.348%204.884%2015.236-24.122%207.734a225.322%20225.322%200%200%201%203.854%2029.727c-5.26.547-10.582.874-15.957.984zm151.02-171.32l-8.528%2026.603-15.236-4.885%208.174-25.493a222.824%20222.824%200%200%201-41.218-16.117l-15.335%2022.64-13.248-8.972%2014.563-21.498a223.98%20223.98%200%200%201-36.644-27.746l-19.206%2019.204-11.312-11.314%2019.202-19.203c-10.38-11.135-19.427-23.062-27.114-35.59l-21.248%2014.393-8.974-13.248%2022.335-15.127a222.717%20222.717%200%200%201-16.384-41.24l-24.92%207.99-4.884-15.237%2025.95-8.32a225.707%20225.707%200%200%201-4.52-35.338%20190.975%20190.975%200%200%201%2015.753-1.284c.506%2010.744%201.858%2021.335%203.97%2031.808l19.745-6.36%204.907%2015.213-20.79%206.66a208.37%20208.37%200%200%200%207.334%2021.347%20207.833%20207.833%200%200%200%207.174%2015.73l17.315-11.728%208.973%2013.245-18.477%2012.516c7.21%2011.847%2015.62%2022.958%2025.175%2033.255l14.73-14.73%2011.313%2011.312-14.732%2014.73c10.602%209.837%2022.062%2018.464%2034.302%2025.814l12.352-18.234%2013.248%208.973-11.512%2016.993a207.246%20207.246%200%200%200%2014.635%206.608%20208.012%20208.012%200%200%200%2022.422%207.632l6.484-20.22%2015.233%204.885L415.864%20260c10.116%201.984%2020.286%203.31%2030.626%203.824a191.86%20191.86%200%200%201-1.284%2015.768%20226.123%20226.123%200%200%201-34.245-4.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-baseball($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-baseball-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-basket-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20224v-96c0-35.2-28.8-64-64-64H176c-35.2%200-64%2028.8-64%2064v96H32l52.5%20194.3c4.7%2017%2020.4%2029.7%2039.1%2029.7h264.7c18.7%200%2034.4-12.5%2039.3-29.5L480%20224h-80zm59%2016h.1l-12.9%2048H368v-48h91zM70.2%20304H144v64H87.5l-17.3-64zm89.8%200h88v64h-88v-64zm192-16h-88v-48h88v48zm-104%200h-88v-48h88v48zm0%2096v48h-88v-48h88zm16%200h88v48h-88v-48zm0-16v-64h88v64h-88zm104-64h73.9l-17.2%2064H368v-64zM128%20128c0-12.8%205-24.8%2014.1-33.9C151.2%2085%20163.2%2080%20176%2080h160c12.8%200%2024.8%205%2033.9%2014.1%209.1%209.1%2014.1%2021.1%2014.1%2033.9v96H128v-96zm16%20112v48H65.9l-13-48H144zm-44%20174.1L91.8%20384H144v48h-20.4c-11%200-20.7-7.3-23.6-17.9zm312.3.1c-3.1%2010.5-12.9%2017.8-23.9%2017.8H368v-48h52.4l-8.1%2030.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-basket-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-basket-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-basket-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20224v-96c0-35.2-28.8-64-64-64H176c-35.2%200-64%2028.8-64%2064v96H32l52.5%20194.3c4.7%2017%2020.4%2029.7%2039.1%2029.7h264.7c18.7%200%2034.4-12.5%2039.3-29.5L480%20224h-80zm-272-96c0-12.8%205-24.8%2014.1-33.9C151.2%2085%20163.2%2080%20176%2080h160c12.8%200%2024.8%205%2033.9%2014.1%209.1%209.1%2014.1%2021.1%2014.1%2033.9v96H128v-96zm313.9%20176H368v64h56.7l-4.3%2016H368v48h-16v-48h-88v48h-16v-48h-88v48h-16v-48H91.8l-4.3-16H144v-64H70.2l-4.3-16H144v-48h16v48h88v-48h16v48h88v-48h16v48h78.2l-4.3%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20304h88v64h-88zM160%20304h88v64h-88z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-basket($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-basket-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-basketball-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.137%2048%2048%20141.136%2048%20256s93.137%20208%20208%20208c114.87%200%20208-93.138%20208-208S370.87%2048%20256%2048zm190.664%20208l-.002.145c-22.315-1.72-43.99-6.972-64.62-15.7a206.906%20206.906%200%200%201-49.48-29.633%20527.032%20527.032%200%200%200%2052.825-94.715c37.658%2034.853%2061.277%2084.67%2061.277%20139.903zm-74.058-150.74c-.28.677-.55%201.355-.835%202.03-13.907%2032.882-31.06%2063.955-51.285%2092.986a215.41%20215.41%200%200%201-4.563-4.413c-19.107-19.107-34.107-41.354-44.583-66.12-8.698-20.563-13.934-42.163-15.672-64.4.11%200%20.22-.005.332-.005%2043.884%200%2084.347%2014.91%20116.606%2039.923zm-132.93-39.216c4.43%2058.126%2031.043%20110.04%2071.39%20147.312a513.394%20513.394%200%200%201-30.32%2036.965c-47.553-50.03-104.814-90.745-168.766-119.13%2031.636-36.457%2076.853-60.815%20127.695-65.146zm41.01%20207.796c36.23%2040.67%2065.48%2086.438%2087.186%20136.453-25.4%2018.467-55.51%2030.83-88.162%2034.898-2.272-47.815-19.52-91.706-47.18-127.07a531.537%20531.537%200%200%200%2048.157-44.28zm-18.647-3.8a518.7%20518.7%200%200%201-39.78%2035.87c-38.736-42.886-93.83-70.707-155.45-73.636%204.07-32.646%2016.433-62.75%2034.897-88.146%2059.195%2025.688%20112.445%2061.947%20158.332%20107.833a523.63%20523.63%200%200%201%209.81%2010.09%20524.704%20524.704%200%200%201-7.81%207.99zM65.507%20248.23c25.238%201.145%2049.436%206.797%2071.45%2016.11%2024.767%2010.475%2047.013%2025.475%2066.12%2044.582a212.54%20212.54%200%200%201%206.584%206.895c-31.414%2023.915-65.427%2044.05-101.708%2060.182-26.632-32.795-42.618-74.563-42.618-120%200-2.604.068-5.19.172-7.77zm53.56%20140.296a527.776%20527.776%200%200%200%20100.913-60.52%20206.935%20206.935%200%200%201%2027.68%2047.036c9.615%2022.73%2015.014%2046.724%2016.115%2071.45-2.58.104-5.17.172-7.775.172-53.683%200-102.25-22.31-136.933-58.138zM380.81%20400.02c-22.49-50.67-52.72-97.14-89.19-137.908a530.62%20530.62%200%200%200%2031.555-38.336c34.17%2027.342%2076.52%2044.885%20122.8%2048.363-4.29%2050.918-28.664%2096.207-65.165%20127.88z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-basketball-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-basketball-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-basketball-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.137%2048%2048%20141.136%2048%20256s93.137%20208%20208%20208c114.87%200%20208-93.138%20208-208S370.87%2048%20256%2048zm124.797%20352.032a191.72%20191.72%200%200%201-12.942%2010.272c-21.704-50.015-50.938-95.795-87.168-136.465a530.98%20530.98%200%200%201-48.156%2044.28c27.66%2035.363%2044.917%2079.253%2047.19%20127.068a191.17%20191.17%200%200%201-15.944%201.303c-1.103-24.726-6.5-48.72-16.114-71.45a206.935%20206.935%200%200%200-27.68-47.036%20527.798%20527.798%200%200%201-100.91%2060.526A192.37%20192.37%200%200%201%20107.957%20376c36.28-16.133%2070.29-36.27%20101.705-60.185a212.54%20212.54%200%200%200-6.584-6.895c-19.107-19.107-41.354-34.107-66.12-44.583-22.015-9.312-46.212-14.964-71.45-16.108.217-5.38.648-10.704%201.303-15.96%2061.62%202.93%20116.714%2030.753%20155.45%2073.638a518.323%20518.323%200%200%200%2039.78-35.87%20529.307%20529.307%200%200%200%207.81-7.988c-3.222-3.4-6.488-6.767-9.81-10.09-45.888-45.886-99.138-82.145-158.333-107.832a191.982%20191.982%200%200%201%2010.272-12.94c63.95%2028.388%20121.21%2069.102%20168.766%20119.133a513.127%20513.127%200%200%200%2030.32-36.964c-40.348-37.27-66.957-89.188-71.39-147.312%205.274-.45%2010.605-.692%2015.99-.702%201.74%2022.238%206.975%2043.838%2015.672%2064.4%2010.476%2024.768%2025.476%2047.014%2044.583%2066.12%201.5%201.5%203.026%202.966%204.563%204.414%2020.226-29.03%2037.38-60.104%2051.287-92.987.285-.675.555-1.354.835-2.03%204.42%203.427%208.68%207.043%2012.78%2010.836a527.127%20527.127%200%200%201-52.823%2094.716%20206.91%20206.91%200%200%200%2049.48%2029.635c20.63%208.727%2042.304%2013.978%2064.62%2015.698a191.785%20191.785%200%200%201-.69%2015.99c-46.277-3.478-88.63-21.017-122.8-48.358a530.62%20530.62%200%200%201-31.556%2038.336c36.475%2040.77%2066.69%2087.247%2089.18%20137.92z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-basketball($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-basketball-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-battery-charging-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20144H80c-17.6%200-32%2014.4-32%2032v160c0%2017.6%2014.4%2032%2032%2032h304c17.6%200%2032-14.4%2032-32V176c0-17.6-14.4-32-32-32zm16%20192c0%208.8-7.2%2016-16%2016H80c-8.8%200-16-7.2-16-16V176c0-8.8%207.2-16%2016-16h304c8.8%200%2016%207.2%2016%2016v160z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M370%20176H94c-8.8%200-14%205.2-14%2014v132c0%208.8%205.2%2014%2014%2014h276c8.8%200%2014-5.2%2014-14V190c0-8.8-5.2-14-14-14zM218.8%20308l8.4-43H200l45.2-61-8.4%2043H264l-45.2%2061zM432%20200.6v110.8c19.1-11.1%2032-31.7%2032-55.4s-12.9-44.3-32-55.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-battery-charging($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-battery-charging-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-battery-dead-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20144H80c-17.6%200-32%2014.4-32%2032v160c0%2017.6%2014.4%2032%2032%2032h304c17.6%200%2032-14.4%2032-32V176c0-17.6-14.4-32-32-32zm16%20192c0%208.8-7.2%2016-16%2016H80c-8.8%200-16-7.2-16-16V176c0-8.8%207.2-16%2016-16h304c8.8%200%2016%207.2%2016%2016v160zM432%20200.6v110.8c19.1-11.1%2032-31.7%2032-55.4s-12.9-44.3-32-55.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-battery-dead($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-battery-dead-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-battery-full-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20144H80c-17.6%200-32%2014.4-32%2032v160c0%2017.6%2014.4%2032%2032%2032h304c17.6%200%2032-14.4%2032-32V176c0-17.6-14.4-32-32-32zm16%20192c0%208.8-7.2%2016-16%2016H80c-8.8%200-16-7.2-16-16V176c0-8.8%207.2-16%2016-16h304c8.8%200%2016%207.2%2016%2016v160z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M370%20176H94c-8.8%200-14%205.2-14%2014v132c0%208.8%205.2%2014%2014%2014h276c8.8%200%2014-5.2%2014-14V190c0-8.8-5.2-14-14-14zM432%20200.6v110.8c19.1-11.1%2032-31.7%2032-55.4s-12.9-44.3-32-55.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-battery-full($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-battery-full-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-beaker-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M445.2%2048H128.4C74.1%2048%2064%2075.9%2064%2088.2c30.3%204.2%2032%204.2%2032%2036.2v275.5c0%2035.3%2028.8%2064%2064.2%2064H368c35.4%200%2063-29.2%2063-64.5V89.2c2-17.5%2012.5-31.6%2013.6-33.3%201.2-1.9%203.4-4.4%203.4-5.5%200-1.2-.3-2.4-2.8-2.4zM415%2089.3v310.2c0%2013-4.7%2024.4-13.7%2033.7-9%209.3-20.5%2014.8-33.2%2014.8h-208c-26.4%200-48.1-21.9-48.1-48.5v-275c0-16.7.3-30.8-8.3-40.4-4.3-4.8-10.6-6.3-17.3-8.2%205.7-5%2017.7-12%2042.1-12h293.6c0%20.1-7.1%206.4-7.1%2025.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M383%20176v208c0%2010.2-1.8%2018-5.5%2021.9-5.7%205.8-13.8%2010.2-20.1%2010.2h-187c-8.8%200-15.4-2.7-19.5-7.9-4.4-5.4-6.9-14.3-6.9-25.1V176h239m16-16H128v223c0%2028.3%2013.7%2049%2042.4%2049h187c11.4%200%2023.4-6.7%2031.5-15%208.1-8.4%2010.1-21.3%2010.1-33V160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-beaker-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-beaker-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-beaker-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M170.4%20416h187c6.3%200%2014.4-4.3%2020.1-10.2%203.8-3.9%205.5-11.6%205.5-21.9V176H144v207c0%2010.8%202.6%2019.7%206.9%2025.1%204.1%205.2%2010.7%207.9%2019.5%207.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M445.2%2048H128.5C74.1%2048%2064%2075.9%2064%2088.2c30.3%204.2%2032%204.2%2032%2036.2v275.5c0%2035.3%2028.9%2064%2064.2%2064H368c35.4%200%2063-29.2%2063-64.5V89.2c2-17.5%2012.5-31.6%2013.6-33.3%201.2-1.9%203.4-4.4%203.4-5.5%200-1.2-.3-2.4-2.8-2.4zM399%20384c0%2011.7-1.9%2024.6-10.1%2033-8.1%208.3-20.2%2015-31.5%2015h-187c-28.7%200-42.4-20.7-42.4-49V160h271v224z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-beaker($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-beaker-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-beer-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M383.7%20118.3c0-20.8-17.2-38.3-38.1-38.3l-10.5-.7c-6-27-32-47.3-59.1-47.3s-41.1%2011.6-51.7%2028.9c-8.5-9.8-21.1-15.4-35.2-15.4-18.3%200-34.1%2011.5-41.7%2026.5H123c-25%200-43%2019.6-43%2045.4v4c0%2028.8%2016%2020.9%2016%2039.8V268c0%2013.4-11.2%2019.3-11.2%2035.2%200%208.8%208%2016.8%2016.8%2016.8H112V144h272s-.3-4.9-.3-25.7zm-16.1%209.7H111.2h-10.8c-3%200-4.4-3.8-4.4-6.6v-4c0-8.9%203.4-16.4%208.2-21.9%204.6-5.3%2011.4-7.5%2018.8-7.5h34.5l4.3-9.6c5-10.5%2015.4-17.2%2027.3-17.2%209%200%2018.5%205.1%2026.2%2011.1l10.7%209.3%208-10c11.3-15%2026.4-23.8%2042.1-23.8%2010.3%200%2020%203.4%2028%209.9%207.8%206.3%2013.3%2015.1%2015.4%2024.8l2.6%2011.8s9.4-.4%2023.5%201.6%2022.1%2010.4%2022.1%2022.4l-.1%209.7z%22%2F%3E%3Ccircle%20cx%3D%22288%22%20cy%3D%22224%22%20r%3D%2220%22%2F%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22272%22%20r%3D%2216%22%2F%3E%3Ccircle%20cx%3D%22276%22%20cy%3D%22352%22%20r%3D%2212%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20464h304v16H96zM416%20208h-48v-48H128v272l-16%2016h272l-16-16v-64h48c8.8%200%2016-7.2%2016-16V224c0-8.8-7.2-16-16-16zm-64%20224H144V176h208v256zm64-80h-48V224h48v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-beer-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-beer-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-beer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M112%20320V144h272s-.3-4.9-.3-25.7S366.5%2080%20345.6%2080l-10.5-.7c-6-27-32-47.3-59.1-47.3s-41.1%2011.6-51.7%2028.9c-8.5-9.8-21.1-15.4-35.2-15.4-18.3%200-34.1%2011.5-41.7%2026.5H123c-25%200-43%2019.6-43%2045.4v4c0%2028.8%2016%2020.9%2016%2039.8V268c0%2013.4-11.2%2019.3-11.2%2035.2%200%208.8%208%2016.8%2016.8%2016.8H112z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20208h-48v-48H128v272l-32%2032v16h304v-16l-32-32v-64h48c8.8%200%2016-7.2%2016-16V224c0-8.8-7.2-16-16-16zm-128-4c11%200%2020%209%2020%2020s-9%2020-20%2020-20-9-20-20%209-20%2020-20zm0%20148c0%206.6-5.4%2012-12%2012s-12-5.4-12-12%205.4-12%2012-12%2012%205.4%2012%2012zm-32-96c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016-16-7.2-16-16%207.2-16%2016-16zm160%2096h-48V224h48v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-beer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-beer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bicycle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M125.3%20261.3c-51.3%200-93.3%2042-93.3%2093.3C32%20406%2074%20448%20125.3%20448s93.3-42%2093.3-93.3c.1-51.4-41.9-93.4-93.3-93.4zm54.6%20148c-14.7%2014.7-34%2022.7-54.6%2022.7s-39.9-8.1-54.6-22.7S48%20375.2%2048%20354.7c0-20.6%208.1-39.9%2022.7-54.6%2014.7-14.7%2034-22.7%2054.6-22.7s39.9%208.1%2054.6%2022.7c14.7%2014.7%2022.7%2034%2022.7%2054.6.1%2020.5-8%2039.9-22.7%2054.6zM319.8%20127.8c17.8%200%2032-14.2%2032-32S337.8%2064%20320%2064s-32.2%2014-32.2%2031.8%2014.3%2032%2032%2032zM386.7%20261.3c-51.3%200-93.3%2042-93.3%2093.3s42%2093.3%2093.3%2093.3%2093.3-42%2093.3-93.3-42-93.3-93.3-93.3zm54.6%20148c-14.7%2014.7-34%2022.7-54.6%2022.7s-39.9-8.1-54.6-22.7c-14.7-14.7-22.7-34-22.7-54.6s8.1-39.9%2022.7-54.6c14.7-14.7%2034-22.7%2054.6-22.7s39.9%208.1%2054.6%2022.7c14.7%2014.7%2022.7%2034%2022.7%2054.6%200%2020.5-8.1%2039.9-22.7%2054.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20192h-48l-29.5-60.1c-5.6-9.3-15.9-15.9-27.1-15.9-8.4%200-16.8%203.7-22.4%209.3l-71.7%2069.1c-5.6%205.6-9.3%2014-9.3%2022.4%200%2017.4%2012.6%2023.6%2018.5%2027.1C224%20270.1%20240%20273%20240%20286.1V352c0%208.8%207.2%2016%2016%2016s16-7.2%2016-16v-90c0-13.2-30.4-24-48.3-38l48.9-51.5c18.7%2028.5%2027.3%2051.5%2038%2051.5H368c8.8%200%2016-7.2%2016-16s-7.2-16-16-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bicycle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bicycle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bluetooth-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M286%20256l98-87L255.8%2032H240v180l-89.4-77-22.6%2025%20112%2096-112%2096%2022.6%2025.8L240%20299v181h15.8l.2-.4L384%20344l-98-88zm51.8%2088.5L272%20415V287.2l65.8%2057.3zM272%20225.6V97.1l65.8%2071.2-65.8%2057.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bluetooth($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bluetooth-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-boat-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20447.8c-29.6%200-69.9-6.7-96-15.8%200%200-35%2022.5-80%2032%2032.3%200%2053.3-9%2080-16%2023%209%2066.7%2015.8%2096%2015.8%2029.3%200%2074-5.8%2096-15.8%2026.7%207%2047%2016%2080%2016-43.8-9.5-80-32-80-32-26.1%209.1-66.4%2015.8-96%2015.8zM445.5%20263l-30.7-14.1-23-121.9v-.1C386.3%20100.3%20374.4%2080%20352%2080h-34.6l-8.2-32H202.5l-8.1%2032H160c-22.9%200-35.1%2020.7-39.8%2047l-23%20121.9L66.5%20263c-6.2%202.9-10.5%209.1-10.5%2016.4%200%202.4.5%204.6%201.3%206.7L112%20432c27.5%200%2056.7-19%2056.7-19%2019.9%2010%2060.8%2018.8%2087.3%2018.8s67.4-8.8%2087.3-18.8c0%200%2029.2%2019%2056.7%2019l54.7-145.9c.8-2.1%201.3-4.3%201.3-6.7%200-7.3-4.3-13.5-10.5-16.4zM214.9%2064h81.8l4.1%2016h-90l4.1-16zm-79%2065.9C139.7%20108.9%20147%2096%20160%2096h192c12.8%200%2019.7%2012.8%2024.1%2034.1L397%20240.7%20360.6%20224h.2c8.9%200%2016.8-4.6%2015.1-16l-15.1-80c-3-11-7.2-16-16.1-16H167.4c-8.9%200-13.6%205.3-16.1%2016l-15.1%2080c-1.3%208%206.2%2016%2015.1%2016h.2L115%20240.7l20.9-110.8zM256%20176l-69.7%2032h-33.8l14.5-76.6c.4-1.6.8-2.7%201.1-3.4h175.8c.3.7.8%201.9%201.3%203.7l14.4%2076.3h-33.8L256%20176zm-88.3%20218.6l-7.7%205c-5.7%203.7-21.2%2012-36.7%2015.2L72%20279.4c0-1.1.8-1.6%201.1-1.8L248%20195.7v219.8c-24-1.5-56.2-8.8-72.1-16.8l-8.2-4.1zm221%2020.2c-15.5-3.2-31-11.5-36.7-15.2l-7.7-5-8.2%204.1c-15.9%208-48.2%2015.4-72.1%2016.8V195.7l174.9%2081.9c.3.2%201.1.7%201.1%201.8l-51.3%20135.4z%22%2F%3E%3Cellipse%20cx%3D%22300%22%20cy%3D%22266%22%20rx%3D%2212%22%20ry%3D%2222%22%2F%3E%3Cellipse%20cx%3D%22212%22%20cy%3D%22266%22%20rx%3D%2212%22%20ry%3D%2222%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-boat-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-boat-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-boat-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20432c-26.1%209.1-66.4%2015.8-96%2015.8-29.6%200-69.9-6.7-96-15.8%200%200-35%2022.5-80%2032%2032.3%200%2053.3-9%2080-16%2023%209%2066.7%2015.8%2096%2015.8%2029.3%200%2074-5.8%2096-15.8%2026.7%207%2047%2016%2080%2016-43.8-9.5-80-32-80-32zM445.5%20263L256%20176%2066.5%20263c-6.2%202.9-10.5%209.1-10.5%2016.4%200%202.4.5%204.6%201.3%206.7L112%20432c27.5%200%2056.7-19%2056.7-19%2018%209%2053.1%2017.1%2079.3%2018.6%202.8.2%205.5.2%208%20.2s5.2-.1%208-.2c26.2-1.5%2061.3-9.5%2079.3-18.6%200%200%2029.2%2019%2056.7%2019l54.7-145.9c.8-2.1%201.3-4.3%201.3-6.7%200-7.3-4.3-13.5-10.5-16.4zM212%20288c-6.6%200-12-9.8-12-22s5.4-22%2012-22%2012%209.8%2012%2022-5.4%2022-12%2022zm88%200c-6.6%200-12-9.8-12-22s5.4-22%2012-22%2012%209.8%2012%2022-5.4%2022-12%2022z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M391.9%20127v-.1C386.3%20100.3%20374.4%2080%20352%2080h-34.6l-8.2-32H202.5l-8.1%2032H160c-22.9%200-35.1%2020.7-39.8%2047l-19.7%20104.4%2034.2-15.7%2016.6-87.7c2.5-10.7%207.3-16%2016.1-16h177.1c8.9%200%2013.1%205%2016.1%2016l16.6%2087.7%2034.3%2015.7L391.9%20127z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-boat($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-boat-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-body-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2047.96c17.645%200%2032%2014.35%2032%2031.99s-14.355%2031.99-32%2031.99-32-14.35-32-31.99%2014.355-31.99%2032-31.99m0-15.996c-26.51%200-48%2021.483-48%2047.986%200%2026.502%2021.49%2047.985%2048%2047.985s48-21.483%2048-47.985c0-26.503-21.49-47.986-48-47.986zM424%20144H88c-13.255%200-24%2010.747-24%2024s10.745%2024%2024%2024h100.45c5.55%200%2013.198%204.295%2017.217%2014.708%204.65%2012.055%202.37%2033.33-.54%2051.444l-3.922%2021.26c-.02.104-.205.1-.205.203l-32.23%20172.238c-2.302%2013.05%206.488%2025.494%2019.54%2027.797a24.52%2024.52%200%200%200%204.22.367c11.356%200%2020.916-8.19%2022.97-19.836L236%20340.243v.166S243.25%20309%20255.452%20309h1.096C269%20309%20274%20340.408%20274%20340.408v-.082l21.483%20119.895c2.052%2011.643%2012.33%2019.816%2023.763%2019.816%201.387%200%202.855-.12%204.268-.368%2013.053-2.303%2021.82-14.76%2019.52-27.81l-32.35-172.252c-.002-.008.01-.02.01-.027-.02-.105-.033-.218-.053-.323l-3.77-21.41c-2.91-18.12-5.188-39.084-.538-51.138C310.352%20196.294%20318.5%20192%20323.55%20192H424c13.255%200%2024-10.747%2024-24s-10.745-24-24-24zM88%20176.113c-4.41%200-8-3.646-8-8.057%200-4.41%203.59-8.057%208-8.057h336c4.41%200%208%203.59%208%208s-3.59%208-8%208H322.5c-15.538%200-27.438%2014.737-30.982%2023.92-4.846%2012.558-5.004%2031.943-.388%2060.69l-.01.103.007.11%203.367%2019.138.562%203.242%2032.252%20171.628c.5%202.834-.62%204.96-1.332%205.977-.713%201.017-2.335%202.8-5.18%203.3a8.324%208.324%200%200%201-1.426.127c-3.893%200-7.207-2.64-7.883-6.472L290.255%20338h-.015c-.27-2-1.828-10.05-5.022-18.77-2.278-6.218-4.844-11.035-7.844-15.006-7.09-9.388-15.24-11.224-20.826-11.224h-1.096c-5.47%200-13.503%201.73-20.71%2010.938-3.05%203.896-5.73%208.67-8.19%2014.802-3.628%209.037-5.505%2017.654-5.708%2018.613l-.11.37-20.728%20119.9c-.693%203.885-3.75%206.595-7.44%206.595-.46%200-.933-.043-1.404-.127-2.84-.5-4.455-2.274-5.165-3.287a7.96%207.96%200%200%201-1.323-5.975l32.257-171.562.005-.02.174-.926%203.774-21.33.022-.125.02-.126c4.63-28.83%204.528-48.3-.33-60.892-3.544-9.18-13.577-23.737-31.76-23.737%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-body-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-body-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-body-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%2279.838%22%20r%3D%2248%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M424%20144H88c-13.255%200-24%2010.745-24%2024s10.745%2024%2024%2024h98.45c5.58%201%2013.198%203.837%2017.217%2014.252%204.65%2012.056%202.37%2033.606-.54%2051.727l-3.774%2021.394c-.02.104-.04.207-.058.31l-.004.02-30.374%20172.27c-2.303%2013.052%206.414%2025.5%2019.467%2027.802%2013.055%202.3%2025.333-6.416%2027.634-19.47L237%20340.347v.167S243.25%20308%20255.452%20308h1.096C269%20308%20275%20340.515%20275%20340.515v-.083l20.983%20119.913c2.3%2013.055%2014.663%2021.75%2027.718%2019.448%2013.054-2.303%2021.73-14.762%2019.426-27.814L312.73%20279.702c-.002-.008-.013-.02-.015-.027-.02-.104-.044-.217-.063-.322l-3.777-21.414c-2.91-18.12-5.19-39.63-.54-51.688C312.354%20195.838%20319.97%20193%20325.548%20192H424c13.255%200%2024-10.745%2024-24s-10.745-24-24-24z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-body($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-body-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bonfire-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255%20352.1l.1.8.2.9%2015%2075%20.1.5.1.5c.4%201.4.6%202.8.6%204.2%200%209.6-8.3%2014-16%2014-4.7%200-8.9-1.5-11.8-4.2-2.8-2.5-4.2-5.8-4.2-9.8%200-1.2.1-2.3.4-3.5v-.4l15.5-78m0-16.1c-7.6%200-14%205.4-15.6%2012.5L223.8%20427c-.5%202.3-.8%204.6-.8%207%200%2017.7%2014.3%2030%2032%2030s32-12.3%2032-30c0-2.9-.4-5.7-1.1-8.4l-15-75c-.7-8.2-7.5-14.6-15.9-14.6zM333%20365.1l41.3%2030.1.7.5.7.4c.3.2%201.1.9%201.7%201.4.4.4.9.7%201.3%201.1.4.3%201.1%201.7%201.3%203.8.1%202.8-.8%205.6-2.4%207.2-1.4%201.4-3.8%202.3-6.4%202.3-2.6%200-4.3-.9-4.8-1.4-.2-.3-.5-.6-.7-.9-.5-.5-1.1-1.2-1.2-1.5l-.3-.4-.3-.4-30.9-42.2m-17.1-29c-3%200-5.9%201.2-8.3%203.6-4.1%204.1-4.7%2010.4-1.7%2015.4l45%2061.8c.9%201.5%202.2%202.8%203.4%204.2%204%204.6%2010.3%207%2016.9%207%206.4%200%2013-2.3%2017.7-7%209.6-9.6%209.4-27%200-34.7-1.7-1.4-3.3-2.9-5.1-3.9L324.2%20339c-2.8-2-5.6-2.9-8.3-2.9zM178.9%20365.2l-30.6%2042-.3.4-.3.4c-.3.5-.7%201-1.2%201.5-1.6%201.6-3.7%202.5-6%202.5s-4.4-.9-6-2.5c-3.3-3.3-3.3-8.7%200-12%20.5-.5%201.1-1%201.8-1.4l.7-.4.7-.5%2041.2-30m16.7-29.2c-2.8%200-5.5.9-7.7%202.8l-59.6%2043.4c-1.8%201.1-3.6%202.4-5.1%203.9-9.6%209.6-9.6%2025.1%200%2034.7%204.8%204.8%2011%207.2%2017.3%207.2%206.3%200%2012.5-2.4%2017.3-7.2%201.3-1.3%202.4-2.7%203.4-4.2l45-61.6c3-5%202.5-11.2-1.7-15.3-2.5-2.5-5.7-3.7-8.9-3.7zM279.3%2068c9.3%203.4%2020.5%209%2030.8%2016.6%2014.9%2010.9%2032.6%2029.2%2032.6%2054%200%2014.1-2.4%2024.7-7.9%2034.3-6.5%2011.6-18%2022.6-35.2%2033.8-7.3%204.8-15.6%209.4-24.4%2014.4-29.8%2016.8-66%2037.1-84.7%2075.5-2.9-2.2-5.9-5-8.9-8.2-13.5-14.9-18.6-34-15.2-56.7%203.8-24.8%2026.2-45.7%2049.9-67.8%2028.2-25.9%2059.4-54.9%2063-95.9m-16.6-20c12%2080.8-101.7%20113-112%20181.3-10.3%2068.3%2048%2090.7%2048%2090.7%2016.3-56.6%2072.4-75.6%20109.7-99.8%2040.7-26.4%2050.3-51.3%2050.3-81.5%200-57.6-72.3-90.7-96-90.7zM355.7%20196.1c-3.3%206.3-7.3%2012.2-12.5%2017.9%200%200%201.4%2011.1%202%2020.4s-.7%2017.1-1.7%2020c-6.5%2019-15.1%2032.1-26.4%2039.8-9.8%206.7-22%209.8-38.5%209.8-6.4%200-16.4-3.9-24.2-10.9s-11.1-11.2-11.1-11.2c-4.1%203.5-7.5%206.5-11.1%2010.5%2011.3%2016.4%2031.3%2027.7%2046.3%2027.7%2036%200%2064-13.5%2080-60.4%205.3-14.9%202.2-49.4-2.8-63.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M187.1%2077.9c-1.5%200-2.9.1-4.3.3%202.3%2028.6-30%2044-32%2064.8-1.2%2012.6%205.5%2025%2011%2028.8%203.8-4.8%2010.7-11.9%2010.7-11.9-4.5-3.7-6.7-12.7-5.5-16.8s6-9.9%2010.6-15.5c6.7-8.2%2015.2-18.5%2019.1-31.6%201.3.6%202.6%201.2%203.8%202%202.9%201.7%206.8%203.9%209.7%207.4s5.8%206.9%208.4%2011.5c0%200%206.3-7.9%208.8-12.6-9.6-18.1-26.9-26.4-40.3-26.4zM137.7%20335.2l-60.5%2012.6c-5.8%201.2-11.6-2.3-12.9-7.9-1.3-5.6%202.4-11.1%208.3-12.3.3-.1.7-.1%201-.2l61.5-7.3c4.4-.5%208.4%202.5%209%206.7.4%203.9-2.4%207.5-6.4%208.4zM374.3%20335.2l60.5%2012.6c5.8%201.2%2011.6-2.3%2012.9-7.9%201.3-5.6-2.4-11.1-8.3-12.3-.3-.1-.7-.1-1-.2l-61.5-7.3c-4.4-.5-8.4%202.5-9%206.7-.4%203.9%202.4%207.5%206.4%208.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bonfire-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bonfire-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bonfire-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M270.9%20350.6c-.7-8.2-7.6-14.6-15.9-14.6-7.6%200-14%205.4-15.6%2012.5L223.8%20427c-.5%202.3-.8%204.6-.8%207%200%2017.7%2014.3%2030%2032%2030s32-12.3%2032-30c0-2.9-.4-5.7-1.1-8.4l-15-75zM305.9%20355zM388.9%20386.3c-1.7-1.4-3.3-2.9-5.1-3.9l-59.6-43.5c-5.8-3.8-12-3.7-16.5.9-4.1%204.1-4.7%2010.4-1.7%2015.4l45%2061.8c.9%201.5%202.2%202.8%203.4%204.2%207.8%209.1%2025.1%209.6%2034.6%200%209.4-9.8%209.3-27.2-.1-34.9zM372.5%20335zM435.4%20320h-59.5c-3.9%200-7.4%202.2-8.1%206.2-.6%203.6%201.3%207.1%204.7%208.8h.1l57.7%2017.8c8.3%201.9%2017.7-5.5%2017.7-14.8%200-11.8-4.8-18-12.6-18zM139.2%20335zM139.2%20335c3.3-1.6%205.3-5.2%204.7-8.8-.7-4-3.9-6.2-8.1-6.2H76.3c-7.6%200-12.3%208.3-12.3%2017.6s9.1%2017.1%2017.4%2015.2l57.7-17.8h.1zM187.9%20338.8l-59.6%2043.4c-1.8%201.1-3.6%202.4-5.1%203.9-9.6%209.6-9.6%2025.1%200%2034.6%209.6%209.6%2025.1%209.6%2034.6%200%201.3-1.3%202.4-2.7%203.4-4.2l45-61.6c3-5%202.5-11.2-1.7-15.3-4.6-4.5-11.8-4.8-16.6-.8zM358.7%20138.7c0-57.6-72.4-90.7-96-90.7%2012%2080.8-101.7%20113-112%20181.3s48%2090.7%2048%2090.7c16.3-56.6%2072.4-75.6%20109.7-99.8%2040.7-26.4%2050.3-51.3%2050.3-81.5zM358.7%20259.6c5-14.7%201.9-49.3-3-63.4-9%2017.5-26.3%2032.4-47.2%2046-8.6%205.6-20.9%2010.8-29.8%2015.9-18.7%2010.5-34%2020.6-46.3%2034.4%2011.3%2016.4%2031.3%2027.7%2046.3%2027.7%2036-.2%2064-13.7%2080-60.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M161.8%20171.9c11.7-15.1%2024.9-23.8%2038.2-36.2%2013.4-12.5%2022.1-21.2%2027.5-31.3-10.7-20.1-30.8-28.1-44.7-26.1%202.3%2028.6-30%2044-32%2064.8-1.3%2012.6%205.4%2025%2011%2028.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bonfire($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bonfire-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-book-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M347.62%2064c-40.94%200-79.12%2014-91.577%2044.495C242.5%2078%20205.408%2064%20164.466%2064%20109.266%2064%2064%2089.98%2064%20143v283h22.14c12.86-26.334%2044.238-42%2078.325-42%2040.224%200%2073.877%2027.528%2081.617%2064h19.714c7.74-36.472%2041.495-64%2081.722-64%2034.085%200%2061.15%2011.666%2078.43%2042H448V143c0-53.02-45.177-79-100.38-79zM248%20410.926C230%20385.056%20199.27%20368%20164.5%20368S100%20378.055%2081%20403.926l-1%20.537V141c3-41.825%2040.09-61%2084.293-61%2045.162%200%2082.145%2018.708%2083.363%2061.808-.017.73.016%201.46.016%202.192l.328%2013.103v253.823zM432%20148v255.926C414%20378.056%20382.27%20368%20347.5%20368S282%20385.055%20264%20410.926V144c0-44.112%2037.66-64%2083.587-64C391.79%2080%20429%2091.175%20432%20133v15z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-book-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-book-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-book-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M164.466%2064C109.266%2064%2064%2089.98%2064%20143v283H86.14c12.86-26.334%2044.24-42%2078.326-42%2040.224%200%2073.877%2027.528%2081.616%2064H248V95.346C230.76%2073.95%20198.98%2064%20164.466%2064zM347.62%2064c-34.33%200-66.712%209.85-83.62%2031.01V448h1.797c7.74-36.472%2041.495-64%2081.722-64%2034.084%200%2061.148%2011.666%2078.428%2042H448V143c0-53.02-45.177-79-100.38-79z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-book($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-book-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bookmark-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%2048v416l128-96.4L384%20464V48H128zm240%20384l-112-84.3L144%20432V64h224v368z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bookmark-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bookmark-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bookmark-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%2048v416l128-96.4L384%20464V48H128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bookmark($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bookmark-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bookmarks-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%2064H281.6c-10.3%200-19.3%204.6-25.6%2011.7-6.2-7.2-15.3-11.7-25.6-11.7H80c-18.8%200-33%2013.3-33%2032v286.1c0%2018.8%2014.2%2033.9%2033%2033.9h143.3c13.8%200%2024.7%204.2%2024.7%2019.4V448h16v-12.6c0-15.3%2010.9-19.4%2024.7-19.4H432c18.8%200%2033-15.1%2033-33.9V96c0-18.7-14.2-32-33-32zM248%20411.1c-4.7-7.8-13.5-11.1-23.8-11.1H80c-9.4%200-16-8.5-16-17.9V96c0-9.4%206.6-16%2016-16h143.3c12.8%200%2024.7%2012.8%2024.7%2022.2v308.9zM320%2080h64v100.4l-22.9-14.5-9.1-6.4-9.1%206.4-22.9%2014.5V80zm128%20302.1c0%209.4-6.6%2017.9-16%2017.9H287.8c-10.3%200-19.1%202.3-23.8%2011.1V102.2c0-9.4%2011.9-22.2%2024.7-22.2H304v131l48-32%2048%2032V80h32c9.4%200%2016%206.7%2016%2016v286.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bookmarks-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bookmarks-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bookmarks-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M342.9%20165.4l9.1-6.4%209.1%206.4%2022.9%2014.5V64h-64v115.9l22.9-14.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%2064h-32v146.5l-48-32-48%2032V64h-22.4c-8.1%200-17.6%207.2-17.6%2015v329l-8%205.5-8-5.5V79c0-7-9.2-15-17.6-15H80c-18.8%200-33%2013.3-33%2032v286.1c0%2018.8%2014.2%2033.9%2033%2033.9h143.3c13.8%200%2024.7%204.2%2024.7%2019.4V448h16v-12.6c0-15.3%2010.9-19.4%2024.7-19.4H432c18.8%200%2033-15.1%2033-33.9V96c0-18.7-14.2-32-33-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bookmarks($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bookmarks-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bowtie-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M267.2%20202c-7%200-14.9%201.3-23.3%202.9-11.9%202.3-20%207.1-20%207.1s3.5%2027.3%200%2058.5-8%2042.5-8%2042.5%205.2%2012.1%2040%2015c3.9.3%207.6.5%2011%20.5%2024.5%200%2036.4-7.3%2036.4-7.3s3.6-5.4%204.6-22.2c1.9-32.1-6.7-68.4-16.5-85.5-4.8-8.6-13.4-11.5-24.2-11.5zm24.7%2096c-.3%205.1-.9%208.7-1.4%2011.1-4.5%201.5-12.3%203.3-23.6%203.3-3.1%200-6.4-.1-9.7-.4-11.9-1-19-3.1-23.1-4.8%201.7-7.4%203.9-18.8%205.7-34.9%202.2-20.1%201.8-38.5%201.1-50%201.8-.6%203.9-1.1%206.1-1.5%206.1-1.2%2013.8-2.5%2020.2-2.5%208.4%200%209.7%202.2%2010.3%203.3%204.1%207.1%208.1%2019.3%2010.9%2032.4%203.1%2014.9%204.3%2030.6%203.5%2044zM84.4%20112C57.9%20112%2032%20180.5%2032%20256s23%20144%2051.5%20144c33.4%200%20116.5-80%20116.5-80s5.7-12.6%209.9-33.6l1.8-10.4c.7-4.7%201.3-9.7%201.7-15%20.3-3.5.5-6.8.6-9.9l.3-9.8c.8-16-2.5-32.6-2.5-32.6-22.1-40.2-92.3-96.7-127.4-96.7zm59.8%20235.5C100.9%20382.2%2086.1%20384%2083.5%20384c-3.2%200-12.6-8.1-21.3-33-9-25.7-14.2-60.3-14.2-95%200-33%205.3-66.9%2014.6-92.9%209.9-27.7%2019.8-34.8%2021.8-35.1%203.3%200%2011%201%2024.5%207.8%2010.6%205.3%2022.4%2012.9%2034.3%2022.2%2023.1%2017.9%2043.3%2039.3%2053.2%2056.3.7%204.1%201.9%2013.1%201.9%2022.2-8.1-3.5-20.9-7.9-38.7-11.4-28-5.5-42.4-3.1-43-3-.9.2-1.6%201-1.7%201.9%200%201%20.7%201.8%201.6%202%20.2%200%2018.8%203.8%2056.9%2016.9%208.5%202.9%2014.3%205%2019%206.7%202%20.7%203.7%201.3%205.4%201.9-.1%202.8-.3%205.5-.5%208.3-.4%204.5-.9%209.2-1.5%2013.7l-.5%202.8c-5.5%202-13.1%204.5-21.7%206.8-17%204.5-38%2010-38%2010-1%20.3-1.6%201.2-1.5%202.3.2%201%201.1%201.7%202.1%201.7%201.6-.1%2035.4-2.7%2056.3-6.8-2.3%209.8-4.8%2017-6.2%2020.6-5.9%205.6-22.8%2021.2-42.1%2036.6zM427.6%20112c-36.4%200-102.4%2056.5-124.3%2096.8l-.8%201.4s1.4%202.5%201.9%203.4c3.4%206%206.7%2014.3%209.4%2024l2.9%2011.7c2.2%2010.2%203.7%2021.2%204.2%2032.2l.2%209c0%202.9-.1%205.7-.3%208.5-1%2016.7-4.6%2022.1-4.6%2022.1%207.6%2010.5%2075%2078.9%20112.2%2078.9%2028.5%200%2051.5-68.5%2051.5-144s-25.8-144-52.3-144zm.9%20272c-11.4%200-32.7-11.9-57.1-31.9-16.2-13.3-29.8-26.8-37-34.5%201.1-4.5%201.9-10.3%202.4-17.7.1-1.6.2-3.3.2-5%2021.1%205.7%2060.2%209.6%2062.1%209.8h.2c.9%200%201.8-.7%202-1.6.2-1-.4-2-1.4-2.3-.2-.1-21.7-6.6-40.5-11.5-8.8-2.3-16.6-4.9-22.4-7.1v-1.1l.1-.2v-.2c-.9-10.7-2-22-4.2-32.8%2020.4-11.3%2063-30.5%2063.5-30.7.9-.4%201.4-1.4%201.1-2.4-.3-1-1.2-1.6-2.2-1.4-.2%200-15.4%202.6-35.3%209.6-10.1%203.5-21.3%207.4-30.5%2010.6l-.1-.3-.1-.3c-2.4-8.6-5.3-16.4-8.4-22.7%2010.6-16.7%2028.9-36.3%2049.2-52.7%2027.2-21.9%2047.5-29.7%2057.5-29.7%202%20.3%2011.9%207.3%2021.8%2035.1%209.3%2026.1%2014.6%2060%2014.6%2092.9%200%2034.7-5.2%2069.3-14.2%2095-8.7%2025-18.1%2033.1-21.3%2033.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bowtie-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bowtie-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bowtie-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M290.8%20213.5C286%20205%20277%20202.2%20266%20202.2v-.2c-6%200-14.3%201.3-22.6%202.9-11.9%202.3-19.7%207.1-19.7%207.1s3.6%2027.3.1%2058.5-7.9%2042.5-7.9%2042.5%205.3%2012.1%2040%2015c3.9.3%207.6.5%2011%20.5%2024.5%200%2036.4-7.3%2036.4-7.3s3.3-5.4%204.3-22.1c1.9-32.2-7-68.5-16.8-85.6zM211.7%20208.8c-22-40.2-92.2-96.8-127.3-96.8C57.9%20112%2032%20180.5%2032%20256s23%20144%2051.5%20144c33.4%200%20116.5-80%20116.5-80s5.7-12.6%209.9-33.6l1.8-10.4c.7-4.7%201.3-9.7%201.7-15%20.3-3.5.5-6.8.6-9.9l.3-9.8c.7-16-2.6-32.5-2.6-32.5zM115%20224c0-1%20.7-1.8%201.7-1.9.6-.1%2014.9-2.5%2043%203%2021%204.1%2035.1%209.6%2042.7%2013.2l-1.3%2014.3c-2.6-.9-5.3-1.8-8.5-3-4.7-1.7-10.5-3.7-19-6.7-38.1-13.1-56.7-16.9-56.9-16.9-1-.2-1.7-1.1-1.7-2zm82.5%2065.1c-20.1%204.7-59.4%207.7-61.1%207.8-1%20.1-2-.6-2.1-1.7-.2-1%20.5-2%201.5-2.3%200%200%2021-5.5%2038-10%2011.5-3%2021.1-6.5%2026.4-8.5l-2.7%2014.7zM427.6%20112c-36.4%200-102.4%2056.5-124.3%2096.8l-.8%201.4s1.4%202.5%201.9%203.4c3.4%206%206.7%2014.3%209.4%2024l2.9%2011.7c2.2%2010.2%203.7%2021.2%204.2%2032.2l.2%209c0%202.9-.1%205.7-.3%208.5-1%2016.7-4.6%2022.1-4.6%2022.1%207.6%2010.5%2075%2078.9%20112.2%2078.9%2028.5%200%2051.5-68.5%2051.5-144s-25.8-144-52.3-144zm-67.8%20111.1c19.9-7%2035.2-9.6%2035.3-9.6%201-.2%202%20.4%202.2%201.4.3%201-.2%202-1.1%202.4-.5.2-50.7%2022.9-68.2%2033.5v0l-3.8-15.3v-.1c10-3.3%2023.5-8.1%2035.6-12.3zm41.4%2080c-.2.9-1%201.6-2%201.6h-.2c-2.1-.2-49.4-4.9-68-11.6-2-11.6.9-12.4.9-12.9%205.9%202.3%2015.8%205.9%2027.4%209%2018.8%205%2040.3%2011.5%2040.5%2011.5%201%20.4%201.6%201.4%201.4%202.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bowtie($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bowtie-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-briefcase-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20128v-16h-32v16h-48V96c-.5-18.2-13.6-32-32.2-32h-99.1C186.1%2064%20176%2077.7%20176%2096v32h-48v-16H96v16H48v320h416V128h-48zm-224-.5V98.1c0-10.2%202.9-18.1%2013.7-18.1h97.1c10.4%200%2017.2%207.7%2017.2%2018.1V128H192v-.5zM448%20432H64V208h384v224zm0-240H64v-48h32v16h32v-16h256v16h32v-16h32v48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-briefcase-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-briefcase-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-briefcase-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20112h32v16H96zM48%20208h416v240H48zM384%20112h32v16h-32z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20128v32h-32v-32h-48V96c-.5-18.2-13.6-32-32.2-32h-99.1C186.1%2064%20176%2077.7%20176%2096v32h-48v32H96v-32H48v64h416v-64h-48zm-96-.5v.5H192V98.1c0-10.2%202.9-18.1%2013.7-18.1h97.1c10.4%200%2017.2%207.7%2017.2%2018.1v29.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-briefcase($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-briefcase-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-browsers-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20144v304h303.9V144H64zm287.9%20288H80V160h271.9v272z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2064H144v64h16V80h272v272h-48v16h64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-browsers-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-browsers-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-browsers-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20144v304h303.9V144H64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144%2064v64h240v240h64V64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-browsers($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-browsers-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-brush-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M149.5%20283.3c-51.9%200-83.9%2045.7-83.9%2095.1%200%2022.7-10.1%2039.2-33.6%2048.1%2014.3%2027.8%2062%2037.5%2095.7%2037.5%208.4%200%2015.9-.6%2021.8-1.7%2035.6-6.4%2080.1-24.9%2090.7-77%2012.3-60.6-38.8-102-90.7-102zm75%2098.9c-4%2019.6-13.6%2034.5-29.5%2045.7-12.6%208.9-28.8%2015.2-48.3%2018.7-3.6.6-9.8%201.4-19%201.4-25.4%200-54.1-5.8-70.5-17.1%2016-12.2%2024.4-30%2024.4-52.4%200-21%206.9-41.4%2018.8-55.9%208.7-10.6%2024.3-23.2%2049.1-23.2%2024.2%200%2048.1%2010.9%2062.4%2028.3%208.6%2010.6%2017.8%2028.6%2012.6%2054.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M467.6%2060.4c-7.7-7.7-16.8-12.4-26.1-12.4-6.3%200-12.7%202.2-18.8%207L247.6%20209.1c-3.4-.9-6.6-1.4-9.7-1.4-4.8%200-9.3%201.2-13.2%203.8l-63.6%2052.8c-1.6%201.6-1.5%204.3.1%205.9.5.5%201.1.8%201.7%201%20.6%200%201.3.1%201.9.1h.1c47.9%203.4%2092%2037.8%2090.3%2090.5%200%20.5%200%201-.1%201.5.1.8.5%201.7%201.1%202.3.8.8%201.9%201.2%202.9%201.2s2.1-.4%202.9-1.2h.1l.2-.2%2054.3-62.2c4.2-6.4%204.7-14.2%202.4-22.9l154.2-175c11.7-15%207.4-32-5.6-44.9zM460.7%2095L301.1%20276.2l2.3%208.3c1.1%204%201.1%207.1.1%209.2l-35.4%2040.5c-4.6-18.2-14.4-34.7-28.7-48-13.3-12.3-29.8-21.4-47.9-26.5l42.5-35.2c.8-.4%201.9-.8%203.8-.8%201.6%200%203.5.3%205.5.8l8.3%202.3L433%2067.3c2.9-2.2%205.7-3.3%208.5-3.3%204.6%200%209.9%202.7%2014.8%207.7%204.2%204.2%206.9%208.8%207.5%2012.9.4%202.2.5%205.8-3.1%2010.4zM161.1%20264.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-brush-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-brush-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-brush-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M149.5%20283.3c-51.9%200-83.9%2045.7-83.9%2095.1%200%2022.7-10.1%2039.2-33.6%2048.1%2014.3%2027.8%2062%2037.5%2095.7%2037.5%208.4%200%2015.9-.6%2021.8-1.7%2035.6-6.4%2080.1-24.9%2090.7-77%2012.3-60.6-38.8-102-90.7-102z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M467.6%2060.4c-7.7-7.7-16.8-12.4-26.1-12.4-6.3%200-12.7%202.2-18.8%207L247.6%20209.1c-3.4-.9-6.6-1.4-9.7-1.4-4.8%200-9.3%201.2-13.2%203.8l-63.6%2052.8c-1.6%201.6-1.5%204.3.1%205.9.5.5%201.1.8%201.7%201%20.6%200%201.3.1%201.9.1h.1c47.9%203.4%2092%2037.8%2090.3%2090.5%200%20.5%200%201-.1%201.5.1.8.5%201.7%201.1%202.3.8.8%201.9%201.2%202.9%201.2s2.1-.4%202.9-1.2h.1l.2-.2%2054.3-62.2c4.2-6.4%204.7-14.2%202.4-22.9l154.2-175c11.7-15%207.4-32-5.6-44.9zM161.1%20264.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-brush($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-brush-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bug-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M456%20256c-4.6%200-9%201.3-12.6%203.6-5.4-2.4-14.4-5.3-27.4-6.1-.3-27.7-5.5-54-14.6-77.7%208.5-6.3%2015.8-14.4%2021.3-23.8h1.3c13.2%200%2024-10.7%2024-24s-10.7-24-24-24c-13.2%200-24%2010.7-24%2024%200%207%203%2013.3%207.8%2017.7-3%204.8-7.3%2010.1-13%2014.9C367.3%20102.9%20315.4%2064%20256%2064c-59.4%200-111.3%2038.9-138.9%2096.5-5.7-4.8-9.9-10.1-12.9-14.9%204.8-4.4%207.8-10.7%207.8-17.7%200-13.3-10.7-24-24-24s-24%2010.7-24%2024%2010.7%2024%2024%2024h1.3c5.6%209.4%2012.8%2017.5%2021.3%2023.8-9.1%2023.7-14.3%2050-14.6%2077.8-13.1.8-22%203.7-27.4%206.1-3.7-2.3-8-3.6-12.6-3.6-13.3%200-24%2010.7-24%2024s10.7%2024%2024%2024%2024-10.7%2024-24c0-2.5-.4-4.9-1.1-7.2%204-1.3%209.8-2.7%2017.5-3.3%202.3%2039%2014.2%2074.8%2033%20103.9-6%204.5-14.6%2013-19.9%2026.7C97.4%20401.4%2088%20411.6%2088%20424c0%2013.3%2010.7%2024%2024%2024s24-10.7%2024-24c0-8.4-4.3-15.7-10.8-20%203.9-9%209.5-14.5%2013.4-17.5%2027.5%2035.7%2066.2%2058.7%20109.4%2061.3%201.2.1%202.2.1%203.2.1h1c1.2%200%202.4.1%203.7.1%201.3%200%202.5%200%203.7-.1h1c1%200%202.1-.1%203.3-.1%2043.2-2.6%2081.9-25.7%20109.4-61.3%203.9%203%209.5%208.5%2013.5%2017.6-6.5%204.3-10.8%2011.7-10.8%2020%200%2013.3%2010.7%2024%2024%2024%2013.2%200%2024-10.7%2024-24%200-12.4-9.4-22.6-21.5-23.9-5.4-13.8-13.9-22.2-19.9-26.8%2018.8-29.1%2030.7-64.9%2033-103.8%207.7.5%2013.5%201.9%2017.5%203.3-.7%202.3-1.1%204.7-1.1%207.2%200%2013.3%2010.7%2024%2024%2024s24-10.7%2024-24-10.7-24.1-24-24.1zm-31.9-136c4.4%200%208%203.6%208%208s-3.6%208-8%208-8-3.6-8-8%203.5-8%208-8zM88%20136c-4.4%200-8-3.6-8-8s3.6-8%208-8%208%203.6%208%208-3.6%208-8%208zM56%20288c-4.4%200-8-3.6-8-8s3.6-8%208-8%208%203.6%208%208-3.6%208-8%208zm56%20144c-4.4%200-8-3.6-8-8s3.6-8%208-8%208%203.6%208%208-3.6%208-8%208zm288.1-16c4.4%200%208%203.6%208%208s-3.6%208-8%208-8-3.6-8-8%203.6-8%208-8zM256%2080c44.4%200%2084.2%2024.7%20110.7%2063.5-5.5%209.4-12.2%2018.2-20.2%2026.1-24.2%2024.2-56.3%2037.5-90.5%2037.5s-66.3-13.3-90.5-37.5c-7.9-7.9-14.7-16.7-20.2-26.1C171.8%20104.7%20211.6%2080%20256%2080zM112%20256c0-35.9%208.9-69.4%2024-97.2%2024.5%2036.7%2065.4%2061.6%20112%2064.1v208.9c-75.7-5.2-136-82-136-175.8zm152%20175.7V222.9c46.5-2.6%2087.5-27.4%20112-64.1%2015.2%2027.9%2024%2061.3%2024%2097.3%200%2093.7-60.3%20170.5-136%20175.6zM456%20288c-4.4%200-8-3.6-8-8s3.6-8%208-8%208%203.6%208%208-3.6%208-8%208z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bug-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bug-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bug-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M374.6%20127.3C345.4%2088.5%20303.1%2064%20256%2064s-89.4%2024.5-118.6%2063.3c6.4%2015.6%2015.8%2030%2028.1%2042.3%2024.2%2024.2%2056.3%2037.5%2090.5%2037.5s66.3-13.3%2090.5-37.5c12.3-12.3%2021.8-26.6%2028.1-42.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M126.8%20142.8c-1.7%202.8-3.4%205.7-5%208.6-2.9-1.8-5.3-3.7-7.7-5.8-1.2-1-3-3.9-4.5-7.4%205.4-11.3%201.2-25-9.9-31.3-11.6-6.5-26.2-2.4-32.7%209.2-6.5%2011.6-2.4%2026.2%209.2%2032.7%201.3.7%202.5%201.3%203.8%201.7%202.8%206.3%207.3%2014.3%2013.5%2019.5%204.2%203.5%208.8%207.1%2015.2%2010.7-7.2%2020.3-11.6%2042.3-12.5%2065.4-11%20.2-18.6%202.1-25.5%204.1-4.2%201.2-8.2%203.4-11.8%205.9-1-.1-1.9-.2-2.9-.2-13.3%200-24%2010.7-24%2024s10.7%2024%2024%2024c12.9%200%2023.5-10.2%2024-23%205-1.5%209.9-2.7%2017.1-2.8%203.2%2033%2013.3%2063.5%2028.6%2089.2-14.2%2011-22.9%2023-26.6%2036.3%200%200-.8.4-1.9%201.4-1%20.8-1.9%201.6-2.8%202.6-8.9%209.9-8.1%2025%201.8%2033.9%209.9%208.9%2025%208.1%2033.9-1.8%208.1-9%208.1-22.4.6-31.4%203.1-5.6%206.2-9%2013.7-15%2027.1%2031.7%2063.4%2052%20103.7%2054.4V222.9c-53.3-2.9-98.9-34.8-121.3-80.1zM456%20256.1c-1%200-2%20.1-2.9.2-3.6-2.5-7.7-4.6-11.8-5.9-6.9-2-14.4-3.9-25.5-4.1-1-23.1-5.4-45.2-12.5-65.4%206.4-3.6%2011-7.2%2015.2-10.7%206.2-5.2%2010.7-13.3%2013.5-19.5%201.3-.5%202.6-1%203.8-1.7%2011.6-6.5%2015.7-21.1%209.2-32.7-6.5-11.6-21.1-15.7-32.7-9.2-11.1%206.2-15.3%2019.9-9.9%2031.3-1.6%203.4-3.4%206.4-4.5%207.4-2.4%202-4.8%203.9-7.7%205.8-1.6-2.9-3.3-5.8-5-8.6-22.4%2045.3-67.9%2077.1-121.2%2080v225c40.3-2.4%2076.6-22.8%20103.7-54.4%207.4%205.9%2010.6%209.4%2013.7%2015-7.5%209-7.5%2022.4.6%2031.4%208.9%209.9%2024%2010.7%2033.9%201.8%209.9-8.9%2010.7-24%201.8-33.9-.9-1-1.8-1.8-2.8-2.6-1.1-.9-1.9-1.4-1.9-1.4-3.7-13.3-12.4-25.3-26.6-36.3%2015.3-25.7%2025.4-56.2%2028.6-89.2%207.2.1%2012%201.3%2017.1%202.8.5%2012.8%2011%2023%2024%2023%2013.3%200%2024-10.7%2024-24s-10.8-24.1-24.1-24.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bug($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bug-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-build-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M347.9%2064c4%200%209%201%2014%203l-38.8%2039-5.9%205.9%201.5%208.2%209.2%2051.2%202%2010.9%2010.9%202%2051.2%209.3%208.3%201.5%205.9-5.9%2039-39.2c3%207.1%203%2013%202.9%2015.4-.7%2012-5.7%2030.5-25%2049.8-14.9%2014.9-39.3%2024.9-60.8%2024.9-9.5%200-17.9-1.9-25-5.6-3.5-1.8-9-4.2-15.9-4.2-5.6%200-14%201.7-22.3%209.7-9%208.8-181.3%20192.4-188.7%20200.2l-.2.2-.2.2c-5.7%206.6-13.4%207.6-17.5%207.6-7.4%200-14.7-3-20.1-8.2-5.4-5.5-8.5-13.4-8.2-21.2.2-4.6%201.6-11.2%207.5-16.2l.3-.2.3-.2c7.8-7.4%20192.3-181.1%20199.9-188.6%207.9-7.9%209.6-16.2%209.7-21.8%200-6.9-2.4-12.6-3.5-15.4-18.2-42.7%2010.2-77.6%2019.4-87.2%2017.3-18.4%2039.7-24.2%2049.2-24.7%200-.4.4-.4.9-.4m0-16c-.7%200-1.4%200-2%20.1-12.5.7-39.3%207.7-60%2029.7-20.1%2021.2-41.1%2060.6-22.5%20104.5%202.2%205.3%204.7%2012.3-2.7%2019.7C253.1%20209.4%2061%20390.3%2061%20390.3c-18%2015.5-16.7%2044.2-.1%2060.9%208.5%208.4%2020%2012.8%2031.3%2012.8%2011.1%200%2021.9-4.2%2029.6-13.1%200%200%20179.4-191.1%20188.2-199.8%204-3.9%207.7-5.1%2011.1-5.1%203.3%200%206.3%201.2%208.6%202.4%209.9%205.1%2021%207.4%2032.4%207.4%2026.8%200%2055-12.4%2072.2-29.6%2024.4-24.4%2028.9-48%2029.6-60.1.7-12-3.4-27.9-16.7-41.1l-52.5%2052.7-51.2-9.3-9.2-51.2%2052.5-52.7C375.7%2053.4%20360%2048%20347.9%2048z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M102.5%20429.3c-5.5%205.4-14.4%205.4-19.9%200-5.4-5.5-5.4-14.4%200-19.9%205.5-5.4%2014.4-5.4%2019.9%200%205.4%205.6%205.4%2014.5%200%2019.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-build-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-build-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-build-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M447.2%20125l-52.5%2052.7-51.2-9.3-9.2-51.2%2052.5-52.7C375.7%2053.4%20360%2048%20347.9%2048c-.7%200-1.4%200-2%20.1-12.5.7-39.3%207.7-60%2029.7-20.1%2021.2-41.1%2060.6-22.5%20104.5%202.2%205.3%204.7%2012.3-2.7%2019.7C253.1%20209.4%2061%20390.3%2061%20390.3c-18%2015.5-16.7%2044.2-.1%2060.9%208.5%208.4%2020%2012.8%2031.3%2012.8%2011.1%200%2021.9-4.2%2029.6-13.1%200%200%20179.4-191.1%20188.2-199.8%204-3.9%207.7-5.1%2011.1-5.1%203.3%200%206.3%201.2%208.6%202.4%209.9%205.1%2021%207.4%2032.4%207.4%2026.8%200%2055-12.4%2072.2-29.6%2024.4-24.4%2028.9-48%2029.6-60.1.8-11.9-3.4-27.8-16.7-41.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-build($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-build-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bulb-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20188.8C400%20110.9%20333.9%2048%20256%2048s-144%2062.9-144%20140.8c0%2031.1%2013.2%2059.1%2030.2%2083.1h-.3c10.9%2015%2021.4%2027.7%2031.5%2045%2022%2037.8%2018.6%2074.3%2018.7%2081.5v1.5h128v-1.5c0-8.9-3.6-43.7%2018.4-81.5%2010.1-17.3%2020.6-30%2031.5-45h-.1c16.9-23.9%2030.1-52%2030.1-83.1zm-49%2081.5c-.6.8-1.1%201.5-1.7%202.3-8.1%2010.9-16.5%2022.2-24.7%2036.2-17.3%2029.7-20.4%2058.2-20.8%2075.2H288V271.9l32-63.9h-16.6L272%20271.9V384h-32V271.9L208.6%20208H192l32%2063.9V384h-15.9c-.5-17-3.9-45.7-20.9-75-4.5-7.7-9.1-15-13.7-21h.2l-18.6-25.6c-15.8-21.6-27.1-47.1-27.1-73.6%200-33.4%2016-64.9%2039.6-88.5%2023.6-23.6%2055-36.5%2088.4-36.5s64.8%2012.8%2088.4%2036.4c23.6%2023.6%2039.6%2055%2039.6%2088.4%200%2026.5-11.3%2051.9-27.1%2073.6l-5.9%208.1zM224%20448h64v16h-64zM208%20416h96v16h-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bulb-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bulb-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bulb-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20188.9C400%20111%20333.9%2048%20256%2048s-144%2063.1-144%20140.9c0%2031%2013.2%2059.1%2030.2%2083.1h-.3c10.9%2015%2021.4%2027.7%2031.5%2045%2022%2037.8%2018.6%2074.3%2018.7%2081.5v1.5h32V271.9L192%20208h16.6l31.4%2063.9V400h32V271.9l31.4-63.9H320l-32%2063.9V400h32v-1.5c0-8.9-3.6-43.7%2018.4-81.5%2010.1-17.3%2020.6-30%2031.5-45h-.1c17-24%2030.2-52.1%2030.2-83.1zM224%20448h64v16h-64zM208%20416h96v16h-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bulb($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bulb-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bus-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20416c-8.5%2018.7-24%2016-63.9%2016%200%2010.5-1.1%2016%203.3%2016h55.1c4.7%200%204.2-3.8%205.5-32zM96%20416c1.5%2028.4.8%2032%205.5%2032h55.1c4.4%200%203.3-5.5%203.3-16-39.9%200-50.4%203-63.9-16z%22%2F%3E%3Ccircle%20cx%3D%22352%22%20cy%3D%22352%22%20r%3D%2224%22%2F%3E%3Ccircle%20cx%3D%22160%22%20cy%3D%22352%22%20r%3D%2224%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%2064H128c-17.6%200-32%2014.4-32%2032v280c0%2022%2018%2040%2040%2040h240c22%200%2040-18%2040-40V96c0-17.6-14.4-32-32-32zm16%20312c0%2013.2-10.8%2024-24%2024H136c-13.2%200-24-10.8-24-24v-72h288v72zM112%20272V144.2c0-8.8%207.4-16.2%2016.2-16.2H248v160H128.2c-8.8%200-16.2-7.2-16.2-16zm288%200c0%208.8-7.2%2016-16%2016H264V128h120c8.8%200%2016%207.4%2016%2016.2V272zm-16-160H128c-8.8%200-16-7.2-16-16s7.2-16%2016-16h256c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bus-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bus-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-bus-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cg%20fill%3D%22%23231F20%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352.1%20432c0%2010.5-1.1%2016%203.3%2016h55.1c4.7%200%204.1-3.8%205.5-32-8.5%2018.7-24%2016-63.9%2016zM96%20416c1.5%2028.4.8%2032%205.5%2032h55.1c4.4%200%203.3-5.5%203.3-16-39.9%200-50.4%203-63.9-16zM384%2064H128c-17.6%200-32%2014.4-32%2032v280c0%2022%2018%2040%2040%2040h240c22%200%2040-18%2040-40V96c0-17.6-14.4-32-32-32zM160%20376c-13.3%200-24-10.7-24-24s10.7-24%2024-24%2024%2010.7%2024%2024-10.7%2024-24%2024zm88-88H128.2c-8.8%200-16.2-7.2-16.2-16V144.2c0-8.8%207.4-16.2%2016.2-16.2H248v160zm104%2088c-13.3%200-24-10.7-24-24s10.7-24%2024-24%2024%2010.7%2024%2024-10.7%2024-24%2024zm48-104c0%208.8-7.2%2016-16%2016H264V128h120c8.8%200%2016%207.4%2016%2016.2V272zm-16-160H128c-8.8%200-16-7.2-16-16s7.2-16%2016-16h256c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-bus($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-bus-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cafe-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20400h448v16H32zM200%20384h80c8.8%200%2058-12%2094.7-80.4%203.1.3%206.2.4%209.3.4%2053%200%2096-39.4%2096-88%200-38.6-27.1-71.4-64.9-83.3.6-11.7.9-23.9.9-36.7H64c0%20256%20121%20288%20136%20288zm264-168c0%2039.7-35.9%2072-80%2072h-1.6c15.2-33.6%2027.2-78.6%2031.7-138.7C443.3%20160%20464%20185.9%20464%20216zM80.2%20112h319.6c-1.1%2049.2-7.3%2092.9-18.4%20130.1-9.7%2032.4-23.2%2059.9-40.1%2081.7-24.5%2031.7-50.8%2044.2-60.7%2044.2h-80.1c-11.8%200-37.2-12.6-61.7-44.2-16.9-21.8-30.4-49.3-40.1-81.7-11.2-37.2-17.4-80.9-18.5-130.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cafe-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cafe-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cafe-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20400h448v16H32zM200%20384h80c8.8%200%2058-12%2094.7-80.4%203.1.3%206.2.4%209.3.4%2053%200%2096-39.4%2096-88%200-38.6-27.1-71.4-64.9-83.3.6-11.7.9-23.9.9-36.7H64c0%20256%20121%20288%20136%20288zm264-168c0%2039.7-35.9%2072-80%2072h-1.6c15.2-33.6%2027.2-78.6%2031.7-138.7C443.3%20160%20464%20185.9%20464%20216z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cafe($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cafe-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-calculator-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144%20160h224V96H144v64zm16-48h192v32H160v-32z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%2064H144c-17.7%200-32%2014.3-32%2032v320c0%2017.7%2014.3%2032%2032%2032h224c17.7%200%2032-14.3%2032-32V96c0-17.7-14.3-32-32-32zm16%20352c0%208.8-7.2%2016-16%2016H144c-8.8%200-16-7.2-16-16V96c0-8.8%207.2-16%2016-16h224c8.8%200%2016%207.2%2016%2016v320z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%20240v-48h-16v64h64v-16h-16zM160%20320v-48h-16v64h64v-16h-16zM160%20400v-48h-16v64h64v-16h-16zM240%20240v-48h-16v64h64v-16h-16zM320%20240v-48h-16v64h64v-16h-16zM240%20320v-48h-16v64h64v-16h-16zM240%20400v-48h-16v64h64v-16h-16zM320%20400V272h-16v144h64v-16h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-calculator-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-calculator-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-calculator-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%2064H144c-17.7%200-32%2014.3-32%2032v320c0%2017.7%2014.3%2032%2032%2032h224c17.7%200%2032-14.3%2032-32V96c0-17.7-14.3-32-32-32zm-8%20216v128h-48V280h48zm0-80v48h-48v-48h48zm-80%20160v48h-48v-48h48zm0-80v48h-48v-48h48zm0-80v48h-48v-48h48zm-80%20160v48h-48v-48h48zm0-80v48h-48v-48h48zm0-80v48h-48v-48h48zm-48-48v-48h208v48H152z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-calculator($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-calculator-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-calendar-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%2096V64h-16v32H176V64h-16v32H64v352h384V96h-96zm80%20336H80V192h352v240zm0-256H80v-64h80v32h16v-32h160v32h16v-32h80v64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-calendar-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-calendar-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-calendar-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20192h384v256H64zM448%2096h-96v48h-16V96H176v48h-16V96H64v80h384zM160%2064h16v32h-16zM336%2064h16v32h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-calendar($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-calendar-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-call-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M415.9%20335.5c-14.6-15-56.1-43.1-83.3-43.1-6.3%200-11.8%201.4-16.3%204.3-13.3%208.5-23.9%2015.1-29%2015.1-2.8%200-5.8-2.5-12.4-8.2l-1.1-1c-18.3-15.9-22.2-20-29.3-27.4l-1.8-1.9c-1.3-1.3-2.4-2.5-3.5-3.6-6.2-6.4-10.7-11-26.6-29l-.7-.8c-7.6-8.6-12.6-14.2-12.9-18.3-.3-4%203.2-10.5%2012.1-22.6%2010.8-14.6%2011.2-32.6%201.3-53.5-7.9-16.5-20.8-32.3-32.2-46.2l-1-1.2c-9.8-12-21.2-18-33.9-18-14.1%200-25.8%207.6-32%2011.6-.5.3-1%20.7-1.5%201-13.9%208.8-24%2020.9-27.8%2033.2-5.7%2018.5-9.5%2042.5%2017.8%2092.4%2023.6%2043.2%2045%2072.2%2079%20107.1%2032%2032.8%2046.2%2043.4%2078%2066.4%2035.4%2025.6%2069.4%2040.3%2093.2%2040.3%2022.1%200%2039.5%200%2064.3-29.9%2026-31.4%2015.2-50.6-.4-66.7zm-11.5%2055.9c-20%2024.2-31.5%2024.2-52.3%2024.2-20.3%200-51.8-14-84.2-37.3-31-22.4-44.8-32.7-75.9-64.6-32.9-33.7-53.6-61.8-76.4-103.5-24.1-44.1-21.4-63.4-16.5-79.3%202.6-8.5%2010.4-17.6%2021-24.2.5-.3%201-.7%201.6-1%205.3-3.4%2014.1-9.1%2023.7-9.1%208%200%2015.1%204%2021.9%2012.3l1%201.2c25.5%2031.2%2045.4%2058.8%2030.4%2079.2-10.6%2014.3-16.2%2024-15.3%2034%20.8%209.7%207.3%2017%2017.1%2028l.7.8c16.1%2018.2%2020.7%2023%2027.1%2029.5%201.1%201.1%202.2%202.3%203.5%203.6l1.8%201.9c7.4%207.7%2011.5%2011.9%2030.3%2028.4l1.1%201c8%207%2013.9%2012.1%2022.5%2012.1%208.9%200%2018.7-5.6%2037.3-17.5%201.9-1.2%204.6-1.9%208-1.9%2021.7%200%2059.1%2024.8%2072.2%2038.3%2012%2012.2%2018%2021.4-.6%2043.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-call-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-call-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-call-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M415.9%20335.5c-14.6-15-56.1-43.1-83.3-43.1-6.3%200-11.8%201.4-16.3%204.3-13.3%208.5-23.9%2015.1-29%2015.1-2.8%200-5.8-2.5-12.4-8.2l-1.1-1c-18.3-15.9-22.2-20-29.3-27.4l-1.8-1.9c-1.3-1.3-2.4-2.5-3.5-3.6-6.2-6.4-10.7-11-26.6-29l-.7-.8c-7.6-8.6-12.6-14.2-12.9-18.3-.3-4%203.2-10.5%2012.1-22.6%2010.8-14.6%2011.2-32.6%201.3-53.5-7.9-16.5-20.8-32.3-32.2-46.2l-1-1.2c-9.8-12-21.2-18-33.9-18-14.1%200-25.8%207.6-32%2011.6-.5.3-1%20.7-1.5%201-13.9%208.8-24%2020.9-27.8%2033.2-5.7%2018.5-9.5%2042.5%2017.8%2092.4%2023.6%2043.2%2045%2072.2%2079%20107.1%2032%2032.8%2046.2%2043.4%2078%2066.4%2035.4%2025.6%2069.4%2040.3%2093.2%2040.3%2022.1%200%2039.5%200%2064.3-29.9%2026-31.4%2015.2-50.6-.4-66.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-call($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-call-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-camera-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M417.5%20160h-61.7c-32.1-36-42.2-48-54.5-48h-88.5c-12.3%200-22.2%2012-54.5%2048H145v-16h-34v16H97.5C79.9%20160%2064%20173.2%2064%20190.7v176c0%2017.5%2015.9%2033.3%2033.5%2033.3h320c17.6%200%2030.5-15.8%2030.5-33.3v-176c0-17.5-12.9-30.7-30.5-30.7zM432%20366.7c0%209.3-6.2%2017.3-14.5%2017.3h-320c-8.7%200-17.5-8.7-17.5-17.3v-176c0-8.2%208.1-14.7%2017.5-14.7h67.8l4.8-3.2c4-4.5%207.7-10%2011.1-13.8%2011.3-12.7%2019.5-21.7%2025.3-26.9%204.7-4.2%206.2-4.1%206.2-4.1h88.5s1.6-.1%206.7%204.5c6.1%205.5%2014.7%2016.5%2026.6%2029.8%202.9%203.3%206%206.8%209.3%2010.5l4.8%203.2h68.9c8.8%200%2014.5%206%2014.5%2014.7v176z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20189.5c-47.1%200-85.5%2038.4-85.5%2085.5s38.4%2085.5%2085.5%2085.5%2085.5-38.4%2085.5-85.5-38.4-85.5-85.5-85.5zm0%20155c-38.4%200-69.5-31.1-69.5-69.5s31.1-69.5%2069.5-69.5%2069.5%2031.1%2069.5%2069.5-31.1%2069.5-69.5%2069.5zM352%20192h17v17h-17z%22%2F%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22275%22%20r%3D%2232%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-camera-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-camera-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-camera-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M417.5%20160h-61.7c-32.1-36-42.2-48-54.5-48h-88.5c-12.3%200-22.2%2012-54.5%2048H145v-16h-34v16H97.5C79.9%20160%2064%20173.2%2064%20190.7v176c0%2017.5%2015.9%2033.3%2033.5%2033.3h320c17.6%200%2030.5-15.8%2030.5-33.3v-176c0-17.5-12.9-30.7-30.5-30.7zM256%20360.5c-47.1%200-85.5-38.4-85.5-85.5s38.4-85.5%2085.5-85.5%2085.5%2038.4%2085.5%2085.5-38.4%2085.5-85.5%2085.5zM369%20209h-17v-17h17v17z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20205.5c-38.4%200-69.5%2031.1-69.5%2069.5s31.1%2069.5%2069.5%2069.5%2069.5-31.1%2069.5-69.5-31.1-69.5-69.5-69.5zm0%20101.5c-17.7%200-32-14.3-32-32s14.3-32%2032-32%2032%2014.3%2032%2032-14.3%2032-32%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-camera($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-camera-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-car-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M434.7%20203.4l15.5-2.4c7.1%200%2022.4-3%2025.5-6.2%203.1-3.2%204.2-5.8%204.2-8.6s-1.7-7.9-4.8-11.3c-3-3.4-16-5.3-23.7-6.3-2.2-.3-3.9-.4-5.2-.4-3.2%200-4.1.7-5.5%201.6-2.3%201.5-3%2011.7-3.2%2017l-8.1%201.8c-4.8-12.5-11.4-35.6-21.5-54-11.5-20.8-23.5-27.4-28.5-29-4.9-1.5-9.4-2.6-43-6.1-33.7-3.5-63-3.5-80.4-3.5s-46.7%200-80.6%203.6c-33.6%203.4-38.1%204.5-43%206.1-5%201.6-17%208.2-28.5%2029-10.1%2018.4-16.7%2041.5-21.5%2054l-8.1-1.8c-.2-5.3-.9-15.6-3.2-17-1.4-.9-2.4-1.7-5.5-1.7-1.3%200-2.9.1-5.1.4-7.6%201-20.6%202.8-23.7%206.2-3%203.4-4.7%208.3-4.7%2011.1s1.1%205.9%204.2%209.1c3.1%203.2%2018.5%206.2%2025.5%206.2l15.5%202.4S50.5%20217.8%2036.1%20234c0%200-4.1%2024.5-4.1%2057.9%200%2048%205.8%2088.3%205.8%2088.3%2026.5%204.6%2046.2%206.2%2065.9%206.7%205.4.1%2010.6.2%2015.9.2%204.3%200%208.7%200%2013.3-.1%2024.4-.3%2015.8-7.4%2026.7-7.4h.4c11.3.2%2055%204.5%2096%204.5s84.7-4.3%2096-4.5h.4c10.8%200%202.2%207.1%2026.7%207.3%204.5%200%208.8.1%2013%20.1%205.4%200%2010.7-.1%2016.3-.2%2019.7-.5%2039.5-2.2%2065.9-6.8%200%200%205.8-40.3%205.8-88.4%200-33.5-4.1-57.9-4.1-57.9-14.5-16.2-41.3-30.3-41.3-30.3zm-324.3-49c4.3-10.1%2014-27.1%2022.1-32.8%200%200%2047-9.6%20123.5-9.6s123.5%209.6%20123.5%209.6c8.1%205.6%2017.8%2022.6%2022.1%2032.8s11.4%2033.8%2010.3%2036.5c-.8%202%20.2%203.3-5.4%203.3-1.8%200-4.4-.1-8-.4-14.3-1.1-99.5-2.3-142.5-2.3s-128.1%201.2-142.5%202.3c-3.6.3-6.1.4-8%20.4-5.7%200-4.6-1.3-5.4-3.3-1.1-2.8%206-26.4%2010.3-36.5zm349.4%20211.7c-18.3%202.8-34.3%204.2-51.9%204.6-5.1.1-10.1.2-15.9.2-3.7%200-7.8%200-12.8-.1-5.5-.1-8.1-.5-9.1-.8-3.6-3.3-8.5-6.6-17.7-6.6h-.7c-3.9.1-10.5.5-19.7%201-19.2%201.2-48.3%203.4-76%203.5-27.7%200-56.8-2.3-76.1-3.5-9.2-.6-15.8-1-19.7-1h-.7c-9.2%200-14.1%203.3-17.7%206.6-1%20.2-3.6.7-9.1.8-5.3.1-9.4.1-13.1.1-5.6%200-10.6-.1-15.5-.2-17.6-.5-33.7-1.9-51.9-4.6-1.7-15.1-4.2-43.2-4.2-74.4%200-23.3%202.1-42.3%203.2-50.7%2010.7-10.4%2027.6-20.6%2033.7-23.9l13.8-7.5s44.3-2%20157.3-2%20157.2%202%20157.2%202l13.9%207.5c6.1%203.3%2023%2013.4%2033.7%2023.8%201.1%208.4%203.2%2027.3%203.2%2050.8%200%2031.1-2.5%2059.3-4.2%2074.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M138.8%20278.3c-9.9%200-29.8-1-34.5-1.2-4.7-.1-8.8%203.8-11.2%203.8s-25.5-3.6-28-14.9c-2.5-11.2%200-23%200-22.8%2015.5-.7%2030.5-.2%2058.5%207.8%2028.1%207.9%2043.6%2023.3%2043.6%2023.3s-18.5%204-28.4%204zM342.2%20339.3c-12.7%201.7-58.5%202.2-86.2%202.2s-73.5-.5-86.2-2.2c-13.1-1.7-29.8-17.3-18.4-30.2%207.6-8.5%2020.8-13.6%2048.9-17.3%2029.8-3.8%2048.6-4.3%2055.6-4.3s25.8.5%2055.6%204.3c28.1%203.7%2043.2%209.6%2048.9%2017.3%2010.4%2013.8-5.1%2028.4-18.2%2030.2zM446.9%20266.1c-2.5%2011.2-25.6%2014.9-28%2014.9-2.4%200-6.5-3.9-11.2-3.8-4.7.2-24.6%201.2-34.5%201.2s-28.4-4-28.4-4%2015.5-15.4%2043.6-23.3c28-8%2043-8.5%2058.5-7.8%200-.2%202.5%2011.5%200%2022.8z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M401%20412.3c0%202.1%201.3%203.7%203.2%203.7h56.5c4.9%200%205.9-3.5%206.2-5.5%201.4-8.4%201.9-21.3%201.9-21.3-25.7%204.7-48.8%205.5-67.8%206v17.1zM45.2%20410.5c.3%202%201.3%205.5%206.2%205.5h56.7c1.9%200%203-1.6%203-3.7v-17.1c-19-.5-42.2-1.3-67.9-6-.1.1.6%2012.9%202%2021.3z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-car-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-car-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-car-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M475.9%20234c-14.4-16.3-41.2-30.8-41.2-30.8l15.5-3.1c7.1%200%2022.4-2.3%2025.5-5.4%203.1-3.2%204.2-5.4%204.2-8.2s-1.7-7.7-4.8-11.1c-3-3.4-16-5.2-23.7-6.2-7.6-1-8.7%200-10.7%201.2-2.3%201.5-3%2011.7-3.2%2017l-8.1%201.8c-4.8-12.5-11.4-35.6-21.5-54-11.5-20.8-23.5-27.4-28.5-29-4.9-1.5-9.4-2.6-43-6.1-33.7-3.6-63-4.1-80.4-4.1s-46.7.5-80.6%204.1c-33.6%203.4-38.1%204.5-43%206.1-5%201.6-17%208.2-28.5%2029-10.1%2018.4-16.7%2041.5-21.5%2054l-8.1-1.8c-.2-5.3-.9-15.6-3.2-17-2-1.3-3-2.2-10.7-1.2-7.6%201-20.6%202.8-23.7%206.2-3%203.4-4.7%208.3-4.7%2011.1%200%202.8%201.1%205.1%204.2%208.3%203.1%203.2%2018.5%205.4%2025.5%205.4l15.5%203.1S50.4%20217.9%2036%20234.1c0%200-4.1%2024.7-4.1%2058.1%200%2048%205.8%2088.4%205.8%2088.4%2026.5%204.6%2046.2%206.3%2065.9%206.8%209.9.2%2018.9.2%2029.2.1%2024.8-.3%2015.6-7.5%2027.1-7.3%2011.3.2%2055%204%2096%204s84.7-3.8%2096-4c11.5-.2%202.3%207.1%2027.1%207.3%2010.3.1%2019.4.1%2029.2-.1%2019.7-.5%2039.5-2.2%2065.9-6.8%200%200%205.8-40.3%205.8-88.4.1-33.6-4-58.2-4-58.2zm-365.5-79.1c4.3-10.1%2014-27.1%2022.1-32.8%200%200%2047-10.1%20123.5-10.1s123.5%2010.1%20123.5%2010.1c8.1%205.6%2017.8%2022.6%2022.1%2032.8%204.3%2010.1%2011.4%2033.8%2010.3%2036.5-1.1%202.7%201.1%204.1-13.4%202.9-14.4-1.1-99.5-2.3-142.5-2.3s-128.1%201.2-142.5%202.3c-14.5%201.2-12.4-.2-13.4-2.9-1.1-2.8%206-26.4%2010.3-36.5zm13.4%20115.9c-9.9%200-29.8-1-34.5-1.2-4.7-.1-8.8%203.8-11.2%203.8s-25.5-3.6-28-14.9c-2.5-11.2%200-23%200-22.8%2015.5-.7%2030.5-.2%2058.5%207.8%2028.1%207.9%2043.6%2023.3%2043.6%2023.3s-18.5%204-28.4%204zm218.4%2069c-12.7%201.7-58.5%202.2-86.2%202.2s-73.5-.5-86.2-2.2c-13.1-1.7-29.8-17.3-18.4-30.2%207.6-8.5%2020.8-13.6%2048.9-17.3%2029.8-3.8%2048.6-4.3%2055.6-4.3s25.8.5%2055.6%204.3c28.1%203.7%2043.2%209.6%2048.9%2017.3%2010.4%2013.8-5.1%2028.4-18.2%2030.2zm119.7-81.2c-2.5%2011.2-25.6%2014.9-28%2014.9-2.4%200-6.5-3.9-11.2-3.8-4.7.2-24.6%201.2-34.5%201.2s-28.4-4-28.4-4%2015.5-15.4%2043.6-23.3c28-8%2043-8.5%2058.5-7.8%200-.2%202.5%2011.5%200%2022.8zM401%20412.3c0%202.1%201.2%203.7%203.1%203.7h56.5c4.9%200%205.9-3.5%206.2-5.5%201.4-8.4%202-21.3%202-21.3-25.7%204.7-48.8%205.5-67.8%206v17.1zM45.1%20410.5c.3%202%201.3%205.5%206.2%205.5H108c1.9%200%203.1-1.6%203.1-3.7v-17.1c-19-.5-42.2-1.3-67.9-6-.1.1.5%2012.9%201.9%2021.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-car($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-car-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-card-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%20112H80c-17.6%200-32%2014.4-32%2032v224c0%2017.6%2014.4%2032%2032%2032h352c17.6%200%2032-14.4%2032-32V144c0-17.6-14.4-32-32-32zM80%20128h352c8.8%200%2016%207.2%2016%2016v32H64v-32c0-8.8%207.2-16%2016-16zm368%2064v48H64v-48h384zm-16%20192H80c-8.8%200-16-7.2-16-16V256h384v112c0%208.8-7.2%2016-16%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20320h32v16H96zM160%20320h192v16H160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-card-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-card-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-card-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%20112H80c-17.6%200-32%2014.4-32%2032v224c0%2017.6%2014.4%2032%2032%2032h352c17.6%200%2032-14.4%2032-32V144c0-17.6-14.4-32-32-32zM80%20128h352c8.8%200%2016%207.2%2016%2016v32H64v-32c0-8.8%207.2-16%2016-16zm352%20256H80c-8.8%200-16-7.2-16-16V256h384v112c0%208.8-7.2%2016-16%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20320h32v16H96zM160%20320h192v16H160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-card($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-card-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cart-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%20400c-13.248%200-24%2010.752-24%2024s10.752%2024%2024%2024%2024-10.752%2024-24-10.752-24-24-24zm0%2032c-4.41%200-8-3.59-8-8s3.59-8%208-8%208%203.59%208%208-3.59%208-8%208zM384.5%20400c-13.248%200-24%2010.752-24%2024s10.752%2024%2024%2024%2024-10.752%2024-24-10.752-24-24-24zm0%2032c-4.41%200-8-3.59-8-8s3.59-8%208-8%208%203.59%208%208-3.59%208-8%208zM448%20128L123.177%2095.646c-1.628-6.972-4.37-14.66-11.838-20.667C102.024%2067.49%2086.98%2064%2064%2064v16c18.614%200%2031.167%202.507%2037.312%207.448%204.458%203.585%205.644%208.423%207.165%2015.99l-.024.003%2042.052%20233.64c2.413%2014.42%207.194%2025.208%2013.29%2032.985C171.044%20379.312%20180.534%20384%20192%20384h240v-16H192c-4.727%200-19.136.123-25.75-33.755l-5.428-30.16L432%20256l16-128zm-29.41%20114.348l-260.6%2045.99-31.733-176.3%20303.87%2030.608-11.537%2099.702z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cart-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cart-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cart-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%20400c-13.248%200-24%2010.752-24%2024s10.752%2024%2024%2024%2024-10.752%2024-24-10.752-24-24-24zM384.5%20400c-13.248%200-24%2010.752-24%2024s10.752%2024%2024%2024%2024-10.752%2024-24-10.752-24-24-24zM448%20128L123.177%2095.646c-1.628-6.972-4.37-14.66-11.838-20.667C102.024%2067.49%2086.98%2064%2064%2064v16c18.614%200%2031.167%202.507%2037.312%207.448%204.458%203.585%205.644%208.423%207.165%2015.99l-.024.003%2042.052%20233.64c2.413%2014.42%207.194%2025.208%2013.29%2032.985C171.044%20379.312%20180.534%20384%20192%20384h240v-16H192c-4.727%200-19.136.123-25.75-33.755l-5.428-30.16L432%20256l16-128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cart($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cart-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cash-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M40%20368h432v16H40zM48%20400h416v16H48zM32%2096v256h448V96H32zm432%20240H48V112h416v224z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20128h64v16h-64zM384%20304h64v16h-64zM64%20128h64v16H64zM64%20304h64v16H64zM256%20296c-39.7%200-72-32.3-72-72s32.3-72%2072-72%2072%2032.3%2072%2072-32.3%2072-72%2072zm0-128c-30.9%200-56%2025.1-56%2056s25.1%2056%2056%2056%2056-25.1%2056-56-25.1-56-56-56z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cash-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cash-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cash-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M40%20368h432v16H40zM48%20400h416v16H48zM256%20168c-30.9%200-56%2025.1-56%2056s25.1%2056%2056%2056%2056-25.1%2056-56-25.1-56-56-56z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2096v256h448V96H32zm96%20224H64v-16h64v16zm0-176H64v-16h64v16zm128%20152c-39.7%200-72-32.3-72-72s32.3-72%2072-72%2072%2032.3%2072%2072-32.3%2072-72%2072zm192%2024h-64v-16h64v16zm0-176h-64v-16h64v16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cash($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cash-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-chatboxes-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064h256v96h16V48H48v224h112v-16H64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M176%20176v224h162.6l64%2064H416v-64h48V176H176zm272%20208h-48v54.6L345%20384H192V192h256v192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-chatboxes-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-chatboxes-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-chatboxes-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M336%2048H48v224h112V160h176z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M176%20176v224h162.6l64%2064H416v-64h48V176H176z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-chatboxes($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-chatboxes-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-chatbubbles-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M431%20320.6c0-4.4%201.2-8.6%203.3-12.2.6-1.1%201.4-2.1%202.1-3.1%2017.4-26%2027.6-57.1%2027.6-90.3.3-92.2-77.5-167-173.7-167-83.9%200-153.9%2057.1-170.3%20132.9-2.4%2011.1-3.7%2022.4-3.7%2034.2%200%2092.3%2074.8%20169.1%20171%20169.1%2015.3%200%2035.9-4.6%2047.2-7.7s22.5-7.2%2025.4-8.3%206.1-1.7%209.3-1.7c3.6%200%207%20.7%2010.1%202l56.7%2020.1s2.4%201%203.9%201c4.4%200%208-3.5%208-8%200-1-.5-2.7-.5-2.7L431%20320.6zm-45.9%2033c-5-2-10.3-3.2-15.8-3.2-4.1%200-10.1.8-12.2%201.6-2.1.8-11.3%203.8-11.3%203.8-4.2%201.4-9.9%203.8-15.2%205.1-14%203.6-30.1%207.2-43.2%207.2-41.9%200-81.1-16.1-110.3-45.3-14.1-14.1-25.1-30.5-32.8-48.7-7.9-18.8-11.9-38.7-11.9-59.1%200-10.2%201.1-20.6%203.3-30.8%207.2-33.4%2026.5-63.8%2054.2-85.7C203.7%2087.6%20219.3%2079%20236%2073.1c17.4-6.1%2035.7-9.2%2054.4-9.2%2022%200%2043.3%204.2%2063.3%2012.6%2019.3%208.1%2036.4%2019.6%2051%2034.2C432.7%20139%20448%20176%20448%20215c0%2028.9-8.6%2057-24.7%2081.2-.1.1-.2.3-.3.4-.7.9-1.6%202.2-2.5%203.8-3.5%206.1-5.4%2012.4-5.4%2020.1%200%207.7%208.2%2032.5%2013%2048.2l-43-15.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M305.3%20395.7c-6.3%206.1-12.1%2010.4-12.1%2010.4-24.9%2020.2-56.4%2031.4-89.5%2031.4-18.8%200-37.1-3.6-54.5-10.7-.4-.2-.8-.3-1-.4-.6-.3-1.2-.5-1.8-.6-7-2.3-14.7-2-21.4.7l-42.5%2016.8%209.3-48.5c.1-.5.1-1%20.1-1.5%200-5.1-1.3-10-3.9-14.3l-.4-.7c-.5-.8-1-1.8-1.7-2.7-14.4-21.7-22-46.9-22-72.9%200-30%2010.6-62.8%2037.8-92.9.6-4.3%201.3-8.6%202.3-12.8%201-4.5%202.2-9%203.5-13.4l-8%207.1C66.8%20219.2%2048%20260%2048%20302.5c0%2029.3%208.6%2057.6%2024.8%2082%20.1.1.2.2.3.4.2.2.6.9.8%201.4.2.3.3.6.5.8%201%201.7%201.5%203.4%201.6%205.4l-11.9%2062c-.6%202.9.5%205.8%202.7%207.7%201.5%201.2%203.3%201.8%205.1%201.8%201%200%202-.2%202.9-.6l56.1-22.1c1.8-.7%203.7-1.1%205.7-1.1%201.8%200%203.6.3%205.3.9.2.1.5.2.7.2.1.1.2.1.3.1%2019.3%208%2039.8%2012%2060.7%2012%2046.6%200%2090.4-20.1%20120.1-55.1%200%200%203.2-4.4%206.9-9.6-3.8%201.2-8%202.5-12.2%203.7-3.6%201.1-8.1%202.2-13.1%203.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-chatbubbles-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-chatbubbles-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-chatbubbles-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M431%20320.6c0-4.4%201.2-8.6%203.3-12.2.6-1.1%201.4-2.1%202.1-3.1%2017.4-26%2027.6-57.1%2027.6-90.3.3-92.2-77.5-167-173.7-167-83.9%200-153.9%2057.1-170.3%20132.9-2.4%2011.1-3.7%2022.4-3.7%2034.2%200%2092.3%2074.8%20169.1%20171%20169.1%2015.3%200%2035.9-4.6%2047.2-7.7s22.5-7.2%2025.4-8.3%206.1-1.7%209.3-1.7c3.6%200%207%20.7%2010.1%202l56.7%2020.1s2.4%201%203.9%201c4.4%200%208-3.5%208-8%200-1-.5-2.7-.5-2.7L431%20320.6zM311.2%20403.4c-.3.5-.1.7.7.4-.1-.3-.3-.4-.7-.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M318.5%20392.5c-3.6%201-8.2%202.1-13.2%203.2-10.5%202.2-23.9%204.5-34%204.5-96.2%200-171-76.8-171-169.1%200-6.6.7-15%201.5-21.4.6-4.3%201.3-8.6%202.3-12.8%201-4.5%202.2-9%203.5-13.4l-8%207.1C66.8%20219.2%2048%20260%2048%20302.5c0%2029.3%208.5%2057.5%2024.8%2082%202.3%203.5%203.6%206.2%203.2%208s-11.9%2062-11.9%2062c-.6%202.9.5%205.8%202.7%207.7%201.5%201.2%203.3%201.8%205.1%201.8%201%200%202-.2%202.9-.6l56.1-22.1c1.8-.7%203.7-1.1%205.7-1.1%200%200%202.4-.2%206.3%201.3%2018.9%207.4%2039.8%2012%2060.7%2012%2046.6%200%2090.4-20.1%20120.1-55.1%200%200%203.2-4.4%206.9-9.6-3.7%201.3-7.9%202.6-12.1%203.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-chatbubbles($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-chatbubbles-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-checkbox-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M216%20357c.4%200%20.4-.1%200-.2-.4.1-.5.2%200%20.2zM340.1%20177.3L215.3%20303l-47.2-47.2-17.9%2017.8%2065.1%2065%20142.3-143.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%2080v352H80V80h352m16-16H64v384h384V64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-checkbox-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-checkbox-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-checkbox-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v384h384V64H64zm152%20293c-.5%200-.4-.1%200-.2.4.1.4.2%200%20.2zm-.7-18.4l-65-65%2017.8-17.8%2047.2%2047.2%20124.8-125.7%2017.5%2018.1-142.3%20143.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M216%20357c.4%200%20.4-.1%200-.2-.4.1-.5.2%200%20.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-checkbox($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-checkbox-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-checkmark-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M340.1%20177.3L215.3%20303l-47.2-47.2-17.8%2017.8%2056%2056c2.5%202.5%205.9%204.5%208.9%204.5s6.3-2%208.8-4.4l133.7-134.4-17.6-18z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-checkmark-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-checkmark-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-checkmark-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm-32.1%20281.7c-2.4%202.4-5.8%204.4-8.8%204.4s-6.4-2.1-8.9-4.5l-56-56%2017.8-17.8%2047.2%2047.2L340%20177.3l17.5%2018.1-133.6%20134.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-checkmark-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-checkmark-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-checkmark-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M223.9%20329.7c-2.4%202.4-5.8%204.4-8.8%204.4s-6.4-2.1-8.9-4.5l-56-56%2017.8-17.8%2047.2%2047.2L340%20177.3l17.5%2018.1-133.6%20134.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-checkmark($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-checkmark-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-clipboard-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%2295.7%22%20r%3D%2216%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%2064h-92.1c4.1%204.6%207.3%2010%209.4%2016H392c4.4%200%208%203.6%208%208v352c0%204.4-3.6%208-8%208H120c-4.4%200-8-3.6-8-8V88c0-4.4%203.6-8%208-8h74.7c2.1-6%205.3-11.4%209.4-16H112c-8.8%200-16%207.2-16%2016v368c0%208.8%207.2%2016%2016%2016h288c8.8%200%2016-7.2%2016-16V80c0-8.8-7.2-16-16-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M176%20111v17h-48v304h256V128h-48v-17c0-8.8-6.4-15-15.2-15H304c0-5.6-1-11-2.7-16-2.1-6-5.3-11.4-9.4-16-8.8-9.9-21.6-16-35.9-16s-27.1%206.1-35.9%2016c-4.1%204.6-7.3%2010-9.4%2016-1.7%205-2.7%2010.4-2.7%2016h-14.5c-8.8%200-17.5%206.2-17.5%2015zm160%2049v-16h32v272H144V144h32v16h160zm-112-48V95.5c0-17.9%2014.1-32%2032-32s32%2014.1%2032%2032V112h32v32H192v-32h32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-clipboard-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-clipboard-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-clipboard-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144%20416h224V144h-16v32H160v-32h-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320.8%2096H304c0-5.6-1-11-2.7-16-2.1-6-5.3-11.4-9.4-16-8.8-9.9-21.6-16-35.9-16s-27.1%206.1-35.9%2016c-4.1%204.6-7.3%2010-9.4%2016-1.7%205-2.7%2010.4-2.7%2016h-14.5c-8.8%200-17.5%206.2-17.5%2015v49h160v-49c0-8.8-6.4-15-15.2-15zM256%20111.7c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20111v1-1zM400%2064h-92.1c4.1%204.6%207.3%2010%209.4%2016l.1.1c.8-.1%201.7-.1%202.6-.1%2017.3%200%2031.4%2013.8%2032%2031v17h32v304H128V128h32v-11c0-17.7%2011.7-34%2032-34h2.7c1.7-9%205.3-14.4%209.4-19H112c-8.8%200-16%207.2-16%2016v368c0%208.8%207.2%2016%2016%2016h288c8.8%200%2016-7.2%2016-16V80c0-8.8-7.2-16-16-16z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-clipboard($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-clipboard-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-clock-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%2288%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22424%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22424%22%20cy%3D%22256%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%2288%22%20cy%3D%22256%22%20r%3D%228%22%2F%3E%3Cg%3E%3Ccircle%20cx%3D%22110.5%22%20cy%3D%22172%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22401.5%22%20cy%3D%22340%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22340%22%20cy%3D%22110.5%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22172%22%20cy%3D%22401.5%22%20r%3D%228%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Ccircle%20cx%3D%22110.5%22%20cy%3D%22340%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22401.5%22%20cy%3D%22172%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22172%22%20cy%3D%22110.5%22%20r%3D%228%22%2F%3E%3Ccircle%20cx%3D%22340%22%20cy%3D%22401.5%22%20r%3D%228%22%2F%3E%3C%2Fg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M269.9%20248c-2.9-5-8.1-7.8-13.4-8l-30-55.4c-2.3-3.8-7.2-5-11-2.7s-5%207.2-2.7%2011l29.6%2054.9c-2.9%204.8-3.2%2011.1-.2%2016.3%201.5%202.5%203.5%204.5%205.9%205.8V384c0%204.4%203.6%208%208%208s8-3.6%208-8V269.9c7.6-4.5%2010.2-14.2%205.8-21.9z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.1%20108.9c-81.2-81.2-212.9-81.2-294.2%200s-81.2%20212.9%200%20294.2c81.2%2081.2%20212.9%2081.2%20294.2%200%2081.2-81.2%2081.2-213%200-294.2zm-12.3%20281.9c-74.3%2074.3-195.3%2074.3-269.6%200-74.3-74.3-74.3-195.3%200-269.6s195.3-74.3%20269.6%200c74.4%2074.3%2074.4%20195.3%200%20269.6z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-clock-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-clock-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-clock-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.1%20108.9c-81.2-81.2-212.9-81.2-294.2%200s-81.2%20212.9%200%20294.2c81.2%2081.2%20212.9%2081.2%20294.2%200%2081.2-81.2%2081.2-213%200-294.2zM256%2080c4.4%200%208%203.6%208%208s-3.6%208-8%208-8-3.6-8-8%203.6-8%208-8zm-152.4%2088c2.2-3.8%207.1-5.1%2010.9-2.9s5.1%207.1%202.9%2010.9c-2.2%203.8-7.1%205.1-10.9%202.9-3.8-2.2-5.1-7.1-2.9-10.9zM88%20264c-4.4%200-8-3.6-8-8s3.6-8%208-8%208%203.6%208%208-3.6%208-8%208zm26.5%2082.9c-3.8%202.2-8.7.9-10.9-2.9-2.2-3.8-.9-8.7%202.9-10.9s8.7-.9%2010.9%202.9c2.2%203.8.9%208.7-2.9%2010.9zm64.4%2058.6c-2.2%203.8-7.1%205.1-10.9%202.9-3.8-2.2-5.1-7.1-2.9-10.9%202.2-3.8%207.1-5.1%2010.9-2.9%203.8%202.2%205.1%207.1%202.9%2010.9zM176%20117.4c-3.8%202.2-8.7.9-10.9-2.9-2.2-3.8-.9-8.7%202.9-10.9%203.8-2.2%208.7-.9%2010.9%202.9s.9%208.7-2.9%2010.9zM256%20432c-4.4%200-8-3.6-8-8s3.6-8%208-8%208%203.6%208%208-3.6%208-8%208zm8-162.1V384c0%204.4-3.6%208-8%208s-8-3.6-8-8V269.8c-2.4-1.4-4.4-3.3-5.9-5.8-3-5.2-2.7-11.5.2-16.3l-29.6-54.9c-2.3-3.8-1-8.7%202.7-11%203.8-2.3%208.7-1%2011%202.7l30%2055.4c5.4.1%2010.6%203%2013.4%208%204.5%207.8%201.9%2017.5-5.8%2022zm80%20138.5c-3.8%202.2-8.7.9-10.9-2.9-2.2-3.8-.9-8.7%202.9-10.9%203.8-2.2%208.7-.9%2010.9%202.9s.9%208.7-2.9%2010.9zm2.9-293.9c-2.2%203.8-7.1%205.1-10.9%202.9-3.8-2.2-5.1-7.1-2.9-10.9%202.2-3.8%207.1-5.1%2010.9-2.9%203.8%202.2%205.1%207.1%202.9%2010.9zM408.4%20344c-2.2%203.8-7.1%205.1-10.9%202.9-3.8-2.2-5.1-7.1-2.9-10.9%202.2-3.8%207.1-5.1%2010.9-2.9s5.1%207.1%202.9%2010.9zm-2.9-165.1c-3.8%202.2-8.7.9-10.9-2.9-2.2-3.8-.9-8.7%202.9-10.9s8.7-.9%2010.9%202.9c2.2%203.8.9%208.7-2.9%2010.9zM424%20264c-4.4%200-8-3.6-8-8s3.6-8%208-8%208%203.6%208%208-3.6%208-8%208z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-clock($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-clock-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-close-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M403.1%20108.9c-81.2-81.2-212.9-81.2-294.2%200s-81.2%20212.9%200%20294.2c81.2%2081.2%20212.9%2081.2%20294.2%200s81.2-213%200-294.2zm-12.3%20281.9c-74.3%2074.3-195.3%2074.3-269.6%200-74.3-74.3-74.3-195.3%200-269.6s195.3-74.3%20269.6%200c74.4%2074.3%2074.4%20195.3%200%20269.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M340.2%20160l-84.4%2084.2-84-83.8-11.8%2011.8%2084%2083.8-84%2083.8%2011.8%2011.8%2084-83.8%2084.4%2084.2%2011.8-11.8-84.4-84.2%2084.4-84.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-close-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-close-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-close-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M403.1%20108.9c-81.2-81.2-212.9-81.2-294.2%200s-81.2%20212.9%200%20294.2c81.2%2081.2%20212.9%2081.2%20294.2%200s81.2-213%200-294.2zM352%20340.2L340.2%20352l-84.4-84.2-84%2083.8-11.8-11.8%2084-83.8-84-83.8%2011.8-11.8%2084%2083.8%2084.4-84.2%2011.8%2011.8-84.4%2084.2%2084.4%2084.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-close-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-close-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-close-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M340.2%20160l-84.4%2084.3-84-83.9-11.8%2011.8%2084%2083.8-84%2083.9%2011.8%2011.7%2084-83.8%2084.4%2084.2%2011.8-11.7-84.4-84.3%2084.4-84.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-close($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-close-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-closed-captioning-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20416H32V96h448v320zM48%20400h416V112H48v288zm222-10h-27.9c-35.7%200-81-.4-113.8-3.4-36.1-3.3-56.5-24.1-59-60l-.5-7.7c-1.7-25-2.8-41.5-2.8-63.1%200-24%20.1-39.1%203.4-71%203.6-35.4%2024-56%2058.9-59.6%2032-3.2%2087.3-3.2%20127.8-3.2%2040.4%200%2095.8%200%20127.8%203.2%2034.9%203.5%2055.2%2024.1%2058.9%2059.6%203.3%2031.9%203.4%2047%203.4%2071%200%2021.5-1.1%2038-2.8%2063l-.5%207.8c-2.4%2035.9-22.8%2056.7-59%2060-33%203-78.2%203.4-113.9%203.4zm-14-16h14c35.4%200%2080.1-.4%20112.3-3.3%2028-2.6%2042.6-17.4%2044.5-45.2l.5-7.8c1.7-24.6%202.8-40.9%202.8-61.9%200-23.5-.1-38.3-3.3-69.4-2.9-28.1-17-42.5-44.6-45.3C351%20138%20296.1%20138%20256%20138c-40.1%200-95%200-126.1%203.2-27.5%202.8-41.7%2017.2-44.6%2045.3-3.2%2031.1-3.3%2045.9-3.3%2069.4%200%2021%201.1%2037.3%202.8%2062l.5%207.7c1.9%2027.8%2016.4%2042.6%2044.5%2045.2%2032.2%203%2076.9%203.3%20112.3%203.3%204.7-.1%209.4-.1%2013.9-.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337.7%20178.4c17.2%200%2029.4%204.3%2037.4%2013.2%205.6%206.2%209.4%2015.8%2011.3%2027.4h-14.1c-5.4-17.7-19.9-29.8-37.9-29.8-11.2%200-20.8%204-27.9%2011.6-6.4%206.8-10.4%2016.2-12.1%2028-.1.5-1.5%2011.3-1.5%2028.2%200%2014.9%201%2023.4%201.3%2025.7%202.2%2023.6%2018.5%2040.1%2039.8%2040.1%2011.1%200%2021.2-4.2%2028.5-11.8%204.8-5%208-11.1%209.8-18.1h14.4c-1.7%2011.7-5.4%2020.8-11.2%2027.3-7.7%208.8-21.7%2013.2-41.7%2013.2-10.1%200-18.9-1.1-26.1-3.4-5.7-1.8-10.4-5-14.2-9.7-4.3-5.3-7.7-13-10.1-22.7-2.6-10.8-4-24.6-4-41.2%200-16.7%201.6-30.6%204.8-41.1%202.9-9.7%206.9-17.3%2011.8-22.7%204.7-5.2%2010.1-8.6%2016.6-10.7%207.4-2.3%2015.9-3.5%2025.1-3.5m0-16c-10.9%200-20.9%201.4-30%204.3-9.1%202.9-17%207.9-23.6%2015.1-6.6%207.2-11.7%2016.8-15.4%2028.9-3.6%2012.1-5.5%2027.3-5.5%2045.7%200%2018%201.5%2033%204.4%2045.1%203%2012.1%207.3%2021.7%2013.1%2028.9%205.8%207.2%2013.1%2012.2%2021.8%2015%208.8%202.8%2019.1%204.2%2030.9%204.2%2025%200%2043-6.4%2053.8-18.7%2010.8-12.3%2016.2-30.3%2016.2-53.9h-46.1v4.1c0%2016.3-10.1%2025.9-23.6%2025.9-13.5%200-22.6-10.8-23.9-25.9%200%200-1.2-7.9-1.2-23.9s1.4-26%201.4-26c2.4-17%2010.7-25.9%2024.2-25.9%2013.4%200%2024.1%2011.6%2024.1%2029.2v.5h45.1c0-21.9-5.5-41.6-16.6-54-10.8-12.4-27.2-18.6-49.1-18.6zM182.8%20178.4c17.2%200%2029.4%204.3%2037.4%2013.2%205.6%206.2%209.4%2015.8%2011.3%2027.4h-14.1c-5.4-17.7-19.9-29.8-37.9-29.8-11.2%200-20.8%204-27.9%2011.6-6.4%206.8-10.4%2016.2-12.1%2028-.1.5-1.5%2011.3-1.5%2028.2%200%2014.9%201%2023.4%201.3%2025.7%202.2%2023.6%2018.5%2040.1%2039.8%2040.1%2011.1%200%2021.2-4.2%2028.5-11.8%204.8-5%208-11.1%209.8-18.1h14.4c-1.7%2011.7-5.4%2020.8-11.2%2027.3-7.7%208.8-21.7%2013.2-41.7%2013.2-10.1%200-18.9-1.1-26.1-3.4-5.7-1.8-10.4-5-14.2-9.7-4.3-5.3-7.7-13-10.1-22.7-2.6-10.8-4-24.6-4-41.2%200-16.7%201.6-30.6%204.8-41.1%202.9-9.7%206.9-17.3%2011.8-22.7%204.7-5.2%2010.1-8.6%2016.6-10.7%207.4-2.3%2015.9-3.5%2025.1-3.5m0-16c-10.9%200-20.9%201.4-30%204.3-9.1%202.9-17%207.9-23.6%2015.1-6.6%207.2-11.7%2016.8-15.4%2028.9-3.6%2012.1-5.5%2027.3-5.5%2045.7%200%2018%201.5%2033%204.4%2045.1%203%2012.1%207.3%2021.7%2013.1%2028.9%205.8%207.2%2013.1%2012.2%2021.8%2015%208.8%202.8%2019.1%204.2%2030.9%204.2%2025%200%2043-6.4%2053.8-18.7%2010.8-12.3%2016.2-30.3%2016.2-53.9h-46.1v4.1c0%2016.3-10.1%2025.9-23.6%2025.9-13.5%200-22.6-10.8-23.9-25.9%200%200-1.2-7.9-1.2-23.9s1.4-26%201.4-26c2.4-17%2010.7-25.9%2024.2-25.9%2013.4%200%2024.1%2011.6%2024.1%2029.2v.5h45.1c0-21.9-5.5-41.6-16.6-54-10.8-12.4-27.2-18.6-49.1-18.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-closed-captioning-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-closed-captioning-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-closed-captioning-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2096v320h448V96H32zm398%20159.8c0%2020.9-1.1%2037.2-2.8%2061.9l-.5%207.8c-1.9%2027.8-16.4%2042.6-44.5%2045.2-32.2%203-76.9%203.3-112.3%203.3h-27.8c-35.4%200-80.2-.4-112.3-3.3-28-2.6-42.6-17.4-44.5-45.2l-.5-7.7c-1.7-24.7-2.8-41-2.8-62%200-23.5.1-38.3%203.3-69.4%202.9-28.1%2017-42.5%2044.6-45.3%2031.2-3.2%2086.1-3.2%20126.1-3.2%2040.1%200%2095%200%20126.2%203.2%2027.5%202.8%2041.7%2017.2%2044.6%2045.3%203.1%2031.1%203.3%2045.9%203.2%2069.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337.7%20162.4c-10.9%200-20.9%201.4-30%204.3-9.1%202.9-17%207.9-23.6%2015.1-6.6%207.2-11.7%2016.8-15.4%2028.9-3.6%2012.1-5.5%2027.3-5.5%2045.7%200%2018%201.5%2033%204.4%2045.1%203%2012.1%207.3%2021.7%2013.1%2028.9%205.8%207.2%2013.1%2012.2%2021.8%2015%208.8%202.8%2019.1%204.2%2030.9%204.2%2025%200%2043-6.4%2053.8-18.7%2010.8-12.3%2016.2-30.3%2016.2-53.9h-46.1v4.1c0%2016.3-10.1%2025.9-23.6%2025.9-13.5%200-22.6-10.8-23.9-25.9%200%200-1.2-7.9-1.2-23.9s1.4-26%201.4-26c2.4-17%2010.7-25.9%2024.2-25.9%2013.4%200%2024.1%2011.6%2024.1%2029.2v.5h45.1c0-21.9-5.5-41.6-16.6-54-10.8-12.4-27.2-18.6-49.1-18.6zM182.8%20162.4c-10.9%200-20.9%201.4-30%204.3-9.1%202.9-17%207.9-23.6%2015.1-6.6%207.2-11.7%2016.8-15.4%2028.9-3.6%2012.1-5.5%2027.3-5.5%2045.7%200%2018%201.5%2033%204.4%2045.1%203%2012.1%207.3%2021.7%2013.1%2028.9%205.8%207.2%2013.1%2012.2%2021.8%2015%208.8%202.8%2019.1%204.2%2030.9%204.2%2025%200%2043-6.4%2053.8-18.7%2010.8-12.3%2016.2-30.3%2016.2-53.9h-46.1v4.1c0%2016.3-10.1%2025.9-23.6%2025.9-13.5%200-22.6-10.8-23.9-25.9%200%200-1.2-7.9-1.2-23.9s1.4-26%201.4-26c2.4-17%2010.7-25.9%2024.2-25.9%2013.4%200%2024.1%2011.6%2024.1%2029.2v.5h45.1c0-21.9-5.5-41.6-16.6-54-10.8-12.4-27.2-18.6-49.1-18.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-closed-captioning($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-closed-captioning-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M274.3%20176c14%200%2027.2%205.3%2037.4%2014.9%2010.2%209.7%2016.6%2023.1%2018.2%2037.7l1.3%2012.1%2012.1%202c14.4%202.3%2024.8%2015%2024.8%2030.2%200%208.4-3.2%2016.2-8.9%2022.2-5.6%205.8-12.9%209-20.6%209H173.4c-7.7%200-15-3.2-20.6-9-5.7-6-8.9-13.9-8.9-22.2%200-14.3%208.9-26.8%2022.1-31.1l10.9-3.5.2-11.4c.2-11.2%209-20.4%2019.7-20.4%202.8%200%208.4%201.1%2012.1%202.8s8.8%204%208.8%204l7.6-10.9c10.4-16.3%2029.2-26.4%2049-26.4m0-16c-25.6%200-49.4%2013.4-62.5%2033.8-4.5-2.1-9.6-3.4-14.9-3.4-19.5%200-35.4%2016.1-35.7%2036.1-20%206.5-33.2%2025.2-33.2%2046.2%200%2025.7%2020.3%2047.2%2045.4%2047.2h165.1c25.1%200%2045.4-21.4%2045.4-47.2%200-23.2-16.6-42.4-38.3-45.9-3.8-37.5-33.6-66.8-71.3-66.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064c25.9%200%2051.1%205.1%2074.7%2015.1%2022.9%209.7%2043.4%2023.5%2061%2041.2%2017.6%2017.6%2031.5%2038.2%2041.2%2061%2010%2023.7%2015.1%2048.8%2015.1%2074.7s-5.1%2051.1-15.1%2074.7c-9.7%2022.9-23.5%2043.4-41.2%2061-17.6%2017.6-38.2%2031.5-61%2041.2-23.7%2010-48.8%2015.1-74.7%2015.1-25.9%200-51.1-5.1-74.7-15.1-22.9-9.7-43.4-23.5-61-41.2-17.6-17.6-31.5-38.2-41.2-61C69.1%20307.1%2064%20281.9%2064%20256s5.1-51.1%2015.1-74.7c9.7-22.9%2023.5-43.4%2041.2-61%2017.6-17.6%2038.2-31.5%2061-41.2C204.9%2069.1%20230.1%2064%20256%2064m0-16C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm82.6%20272H173.4c-25.1%200-45.4-21.4-45.4-47.2%200-21%2013.2-39.8%2033.2-46.2.3-20%2016.2-36.1%2035.7-36.1%205.3%200%2010.4%201.2%2014.9%203.4%2013.1-20.5%2036.9-33.8%2062.5-33.8%2037.7%200%2067.5%2029.3%2071.4%2066.9%2021.7%203.5%2038.3%2022.7%2038.3%2045.9%200%2025.7-20.3%2047.1-45.4%2047.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-done-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M309.2%20216l-77%2076.9L203%20264l-11%2011%2034.6%2034.3c1.5%201.5%203.6%202.8%205.5%202.8s3.9-1.2%205.4-2.7l82.5-82.2-10.8-11.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M413%20226.1C406.1%20161.9%20354%20112%20288%20112c-44.8%200-86.5%2022.8-109.4%2057.7-7.9-3.7-16.8-5.7-26.1-5.7-34.2%200-62%2027.5-62.5%2061.6-34.9%2011-58%2042.6-58%2078.4%200%2043.9%2035.6%2080%2079.5%2080h289c43.9%200%2079.5-36.1%2079.5-80%200-39.6-29-71.9-67-77.9zM400.5%20368h-289c-35%200-63.5-28.8-63.5-64%200-14.3%204.4-27%2012.8-38.6%208.5-11.6%2020.2-20.2%2034-24.5l11-3.5.2-11.6c.2-12.3%205.1-23.8%2013.8-32.4%208.8-8.6%2020.3-13.4%2032.6-13.4%206.8%200%2013.3%201.4%2019.4%204.2l12.5%205.8%207.6-11.5c20.8-31.8%2057.9-50.7%2095.8-50.7%2027.8%200%2052.5%2010.3%2073.1%2028.9%2020.5%2018.5%2033.3%2043.7%2036.3%2071l1.3%2012.2%2012.1%201.9c14.7%202.3%2028.3%209.9%2038.1%2021.4%209.9%2011.6%2015.4%2025.6%2015.4%2040.8%200%2035.2-28.5%2064-63.5%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-done-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-done-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-done-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M413%20226.1C406.1%20161.9%20354%20112%20288%20112c-44.8%200-86.5%2022.8-109.4%2057.7-7.9-3.7-16.8-5.7-26.1-5.7-34.2%200-62%2027.5-62.5%2061.6-34.9%2011-58%2042.6-58%2078.4%200%2043.9%2035.6%2080%2079.5%2080h289c43.9%200%2079.5-36.1%2079.5-80%200-39.6-29-71.9-67-77.9zm-175.5%2083.2c-1.5%201.5-3.6%202.7-5.4%202.7s-4-1.3-5.5-2.8L192%20275l11-10.9%2029.2%2028.9%2077-76.9%2010.8%2011.1-82.5%2082.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-done($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-done-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-download-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M177.118%20361.93l-11.616%2011.603L256%20464l90.58-90.442-11.615-11.604-70.695%2070.634V208h-16.43v224.588z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M413.012%20162.113C406.146%2097.895%20354.042%2048%20288%2048c-44.838%200-86.535%2022.812-109.396%2057.715A62.24%2062.24%200%200%200%20152.5%20100c-34.208%200-61.98%2027.487-62.477%2061.577C55.093%20172.613%2032%20204.157%2032%20240c0%2043.906%2035.594%2080%2079.5%2080H208v-16h-96.5C76.486%20304%2048%20275.152%2048%20240c0-14.272%204.443-27.047%2012.85-38.6%208.47-11.64%2020.226-20.154%2033.994-24.504l11.01-3.51.168-11.562c.18-12.274%205.093-23.795%2013.837-32.425%208.75-8.638%2020.343-13.397%2032.64-13.397a46.08%2046.08%200%200%201%2019.41%204.246l12.524%205.765%207.555-11.533c20.806-31.768%2057.856-50.732%2095.76-50.732%2027.814%200%2052.48%2010.265%2073.09%2028.904%2020.467%2018.51%2033.345%2043.737%2036.264%2071.035l1.303%2012.187%2012.107%201.915c14.727%202.33%2028.253%209.922%2038.087%2021.38C458.53%20210.745%20464%20224.76%20464%20240c0%2035.152-28.486%2064-63.5%2064H304v16h96.5c43.906%200%2079.5-36.094%2079.5-80%200-39.648-29.027-71.884-66.988-77.887z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-download-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-download-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-download-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M248%20432.588l-70.802-70.658-11.656%2011.603L256.02%20464l90.57-90.442-11.755-11.604L264%20432.588V320h-16zM413.012%20162.113C406.146%2097.895%20354.042%2048%20288%2048c-44.838%200-86.535%2022.812-109.396%2057.715A62.24%2062.24%200%200%200%20152.5%20100c-34.208%200-61.98%2027.487-62.477%2061.577C55.093%20172.613%2032%20204.157%2032%20240c0%2043.906%2035.594%2080%2079.5%2080H248V208h16v112h136.5c43.906%200%2079.5-36.094%2079.5-80%200-39.648-29.027-71.884-66.988-77.887z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-download($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-download-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M413.012%20226.113C406.146%20161.895%20354.042%20112%20288%20112c-44.838%200-86.535%2022.812-109.396%2057.715A62.24%2062.24%200%200%200%20152.5%20164c-34.208%200-61.98%2027.487-62.477%2061.577C55.093%20236.613%2032%20268.157%2032%20304c0%2043.906%2035.594%2080%2079.5%2080h289c43.906%200%2079.5-36.094%2079.5-80%200-39.648-29.027-71.884-66.988-77.887zM400.5%20368h-289C76.486%20368%2048%20339.152%2048%20304c0-14.272%204.443-27.047%2012.85-38.6%208.47-11.64%2020.226-20.154%2033.994-24.504l11.01-3.51.168-11.562c.18-12.274%205.093-23.795%2013.837-32.425%208.75-8.638%2020.343-13.397%2032.64-13.397a46.08%2046.08%200%200%201%2019.41%204.246l12.524%205.765%207.555-11.533c20.806-31.768%2057.856-50.732%2095.76-50.732%2027.814%200%2052.48%2010.265%2073.09%2028.904%2020.467%2018.51%2033.345%2043.737%2036.264%2071.035l1.303%2012.187%2012.107%201.915c14.727%202.33%2028.253%209.922%2038.087%2021.38C458.53%20274.745%20464%20288.76%20464%20304c0%2035.152-28.486%2064-63.5%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-upload-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M334.965%20262.07l11.616-11.603L256.083%20160l-90.58%2090.443%2011.616%2011.604%2070.694-70.635V448h16.43V191.412z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M413.012%20178.113C406.146%20113.895%20354.042%2064%20288%2064c-44.838%200-86.535%2022.812-109.396%2057.715A62.24%2062.24%200%200%200%20152.5%20116c-34.208%200-61.98%2027.487-62.477%2061.577C55.093%20188.613%2032%20220.157%2032%20256c0%2043.906%2035.594%2080%2079.5%2080H208v-16h-96.5C76.486%20320%2048%20291.152%2048%20256c0-14.272%204.443-27.047%2012.85-38.6%208.47-11.64%2020.226-20.154%2033.994-24.504l11.01-3.51.168-11.562c.18-12.274%205.093-23.795%2013.837-32.425%208.75-8.638%2020.343-13.397%2032.64-13.397a46.08%2046.08%200%200%201%2019.41%204.246l12.524%205.765%207.555-11.533c20.806-31.768%2057.856-50.732%2095.76-50.732%2027.814%200%2052.48%2010.265%2073.09%2028.904%2020.467%2018.51%2033.345%2043.737%2036.264%2071.035l1.303%2012.187%2012.107%201.915c14.727%202.33%2028.253%209.922%2038.087%2021.38C458.53%20226.745%20464%20240.76%20464%20256c0%2035.152-28.486%2064-63.5%2064H304v16h96.5c43.906%200%2079.5-36.094%2079.5-80%200-39.648-29.027-71.884-66.988-77.887z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-upload-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-upload-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-upload-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M248%20336h16v112h-16zM413.012%20178.113C406.146%20113.895%20354.042%2064%20288%2064c-44.838%200-86.535%2022.812-109.396%2057.715A62.24%2062.24%200%200%200%20152.5%20116c-34.208%200-61.98%2027.487-62.477%2061.577C55.093%20188.613%2032%20220.157%2032%20256c0%2043.906%2035.594%2080%2079.5%2080H248V191.412l-70.788%2070.635-11.663-11.604L256.104%20160l90.487%2090.467-11.742%2011.603L264%20191.412V336h136.5c43.906%200%2079.5-36.094%2079.5-80%200-39.648-29.027-71.884-66.988-77.887z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud-upload($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-upload-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloud-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M413.012%20226.113C406.146%20161.895%20354.042%20112%20288%20112c-44.838%200-86.535%2022.812-109.396%2057.715A62.24%2062.24%200%200%200%20152.5%20164c-34.208%200-61.98%2027.487-62.477%2061.577C55.093%20236.613%2032%20268.157%2032%20304c0%2043.906%2035.594%2080%2079.5%2080h289c43.906%200%2079.5-36.094%2079.5-80%200-39.648-29.027-71.884-66.988-77.887z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloud($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloud-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloudy-night-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M276.6%20295.4c-.5%200-1.1-.1-1.6-.1-2.6%200-5.2%200-7.8.3C258%20254.8%20221.6%20224%20178%20224c-50.5%200-91.5%2041-91.5%2091.6%200%203.1.2%206.1.5%209.1-30.8%202.7-55%2030.2-55%2061.8%200%2033.4%2026.6%2062.5%2060%2062.5h184.6c41.7%200%2075.4-34.8%2075.4-76.5s-33.8-77.1-75.4-77.1zM318.5%20415c-11.3%2011.4-26.2%2018-41.9%2018H92c-11.6%200-22.6-5.1-30.9-13.9-8.3-8.7-13.1-20.8-13.1-32.8%200-11.4%204.2-22.4%2011.9-31%207.6-8.5%2017.7-13.7%2028.5-14.7l16.1-1.4-1.6-16.1c-.2-2.5-.4-5.1-.4-7.6%200-41.7%2033.9-75.6%2075.5-75.6%2017.4%200%2033.8%205.8%2047.4%2016.9%2013.2%2010.8%2022.5%2025.8%2026.2%2042.3l3.2%2014.2%2014.4-1.9c1.6-.2%203.7-.4%205.8-.4h1.6c15.7%200%2030.6%206.5%2041.9%2018.1%2011.3%2011.6%2017.6%2027%2017.6%2043-.1%2016.1-6.3%2031.5-17.6%2042.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M450%20306c-2.5.1-5%20.2-7.5.2-41.4%200-80.4-15.8-109.7-44.4-29.3-28.6-45.4-66.6-45.4-107.1%200-23%205.2-45.3%2015.2-65.5%204.4-8.9%208.9-17.3%2015-25.3h-.3c-10.8%201.2-20.2%203.3-30.3%206.4-61.8%2019-107.8%2072.7-114.1%20137.7%201.8-.1%203.5-.1%205.3-.1%203.6%200%207.2.2%2010.8.6%202.7-25.8%2012.4-50.1%2028.4-71.1%2017.2-22.6%2041.3-40.1%2068.3-49.7-9.4%2021.1-14.2%2043.6-14.2%2067%200%2044.8%2017.9%2086.9%2050.3%20118.5%2032.3%2031.5%2075.2%2048.9%20120.9%2048.9h2.4c-20.8%2021.7-47.8%2036.4-77.1%2042.6.2%202.4.3%204.8.3%207.2%200%203.1-.2%206.1-.4%209.1%2037.5-7%2070.4-26.4%2094.2-53.7%206.9-7.9%2013-15.3%2018.3-24.5-10.1%202.5-20.2%202.7-30.4%203.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloudy-night-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloudy-night-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloudy-night-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M276.6%20295.2c-2.5%200-4.9%200-7.3.2-.7.1-1.4.1-2.1.2-4.3-19.1-14.5-35.9-28.6-48.5-1-.9-2.1-1.8-3.1-2.7-1-.8-2-1.6-3-2.3-1.4-1.1-2.9-2.1-4.4-3-2.8-1.8-5.6-3.5-8.6-5-1.1-.6-2.3-1.1-3.4-1.7-11.6-5.4-24.5-8.4-38.1-8.4h-2.9c-.1%200-.2-.1-.3-.1H172v.1c-48%203.1-85.5%2042.9-85.5%2091.5%200%203.1.2%206.1.5%209.1-30.8%202.7-55%2029.7-55%2061.3%200%202.1.1%204.2.3%206.2%203%2030.7%2028.4%2055.8%2059.7%2055.8h184.6c37.8%200%2069.1-28.2%2074.6-64.6.2-1.1.3-2.1.4-3.2%200-.4.1-.8.1-1.2.1-.8.1-1.6.2-2.4%200-.4%200-.7.1-1.1.1-1.1.1-2.3.1-3.5%200-5.2-.5-10.3-1.5-15.3-7.2-34.6-37.6-61.4-74-61.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M450%20306c-2.5.1-5%20.2-7.5.2-41.4%200-80.4-15.8-109.7-44.4-29.3-28.6-45.4-66.6-45.4-107.1%200-23%205.2-45.3%2015.2-65.5%204.4-8.9%208.9-17.3%2015-25.3h-.3c-10.8%201.2-20.2%203.3-30.3%206.4-61.8%2019-107.8%2072.7-114.1%20137.7%201.8-.1%203.5-.1%205.3-.1%2024.5%200%2048.5%208.5%2067.6%2024.1%2015.2%2012.4%2026.8%2028.8%2033.5%2047.1%2023.5.6%2045.5%2010.4%2062.3%2027.6%2017.2%2017.6%2026.6%2040.8%2026.6%2065.2%200%203.1-.2%206.1-.4%209.1%2037.5-7%2070.4-26.4%2094.2-53.7%206.9-7.9%2013-15.3%2018.3-24.5-10%202.5-20.1%202.7-30.3%203.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloudy-night($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloudy-night-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloudy-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M236%20112c28.5%200%2054%209.4%2073.6%2027.1%2017.7%2015.9%2030.4%2038.3%2035.8%2063l2.9%2013.3%2013.7-.9c1.6-.1%203.7-.1%205.1-.1h7.2c23.6%200%2046%209.8%2063.1%2027.5%2017.1%2017.8%2026.5%2041%2026.5%2065.4%200%2024.3-9.4%2047.7-26.4%2065.1-17%2017.3-39.8%2027.4-63.6%2027.4H116c-18.1%200-34.6-7.9-47.7-21.4-13.1-13.3-20.3-31.3-20.3-50%200-17.9%206.6-35.5%2018.5-49.4%2011.8-13.8%2027.4-22.3%2043.9-23.7l16.1-1.5-1.6-16c-.3-3.4-.7-7.3-.7-11.3%200-30.3%2011.8-59%2033.1-80.8C178.6%20124%20206.6%20112%20236%20112m0-16c-70%200-127.8%2059.7-127.8%20130.8%200%204.3.3%208.6.8%2012.8-43.2%203.9-77%2044-77%2088.4%200%2047%2037.9%2088%2084.6%2088h257.8c58.3%200%20105.6-49.4%20105.6-108s-47.3-108.8-105.6-108.8c-2.3%200-4.8-.2-7.2-.2-2.1%200-4.2%200-6.1.1C349.3%20145.6%20306%2096%20236%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloudy-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloudy-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cloudy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M236%2096c-70%200-127.8%2059.7-127.8%20130.8%200%204.3.3%208.6.8%2012.8-43.2%203.9-77%2044-77%2088.4%200%2047%2037.9%2088%2084.6%2088h257.8c58.3%200%20105.6-49.4%20105.6-108s-47.3-108.8-105.6-108.8c-2.3%200-4.8-.2-7.2-.2-2.1%200-4.2%200-6.1.1C349.3%20145.6%20306%2096%20236%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cloudy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cloudy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-code-download-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20160.2l13.8-13.2L448%20256%20333.8%20365%20320%20351.8%20420.4%20256zM192%20160.2L178.2%20147%2064%20256l114.2%20109%2013.8-13.2L91.6%20256z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M318.9%20255.5l11.6%2011.6-74.5%2068.5-74.5-68.5%2011.6-11.6%2054.7%2048.7V176.4h16.4v127.8z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-code-download($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-code-download-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-code-working-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20160.2l13.8-13.2L448%20256%20333.8%20365%20320%20351.8%20420.4%20256zM192%20160.2L178.2%20147%2064%20256l114.2%20109%2013.8-13.2L91.6%20256z%22%2F%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22256%22%20r%3D%2216%22%2F%3E%3Ccircle%20cx%3D%22192%22%20cy%3D%22256%22%20r%3D%2216%22%2F%3E%3Ccircle%20cx%3D%22320%22%20cy%3D%22256%22%20r%3D%2216%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-code-working($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-code-working-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-code-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20160.2l13.8-13.2L448%20256%20333.8%20365%20320%20351.8%20420.4%20256zM192%20160.2L178.2%20147%2064%20256l114.2%20109%2013.8-13.2L91.6%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-code($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-code-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cog-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M261.1%2080l5.6%2022.4%202.5%209.9%2010%201.9%2012.3%202.4%209.7%201.9%206-7.9L321.4%2092l6.6%202.7-3.4%2022.7-1.5%209.9%208.3%205.7%2010.7%207.3%208.3%205.7%208.7-5%2019.6-11.3%205.1%205.1-11.3%2019-5.3%208.9%206%208.5%207.5%2010.6%205.6%208%209.7-1.3%2022.1-3.1%202.8%206.7-17.8%2013.5-7.9%206%201.8%209.7%202.5%2013.2%201.9%209.9%209.8%202.6%2021.1%205.6v7.3l-21.1%205.5-9.9%202.6-1.8%2010.1-2.5%2013.5-1.8%209.7%207.9%205.9%2017.3%2013-2.8%206.6-21.5-3.1-9.8-1.4-5.6%208.1-7.9%2011.4-5.8%208.4%205.1%208.8%2010.6%2018.3-5.2%205.2-18.5-10.7-9-5.3-8.4%206.1-10.2%207.4-7.8%205.7%201.4%209.6%203.2%2021.4-6.7%202.8-13.2-17.3-6.1-7.9-9.8%202-13.6%202.7-9.9%202-2.4%209.8L261%20432h-7.2l-5.7-21.4-2.5-9.6-9.7-2-13.4-2.8-10-2.1-6.1%208.2-13.2%2017.8-6.7-2.8%202.9-22.1%201.3-10-8.4-5.5-11.2-7.3-8.4-5.5-8.6%205.2-19.5%2011.7-5-5%2011.7-20%204.9-8.4-5.2-8.2-7.1-11.3-5.5-8.8-10.3%201.5-22.6%203.4-2.8-6.6%2018.4-13.8%208.1-6.1-2-9.9-2.5-12.5-2-9.9-9.7-2.5-23-5.8v-7.1l23-5.8%209.6-2.4%202.1-9.7%202.6-12.2%202.2-10-8.2-6.2-19-14.3%202.8-6.7%2023.2%203.3%2010.2%201.4%205.5-8.7%206.7-10.5%205.3-8.3-5.1-8.5-12.4-20.8%205-5%2020.6%2012.3%208.3%205%208.3-5.1%2011.7-7.2%208.9-5.5-1.4-10.3-3.2-23.5%206.7-2.8%2014.1%2019%206%208.1%209.9-1.9%2012.1-2.3%209.9-1.9%202.6-9.8%206-22.8h7.1M273.5%2064h-32l-9.2%2034.7-12.1%202.3-21.5-29.1-29.6%2012.3%204.8%2035.7-11.7%207.2-31.2-18.8-22.6%2022.6%2018.8%2031.5-6.7%2010.5-35.5-5-12.2%2029.6%2028.9%2021.7-2.7%2012.2-35%208.9v32l34.9%208.9%202.5%2012.5L73.1%20315l12.3%2029.5%2035-5%207.1%2011.3-17.9%2030.6%2022.6%2022.6%2030.2-18.2%2011.2%207.3-4.5%2034.3%2029.6%2012.2%2020.6-27.8%2013.4%202.8%208.8%2033.4h32l8.3-33.4%2013.6-2.7%2020.7%2027%2029.6-12.2-5-33.7%2010.2-7.4%2029%2016.9%2022.6-22.6-16.8-28.9%207.9-11.4%2033.8%204.8%2012.3-29.5-27.2-20.5%202.5-13.5%2033-8.6v-32l-33-8.7-2.5-13.2%2027.7-20.9-12.2-29.7-34.4%204.8-7.5-10.6%2017.7-29.7-22.6-22.6-30.2%2017.4-10.7-7.3%205.3-35-29.5-12.3-21.6%2028.3-12.3-2.4-8.7-34.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20128c-70.7%200-128%2057.3-128%20128s57.3%20128%20128%20128%20128-57.3%20128-128-57.3-128-128-128zM145.4%20273.5c-.9-5.8-1.4-11.6-1.4-17.5%200-29.9%2011.7-58%2032.8-79.2C198%20155.7%20226.1%20144%20256%20144c6%200%2011.9.5%2017.8%201.4%201.4.2%202.9.5%204.3.8l-27.8%20103.9L146.1%20278c-.2-1.5-.5-3-.7-4.5zm180.3%2070.2C306%20359.4%20281.6%20368%20256%20368c-29.9%200-58-11.7-79.2-32.8-11.1-11.1-19.5-24-25.1-38.2-.4-1.1-.9-2.2-1.2-3.3l103.4-27.5%2074.9%2074.9c-1%20.9-2%201.7-3.1%202.6zm17.2-17.1c-.9%201.1-1.8%202.2-2.8%203.3l-75-75%2028-104.6%203.3%201.2c14.3%205.6%2027.4%2014.1%2038.6%2025.2%2021.3%2021.3%2033%2049.4%2033%2079.3%200%2026-8.8%2050.7-25.1%2070.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cog-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cog-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cog-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M296.6%20151.6l-3.3-1.2-28%20104.6%2075%2075c1-1.1%201.9-2.2%202.8-3.3%2016.1-20%2024.9-44.7%2024.9-70.7%200-29.9-11.7-58-32.8-79.2-11.2-11.2-24.3-19.7-38.6-25.2zM278.1%20146.2c-1.4-.3-2.9-.5-4.3-.8-5.8-.9-11.8-1.4-17.8-1.4-29.9%200-58%2011.7-79.2%2032.8C155.7%20198%20144%20226.1%20144%20256c0%205.9.5%2011.8%201.4%2017.5.2%201.5.5%203%20.8%204.4L250.4%20250l27.7-103.8zM150.5%20293.7l1.2%203.3c5.6%2014.1%2014%2027.1%2025.1%2038.2C198%20356.3%20226.1%20368%20256%20368c25.6%200%2050-8.6%2069.7-24.3%201.1-.8%202.1-1.7%203.1-2.6l-74.9-74.9-103.4%2027.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20272.8v-32l-33.3-8.7-2.6-13.2%2027.6-20.9-12.2-29.6-34.4%204.8-7.5-10.6%2017.7-29.7-22.6-22.6-30.2%2017.4-10.7-7.3%205.3-35L315.6%2073%20294%20101.3l-12.3-2.6L273%2064h-32l-9.2%2034.9-12.1%202.4-21.5-29-29.6%2012.3%204.8%2035.7-11.7%207.2-31.3-18.7-22.6%2022.6%2018.8%2031.5-6.7%2010.5-35.5-5L72.3%20198l28.9%2021.7-2.4%2012.2-34.8%208.9v32l34.7%208.9%202.4%2012.5-28.4%2021.3L85%20345.1l35-5%207.1%2011.3-17.9%2030.6%2022.6%2022.6%2030.2-18.2%2011.2%207.3-4.5%2034.3%2029.6%2012.2%2020.6-27.8%2013.4%202.5%208.8%2033.1h32l8.3-33.1%2013.6-2.6%2020.7%2027.1%2029.6-12.2-5-33.7%2010.2-7.4%2029%2016.9%2022.6-22.6-16.8-28.9%207.9-11.4%2033.8%204.8%2012.3-29.5-27.3-20.5%202.7-13.5%2033.3-8.6zM256%20384c-70.7%200-128-57.3-128-128s57.3-128%20128-128%20128%2057.3%20128%20128-57.3%20128-128%20128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cog($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cog-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-fill-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M411.4%20300.3l-183.8-182L171.4%2062c-9.3-9.3-21.6-14-33.9-14-12.3%200-24.6%204.7-33.9%2014-18.7%2018.7-18.7%2049.2%200%2067.9l49.3%2049.3L48%20283.4%20219.3%20448s135.1-130.7%20146.1-141.7c5.8-5.8%2018.2-7.1%2028.6-7.1%209.5%200%2017.4%201.1%2017.4%201.1zM114.8%20118.6c-6-6-9.3-14-9.3-22.6%200-8.6%203.3-16.6%209.3-22.6%206-6%2014-9.3%2022.6-9.3%208.6%200%2016.6%203.3%2022.6%209.3l49.5%2049.5-45.4%2045.1-49.3-49.4zM354%20295c-8.9%208.9-102.3%2099.3-134.8%20130.8L70.9%20283.2l149.9-149.1%20152.6%20151.1c-8.3%201.9-14.7%205.2-19.4%209.8zM416%20336s-48%2053.3-48%2079.9c0%2026.6%2021.5%2048.1%2048%2048.1s48-21.6%2048-48.1c0-26.6-48-79.9-48-79.9zm22.6%20102.6c-6%206.1-14.1%209.4-22.6%209.4-17.6%200-32-14.4-32-32.1%200-1.9%201-12.8%2020.8-40.3%203.9-5.4%207.7-10.4%2011.2-14.7%203.4%204.2%207.2%209.2%2011%2014.5%2020%2027.7%2021%2038.6%2021%2040.5%200%208.6-3.3%2016.6-9.4%2022.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-fill-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-fill-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-fill-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M411.4%20300.3l-183.8-182L171.4%2062c-9.3-9.3-21.6-14-33.9-14-12.3%200-24.6%204.7-33.9%2014-18.7%2018.7-18.7%2049.2%200%2067.9l49.3%2049.3L48%20283.4%20219.3%20448s135.1-130.7%20146.1-141.7c5.8-5.8%2018.2-7.1%2028.6-7.1%209.5%200%2017.4%201.1%2017.4%201.1zM114.8%20118.6c-6-6-9.3-14-9.3-22.6%200-8.6%203.3-16.6%209.3-22.6%206-6%2014-9.3%2022.6-9.3%208.6%200%2016.6%203.3%2022.6%209.3l49.5%2049.5-45.4%2045.1-49.3-49.4zM416%20336s-48%2053.3-48%2079.9c0%2026.6%2021.5%2048.1%2048%2048.1s48-21.6%2048-48.1c0-26.6-48-79.9-48-79.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-fill($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-fill-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-filter-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M366.195%20212.122A112.58%20112.58%200%200%200%20368%20192c0-61.856-50.144-112-112-112s-112%2050.144-112%20112c0%206.87.62%2013.594%201.805%2020.122C98.615%20225.302%2064%20268.606%2064%20320c0%2061.856%2050.144%20112%20112%20112%2031.342%200%2059.67-12.878%2080-33.626C276.33%20419.122%20304.658%20432%20336%20432c61.856%200%20112-50.144%20112-112%200-51.394-34.616-94.697-81.805-107.878zM160%20192c0-52.935%2043.064-96%2096-96s96%2043.065%2096%2096c0%205.776-.512%2011.435-1.494%2016.933-4.75-.614-9.59-.934-14.506-.934-31.342%200-59.67%2012.878-80%2033.626C235.67%20220.878%20207.342%20208%20176%20208c-4.916%200-9.757.318-14.506.933A96.248%2096.248%200%200%201%20160%20192zm112%20128c0%2019.58-5.895%2037.806-16%2053.006-10.104-15.2-16-33.426-16-53.006%200-5.776.512-11.435%201.494-16.933a113.082%20113.082%200%200%200%2029.012%200A96.248%2096.248%200%200%201%20272%20320zm-16-32a96.29%2096.29%200%200%201-10.314-.555A95.787%2095.787%200%200%201%20256%20266.995a95.74%2095.74%200%200%201%2010.314%2020.45A96.29%2096.29%200%200%201%20256%20288zm-26.21-3.636c-29.755-8.455-53.665-30.937-64.104-59.81%203.39-.364%206.83-.556%2010.314-.556%2027.353%200%2052.07%2011.5%2069.572%2029.917a111.686%20111.686%200%200%200-15.78%2030.45zm36.638-30.447C283.93%20235.5%20308.648%20224%20336%20224c3.484%200%206.925.19%2010.314.555-10.44%2028.873-34.35%2051.354-64.105%2059.81a111.637%20111.637%200%200%200-15.782-30.448zM176%20416c-52.936%200-96-43.064-96-96%200-43.852%2029.554-80.93%2069.79-92.364%2011.733%2034.983%2040.266%2062.257%2076.015%2072.243A112.57%20112.57%200%200%200%20224%20320c0%2024.717%208.012%2047.56%2021.572%2066.084C228.07%20404.5%20203.352%20416%20176%20416zm160%200c-27.354%200-52.07-11.5-69.572-29.917C279.988%20367.56%20288%20344.717%20288%20320c0-6.87-.62-13.594-1.805-20.12%2035.75-9.987%2064.28-37.26%2076.014-72.244C402.445%20239.07%20432%20276.15%20432%20320c0%2052.936-43.064%2096-96%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-filter-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-filter-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-filter-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M366.194%20212.122A112.58%20112.58%200%200%200%20368%20192c0-61.856-50.145-112-112-112-61.857%200-112%2050.144-112%20112%200%206.87.62%2013.594%201.805%2020.122C98.618%20225.302%2064%20268.606%2064%20320c0%2061.855%2050.144%20112%20112%20112%2031.34%200%2059.67-12.88%2080-33.627C276.328%20419.12%20304.658%20432%20336%20432c61.854%200%20112-50.145%20112-112%200-51.394-34.62-94.697-81.806-107.878zm-110.196%20183.25c-.484.496-.98.983-1.475%201.47a112.83%20112.83%200%200%201-8.95-10.76C232.01%20367.56%20223.997%20344.718%20223.997%20320c0-6.87.622-13.594%201.807-20.12-35.75-9.987-64.28-37.26-76.014-72.244a111.193%20111.193%200%200%201-3.82-14.66c.94-.29%201.88-.588%202.834-.853-.046-.252-.085-.507-.13-.76a111.516%20111.516%200%200%201%2012.82-2.43c4.75-.614%209.59-.933%2014.506-.933%2031.34%200%2059.67%2012.878%2080%2033.626C276.328%20220.878%20304.658%20208%20336%20208c4.915%200%209.756.32%2014.505.934%204.355.563%208.633%201.38%2012.816%202.43-.042.252-.08.506-.128.76.955.266%201.895.563%202.838.854-.95%205.012-2.23%209.907-3.822%2014.658-11.732%2034.983-40.266%2062.257-76.013%2072.242A112.59%20112.59%200%200%201%20288.002%20320c0%2024.717-8.014%2047.558-21.574%2066.083a112.74%20112.74%200%200%201-8.953%2010.76c-.496-.487-.99-.974-1.477-1.47z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M270.506%20303.067a113.082%20113.082%200%200%201-29.012%200A96.24%2096.24%200%200%200%20239.998%20320c0%2019.58%205.898%2037.806%2016.002%2053.005%2010.104-15.2%2016.002-33.425%2016.002-53.005%200-5.776-.514-11.435-1.496-16.933zM346.313%20224.555A96.564%2096.564%200%200%200%20336%20224c-27.355%200-52.07%2011.5-69.572%2029.916a111.65%20111.65%200%200%201%2015.78%2030.448c29.756-8.455%2053.666-30.936%2064.105-59.81zM266.314%20287.445A95.74%2095.74%200%200%200%20256%20266.995a95.74%2095.74%200%200%200-10.314%2020.45c3.39.364%206.83.556%2010.314.556s6.925-.19%2010.314-.555zM176%20224c-3.484%200-6.925.19-10.314.555%2010.44%2028.873%2034.35%2051.354%2064.106%2059.81a111.594%20111.594%200%200%201%2015.78-30.448C228.07%20235.5%20203.353%20224%20176%20224z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-filter($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-filter-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-palette-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M285.4%2080c45.6%200%2087.2%2014.6%20117.2%2041.1%2018.9%2016.8%2029.4%2039%2029.4%2062.6s-10.4%2045.8-29.4%2062.6l-30.3%2026.9c-10.4%209.2-16.1%2021.2-16.1%2033.9%200%2012.6%205.7%2024.6%2016.1%2033.9%209.3%208.2%2016.4%2011.4%2030.6%2013.8l.8.1c5.9%201%2012.6%202.1%2015.5%204.7%202.9%202.7%204.8%208%204.8%2013.1%200%202.7-.7%207.6-4.5%2011-34.6%2030.7-85%2048.4-138.2%2048.4h-1.6c-26.5-.2-52.2-4.6-76.4-13.1-25.1-8.9-47.3-21.7-66-38.2-18.7-16.6-33.2-35.9-43-57.4-9.5-20.8-14.3-42.7-14.3-65.1%200-22.4%204.8-44.2%2014.2-64.9%209.8-21.5%2024.3-40.8%2043-57.4%2040.3-35.6%2094.3-56%20148.2-56m0-16c-55.7%200-113.9%2020.3-158.8%2060.1-83.5%2073.8-83.5%20194.7%200%20268.5%2041.5%2036.7%2097.5%2055%20152.9%2055.4h1.7c55.4%200%20110-17.9%20148.8-52.4%2014.3-12.7%2011.9-36.6%200-47.8-6.6-6.1-16.3-7.6-24.6-9-11.5-1.9-15.9-4-22.6-10-14.3-12.7-14.3-31.1%200-43.8l30.3-26.9c46.4-41%2046.4-108.2%200-149.2-34.1-30-80-44.9-127.7-44.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20144c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016-16-7.2-16-16%207.2-16%2016-16m0-16c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32zM224%20133c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016-16-7.2-16-16%207.2-16%2016-16m0-16c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32zM152%20200c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016-16-7.2-16-16%207.2-16%2016-16m0-16c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32zM160%20294c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016-16-7.2-16-16%207.2-16%2016-16m0-16c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32zM296%20400c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048zm0-80c-17.6%200-32%2014.4-32%2032s14.4%2032%2032%2032%2032-14.4%2032-32-14.4-32-32-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-palette-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-palette-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-palette-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M430.1%20347.9c-6.6-6.1-16.3-7.6-24.6-9-11.5-1.9-15.9-4-22.6-10-14.3-12.7-14.3-31.1%200-43.8l30.3-26.9c46.4-41%2046.4-108.2%200-149.2-34.2-30.1-80.1-45-127.8-45-55.7%200-113.9%2020.3-158.8%2060.1-83.5%2073.8-83.5%20194.7%200%20268.5%2041.5%2036.7%2097.5%2055%20152.9%2055.4h1.7c55.4%200%20110-17.9%20148.8-52.4%2014.4-12.7%2012-36.6.1-47.7zM120%20216c0-17.7%2014.3-32%2032-32s32%2014.3%2032%2032-14.3%2032-32%2032-32-14.3-32-32zm40%20126c-17.7%200-32-14.3-32-32s14.3-32%2032-32%2032%2014.3%2032%2032-14.3%2032-32%2032zm64-161c-17.7%200-32-14.3-32-32s14.3-32%2032-32%2032%2014.3%2032%2032-14.3%2032-32%2032zm72%20219c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048zm24-208c-17.7%200-32-14.3-32-32s14.3-32%2032-32%2032%2014.3%2032%2032-14.3%2032-32%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-palette($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-palette-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-wand-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20149.7l-34%2034%20256.1%20256.1%2033.9-34-256-256.1zm20.6%2066l11.4-11.4%20201.5%20201.5-11.4%2011.4-201.5-201.5zM184%2064h16v40h-16zM184%20268h16v40h-16zM280%20176h40v16h-40zM64%20176h40v16H64zM100.112%20105.59l11.313-11.313%2028.284%2028.284-11.314%2011.314zM128.4%20238.525l11.313%2011.314-28.284%2028.283-11.314-11.314zM272.577%2094.274l11.314%2011.314-28.283%2028.284-11.314-11.314z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-wand-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-wand-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-color-wand-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M183%2062h24v64h-24zM183%20266h24v64h-24zM274%20179h64v24h-64zM297.9%20106.1l-16.6-16.6-45.2%2045.3%2016.6%2016.7zM95.1%20109.1l45.2%2045.4%2016.6-16.7-45.2-45.3zM92.1%20279.1l16.6%2016.7%2045.2-45.3-16.6-16.7zM58%20179h64v24H58z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192.2%20153.4l-34%2034.2%2043.4%2043.5%2034.1-34.1zM447%20408.8L251.7%20213l-34.1%2034.1L413%20443z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-color-wand($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-color-wand-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-compass-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7S446.7%20150.9%20446.7%20256%20361.1%20446.7%20256%20446.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M224%20224l-96%20160%20160-96%2096-160-160%2096zm-49.4%20113.4l61-101.7%2040.7%2040.7-101.7%2061z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-compass-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-compass-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-compass-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M276.3%20276.3l-40.6-40.6-61.1%20101.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm32%20240l-160%2096%2096-160%20160-96-96%20160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-compass($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-compass-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-construct-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M137.3%20426.4c-5.5%205.4-14.4%205.4-19.9%200-5.4-5.5-5.4-14.4%200-19.9%205.5-5.4%2014.4-5.4%2019.9%200%205.4%205.5%205.4%2014.5%200%2019.9zM380.1%2064.1zM213.1%20240.7l25.9-25.9c3.1%203-1-1.1%208.6%208.3%204.2-3.9%208.1-7.6%2011.6-11-19.2-18.9-14.5-14.2-14.5-14.2-1.4-1.4-3.8-2.3-6.3-2.3-1.4%200-2.9.3-4.2%201l-5.7%203c-28.1-27.8-35.4-40.3-34.3-61.8%201.1-22.4%2012.3-37.2%2030.6-52.7%2024.8-21.1%2060.7-15.3%2060.7-15.3%208%200-4.1-8.5-10.4-12.5-9.4-6-23.3-9.6-37.9-9.6-14.3%200-30.4%202.5-46.8%209.3-46.5%2019-74.1%2045.5-81.2%2052.5-7%207-16.8%2018-22.9%2026.7-6.1%208.7%201.9%2021-6.1%2029s-24.8%200-24.8%200c-1.4%200-2.9.5-3.9%201.6l-34.2%2033.9c-2.2%202.2-2.2%205.7%200%207.8l63.6%2063.2c1.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6l33.2-34.8c2.2-2.2%202.2-5.7%200-7.8%200%200-5.3-5.2-12.1-12s.8-19.4%205.3-23.4c4.5-4.1%2011.6-6.8%2021.2-6.8%204.3%200%207.4.7%2011.4%201.8%2012.2%203.4%2025.8%2015.9%2050.9%2040.8l-3.9%206.5c-2.3%203.8-.9%208.3%201.3%2010.4%200%200-5-4.9%2013.1%2013.2%204-3.7%207.8-7.4%2011.6-11-9-9.3-4.6-4.9-7.6-7.9zm-3.1-22.8l-4-4c-23.9-23.8-38.3-36.6-53.9-40.9-5.1-1.4-9.5-2.4-15.7-2.4-11.5%200-19.7%202.7-28.7%208.7-10.5%207-18.6%2022.1-18.6%2031.5%200%209.5%206.7%2014.5%2012.3%2020.2L82%20250.2l-46-45.6%2019.3-19.1%207.6%201.2c12.9%200%2022.8-3.5%2029.4-10%208.7-8.7%208-20.1%207.5-26.8-.1-1.6-.3-4-.2-5.2%205.5-7.7%2014.5-17.8%2020.7-23.9%2011.5-11.4%2036.7-33%2076-49%2011.5-4.7%2023.5-7.4%2035.7-7.9-6.9%202.2-12.7%205.1-17.3%208.8-23.1%2018.6-35.4%2040.3-36.5%2064.5-1.4%2028.9%2010.3%2045.5%2039%2073.9l1.4%201.4-7.1%207.1-1.5-1.7zM443.2%20404.8l-38.9%2038.6c-16-19.1-61.8-71.5-108.7-120.1-3.6%203.8-7.3%207.7-11%2011.7%2058.6%2060.7%20115.1%20127.8%20115.1%20127.8%201.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6l55.2-54.8c2.2-2.2%202.2-5.7%200-7.8%200%200-69-57.3-130.4-115.8-3.4%203.6-7.1%207.5-11%2011.6%2049%2046.6%20102.4%2092.7%20121.9%20108.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M479.5%20125.1L427%20177.8l-51.2-9.3-9.2-51.2%2052.5-52.7c-11.2-11.2-26.8-16.6-39-16.6-.7%200-1.4%200-2%20.1-12.5.7-39.3%207.7-60%2029.7-20%2021.2-41.1%2060.7-22.5%20104.5%202.2%205.3%204.7%2012.3-2.7%2019.7-1.5%201.4-9.9%209.4-22.5%2021.3-3.6%203.4-7.5%207-11.6%2011-8.1%207.6-17.1%2016.2-26.8%2025.3-3.8%203.6-7.7%207.3-11.6%2011-57.1%2053.9-127.1%20119.7-127.1%20119.7-18%2015.5-16.7%2044.2-.1%2060.9%208.5%208.4%2020%2012.8%2031.3%2012.8%2011.1%200%2021.9-4.2%2029.6-13.1%200%200%2065.6-69.9%20119.4-127.1%203.7-4%207.4-7.9%2011-11.7%209.3-9.9%2018-19.1%2025.8-27.3%203.9-4.2%207.6-8.1%2011-11.6%2011.5-12.2%2019.4-20.4%2021-22%204-3.9%207.7-5.1%2011.1-5.1%203.3%200%206.3%201.2%208.6%202.4%209.9%205.1%2021%207.4%2032.4%207.4%2026.8%200%2055-12.4%2072.2-29.6%2024.4-24.4%2028.9-48%2029.6-60.1.7-11.9-3.4-27.8-16.7-41.1zm.7%2040.2c-.7%2012-5.7%2030.5-25%2049.8-14.9%2014.9-39.3%2024.9-60.8%2024.9-9.5%200-17.9-1.9-25-5.6-3.5-1.8-9-4.2-15.9-4.2-5.6%200-14%201.7-22.3%209.7-9%208.8-181.3%20192.4-188.7%20200.2l-.2.2-.2.2c-5.7%206.6-13.4%207.6-17.5%207.6-7.4%200-14.7-3-20.1-8.2-5.4-5.5-8.5-13.4-8.2-21.2.2-4.6%201.6-11.2%207.5-16.2l.3-.2.3-.2c7.8-7.4%20192.3-181.1%20199.9-188.6%207.9-7.9%209.6-16.2%209.7-21.8%200-6.9-2.4-12.6-3.5-15.4-18.2-42.7%2010.2-77.6%2019.4-87.2%2017.3-18.4%2039.7-24.2%2049.2-24.7h1.2c4%200%209%201%2014%203l-38.8%2039-5.9%205.9%201.5%208.2%209.2%2051.2%202%2010.9%2010.9%202%2051.2%209.3%208.3%201.5%205.9-5.9%2039-39.2c2.8%206.7%202.8%2012.7%202.6%2015z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-construct-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-construct-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-construct-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M380.1%2064.1zM275.1%2057.3c-9.4-6-23.3-9.6-37.9-9.6-14.3%200-30.4%202.5-46.8%209.3-46.5%2019-74.1%2045.5-81.2%2052.5-7%207-16.8%2018-22.9%2026.7-6.1%208.7%201.9%2021-6.1%2029s-24.8%200-24.8%200c-1.4%200-2.9.5-3.9%201.6l-34.2%2033.9c-2.2%202.2-2.2%205.7%200%207.8l63.6%2063.2c1.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6l33.2-34.8c2.2-2.2%202.2-5.7%200-7.8%200%200-5.3-5.2-12.1-12s.8-19.4%205.3-23.4c4.5-4.1%2011.6-6.8%2021.2-6.8%204.3%200%207.4.7%2011.4%201.8%2012.2%203.4%2025.8%2015.9%2050.9%2040.8l-3.9%206.5c-2.3%203.8-.9%208.3%201.3%2010.4%200%200-5-4.9%2013.1%2013.2l50.1-47.2c-19.2-18.9-14.5-14.2-14.5-14.2-1.4-1.4-3.8-2.3-6.3-2.3-1.4%200-2.9.3-4.2%201l-5.7%203c-28.1-27.8-35.4-40.3-34.3-61.8%201.1-22.4%2012.3-37.2%2030.6-52.7%2024.8-21.1%2060.7-15.3%2060.7-15.3%208-.3-4.1-8.8-10.4-12.8zM462.7%20400.1s-69-57.3-130.4-115.8L284.5%20335c58.6%2060.7%20115.1%20127.8%20115.1%20127.8%201.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6l55.2-54.8c2.3-2.2%202.3-5.7.1-7.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M479.5%20125.1L427%20177.8l-51.2-9.3-9.2-51.2%2052.5-52.7c-11.2-11.2-26.8-16.6-39-16.6-.7%200-1.4%200-2%20.1-12.5.7-39.3%207.7-60%2029.7-20%2021.2-41.1%2060.7-22.5%20104.5%202.2%205.3%204.7%2012.3-2.7%2019.7-1.5%201.4-9.9%209.4-22.5%2021.3-3.6%203.4-7.5%207-11.6%2011-8.1%207.6-17.1%2016.2-26.8%2025.3-3.8%203.6-7.7%207.3-11.6%2011-57.1%2053.9-127.1%20119.7-127.1%20119.7-18%2015.5-16.7%2044.2-.1%2060.9%208.5%208.4%2020%2012.8%2031.3%2012.8%2011.1%200%2021.9-4.2%2029.6-13.1%200%200%2065.6-69.9%20119.4-127.1%203.7-4%207.4-7.9%2011-11.7%209.3-9.9%2018-19.1%2025.8-27.3%203.9-4.2%207.6-8.1%2011-11.6%2011.5-12.2%2019.4-20.4%2021-22%204-3.9%207.7-5.1%2011.1-5.1%203.3%200%206.3%201.2%208.6%202.4%209.9%205.1%2021%207.4%2032.4%207.4%2026.8%200%2055-12.4%2072.2-29.6%2024.4-24.4%2028.9-48%2029.6-60.1.7-11.9-3.4-27.8-16.7-41.1zM137.3%20426.4c-5.5%205.4-14.4%205.4-19.9%200-5.4-5.5-5.4-14.4%200-19.9%205.5-5.4%2014.4-5.4%2019.9%200%205.4%205.5%205.4%2014.5%200%2019.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-construct($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-construct-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-contact-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%2017.3c105.1%200%20190.7%2085.5%20190.7%20190.7%200%2046.6-16.8%2089.2-44.6%20122.4l-.1-.1c-20-8.2-65.9-24.1-92.9-32.1-2.4-.7-2.7-.9-2.7-10.7%200-8.1%203.3-16.3%206.6-23.3%203.6-7.5%207.7-20.2%209.2-31.6%204.2-4.9%2010-14.5%2013.6-32.9%203.2-16.2%201.7-22.1-.4-27.6-.2-.6-.5-1.2-.6-1.7-.8-3.8.3-23.5%203.1-38.8%201.9-10.5-.5-32.8-14.9-51.3-9.1-11.7-26.6-26-58.5-28H247c-31.4%202-48.8%2016.3-58%2028-14.5%2018.5-16.9%2040.8-15%2051.3%202.8%2015.3%203.9%2035%203.1%2038.8-.2.7-.4%201.2-.6%201.8-2.1%205.5-3.7%2011.4-.4%2027.6%203.7%2018.4%209.4%2028%2013.6%2032.9%201.5%2011.4%205.7%2024%209.2%2031.6%202.6%205.5%203.8%2013%203.8%2023.6%200%209.9-.4%2010-2.6%2010.7-28%208.3-72.2%2024.2-90.1%2031.9-27.9-33.2-44.7-75.9-44.7-122.5%200-105.1%2085.6-190.7%20190.7-190.7zM121.4%20391c19.9-8%2058.6-21.8%2083.1-29.1h.2c8.4-2.6%2011.6-8.5%2012.8-13%20.9-3.2%201-6.5%201-13%200-13.1-1.7-22.7-5.3-30.4-2.9-6.1-6.6-17.2-7.9-26.9l-.6-4.7-3.1-3.6c-1.9-2.2-6.8-9.2-10.1-25.6-2.6-13-1.4-16-.4-18.7v-.2l.1-.3c.2-.6.6-1.6%201-2.8l.1-.5.1-.5c1.7-8-.6-31.9-3-45-1.1-6.2.3-23.8%2011.8-38.6%207.1-9%2020.8-20.1%2045.9-21.8h16.5c25.6%201.7%2039.4%2012.8%2046.4%2021.9%2011.6%2014.8%2012.9%2032.4%2011.8%2038.6-2.4%2013-4.7%2037-3%2045l.1.3.1.3c.4%201.5.9%202.8%201.2%203.6%201.1%202.8%202.1%205.9-.4%2018.6-3.3%2016.4-8.1%2023.3-10%2025.6l-3.1%203.6-.6%204.8c-1.3%209.7-5%2020.7-7.8%2026.8-4%208.5-8.1%2018.8-8.1%2030.1%200%205.8.1%209.6%201.1%2013.2%201.3%204.4%204.5%2010.2%2012.9%2012.8h.2c23.7%207%2063.9%2020.8%2086%2029.4-34.5%2034.4-82.1%2055.7-134.5%2055.7-52.4.1-99.9-21.2-134.5-55.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-contact-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-contact-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-contact-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%2017.3c105.1%200%20190.7%2085.5%20190.7%20190.7%200%2046.5-16.7%2089.1-44.4%20122.2-20-8.2-65.9-24.1-92.9-32.1-2.4-.7-2.7-.9-2.7-10.7%200-8.1%203.3-16.3%206.6-23.3%203.6-7.5%207.7-20.2%209.2-31.6%204.2-4.9%2010-14.5%2013.6-32.9%203.2-16.2%201.7-22.1-.4-27.6-.2-.6-.5-1.2-.6-1.7-.8-3.8.3-23.5%203.1-38.8%201.9-10.5-.5-32.8-14.9-51.3-9.1-11.7-26.6-26-58.5-28h-17.5c-31.4%202-48.8%2016.3-58%2028-14.5%2018.5-16.9%2040.8-15%2051.3%202.8%2015.3%203.9%2035%203.1%2038.8-.2.7-.4%201.2-.6%201.8-2.1%205.5-3.7%2011.4-.4%2027.6%203.7%2018.4%209.4%2028%2013.6%2032.9%201.5%2011.4%205.7%2024%209.2%2031.6%202.6%205.5%203.8%2013%203.8%2023.6%200%209.9-.4%2010-2.6%2010.7-28.1%208.3-72.6%2024.3-90.4%2032-27.9-33.2-44.7-75.9-44.7-122.5%200-105.1%2085.6-190.7%20190.7-190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-contact($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-contact-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-contacts-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm-.1%20398.6c-52.4.1-99.9-21.2-134.5-55.6L110%20378.5c-3.1-3.7-6-7.4-8.8-11.3%204.7-4%2010.1-7.5%2015.8-9.6%2010.5-4%2022.4-3.8%2033.3-6.6%209-2.3%2020.2-5.9%2027.2-12.4%206.4-6%207.1-15.2%207.7-23.5.5-7%20.4-13.9.4-20.9%200-4.9-5.7-7.7-8.5-11.6-4.5-6.1-4.7-15.2-5.6-22.5-.4-3.2-.5-7.3-3.2-9.5-3-2.4-5.2-3.7-6.7-7.5-2-5.2-2.7-10.8-4.3-16.2-1-3.5%202.5-6.8%203.9-9.7%202.6-5.3-1.9-13.5-2.8-19-2.8-16.4-2.7-34.3%209.1-47.3%2023.7-26.2%2078-17.9%2085.8%2018.9%202.4%2011.5.9%2024.9-2.3%2036.1-1.4%204.8-3%208.3-.2%2013%204.2%206.8%202.4%2011.2.4%2018.8-1.6%206.3-3.6%209.1-8.4%2013-4%203.2-3.4%2011.2-4.1%2015.8-.8%205.6-1.3%2011.5-4.7%2016.2-1.3%201.8-8.4%207.4-8.4%209.3%200%2011-.5%2022.2%201.4%2033.1%202.6%2015.5%2015.6%2019.2%2028.6%2024.5%2013.2%205.1%2028.5%203.2%2041.3%209.5%2013.2%206.5%2025.9%2018.4%2029.7%2033.1%200%200%202.2%2019.1%202.1%2040-22.4%209.2-47%2014.4-72.8%2014.4zm146.2-68.2l-.1-.1-11.6%2012.6c-13.4%2013.3-28.7%2024.7-45.6%2033.6l-.3-16.6c0-29.5-17.8-55.5-45.8-65.2-13.5-4.7-28.1-5-41.6-9.7-4.1-1.4-12.2-3.1-13.9-7.8-1.6-4.6-1.6-10-1.9-14.8-.2-3.8-.3-7.6-.3-11.4%200-2.5%206.4-7.8%207.8-10.1%205.4-9%205.9-21.1%206.9-31.3%208.7%202.4%209.8-13.7%2011.3-18.6%201.1-3.4%205-20.9-2.6-23.6%202.5-4.4%203.5-9.8%204.2-14.7%202-12.8%202.8-26.8-1.1-39.3-8.1-26-33-40.6-59.3-41.4-26.7-.9-53.5%2011.9-63.5%2037.8-4.8%2012.6-4.4%2026.3-2.8%2039.5.7%206%201.7%2012.7%204.7%2018.1-6.4%202.8-4.5%2017.7-3.4%2021.3%201.6%205.1%203%2023.4%2012.1%2020.9.8%208.1%201.7%2016.4%203.9%2024.3%201.5%205.3%204.6%209.8%208.2%2013.9%201.8%202%202.7%202.2%202.6%204.8-.1%207.8.1%2016.2-1.9%2023.8s-18.7%2010.8-25.4%2012.2c-18%203.7-34.6%205.4-49.6%2016.6-.3.2-.5.4-.7.6-17.2-28.6-27.1-62.1-27.1-97.8%200-105.1%2085.6-190.7%20190.7-190.7S446.7%20150.8%20446.7%20256c0%2029.6-6.8%2057.7-18.9%2082.7-4.4-12.8-15.2-22.4-28.5-26.8-8.1-2.6-23.7-3.4-29.5-10.4-2.9-3.5-1-16.6-1-16.6%2025.2-1.4%2031-6.1%2031-6.1%203.9-2.3%202.1-2.7.1-6.1-10.9-18.3-6-41.5-6.5-61.6-.4-16.7-4.8-35-20-44.4-7.6-4.7-19.7-6.9-31.4-6.9-9.5%200-18.7%201.4-25.3%204.1-42.4%2017-17.4%2073.2-31.9%20105.4-2.5%205.4-6.1%207.3.2%2010.5%200%200%207.5%204.4%2028.9%206.3%200%200%20.3%2012.6%200%2013.9-1.1%204.9-11.8%208.3-15.8%209.4-4.1%201.1-15.4%204.6-29.1%2011.3%200%200%2015.2%201.5%2025%204.9%206.8-4.6%2016.9-5.7%2024-8.8%207.1-3.1%2010.3-5.8%2011.6-13.3s-.5-33.2-.5-33.2c-12.2.9-26.9-1.7-26.9-1.7%204.1-13.2%204-27.7%204-41.7%200-12.2-.1-23.8%202.6-32.7%202.4-8%206.4-12.5%2014-15.5%204.4-1.8%2011.8-2.9%2019.2-2.9%2011.6%200%2019.6%202.4%2023%204.5%209.8%206.1%2012.2%2020.3%2012.4%2031.2.1%204.5-.1%209.4-.3%2014.6-.5%2013.3-1.2%2027.9%203.3%2042h-.2s-13.3%201.8-26.3.3l-1.4%2017.3c-.7%207.1-1.9%2017.9%204.8%2026%207.7%209.3%2020.2%2011.9%2030.2%2013.9%202.6.5%205.2%201.1%206.7%201.5%207.6%202.5%2020.7%209.4%2022.4%2031.3-4.3%207-9.2%2013.7-14.5%2020z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-contacts-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-contacts-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-contacts-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm88.5%20360c0-29.5-17.8-55.5-45.8-65.2-13.5-4.7-28.1-5-41.6-9.7-4.1-1.4-12.2-3.1-13.9-7.8-1.6-4.6-1.6-10-1.9-14.8-.2-3.8-.3-7.6-.3-11.4%200-2.5%206.4-7.8%207.8-10.1%205.4-9%205.9-21.1%206.9-31.3%208.7%202.4%209.8-13.7%2011.3-18.6%201.1-3.4%205-20.9-2.6-23.6%202.5-4.4%203.5-9.8%204.2-14.7%202-12.8%202.8-26.8-1.1-39.3-8.1-26-33-40.6-59.3-41.4-26.7-.9-53.5%2011.9-63.5%2037.8-4.8%2012.6-4.4%2026.3-2.8%2039.5.7%206%201.7%2012.7%204.7%2018.1-6.4%202.8-4.5%2017.7-3.4%2021.3%201.6%205.1%203%2023.4%2012.1%2020.9.8%208.1%201.7%2016.4%203.9%2024.3%201.5%205.3%204.6%209.8%208.2%2013.9%201.8%202%202.7%202.2%202.6%204.8-.1%207.8.1%2016.2-1.9%2023.8s-18.7%2010.8-25.4%2012.2c-18%203.7-34.6%205.4-49.6%2016.6-.3.2-.5.4-.7.6-17.2-28.6-27.1-62.1-27.1-97.8C65.3%20151%20150.9%2065.4%20256%2065.4S446.7%20150.8%20446.7%20256c0%2029.6-6.8%2057.7-18.9%2082.7-4.4-12.8-15.2-22.4-28.5-26.8-8.1-2.6-23.7-3.4-29.5-10.4-2.9-3.5-1-16.6-1-16.6%2025.2-1.4%2031-6.1%2031-6.1%203.9-2.3%202.1-2.7.1-6.1-10.9-18.3-6-41.5-6.5-61.6-.4-16.7-4.8-35-20-44.4-7.6-4.7-19.7-6.9-31.4-6.9-9.5%200-18.7%201.4-25.3%204.1-42.4%2017-17.4%2073.2-31.9%20105.4-2.5%205.4-6.1%207.3.2%2010.5%200%200%207.5%204.4%2028.9%206.3%200%200%20.3%2012.6%200%2013.9-1.1%204.9-11.8%208.3-15.8%209.4-4.1%201.1-15.4%204.6-29.1%2011.3%200%200%2015.2%201.5%2025%204.9%200%200%2026.4%206%2046%2025%2018%2017.4%2020.6%2038.7%2021%2064.3-5.2%203.5-10.6%206.7-16.2%209.6l-.3-16.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-contacts($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-contacts-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-contract-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M196%20208H96v16h128V96h-16v100L75.1%2064%2064%2075.1zM316%20208h100v16H288V96h16v100L436.9%2064%20448%2075.1zM196%20304H96v-16h128v128h-16V316L75.1%20448%2064%20436.9zM316%20304h100v-16H288v128h16V316l132.9%20132%2011.1-11.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-contract($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-contract-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-contrast-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm135.8%20343.8c-17.6%2017.6-38.2%2031.5-61%2041.2-23.7%2010-48.8%2015.1-74.7%2015.1V64c25.9%200%2051.1%205.1%2074.7%2015.1%2022.9%209.7%2043.4%2023.5%2061%2041.2%2017.6%2017.6%2031.5%2038.2%2041.2%2061%2010%2023.7%2015.1%2048.8%2015.1%2074.7s-5.1%2051.1-15.1%2074.7c-9.8%2022.9-23.6%2043.4-41.2%2061.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-contrast($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-contrast-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-copy-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M304%2096h-16v80h80v-16h-64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M325.3%2064H160v48h-48v336h240v-48h48V139l-74.7-75zM336%20432H128V128h32v272h176v32zm48-48H176V80h142.7l65.3%2065.6V384z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-copy-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-copy-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-copy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144%20416V112h-32v336h240v-32H160z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M325.3%2064H160v336h240V139l-74.7-75zM368%20176h-80V96h16v64h64v16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-copy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-copy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-create-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20416H80V144h224.117l16-16H64v304h320V191.883l-16%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M237.623%20284.084l-9.706-9.707L399.24%20103.054%20387.927%2091.74%20208%20271.65V304h32.216L420.26%20124.016l-11.313-11.286zM444.213%2080.312l-12.465-12.466c-2.664-2.38-6.192-3.846-10.002-3.846a14.758%2014.758%200%200%200-9.93%203.85L399.667%2080l.08.08%2011.293%2011.293%2021.02%2021.02%2012.15-12.15c2.382-2.625%203.79-6.117%203.79-9.93%200-3.81-1.408-7.338-3.787-10z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-create-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-create-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-create-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20320h-64v-64l128-128H64v304h320V192z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M387.927%2091.74L208%20271.65V304h32.216L420.26%20124.016zM444.213%2080.312l-12.465-12.466c-2.664-2.38-6.192-3.846-10.002-3.846a14.758%2014.758%200%200%200-9.93%203.85L399.667%2080l.08.08%2011.293%2011.293%2021.02%2021.02%2012.15-12.15c2.382-2.625%203.79-6.117%203.79-9.93%200-3.81-1.408-7.338-3.787-10z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-create($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-create-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-crop-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%2064h16v48h-16zM144%20368V160h-16v224h224v-16zM400%20368h48v16h-48z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20128v16h304v304h16V128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-crop-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-crop-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-crop-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%2064h32v48h-32zM160%20352V176h-32v208h208v-32zM400%20352h48v32h-48z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20128v32h288v288h32V128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-crop($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-crop-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cube-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032L32%20128v224l224%20128%20224-128V128L256%2032zm198%20102.2L256%20246%2059.2%20133.8%20256%2048l198%2086.2zM48%20145.8L248%20260v197L48%20342.7V145.8zM264%20457V260l200-113.1v195.8L264%20457z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cube-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cube-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cube-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M470.8%20124.2L256%2032%2041.2%20124.2%20256%20247.1zM264%20476l216-123.6V137.3L264%20260.9zM32%20137.3v215.1L248%20476V260.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cube($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cube-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cut-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128.4%20135.7c-11.4-28-14.8-54.9%204.5-71.7l103%20138%2010-13.4L140.9%2048c-8.9%200-14.4.9-18.5%203.9-11.9%208.9-19.1%2025.6-19.3%2043.6-.2%2013.5%203.3%2028.6%2010.4%2046.2%208.5%2021%2042.5%2070.2%2077.9%20118.6.7%201%201.6%201.9%202.5%202.7%202.9-4.7%206-9.5%209-14.1-26.1-35.8-66.2-92.6-74.5-113.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M390.4%2054.9c-5.2-4.8-13.5-6.9-20-6.9L255.9%20201.7l-10%2013.4-2.9%203.9-.1.1-14.5%2019.7c-.1.1-.2.3-.3.4-.5.8-7.5%2010.9-15.2%2022.7-3%204.6-6.1%209.5-9%2014.1-3.5%205.6-6.6%2011-8.8%2015.2-3.6%207.1-7.3%2014.4-10.7%2021.5-3.7%207.5-7.2%2014.6-10.4%2020.7-10.2-7.3-22-11.1-34.3-11.1-17.5%200-33.7%207.7-45.8%2021.6C82.4%20357.1%2076%20374.6%2076%20393.1s6.4%2036%2017.9%2049.3c12.1%2013.9%2028.4%2021.6%2045.8%2021.6%2014.4%200%2028-5.2%2039.2-15%2010.5-9.1%2018-21.3%2021.8-35.4%201-3.1%2011.6-34.7%2026.1-57.3%209.2-14.4%2022.2-23.4%2029.6-27.8l13.5-9.7s12.6-8.7%2038.1-41.7%2080.5-111.5%2090.2-135.4c7.2-17.6%2010.6-32.8%2010.4-46.2-.1-17.9-5.9-29.3-18.2-40.6zm-7%2080.8c-11.4%2028-86.8%20131.9-100.4%20147.7s-27.3%2027.4-27.3%2027.4-25.9%2011.1-42.4%2036.9c-16.5%2025.7-27.9%2061.3-27.9%2061.3-5.9%2022.6-24.1%2039.1-45.7%2039.1-26.4%200-47.8-24.6-47.8-54.9s21.4-54.9%2047.8-54.9c10.8%200%2020.7%204.1%2028.7%2011%201.6%201.3%203%202.6%204%203.8l.1.1c.5.5.9%201%201.3%201.5.9.9%201.8%201.3%202.7%201.3%202.4%200%205.2-3.3%209.5-11.2%206.8-12.6%2015.1-30.3%2023.3-46.3%208.2-16%2031.8-50.3%2031.8-50.3l14.5-19.7L378.9%2064c19.3%2016.9%2015.9%2043.7%204.5%2071.7zM372%20322.3c-12.3%200-24.1%203.8-34.3%2011.1-3.2-6.1-6.7-13.2-10.4-20.7-3.4-6.9-6.9-14-10.4-20.8L306%20305.8c7%2013.9%2013.8%2028.3%2019.6%2039%204.3%208%207.1%2011.2%209.5%2011.2.9%200%201.8-.5%202.7-1.3.4-.5.9-1%201.3-1.5l.1-.1c1-1.3%202.3-2.6%204-3.8%208-6.9%2017.9-11%2028.7-11%2026.4%200%2048%2024.6%2048%2054.9S398.4%20448%20372%20448c-21.6%200-39.8-16.5-45.7-39.1%200%200-11.4-35.6-27.9-61.3-4.7-7.4-10.3-13.6-15.7-18.7l-13%209.8c5.2%204.6%2010.7%2010.4%2015.3%2017.5%2014.5%2022.6%2025%2054.2%2026.1%2057.3%203.8%2014.1%2011.3%2026.3%2021.8%2035.4%2011.3%209.8%2024.9%2015%2039.2%2015%2035.3%200%2064-31.8%2064-70.9s-28.8-70.7-64.1-70.7z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M139.9%20421.1c-13.3%200-24-12.6-24-28s10.7-28%2024-28%2024%2012.6%2024%2028-10.8%2028-24%2028z%22%2F%3E%3Ccircle%20cx%3D%22256.1%22%20cy%3D%22272.2%22%20r%3D%2216%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M372.1%20421.1c-13.3%200-24-12.6-24-28s10.7-28%2024-28%2024%2012.6%2024%2028-10.7%2028-24%2028z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cut-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cut-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-cut-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M308%20277.2c25.5-33%2080.5-111.5%2090.2-135.4%207.2-17.6%2010.6-32.8%2010.4-46.2-.2-17.9-6-29.3-18.3-40.6-5.2-4.8-13.5-6.9-20-6.9L255.9%20201.7l-10%2013.4-2.9%203.9-.1.1-14.5%2019.7c-.1.1-.2.3-.3.4-.5.8-7.5%2010.9-15.2%2022.7-3%204.6-6.1%209.5-9%2014.1-3.5%205.6-6.6%2011-8.8%2015.2-3.6%207.1-7.3%2014.4-10.7%2021.5-3.7%207.5-7.2%2014.6-10.4%2020.7-10.2-7.3-22-11.1-34.3-11.1-17.5%200-33.7%207.7-45.8%2021.6C82.4%20357.1%2076%20374.6%2076%20393.1s6.4%2036%2017.9%2049.3c12.1%2013.9%2028.4%2021.6%2045.8%2021.6%2014.4%200%2028-5.2%2039.2-15%2010.5-9.1%2018-21.3%2021.8-35.4%201-3.1%2011.6-34.7%2026.1-57.3%209.2-14.4%2022.2-23.4%2029.6-27.8l13.5-9.7c0%20.1%2012.7-8.7%2038.1-41.6zM139.9%20421.1c-13.3%200-24-12.6-24-28s10.7-28%2024-28%2024%2012.6%2024%2028-10.8%2028-24%2028zm116.2-132.9c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M191.5%20260.4c.7%201%201.6%201.9%202.5%202.7%201.7-2.8%203.6-5.7%205.4-8.6l46.5-65.8L140.9%2048c-8.9%200-14.4.9-18.5%203.9-11.9%208.9-19.1%2025.6-19.3%2043.6-.2%2013.5%203.3%2028.6%2010.4%2046.2%208.6%2021%2042.6%2070.2%2078%20118.7zM372%20322.3c-12.3%200-24.1%203.8-34.3%2011.1-3.2-6.1-6.7-13.2-10.4-20.7-3.4-6.9-6.9-14-10.4-20.8L306%20305.8l-36.4%2033.1c5.2%204.6%2010.7%2010.4%2015.3%2017.5%2014.5%2022.6%2025%2054.2%2026.1%2057.3%203.8%2014.1%2011.3%2026.3%2021.8%2035.4%2011.3%209.8%2024.9%2015%2039.2%2015%2035.3%200%2064-31.8%2064-70.9s-28.7-70.9-64-70.9zm.1%2098.8c-13.3%200-24-12.6-24-28s10.7-28%2024-28%2024%2012.6%2024%2028-10.7%2028-24%2028z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-cut($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-cut-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-desktop-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M496%20384V96H16v288h175v16h-64v16h257v-16h-64v-16h176zM32%20112h448v256H32V112z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-desktop-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-desktop-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-desktop-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M496%20384V96H16v288h175v16h-64v16h257v-16h-64v-16h176zM32%20112h448v256H32V112z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20128h416v224H48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-desktop($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-desktop-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-disc-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20181.8c40.9%200%2074.3%2033.3%2074.3%2074.3%200%2040.9-33.3%2074.2-74.3%2074.2-19.9%200-38.5-7.7-52.5-21.7s-21.7-32.6-21.7-52.5c-.1-41%2033.3-74.3%2074.2-74.3m0%20130.5c31.1%200%2056.4-25.3%2056.4-56.4%200-31.1-25.3-56.4-56.4-56.4s-56.4%2025.3-56.4%2056.4c0%2031.1%2025.3%2056.4%2056.4%2056.4m0-146.5c-49.9%200-90.3%2040.4-90.3%2090.3s40.4%2090.2%2090.3%2090.2%2090.3-40.4%2090.3-90.2c0-49.9-40.4-90.3-90.3-90.3zm0%20130.5c-22.3%200-40.4-18.1-40.4-40.4%200-22.3%2018.1-40.4%2040.4-40.4s40.4%2018.1%2040.4%2040.4c0%2022.3-18.1%2040.4-40.4%2040.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064c25.9%200%2051.1%205.1%2074.7%2015.1%2022.9%209.7%2043.4%2023.5%2061%2041.2s31.5%2038.2%2041.2%2061c10%2023.7%2015.1%2048.8%2015.1%2074.7s-5.1%2051.1-15.1%2074.7c-9.7%2022.9-23.5%2043.4-41.2%2061s-38.2%2031.5-61%2041.2C307%20442.9%20281.9%20448%20256%20448s-51.1-5.1-74.7-15.1c-22.9-9.7-43.4-23.5-61-41.2-17.6-17.6-31.5-38.2-41.2-61C69.1%20307.1%2064%20281.9%2064%20256s5.1-51.1%2015.1-74.7c9.7-22.9%2023.5-43.4%2041.2-61%2017.6-17.6%2038.2-31.5%2061-41.2C204.9%2069.1%20230.1%2064%20256%2064m0%20322c34.7%200%2067.4-13.5%2091.9-38.1S386%20290.7%20386%20256s-13.5-67.4-38.1-91.9S290.7%20126%20256%20126s-67.4%2013.5-91.9%2038.1S126%20221.3%20126%20256s13.5%2067.4%2038.1%2091.9S221.3%20386%20256%20386m0-338C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20322c-63%200-114-51.1-114-114s51-114%20114-114%20114%2051%20114%20114-51%20114-114%20114z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-disc-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-disc-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-disc-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20165.8c-49.9%200-90.3%2040.4-90.3%2090.3s40.4%2090.2%2090.3%2090.2%2090.3-40.4%2090.3-90.2c0-49.9-40.4-90.3-90.3-90.3zm0%20130.6c-22.3%200-40.4-18.1-40.4-40.4s18.1-40.4%2040.4-40.4%2040.4%2018.1%2040.4%2040.4-18.1%2040.4-40.4%2040.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20322c-63%200-114-51.1-114-114s51-114%20114-114%20114%2051%20114%20114-51%20114-114%20114z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-disc($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-disc-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-document-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272%2064H128v384h256V175.5L272%2064zm0%2022.6l89.8%2089.4H272V86.6zM144%20432V80h112v112h112v240H144z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-document-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-document-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-document-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20176v-.5L272%2064v112z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064H128v384h256V192H256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-document($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-document-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-done-all-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M366.9%20182l-114%20117.1-46.1-46.9-17.4%2017.7%2054.6%2055.7c2.4%202.4%205.7%204.5%208.7%204.5%202.9%200%206.2-2%208.6-4.4L384%20200l-17.1-18zM145.4%20252.1L128%20269.8l54.6%2055.7c2.4%202.4%205.7%204.5%208.7%204.5%202.9%200%206.2-2%208.6-4.4l8.7-8.9-63.2-64.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M297.6%20190l-62%2063.7%2017.2%2017.5%2061.9-63.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-done-all($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-done-all-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-download-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%20144v16h112v272H112V160h112v-16H96v304h320V144z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M193.1%20252.3l-11.6%2011.6%2074.5%2074.5%2074.5-74.5-11.6-11.6-54.7%2054.7V64h-16.4v243z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-download-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-download-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-download-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20144v163l54.8-54.7%2011.6%2011.6-74.4%2074.5-74.5-74.5%2011.7-11.6L248%20307V144H96v304h320V144zM248%2064h16v80h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-download($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-download-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-easel-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%2096v256H48V96h416m0-16H48c-8.8%200-16%207.2-16%2016v256c0%208.8%206.9%2016%2015.8%2016H464c8.8%200%2016-7.2%2016-16V96c0-8.8-7.2-16-16-16zM384%20384l32%2080h16.6L400%20384zM112.6%20384L80%20464h16.6l32-80zM248%20384h16v48h-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%20128v192H80V128h352m16-16H64v224h384V112zM256%2048c-8.8%200-16%207.2-16%2016h32c0-8.8-7.2-16-16-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-easel-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-easel-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-easel-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20384l32%2080h16.6L400%20384zM112.6%20384L80%20464h16.6l32-80zM248%20384h16v48h-16zM80%20128h352v192H80z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%2080H48c-8.8%200-16%207.2-16%2016v256c0%208.8%206.9%2016%2015.8%2016H464c8.8%200%2016-7.2%2016-16V96c0-8.8-7.2-16-16-16zm-16%20256H64V112h384v224zM256%2048c-8.8%200-16%207.2-16%2016h32c0-8.8-7.2-16-16-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-easel($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-easel-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-egg-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c11.6%200%2026.5%206.8%2042%2019.2%2016.7%2013.4%2033.6%2032.6%2048.6%2055.6%2015.8%2024.1%2029%2051.3%2038.2%2078.8%2010.1%2030.1%2015.2%2059.4%2015.2%2087.2%200%2028.7-3.6%2054.7-10.8%2077.2-6.7%2021.3-16.6%2039.5-29.3%2054.2-12.3%2014.2-27.3%2025.1-44.6%2032.4-17.6%207.4-37.5%2011.2-59.3%2011.2s-41.7-3.8-59.3-11.2c-17.3-7.3-32.3-18.2-44.6-32.4-12.7-14.7-22.6-32.9-29.3-54.2-7.1-22.6-10.8-48.5-10.8-77.2%200-27.8%205.1-57.2%2015.2-87.2%209.2-27.5%2022.4-54.7%2038.2-78.8%2015.1-23%2031.9-42.2%2048.6-55.6C229.5%2054.8%20244.4%2048%20256%2048m0-16C192%2032%2096%20165.2%2096%20288.9S160%20480%20256%20480s160-67.4%20160-191.1S320%2032%20256%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-egg-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-egg-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-egg-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032C192%2032%2096%20165.2%2096%20288.9S160%20480%20256%20480s160-67.4%20160-191.1S320%2032%20256%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-egg($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-egg-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-exit-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20224h16V112h288v288H144V288h-16v128h320V96H128z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M297.9%20193.1l11.6-11.6L384%20256l-74.5%2074.5-11.6-11.6%2054.7-54.7H64v-16.4h288.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-exit-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-exit-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-exit-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%2096v151.8h224.6l-54.7-54.7%2011.6-11.6L384%20256l-74.5%2074.5-11.6-11.6%2054.7-54.7H128V416h320V96zM64%20247.8h64v16.4H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-exit($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-exit-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-expand-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M92%2080h100V64H64v128h16V92l132.9%20132%2011.1-11.1zM420%2080H320V64h128v128h-16V92L299.1%20224%20288%20212.9zM92%20432h100v16H64V320h16v100l132.9-132%2011.1%2011.1zM420%20432H320v16h128V320h-16v100L299.1%20288%20288%20299.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-expand($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-expand-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-eye-off-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M120.4%2040l257.4%20440%2013.8-8L134.2%2032zM256%20144c-12.3%200-24%201.3-35.5%203.8l6.6%2011.3c9.4-1.8%2019-2.7%2028.9-2.7%2074%200%20131%2051.1%20174%2099.6-26.9%2027.3-59.2%2060.6-99%2080.7l6.3%2010.8c45.8-23.3%2082.4-62.9%20110.7-91.5-44.4-51.4-107.4-112-192-112zM256%20355.6c-76.1%200-121.6-45.8-174-99.6%2035.8-36.3%2067-63.7%2099.2-80.5l-6.3-10.8C138.4%20183.9%20103.3%20215.4%2064%20256c57.8%2059.2%20106.3%20112%20192%20112%2012.3%200%2024.1-1.4%2035.5-3.9l-6.6-11.3c-9.4%201.8-19%202.8-28.9%202.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M313%20306c12.3-13.2%2019.8-30.8%2019.8-50%200-41.2-34.4-74.7-76.8-74.7-5.1%200-10.2.5-15%201.4l6.7%2011.5c2.7-.3%205.5-.5%208.3-.5%2035.3%200%2064%2027.9%2064%2062.2%200%2014.5-5.1%2027.9-13.7%2038.5L313%20306zM199%20206c-12.3%2013.2-19.8%2030.8-19.8%2050%200%2041.2%2034.4%2074.7%2076.8%2074.7%205.2%200%2010.2-.5%2015.1-1.4l-6.7-11.5c-2.7.3-5.5.5-8.3.5-35.3%200-64-27.9-64-62.2%200-14.5%205.1-27.9%2013.7-38.5L199%20206z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M216.4%20235.7c-3.3%206.1-5.2%2013-5.2%2020.3%200%2023.3%2018.8%2042.3%2042.5%2043.5l-8.3-14.1c-12.4-4.3-21.4-15.8-21.4-29.3%200-2.1.2-4.2.6-6.2l-8.2-14.2zM295.6%20276.3c3.3-6.1%205.2-13%205.2-20.3H288c0%202.1-.2%204.2-.6%206.2l8.2%2014.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-eye-off-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-eye-off-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-eye-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M120.4%2040l257.4%20440%2013.8-8L134.2%2032zM256%20144c-12.3%200-24%201.3-35.5%203.8l20.4%2035c4.9-.9%209.9-1.4%2015.1-1.4%2042.4%200%2076.8%2033.5%2076.8%2074.7%200%2019.2-7.5%2036.7-19.8%2050l24.3%2041.5c45.8-23.3%2082.4-62.9%20110.7-91.5C403.6%20204.6%20340.6%20144%20256%20144zM256%20330.7c-42.4%200-76.8-33.5-76.8-74.7%200-19.2%207.5-36.7%2019.8-50l-24.1-41.2C138.4%20183.9%20103.3%20215.4%2064%20256c57.8%2059.2%20106.3%20112%20192%20112%2012.3%200%2024.1-1.4%2035.5-3.9l-20.4-34.9c-4.9%201-9.9%201.5-15.1%201.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M300.7%20253.4c-3.9%201.7-8.2%202.6-12.7%202.6-1.5%200-3-.1-4.4-.3l12%2020.6c3.3-6.1%205.2-13%205.2-20.3%200-.9%200-1.8-.1-2.6zM216.4%20235.7c-3.3%206.1-5.2%2013-5.2%2020.3%200%2023.3%2018.8%2042.3%2042.5%2043.5l-37.3-63.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-eye-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-eye-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-eye-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M447.1%20256.2C401.8%20204%20339.2%20144%20256%20144c-33.6%200-64.4%209.5-96.9%2029.8C131.7%20191%20103.6%20215.2%2065%20255l-1%201%206.7%206.9C125.8%20319.3%20173.4%20368%20256%20368c36.5%200%2071.9-11.9%20108.2-36.4%2030.9-20.9%2057.2-47.4%2078.3-68.8l5.5-5.5-.9-1.1zM256%20160c33.1%200%2064.9%209.5%2097.2%2030.6%2023.9%2015.6%2047.4%2036.7%2073.7%2066.1C388.6%20295.4%20331.1%20352%20256%20352c-34.2%200-64.2-8.4-94.2-28.2-27.5-18.1-52.3-43.3-76.2-67.8%2059.1-59.7%20108.4-96%20170.4-96z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20336c44.1%200%2080-35.9%2080-80s-35.9-80-80-80-80%2035.9-80%2080%2035.9%2080%2080%2080zm0-143.7c35.2%200%2064%2028.6%2064%2063.7s-28.8%2063.7-64%2063.7-63.9-28.6-63.9-63.7%2028.7-63.7%2063.9-63.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%20256c0%2017.5-14.4%2032-31.8%2032S224%20272.8%20224%20255.3s15.8-31.3%2032-31.3v-16c-26.5%200-47.9%2021.6-47.9%2048.2s21.5%2048.1%2047.9%2048.1%2048-21.6%2048-48.1v-.2h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-eye-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-eye-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-eye-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M447.1%20256.2C401.8%20204%20339.2%20144%20256%20144c-33.6%200-64.4%209.5-96.9%2029.8C131.7%20191%20103.6%20215.2%2065%20255l-1%201%206.7%206.9C125.8%20319.3%20173.4%20368%20256%20368c36.5%200%2071.9-11.9%20108.2-36.4%2030.9-20.9%2057.2-47.4%2078.3-68.8l5.5-5.5-.9-1.1zM256%20336c-44.1%200-80-35.9-80-80s35.9-80%2080-80%2080%2035.9%2080%2080-35.9%2080-80%2080z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M250.4%20226.8c0-6.9%202-13.4%205.5-18.8-26.5%200-47.9%2021.6-47.9%2048.2s21.5%2048.1%2047.9%2048.1%2048-21.5%2048-48.1c-5.4%203.5-11.9%205.5-18.8%205.5-19.1-.1-34.7-15.7-34.7-34.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-eye($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-eye-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-fastforward-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20155l183.5%20101L48%20356.9V155m224%20.8L448%20256%20272%20356.4V156m-16-28v123.2L32%20128v256l224-123.2V384l224-128-224-128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-fastforward-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-fastforward-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-fastforward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20128v123.2L32%20128v256l224-123.2V384l224-128-224-128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-fastforward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-fastforward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-female-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M296%2048c-92.8%200-168%2075.2-168%20168%200%2043.5%2016.5%2083.2%2043.7%20113L112%20388.7l-42.3-42.3c-3.1-3.1-8.2-3.1-11.3%200-3.1%203.1-3.1%208.2%200%2011.3l42.3%2042.3-50.3%2050.3c-3.1%203.1-3.1%208.2%200%2011.3%201.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3l50.3-50.3%2042.3%2042.3c1.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3c3.1-3.1%203.1-8.2%200-11.3L123.3%20400l59.7-59.7c29.8%2027.1%2069.5%2043.7%20113%2043.7%2092.8%200%20168-75.2%20168-168S388.8%2048%20296%2048zm107.5%20275.5C374.8%20352.2%20336.6%20368%20296%20368s-78.8-15.8-107.5-44.5S144%20256.6%20144%20216s15.8-78.8%2044.5-107.5S255.4%2064%20296%2064s78.8%2015.8%20107.5%2044.5S448%20175.4%20448%20216s-15.8%2078.8-44.5%20107.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-female($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-female-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-filing-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368.5%20128h-225L80%20224v160h352V224l-63.5-96zm44.9%2096H368v-68l45.4%2068zM160%20144h192v80h-48c0%2026.5-21.5%2048-48%2048s-48-21.5-48-48h-48v-80zm-16%2012v68H98.6l45.4-68zm272%20212H96V240h98c7.1%2027.6%2032.2%2048%2062%2048s54.9-20.4%2062-48h98v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-filing-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-filing-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-filing-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20288c-29.8%200-54.9-20.4-62-48H80v144h352V240H318c-7.1%2027.6-32.2%2048-62%2048z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368.5%20128h-.5v80h-16v-80H160v80h-16v-80h-.5L80%20224h128c0%2026.5%2021.5%2048%2048%2048s48-21.5%2048-48h128l-63.5-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-filing($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-filing-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-film-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M56%2088v336h400V88H56zm72%20320H72v-48h56v48zm0-64H72v-48h56v48zm0-64H72v-48h56v48zm0-64H72v-48h56v48zm0-64H72v-48h56v48zm240%20256H144V264h224v144zm0-160H144V104h224v144zm72%20160h-56v-48h56v48zm0-64h-56v-48h56v48zm0-64h-56v-48h56v48zm0-64h-56v-48h56v48zm0-64h-56v-48h56v48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-film-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-film-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-film-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M56%2088v336h400V88H56zm72%20320H72v-48h56v48zm0-64H72v-48h56v48zm0-64H72v-48h56v48zm0-64H72v-48h56v48zm0-64H72v-48h56v48zm240%20112H144v-16h224v16zm72%20144h-56v-48h56v48zm0-64h-56v-48h56v48zm0-64h-56v-48h56v48zm0-64h-56v-48h56v48zm0-64h-56v-48h56v48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-film($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-film-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-finger-print-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M455.8%20274h-.4c-4.4-.2-7.8-3.9-7.6-8.3.1-2.7.2-7.6.2-10.7%200-42.8-18.4-96.1-41.1-118.8-3.1-3.1-3.1-8.2%200-11.3%203.1-3.1%208.2-3.1%2011.3%200C443.9%20150.6%20464%20207.7%20464%20255c0%203.2-.1%208.3-.2%2011.4-.2%204.3-3.7%207.6-8%207.6zM382%20111.3c-1.8%200-3.6-.6-5.1-1.9C341.2%2079.7%20299.4%2064%20256%2064c-41.3%200-79.9%2012-111.7%2034.8-3.6%202.6-8.6%201.7-11.2-1.8-2.6-3.6-1.7-8.6%201.8-11.2C169.5%2061.1%20211.4%2048%20256%2048c47.2%200%2092.5%2017%20131.1%2049.2%203.4%202.8%203.9%207.9%201%2011.3-1.5%201.8-3.8%202.8-6.1%202.8zM71.2%20351.8c-3.4%200-6.6-2.2-7.7-5.7C54%20314.3%2048%20288%2048%20255c0-50.3%2018.2-98.8%2051.2-136.7%202.9-3.3%208-3.7%2011.3-.8%203.3%202.9%203.7%208%20.8%2011.3C80.8%20163.8%2064%20208.6%2064%20255c0%2031%205.7%2056.1%2014.9%2086.5%201.3%204.2-1.1%208.7-5.3%2010-.8.2-1.6.3-2.4.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M122.1%20423.6h-.5c-4.4-.3-7.8-4-7.5-8.5%202.9-49-.7-66.6-5.3-88.9-3.3-16.2-7.1-34.5-9.4-67.8-3.1-43%2010.9-83.4%2039.2-113.9%2029.8-32%2072.6-49.6%20120.6-49.6%2035.5%200%2068.6%2012.4%2095.5%2035.7%2026.2%2022.7%2045.9%2055.2%2057.1%2094%2012.5%2043.1%2016%2097.4%2010.1%20157-.4%204.4-4.4%207.6-8.7%207.2-4.4-.4-7.6-4.3-7.2-8.7%205.6-57.6%202.3-109.9-9.6-151-10.4-35.8-28.4-65.7-52.3-86.4-24-20.8-53.4-31.8-85-31.8-43.5%200-82.1%2015.8-108.8%2044.5-25.3%2027.2-37.8%2063.4-35%20101.9%202.3%2032.2%205.9%2050%209.1%2065.7%204.8%2023.4%208.6%2041.9%205.6%2093-.2%204.4-3.7%207.6-7.9%207.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M168.7%20448.3c-.4%200-.7%200-1.1-.1-4.4-.6-7.4-4.7-6.8-9%208-56.4-.4-118.6-9.6-172-5.8-33.6.8-62.9%2019.1-84.7%2019.3-22.9%2051.3-36.5%2085.7-36.5%2028.6%200%2054.5%2011.3%2074.7%2032.8%2020.4%2021.5%2034.3%2052.7%2040.2%2090%205%2031.5%207.5%2057.2%207.6%2078.5.3%2043-5%2077.3-5.2%2078.7-.7%204.4-4.8%207.4-9.1%206.7-4.4-.7-7.4-4.8-6.7-9.1.1-.3%205.3-34.6%205.1-76.2-.1-20.5-2.5-45.4-7.4-76.1C344.5%20203.9%20306.5%20162%20256%20162c-29.8%200-57.2%2011.5-73.5%2030.8-15.4%2018.3-20.7%2042.4-15.6%2071.6%209.4%2054.6%2018%20118.4%209.7%20177-.6%204-4%206.9-7.9%206.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M316.3%20453c-.5%200-1%200-1.5-.1-4.3-.8-7.2-5-6.4-9.4%203.5-18.2%202.8-37.1%202.8-37.3-.2-4.4%203.3-8.1%207.7-8.3h.3c4.3%200%207.8%203.4%208%207.7%200%20.8.7%2020.9-3.1%2040.9-.6%203.8-4%206.5-7.8%206.5zM216.1%20461.3c-.3%200-.7%200-1-.1-4.4-.6-7.5-4.6-6.9-9%207.2-56.3%204.4-117.8-8.4-182.7-5.9-29.8%202.2-47.3%209.9-56.7%2010-12.2%2025.7-18.9%2044.3-18.9%2028.9%200%2051%2020.7%2060.7%2056.9%207.6%2028.2%2011.9%2068.4%2012.6%20116.3.1%204.4-3.5%208-7.9%208.1h-.1c-4.4%200-7.9-3.5-8-7.9-.6-46.5-4.8-85.4-12.1-112.3-10.9-40.6-35.2-45-45.2-45-13.7%200-25%204.6-31.9%2013-8%209.7-10.2%2024.7-6.6%2043.4%2013.1%2066.6%2016%20129.8%208.5%20187.8-.5%204.2-3.9%207.1-7.9%207.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M266%20464h-.9c-4.4-.5-7.6-4.4-7.1-8.8%207.9-71.3%201.8-165.3-12.9-201.1-1.7-4.1.3-8.8%204.3-10.5%204.1-1.7%208.8.3%2010.5%204.3%2015.9%2038.5%2022.3%20134.1%2014.1%20208.9-.5%204.2-4%207.2-8%207.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-finger-print($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-finger-print-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flag-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20112c-11%201.4-24.9%203.5-39.7%203.5-23.1%200-44-5.7-65.2-10.2-21.5-4.6-43.7-9.3-67.2-9.3-46.9%200-62.8%2010.1-64.4%2011.2l-3.4%202.4V416h16V272.7c6-2.5%2021.8-6.9%2051.9-6.9%2021.8%200%2042.2%208.3%2063.9%2013%2022%204.7%2044.8%209.6%2069.5%209.6%2014.7%200%2027.7-2%2038.7-3.3%206-.7%2011.3-1.4%2016-2.2V109.5c-4.7.9-10.1%201.7-16.1%202.5zm0%20157c-11%201.4-23.9%203.5-38.7%203.5-23.1%200-45-4.7-66.2-9.2-21.5-4.6-43.6-13.3-67.1-13.3-25.7%200-41.9%203-51.9%206V118.7c6-2.5%2021.9-6.8%2051.9-6.8%2021.8%200%2042.2%204.3%2063.9%209%2022%204.7%2043.8%2010.6%2068.5%2010.6%2014.7%200%2028.7-2%2039.7-3.3L368%20269z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flag-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flag-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flag-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20112c-11%201.4-24.9%203.5-39.7%203.5-23.1%200-44-5.7-65.2-10.2-21.5-4.6-43.7-9.3-67.2-9.3-46.9%200-62.8%2010.1-64.4%2011.2l-3.4%202.4V416h16V272.7c6-2.5%2021.8-6.9%2051.9-6.9%2021.8%200%2042.2%208.3%2063.9%2013%2022%204.7%2044.8%209.6%2069.5%209.6%2014.7%200%2027.7-2%2038.7-3.3%206-.7%2011.3-1.4%2016-2.2V109.5c-4.7.9-10.1%201.7-16.1%202.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flag($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flag-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flame-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M223.9%2048c25.7%20134.6-96.7%20131.9-95.9%20267.4.7%20111%20105%20148.6%20128.1%20148.6%2023.2%200%20113.9-24.1%20126.9-148.6C393.7%20214%20310.6%20107.4%20223.9%2048zm32.2%20408.6s-40.7-33.3-40.7-74.3S256%20308%20256%20308s40.3%2033.3%2040.3%2074.3-40.2%2074.3-40.2%2074.3zM367.2%20314c-2.8%2026.9-9.7%2050.6-20.5%2070.5-8.7%2016.2-20.1%2029.8-33.7%2040.6-6.5%205.2-13.3%209.4-19.8%2012.8%2010-14.8%2019.1-34.1%2019.1-55.6%200-47.2-43.8-83.9-45.7-85.4l-10.6-8.7-10.6%208.7c-1.9%201.5-46%2038.2-46%2085.4%200%2020.3%208.2%2038.6%2017.6%2053.1-7.4-4-15.2-9.1-23-15.3-14.7-11.8-26.4-25.6-34.7-41.2-10.1-18.8-15.2-40.2-15.4-63.5-.4-59.4%2024.1-88.9%2050-120.1%2024.6-29.6%2049.8-60.1%2049.5-113.4%2032.5%2026.8%2061.3%2058.5%2082.8%2091.8%2031.4%2048.3%2045.5%2096.8%2041%20140.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flame-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flame-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flame-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M223.9%2048c25.7%20134.6-96.7%20131.9-95.9%20267.4.7%20111%20105%20148.6%20128.1%20148.6%2023.2%200%20113.9-24.1%20126.9-148.6C393.7%20214%20310.6%20107.4%20223.9%2048zm32.2%20408.6s-40.7-33.3-40.7-74.3S256%20308%20256%20308s40.3%2033.3%2040.3%2074.3-40.2%2074.3-40.2%2074.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flame($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flame-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flash-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M273.9%20132l-16.5%2089.1L254%20240h84l-99.8%20140%2016.5-89.1L258%20272h-83.9l99.8-140m28.8-68L143%20288h95.8l-29.5%20160L369%20224h-95.8l29.5-160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flash-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flash-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flash-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M302.7%2064L143%20288h95.8l-29.5%20160L369%20224h-95.8l29.5-160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flash($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flash-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flask-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M436.9%20354.4L320%20159V64h16V48h-32v115.4l2.5%203.8L423.1%20362c6.8%2012.8%209.3%2026%209%2038-.2%209.3-2%2017.9-6.5%2025.6-8.5%2014.1-23.2%2022.4-40.6%2022.4H129.1c-17.5%200-32.5-8.4-41-22.7-11.9-19.8-10.9-38.1%202.3-63.1L181.8%20208H240v-16h-48.7l14.7-24.8%202-3.8V160h48v-16h-48v-32h32V96h-32V64h80V48H176v16h16v95L76.1%20354.4C67.7%20370.3%2063.6%20385.8%2064%20400c1.1%2036.5%2028.7%2064%2065.1%2064H385c36.3%200%2062.1-27.6%2063-64%20.3-14.2-2.6-29.7-11.1-45.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M108.3%20358.6c-6.9%2010.5-10.9%2024.1-10.9%2033.5%200%2027.6%2015.8%2039.8%2045.7%2039.8H369c29.8%200%2045-15.7%2045.7-40%20.3-9.5-3.1-22.7-10.1-33.3L332.7%20240H179.5l-71.2%20118.6zM323.7%20256l67.2%20110.9.2.1.2.2c5.4%208.2%207.6%2018.3%207.5%2024.2-.2%207.8-2.5%2014-6.7%2017.8-4.8%204.3-12.7%206.8-23%206.8H143c-11.1%200-19.3-2.2-23.7-6-1.5-1.2-6-5.1-6-18.1%200-5.9%202.9-16.4%208.3-24.7l.2-.3h.2L188.6%20256h135.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flask-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flask-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flask-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M391%20367l-.2-.1L323.7%20256H188.6L122%20366.9h-.2l-.2.3c-5.5%208.3-8.3%2018.8-8.3%2024.7%200%2012.9%204.5%2016.8%206%2018.1%204.5%203.8%2012.7%206%2023.7%206h226c10.3%200%2018.2-2.5%2023-6.8%204.2-3.8%206.5-10%206.7-17.8.2-5.9-2.1-16-7.5-24.2l-.2-.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M436.9%20354.4L320%20159V64h16V48H176v16h16v95L76.1%20354.4C67.7%20370.3%2063.6%20385.8%2064%20400c1.1%2036.5%2028.7%2064%2065.1%2064H385c36.3%200%2062.1-27.6%2063-64%20.3-14.2-2.6-29.7-11.1-45.6zM216%2096h24v16h-24V96zm0%2048h40v16h-40v-16zm-16.7%2048H240v16h-50.2l9.5-16zm215.3%20200c-.7%2024.2-15.9%2040-45.7%2040H143c-29.9%200-45.7-12.2-45.7-39.8%200-9.5%204-23%2010.9-33.5L179.5%20240h153.2l71.8%20118.7c7%2010.6%2010.4%2023.9%2010.1%2033.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flask($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flask-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flower-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M385.1%20230.2c-26.7%200-60.1%206.9-86.3%2013.5-.9-3.2-2.1-6.2-3.7-9.1%2023.2-13.8%2051.7-32.5%2070.5-51.4%2036.7-36.7%2048.3-63.6%2037.6-74.3-2.6-2.6-6-3.8-10.3-3.8-13.8%200-36%2013.4-64%2041.4-18.8%2018.8-37.6%2047.2-51.4%2070.4-2.8-1.6-5.9-2.8-9.1-3.8%206.7-26.2%2013.5-59.5%2013.5-86.1%200-51.9-10.8-79.1-26-79.1s-26%2027.2-26%2079.1c0%2026.6%206.8%2060%2013.5%2086.1-3.2.9-6.2%202.2-9.1%203.8-13.8-23.2-32.5-51.6-51.4-70.4-28-28-50.3-41.4-64-41.4-4.3%200-7.7%201.3-10.3%203.8-10.8%2010.8.8%2037.6%2037.6%2074.3%2018.9%2018.9%2047.3%2037.6%2070.5%2051.4-1.5%202.8-2.8%205.9-3.7%209.1-26.2-6.7-59.6-13.5-86.3-13.5-51.8%200-78.7%2010.6-78.7%2025.8s26.9%2026.2%2078.9%2026.2c26.7%200%2060.2-6.9%2086.4-13.6.9%203.1%202.2%206.2%203.8%209-23.3%2013.8-51.8%2032.6-70.7%2051.5-36.7%2036.7-48.3%2063.6-37.6%2074.3%202.6%202.6%206%203.8%2010.3%203.8%2013.8%200%2036-13.4%2064-41.4%2018.9-18.9%2037.8-47.5%2051.6-70.8%202.8%201.5%205.8%202.8%209%203.7-6.7%2026.2-13.6%2059.8-13.6%2086.5%200%2051.9%2010.8%2078.6%2026%2078.6s26-26.7%2026-78.6c0-26.8-6.9-60.3-13.6-86.5%203.1-.9%206.1-2.1%209-3.7%2013.8%2023.3%2032.6%2051.9%2051.6%2070.8%2028%2028%2050.3%2041.4%2064%2041.4%204.3%200%207.7-1.3%2010.3-3.8%2010.8-10.8-.8-37.6-37.6-74.3-18.9-18.9-47.5-37.7-70.7-51.5%201.6-2.8%202.8-5.8%203.8-9%2026.2%206.7%2059.7%2013.6%2086.4%2013.6%2051.9%200%2078.9-10.8%2078.9-26s-27.1-26-79.1-26zM339.4%20157c32.9-32.9%2048.9-36.6%2052.8-37-.2%202.1-1.2%206.8-5.9%2014.8-6.3%2010.8-17%2023.9-31.1%2037.9-12.6%2012.6-31.8%2027-56.2%2042.2l-1.8-1.8c15.2-24.2%2029.7-43.5%2042.2-56.1zm-89.7-78.7c2.4-9%204.9-13.1%206.3-14.7%201.4%201.7%203.9%205.7%206.3%2014.7%203.2%2012.1%204.9%2028.9%204.9%2048.8%200%2017.8-3.4%2041.6-9.9%2069.5h-2.6c-6.5-27.9-9.9-51.7-9.9-69.5.1-19.8%201.7-36.7%204.9-48.8zM213%20215c-24.3-15.2-43.6-29.6-56.2-42.2-14-14-24.7-27.1-31.1-37.9-4.7-8-5.8-12.7-5.9-14.8%203.8.4%2019.9%204.1%2052.8%2037%2012.6%2012.6%2027%2031.8%2042.2%2056.2-.6.5-1.2%201.1-1.8%201.7zm-86.1%2052.4c-19.8%200-36.7-1.7-48.7-5-9-2.4-13-5-14.6-6.4%201.6-1.3%205.6-3.9%2014.7-6.2%2012-3.1%2028.8-4.7%2048.6-4.7%2017.8%200%2041.7%203.4%2069.7%209.9v2.4c-28%206.6-51.9%2010-69.7%2010zm45.7%2088c-32.9%2032.9-48.9%2036.6-52.8%2037%20.2-2.1%201.2-6.8%205.9-14.8%206.3-10.8%2017-23.9%2031.1-37.9%2012.6-12.6%2032-27.1%2056.5-42.4.5.6%201.1%201.1%201.7%201.7-15.3%2024.4-29.8%2043.8-42.4%2056.4zm89.7%2078.5c-2.4%209-5%2013-6.3%2014.5-1.3-1.6-3.9-5.5-6.3-14.5-3.2-12-4.8-28.8-4.8-48.6%200-17.9%203.4-41.8%2010-69.9h2.4c6.5%2028.1%2010%2052.1%2010%2069.9-.2%2019.9-1.8%2036.6-5%2048.6zM256%20288c-17.7%200-32-14.3-32-32s14.3-32%2032-32%2032%2014.3%2032%2032-14.3%2032-32%2032zm42.7%209.3c24.5%2015.2%2043.9%2029.7%2056.5%2042.4%2014%2014%2024.8%2027.1%2031.1%2037.9%204.7%208%205.8%2012.7%205.9%2014.8-3.8-.4-19.9-4.1-52.8-37-12.6-12.6-27.1-32-42.4-56.5.6-.5%201.2-1%201.7-1.6zm135.1-34.8c-12%203.2-28.9%204.8-48.7%204.8-17.8%200-41.7-3.4-69.7-9.9V256v-1c28-6.5%2051.9-9.9%2069.7-9.9%2019.8%200%2036.6%201.7%2048.7%204.8%209%202.4%2013%204.9%2014.6%206.3-1.6%201.4-5.6%204-14.6%206.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M318.4%20376.4c-8.5-8.5-16.9-18.7-24.8-29.5%202%2013.2%203.3%2026.4%203.3%2038.4%200%2011.7-.5%2022.5-1.6%2032.1%2012.3%2021.8%2024.3%2032.7%2034%2032.7%201.6%200%203.2-.3%204.7-.9%2011-4.5%2013.3-23.3%204.5-54.3-6.4-5.3-13.1-11.5-20.1-18.5zm9.8%2058.4c-2.5-1.4-8.7-5.9-17.6-20.7.6-7.3%201-15.2%201.1-23.5%204.7%204.5%209.2%208.8%2013.7%2012.6%204.7%2018.5%203.9%2028.1%202.8%2031.6zM193.8%20136.1c8.4%208.4%2016.7%2018.5%2024.6%2029.2-2-13.2-3.2-26.3-3.2-38.2%200-11.7.5-22.5%201.6-32.1-12.3-21.8-24.3-32.7-34-32.7-1.6%200-3.2.3-4.7.9-11%204.5-13.3%2023.3-4.5%2054.3%206.4%205.4%2013.2%2011.6%2020.2%2018.6zm-10-58.4c2.5%201.4%208.7%205.9%2017.6%2020.7-.6%207.3-1%2015.1-1.1%2023.4-4.6-4.5-9.2-8.7-13.7-12.6-4.7-18.4-3.9-28-2.8-31.5zM135.8%20318.6c8.5-8.5%2018.7-16.9%2029.5-24.8-13.2%202-26.4%203.3-38.4%203.3-11.7%200-22.5-.5-32.1-1.6-25.5%2014.4-36.1%2028.2-31.8%2038.7%202.6%206.4%2010.1%209.9%2022.1%209.9%208.5%200%2019.3-1.7%2032.2-5.4%205.4-6.4%2011.5-13.1%2018.5-20.1zm-50.7%2010.7c-3.8%200-6.3-.5-7.6-.9%201.4-2.6%205.9-8.7%2020.7-17.6%207.3.6%2015.2%201%2023.5%201.1-4.5%204.6-8.7%209.2-12.6%2013.7-9.5%202.4-17.7%203.7-24%203.7zM376.2%20193.8c-8.5%208.5-18.7%2016.9-29.5%2024.8%2013.2-2%2026.4-3.3%2038.4-3.3%2011.7%200%2022.5.5%2032.1%201.6%2025.5-14.4%2036.1-28.2%2031.8-38.7-2.6-6.4-10.1-9.9-22.1-9.9-8.5%200-19.3%201.7-32.2%205.4-5.4%206.5-11.5%2013.2-18.5%2020.1zm50.7-10.6c3.8%200%206.3.5%207.6.9-1.4%202.6-6%208.7-20.7%2017.6-7.3-.6-15.2-1-23.5-1.1%204.5-4.6%208.7-9.2%2012.6-13.7%209.5-2.5%2017.7-3.7%2024-3.7zM193.6%20376.4c-8.3%208.3-16.3%2015.6-23.8%2021.6-7.8%2028.2-5.5%2045.4%204.9%2049.9%201.6.7%203.2%201%204.9%201%2010.3%200%2023.2-12%2036.7-36.2-.7-8.4-1.1-17.5-1.1-27.3%200-12%201.3-25.2%203.3-38.4-8%2010.7-16.4%2020.9-24.9%2029.4zm-12.8%2057.1c-.8-2.8-2-10.4%202.1-27.1%205.6-4.7%2011.4-10%2017.4-15.8.1%206.5.3%2012.7.8%2018.6-9.7%2016.4-17%2022.7-20.3%2024.3zM318.4%20136.2c8.3-8.3%2016.2-15.5%2023.7-21.5%207.9-28.4%205.7-45.8-4.8-50.2-1.6-.7-3.2-1-4.9-1-10.3%200-23.2%2012-36.7%2036.2.7%208.4%201.1%2017.5%201.1%2027.3%200%2012.1-1.3%2025.3-3.3%2038.7%208-10.7%2016.4-21%2024.9-29.5zm12.8-57.3c.8%202.8%202%2010.4-2.2%2027.4-5.6%204.7-11.4%2010-17.3%2015.7-.1-6.6-.3-12.9-.8-18.8%209.7-16.4%2017-22.6%2020.3-24.3zM99.6%20216.5c8.4-.7%2017.5-1.1%2027.3-1.1%2012%200%2025.1%201.3%2038.3%203.3-10.7-7.9-20.9-16.3-29.4-24.8-8.3-8.3-15.6-16.3-21.7-23.9-11.3-3.1-20.9-4.6-28.6-4.6-11.4%200-18.6%203.3-21.2%209.5-4.6%2010.9%207.1%2025.9%2035.3%2041.6zm-14-36.3c5.4%200%2012.3%201%2020.1%202.9%204.7%205.6%2010%2011.4%2015.8%2017.4-6.5.1-12.7.3-18.6.8-16.4-9.7-22.6-17-24.3-20.3%201.4-.4%203.6-.8%207-.8zM412.4%20296c-8.4.7-17.5%201.1-27.3%201.1-12%200-25.2-1.3-38.4-3.3%2010.8%207.9%2021%2016.4%2029.5%2024.8%208.3%208.3%2015.5%2016.3%2021.6%2023.8%2011.4%203.2%2020.9%204.7%2028.6%204.7%2011.4%200%2018.6-3.3%2021.2-9.5%204.7-11-7-25.9-35.2-41.6zm14%2036.3c-5.4%200-12.3-1-20.2-3-4.7-5.6-10-11.4-15.8-17.4%206.5-.1%2012.7-.3%2018.6-.8%2016.4%209.7%2022.6%2017%2024.3%2020.3-1.3.5-3.5.9-6.9.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flower-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flower-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-flower-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M385.1%20230.2c-26.7%200-60.1%206.9-86.3%2013.5-.9-3.2-2.1-6.2-3.7-9.1%2023.2-13.8%2051.7-32.5%2070.5-51.4%2036.7-36.7%2048.3-63.6%2037.6-74.3-2.6-2.6-6-3.8-10.3-3.8-13.8%200-36%2013.4-64%2041.4-18.8%2018.8-37.6%2047.2-51.4%2070.4-2.8-1.6-5.9-2.8-9.1-3.8%206.7-26.2%2013.5-59.5%2013.5-86.1%200-51.9-10.8-79.1-26-79.1s-26%2027.2-26%2079.1c0%2026.6%206.8%2060%2013.5%2086.1-3.2.9-6.2%202.2-9.1%203.8-13.8-23.2-32.5-51.6-51.4-70.4-28-28-50.3-41.4-64-41.4-4.3%200-7.7%201.3-10.3%203.8-10.8%2010.8.8%2037.6%2037.6%2074.3%2018.9%2018.9%2047.3%2037.6%2070.5%2051.4-1.5%202.8-2.8%205.9-3.7%209.1-26.2-6.7-59.6-13.5-86.3-13.5-51.8%200-78.7%2010.6-78.7%2025.8s26.9%2026.2%2078.9%2026.2c26.7%200%2060.2-6.9%2086.4-13.6.9%203.1%202.2%206.2%203.8%209-23.3%2013.8-51.8%2032.6-70.7%2051.5-36.7%2036.7-48.3%2063.6-37.6%2074.3%202.6%202.6%206%203.8%2010.3%203.8%2013.8%200%2036-13.4%2064-41.4%2018.9-18.9%2037.8-47.5%2051.6-70.8%202.8%201.5%205.8%202.8%209%203.7-6.7%2026.2-13.6%2059.8-13.6%2086.5%200%2051.9%2010.8%2078.6%2026%2078.6s26-26.7%2026-78.6c0-26.8-6.9-60.3-13.6-86.5%203.1-.9%206.1-2.1%209-3.7%2013.8%2023.3%2032.6%2051.9%2051.6%2070.8%2028%2028%2050.3%2041.4%2064%2041.4%204.3%200%207.7-1.3%2010.3-3.8%2010.8-10.8-.8-37.6-37.6-74.3-18.9-18.9-47.5-37.7-70.7-51.5%201.6-2.8%202.8-5.8%203.8-9%2026.2%206.7%2059.7%2013.6%2086.4%2013.6%2051.9%200%2078.9-10.8%2078.9-26s-27.1-26-79.1-26zM256%20272c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M318.4%20376.4c-8.5-8.5-16.9-18.7-24.8-29.5%202%2013.2%203.3%2026.4%203.3%2038.4%200%2011.7-.5%2022.5-1.6%2032.1%2012.3%2021.8%2024.3%2032.7%2034%2032.7%201.6%200%203.2-.3%204.7-.9%2011-4.5%2013.3-23.3%204.5-54.3-6.4-5.3-13.1-11.5-20.1-18.5zM193.8%20136.1c8.4%208.4%2016.7%2018.5%2024.6%2029.2-2-13.2-3.2-26.3-3.2-38.2%200-11.7.5-22.5%201.6-32.1-12.3-21.8-24.3-32.7-34-32.7-1.6%200-3.2.3-4.7.9-11%204.5-13.3%2023.3-4.5%2054.3%206.4%205.4%2013.2%2011.6%2020.2%2018.6zM135.8%20318.6c8.5-8.5%2018.7-16.9%2029.5-24.8-13.2%202-26.4%203.3-38.4%203.3-11.7%200-22.5-.5-32.1-1.6-25.5%2014.4-36.1%2028.2-31.8%2038.7%202.6%206.4%2010.1%209.9%2022.1%209.9%208.5%200%2019.3-1.7%2032.2-5.4%205.4-6.4%2011.5-13.1%2018.5-20.1zM376.2%20193.8c-8.5%208.5-18.7%2016.9-29.5%2024.8%2013.2-2%2026.4-3.3%2038.4-3.3%2011.7%200%2022.5.5%2032.1%201.6%2025.5-14.4%2036.1-28.2%2031.8-38.7-2.6-6.4-10.1-9.9-22.1-9.9-8.5%200-19.3%201.7-32.2%205.4-5.4%206.5-11.5%2013.2-18.5%2020.1zM193.6%20376.4c-8.3%208.3-16.3%2015.6-23.8%2021.6-7.8%2028.2-5.5%2045.4%204.9%2049.9%201.6.7%203.2%201%204.9%201%2010.3%200%2023.2-12%2036.7-36.2-.7-8.4-1.1-17.5-1.1-27.3%200-12%201.3-25.2%203.3-38.4-8%2010.7-16.4%2020.9-24.9%2029.4zM318.4%20136.2c8.3-8.3%2016.2-15.5%2023.7-21.5%207.9-28.4%205.7-45.8-4.8-50.2-1.6-.7-3.2-1-4.9-1-10.3%200-23.2%2012-36.7%2036.2.7%208.4%201.1%2017.5%201.1%2027.3%200%2012.1-1.3%2025.3-3.3%2038.7%208-10.7%2016.4-21%2024.9-29.5zM99.6%20216.5c8.4-.7%2017.5-1.1%2027.3-1.1%2012%200%2025.1%201.3%2038.3%203.3-10.7-7.9-20.9-16.3-29.4-24.8-8.3-8.3-15.6-16.3-21.7-23.9-11.3-3.1-20.9-4.6-28.6-4.6-11.4%200-18.6%203.3-21.2%209.5-4.6%2010.9%207.1%2025.9%2035.3%2041.6zM412.4%20296c-8.4.7-17.5%201.1-27.3%201.1-12%200-25.2-1.3-38.4-3.3%2010.8%207.9%2021%2016.4%2029.5%2024.8%208.3%208.3%2015.5%2016.3%2021.6%2023.8%2011.4%203.2%2020.9%204.7%2028.6%204.7%2011.4%200%2018.6-3.3%2021.2-9.5%204.7-11-7-25.9-35.2-41.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-flower($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-flower-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-folder-open-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M456.3%20160H448v-41c0-13.3-9.4-23-22.8-23H230.9c-2.8%200-4.3-.6-6.1-2.4l-22.5-22.5-.2-.2c-4.9-4.6-8.9-6.9-17.3-6.9H88.7C74.9%2064%2064%2074.3%2064%2087v73h-8.3c-12.8%200-25.3%205.1-23.5%2024.3C34%20203.5%2055.7%20423%2055.7%20423c2.7%2017.8%2011.7%2025%2025%2025h352.5c12.7%200%2021-7.8%2023-25%200%200%2022.2-212.9%2023.6-233.5s-8.9-29.5-23.5-29.5zM80%2087c0-4.3%204.4-7%208.7-7h96.1c3.5%200%203.7.2%206.2%202.5l22.5%2022.4c4.8%204.8%2010.4%207.1%2017.4%207.1h194.3c4.5%200%206.8%202.6%206.8%207v41H80V87zm360.2%20336c-.8%204.7-3.7%209-8%209H82c-4.5%200-9.5-3.5-10.3-9l-24-239c0-4.4%203.6-8%208-8h400.6c4.4%200%208%203.6%208%208l-24.1%20239z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-folder-open-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-folder-open-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-folder-open-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20119c0-13.3-9.4-23-22.8-23H230.9c-2.8%200-4.3-.6-6.1-2.4l-22.5-22.5-.2-.2c-4.9-4.6-8.9-6.9-17.3-6.9H88.7C74.9%2064%2064%2074.3%2064%2087v57h384v-25zM64%20160h-8.3c-12.8%200-25.3%205.1-23.5%2024.3S55.7%20423%2055.7%20423c2.7%2017.8%2011.7%2025%2025%2025h352.5c12.7%200%2021-7.8%2023-25%200%200%2022.2-212.9%2023.6-233.5%201.4-20.5-8.9-29.5-23.6-29.5H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-folder-open($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-folder-open-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-folder-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M457%2096H215c-2.79%200-4.27-.585-6.094-2.408l-22.5-22.5-.17-.163C181.367%2066.332%20177.362%2064%20169%2064H57c-13.785%200-25%2010.317-25%2023v336c0%2013.317%2011.683%2025%2025%2025h400c12.683%200%2023-11.215%2023-25V119c0-13.327-9.673-23-23-23zM57%2080h112c3.497%200%203.737.19%206.175%202.488l22.417%2022.418c4.84%204.84%2010.372%207.094%2017.408%207.094h242c4.448%200%207%202.552%207%207v42.376a23.885%2023.885%200%200%200-8-1.376H56c-2.805%200-5.496.488-8%201.376V87c0-4.323%204.672-7%209-7zm407%20343c0%204.328-2.677%209-7%209H57c-4.458%200-9-4.542-9-9V184c0-4.41%203.59-8%208-8h400c4.41%200%208%203.59%208%208v239z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-folder-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-folder-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-folder-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M472%20176H40c-4.41%200-8%203.59-8%208v239c0%2013.317%2011.683%2025%2025%2025h400c12.683%200%2023-11.215%2023-25V184c0-4.41-3.59-8-8-8zM457%2096H215c-2.79%200-4.27-.585-6.094-2.408l-22.5-22.5-.17-.163C181.367%2066.332%20177.362%2064%20169%2064H57c-13.785%200-25%2010.317-25%2023v74.376A23.885%2023.885%200%200%201%2040%20160h432c2.805%200%205.496.488%208%201.376V119c0-13.327-9.673-23-23-23z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-folder($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-folder-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-football-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.137%2048%2048%20141.136%2048%20256s93.137%20208%20208%20208c114.872%200%20208-93.138%20208-208S370.87%2048%20256%2048zm41.15%20394.18c-13.513%202.656-30.326%204.186-44%204.45a190.525%20190.525%200%200%201-38.5-4.494%20978.146%20978.146%200%200%201-6.804-1.777l-24.417-65.436L203.073%20336h105.854l.57%201.076%2019.34%2038.852-23.618%2064.282c-2.667.714-5.358%201.37-8.07%201.97zM89.318%20163.52l18.188%2052.284.175.504-42.304%2036.61c.516-32.385%209.144-62.832%2023.94-89.398zm100.26-86.242L247%20116.576v58.147l-70.997%2060.067-49.403-22.51-4.167-1.9-22.332-64.018c22.01-31.204%2053.14-55.532%2089.478-69.082zm135.448%20169.926l.92.765L307.57%20320H204.43l-18.484-72.453.445-.376%2068.874-58.27%2069.76%2058.306zm121.6%205.715l-42.453-36.737.127-.364%2018.297-52.452c14.85%2026.604%2023.512%2057.105%2024.03%2089.553zm-35.06-106.853L389.13%20210.55l-53.992%2024.388L264%20174.723v-58.147l57.596-39.415c36.362%2013.484%2067.905%2037.753%2089.968%2068.907zM66.144%20273.414l53.755-46.518%2049.54%2022.6.558.254%2019.718%2077.287-20.433%2038.53-69.86-.916c-18.348-26.36-30.214-57.545-33.28-91.236zm276.574%2092.15l-20.435-38.528%2019.752-77.416%2049.997-22.78%2053.822%2046.574c-3.065%2033.69-14.932%2064.877-33.277%2091.236l-69.86.915zM255.256%20102.67L209.13%2071.172A190.3%20190.3%200%200%201%20256%2065.337c15.96%200%2031.466%201.982%2046.293%205.694l-47.036%2031.64zm-88.834%20278.86l.848%202.51%2019.947%2049.78c-29.24-11.35-55.01-29.703-75.232-53.005l54.438.714zm158.14%2052.374l17.934-48.608%201.627-3.748%2055.892-.732c-20.272%2023.36-46.123%2041.746-75.453%2053.088z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-football-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-football-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-football-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.137%2048%2048%20141.136%2048%20256s93.137%20208%20208%20208c114.872%200%20208-93.138%20208-208S370.87%2048%20256%2048zm41.15%20394.18c-13.513%202.656-30.326%204.186-44%204.45a190.525%20190.525%200%200%201-38.5-4.494%20978.146%20978.146%200%200%201-6.804-1.777l-24.417-65.436L203.073%20336h105.854l.57%201.076%2019.34%2038.852-23.618%2064.282c-2.667.714-5.358%201.37-8.07%201.97zM189.58%2077.28L247%20116.576v58.147l-70.997%2060.067-49.403-22.51-4.167-1.9-22.332-64.018c22.01-31.204%2053.14-55.532%2089.478-69.082zm221.986%2068.787l-22.432%2064.483-53.992%2024.388L264%20174.723v-58.147l57.596-39.415c36.362%2013.484%2067.905%2037.753%2089.968%2068.907zM66.144%20273.414l53.756-46.518%2049.54%2022.6.558.254%2019.718%2077.287-20.433%2038.53-69.86-.916c-18.348-26.36-30.214-57.545-33.28-91.236zm276.575%2092.15l-20.435-38.528%2019.752-77.416%2049.997-22.78%2053.822%2046.574c-3.065%2033.69-14.932%2064.877-33.277%2091.236l-69.86.915z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-football($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-football-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-funnel-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2064v32l176%20192v128l96%2032V288L480%2096V64H32zm432%2026L288%20282v143.8l-64-21.3V282L48%2090V80h416v10z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-funnel-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-funnel-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-funnel-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2064v32l176%20192v128l96%2032V288L480%2096V64H32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-funnel($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-funnel-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-game-controller-a-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M194.822%20240H160v-34.762c0-2.817-2.604-5.238-5.303-5.238h-22.145c-2.698%200-4.552%202.372-4.552%205.178V240H92.533c-2.615%200-4.533%202.143-4.533%204.77V266.2c0%202.698%202.03%205.803%204.86%205.803H128v35.468c0%202.615%202.143%204.533%204.77%204.533H154.2c2.698%200%205.803-2.03%205.803-4.86V272h34.763c2.817%200%205.238-2.604%205.238-5.303v-22.145c0-2.698-2.372-4.552-5.178-4.552zM362.314%20279.063c-10.736%200-19.45%208.515-19.45%2019.153%200%2010.555%208.714%2019.084%2019.45%2019.084%2010.783%200%2019.498-8.53%2019.498-19.084%200-10.638-8.714-19.153-19.498-19.153zM319.766%20237.165c-10.736%200-19.45%208.603-19.45%2019.168%200%2010.566%208.714%2019.153%2019.45%2019.153%2010.783%200%2019.498-8.587%2019.498-19.153%200-10.565-8.715-19.168-19.498-19.168zM404.862%20237.165c-10.73%200-19.442%208.603-19.442%2019.168%200%2010.566%208.714%2019.153%2019.442%2019.153%2010.737%200%2019.452-8.587%2019.452-19.153%200-10.565-8.714-19.168-19.452-19.168zM362.314%20195.3c-10.736%200-19.45%208.603-19.45%2019.17%200%2010.566%208.714%2019.146%2019.45%2019.146%2010.783%200%2019.498-8.58%2019.498-19.146%200-10.568-8.714-19.17-19.498-19.17z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M369.27%20162c25.837%200%2049.703%209.314%2067.203%2026.23C454.225%20205.385%20464%20229.246%20464%20255.417c0%2026.303-9.806%2050.405-27.61%2067.87C418.825%20340.512%20394.99%20350%20369.27%20350H142.74c-25.713%200-49.55-9.487-67.118-26.715C57.81%20305.818%2048%20281.717%2048%20255.418c0-26.167%209.78-50.028%2027.54-67.188%2017.503-16.915%2041.37-26.23%2067.2-26.23h226.53m0-16H142.74C81.54%20146%2032%20191.458%2032%20255.418%2032%20319.418%2081.54%20366%20142.74%20366h226.528C430.49%20366%20480%20319.42%20480%20255.418%20480%20191.458%20430.49%20146%20369.27%20146z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-game-controller-a-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-game-controller-a-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-game-controller-a-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M369.27%20146H142.74C81.54%20146%2032%20191.458%2032%20255.418%2032%20319.418%2081.54%20366%20142.74%20366h226.528C430.49%20366%20480%20319.42%20480%20255.418%20480%20191.458%20430.49%20146%20369.27%20146zM200%20266.697c0%202.698-2.42%205.303-5.238%205.303H160v35.14c0%202.83-3.104%204.86-5.803%204.86H132.77c-2.628%200-4.77-1.918-4.77-4.533V272H92.86c-2.83%200-4.86-3.104-4.86-5.803V244.77c0-2.628%201.918-4.77%204.533-4.77H128v-34.823c0-2.806%201.854-5.178%204.553-5.178h22.145c2.698%200%205.303%202.42%205.303%205.237V240h34.823c2.806%200%205.178%201.854%205.178%204.553v22.144zm119.766%208.79c-10.736%200-19.45-8.588-19.45-19.154%200-10.565%208.714-19.168%2019.45-19.168%2010.783%200%2019.498%208.603%2019.498%2019.168%200%2010.566-8.715%2019.153-19.498%2019.153zm42.548%2041.814c-10.736%200-19.45-8.528-19.45-19.083%200-10.64%208.714-19.153%2019.45-19.153%2010.783%200%2019.498%208.515%2019.498%2019.153%200%2010.554-8.714%2019.084-19.498%2019.084zm0-83.685c-10.736%200-19.45-8.58-19.45-19.146%200-10.568%208.714-19.17%2019.45-19.17%2010.783%200%2019.498%208.602%2019.498%2019.17%200%2010.566-8.714%2019.145-19.498%2019.145zm42.548%2041.87c-10.73%200-19.442-8.586-19.442-19.152%200-10.565%208.714-19.168%2019.442-19.168%2010.737%200%2019.452%208.603%2019.452%2019.168%200%2010.566-8.714%2019.153-19.452%2019.153z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-game-controller-a($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-game-controller-a-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-game-controller-b-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M308.076%20203.93c-11.058%200-20.076%209.013-20.076%2020.103%200%2011.09%209.02%2020.107%2020.076%2020.107%2011.13%200%2020.148-9.02%2020.148-20.107%200-11.09-9.017-20.104-20.148-20.104zM351.988%20247.878c-11.058%200-20.053%208.95-20.053%2020.106%200%2011.064%208.995%2020.016%2020.053%2020.016%2011.146%200%2020.148-8.95%2020.148-20.016%200-11.157-9.002-20.106-20.148-20.106zM135.234%20184.367C113.594%20184.367%2096%20202.17%2096%20224.01c0%2021.865%2017.594%2039.623%2039.234%2039.623%2021.655%200%2039.25-17.758%2039.25-39.623%200-21.84-17.594-39.643-39.25-39.643zm-.11%2059.09c-10.69%200-19.344-8.72-19.344-19.447%200-10.725%208.655-19.44%2019.343-19.44%2010.64%200%2019.297%208.716%2019.297%2019.44%200%2010.726-8.656%2019.447-19.297%2019.447zM351.988%20160c-11.058%200-20.053%209.014-20.053%2020.107%200%2011.09%208.995%2020.083%2020.053%2020.083%2011.146%200%2020.148-8.993%2020.148-20.083%200-11.093-9.002-20.107-20.148-20.107zM395.947%20203.93c-11.105%200-20.1%209.013-20.1%2020.103%200%2011.09%208.994%2020.107%2020.1%2020.107%2011.06%200%2020.053-9.02%2020.053-20.107%200-11.09-8.994-20.104-20.053-20.104z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M466.28%20248.866c-21.158-88.47-43.632-135.49-88.455-148.83-9.765-2.9-18.077-4.036-25.75-4.036-27.597%200-46.937%2014.683-96.08%2014.683-49.173%200-68.5-14.68-96.06-14.683-7.666%200-15.964%201.135-25.722%204.036-44.87%2013.34-67.342%2060.36-88.46%20148.83C24.57%20337.34%2028.417%20401.23%2053.43%20413.156%2057.503%20415.1%2061.663%20416%2065.886%20416c21.694%200%2045.14-23.838%2067.66-52.047C159.197%20331.848%20165.657%20331%20243.82%20331h24.343c78.147%200%2084.628.846%20110.282%2032.953%2022.526%2028.207%2045.97%2052.004%2067.665%2052.004%204.226%200%208.384-.88%2012.457-2.823%2025.004-11.926%2028.85-75.795%207.71-164.268zm-14.603%20149.85c-1.835.876-3.604%201.284-5.564%201.284-6.022%200-14.077-4.05-23.295-11.708-9.18-7.63-19.307-18.51-31.87-34.24-12.96-16.22-23.667-28.228-43.528-33.948-16.647-4.793-38.624-5.104-79.254-5.104h-24.343c-40.633%200-62.61.31-79.26%205.105-19.852%205.72-30.56%2017.685-43.522%2033.908-12.555%2015.727-22.68%2026.627-31.86%2034.258-9.217%207.66-17.27%2011.72-23.294%2011.72-1.932%200-3.75-.416-5.568-1.283-9.556-4.557-22.572-47.673.998-146.13%2021.387-89.59%2042.38-126.776%2077.46-137.206%207.632-2.27%2014.553-3.37%2021.158-3.37%209.742%200%2018.6%202.316%2029.812%205.248%2016.07%204.203%2036.072%209.435%2066.252%209.435%2030.148%200%2050.146-5.228%2066.215-9.43%2011.23-2.935%2020.1-5.253%2029.865-5.253%206.618%200%2013.55%201.104%2021.185%203.37%2035.037%2010.43%2056.03%2047.618%2077.456%20137.215%2023.524%2098.456%2010.51%20141.575.957%20146.13z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-game-controller-b-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-game-controller-b-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-game-controller-b-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M135.123%20204.568c-10.688%200-19.343%208.717-19.343%2019.44%200%2010.728%208.655%2019.448%2019.343%2019.448%2010.64%200%2019.297-8.72%2019.297-19.447%200-10.725-8.656-19.442-19.297-19.442z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M466.28%20248.866c-21.158-88.47-43.632-135.49-88.455-148.83-9.765-2.9-18.077-4.036-25.75-4.036-27.597%200-46.937%2014.683-96.08%2014.683-49.173%200-68.5-14.68-96.06-14.683-7.666%200-15.964%201.135-25.722%204.036-44.87%2013.34-67.342%2060.36-88.46%20148.83C24.57%20337.34%2028.417%20401.23%2053.43%20413.156%2057.503%20415.1%2061.663%20416%2065.886%20416c21.694%200%2045.14-23.838%2067.66-52.047C159.197%20331.848%20165.657%20331%20243.82%20331h24.343c78.147%200%2084.628.846%20110.282%2032.953%2022.526%2028.207%2045.97%2052.004%2067.665%2052.004%204.226%200%208.384-.88%2012.457-2.823%2025.004-11.926%2028.85-75.795%207.71-164.268zm-331.046%2014.767c-21.64%200-39.234-17.758-39.234-39.623%200-21.84%2017.594-39.643%2039.234-39.643%2021.655%200%2039.25%2017.803%2039.25%2039.643%200%2021.865-17.594%2039.623-39.25%2039.623zm172.842-19.493c-11.058%200-20.076-9.02-20.076-20.107%200-11.09%209.02-20.104%2020.076-20.104%2011.13%200%2020.148%209.013%2020.148%2020.103%200%2011.088-9.017%2020.107-20.148%2020.107zM351.988%20288c-11.058%200-20.053-8.95-20.053-20.016%200-11.157%208.995-20.106%2020.053-20.106%2011.146%200%2020.148%208.95%2020.148%2020.106%200%2011.065-9.002%2020.016-20.148%2020.016zm0-87.81c-11.058%200-20.053-8.993-20.053-20.083%200-11.094%208.995-20.107%2020.053-20.107%2011.146%200%2020.148%209.014%2020.148%2020.107%200%2011.09-9.002%2020.083-20.148%2020.083zm43.96%2043.95c-11.106%200-20.102-9.02-20.102-20.107%200-11.09%208.995-20.104%2020.1-20.104%2011.06%200%2020.054%209.013%2020.054%2020.103%200%2011.088-8.994%2020.107-20.053%2020.107z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-game-controller-b($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-game-controller-b-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-git-branch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20160c0-35.3-28.7-64-64-64s-64%2028.7-64%2064c0%2032.6%2024.4%2059.5%2056%2063.5v.5c0%2023-9.9%2042.4-29.5%2057.5-21.3%2016.5-48.7%2024.1-67.9%2027.5-43.2%207.8-64.1%2033.3-71.6%2044.7-2.6-.6-5.3-1.1-8-1.4V159.6c32.1-3.5%2057-30.6%2057-63.6%200-35.3-28.7-64-64-64S96%2060.7%2096%2096c0%2032.3%2023.9%2059%2055%2063.4v193.3c-31.1%204.4-55%2031.1-55%2063.4%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-24.3-13.6-45.5-33.6-56.3%207.3-10.1%2025.1-28.7%2059-34.9%2021-3.8%2051-12.2%2074.8-30.6%2023.4-18.1%2035.7-42.3%2035.7-70.2v-.5c31.7-4.1%2056.1-31%2056.1-63.6zM112%2096c0-26.5%2021.5-48%2048-48s48%2021.5%2048%2048-21.5%2048-48%2048-48-21.5-48-48zm96%20320c0%2026.5-21.5%2048-48%2048s-48-21.5-48-48%2021.5-48%2048-48%2048%2021.5%2048%2048zm144-208c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-git-branch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-git-branch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-git-commit-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M472%20248h-88.3C379.6%20181%20324%20128%20256%20128s-123.6%2053-127.7%20120H40c-4.4%200-8%203.6-8%208s3.6%208%208%208h88.3c4.1%2067%2059.7%20120%20127.7%20120s123.6-53%20127.7-120H472c4.4%200%208-3.6%208-8s-3.6-8-8-8zm-136.8%2087.2C314%20356.4%20285.9%20368%20256%20368s-58-11.6-79.2-32.8C155.7%20314%20144%20285.9%20144%20256s11.7-58%2032.8-79.2C198%20155.7%20226.1%20144%20256%20144s58%2011.7%2079.2%2032.8C356.3%20198%20368%20226.1%20368%20256s-11.7%2058-32.8%2079.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-git-commit($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-git-commit-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-git-compare-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M223.7%20346.3c-3.1-3.1-8.2-3.1-11.3%200-3.1%203.1-3.1%208.2%200%2011.3L264%20408H160c-49.2%200-57-42.3-57-88V159.6c32.1-3.5%2057-30.6%2057-63.6%200-35.3-28.7-64-64-64S32%2060.7%2032%2096c0%2032.3%2023.9%2059%2055%2063.4V320c0%2014.3%200%2040.9%209%2063%2011%2027.2%2033.3%2041%2064%2041h104l-49.7%2050.4c-3.1%203.1-3.1%208.2%200%2011.3%201.6%201.5%203.6%202.3%205.7%202.3s4.1-.7%205.7-2.3l57.6-57.4c6.3-6.3%206.3-16.4%200-22.6l-59.6-59.4zM48%2096c0-26.5%2021.5-48%2048-48s48%2021.5%2048%2048-21.5%2048-48%2048-48-21.5-48-48zM425%20352.6V192c0-14.3%200-40.9-9-63-11-27.2-33.3-41-64-41H248l49.7-50.4c3.1-3.1%203.1-8.2%200-11.3-1.6-1.5-3.6-2.3-5.7-2.3s-4.1.7-5.7%202.3l-57.6%2057.4c-6.3%206.3-6.3%2016.4%200%2022.6l59.6%2059.4c3.1%203.1%208.2%203.1%2011.3%200%203.1-3.1%203.1-8.2%200-11.3L248%20104h104c49.2%200%2057%2042.3%2057%2088v160.4c-32.1%203.5-57%2030.6-57%2063.6%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-32.3-23.9-59-55-63.4zM416%20464c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-git-compare($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-git-compare-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-git-merge-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20224c-32.7%200-59.7%2024.6-63.5%2056.2-9.1%200-29.6-1.3-55.5-11.3-32.6-12.7-79.9-42.2-121.5-110.8C171.3%20151.2%20192%20126%20192%2096c0-35.3-28.7-64-64-64S64%2060.7%2064%2096c0%2032.3%2023.9%2059%2055%2063.4v193.3c-31.1%204.3-55%2031-55%2063.3%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-33-24.9-60.1-57-63.6V174.8c42.7%2066.5%2090.6%2095.9%20124.2%20109%2027.8%2010.8%2050.1%2012.4%2061%2012.4h.4c4%2031.4%2030.9%2055.8%2063.5%2055.8%2035.3%200%2064-28.7%2064-64s-28.8-64-64.1-64zM80%2096c0-26.5%2021.5-48%2048-48s48%2021.5%2048%2048-21.5%2048-48%2048-48-21.5-48-48zm96%20320c0%2026.5-21.5%2048-48%2048s-48-21.5-48-48%2021.5-48%2048-48%2048%2021.5%2048%2048zm208-80c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-git-merge($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-git-merge-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-git-network-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2096c0-35.3-28.7-64-64-64s-64%2028.7-64%2064c0%2032.3%2023.9%2059%2055%2063.4h1V219l-120%2059.1L136%20219v-59.5c31.6-3.9%2056-30.8%2056-63.5%200-35.3-28.7-64-64-64S64%2060.7%2064%2096c0%2032.3%2023.9%2059%2055%2063.4h1V229l128%2063v60.3c-31.6%203.9-56%2030.8-56%2063.5%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-32.3-23.9-59-55-63.4h-1V292l128-63v-69.5c31.6-4%2056-30.9%2056-63.5zM80%2096c0-26.5%2021.5-48%2048-48s48%2021.5%2048%2048-21.5%2048-48%2048-48-21.5-48-48zm224%20319.8c0%2026.5-21.5%2048-48%2048s-48-21.5-48-48%2021.5-48%2048-48%2048%2021.5%2048%2048zM384%20144c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-git-network($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-git-network-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-git-pull-request-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%2096c0-35.3-28.7-64-64-64S64%2060.7%2064%2096c0%2032.3%2023.9%2059%2055%2063.4v193.3c-31.1%204.3-55%2031-55%2063.3%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-33-24.9-60.1-57-63.6V159.6c32.1-3.5%2057-30.6%2057-63.6zM80%2096c0-26.5%2021.5-48%2048-48s48%2021.5%2048%2048-21.5%2048-48%2048-48-21.5-48-48zm96%20320c0%2026.5-21.5%2048-48%2048s-48-21.5-48-48%2021.5-48%2048-48%2048%2021.5%2048%2048z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M393%20352.6V192c0-14.3%200-40.9-9-63-11-27.2-33.3-41-64-41H216l49.7-50.4c3.1-3.1%203.1-8.2%200-11.3-1.6-1.5-3.6-2.3-5.7-2.3s-4.1.7-5.7%202.3l-57.6%2057.4c-6.3%206.3-6.3%2016.4%200%2022.6l59.6%2059.4c3.1%203.1%208.2%203.1%2011.3%200%203.1-3.1%203.1-8.2%200-11.3L216%20104h104c49.2%200%2057%2042.3%2057%2088v160.4c-32.1%203.5-57%2030.6-57%2063.6%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-32.3-23.9-59-55-63.4zM384%20464c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-git-pull-request($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-git-pull-request-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-glasses-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M465.4%20247c-2.2-22-12.4-43-28.9-58.4-17.1-15.9-39.3-24.7-62.7-24.7-41.5%200-77.3%2027.4-88.5%2067-7-7-18.5-11.7-29.3-11.7s-22.3%204.7-29.3%2011.7c-11.2-39.6-47-67-88.5-67-23.3%200-45.6%208.7-62.7%2024.6C59%20204%2048.8%20225%2046.6%20247H32v18h14.6c2.2%2022%2012.4%2043%2028.9%2058.4%2017.1%2015.9%2039.3%2024.7%2062.7%2024.7%2050.8%200%2092.1-41.2%2092.1-92v-.1c0-9.9%2011.5-21.6%2025.7-21.6s25.7%2011.7%2025.7%2021.6v.1c0%2050.8%2041.3%2092%2092.1%2092%2023.3%200%2045.6-8.7%2062.7-24.7%2016.5-15.4%2026.7-36.5%2028.9-58.5H480v-18h-14.6zm-91.6%2086c-42.5%200-77-34.6-77-77%200-42.5%2034.6-77%2077-77%2042.5%200%2077%2034.6%2077%2077%200%2042.5-34.5%2077-77%2077zm-235.6%200c-42.5%200-77-34.6-77-77%200-42.5%2034.6-77%2077-77%2042.5%200%2077%2034.6%2077%2077%200%2042.5-34.5%2077-77%2077z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-glasses-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-glasses-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-glasses-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M465.4%20247c-2.2-22-12.4-43-28.9-58.4-17.1-15.9-39.3-24.7-62.7-24.7-41.5%200-77.3%2027.4-88.5%2067-7-7-18.5-11.7-29.3-11.7s-22.3%204.7-29.3%2011.7c-11.2-39.6-47-67-88.5-67-23.3%200-45.6%208.7-62.7%2024.6C59%20204%2048.8%20225%2046.6%20247H32v18h14.6c2.2%2022%2012.4%2043%2028.9%2058.4%2017.1%2015.9%2039.3%2024.7%2062.7%2024.7%2050.8%200%2092.1-41.2%2092.1-92v-.1c0-9.9%2011.5-21.6%2025.7-21.6s25.7%2011.7%2025.7%2021.6v.1c0%2050.8%2041.3%2092%2092.1%2092%2023.3%200%2045.6-8.7%2062.7-24.7%2016.5-15.4%2026.7-36.5%2028.9-58.5H480v-18h-14.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-glasses($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-glasses-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-globe-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048h-.2H255.5C140.8%2048.3%2048%20141.3%2048%20256s92.8%20207.7%20207.5%20208h.5c114.9%200%20208-93.1%20208-208S370.9%2048%20256%2048zm8.3%20124.5c22.1-.6%2043.5-3.5%2064.2-8.5%206.2%2024.5%2010.1%2052.8%2010.7%2083.8h-74.9v-75.3zm0-16.7V66c22.4%206.2%2045.2%2036.1%2059.6%2082-19.2%204.6-39.1%207.2-59.6%207.8zm-16.6-90v90.1c-20.7-.6-40.8-3.3-60.1-8%2014.6-46.2%2037.5-76.3%2060.1-82.1zm0%20106.7v75.2h-75.4c.6-31%204.5-59.3%2010.7-83.8%2020.8%205%2042.5%208%2064.7%208.6zm-92.2%2075.2H64.9c1.8-42.8%2017.8-82%2043.3-113%2018.5%2010.2%2038.2%2018.6%2058.8%2024.8-6.8%2026.5-10.8%2056.4-11.5%2088.2zm0%2016.6c.6%2031.7%204.6%2061.7%2011.4%2088.2-20.6%206.3-40.2%2014.6-58.8%2024.8-25.5-31-41.4-70.2-43.3-113h90.7zm16.8%200h75.4v75.1c-22.2.6-43.9%203.6-64.7%208.7-6.2-24.5-10.1-52.8-10.7-83.8zm75.4%2091.8v90.2c-22.6-5.9-45.5-35.9-60.1-82.1%2019.3-4.8%2039.4-7.5%2060.1-8.1zm16.6%2089.9v-90c20.5.6%2040.4%203.3%2059.7%207.9-14.5%2046-37.2%2075.9-59.7%2082.1zm0-106.6v-75.1h74.9c-.6%2030.9-4.5%2059.2-10.7%2083.7-20.7-5-42.1-8-64.2-8.6zm91.6-75.1h91.2c-1.8%2042.8-17.8%2081.9-43.3%20113-18.7-10.3-38.5-18.7-59.3-25%206.8-26.5%2010.8-56.3%2011.4-88zm0-16.6c-.6-31.7-4.6-61.6-11.3-88.1%2020.8-6.3%2040.6-14.7%2059.2-24.9%2025.5%2031%2041.5%2070.2%2043.3%20113.1h-91.2zm36.5-125.8c-16.6%208.8-34%2016.1-52.3%2021.6-9.7-31.3-23.4-56.8-39.5-73.6%2035.4%208.5%2067%2026.9%2091.8%2052zM210.8%2070.1c-16.1%2016.7-29.7%2042.2-39.3%2073.3-18.1-5.5-35.4-12.7-51.8-21.5%2024.5-25%2055.9-43.3%2091.1-51.8zM119.6%20390c16.4-8.8%2033.8-16%2051.8-21.5%209.7%2031.2%2023.3%2056.6%2039.4%2073.4-35.2-8.5-66.6-26.8-91.2-51.9zm181%2052.1c16.2-16.8%2029.8-42.3%2039.6-73.7%2018.3%205.5%2035.7%2012.8%2052.3%2021.6-24.8%2025.2-56.5%2043.6-91.9%2052.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-globe-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-globe-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-globe-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048h-.2H255.5C140.8%2048.3%2048%20141.3%2048%20256s92.8%20207.7%20207.5%20208h.5c114.9%200%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20399.4h-.2H255.5C150.1%20447.1%2064.6%20361.5%2064.6%20256S150%2064.9%20255.5%2064.7h.5c105.7%200%20191.4%2085.7%20191.4%20191.4%200%20105.6-85.7%20191.3-191.4%20191.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M322.3%20171.8c-18.7%204.5-38%207.2-57.9%207.8v68.1H332c-.6-28.1-4.1-53.6-9.7-75.9zM264.3%2082.5v81.9c18.5-.6%2036.5-3%2053.8-7.2-13.1-41.4-33.5-68.6-53.8-74.7zM193.4%20157.1c17.5%204.2%2035.6%206.7%2054.2%207.3V82.3c-20.3%205.9-41%2033.1-54.2%2074.8zM380.6%20133.4c-22.6-23-51.5-39.8-83.9-47.5%2014.8%2015.3%2027.2%2038.7%2036.1%2067.3%2016.7-5.1%2032.7-11.7%2047.8-19.8zM347.3%20247.7h83.3c-1.8-38.8-16.3-74.4-39.5-102.6-17.1%209.4-35.2%2017.1-54.1%2022.8%206.1%2024%209.7%2051.1%2010.3%2079.8zM179.5%20247.7h68.2v-68.1c-20.1-.6-39.6-3.3-58.4-7.9-5.7%2022.3-9.2%2047.9-9.8%2076zM332%20264.3h-67.7v68c19.9.6%2039.3%203.2%2058%207.8%205.6-22.2%209.1-47.8%209.7-75.8zM189.3%20340.2c18.8-4.6%2038.3-7.3%2058.4-7.9v-68h-68.2c.6%2028.1%204.1%2053.7%209.8%2075.9zM247.7%20429.6v-82.1c-18.6.6-36.8%203.1-54.3%207.3%2013.2%2041.7%2033.9%2069%2054.3%2074.8zM296.7%20426.1c32.4-7.8%2061.3-24.5%2084-47.6-15.1-8.1-31.1-14.7-47.8-19.8-8.9%2028.7-21.4%2052-36.2%2067.4zM214.7%2086.1c-32.1%207.8-60.8%2024.5-83.3%2047.4%2015%208%2030.8%2014.6%2047.3%2019.6%208.9-28.5%2021.3-51.7%2036-67zM337%20344.1c19%205.7%2037.1%2013.4%2054.2%2022.8%2023.2-28.2%2037.7-63.8%2039.5-102.6h-83.3c-.7%2028.7-4.3%2055.7-10.4%2079.8zM264.3%20347.5v82c20.3-6.1%2040.7-33.3%2053.8-74.8-17.3-4.2-35.3-6.6-53.8-7.2zM174.6%20167.8c-18.8-5.7-36.8-13.3-53.7-22.7-23.2%2028.2-37.7%2063.8-39.5%20102.6h82.9c.5-28.8%204.2-55.9%2010.3-79.9zM164.2%20264.3H81.3c1.8%2038.8%2016.3%2074.4%2039.5%20102.6%2016.9-9.3%2034.9-17%2053.7-22.7-6-24-9.7-51.1-10.3-79.9zM131.3%20378.5c22.5%2022.9%2051.2%2039.6%2083.4%2047.4-14.7-15.3-27.1-38.6-36-67.1-16.5%205.1-32.4%2011.7-47.4%2019.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-globe($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-globe-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-grid-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20192v-16H336V64h-16v112H192V64h-16v112H64v16h112v128H64v16h112v112h16V336h128v112h16V336h112v-16H336V192h112zM320%20320H192V192h128v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-grid-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-grid-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-grid-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20192h128v128H192z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v384h384V64H64zm352%20128h-80v128h80v16h-80v80h-16v-80H192v80h-16v-80H96v-16h80V192H96v-16h80V96h16v80h128V96h16v80h80v16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-grid($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-grid-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-hammer-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M462.4%20216.9L428.2%20183c-1.1-1.1-2.5-1.6-3.9-1.6s-2.9.5-3.9%201.6l-3.7%203.7c-5.3%200-13.6-.7-18.1-5.2-6.9-6.8%201.1-20.3-5.1-29-6.1-8.7-15.9-19.7-22.9-26.7-7-7-34.6-33.4-81.2-52.5-16.4-6.7-32.5-9.3-46.8-9.3-26.3%200-46.9%208.5-54.2%2015.2-5.4%205-11.1%2014-3.1%2014%20.7%200%201.5-.1%202.4-.2%204.4-.7%2013.2-1.5%2023.2-1.5%2015.6%200%2034.2%202.1%2044.1%2010%2016.2%2013%2029.5%2030.3%2030.6%2052.7%201.1%2021.5-6.2%2034-34.3%2061.8l-5.7-3c-1.3-.7-2.8-1-4.2-1-2.5%200-4.9.9-6.3%202.3%200%200-4.4%204.1-46.4%2045.8-62.3%2061.6-139.1%20123.7-139.1%20123.7-2.2%202.2-2.2%205.7%200%207.8l55.2%2054.8c1.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6c0%200%2062.6-76.2%20124.7-137.8%2042-41.7%2046.1-46%2046.1-46%202.2-2.2%203.6-6.6%201.3-10.4l-3.9-6.5c25.1-24.9%2035.2-35.5%2047.5-38.9%204-1.1%208.3-1.5%2012.7-1.5%209.6%200%2019%202.2%2023.3%204.5%205.1%202.7%209.7%2011.3%2010.2%2018.6l-9.5%209.5c-2.2%202.2-2.2%205.7%200%207.8l34.2%2033.9c1.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6l55.2-54.8c2.3-2.2%202.3-5.8.2-7.9zm-236.2%2080.3c-49.4%2049-99.4%20107.5-118.2%20129.8l-38.9-38.6c22.6-18.7%2081.5-68.2%20130.7-117.1%2023.4-23.2%2035.1-34.7%2040.8-40.3l25.9%2025.9c-5.7%205.9-17.3%2017.5-40.3%2040.3zm177-36.3l-19.3-19.2%202-2%203.2-5.2%201.5-7.3c-.8-11.2-7.5-25.6-18.6-31.5-7.3-3.9-19.4-6.4-30.9-6.4-6.1%200-11.8.7-17%202.1-15.6%204.3-26.5%2015.2-50.4%2038.9l-4%204-1.7%201.6-7.1-7.1%201.4-1.4c28.7-28.4%2040.4-45%2039-73.9-1.1-24.1-13.4-45.8-36.5-64.5-4.6-3.7-10.4-6.6-17.3-8.8%2012.2.6%2024.2%203.2%2035.7%207.9%2039.3%2016.1%2064.5%2037.6%2076%2049%206.2%206.1%2015.1%2016.2%2020.7%2023.9.1%201.2-.1%203.5-.2%205.2-.5%206.7-1.2%2018.2%207.5%2026.8%206.6%206.5%2016.5%2010%2029.4%2010l7.6-1.2%2019.3%2019.1-40.3%2040z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-hammer-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-hammer-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-hammer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M245.5%20213c-1.3-.7-2.8-1-4.2-1-2.5%200-4.9.9-6.3%202.3%200%200-4.4%204.1-46.4%2045.8-62.2%2061.6-139%20123.7-139%20123.7-2.2%202.2-2.2%205.7%200%207.8l55.2%2054.8c1.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6c0%200%2062.6-76.2%20124.7-137.8%2042-41.7%2046.1-46%2046.1-46%202.2-2.2%203.6-6.6%201.3-10.4l-3.9-6.4-29.7-29.8-5.6-3zM462.4%20216.9L428.2%20183c-1.1-1.1-2.5-1.6-3.9-1.6s-2.9.5-3.9%201.6l-3.7%203.7c-5.3%200-13.6-.7-18.1-5.2-6.9-6.8%201.1-20.3-5.1-29-6.1-8.7-15.9-19.7-22.9-26.7-7-7-34.6-33.4-81.2-52.5-16.4-6.7-32.5-9.3-46.8-9.3-26.3%200-46.9%208.5-54.2%2015.2-5.4%205-11.1%2014-3.1%2014%20.7%200%201.5-.1%202.4-.2%204.4-.7%2013.2-1.5%2023.2-1.5%2015.6%200%2034.2%202.1%2044.1%2010%2016.2%2013%2029.5%2030.3%2030.6%2052.7.9%2018.4-4.3%2030.2-23.4%2050.7l29.9%2029.9c17.5-17.2%2026.3-25.2%2036.5-28%204-1.1%208.3-1.5%2012.7-1.5%209.6%200%2019%202.2%2023.3%204.5%205.1%202.7%209.7%2011.3%2010.2%2018.6l-9.5%209.5c-2.2%202.2-2.2%205.7%200%207.8l34.2%2033.9c1.1%201.1%202.5%201.6%203.9%201.6s2.9-.5%203.9-1.6l55.2-54.8c2-2.2%202-5.8-.1-7.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-hammer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-hammer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-hand-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M273%2063.9c10.5%200%2019%208.5%2019%2018.9v132.6c0%204.4%203.6%208%208%208s8-3.6%208-8V98.8c0-10.4%208.5-18.9%2019-18.9s19%208.5%2019%2018.9v148.5c0%204.4%203.6%208%208%208s8-3.6%208-8V146.7c0-10.4%208.5-18.9%2019-18.9s19%208.5%2019%2018.9V361c0%2050.8-28.6%2087-70.2%2087h-51.5c-21.5%200-36.6-11.1-36.6-11.1-38.9-23.4-84.8-88.6-102-108.4-17.9-20.5-35.1-38.2-24.2-49%205.6-5.3%2011.7-7.8%2018.1-7.8%2012.2%200%2026.2%208.5%2041.5%2022.2l24.9%2021.7V114.8c0-10.4%208.5-18.9%2019-18.9s19%208.5%2019%2018.9v116.6c0%204.4%203.6%208%208%208s8-3.6%208-8V82.9c0-10.4%208.5-19%2019-19m-.1-15.9C253.6%2048%20238%2063.6%20238%2082.9v2.6c-5-3.5-12-5.6-19-5.6-19.3%200-35%2015.7-35%2034.9v165.5c-19-16.9-35.2-24.5-50.3-24.5-10.9%200-20.8%204.1-29.3%2012.1l-.2.1-.2.1c-5.7%205.7-13.7%2018.2-2.5%2038.1%205.1%208.9%2013.2%2018.2%2021.8%2028%201.3%201.5%202.7%203.1%204.1%204.6%203.5%204%208.6%2010.5%2014.6%2018%2023.1%2029.2%2058.1%2073.6%2090.9%2093.5%203.8%202.6%2021.1%2013.7%2045.3%2013.7h51.5c25%200%2047.4-11%2063.1-30.4C408%20415.1%20416%20389.7%20416%20361V146.7c0-19.2-15.7-34.9-35-34.9-7%200-13%202.1-19%205.6V98.8c0-19.2-15.8-34.9-35.1-34.9-7.9%200-15.2%202.6-21.1%207.1-4.9-13.4-17.8-23-32.9-23z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-hand-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-hand-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-hand-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M395%20117c-11.6%200-21%209.2-21%2020.5v109c0%204.8-4.6%208.6-9.5%208.6s-9.5-3.9-9.5-8.6V85.8c0-11.3-9.4-20.5-21-20.5s-21%209.2-21%2020.5V212c0%204.8-3.6%208.6-8.5%208.6s-8.5-3.9-8.5-8.6V68.5c0-11.3-9.4-20.5-21-20.5s-21%209.2-21%2020.5v160.8c0%204.8-4.1%208.6-9%208.6s-9-3.9-9-8.6V103c0-11.3-10.4-20.5-22-20.5s-22%209.2-22%2020.5v217.4l-25.9-23.6c-26.1-22.6-48.3-32.3-66.3-15.6-12.1%2011.7%206.9%2030.8%2026.7%2053%2019.2%2021.4%2070%2092.3%20113.2%20117.6%200%200%2016.7%2012.2%2040.6%2012.2h57.2c46.1%200%2078.4-39.5%2078.4-94.5v-232c.1-11.2-9.3-20.5-20.9-20.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-hand($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-hand-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-happy-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064c25.9%200%2051.1%205.1%2074.7%2015.1%2022.9%209.7%2043.4%2023.5%2061%2041.2%2017.6%2017.6%2031.5%2038.2%2041.2%2061%2010%2023.7%2015.1%2048.8%2015.1%2074.7s-5.1%2051.1-15.1%2074.7c-9.7%2022.9-23.5%2043.4-41.2%2061-17.6%2017.6-38.2%2031.5-61%2041.2-23.7%2010-48.8%2015.1-74.7%2015.1s-51.1-5.1-74.7-15.1c-22.9-9.7-43.4-23.5-61-41.2-17.6-17.6-31.5-38.2-41.2-61C69.1%20307.1%2064%20281.9%2064%20256s5.1-51.1%2015.1-74.7c9.7-22.9%2023.5-43.4%2041.2-61%2017.6-17.6%2038.2-31.5%2061-41.2C204.9%2069.1%20230.1%2064%20256%2064m0-16C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048z%22%2F%3E%3Ccircle%20cx%3D%22328%22%20cy%3D%22224%22%20r%3D%2224%22%2F%3E%3Ccircle%20cx%3D%22184%22%20cy%3D%22224%22%20r%3D%2224%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20369c48.3%200%2088.5-35%2096.5-81h-193c8%2046%2048.2%2081%2096.5%2081z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-happy-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-happy-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-happy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm72%20152c13.3%200%2024%2010.7%2024%2024s-10.7%2024-24%2024-24-10.7-24-24%2010.7-24%2024-24zm-144%200c13.3%200%2024%2010.7%2024%2024s-10.7%2024-24%2024-24-10.7-24-24%2010.7-24%2024-24zm72%20169c-48.3%200-88.5-35-96.5-81h193.1c-8.1%2046-48.3%2081-96.6%2081z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-happy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-happy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-headset-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M344%20211.8c-4.4%200-8-3.6-8-8%200-40-38.7-72-80-72s-80%2032-80%2072c0%204.4-3.6%208-8%208s-8-3.6-8-8c0-25%2011.8-44.3%2029.6-61.6%2017.6-17.1%2041.2-26.4%2066.4-26.4s48.8%209.4%2066.4%2026.4c17.8%2017.2%2029.6%2036.5%2029.6%2061.6%200%204.4-3.6%208-8%208z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M408%20260h-24v-47.8c0-70.4-57.6-128-128-128s-128%2057.6-128%20128V260h-24c-39.6%200-72%2032.4-72%2072v15.8c0%2039.6%2032.4%2072.2%2072%2072.2h24c0%204%203.6%207.9%208%207.9s8-3.7%208-8.1V212.2c0-29.8%2011.7-57.9%2032.9-79.1%2021.2-21.2%2049.3-32.9%2079.1-32.9%2030%200%2057.9%2011.7%2079.1%2032.9%2021.2%2021.2%2032.9%2049.3%2032.9%2079.1v207.6c0%204.4%203.6%208.1%208%208.1s8-3.9%208-7.9h24c39.6%200%2072-32.6%2072-72.2V332c0-39.6-32.4-72-72-72zM128%20404h-24c-14.9%200-28.9-5.9-39.5-16.6S48%20362.7%2048%20347.8V332c0-14.9%205.8-28.9%2016.5-39.5S89.1%20276%20104%20276h24v128zm336-56.2c0%2014.9-5.8%2029-16.5%2039.6S422.9%20404%20408%20404h-24V276h24c14.9%200%2028.9%205.8%2039.5%2016.5S464%20317.1%20464%20332v15.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-headset-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-headset-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-headset-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M408%20260h-24v-47.8c0-70.4-57.6-128-128-128s-128%2057.6-128%20128V260h-24c-39.6%200-72%2032.4-72%2072v15.8c0%2039.6%2032.4%2072.2%2072%2072.2h24c0%204%203.6%207.9%208%207.9s8-3.7%208-8.1V213h24c4.4%200%208-4%208-8.4%200-40%2038.7-72.4%2080-72.4s80%2032.3%2080%2072.3c0%204.4%203.6%208.6%208%208.6h24v206.8c0%204.4%203.6%208.1%208%208.1s8-3.9%208-7.9h24c39.6%200%2072-32.6%2072-72.2V332c0-39.6-32.4-72-72-72z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-headset($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-headset-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-heart-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M359.385%2080C319.965%2080%20277.17%2097.6%20256%20132.8%20234.83%2097.6%20192.034%2080%20152.615%2080%2083.647%2080%2032%20123.238%2032%20195.78c0%2031.287%2012.562%2071.923%2040.923%20105.656%2028.36%2033.735%2045.23%2051.7%20100.153%2088C228%20425.738%20256%20432%20256%20432s28-6.262%2082.924-42.564c54.923-36.3%2071.794-54.265%20100.153-88C467.437%20267.703%20480%20227.066%20480%20195.78%20480%20123.237%20428.353%2080%20359.385%2080zm67.445%20211.14c-26.852%2031.94-42.18%2048.896-96.73%2084.948-40.236%2026.596-65.25%2036.3-74.1%2039.233-8.85-2.932-33.865-12.638-74.103-39.232-54.548-36.052-69.876-53.006-96.73-84.948-12.064-14.35-21.856-31.274-28.315-48.943C51.062%20226.355%2048%20210.304%2048%20195.78c0-30.285%2010.13-55.644%2029.297-73.336%209.14-8.437%2020.158-14.992%2032.752-19.484%2012.944-4.62%2027.265-6.96%2042.565-6.96%2038.018%200%2073.217%2017.682%2089.674%2045.046L256%20163.844l13.71-22.798C286.17%20113.682%20321.37%2096%20359.386%2096c15.3%200%2029.62%202.34%2042.566%206.96%2012.595%204.492%2023.613%2011.047%2032.753%2019.483C453.87%20140.136%20464%20165.495%20464%20195.78c0%2014.524-3.062%2030.575-8.854%2046.417-6.458%2017.668-16.25%2034.592-28.316%2048.944z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-heart-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-heart-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-heart-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M359.385%2080C319.965%2080%20277.17%2097.6%20256%20132.8%20234.83%2097.6%20192.034%2080%20152.615%2080%2083.647%2080%2032%20123.238%2032%20195.78c0%2031.287%2012.562%2071.923%2040.923%20105.656%2028.36%2033.735%2045.23%2051.7%20100.153%2088C228%20425.738%20256%20432%20256%20432s28-6.262%2082.924-42.564c54.923-36.3%2071.794-54.265%20100.153-88C467.437%20267.703%20480%20227.066%20480%20195.78%20480%20123.237%20428.353%2080%20359.385%2080z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-heart($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-heart-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-help-buoy-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm135.8%2072.2c17.6%2017.6%2031.5%2038.2%2041.2%2061%202.7%206.3%205%2012.8%207%2019.4l-101.1%206.8c-8.2-14-19.9-25.7-33.9-34l6.5-101.3c6.5%202%2013%204.3%2019.3%207%2022.8%209.7%2043.3%2023.5%2061%2041.1zM448%20256c0%2013.5-1.4%2026.7-4.1%2039.6l-97.6-7c3.7-10.2%205.7-21.2%205.7-32.7%200-11.4-2-22.4-5.7-32.6l97.6-7c2.7%2013%204.1%2026.2%204.1%2039.7zm-192%2080c-44.1%200-80-35.9-80-80s35.9-80%2080-80%2080%2035.9%2080%2080-35.9%2080-80%2080zM64%20256c0-13.5%201.4-26.7%204.1-39.6l97.6%207c-3.7%2010.2-5.7%2021.1-5.7%2032.6%200%2011.4%202%2022.4%205.7%2032.6l-97.6%207.1c-2.7-13-4.1-26.2-4.1-39.7zM295.6%2068.1l-6.8%2097.7c-10.2-3.7-21.3-5.8-32.8-5.8-11.5%200-22.5%202-32.8%205.7l-6.9-97.6c12.9-2.7%2026.2-4.1%2039.6-4.1%2013.6%200%2026.8%201.4%2039.7%204.1zm-175.4%2052.1c17.6-17.6%2038.2-31.5%2061-41.2%206.3-2.7%2012.8-5%2019.3-7l6.5%20101.3c-13.9%208.3-25.6%2020-33.9%2033.9L72%20200.5c2-6.5%204.3-13%207-19.3%209.8-22.8%2023.6-43.3%2041.2-61zm0%20271.6c-17.6-17.6-31.5-38.2-41.2-61-2.7-6.3-5-12.8-7-19.3l101.3-6.5c8.2%2013.9%2019.9%2025.5%2033.8%2033.8L200.5%20440c-6.5-2-13-4.3-19.3-7-22.8-9.8-43.3-23.6-61-41.2zm96.2%2052.1l7-97.6c10.2%203.7%2021.2%205.7%2032.6%205.7%2011.5%200%2022.6-2%2032.9-5.8l6.8%2097.7c-12.9%202.7-26.2%204.1-39.6%204.1-13.6%200-26.8-1.4-39.7-4.1zm175.4-52.1c-17.6%2017.6-38.2%2031.5-61%2041.2-6.3%202.7-12.8%205-19.3%207l-6.7-101.1c14.1-8.3%2025.8-20.1%2034.1-34.2l101.1%206.8c-2%206.5-4.3%2013-7%2019.4-9.8%2022.7-23.6%2043.2-41.2%2060.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-help-buoy-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-help-buoy-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-help-buoy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm135.8%2072.2c17.6%2017.6%2031.5%2038.2%2041.2%2061%202.7%206.3%205%2012.8%207%2019.4l-101.1%206.8c-8.2-14-19.9-25.7-33.9-34l6.5-101.3c6.5%202%2013%204.3%2019.3%207%2022.8%209.7%2043.3%2023.5%2061%2041.1zM256%20336c-44.1%200-80-35.9-80-80s35.9-80%2080-80%2080%2035.9%2080%2080-35.9%2080-80%2080zM120.2%20120.2c17.6-17.6%2038.2-31.5%2061-41.2%206.3-2.7%2012.8-5%2019.3-7l6.5%20101.3c-13.9%208.3-25.6%2020-33.9%2033.9L72%20200.5c2-6.5%204.3-13%207-19.3%209.8-22.8%2023.6-43.3%2041.2-61zm0%20271.6c-17.6-17.6-31.5-38.2-41.2-61-2.7-6.3-5-12.8-7-19.3l101.3-6.5c8.2%2013.9%2019.9%2025.5%2033.8%2033.8L200.5%20440c-6.5-2-13-4.3-19.3-7-22.8-9.8-43.3-23.6-61-41.2zm271.6%200c-17.6%2017.6-38.2%2031.5-61%2041.2-6.3%202.7-12.8%205-19.3%207l-6.7-101.1c14.1-8.3%2025.8-20.1%2034.1-34.2l101.1%206.8c-2%206.5-4.3%2013-7%2019.4-9.8%2022.7-23.6%2043.2-41.2%2060.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-help-buoy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-help-buoy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-help-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M259.6%20146c-43.2%200-67.3%2020.3-67.6%2062.2h18.8c-.6-30.4%2015.5-46.5%2047.9-46.5%2023.2%200%2042.6%2016.2%2042.6%2039.8%200%2015.3-8.3%2027.7-19.4%2038.1-22.6%2020.8-29%2036-30.1%2064.5h19c1.1-25.8.5-30.7%2023.3-53.3%2015.2-14.2%2025.9-28.3%2025.9-50.2%200-34.2-27.4-54.6-60.4-54.6zM260.3%20332.3c-9.4%200-17%207.5-17%2016.8s7.6%2016.9%2017%2016.9%2017-7.5%2017-16.9c0-9.3-7.6-16.8-17-16.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-help-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-help-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-help-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm4.3%20318c-9.4%200-17-7.5-17-16.9%200-9.3%207.6-16.8%2017-16.8s17%207.5%2017%2016.8c0%209.4-7.6%2016.9-17%2016.9zm33.8-115.3c-22.8%2022.5-22.2%2027.4-23.3%2053.3h-19c1.1-28.5%207.5-43.7%2030.1-64.5%2011-10.3%2019.4-22.7%2019.4-38.1%200-23.6-19.4-39.9-42.6-39.9-32.4%200-48.5%2016.4-47.9%2046.4H192c.3-42%2024.4-62.1%2067.6-62.1%2033%200%2060.4%2020.4%2060.4%2054.6%200%2021.9-10.7%2036.2-25.9%2050.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-help-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-help-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-help-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M260.3%20366c-9.4%200-17-7.5-17-16.9%200-9.3%207.6-16.8%2017-16.8s17%207.5%2017%2016.8c0%209.4-7.6%2016.9-17%2016.9zm33.8-115.3c-22.8%2022.5-22.2%2027.4-23.3%2053.3h-19c1.1-28.5%207.5-43.7%2030.1-64.5%2011-10.3%2019.4-22.7%2019.4-38.1%200-23.6-19.4-39.9-42.6-39.9-32.4%200-48.5%2016.4-47.9%2046.4H192c.3-42%2024.4-62.1%2067.6-62.1%2033%200%2060.4%2020.4%2060.4%2054.6%200%2021.9-10.7%2036.2-25.9%2050.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-help($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-help-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-home-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20112L96%20240v208h112V320h96v128h112V240L256%20112zm144%20320h-80V304H192v128h-80V247.69l144-115.2%20144%20115.2V432z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064l-96%2076.8V96H96v96l-32%2025.498%2011.51%2011.384L256%2084.49l180.49%20144.393L448%20217.498%20256%2064zm-112%2089.6l-32%2025.6V112h32v41.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-home-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-home-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-home-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20112L96%20240v208h112V320h96v128h112V240L256%20112z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064l-96%2076.8V96H96v96l-32%2025.498%2011.51%2011.384L256%2084.49l180.49%20144.393L448%20217.498%20256%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-home($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-home-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ice-cream-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M380.4%20163.6C374%20160.5%20368%20159%20368%20159c0-61.9-50.1-113-112-113S144%2097.2%20144%20159.1c0%200-5.7.9-12.4%204.4-12.2%206.4-19.7%2019.8-19.7%2034.5%200%2022.1%2017.9%2040%2040%2040%2012.5%200%2031.7-5.8%2039.1-14.8%2015.3%2015.1%2037.8%2022.8%2064.9%2022.8%2027.1%200%2049.7-7.7%2064.9-22.8%207.3%209%2026.5%2014.8%2039.1%2014.8%2022.1%200%2040-17.9%2040-40%20.1-14.6-8.7-29.1-19.5-34.4zM360%20222c-4.5%200-10.7-1.2-16.2-3.1-6.4-2.3-10.5-5.8-10.5-5.8-5.2-3.4-11.1-13.7-11.1-13.7l-12.5%2012.4c-12%2011.9-30.5%2018.2-53.7%2018.2-23.1%200-41.7-6.3-53.7-18.2l-12.5-12.4s-4.6%208.9-11.1%2013.7c-2%201.5-4.1%203.5-10.5%205.8-5.4%201.9-11.6%203.1-16.2%203.1-13.3%200-24-10.8-24-24%200-8.2%204-15.6%2010.7-20%200%200%204.1-2.5%208.1-3.9%204.6-1.5%208.4-2%208.4-2%2010.1%207.8%2021.4%2010.5%2021.4%2010.5-8.7-6-16.4-21.7-16.4-21.7V159c0-25.8%2010-50.1%2028.2-68.5C206.4%2072.2%20230.5%2062%20256%2062c25.5%200%2049.6%2010.1%2067.8%2028.5C342%20108.9%20352%20133.3%20352%20159v2.1s-7%2015.6-15.6%2021.6c0%200%2011.2-2.7%2021.3-10.4%200%200%203.5-.2%207.5%201.3s8.1%204.5%208.1%204.5c6.7%204.5%2010.7%2011.8%2010.7%2020%200%2013.1-10.8%2023.9-24%2023.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M191.1%20240.2l-.3.3.3-.3c.1.1%200%200%200%200zM321%20240.2c-15.3%2015.1-37.9%2022.8-65%2022.8-27%200-49.6-7.6-64.8-22.7l-.4.2c-4%204.7-11.2%208.5-18.9%2011L226.8%20439c.9%202.6%209.5%2027%2029.3%2027%209.1%200%2017.5-5.9%2023.7-14.7%203.7-5.3%205.6-11.4%205.9-12.4l55.3-187c-8.2-2.7-16-6.7-20-11.7zm-64.9%2043.5l35.8%2024.6-35.8%2024.6-35.8-24.6%2035.8-24.6zm-58.3%209.1L187.1%20258l5-3c9.5%2010.4%2036.1%2018.1%2051.8%2020.2l.5.3-35.8%2024.6-7.1%204.9-3.7-12.2zm7.5%2025.8l3.2-2.2%2035.8%2024.6-27.1%2018.6-11.9-41zm27.8%2095.7l-5.6-19.3%2016.8%2011.6-11.2%207.7zm23%2038.7c-11.3%200-17.1-18.4-17.1-18.4l-1-3.8%2018.1-13.1%2018.2%2013.2-.9%203.6c0%20.1-5.7%2018.5-17.3%2018.5zm23.2-38.6l-11.4-7.8%2017.1-11.8-5.7%2019.6zm11.6-39.9l-34.8%2024-34.5-23.7-.4-1.5%2035-24%2035.2%2024.2-.5%201zm4.3-14.7L267.9%20341l35.8-24.6%203.5%202.4-12%2041zm19.6-67.3l-3.7%2012.7-7.4-5.1-35.8-24.6.5-.3c15.6-2.1%2037-8.2%2051.7-18.8l4%202.6-9.3%2033.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ice-cream-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ice-cream-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ice-cream-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M219.2%20400.9l7.2%2022.4%2014.4-9zM285.9%20423.4l7.3-22.8-22%2013.7zM240.8%20261.9l-.6-.4c-20.1-2.5-36.9-9.8-49.1-21.9-4.1%205-11.8%209-20%2011.6L181%20282l4.6%2014.2%209.2-5.7%2046-28.6zM194.7%20309.5l-4.1%202.5%2015.4%2047.8%2034.8-21.7zM256%20347.6l-45%2027.9-1.1.7%201.7%201.1%2044.4%2027.6%2044.8-27.9%201.3-.8-.8-.5zM302.1%20300L256%20271.4%20209.9%20300l46.1%2028.7zM320.9%20239.7c-12.2%2012.1-29%2019.4-49.1%2021.9l-.6.4%2046.1%2028.7%209.5%205.9%204.8-14.8%209.8-30.3c-8.4-2.7-16.3-6.7-20.5-11.8zM231.4%20439l2.6%208s7.5%2019%2022%2019c15%200%2022.2-19%2022.2-19l2.5-7.8-24.7-15.5-24.6%2015.3zM271.2%20338.1l35.1%2021.9%2015.5-47.8-4.5-2.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M380.4%20163.9c-11%2012.7-28.1%2016.8-28.1%2016.8%208.7-6%2015.6-21.6%2015.6-21.6v-.8C368%2096.3%20317.9%2046%20256%2046S144%2096.7%20144%20158.7v1.3h.3s7%2015.1%2015.6%2021.1c0%200-17.2-4.3-28.2-17.1-11.8%207-19.8%2019.7-19.8%2034.5%200%2022.1%2017.9%2040%2040%2040%2012.5%200%2031.7-5.8%2039.1-14.9%2015.3%2015.2%2037.8%2022.8%2064.9%2022.8s49.7-7.7%2064.9-22.9c7.3%209.1%2026.5%2014.8%2039.1%2014.8%2022.1%200%2040-18%2040-40.1.1-14.5-7.8-27.3-19.5-34.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ice-cream($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ice-cream-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-image-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v384h384V64H64zm368%20368H79V80h353v352z%22%2F%3E%3Ccircle%20cx%3D%22304%22%20cy%3D%22176%22%20r%3D%2216%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%2096v256h320V96H96zm198.6%20240H153.4L224%20235.8%20294.6%20336zm-6.2-36.6l22.3-31.6%2048%2068.2h-44.6l-25.7-36.6zM400%20336h-21.7l-67.6-96-32.1%2045.5L224%20208l-90.1%20128H112V112h288v224z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-image-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-image-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-image-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M447.8%2064.2L64%2064v384h384V64l-.2.2zM432%20432H80V80h352v352z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%2096H96v256h320V96zm-111.8%2063.8c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016-16-7.2-16-16c0-8.9%207.2-16%2016-16zM153.5%20336l70.7-100.5L295%20336H153.5zm161.1.1l-25.9-36.9%2022.3-31.6%2048.2%2068.5h-44.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-image($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-image-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-images-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M390.4%20121.9L384%2032%2032%2056l23.3%20319.9%2022.2-1.6-5.5%2078.9L456%20480l24-352-89.6-6.1zm-321.2%20237L49.1%2071.6l320.2-22.4%205%2071.6-16.1-1.1-3.7-53.5L67.1%2086.4l15.3%20218.2-3.8%2053.6-9.4.7zM96.6%20102l-6.2%2087.9-6.2-88.7%20255.4-17.9%202.5%2035.3L96.6%20102zm344%20360.9L88.1%20438.3%20110.4%20119l352.5%2024.6-22.3%20319.3z%22%2F%3E%3Cellipse%20transform%3D%22rotate(94.004%20361.466%20216.762)%20scale(1.00004)%22%20cx%3D%22361.5%22%20cy%3D%22216.8%22%20rx%3D%2216%22%20ry%3D%2216%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M126.3%20136.2l-15.6%20223.5L430.2%20382l15.6-223.5-319.5-22.3zm42.8%20211.5l77.5-95.1L310%20357.5l-140.9-9.8zm160.5%2011.2l-23.2-38.3%2024.5-30%2043.2%2071.4-44.5-3.1zm85.7%206l-21.7-1.5-60.8-100.5-35.2%2043.2-49.1-81.2-98.9%20121.4-21.8-1.5%2013.4-191.6%20287.6%2020.1-13.5%20191.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-images-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-images-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-images-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M390.4%20121.9L384%2032%2032%2056l23.3%20319.9%2022.2-1.6-5.5%2078.9L456%20480l24-352-89.6-6.1zm-321.2%20237L49.1%2071.6l320.2-22.4%205%2071.6-16.1-1.1-3.7-53.5L67.1%2086.4l15.3%20218.2-3.8%2053.6-9.4.7zm371.4%20104L88.1%20438.3%20110.4%20119l352.5%2024.6-22.3%20319.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M126.3%20136.2l-15.6%20223.5L430.2%20382l15.6-223.5-319.5-22.3zm42.8%20211.5l77.5-95.1L310%20357.5l-140.9-9.8zm160.5%2011.2l-23.2-38.3%2024.5-30%2043.2%2071.4-44.5-3.1zm47.8-141c-.6%208.8-8.3%2015.5-17.1%2014.8s-15.5-8.3-14.9-17.1c.6-8.8%208.3-15.5%2017.1-14.8%208.9.6%2015.6%208.3%2014.9%2017.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-images($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-images-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-infinite-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M451.23%20188.098C432.68%20169.968%20407.95%20160%20381.584%20160c-26.363%200-51.095%209.967-69.642%2028.098l-42.23%2041.187%2013.65%2013.447%2042.23-41.306c14.932-14.53%2034.763-22.573%2055.877-22.573%2021.113%200%2040.946%208.044%2055.878%2022.573%2030.797%2030.14%2030.797%2079.13%200%20109.148-14.932%2014.53-34.765%2022.573-55.878%2022.573-21.114%200-40.945-8.044-55.878-22.573l-125.52-122.476C181.405%20169.968%20156.674%20160%20130.426%20160c-26.363%200-51.095%209.967-69.643%2028.098C41.614%20206.808%2032.02%20231.44%2032%20256c-.02%2024.61%209.573%2049.15%2028.784%2067.902C79.332%20342.032%20104.064%20352%20130.427%20352c26.365%200%2051.095-9.968%2069.645-28.098l42.11-41.186-13.646-13.33-42.23%2041.188c-14.93%2014.53-34.763%2022.573-55.878%2022.573-21.113%200-40.944-8.044-55.876-22.573-30.8-30.14-30.8-79.13%200-109.148%2014.932-14.53%2034.763-22.573%2055.876-22.573%2021.115%200%2040.947%208.044%2055.88%2022.573l125.52%20122.477C330.49%20342.033%20355.22%20352%20381.47%20352c26.363%200%2051.095-9.968%2069.643-28.098C470.36%20305.23%20479.985%20280.6%20480%20256c.015-24.6-9.58-49.17-28.77-67.902z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-infinite-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-infinite-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-infinite-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M456.82%20182.377C436.783%20162.787%20410.063%20152%20381.586%20152c-28.477%200-55.195%2010.788-75.21%2030.354L267.27%20220.24l25.06%2024.688%2038.842-37.77c13.458-13.094%2031.32-20.306%2050.3-20.306%2018.978%200%2036.84%207.212%2050.28%2020.29%2013.364%2013.078%2020.713%2030.47%2020.694%2048.97-.02%2018.444-7.363%2035.75-20.677%2048.73-13.46%2013.094-31.32%2020.306-50.3%2020.306-18.978%200-36.84-7.212-50.29-20.3L205.645%20182.36C185.49%20162.783%20158.778%20152%20130.426%20152c-28.476%200-55.194%2010.788-75.23%2030.373-20.093%2019.613-31.173%2045.76-31.196%2073.62-.024%2027.822%2011.055%2053.973%2031.192%2073.63%2020.04%2019.59%2046.76%2030.377%2075.235%2030.377s55.194-10.788%2075.223-30.363l38.994-37.91-25.088-24.5-38.83%2037.614c-13.457%2013.096-31.32%2020.308-50.3%2020.308-18.976%200-36.838-7.212-50.28-20.29-13.363-13.078-20.713-30.47-20.693-48.972.02-18.443%207.363-35.75%2020.678-48.727%2013.46-13.096%2031.32-20.308%2050.298-20.308%2018.98%200%2036.842%207.212%2050.292%2020.3L306.252%20329.64C326.406%20349.218%20353.12%20360%20381.47%20360c28.476%200%2055.194-10.788%2075.213-30.355%2020.18-19.573%2031.3-45.727%2031.317-73.64.017-27.838-11.058-53.987-31.18-73.628z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-infinite($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-infinite-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-information-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22251.5%22%20cy%3D%22172%22%20r%3D%2220%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272%20344V216h-48v8h16v120h-16v8h64v-8z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-information-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-information-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-information-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm-4.5%20104c11.1%200%2020%209%2020%2020s-9%2020-20%2020-20-9-20-20%208.9-20%2020-20zM288%20352h-64v-8h16V224h-16v-8h48v128h16v8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-information-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-information-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-information-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22251.5%22%20cy%3D%22172%22%20r%3D%2220%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272%20344V216h-48v8h16v120h-16v8h64v-8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-information($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-information-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ionic-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M425.5%20134.8c4.7-5.9%207.5-13.5%207.5-21.6%200-19.2-15.6-34.9-34.8-34.9-8.2%200-15.7%202.8-21.6%207.5-34-24.2-75-37.8-119.9-37.8C141.8%2048%2048%20140.5%2048%20255.6S141.7%20464%20256.6%20464C371.5%20464%20464%20370.7%20464%20255.6c0-45-14.3-86.7-38.5-120.8zM398%2091.3c12.2%200%2022%209.9%2022%2022%200%2012.2-9.9%2022-22%2022-12.2%200-22-9.9-22-22s9.8-22%2022-22zm-6.2%20300.4c-17.6%2017.6-38.2%2031.6-61.1%2041.3-23.7%2010-48.2%2015.2-74.2%2015.2-25.9%200-51.7-5.1-75.4-15.2-22.9-9.7-43.4-23.5-61.1-41.3-17.6-17.6-31.5-38.3-41.2-61.2-10-23.7-15.1-48.9-15.1-74.9%200-25.9%205.1-51.2%2015.1-74.9%209.7-22.9%2023.5-43.5%2041.2-61.2s38.2-31.6%2061.1-41.3c23.7-10%2049.4-14.1%2075.4-14.1%2025.9%200%2050.5%204%2074.2%2014.1%2012.7%205.4%2024.7%2012.1%2035.9%2020-2.1%204.5-3.3%209.5-3.3%2014.9%200%2019.2%2015.6%2034.9%2034.8%2034.9%205.3%200%2010.3-1.2%2014.9-3.3%207.9%2011.2%2014.6%2023.2%2020%2036%2010%2023.7%2015.1%2048.9%2015.1%2074.9%200%2025.9-5.1%2051.2-15.1%2074.9-9.7%2022.9-23.5%2043.5-41.2%2061.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.5%20160.1c-53%200-96%2042.8-96%2095.9s42.9%2096.1%2096%2096.1c53%200%2096-43%2096-96.1s-43-95.9-96-95.9zm0%20175.7c-44.1%200-79.7-35.8-79.7-79.8%200-44.1%2035.6-79.6%2079.7-79.6s79.7%2035.6%2079.7%2079.6c0%2044.1-35.7%2079.8-79.7%2079.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ionic-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ionic-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ionic-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M425.5%20134.8c4.7-5.9%207.5-13.5%207.5-21.6%200-19.2-15.6-34.9-34.8-34.9-8.2%200-15.7%202.8-21.6%207.5-34-24.2-75-37.8-119.9-37.8C141.8%2048%2048%20140.5%2048%20255.6S141.7%20464%20256.6%20464%20464%20370.7%20464%20255.6c0-45-14.3-86.7-38.5-120.8zm-33.7%20256.9c-17.6%2017.6-38.2%2031.6-61.1%2041.3-23.7%2010-48.2%2015.2-74.2%2015.2-25.9%200-51.7-5.1-75.4-15.2-22.9-9.7-43.4-23.5-61.1-41.3-17.6-17.6-31.5-38.3-41.2-61.2-10-23.7-15.1-48.9-15.1-74.9%200-25.9%205.1-51.2%2015.1-74.9%209.7-22.9%2023.5-43.5%2041.2-61.2s38.2-31.6%2061.1-41.3c23.7-10%2049.4-14.1%2075.4-14.1%2025.9%200%2050.5%204%2074.2%2014.1%2012.7%205.4%2024.7%2012.1%2035.9%2020-2.1%204.5-3.3%209.5-3.3%2014.9%200%2019.2%2015.6%2034.9%2034.8%2034.9%205.3%200%2010.3-1.2%2014.9-3.3%207.9%2011.2%2014.6%2023.2%2020%2036%2010%2023.7%2015.1%2048.9%2015.1%2074.9%200%2025.9-5.1%2051.2-15.1%2074.9-9.7%2022.9-23.5%2043.5-41.2%2061.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.5%20160.1c-53%200-96%2042.8-96%2095.9s42.9%2096.1%2096%2096.1c53%200%2096-43%2096-96.1s-43-95.9-96-95.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ionic($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ionic-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ionitron-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M467.7%20269.2c-4.3-30.9-14.4-57.3-33.8-57.3l-7.6.1c-30.6-62-94.2-103.5-166.6-103.5-3.5%200-7%20.1-10.5.3-85.8%204.8-154.7%2066.7-171.7%20146.8l-11.4%201.6c-17.2%202.4-26.9%2034.8-21.6%2072.5%205%2036.2%2022.1%2064%2038.6%2064%20.7%200%201.4%200%202-.1l15.7-2.2c32.9%2053.5%2092.1%2088.7%20158.5%2088.7%203.5%200%207-.1%2010.5-.3%2085.2-4.7%20153.8-65.9%20171.4-145.2l7.4-.4c15.2-2.5%2023.8-31.4%2019.1-65zM106.2%20374.4l-23.1%203.2c-1.1-.3-5.6-3-10.8-12.2-5.7-10-9.9-23.5-11.9-38s-1.6-28.6%201.1-39.8c2.5-10.2%206.1-14%207.1-14.7l21.6-3c7.2%2012.9%2013.6%2030%2016.5%2049.3%203%2020.9%204%2040.7-.5%2055.2zm344.9-69.1c-1.8%208-4.3%2011.8-5.5%2013l-17.5%201-2.6%2011.8c-4%2017.9-10.8%2034.9-20.3%2050.7-9.4%2015.5-21.1%2029.4-34.9%2041.2-28.6%2024.6-63.7%2038.7-101.4%2040.8-3.2.2-6.4.3-9.6.3-29.4%200-58.4-7.7-83.9-22.2-24.9-14.2-46-34.5-60.9-58.9l-5.1-8.3c8-11.9%2012.8-31.6%209.6-57.5-2.8-22.6-15.4-40.5-27.4-50.8l1.6-7.4c7.6-35.8%2027.1-68.7%2054.9-92.9%2028.7-24.9%2064.1-39.1%20102.1-41.2%203.2-.2%206.8-.3%209.8-.3%2032.2%200%2063.2%209%2090.3%2026a168.5%20168.5%200%200%201%2061.7%2068.5l3.6%207.5c8.1%2019%2012.5%2037.1%2013.9%2057.5%201.5-25.3-2.1-42.7-7.1-56l11.5-.1c3.4%200%206.9%205.9%208.3%208.5%204.2%208%207.5%2020.1%209.6%2035.1%201.7%2012.1%201.5%2024.1-.7%2033.7z%22%2F%3E%3Cellipse%20transform%3D%22rotate(-93.182%20272.86%20364.837)%20scale(1.00004)%22%20cx%3D%22272.9%22%20cy%3D%22364.8%22%20rx%3D%2215.4%22%20ry%3D%2215.4%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352.8%20344.8c-8.5.5-15%207.7-14.5%2016.2s7.7%2015%2016.2%2014.5%2015-7.7%2014.5-16.2c-.4-8.5-7.7-15-16.2-14.5zM168%2073.6c2.1%201.4%205%202.4%208.6%203%202.5.4%205.3.6%208.3.6%201.2%200%202.4%200%203.6-.1%201%200%201.9-.1%202.9-.2-.4-.4-.8-.9-1.2-1.3h-2.5c-3.8%200-7.4-.3-10.4-.9-3.5-.7-6.7-2.1-8.4-3.4-1.6-1.4-1.3-3.7-1.3-3.7.3-2.6%202.4-4.8%205.4-7.4%202.7-2.3%206.4-4.7%2010.8-7l3.1-1.5c-.8%203.3-.9%206.9-.2%2010.5%202.1%2010.9%2010.9%2018.9%2021.4%2020.4l4.7%2023.1%2015.8-3.2-4.6-22.8c9.4-5.1%2014.8-15.8%2012.8-26.9-.7-3.5-2-6.7-3.9-9.5-1.8-.3-4.3-.5-7.2-.5-5.6%200-13.1.6-22%202.6%201.1-.3%202.1-.7%203.2-1%207.6-2.1%2014.5-3.5%2021.5-4.2%208.6-1%2015-.3%2016.6-.1s3%20.5%204.3.9c-.8%201.2-1.2%202.7-1.2%204.2%200%203.3%202.1%206.2%205%207.4-.2.3-.5.6-.7.9-.8.9-1.8%201.9-2.9%202.8-1.1.9-2.2%201.8-3.5%202.7l-6.5%203.8-.3%201.5c.1%200%20.2-.1.2-.1l8.3-4.7c1.2-.8%202.4-1.6%203.4-2.4%201.2-.9%202.2-1.8%203.1-2.8l1-1h.9c4.4%200%208-3.6%208-8s-3.6-8-8-8c-1.6%200-3.1.5-4.4%201.3-1.8-.8-3.6-1.3-6.4-1.8-2.8-.5-11.8-1.2-19.6-.3-3.1-2.3-8.9-4.2-13.9-4.2-1.6%200-3.1.1-4.7.4-7.9%201.5-14.2%206.5-17.7%2013%200%200-11.7%204.5-19.6%2011.7-3.2%202.9-5%206.4-5.3%208.3-.7%202.9.3%205.8%203.5%207.9zm43.6-27.3c5.8%200%2010.5%204.7%2010.5%2010.5s-4.7%2010.5-10.5%2010.5-10.5-4.7-10.5-10.5%204.7-10.5%2010.5-10.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ionitron-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ionitron-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ionitron-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M467.7%20269.2c-4.5-32-15.2-59.2-35.9-57.3%206.4%2014.6%2013.5%2035.2%2011.7%2072-1.4-25.9-6.3-50.2-17.1-72-32-64.6-100.5-107.4-177.2-103.1-85.8%204.8-154.7%2066.7-171.7%20146.8l-11.4%201.6c-17.2%202.4-26.9%2034.9-21.6%2072.5%205.3%2037.7%2023.5%2066.2%2040.7%2063.8l15.7-2.2c34.6%2056.3%2098.3%2092.3%20169%2088.4%2085.2-4.7%20153.8-65.9%20171.4-145.2l7.4-.4c15.1-2.5%2023.7-31.4%2019-64.9zM90.2%20264c10.7%208.2%2022.3%2028.3%2026.1%2055.1%203.9%2027.7-1.8%2054.1-10.4%2064.3%206-14.8%208-37.3%204.7-61.9-3.3-24-11-44.7-20.4-57.5zm183.6%20116.2c-8.5.5-15.8-6-16.2-14.5-.5-8.5%206-15.7%2014.5-16.2s15.8%206%2016.2%2014.5c.5%208.5-6%2015.7-14.5%2016.2zm80.8-4.7c-8.5.5-15.8-6-16.2-14.5-.5-8.5%206-15.7%2014.5-16.2s15.8%206%2016.2%2014.5c.5%208.5-6%2015.8-14.5%2016.2zM165.3%2070s0%20.1%200%200c.1.1.1.2.1.2.1.2.2.3.3.5v.1c.4%201%201.1%201.9%202.3%202.7%202%201.5%205%202.4%208.6%203%203.4.5%207.5.7%2011.9.5%201%200%201.9-.1%202.9-.2-.4-.4-.8-.9-1.2-1.3h-1.3c-4.3.1-8.2-.2-11.6-.9-3.5-.7-6.4-1.8-8.4-3.4-.6-.5-1-.9-1.3-1.4-.2-.7-.2-1.5%200-2.3.5-2.3%202.4-4.8%205.4-7.4%202.7-2.3%206.4-4.7%2010.8-7%20.8-.4%201.7-.9%202.6-1.3.1-.1.3-.1.5-.2-.8%203.3-.9%206.9-.2%2010.5%202.3%2011.9%2012.5%2020.3%2024.2%2020.6l5%2026.3%2010.7-2-5-26.3c10.8-4.6%2017.3-16.1%2015-28-.7-3.5-2-6.7-3.9-9.5-5.3-.8-15.6-.8-29.2%202.1%201.1-.3%202.1-.7%203.2-1%207.6-2.1%2014.9-3.5%2021.5-4.2.6-.1%201.2-.1%201.8-.2%201.2-.1%202.3-.2%203.5-.3h.6c4-.2%207.7-.1%2010.8.3%202.4.3%204.4.8%206.1%201.4-.6.9-.9%202-.9%203.2%200%202.7%201.8%205%204.3%205.8-.6.9-1.3%201.9-2.1%202.8-.8.9-1.8%201.9-2.9%202.8-1.1.9-2.2%201.8-3.5%202.7l-6.5%203.8-.3%201.5c.1%200%20.2-.1.2-.1l8.3-4.7c1.2-.8%202.4-1.6%203.4-2.4%201.2-.9%202.2-1.8%203.1-2.8.9-.9%201.7-1.9%202.4-2.8l.3-.6c3-.4%205.4-2.9%205.4-6%200-3.4-2.7-6.1-6.1-6.1-1%200-1.9.3-2.7.7-2-1.2-4.8-2.1-8.2-2.7-4.3-.8-9.5-1-15.5-.6-.7%200-1.4.1-2.1.2-.7.1-1.3.2-2%20.2-5.3-3.5-11.9-5-18.6-3.7-7.9%201.5-14.2%206.5-17.7%2013-1.3.5-2.6%201.1-3.8%201.7-.7.3-1.3.6-2%20.9-5.9%202.9-10.6%206.1-13.9%209.1-3.1%202.9-4.9%205.7-5.3%208.3-.2%201.4%200%202.8.7%204%20.1.1.2.3.3.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ionitron($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ionitron-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-jet-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M464%2048s-19.8%201.4-53.1%2027.2c-15.5%2012-162.2%20120.6-162.2%20120.6L89%20187.9l-41%2036.5%20102%2051.2-8%2010.1-81.6%204.1-6.7%2033.6%2060.6%2047.2-26.7%2053.6%2053.7-26.5%2047.3%2060.6%2033.6-6.7%204.1-81.6%2010.1-7.9L287.6%20464l36.5-40.9-7.9-159.7s108.6-146.7%20120.6-162C462.7%2067.8%20464%2048%20464%2048zm-39.7%2043.6L300.1%20258.5l7.8%20158.8-16.5%2018.5-40.7-80.9-8.8-17.4-31.3%2024.5-3.9%2076.4-11.7%202.3-49.2-63.1-22.8%2011.2%2011.4-22.8-63.1-49.2%202.3-11.7%2076.4-3.9%2024.8-31.1-17.6-8.8-80.9-40.7%2018.5-16.5%20158.9%207.8%20167-124.1c4.5-3.5%208.7-6.5%2012.6-9-2.5%203.9-5.5%208.2-9%2012.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-jet-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-jet-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-jet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M464%2048s-19.8%201.4-53.1%2027.2c-15.5%2012-162.2%20120.6-162.2%20120.6L89%20187.9l-41%2036.5%20102%2051.2-8%2010.1-81.6%204.1-6.7%2033.6%2060.6%2047.2-26.7%2053.6%2053.7-26.5%2047.3%2060.6%2033.6-6.7%204.1-81.6%2010.1-7.9L287.6%20464l36.5-40.9-7.9-159.7s108.6-146.7%20120.6-162C462.7%2067.8%20464%2048%20464%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-jet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-jet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-key-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M342.6%20218.1c-13.3%200-26.1%200-38.1%204.1-51.6-43.1-187.8-156.9-198.2-167.5C101.5%2049.8%2096.2%2048%2091%2048c-8.7%200-17%205.2-21.7%209.6-7%206.6-25.6%2026.8-20.5%2032%2015.3%2015.4%2027.4%2026.5%2033.7%2032.8%204.8%204.8%2013.4-.8%2019.6%203.3%205.5%203.6%2010%209.9%2014.6%2014.5%205.3%205.4%209%207.8%208.9%2015.7-.1%208.3.5%2013.8%206.3%2020%204.7%205%209.1%207.6%2015.9%207.7%209.2.2%2014.9%202.4%2020.9%209.9%205.7%207.1%202.1%2014.2%204.9%2022%201.8%205.1%2016%2018.1%2018%2020.1s11%200%2013.3%202.3%2017.2%2015.8%2018.2%2020.4-3%209-2%2013.6c1.2%205.6%207.2%2012.1%2010.6%2017.4-6.8%2015.5-10.6%2032.6-10.6%2050.7%200%2068.5%2054.4%20124%20121.4%20124S464%20408.5%20464%20340s-54.4-121.9-121.4-121.9zm0%20229.9c-58.2%200-105.5-48.5-105.5-108%200-15.4%203.1-30.3%209.2-44.2l3.5-7.9s-7.7-13.4-10.4-16.2c-2.7-2.7%202.2-13.1-.6-16.6-2.9-3.5-19.6-25.2-24.7-30.3-5.1-5.1-14-1.8-16.7-4.5-2.7-2.7-7.3-7.9-8.7-10.4-.2-.8-.2-2.4-.3-3.8-.1-5.2-.3-14-7.1-22.4-8.6-10.8-18.5-15.5-32.9-15.9-1.6%200-2.2-.1-4.7-2.7-1.6-1.7-2-2.2-2-8.9.1-13.7-6.7-20.4-11.6-25.2L111%20112.4c-7.7-5.1-15.1-5.2-19.9-5.2-1.3%200-2.6%200-3.4-.2L65.9%2084.3c1-3%207.7-8.9%2010.6-11.5%201.4-1.2%202.6-2.4%203.9-3.5%202.8-2.6%207.4-5.3%2010.8-5.3%201%200%202.1.1%203.9%201.9%2010.4%2010.6%20129.4%20110.2%20199.4%20168.6l6.8%205.7%208.4-2.8c9.6-3.2%2020.9-3.2%2033-3.2%2028.3%200%2054.8%2010.9%2074.6%2030.6%2019.9%2019.8%2030.8%2046.6%2030.8%2075.3%200%2059.4-47.3%20107.9-105.5%20107.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20352c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32zm0%2048c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-key-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-key-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-key-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20368c-8.8%200-16%207.2-16%2016s7.2%2016%2016%2016%2016-7.2%2016-16-7.2-16-16-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M342.6%20218.1c-13.3%200-26.1%200-38.1%204.1-51.6-43.1-187.8-156.9-198.2-167.5C101.5%2049.8%2096.2%2048%2091%2048c-8.7%200-17%205.2-21.7%209.6-7%206.6-25.6%2026.8-20.5%2032%2015.3%2015.4%2027.4%2026.5%2033.7%2032.8%204.8%204.8%2013.4-.8%2019.6%203.3%205.5%203.6%2010%209.9%2014.6%2014.5%205.3%205.4%209%207.8%208.9%2015.7-.1%208.3.5%2013.8%206.3%2020%204.7%205%209.1%207.6%2015.9%207.7%209.2.2%2014.9%202.4%2020.9%209.9%205.7%207.1%202.1%2014.2%204.9%2022%201.8%205.1%2016%2018.1%2018%2020.1s11%200%2013.3%202.3%2017.2%2015.8%2018.2%2020.4-3%209-2%2013.6c1.2%205.6%207.2%2012.1%2010.6%2017.4-6.8%2015.5-10.6%2032.6-10.6%2050.7%200%2068.5%2054.4%20124%20121.4%20124S464%20408.5%20464%20340s-54.4-121.9-121.4-121.9zM384%20416c-17.7%200-32-14.3-32-32s14.3-32%2032-32%2032%2014.3%2032%2032-14.3%2032-32%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-key($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-key-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-keypad-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M394.6%20341.2c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zm0%2090.8c-20.6%200-37.4-16.8-37.4-37.4%200-20.6%2016.8-37.4%2037.4-37.4S432%20374%20432%20394.6c0%2020.6-16.8%2037.4-37.4%2037.4zM256%20341.2c-29.5%200-53.4%2023.9-53.4%2053.4S226.5%20448%20256%20448s53.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zm0%2090.8c-20.6%200-37.4-16.8-37.4-37.4%200-20.6%2016.8-37.4%2037.4-37.4s37.4%2016.8%2037.4%2037.4c0%2020.6-16.8%2037.4-37.4%2037.4zM117.4%20341.2c-29.5%200-53.4%2023.9-53.4%2053.4S87.9%20448%20117.4%20448s53.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zm0%2090.8C96.8%20432%2080%20415.2%2080%20394.6c0-20.6%2016.8-37.4%2037.4-37.4s37.4%2016.8%2037.4%2037.4c0%2020.6-16.7%2037.4-37.4%2037.4zM394.6%20202.6c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4S448%20285.5%20448%20256s-23.9-53.4-53.4-53.4zm0%2090.8c-20.6%200-37.4-16.8-37.4-37.4%200-20.6%2016.8-37.4%2037.4-37.4S432%20235.4%20432%20256c0%2020.6-16.8%2037.4-37.4%2037.4zM256%20202.6c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zm0%2090.8c-20.6%200-37.4-16.8-37.4-37.4%200-20.6%2016.8-37.4%2037.4-37.4s37.4%2016.8%2037.4%2037.4c0%2020.6-16.8%2037.4-37.4%2037.4zM117.4%20202.6C87.9%20202.6%2064%20226.5%2064%20256s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zm0%2090.8C96.8%20293.4%2080%20276.6%2080%20256c0-20.6%2016.8-37.4%2037.4-37.4s37.4%2016.8%2037.4%2037.4c0%2020.6-16.7%2037.4-37.4%2037.4zM394.6%20170.8c29.5%200%2053.4-23.9%2053.4-53.4S424.1%2064%20394.6%2064s-53.4%2023.9-53.4%2053.4%2023.9%2053.4%2053.4%2053.4zm0-90.8c20.6%200%2037.4%2016.8%2037.4%2037.4%200%2020.6-16.8%2037.4-37.4%2037.4s-37.4-16.8-37.4-37.4c0-20.6%2016.7-37.4%2037.4-37.4zM256%2064c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4S285.5%2064%20256%2064zm0%2090.8c-20.6%200-37.4-16.8-37.4-37.4%200-20.6%2016.8-37.4%2037.4-37.4s37.4%2016.8%2037.4%2037.4c0%2020.6-16.8%2037.4-37.4%2037.4zM117.4%2064C87.9%2064%2064%2087.9%2064%20117.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4S146.9%2064%20117.4%2064zm0%2090.8C96.8%20154.8%2080%20138%2080%20117.4%2080%2096.8%2096.8%2080%20117.4%2080s37.4%2016.8%2037.4%2037.4c0%2020.6-16.7%2037.4-37.4%2037.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-keypad-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-keypad-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-keypad-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M394.6%20341.2c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zM256%20341.2c-29.5%200-53.4%2023.9-53.4%2053.4S226.5%20448%20256%20448s53.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zM117.4%20341.2c-29.5%200-53.4%2023.9-53.4%2053.4S87.9%20448%20117.4%20448s53.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zM394.6%20202.6c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4S448%20285.5%20448%20256s-23.9-53.4-53.4-53.4zM256%20202.6c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zM117.4%20202.6C87.9%20202.6%2064%20226.5%2064%20256s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4-23.9-53.4-53.4-53.4zM394.6%20170.8c29.5%200%2053.4-23.9%2053.4-53.4S424.1%2064%20394.6%2064s-53.4%2023.9-53.4%2053.4%2023.9%2053.4%2053.4%2053.4zM256%2064c-29.5%200-53.4%2023.9-53.4%2053.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4S285.5%2064%20256%2064zM117.4%2064C87.9%2064%2064%2087.9%2064%20117.4s23.9%2053.4%2053.4%2053.4%2053.4-23.9%2053.4-53.4S146.9%2064%20117.4%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-keypad($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-keypad-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-laptop-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20367.5V129.1c0-9.4-7.9-17.1-17.2-17.1H81.2c-9.3%200-17.2%207.6-17.2%2017.1v238.4H15.9v15.6c0%203.1%2031%2016.9%2052.1%2016.9h376c24.3%200%2052-14.1%2052.1-16.5v-16H448zM256%20120c2.2%200%204%201.8%204%204s-1.8%204-4%204-4-1.8-4-4%201.8-4%204-4zM80%20136.2h352v215.3H80V136.2zm218.3%20239.3h-84.6c-5.3%200-9.7-6-9.7-7.5h104c0%201.5-3%207.5-9.7%207.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-laptop($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-laptop-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-leaf-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M453.9%20382.7c-51.8-8-54.9-12.7-54.9-12.7%2015.6-74-23.2-154.1-77.1-198.6C250.1%20112.2%20141%20155.2%2056%2065.2c-.8-.8-1.5-1.2-2.2-1.2-16.6%200-2%20240.5%20100.3%20333.9C196.9%20437.1%20244%20448%20281.8%20448c30.8%200%2055.5-7.3%2066.8-12.5%2022.8-10.6%2038.7-33.9%2038.7-33.9%2037%2011.6%2057.3%2012.2%2061.3%2012.2h.7c.4.1.8.1%201.2.1%2013.8%200%2020.3-28.6%203.4-31.2zm-112%2038.3c-8.9%204.1-31.5%2011-60%2011-19.6%200-38.7-3.2-56.7-9.5-21.9-7.6-42.1-19.9-60.2-36.4-20.4-18.6-38.6-45.2-54-79-13.3-29-24.3-62.5-32.6-99.5-6.8-30-11.5-61.8-13.4-89.4-.6-9.5-.9-17.3-.9-23.6%2046.4%2038.2%2097.8%2046.4%20143.8%2053.8%2038.9%206.2%2075.6%2012.1%20103.9%2035.4%2025.5%2021.1%2046.7%2049.7%2059.6%2080.6%2014%2033.4%2015.9%2066.9%2012.7%20100.7-180-63-264.5-170.5-264.5-170.5s72.5%20125.2%20252.3%20200.8c-5.1%206.5-13.3%2017.8-30%2025.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-leaf-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-leaf-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-leaf-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M453.9%20382.7c-51.8-8-55.7-15.7-55.7-15.7%2015.6-74-22.4-151.1-76.3-195.6C250.1%20112.2%20141%20155.2%2056%2065.2c-19.8-21-8.3%20235.5%2098.1%20332.7%2077.8%2071%20169.4%2049.2%20194.5%2037.6%2022.8-10.6%2038.7-33.9%2038.7-33.9%2041.5%2013%2062%2012.2%2062%2012.2%2014.6%201.8%2022-28.4%204.6-31.1zm-91.8%203.4c-136.2-40.9-241.6-187.5-241.6-187.5s92.9%20110.7%20251.4%20163.2c.1%208.1-4.6%2019.7-9.8%2024.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-leaf($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-leaf-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-link-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M278.6%20346.5l-67.9%2067.9c-15%2015-35.1%2023.3-56.6%2023.3s-41.5-8.3-56.6-23.3c-15-15-23.3-35.1-23.3-56.6s8.3-41.5%2023.3-56.6l67.9-67.9c3.9-3.9%208.1-7.3%2012.5-10.2%205.1-3.4%2010.6-6.1%2016.3-8.2%205.3-1.9%2010.8-3.3%2016.5-4.1%203.7-.5%207.4-.8%2011.2-.8%201.7%200%203.4.1%205.1.2%2019.5%201.2%2037.6%209.3%2051.5%2023.1%2013.8%2013.8%2021.9%2032%2023.1%2051.5%205.4-1%2010.7-2.7%2015.6-5-2.2-21.1-11.4-41.7-27.5-57.8-16.1-16.1-36.6-25.3-57.8-27.5-5.7-.6-11.5-.7-17.2-.3-6%20.4-11.9%201.4-17.7%203-6.1%201.6-12.1%203.8-17.8%206.7-9.1%204.5-17.7%2010.5-25.3%2018.1L86%20289.9c-37.3%2037.3-37.3%2098.4%200%20135.8%2037.3%2037.3%2098.4%2037.3%20135.8%200l67.9-67.9c7.6-7.6%2013.6-16.1%2018.1-25.3-6.4%201-12.8%201.5-19.2%201.5-2.7%204.5-6.1%208.7-10%2012.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M425.7%2086.3c-37.3-37.3-98.4-37.3-135.8%200L222%20154.2c-7.6%207.6-13.6%2016.1-18.1%2025.3%206.4-1%2012.8-1.5%2019.2-1.5%202.9-4.5%206.3-8.7%2010.2-12.5l67.9-67.9c15-15%2035.1-23.3%2056.6-23.3s41.5%208.3%2056.6%2023.3c15%2015%2023.3%2035.1%2023.3%2056.6%200%2021.4-8.3%2041.5-23.3%2056.6l-67.9%2067.9c-3.9%203.9-8.1%207.3-12.5%2010.2-5.1%203.4-10.6%206.1-16.3%208.2-5.3%201.9-10.8%203.3-16.5%204.1-3.7.5-7.4.8-11.2.8-1.7%200-3.4-.1-5.1-.2-19.5-1.2-37.6-9.3-51.5-23.1-13.8-13.8-21.9-32-23.1-51.5-5.4%201-10.7%202.7-15.6%205%202.2%2021.1%2011.4%2041.7%2027.5%2057.8%2016.1%2016.1%2036.6%2025.3%2057.8%2027.5%205.7.6%2011.5.7%2017.2.3%206-.4%2011.9-1.4%2017.7-3%206.1-1.6%2012.1-3.8%2017.8-6.7%209.1-4.5%2017.7-10.5%2025.3-18.1l67.9-67.9c37.1-37.4%2037.1-98.5-.2-135.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-link-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-link-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-link-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M273%20340.9l-67.9%2067.9c-13.5%2013.5-31.6%2021-50.9%2021-19.3%200-37.4-7.4-50.9-21-13.5-13.5-21-31.6-21-50.9%200-19.3%207.4-37.4%2021-50.9l67.9-67.9c3.4-3.4%207.2-6.5%2011.3-9.2%204.6-3%209.5-5.5%2014.7-7.4%204.8-1.8%209.8-3%2014.9-3.7%203.4-.5%206.8-.7%2010.1-.7%201.4%200%202.8.1%204.6.2%2017.5%201.1%2034%208.5%2046.3%2020.8%2010.8%2010.8%2017.8%2024.8%2020.1%2039.8%202.3-.1%208.2-.5%2016.2-2.9s13.4-6.3%2013.4-6.3c-3.3-21.2-11.6-37.8-27.1-53.2-15.4-15.4-35.5-25.6-57-29-1.9-.3-3.7-.6-5.6-.8a99.994%2099.994%200%200%200-18.7-.3c-5.4.4-10.7%201.2-16%202.4-1.1.2-2.1.5-3.2.8-6.7%201.8-13.2%204.2-19.3%207.2-10.1%205-19.4%2011.6-27.4%2019.6l-67.9%2067.9C61%20303.9%2050.3%20330%2050.3%20357.8s10.8%2054%2030.3%2073.5c19.6%2019.6%2045.7%2030.3%2073.5%2030.3%2027.9%200%2054-10.8%2073.5-30.3l67.9-67.9c7.2-7.2%2013.2-15.4%2018-24.3%200%200-11.2%202.7-23.6%202.7s-16.9-.9-16.9-.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M431.4%2080.6c-19.6-19.6-45.7-30.3-73.5-30.3s-54%2010.8-73.5%2030.3l-67.9%2067.9c-7.2%207.2-13.2%2015.4-18%2024.3%205.2-1.2%2015.3-2.4%2024-2.4s16.2%201.1%2016.2%201.1l68.3-68.1c13.5-13.5%2031.6-21%2050.9-21s37.4%207.4%2050.9%2021c13.5%2013.5%2021%2031.6%2021%2050.9%200%2019.3-7.4%2037.4-21%2050.9L340.9%20273c-3.4%203.4-7.2%206.5-11.3%209.2-4.6%203-9.5%205.5-14.7%207.4-4.8%201.7-9.8%203-14.9%203.7-3.4.5-6.8.7-10.1.7-1.4%200-2.8-.1-4.6-.2-17.5-1.1-34-8.5-46.3-20.8a71.194%2071.194%200%200%201-19.9-38.8s-6.6-.5-15.7%202.3c-5.7%201.7-11.6%204.2-14.2%205.5%203%2021.5%2011.4%2037.7%2027.1%2053.5l.2.2c16.7%2016.7%2039%2027.3%2062.6%2029.8a99.994%2099.994%200%200%200%2018.7.3c6.4-.5%2012.9-1.5%2019.1-3.2%206.7-1.8%2013.2-4.2%2019.3-7.2%2010.1-5%2019.4-11.6%2027.4-19.6l67.9-67.9c19.6-19.6%2030.3-45.7%2030.3-73.5s-10.9-54.2-30.4-73.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-link($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-link-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-list-box-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%2080v352H80V80h352m16-16H64v384h384V64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20152h192v16H192zM192%20248h192v16H192zM192%20344h192v16H192z%22%2F%3E%3Ccircle%20cx%3D%22144%22%20cy%3D%22160%22%20r%3D%2216%22%2F%3E%3Ccircle%20cx%3D%22144%22%20cy%3D%22256%22%20r%3D%2216%22%2F%3E%3Ccircle%20cx%3D%22144%22%20cy%3D%22352%22%20r%3D%2216%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-list-box-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-list-box-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-list-box-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v384h384V64H64zm80%20304c-8.836%200-16-7.164-16-16s7.164-16%2016-16%2016%207.164%2016%2016-7.164%2016-16%2016zm0-96c-8.836%200-16-7.164-16-16s7.164-16%2016-16%2016%207.164%2016%2016-7.164%2016-16%2016zm0-96c-8.836%200-16-7.164-16-16s7.164-16%2016-16%2016%207.164%2016%2016-7.164%2016-16%2016zm240%20184H192v-16h192v16zm0-96H192v-16h192v16zm0-96H192v-16h192v16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-list-box($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-list-box-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-list-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20152h192v16H192zM192%20248h192v16H192zM192%20344h192v16H192z%22%2F%3E%3Ccircle%20cx%3D%22144%22%20cy%3D%22160%22%20r%3D%2216%22%2F%3E%3Ccircle%20cx%3D%22144%22%20cy%3D%22256%22%20r%3D%2216%22%2F%3E%3Ccircle%20cx%3D%22144%22%20cy%3D%22352%22%20r%3D%2216%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-list($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-list-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-locate-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22256%22%20r%3D%2264%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M472%20248h-24.2C443.7%20148.3%20363.7%2068.3%20264%2064.2V40c0-4.4-3.6-8-8-8s-8%203.6-8%208v24.2C148.3%2068.3%2068.3%20148.3%2064.2%20248H40c-4.4%200-8%203.6-8%208s3.6%208%208%208h24.2c4.1%2099.7%2084.2%20179.7%20183.8%20183.8V472c0%204.4%203.6%208%208%208s8-3.6%208-8v-24.2c99.7-4.1%20179.7-84.2%20183.8-183.8H472c4.4%200%208-3.6%208-8s-3.6-8-8-8zm-91.6%20132.4C349%20411.8%20308%20429.8%20264%20431.8V392c0-4.4-3.6-8-8-8s-8%203.6-8%208v39.8c-44-2-85.1-20-116.4-51.4C100.2%20349.1%2082.1%20308%2080.2%20264H120c4.4%200%208-3.6%208-8s-3.6-8-8-8H80.2c2-44%2020-85.1%2051.4-116.4S204%2082.1%20248%2080.2V120c0%204.4%203.6%208%208%208s8-3.6%208-8V80.2c44%202%2085.1%2020%20116.4%2051.4S429.9%20204%20431.8%20248H392c-4.4%200-8%203.6-8%208s3.6%208%208%208h39.8c-1.9%2044-20%2085.1-51.4%20116.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-locate-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-locate-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-locate-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20256c0-4.4%203.6-8%208-8h55.8C443.7%20148.3%20363.7%2068.3%20264%2064.2V120c0%204.4-3.6%208-8%208s-8-3.6-8-8V64.2C148.3%2068.3%2068.3%20148.3%2064.2%20248H120c4.4%200%208%203.6%208%208s-3.6%208-8%208H64.2c4.1%2099.7%2084.2%20179.7%20183.8%20183.8V392c0-4.4%203.6-8%208-8s8%203.6%208%208v55.8c99.7-4.1%20179.7-84.2%20183.8-183.8H392c-4.4%200-8-3.6-8-8zm-128%2064c-35.3%200-64-28.7-64-64s28.7-64%2064-64%2064%2028.7%2064%2064-28.7%2064-64%2064zM472%20248h-24.2c.1%202.7.2%205.3.2%208s-.1%205.3-.2%208H472c4.4%200%208-3.6%208-8s-3.6-8-8-8zM64.2%20248H40c-4.4%200-8%203.6-8%208s3.6%208%208%208h24.2c-.1-2.7-.2-5.3-.2-8s.1-5.3.2-8zM248%20447.8V472c0%204.4%203.6%208%208%208s8-3.6%208-8v-24.2c-2.7.1-5.3.2-8%20.2s-5.3-.1-8-.2zM264%2064.2V40c0-4.4-3.6-8-8-8s-8%203.6-8%208v24.2c2.7-.1%205.3-.2%208-.2s5.3.1%208%20.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-locate($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-locate-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-lock-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M360%20224v-72c0-57.43-46.562-104-103.984-104C198.562%2048%20152%2094.57%20152%20152v72H96v240h320V224h-56zm-192-72c0-48.523%2039.484-88%2088.016-88C304.53%2064%20344%20103.477%20344%20152v72H168v-72zm232%20296H112V240h288v208z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20288c-17.673%200-32%2014.327-32%2032%200%2014.91%2010.198%2027.44%2024%2030.992V384h16v-33.008c13.802-3.553%2024-16.082%2024-30.992%200-17.673-14.327-32-32-32zm0%2048c-8.822%200-16-7.178-16-16s7.178-16%2016-16%2016%207.178%2016%2016-7.178%2016-16%2016z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-lock-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-lock-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-lock-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M360%20224v-72c0-57.43-46.562-104-103.984-104C198.562%2048%20152%2094.57%20152%20152v72H96v240h320V224h-56zm-96%20126.992V384h-16v-33.008c-13.802-3.553-24-16.082-24-30.992%200-17.673%2014.327-32%2032-32s32%2014.327%2032%2032c0%2014.91-10.198%2027.44-24%2030.992zM344%20224H168v-72c0-48.523%2039.484-88%2088.016-88C304.53%2064%20344%20103.477%20344%20152v72z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20304c-8.822%200-16%207.178-16%2016s7.178%2016%2016%2016%2016-7.178%2016-16-7.178-16-16-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-lock($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-lock-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-log-in-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M137%2080h286c22.1%200%2040%2017.9%2040%2040v272c0%2022.1-17.9%2040-40%2040H137c-22.1%200-40-17.9-40-40%200-4.4%203.6-8%208-8s8%203.6%208%208c0%2013.2%2010.8%2024%2024%2024h286c13.2%200%2024-10.8%2024-24V120c0-13.2-10.8-24-24-24H137c-13.2%200-24%2010.8-24%2024%200%204.4-3.6%208-8%208s-8-3.6-8-8c0-22.1%2017.9-40%2040-40z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M316.3%20246.7l-84.6-84.4c-3.1-3.1-8.2-3.1-11.3%200-3.1%203.1-3.1%208.2%200%2011.3L296%20248H57c-4.4%200-8%203.6-8%208s3.6%208%208%208h239l-73.7%2074.4c-3.1%203.1-3.1%208.2%200%2011.3%201.6%201.5%203.6%202.3%205.7%202.3s4.1-.7%205.7-2.3l82.6-82.4c6.3-6.3%206.3-14.4%200-20.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-log-in($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-log-in-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-log-out-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M280%20432H88c-22.1%200-40-17.9-40-40V120c0-22.1%2017.9-40%2040-40h192c22.1%200%2040%2017.9%2040%2040%200%204.4-3.6%208-8%208s-8-3.6-8-8c0-13.2-10.8-24-24-24H88c-13.2%200-24%2010.8-24%2024v272c0%2013.2%2010.8%2024%2024%2024h192c13.2%200%2024-10.8%2024-24%200-4.4%203.6-8%208-8s8%203.6%208%208c0%2022.1-17.9%2040-40%2040z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M459.3%20246.7l-84.6-84.4c-3.1-3.1-8.2-3.1-11.3%200-3.1%203.1-3.1%208.2%200%2011.3L439%20248H168c-4.4%200-8%203.6-8%208s3.6%208%208%208h271l-73.7%2074.4c-3.1%203.1-3.1%208.2%200%2011.3%201.6%201.5%203.6%202.3%205.7%202.3s4.1-.7%205.7-2.3l82.6-82.4c6.3-6.3%206.3-14.4%200-20.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-log-out($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-log-out-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-magnet-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M190.1%20133.1c16.1%201.9%2032.8%2010.8%2046.9%2024.9l167.7%20167.7%2059.3-59.3L286.2%2088.7c-54.3-54.3-143.2-54.3-197.5%200-54.3%2054.3-54.3%20143.2%200%20197.5L266.5%20464l59.3-59.3-167.7-167.6c-14.4-14.4-23.4-30.9-25.4-46.6-2.1-16%203.1-30.4%2015.3-42.6%2011.5-11.6%2026.1-16.7%2042.1-14.8zm254.1%20133.4L404.7%20306l-29.6-29.6%2039.5-39.5%2029.6%2029.6zM306%20404.7l-39.5%2039.5-29.6-29.6%2039.5-39.5%2029.6%2029.6zM148.2%20246.9l118.3%20118.3-39.5%2039.5L98.6%20276.4C75%20252.7%2062%20221.2%2062%20187.5s13-65.2%2036.6-88.9C122.2%2075%20153.8%2062%20187.5%2062s65.2%2013%2088.9%2036.6L404.7%20227l-39.5%2039.5-118.3-118.3c-32.7-32.7-78-41-108.9-10.1-32%2032-22.5%2076.1%2010.2%20108.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-magnet-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-magnet-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-magnet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M190.1%20133.1c16.1%201.9%2032.8%2010.8%2046.9%2024.9l167.7%20167.7%2059.3-59.3L286.2%2088.7c-54.3-54.3-143.2-54.3-197.5%200-54.3%2054.3-54.3%20143.2%200%20197.5L266.5%20464l59.3-59.3-167.7-167.6c-14.4-14.4-23.4-30.9-25.4-46.6-2.1-16%203.1-30.4%2015.3-42.6%2011.5-11.6%2026.1-16.7%2042.1-14.8zm254.1%20133.4L404.7%20306l-29.6-29.6%2039.5-39.5%2029.6%2029.6zM306%20404.7l-39.5%2039.5-29.6-29.6%2039.5-39.5%2029.6%2029.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-magnet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-magnet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mail-open-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064L64%20192v256h384V192L256%2064zm176%20368H80V218.4l114.9%2087.1-67.9%2077.2%202%202%2078.7-69.4L256%20352l48.1-36.7%2078.8%2069.5%202-2-68-77.3%20115-87.8V432zM256%20331.8L102.7%20214H192v-3.2L82.1%20198.1l-.3-.2L256%2084.1l174.6%20114L320%20210.8v3.2h90.4L256%20331.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mail-open-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mail-open-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mail-open-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M317%20305.4l68%2077.3-2%202-78.8-69.5-48.1%2036.7-48.4-36.7-78.7%2069.5-2-2%2067.9-77.2-130.9-99V448h384V205.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20214h-89.3L256%20331.8%20410.4%20214H320v-3.2l128-14.9V192L256%2064%2064%20192v4.2l128%2014.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mail-open($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mail-open-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mail-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20128v256h384V128H64zm192%20139.9L93.2%20144h325.6L256%20267.9zM80%20368V154.1l115.1%2087.6L127%20319l2%202%2078.9-69.6L256%20288l48.1-36.6L383%20321l2-2-68.1-77.4L432%20154.1V368H80z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mail-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mail-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mail-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20384V141.8l-131.1%2099.8L385%20319l-2%202-78.9-69.6L256%20288l-48.1-36.6L129%20321l-2-2%2068-77.4L64%20142v242z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M439.7%20128H72l184%20139.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mail($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mail-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-male-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M456%2048H344c-4.4%200-8%203.6-8%208s3.6%208%208%208h92L329%20171.7c-29.8-27.1-69.5-43.7-113-43.7-92.8%200-168%2075.2-168%20168s75.2%20168%20168%20168%20168-75.2%20168-168c0-43.5-16.5-83.2-43.7-113L448%2076v92c0%204.4%203.6%208%208%208s8-3.6%208-8V56c0-4.4-3.6-8-8-8zm-88%20248c0%2040.6-15.8%2078.8-44.5%20107.5S256.6%20448%20216%20448c-40.6%200-78.8-15.8-107.5-44.5S64%20336.6%2064%20296s15.8-78.8%2044.5-107.5S175.4%20144%20216%20144c40.6%200%2078.8%2015.8%20107.5%2044.5S368%20255.4%20368%20296z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-male($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-male-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-man-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.7%20106.6h-.2c-25%200-45.5-20.3-45.5-45.3S230.4%2016%20255.5%2016%20301%2036.3%20301%2061.3c0%2012.1-4.7%2023.5-13.3%2032-8.5%208.6-19.9%2013.3-32%2013.3zm-.2-74.6c-16.2%200-29.4%2013.1-29.4%2029.3s13.2%2029.3%2029.4%2029.3h.2c7.8%200%2015.2-3%2020.7-8.6%205.5-5.5%208.6-12.9%208.6-20.7-.1-16.2-13.3-29.3-29.5-29.3zM221.2%20496c-14.4%200-29-10.5-29-30.4l1-277.6h-6v105c0%209.3-4%2015.1-7.4%2018.3-4.3%204.1-10.1%206.4-16.2%206.4s-11.9-2.3-16.2-6.4c-3.4-3.2-7.4-8.9-7.4-18.3V171.4c0-13.8%205.4-27.8%2014.8-38.4%2010.4-11.6%2024.6-18%2040-18h122.3c15.4%200%2029.6%206.4%2040%2018.1%209.4%2010.6%2014.8%2024.5%2014.8%2038.3V293c0%207.3-2.7%2013.8-7.6%2018.3-4.4%204-10.3%206.2-16.5%206.2-6.2%200-12.1-2.2-16.5-6.2-4.9-4.5-7.6-11-7.6-18.3V188h-5v277.6c0%2019.7-15.4%2030.4-29.8%2030.4-13.4%200-28.3-9.3-29.4-29.8V325h-8v140.9c-.7%2019.7-15.8%2030.1-30.3%2030.1zm-42-324h22.1c2.1%200%204.2.8%205.7%202.4s2.4%203.5%202.3%205.7l-1%20285.6c0%2010.6%206.7%2014.4%2012.9%2014.4%206.8%200%2013.8-4.5%2014.2-14.6V317c0-4.4%203.6-8%208-8h24.1c4.4%200%208%203.6%208%208v148.5c.7%2010.7%207.3%2014.5%2013.4%2014.5%206.6%200%2013.7-4.5%2013.7-14.4V180c0-4.4%203.6-8%208-8h21.1c4.4%200%208%203.6%208%208v113c0%208.1%206.7%208.5%208%208.5%201.3%200%208-.4%208-8.5V171.4c0-19.5-15.6-40.4-38.8-40.4H194.8c-18.6%200-38.8%2015.4-38.8%2040.4V293c0%208.2%206.3%208.6%207.5%208.6s7.5-.4%207.5-8.6V180c.1-4.4%203.7-8%208.2-8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-man-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-man-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-man-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.7%20106.6h-.2c-25%200-45.5-20.3-45.5-45.3S230.4%2016%20255.5%2016%20301%2036.3%20301%2061.3c0%2012.1-4.7%2023.5-13.3%2032-8.5%208.6-19.9%2013.3-32%2013.3zM221.2%20496c-14.4%200-29-10.5-29-30.4l1-277.6h-6v105c0%209.3-4%2015.1-7.4%2018.3-4.3%204.1-10.1%206.4-16.2%206.4s-11.9-2.3-16.2-6.4c-3.4-3.2-7.4-8.9-7.4-18.3V171.4c0-13.8%205.4-27.8%2014.8-38.4%2010.4-11.6%2024.6-18%2040-18h122.3c15.4%200%2029.6%206.4%2040%2018.1%209.4%2010.6%2014.8%2024.5%2014.8%2038.3V293c0%207.3-2.7%2013.8-7.6%2018.3-4.4%204-10.3%206.2-16.5%206.2s-12.1-2.2-16.5-6.2c-4.9-4.5-7.6-11-7.6-18.3V188h-5v277.6c0%2019.7-15.4%2030.4-29.8%2030.4-13.4%200-28.3-9.3-29.4-29.8V325h-8v140.9c-.7%2019.7-15.8%2030.1-30.3%2030.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-man($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-man-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-map-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352.4%20128l-95.7-64-96.3%2064L64%2064v320l96.4%2064%2096.3-64%2095.7%2064%2095.6-64V64l-95.6%2064zM168%20142.4l80-53.2v281.5l-80%2053.1V142.4zM264%2088l80%2053.4V423l-80-53.5V88zM80%2094l72%2047.6v281.6l-72-47.8V94zm352%20281.4l-72%2048.3V142.4L432%2094v281.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-map-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-map-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-map-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v320l88%2058.4v-320zM168%20123v320l80-53.2v-320zM448%2064l-88%2058.9v320l88-58.9zM264%2068.8v320l80%2053.6v-320z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-map($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-map-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-medal-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20255.4c15.6%2020.7%2024%2045.7%2024%2072.1%200%2032.1-12.5%2062.2-35.1%2084.9s-52.8%2035.1-84.9%2035.1-62.2-12.5-84.9-35.1-35.1-52.8-35.1-84.9c0-26.4%208.5-51.5%2024.1-72.2l-6.2-1.7-10.2-2.9c-15%2021.8-23.7%2048.3-23.7%2076.8%200%2075.1%2060.9%20136.5%20136%20136.5s136-61.4%20136-136.5c0-28.4-8.7-54.8-23.6-76.6l-10.2%202.8-6.2%201.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M298.7%20270.1l-21.7%206c20.5%208.3%2035%2028.4%2035%2051.9%200%2030.9-25.1%2056-56%2056s-56-25.1-56-56c0-23.5%2014.5-43.6%2034.9-51.9l-21.6-6C195.5%20283.2%20184%20304.3%20184%20328c0%2039.7%2032.3%2072%2072%2072s72-32.3%2072-72c0-23.7-11.5-44.8-29.3-57.9zM48%2048v160l208%2058%20208-58V48H48zm400%2016v32H64V64h384zM64%20196v-84h112v116L64%20196zm192%2052.7l-64-17V112h128v119.7l-64%2017zm80-20.7V112h112v84l-112%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-medal-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-medal-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-medal-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20112v96l128%2036V112zM200%20328.2c0%2030.9%2025.1%2056%2056%2056s56-25.1%2056-56c0-23.5-14.4-43.5-34.9-51.9l-21.1%205.8-21-5.9c-20.6%208.5-35%2028.6-35%2052z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368.4%20251.1l-69.6%2019.2c17.7%2013.1%2029.2%2034.2%2029.2%2057.9%200%2039.7-32.3%2072-72%2072s-72-32.3-72-72c0-23.7%2011.5-44.8%2029.3-57.9L143.7%20251c-15%2021.8-23.7%2048.3-23.7%2076.8%200%2075.1%2060.9%20136%20136%20136s136-60.9%20136-136c0-28.5-8.7-54.8-23.6-76.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20112v136l64%2018%2064-17.6V112zM336%20112v132l128-36v-96zM48%2048h416v48H48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-medal($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-medal-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-medical-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M438%20187.713l-31.927-55.426L288%20200.574V64h-64v136.574l-118.073-68.287-31.938%2055.426L192.09%20256%2073.998%20324.287l31.928%2055.426L224%20311.426V448h64V311.426l118.072%2068.287%2031.94-55.426L319.907%20256%20438%20187.713zm-21.824%20142.412l-15.963%2027.866L272%20284v148h-32V284l-128.213%2074-15.97-27.785%20128.23-74.197L95.82%20181.86l15.964-27.858L240%20228V80h32v148l128.213-74%2015.97%2027.785-128.23%2074.18%20128.223%2074.16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-medical-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-medical-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-medical-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M438%20187.713l-31.927-55.426L288%20200.574V64h-64v136.574l-118.073-68.287-31.938%2055.426L192.09%20256%2073.998%20324.287l31.928%2055.426L224%20311.426V448h64V311.426l118.072%2068.287%2031.94-55.426L319.907%20256%20438%20187.713z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-medical($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-medical-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-medkit-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272%20208v64h64v32h-64v64h-32v-64h-64v-32h64v-64h32m16-16h-64v64h-64v64h64v64h64v-64h64v-64h-64v-64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M336%20128V96c-.5-18.2-13.6-32-32.2-32h-99.1C186.1%2064%20176%2077.7%20176%2096v32H48v320h416V128H336zM192%2098.1c0-10.2%202.9-18.1%2013.7-18.1h97.1c10.4%200%2017.2%207.7%2017.2%2018.1V128H192V98.1zM448%20432H64V144h384v288z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-medkit-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-medkit-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-medkit-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272%20272v-64h-32v64h-64v32h64v64h32v-64h64v-32h-48z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M336%20128V96c-.5-18.2-13.6-32-32.2-32h-99.1C186.1%2064%20176%2077.7%20176%2096v32H48v320h416V128H336zM192%2098.1c0-10.2%202.9-18.1%2013.7-18.1h97.1c10.4%200%2017.2%207.7%2017.2%2018.1V128H192V98.1zM352%20320h-64v64h-64v-64h-64v-64h64v-64h64v64h64v64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-medkit($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-medkit-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-megaphone-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M76.1%20187c0-38.1%2022.2-71%2055.3-85h-7.1c-28.7%200-60.7%2030.4-66.3%2069.8-5.6.9-9.9%207.3-9.9%2014.9%200%208%204.7%2014.3%2010.8%2014.8%204.2%2030%2035.7%2059%2056.9%2065.4l10.1%203.2c-27.8-15.8-49.8-48.8-49.8-83.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M390.5%2064c8.7%200%2015.8%203.2%2023.7%2010.6%206.9%206.6%2013%2015.7%2018.1%2027.1%201%202.4%202%204.6%202.9%206.9v.2C443.4%20130%20448%20157.1%20448%20185c0%2027.8-4.5%2054.8-12.7%2076.1v.2c-.9%202.3-1.8%204.6-2.9%207.1-5.1%2011.2-10.4%2019.2-18.5%2027.4-11.9%2011.9-20.3%2013.2-23.4%2013.2-3.2%200-6.1-.6-14.4-3.7-6.2-2.4-12.4-4.9-18.5-7.3-31.1-12.5-63.2-25.4-106.5-25.4-7.1%200-13.7%202.9-18.6%208.3-14.7%2016-12.7%2051.7-8.2%20104.4%201.2%2013.7%202.3%2026.7%202.3%2035%200%209.9-.3%2016.4-.9%2021.3-.4%203.4-.9%205.3-1.3%206.2-.7.1-1.8.2-3.6.2-7.4%200-18.3-1.4-28.4-3.7-12.2-2.8-18-5.6-19.6-6.7-2.1-2.6-2.3-4-.2-19.1%202-14.3%2015-84.1%2020.6-113.9%201.1-5.9%201.9-10.3%202.3-12.5%202-10.6-3.3-20.2-14.1-25.8-5.6-2.9-12.3-4.6-18.8-6.3-5-1.3-13.5-3.5-15.7-5.3l-1-.8-1.1-.7c-22.6-13.4-36.6-38.8-36.6-66.2%200-15.2%204.5-29.9%2012.9-42.7%207.5-11.4%2017.7-20.4%2029.5-26.3%207.7-.1%2028-.2%2059.8-.2%2021.9%200%2050.6-4.9%2081-13.9%2030.6-9.1%2059.5-21.3%2081.2-34.3l.6-.4c3.9-2.2%208.8-5.2%2017.3-5.2m0-16c-13.5%200-21.5%205.2-25.8%207.8-43.1%2025.9-112.3%2046-154%2046s-63.4.2-63.4.2c-31.6%2014-54.8%2046.9-54.8%2085%200%2034.2%2017.8%2064.2%2044.4%2080%2012.1%2010.1%2045.6%208.8%2043.1%2022.2-2.5%2013.4-20.5%20109.5-23%20127s-2.9%2023.5%204%2032c7%208.5%2041.5%2015.8%2060%2015.8s21.8-8.7%2021.8-43.8-17.3-131.7%208.5-131.7c48.3%200%2081.5%2017.3%20119.3%2031.7%209%203.4%2014.1%204.7%2020.1%204.7%206%200%2018.7-1.9%2034.7-18.2%209.2-9.4%2015.7-18.8%2021.7-32.2%201.1-2.6%202.2-5.2%203.2-8%208.9-23.2%2013.7-51.9%2013.7-81.9%200-29.9-4.8-58.7-13.8-82-1-2.7-2.1-5.2-3.2-7.7-6-13.4-13.4-24.2-21.7-32.2-10.5-9.5-21.4-14.7-34.8-14.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M385.3%2096.3c2.1%200%2010%204.1%2015.7%2016.7%204.5%2010.2%2015%2037.4%2015%2072%200%2034.2-10.4%2061.6-14.9%2071.8-5.3%2012-12.5%2018.5-15.5%2019.8-2-1.4-7.1-6.7-12.9-19.8-7.9-18-12.5-44.2-12.5-71.8%200-27.9%204.6-54.1%2012.6-72%206.1-13.8%2011.7-16.7%2012.5-16.7m0-16c-10.4%200-20%209.9-27.2%2026.2-8.5%2019.2-13.9%2047.2-13.9%2078.5%200%2031.1%205.4%2059.1%2013.8%2078.2%207.2%2016.5%2016.8%2029.6%2027.3%2029.6s23.1-13.1%2030.4-29.6C424.1%20244%20432%20216%20432%20185c0-31.3-7.8-59.3-16.4-78.5-7.3-16.2-19.8-26.2-30.3-26.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-megaphone-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-megaphone-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-megaphone-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M76.1%20187c0-38.1%2022.2-71%2055.3-85h-7.1c-28.7%200-60.7%2030.4-66.3%2069.8-5.6.9-9.9%207.3-9.9%2014.9%200%208%204.7%2014.3%2010.8%2014.8%204.2%2030%2035.7%2059%2056.9%2065.4l10.1%203.2c-27.8-15.8-49.8-48.8-49.8-83.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M450.2%20102.8c-1-2.7-2.1-5.2-3.2-7.7-6-13.4-13.4-24.2-21.7-32.2-10.5-9.7-21.4-14.9-34.8-14.9s-21.5%205.2-25.8%207.8c-43.1%2025.9-112.3%2046-154%2046s-63.4.2-63.4.2c-31.6%2014-54.8%2046.9-54.8%2085%200%2034.2%2017.8%2064.2%2044.4%2080%2012.1%2010.1%2045.6%208.8%2043.1%2022.2-2.5%2013.4-20.5%20109.5-23%20127s-2.9%2023.5%204%2032c7%208.5%2041.5%2015.8%2060%2015.8s21.8-8.7%2021.8-43.8-17.3-131.7%208.5-131.7c48.3%200%2081.5%2017.3%20119.3%2031.7%209%203.4%2014.1%204.7%2020.1%204.7%206%200%2018.7-1.9%2034.7-18.2%209.2-9.4%2015.7-18.8%2021.7-32.2%201.1-2.6%202.2-5.2%203.2-8%208.9-23.2%2013.7-51.9%2013.7-81.9%200-29.8-4.8-58.6-13.8-81.8zm-18.5%20160.5c-7.2%2016.4-19.9%2029.6-30.4%2029.6s-20.1-13.1-27.3-29.6c-8.4-19.2-13.8-47.2-13.8-78.2%200-31.3%205.4-59.3%2013.9-78.5%207.2-16.3%2016.8-26.2%2027.2-26.2%2010.5%200%2023%209.9%2030.3%2026.2%208.5%2019.2%2016.4%2047.2%2016.4%2078.5%200%2031-7.8%2059-16.3%2078.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-megaphone($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-megaphone-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-menu-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20144h384v16H64zM64%20248h384v16H64zM64%20352h384v16H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-menu-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-menu-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-menu-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20144h384v32H64zM64%20240h384v32H64zM64%20336h384v32H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-menu($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-menu-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mic-off-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M334.9%20276.5c0%20.2%200%20.4-.1.6%200-.2%200-.4.1-.6zM335.2%20272.4v.7c-.1-.3-.1-.5%200-.7zM177%20268.3v.1c0%2046.1%2035.3%2083.6%2079.1%2083.6%209.1%200%2017.8-1.6%2025.9-4.6l-.1-.1c-8.1%203-16.7%204.6-25.8%204.6-43.8-.1-79.1-37.5-79.1-83.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.1%20335.8c-34.8%200-63.1-30.3-63.1-67.5v-73L177%20168v100.3c0%2046.1%2035.3%2083.6%2079.1%2083.6%209.1%200%2017.8-1.6%2025.9-4.6l-8.3-14.1c-5.6%201.7-11.5%202.6-17.6%202.6zM335%20268.4v-.1c0%201.4%200%202.7-.1%204.1.1-1.3.1-2.7.1-4zM335.1%20273.1c-.1%201.2-.1%202.3-.2%203.5.1-1.2.2-2.4.2-3.5zM320.2%20317.4c7.9-11.5%2013.1-25.3%2014.6-40.2-1.5%2014.8-6.7%2028.6-14.6%2040.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.9%2048c-29.6%200-55.3%2017.1-68.9%2042.4l10%2016.9c9.1-25.4%2032-43.5%2058.9-43.5%2034.8%200%2063.1%2030.3%2063.1%2067.5v136.8c0%2012.1-2.9%2023.5-8.2%2033.3l9.3%2015.7c7.9-11.5%2013.2-25.3%2014.7-40.2%200-.2.1-.4.1-.6.1-1.1.2-2.3.3-3.5%200-.2-.1-.4-.1-.7.1-1.4%200-2.7%200-4.1V131.6C335%2085.5%20299.7%2048%20255.9%2048zM264.2%20383.3l-8.2.6-8.4-.6c-28.6-2.1-53.2-14.6-72.9-35.4-19.7-20.8-30.7-47.8-30.7-76.1V208h-16v63.8c0%2067.2%2054%20122.6%20121%20127.4V448h-74v16h161v-16h-72v-48.7c15-1.1%2029.1-4.7%2042.3-10.5l-7.8-13.3c-11%204.3-22.6%206.9-34.3%207.8zM384%20271.8V208h-16v63.8c0%2028.4-10.1%2055.5-29.2%2076.2-.2.2-.2.3-.4.5l7.6%2013.2c23.4-23.1%2038-54.9%2038-89.9z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M133.8%2032L120%2040.1%20378.2%20480l13.8-8.1z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mic-off-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mic-off-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mic-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M177%20268.4c0%2046.1%2035.3%2083.6%2079%2083.6%209.1%200%2017.8-1.6%2025.9-4.6L177%20168v100.4zM335%20268.4V131.5c0-46.1-35.3-83.6-79-83.6-29.5%200-55.2%2017.1-68.8%2042.4l132.7%20227c9.5-13.7%2015.1-30.6%2015.1-48.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264.2%20383.3l-8.2.6-8.4-.6c-28.5-2.1-53.2-14.6-72.9-35.4-19.7-20.8-30.7-47.8-30.7-76.1V208h-16v63.8c0%2067.2%2054%20122.6%20121%20127.5V448h-74v16h161v-16h-72v-48.7c14.8-1.1%2029-4.7%2042.1-10.5l-7.8-13.3c-10.9%204.3-22.5%207-34.1%207.8zM384%20271.8V208h-16v63.8c0%2028.4-10.2%2055.5-29.3%2076.3l-.5.5%207.7%2013.2c23.4-23.2%2038.1-55%2038.1-90z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M134.2%2032l-13.8%208%20257.4%20440%2013.8-8z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mic-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mic-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mic-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2063.9c34.7%200%2063%2030.3%2063%2067.6v136.9c0%2037.3-28.3%2067.6-63%2067.6s-63-30.3-63-67.6V131.5c0-37.3%2028.3-67.6%2063-67.6m0-15.9c-43.7%200-79%2037.4-79%2083.5v136.9c0%2046.1%2035.3%2083.6%2079%2083.6s79-37.5%2079-83.6V131.5c0-46.1-35.3-83.5-79-83.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20208v63.8c0%2028.4-10.2%2055.5-29.3%2076.3-19%2020.7-46.7%2033.2-74.5%2035.2l-8.2.6-8.4-.6c-28.5-2.1-53.2-14.6-72.9-35.4-19.7-20.8-30.7-47.8-30.7-76.1V208h-16v63.8c0%2067.2%2054%20122.6%20121%20127.5V448h-74v16h161v-16h-72v-48.7c66-4.9%20120-60.3%20120-127.5V208h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mic-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mic-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-mic-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c-43.7%200-79%2037.4-79%2083.5v136.9c0%2046.1%2035.3%2083.6%2079%2083.6s79-37.5%2079-83.6V131.5c0-46.1-35.3-83.5-79-83.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20208v63.8c0%2028.4-10.2%2055.5-29.3%2076.3-19%2020.7-46.7%2033.2-74.5%2035.2l-8.2.6-8.4-.6c-28.5-2.1-53.2-14.6-72.9-35.4-19.7-20.8-30.7-47.8-30.7-76.1V208h-16v63.8c0%2067.2%2054%20122.6%20121%20127.5V448h-74v16h161v-16h-72v-48.7c66-4.9%20120-60.3%20120-127.5V208h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-mic($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-mic-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-microphone-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M280%2048h-48c-66%200-120%2054-120%20120v128c0%2063.3%2049.7%20115.6%20112%20119.7V464h64v-48.3c62.3-4.2%20112-56.4%20112-119.7V168c0-66-54-120-120-120zm-40%20400v-32h32v32h-32zm40-48h-48c-27.6%200-53.7-10.9-73.4-30.6-.5-.5-.9-1-1.4-1.4h197.7c-.5.5-.9%201-1.4%201.4-19.8%2019.7-45.9%2030.6-73.5%2030.6zm87.5-48h-223c-10.7-16.6-16.5-35.9-16.5-56v-8h80v-16h-80v-32h80v-16h-80v-32h80v-16h-80v-8c0-27.6%2010.9-53.7%2030.6-73.4%2013.9-13.9%2030.9-23.4%2049.4-27.8V112h16V64.3c2.6-.2%205.3-.3%208-.3h16v64h16V64h16c2.7%200%205.4.1%208%20.3V112h16V66.8c18.5%204.4%2035.6%2013.9%2049.4%2027.8%2019.7%2019.7%2030.6%2045.8%2030.6%2073.4v8h-80v16h80v32h-80v16h80v32h-80v16h80v8c0%2020.1-5.8%2039.4-16.5%2056z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-microphone-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-microphone-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-microphone-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M304%20192v-16h96v-8c0-57.8-41.4-106.4-96-117.6V112h-16V48.3c-2.6-.2-5.3-.3-8-.3h-16v80h-16V48h-16c-2.7%200-5.4.1-8%20.3V112h-16V50.4c-54.6%2011.2-96%2059.8-96%20117.6v8h96v16h-96v32h96v16h-96v32h96v16h-96v8c0%2020.2%205.1%2039.3%2014%2056h260c8.9-16.7%2014-35.8%2014-56v-8h-96v-16h96v-32h-96v-16h96v-32h-96zM375.8%20368H136.2c20.6%2027.3%2052.7%2045.7%2088.8%2047.8l-1%20.2v48h64v-48l-1.5-.2c36.4-2%2068.6-20.3%2089.3-47.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-microphone($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-microphone-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-moon-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M214.1%2087.3s0%20.1-.1.1c-12.8%2026.7-19.3%2055.5-19.3%2085.4%200%2052.8%2020.5%20102.5%2057.8%20139.8%2037.3%2037.4%2086.8%2057.9%20139.6%2057.9%203.2%200%206.4-.1%209.6-.2h.2c-33.6%2039.2-82.2%2061.6-133.7%2061.6-47.1%200-91.3-18.4-124.6-51.7C110.3%20346.9%2092%20302.6%2092%20255.4c0-38.3%2012-74.7%2034.8-105.4%2011-14.7%2024.1-27.6%2039-38.3%2014.8-10.6%2031.1-18.8%2048.3-24.4M246.9%2064c-12.6%201.4-24.9%204-36.6%207.7C132.4%2096.4%2076%20169.3%2076%20255.4%2076%20361.8%20162%20448%20268.2%20448c58.7%200%20111.2-26.4%20146.5-67.9%208.1-9.5%2015.2-19.8%2021.4-30.8-11.4%202.8-23.1%204.5-35%205.1-2.9.1-5.9.2-8.8.2-48.4%200-94-18.9-128.2-53.2-34.3-34.3-53.1-80-53.1-128.5%200-27.6%206.1-54.3%2017.7-78.5%204.9-10.7%2011-20.9%2018.2-30.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-moon-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-moon-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-moon-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M246.9%2064c-12.6%201.4-24.9%204-36.6%207.7C132.4%2096.4%2076%20169.3%2076%20255.4%2076%20361.8%20162%20448%20268.2%20448c58.7%200%20111.2-26.4%20146.5-67.9%208.1-9.5%2015.2-19.8%2021.4-30.8-11.4%202.8-23.1%204.5-35%205.1-2.9.1-5.9.2-8.8.2-48.4%200-94-18.9-128.2-53.2-34.3-34.3-53.1-80-53.1-128.5%200-27.6%206.1-54.3%2017.7-78.5%204.9-10.7%2011-20.9%2018.2-30.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-moon($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-moon-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-more-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20238c9.9%200%2018%208.1%2018%2018s-8.1%2018-18%2018-18-8.1-18-18%208.1-18%2018-18m0-14c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32zM128.4%20238c9.9%200%2018%208.1%2018%2018s-8.1%2018-18%2018-18-8.1-18-18%208.1-18%2018-18m0-14c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.4-32-32-32zM384%20238c9.9%200%2018%208.1%2018%2018s-8.1%2018-18%2018-18-8.1-18-18%208.1-18%2018-18m0-14c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-more-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-more-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-more-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20224c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32zM128.4%20224c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.4-32-32-32zM384%20224c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032%2032-14.3%2032-32-14.3-32-32-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-more($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-more-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-move-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M389.6%20165.5l-11.3%2011.3%2070.8%2071.2H264V62.9l71.2%2070.9%2011.3-11.4L256%2031.9l-90.5%2090.5%2011.3%2011.3L248%2062.9V248H62.9l70.8-71.2-11.3-11.3L32%20256l90.5%2090.5%2011.3-11.3L62.9%20264H248v185l-71.2-70.8-11.3%2011.3L256%20480l90.5-90.5-11.3-11.3L264%20449V264h185.1l-70.9%2071.2%2011.3%2011.3L480%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-move($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-move-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-musical-note-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M358.3%2048.2c-4.7.9-106%2020.1-110.2%2020.9-4.2.8-8.1%203.6-8.1%208v259.4c0%201.6-.1%207.2-2.4%2011.7-3.1%205.9-8.5%2010.2-16.1%2012.7-3.3%201.1-7.8%202.1-13.1%203.3-24.1%205.4-64.4%2014.5-64.4%2051.6%200%2031%2022.4%2045%2041.7%2047.4%202.1.3%204.5.8%207.1.8%206.7%200%2024-1.4%2039.2-11.3%2011-7.1%2024.1-21.4%2024.1-47.8V166.5l112-22.9V55.8c-.1-4.3-3.8-8.8-9.8-7.6zM240%20404.8c0%2015.4-5.6%2027.3-16.8%2034.5-11.9%207.8-26.3%208.7-30.5%208.7-1.9%200-3.6-.4-5.1-.6-2.3-.3-10.5-1.9-17.3-7.4-6.9-5.5-10.4-13.7-10.4-24.2%200-22.5%2024.6-29.9%2051.9-36.1%205.7-1.3%2010.6-2.4%2014.6-3.7%205.5-1.8%209.5-4.2%2013.5-6.9v35.7zm112-274.1l-96%2018.9V83.8l96-18.2v65.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-musical-note-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-musical-note-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-musical-note-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M358.3%2048.2c-4.7.9-106%2020.1-110.2%2020.9-4.2.8-8.1%203.6-8.1%208v259.4c0%201.6-.1%207.2-2.4%2011.7-3.1%205.9-8.5%2010.2-16.1%2012.7-3.3%201.1-7.8%202.1-13.1%203.3-24.1%205.4-64.4%2014.5-64.4%2051.6%200%2031%2022.4%2045%2041.7%2047.4%202.1.3%204.5.8%207.1.8%206.7%200%2024-1.4%2039.2-11.3%2011-7.1%2024.1-21.4%2024.1-47.8V166.5l112-22.9V55.8c-.1-4.3-3.8-8.8-9.8-7.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-musical-note($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-musical-note-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-musical-notes-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M406.3%2048.2c-4.7.9-202%2039.2-206.2%2040-4.2.8-8.1%203.6-8.1%208v240.1c0%201.6-.1%207.2-2.4%2011.7-3.1%205.9-8.5%2010.2-16.1%2012.7-3.3%201.1-7.8%202.1-13.1%203.3-24.1%205.4-64.4%2014.6-64.4%2051.8%200%2031.1%2022.4%2045.1%2041.7%2047.5%202.1.3%204.5.7%207.1.7%206.7%200%2024-1.3%2039.2-11.2%2011-7.2%2024.1-21.4%2024.1-47.8V186l192-39v140.7c0%204.1-.2%208.9-2.5%2013.4-3.1%205.9-8.5%2010.2-16.2%2012.7-3.3%201.1-7.8%202.1-13.1%203.3-24.1%205.4-64.4%2014.5-64.4%2051.7%200%2033.7%2026.3%2045.6%2041.8%2047.3%201.2.1%202.6.1%204.1.1%2010.2%200%2025.7-2.5%2038.8-10%2017.9-10.3%2027.5-26.8%2027.5-48.2V55.9c-.1-4.4-3.8-8.9-9.8-7.7zM192%20404.8c0%2015.5-5.6%2027.3-16.8%2034.6-11.9%207.8-26.3%208.7-30.5%208.7-1.9%200-3.6-.4-5.1-.6-2.3-.3-10.5-1.9-17.3-7.4-6.9-5.5-10.4-13.7-10.4-24.2%200-22.6%2024.6-30%2051.9-36.2%205.7-1.3%2010.6-2.4%2014.6-3.7%205.5-1.8%209.5-4.2%2013.5-6.9v35.7zm208-47c0%2015.5-6.6%2026.9-19.4%2034.3-10.4%205.9-23.1%207.9-30.9%207.9-1.3%200-2.1.1-2.4%200-4.6-.5-27.6-4.2-27.6-31.2%200-22.6%2024.6-30%2051.9-36.2%205.7-1.3%2010.7-2.4%2014.7-3.7%205.5-1.8%209.6-4.2%2013.6-6.9v35.8zm0-226.9l-192%2038v-66l192-37.2v65.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-musical-notes-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-musical-notes-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-musical-notes-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M406.3%2048.2c-4.7.9-202%2039.2-206.2%2040-4.2.8-8.1%203.6-8.1%208v240.1c0%201.6-.1%207.2-2.4%2011.7-3.1%205.9-8.5%2010.2-16.1%2012.7-3.3%201.1-7.8%202.1-13.1%203.3-24.1%205.4-64.4%2014.6-64.4%2051.8%200%2031.1%2022.4%2045.1%2041.7%2047.5%202.1.3%204.5.7%207.1.7%206.7%200%2024-1.3%2039.2-11.2%2011-7.2%2024.1-21.4%2024.1-47.8V186l192-39v140.7c0%204.1-.2%208.9-2.5%2013.4-3.1%205.9-8.5%2010.2-16.2%2012.7-3.3%201.1-7.8%202.1-13.1%203.3-24.1%205.4-64.4%2014.5-64.4%2051.7%200%2033.7%2026.3%2045.6%2041.8%2047.3%201.2.1%202.6.1%204.1.1%2010.2%200%2025.7-2.5%2038.8-10%2017.9-10.3%2027.5-26.8%2027.5-48.2V55.9c-.1-4.4-3.8-8.9-9.8-7.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-musical-notes($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-musical-notes-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-navigate-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064.5c51.1%200%2099.2%2019.9%20135.4%2056.1s56.1%2084.2%2056.1%20135.4-19.9%2099.2-56.1%20135.4-84.2%2056.1-135.4%2056.1-99.2-19.9-135.4-56.1C84.5%20355.2%2064.5%20307.1%2064.5%20256s19.9-99.2%2056.1-135.4c36.2-36.1%2084.3-56.1%20135.4-56.1m0-16.5C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20160l-223.7%2096H256v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-navigate-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-navigate-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-navigate-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20336V256H128.3L352%20160l-96%20224z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-navigate($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-navigate-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-no-smoking-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M360%20256h16v48h-16zM128%20288v-16h117l-16-16H112v48h165l-16-16zM300%20272h36v13h-23l19%2019h20v-48h-68zM384%20256h16v48h-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20400c-25.9%200-51.1-5.1-74.7-15.1-22.9-9.7-43.4-23.5-61-41.2-17.6-17.6-31.5-38.2-41.2-61C69.1%20307.1%2064%20281.9%2064%20256s5.1-51.1%2015.1-74.7c8.6-20.4%2020.6-39%2035.6-55.3L386%20397.3c-16.3%2015-34.8%2027-55.3%2035.6-23.6%2010-48.8%2015.1-74.7%2015.1zm141.3-62L126%20114.7c16.3-15%2034.8-27%2055.3-35.6C204.9%2069.1%20230.1%2064%20256%2064s51.1%205.1%2074.7%2015.1c22.9%209.7%2043.4%2023.5%2061%2041.2%2017.6%2017.6%2031.5%2038.2%2041.2%2061%2010%2023.7%2015.1%2048.8%2015.1%2074.7s-5.1%2051.1-15.1%2074.7c-8.6%2020.4-20.6%2039-35.6%2055.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M360.2%20212.7c-8.8-4.1-22.1-4.7-45.7-4.7h-3.6c-12.7.1-15.9-1.1-20-7.1-2.8-4.2-1-14.8%203.7-21.9%201.6-2.4%201.8-5.6.4-8.2-1.4-2.6-4.1-4.2-7-4.3-.1%200-9.4-.1-18.3-3.9-10.6-4.5-15.6-12.1-15.6-23.1%200-25.8%2016.9-27.5%2017.9-27.5%204.4%200%208-3.6%208-8s-3.6-8-8-8c-12%200-33.9%2010.8-33.9%2043.5%200%2017.5%209%2031%2025.7%2038%204.2%201.7%208.4%202.9%2012%203.6-3.3%209.8-3.6%2021.9%201.7%2029.7%209%2013.3%2020.3%2013.1%2033.3%2013.1h3.5c26.3%200%2034.7%201.2%2039%203.2%205.7%202.6%206.7%207.5%206.7%2015.7v1.1h16v-1.1c0-7%20.2-22.7-15.8-30.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20244c0-26-3-39.2-9.1-49.5C382.3%20180%20368.5%20176%20352%20176h-17.4c2.9-8.3%205.4-23.8%203.5-34.9-3.2-18.8-15.4-29.1-34.1-29.1-4.4%200-8%203.6-8%208s3.6%208%208%208c16%200%2017.1%208.2%2018.4%2015.8%202.5%2014.5-6.8%2036.1-6.9%2036.3-1.4%202.5-1.3%205.5.1%207.9%201.4%202.4%204.1%204%206.9%204H352c10.9%200%2019.4.9%2025.1%2010.6%203.1%205.3%206.9%2013.4%206.9%2041.4h16zM400%20244c0-.1%200%200%200%200z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-no-smoking-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-no-smoking-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-no-smoking-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm48%2064c18.7%200%2030.9%2010.3%2034.1%2029.1%201.9%2011.1-.6%2026.6-3.5%2034.9H352c16.5%200%2030.3%204.1%2038.9%2018.4C397%20204.8%20400%20218%20400%20244h-16c0-28-3.8-36.1-6.9-41.4-5.7-9.7-14.2-10.6-25.1-10.6h-29.5c-2.8%200-5.5-1.6-6.9-3.9-1.4-2.4-1.5-5.4-.1-7.9.1-.2%209.4-21.8%206.9-36.3-1.3-7.6-2.4-15.8-18.4-15.8-4.4%200-8-3.6-8-8s3.6-8.1%208-8.1zm-32-16c4.4%200%208%203.6%208%208s-3.6%208-8%208c-1%200-17.9%201.7-17.9%2027.5%200%2011%205%2018.6%2015.6%2023.1%208.9%203.8%2018.2%203.9%2018.3%203.9%202.9.1%205.6%201.7%207%204.3%201.4%202.6%201.2%205.8-.4%208.2-4.7%207.1-6.5%2017.7-3.7%2021.9%204.1%206%207.3%207.2%2020%207.1h3.6c23.6%200%2036.9.6%2045.7%204.7%2016%207.4%2015.8%2023.1%2015.8%2030.2v1.1h-16v-1.1c0-8.2-1-13-6.7-15.7-4.3-2-12.7-3.2-39-3.2h-3.5c-13%200-24.3.2-33.3-13.1-5.3-7.8-5-20-1.7-29.8-3.6-.7-7.8-1.9-12-3.6-16.7-7-25.7-20.5-25.7-38C238.1%20106.8%20260%2096%20272%2096zm104%20160v48h-16v-48h16zm-24%200v48h-20l-48-48h68zm-240%2048v-48h117l48%2048H112zm279.8%2087.8c-1.9%201.9-3.8%203.7-5.8%205.5L114.7%20126a150.67%20150.67%200%200%201%2011.3-11.3L397.3%20386c-1.8%201.9-3.6%203.9-5.5%205.8zM400%20304h-16v-48h16v48zm0-60s0-.1%200%200zM400%20244c0-.1%200%200%200%200z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-no-smoking($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-no-smoking-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-notifications-off-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%20400c0%2018-14.4%2032-32%2032s-32.2-14-32.2-32h-16c0%2027%2021.6%2048%2048.1%2048s48.1-21%2048.1-48h-16zM133.8%2032L120%2040.1%20378.2%20480l13.8-8.1zM236.3%20104.2c16.8-2.1%2022.2-2.4%2039.7%200%2020.8%202.9%2041.6%2014%2055.2%2030.4%2017.7%2021.4%2026.7%2053.2%2026.7%2094.6%200%2051.4%204.4%2084.9%2014.2%20108.7%205.2%2012.6%2011.7%2022%2019%2030h-41.5l9.4%2016h73c-35.4-32-58.1-39-58.1-154.9%200-99.1-49-132.9-94.9-140.6%200-.6.1-1.1.1-1.7%200-12.7-10.3-23-23-23s-23%2010.3-23%2023c0%20.6%200%201.2.1%201.8-13.1%202.2-26.5%206.6-38.9%2014l8%2013.7c10.2-6.2%2021.9-10.5%2034-12zM121.1%20368c7.2-8%2013.7-17.3%2018.9-29.9%209.8-23.8%2014.1-57.3%2014.1-108.8%200-30.2%204.8-55.4%2014.4-75.1L159%20138c-12.8%2021.4-20.9%2050.9-20.9%2091.2C138.1%20345.1%20115.6%20352%2080%20384h222.9l-9.4-16H121.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-notifications-off-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-notifications-off-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-notifications-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M207.8%20400c0%2027%2021.6%2048%2048.1%2048s48.1-21%2048.1-48h-96.2zM133.8%2032L120%2040.1%20378.2%20480l13.8-8.1zM373.9%20229c0-99.1-49-132.9-94.9-140.6%200-.6.1-1.1.1-1.7%200-12.7-10.3-23-23-23s-23%2010.3-23%2023c0%20.6%200%201.2.1%201.8-13.1%202.2-26.5%206.6-38.9%2014L359%20383.9h73c-35.4-32-58.1-39-58.1-154.9zM138.1%20229.2C138.1%20345.1%20115.6%20352%2080%20384h222.9L159%20138c-12.8%2021.4-20.9%2050.9-20.9%2091.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-notifications-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-notifications-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-notifications-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%20400c0%2017-14.4%2032-32%2032s-32.2-15-32.2-32h-16c0%2026%2021.6%2047.9%2048.1%2047.9S304%20426%20304%20400h-16zM373.9%20229.2c0-99-49-132.8-94.9-140.5%200-.6.1-1.1.1-1.7%200-12.7-10.3-23-23-23s-23%2010.3-23%2023c0%20.6%200%201.2.1%201.8-45.9%207.8-94.9%2041.9-94.9%20140.7C138.1%20345%20115.6%20352%2080%20384h352c-35.4-32-58.1-39.1-58.1-154.8zM121.1%20368c7.2-8%2013.7-17.4%2018.9-30%209.8-23.7%2014.1-57.3%2014.1-108.7%200-41.3%209-73.1%2026.8-94.5%2013.6-16.4%2033.7-27.7%2055.4-30.5%2016.8-2.1%2022.2-2.4%2039.7%200%2020.8%202.9%2041.6%2014%2055.2%2030.4%2017.7%2021.4%2026.7%2053.2%2026.7%2094.5%200%2051.4%204.4%2084.9%2014.2%20108.7%205.2%2012.6%2011.7%2022.1%2019%2030.1h-270z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-notifications-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-notifications-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-notifications-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M207.8%20400c0%2026%2021.6%2047.9%2048.1%2047.9S304%20426%20304%20400h-96.2zM373.9%20229.2c0-99-49-132.8-94.9-140.5%200-.6.1-1.1.1-1.7%200-12.7-10.3-23-23-23s-23%2010.3-23%2023c0%20.6%200%201.2.1%201.8-45.9%207.8-94.9%2041.9-94.9%20140.7C138.1%20345%20115.6%20352%2080%20384h352c-35.4-32-58.1-39.1-58.1-154.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-notifications($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-notifications-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-nuclear-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20272c0-23.8-13.1-44.7-32.5-55.7l81.2-137.9C335.6%2059.1%20297.1%2048%20256%2048c-41.2%200-79.9%2011.2-113.1%2030.6l79.6%20138.9C204.2%20228.8%20192%20249%20192%20272H32c0%2083.3%2046.9%20153.4%20114.4%20192l78.1-136.3c9.3%205.3%2020.1%208.3%2031.5%208.3%2011.4%200%2022.1-3%2031.3-8.2L365.6%20464C433.1%20425.4%20480%20355.3%20480%20272H320zM165%2084.9C193.2%2071.2%20224.4%2064%20256%2064c31.4%200%2062.4%207.1%2090.4%2020.7l-73.9%20125.5c-5.3-1.4-10.8-2.2-16.5-2.2-6.6%200-13%201-19%202.9l-72-126zm-24.3%20356.8c-25.8-17.3-47.4-39.6-63.2-65.3C61%20349.6%2051.2%20319.3%2048.6%20288H194c3%2011.6%209.2%2021.9%2017.5%2030l-70.8%20123.7zM208%20272c0-17.1%209-32.1%2022.4-40.6.4-.3.8-.5%201.2-.8%207.1-4.2%2015.5-6.6%2024.3-6.6%2026.5%200%2048%2021.5%2048%2048s-21.5%2048-48%2048-47.9-21.5-47.9-48zm163.2%20169.7l-71.1-123.5c8.5-8.1%2014.8-18.5%2017.8-30.2h145.4c-2.5%2031.3-12.4%2061.6-28.9%2088.4-15.7%2025.7-37.4%2048-63.2%2065.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-nuclear-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-nuclear-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-nuclear-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22272%22%20r%3D%2248%22%2F%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22272%22%20r%3D%2248%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20272H320c0%2023.9-13.1%2044.7-32.6%2055.7L365.6%20464C433.1%20425.4%20480%20355.3%20480%20272zM256%20208c11.7%200%2022.7%203.2%2032.1%208.7l80.6-138.3C335.6%2059.1%20297.1%2048%20256%2048c-41.2%200-79.9%2011.2-113.1%2030.6l79.8%20138.8c9.7-6%2021.1-9.4%2033.3-9.4zM192%20272H32c0%2083.3%2046.9%20153.4%20114.4%20192l78.2-136.3c-19.5-11-32.6-31.8-32.6-55.7z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-nuclear($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-nuclear-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-nutrition-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M358%20233.855l.413-.04c-.137-.136-.046-.1-.185-.236L279.798%20155h-.004c-5.833-6-14.193-10.154-23.485-10.154-11.812%200-22.116%206.154-27.636%2016.154h-.007s-7.09%2010.994-18.27%2028.874l32.53%2039.637c2.94%203.77%203.297%207.802%201.412%209.69l-.115.07c-.91.91-2.02%201.33-3.274%201.33-1.907%200-4.14-.99-6.484-2.767l-35.872-29.418-83.45%20133.45%2019.072%2023.338c2.94%203.77%203.296%207.884%201.41%209.772l-.114.114c-.91.912-2.028%201.34-3.287%201.34-1.905%200-4.136-.98-6.472-2.754l-21.067-16.533C84.734%20389.05%2070%20412.463%2068%20414.366v.003c-3%205.06-4.085%2011.13-4.085%2017.663C63.915%20449.688%2078.572%20464%2096.2%20464c7.82%200%2014.57-3.395%2020.8-7.5l114.65-84.11-28.838-35.357c-2.94-3.77-3.268-7.887-1.382-9.775l.128-.114c.912-.912%202.034-1.34%203.294-1.34%201.905%200%204.14.98%206.476%202.754l37.864%2031.59A20509.475%2020509.475%200%200%201%20355.082%20283h.005c7.84-6%2012.473-15.71%2012.473-26.238%200-8.704-3.56-17.14-9.56-22.904v-.003zm-12.47%2035.98a31571.957%2031571.957%200%200%200-95.763%2069.898l-28.272-23.483-.26-.223-.274-.21c-5.244-3.982-10.662-6-16.107-6-5.465%200-10.592%202.098-14.458%205.91l-.064.062-.082.08-.083.084c-7.808%207.82-7.76%2020.823.11%2030.917l.11.144.114.138%2018.222%2022.312-100.656%2073.896c-5.066%203.304-8.427%204.657-11.542%204.657-8.822%200-16-7.17-16-15.983%200-3.086.694-6.045%202.017-8.623%202.392-3.16%206.6-9.875%2018.656-29.35%202.543-4.108%205.252-8.487%208.134-13.13l6.39%205.177.195.156.2.152c5.245%203.98%2010.665%206%2016.11%206%205.518%200%2010.693-2.14%2014.572-6.023l.114-.113c7.807-7.818%207.757-20.82-.117-30.917l-.113-.144-.115-.143-11.814-14.455%2043.694-69.872%2024.06-38.474%2021.854%2017.922.23.19.24.18c5.255%203.99%2010.68%206.01%2016.124%206.01%204.954%200%209.63-1.724%2013.34-4.89l.46-.336.87-.874c7.79-7.803%207.74-20.778-.117-30.854l-.12-.153-.124-.15-25.238-30.538c2.957-4.703%205.457-8.49%207.405-11.488l5.21-8.494c2.776-5.025%207.76-8.157%2013.672-8.157%204.366%200%208.76%202.042%2012.056%205.43l4.7%204.928h.123L342%20240.287v.376l5.186%204.716c2.793%202.69%204.54%206.782%204.54%2011.227%200%205.196-2.26%2010.123-6.195%2013.23zM439.994%20115.175l-4.778%202.763-91.638%2052.992%2063.735-110.572%202.517-4.366L396.01%2048l-2.487%204.313-70.775%20122.785%2016.67%2016.696%20103.962-60.12%204.594-2.656z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-nutrition-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-nutrition-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-nutrition-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M359%20233.62l-.106-.04c-.136-.137-.306-.442-.444-.578L279.55%20154h-.003c-5.848-6-14.23-10.168-23.547-10.168-11.842%200-22.174%206.168-27.708%2016.168h-.007s-7.11%2011.35-18.318%2029.25l32.617%2039.85c2.947%203.77%203.305%207.894%201.414%209.784l-.114.114c-2.296%202.296-5.894%201.535-9.785-1.414l-35.968-29.44-83.67%20133.593%2019.122%2023.362c2.947%203.77%203.305%207.894%201.414%209.784l-.114.114c-2.296%202.296-5.894%201.535-9.785-1.414l-20.22-16.55A584921.58%20584921.58%200%200%201%2069%20414.314v.004c-3%205.066-5%2011.144-5%2017.682%200%2017.674%2014.244%2032%2031.918%2032%207.842%200%2014.383-3.398%2020.628-7.508l114.842-84.195-28.97-35.395c-2.948-3.772-3.306-7.895-1.415-9.785l.114-.114c2.296-2.296%205.894-1.534%209.785%201.415l37.963%2031.215A76574.838%2076574.838%200%200%201%20355.035%20282h.005c7.86-6%2013.024-15.32%2013.024-25.857%200-8.713-3.064-16.75-9.064-22.52v-.003zM448%20138.78l-16.486-27.693-66.23%2038.212%2049.23-85.214L386.897%2048l-70%20121.084%2028.59%2028.588z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-nutrition($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-nutrition-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-open-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20432H80V112h176V96H64v352h352V256h-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%2064v16h100L224%20276.9l11.1%2011.1L432%2092v100h16V64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-open-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-open-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-open-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%2064v16h100L224%20276.9l11.1%2011.1L432%2092v100h16V64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M235.1%20310.8L201.2%20277%20381%2096H64v352h352V131z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-open($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-open-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-options-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20104c8.837%200%2016%207.163%2016%2016s-7.163%2016-16%2016-16-7.163-16-16%207.163-16%2016-16m0-16c-17.645%200-32%2014.355-32%2032s14.355%2032%2032%2032%2032-14.355%2032-32-14.355-32-32-32zM352%20376c8.837%200%2016%207.163%2016%2016s-7.163%2016-16%2016-16-7.163-16-16%207.163-16%2016-16m0-16c-17.645%200-32%2014.355-32%2032s14.355%2032%2032%2032%2032-14.355%2032-32-14.355-32-32-32zM160%20240c8.837%200%2016%207.163%2016%2016s-7.163%2016-16%2016-16-7.163-16-16%207.163-16%2016-16m0-16c-17.645%200-32%2014.355-32%2032s14.355%2032%2032%2032%2032-14.355%2032-32-14.355-32-32-32zM207.32%20248H480v16H207.32c.44-2.604.68-5.273.68-8s-.24-5.396-.68-8zM112%20256c0%202.727.24%205.396.68%208H32v-16h80.68a47.955%2047.955%200%200%200-.68%208zM399.32%20384H480v16h-80.68c.44-2.604.68-5.273.68-8s-.24-5.396-.68-8zM304%20392c0%202.727.24%205.396.68%208H32v-16h272.68a47.955%2047.955%200%200%200-.68%208zM399.32%20112H480v16h-80.68c.44-2.604.68-5.273.68-8s-.24-5.396-.68-8zM304.68%20112c-.44%202.604-.68%205.273-.68%208s.24%205.396.68%208H32v-16h272.68z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-options-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-options-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-options-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20376h283.35c6.186-14.112%2020.28-24%2036.65-24s30.465%209.888%2036.65%2024H480v32h-91.35c-6.186%2014.112-20.28%2024-36.65%2024s-30.465-9.888-36.65-24H32M32%20240h91.35c6.186-14.112%2020.28-24%2036.65-24s30.465%209.888%2036.65%2024H480v32H196.65c-6.186%2014.112-20.28%2024-36.65%2024s-30.465-9.888-36.65-24H32M32%20104h283.35c6.186-14.112%2020.28-24%2036.65-24s30.465%209.888%2036.65%2024H480v32h-91.35c-6.186%2014.112-20.28%2024-36.65%2024s-30.465-9.888-36.65-24H32%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-options($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-options-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-outlet-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M371.4%2064H140.6C75.5%20103%2032%20174.5%2032%20256s43.5%20152%20108.6%20192h230.9c65-40%20108.5-110.5%20108.5-192S436.5%20103%20371.4%2064zm-4.6%20368H145.2c-28.7-19-52.6-43.7-69.5-72.7C57.6%20328%2048%20292%2048%20255.6c0-36.5%209.6-72.3%2027.7-103.7%2017-29.3%2040.9-54.9%2069.4-71.9h221.8c30.8%2020%2052.4%2042.5%2069.3%2071.8%2018.2%2031.5%2027.7%2067.3%2027.7%20103.8%200%2036.4-9.6%2072.4-27.7%20103.7-16.8%2029.1-40.7%2053.7-69.4%2072.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20160h32v96h-32zM160%20144h32v128h-32zM256%20320c-17.6%200-32%2014.4-32%2032v48h64v-48c0-17.6-14.4-32-32-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-outlet-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-outlet-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-outlet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M371.4%2064H140.6C75.5%20103%2032%20174.5%2032%20256s43.5%20152%20108.6%20192h230.9c65-40%20108.5-110.5%20108.5-192S436.5%20103%20371.4%2064zM192%20272h-32V144h32v128zm96%20128h-64v-48c0-17.6%2014.4-32%2032-32s32%2014.4%2032%2032v48zm64-144h-32v-96h32v96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-outlet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-outlet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-paper-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M112%2048v368h16V64h304v369.1c0%208.2-6.7%2014.9-14.9%2014.9H94.9c-8.2%200-14.9-6.7-14.9-14.9V128h16v-16H64v321.1c0%2017%2013.8%2030.9%2030.9%2030.9h322.3c17%200%2030.9-13.8%2030.9-30.9V48H112z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%20112h128v16H160zM160%20192h240v16H160zM160%20272h192v16H160zM160%20352h240v16H160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-paper-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-paper-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-paper-plane-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M48%20270.9l119.9%2051.6L197.7%20460l57.5-80.9L372%20464l92-416L48%20270.9zM414.9%2092.4L171.8%20306.7l-87-37.4L414.9%2092.4zM183.5%20319l-.2-1.1%20168.1-152.2-150.3%20174.8.4.3h-.5l-1.6%2051.6-15.9-73.4zm31.4%2089.2l1.8-56.7%2025.7%2018.2-.1.1-27.4%2038.4zm147.2%2026.6L225%20337.5%20439.9%2083l-77.8%20351.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-paper-plane-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-paper-plane-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-paper-plane-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%2048L48%20270.9l110.5%2047.5L456.1%2056.2%20214.7%20349.5l-1.1%2087.4%2041.6-57.9L372%20464z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M169.6%20330.3L197.7%20460h.4v-.5l2.9-118.7%20150.3-175.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-paper-plane($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-paper-plane-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-paper-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M112%2048v368H96V112H64v321.1c0%2017%2013.8%2030.9%2030.9%2030.9h322.3c17%200%2030.9-13.8%2030.9-30.9V48H112zm48%2064h128v16H160v-16zm0%20160h192v16H160v-16zm240%2096H160v-16h240v16zm0-160H160v-16h240v16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-paper($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-paper-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-partly-sunny-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%2064h16v54h-16zM16%20208h55v16H16zM59.5%20117.4l11-11.1%2031.4%2031.5-11%2011.1zM239.4%20147.9l-11-11.1%2031.3-31.5%2011.1%2011.1zM72.5%20320.7l-11-11.1%2031.4-31.5%2011%2011.1zM153.9%20267.9c-26.3-5.2-46.2-28.4-46.2-56.2%200-31.6%2025.7-57.3%2057.3-57.3%2018.3%200%2034.6%208.6%2045.1%2022%204.7-2.7%209.6-5.1%2014.7-7.1-13.3-18.7-35.1-30.9-59.8-30.9-40.5%200-73.3%2032.8-73.3%2073.3%200%2036.8%2027.1%2067.3%2062.5%2072.5-.3-3.3-.5-6.7-.5-10.1%200-2.1%200-4.1.2-6.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.3%20259.2h-2.4c-3.1%200-6.1%200-9%20.4-11.3-50.3-56.1-88.2-109.7-88.2-14.6%200-28.6%202.8-41.4%207.9-5.1%202-10%204.4-14.7%207.1-32%2018.5-54.1%2052.4-56.2%2091.6-.1%202.1-.2%204.1-.2%206.2%200%203.4.2%206.8.5%2010.1%200%20.4.1.8.1%201.1-37.9%203.4-67.6%2037.1-67.6%2076%200%2041.1%2033.3%2076.7%2074.3%2076.7h226.4c51.2%200%2092.7-43.4%2092.7-94.8-.1-51.4-41.6-94.1-92.8-94.1zm54.1%20149.5c-14.6%2015-33.8%2023.3-54.1%2023.3H176.9c-31.6%200-58.3-27.9-58.3-60.7%200-14.9%205.5-29.4%2015.6-40.7%209.9-11.2%2023.3-18.1%2037.5-19.3l16.1-1.4-1.5-15.1-.1-1c-.3-3.2-.5-6.5-.5-9.7%200-1.8.1-3.6.1-5.3%201.8-33.6%2020.8-62.7%2048.3-78.6%204.6-2.7%209.5-5%2014.5-6.8%2010.4-3.9%2021.7-6%2033.5-6%2022.3%200%2043.2%207.5%2060.6%2021.6%2016.9%2013.8%2028.7%2033%2033.5%2054.1l3.2%2014.2%2014.4-1.8c2.1-.3%204.7-.3%207.1-.3h2.5c20.4%200%2039.6%208.2%2054.2%2022.9%2014.6%2014.8%2022.6%2034.4%2022.6%2055-.2%2020.8-8.2%2040.6-22.8%2055.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-partly-sunny-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-partly-sunny-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-partly-sunny-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%2064h16v54h-16zM16%20208h55v16H16zM59.5%20117.4l11-11.1%2031.4%2031.5-11%2011.1zM239.4%20147.9l-11-11.1%2031.3-31.5%2011.1%2011.1zM72.5%20320.7l-11-11.1%2031.4-31.5%2011%2011.1zM165%20138.3c-40.5%200-73.3%2032.8-73.3%2073.3%200%2036.8%2027.1%2067.3%2062.5%2072.5%200%200-1.2-42.9%2018.9-72.9s51.8-42%2051.8-42c-13.4-18.7-35.2-30.9-59.9-30.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.3%20259.2h-2.4c-3.1%200-6.1%200-9%20.4-11.3-50.3-56.1-88.2-109.7-88.2-14.6%200-28.6%202.8-41.4%207.9-5.1%202-10%204.4-14.7%207.1-32%2018.5-54.1%2052.4-56.2%2091.6-.1%202.1-.2%204.1-.2%206.2%200%203.4.2%206.8.5%2010.1%200%20.4.1.8.1%201.1-37.9%203.4-67.6%2037.1-67.6%2076%200%2041.1%2033.3%2076.7%2074.3%2076.7h226.4c51.2%200%2092.7-43.4%2092.7-94.8-.1-51.4-41.6-94.1-92.8-94.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-partly-sunny($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-partly-sunny-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pause-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M191%20112v288h-47V112h47m16-16h-79v320h79V96zM368%20112v288h-47V112h47m16-16h-79v320h79V96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pause-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pause-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pause-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%2096h79v320h-79zM305%2096h79v320h-79z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pause($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pause-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-paw-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M324.3%2080.3c-1.2-.2-2.4-.3-3.6-.3v.4-.3h-.4c-22%200-42.9%2025.9-47.8%2060.3-5.3%2036.6%209.4%2069%2032.7%2072.4%201.3.2%202.7.3%204%20.3%2022%200%2042.9-25.9%2047.8-60.3%205.3-36.7-9.4-69.1-32.7-72.5zm17%2070.1c-4%2027.9-19.9%2046.6-32.1%2046.6-.6%200-1.2%200-1.7-.1-5.7-.8-11.1-6.1-14.9-14.5-4.9-10.8-6.5-25.2-4.4-39.7%204-27.7%2019.8-46.3%2032-46.6.6%200%201.6.1%202%20.1%205.7.8%2011%206.1%2014.8%2014.5%204.9%2010.7%206.4%2025.2%204.3%2039.7zM320.6%2080zM442.3%20169.4c-3.5-1.4-7.1-2.1-10.9-2.1h-.4c-19.7.3-41.8%2019.2-53.4%2047.8-13.9%2034.2-7.5%2069.2%2014.4%2078.2%203.5%201.4%207.1%202.1%2010.9%202.1%2019.8%200%2042.2-19%2053.9-47.8%2013.8-34.2%207.3-69.2-14.5-78.2zm-.4%2072.1c-4.7%2011.5-11.6%2021.7-19.6%2028.7-6.7%205.8-13.8%209.2-19.5%209.2-1.8%200-3.4-.3-4.9-.9-5.3-2.2-9.3-8.6-11-17.7-2.1-11.6-.2-26.1%205.3-39.6%204.7-11.5%2011.7-21.7%2019.6-28.7%206.6-5.8%2013.5-9.1%2019.2-9.2%201.9%200%203.5.3%205%20.9%205.3%202.2%209.4%208.6%2011.1%2017.7%202.2%2011.7.3%2026.1-5.2%2039.6zM327.6%20295.4c-27.8-43.6-39.8-60-71.6-60s-43.9%2016.5-71.7%2060c-23.8%2037.2-71.9%2040.3-83.9%2071.9-2.4%205.6-3.6%2011.7-3.6%2018.2%200%2025.7%2020.8%2046.5%2046.4%2046.5%2031.8%200%2075.1-24%20112.9-24s80.9%2024%20112.7%2024c25.6%200%2046.3-20.8%2046.3-46.5%200-6.5-1.3-12.6-3.7-18.2-12-31.7-60-34.7-83.8-71.9zM368.8%20416c-12.8%200-29.4-5.1-47-10.5-21.5-6.6-43.7-13.5-65.8-13.5-22.1%200-44.3%206.8-65.8%2013.4-17.6%205.4-34.2%2010.5-47%2010.5-16.8%200-30.5-13.7-30.5-30.5%200-4.3.8-8.3%202.3-11.9l.1-.3.1-.3c4-10.6%2016-17.4%2031.1-26%2017.6-10%2037.5-21.3%2051.4-43%2027.7-43.4%2035.8-52.7%2058.3-52.7%2011.8%200%2019%202.6%2026.6%209.5%209%208.3%2018.8%2023.1%2031.6%2043.2%2013.9%2021.7%2033.7%2033%2051.3%2043%2015.1%208.6%2027%2015.4%2031.1%2026l.1.3.1.3c1.6%203.8%202.4%207.8%202.4%2011.9%200%2016.9-13.6%2030.6-30.4%2030.6zM202.8%20213c1.3%200%202.7-.1%204-.3%2023.4-3.4%2038-35.8%2032.7-72.4-5-34.5-25.9-60.3-47.8-60.3-1.3%200-2.7.1-4%20.3-23.4%203.4-38%2035.8-32.7%2072.4%205%2034.4%2025.9%2060.3%2047.8%2060.3zm-27.7-102.4c3.8-8.4%209.2-13.7%2014.9-14.5.6-.1%201.1-.1%201.7-.1%2012.3%200%2028.1%2018.7%2032.1%2046.6%202.1%2014.5.5%2029-4.4%2039.7-3.8%208.4-9.2%2013.7-14.9%2014.5-.6.1-1.1.1-1.7.1-12.3%200-28.1-18.7-32.1-46.6-2.1-14.4-.5-28.9%204.4-39.7zM120.1%20293.3c21.9-9%2028.3-44%2014.4-78.2-11.7-28.8-34.1-47.8-53.9-47.8-3.8%200-7.4.7-10.9%202.1-21.9%209-28.3%2044-14.4%2078.2%2011.7%2028.8%2034.1%2047.8%2053.9%2047.8%203.8%200%207.4-.7%2010.9-2.1zm-50-51.8c-5.5-13.5-7.4-28-5.3-39.6%201.7-9.1%205.7-15.6%2011-17.7%201.5-.6%203.1-.9%204.9-.9%205.8%200%2012.9%203.3%2019.5%209.2%208%207%2014.9%2017.2%2019.6%2028.7%2011%2027%206.1%2052.5-5.7%2057.3-1.5.6-3.1.9-4.9.9-5.8%200-12.9-3.3-19.5-9.2-8-7-15-17.2-19.6-28.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-paw-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-paw-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-paw-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M324.3%2080.3c-1.2-.2-2.4-.3-3.6-.3v.4-.3h-.4c-22%200-42.9%2025.9-47.8%2060.3-5.3%2036.6%209.4%2069%2032.7%2072.4%201.3.2%202.7.3%204%20.3%2022%200%2042.9-25.9%2047.8-60.3%205.3-36.7-9.4-69.1-32.7-72.5zM320.6%2080zM442.3%20169.4c-3.5-1.4-7.1-2.1-10.9-2.1h-.4c-19.7.3-41.8%2019.2-53.4%2047.8-13.9%2034.2-7.5%2069.2%2014.4%2078.2%203.5%201.4%207.1%202.1%2010.9%202.1%2019.8%200%2042.2-19%2053.9-47.8%2013.8-34.2%207.3-69.2-14.5-78.2zM327.6%20295.4c-27.8-43.6-39.8-60-71.6-60s-43.9%2016.5-71.7%2060c-23.8%2037.2-71.9%2040.3-83.9%2071.9-2.4%205.6-3.6%2011.7-3.6%2018.2%200%2025.7%2020.8%2046.5%2046.4%2046.5%2031.8%200%2075.1-24%20112.9-24s80.9%2024%20112.7%2024c25.6%200%2046.3-20.8%2046.3-46.5%200-6.5-1.3-12.6-3.7-18.2-12-31.7-60-34.7-83.8-71.9zM202.8%20213c1.3%200%202.7-.1%204-.3%2023.4-3.4%2038-35.8%2032.7-72.4-5-34.5-25.9-60.3-47.8-60.3-1.3%200-2.7.1-4%20.3-23.4%203.4-38%2035.8-32.7%2072.4%205%2034.4%2025.9%2060.3%2047.8%2060.3zM120.1%20293.3c21.9-9%2028.3-44%2014.4-78.2-11.7-28.8-34.1-47.8-53.9-47.8-3.8%200-7.4.7-10.9%202.1-21.9%209-28.3%2044-14.4%2078.2%2011.7%2028.8%2034.1%2047.8%2053.9%2047.8%203.8%200%207.4-.7%2010.9-2.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-paw($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-paw-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-people-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20112zM349.2%20334.8c-13.5-4.7-28.1-5-41.6-9.7-4.1-1.4-12.2-3.1-13.9-7.8-1.6-4.6-1.6-10-1.9-14.8-.2-3.8-.3-7.6-.3-11.4%200-2.5%206.4-7.8%207.8-10.1%205.4-9%205.9-21.1%206.9-31.3%208.7%202.4%209.8-13.7%2011.3-18.6%201.1-3.4%207.8-26.8-2.6-23.6%202.5-4.4%203.5-9.8%204.2-14.7%202-12.8%202.8-26.8-1.1-39.3-8.1-26-33-40.6-59.3-41.4-26.7-.9-53.5%2011.9-63.5%2037.8-4.8%2012.6-4.4%2026.3-2.8%2039.5.7%206%201.7%2012.7%204.7%2018.1-9.7-2.9-4.5%2017.7-3.4%2021.3%201.6%205.1%203%2023.4%2012.1%2020.9.8%208.1%201.7%2016.4%203.9%2024.3%201.5%205.3%204.6%209.8%208.2%2013.9%201.8%202%202.7%202.2%202.6%204.8-.1%207.8.1%2016.2-1.9%2023.8-2%207.6-18.7%2010.8-25.4%2012.2-18%203.7-34.6%205.4-49.6%2016.6-17.5%2012.9-26.6%2033-26.6%2054.7h278c0-29.5-17.8-55.5-45.8-65.2-11.2-3.9%2011.3%203.9%200%200zm-202.1%2028.8c5.6-5.9%2012.7-11.1%2020.4-14%2010.5-4%2022.4-3.8%2033.3-6.6%209-2.3%2020.2-5.9%2027.2-12.4%206.4-6%207.1-15.2%207.7-23.5.5-7%20.4-13.9.4-20.9%200-4.9-5.7-7.7-8.5-11.6-4.5-6.1-4.7-15.2-5.6-22.5-.4-3.2-.5-7.3-3.2-9.5-3-2.4-5.2-3.7-6.7-7.5-2-5.2-2.7-10.8-4.3-16.2-1-3.5%202.5-6.8%203.9-9.7%202.6-5.3-1.9-13.5-2.8-19-2.8-16.4-2.7-34.3%209.1-47.3%2023.7-26.2%2078-17.9%2085.8%2018.9%202.4%2011.5.9%2024.9-2.3%2036.1-1.4%204.8-3%208.3-.2%2013%204.2%206.8%202.4%2011.2.4%2018.8-1.6%206.3-3.6%209.1-8.4%2013-4%203.2-3.4%2011.2-4.1%2015.8-.8%205.6-1.3%2011.5-4.7%2016.2-1.3%201.8-8.4%207.4-8.4%209.3%200%2011-.5%2022.2%201.4%2033.1%202.6%2015.5%2015.6%2019.2%2028.6%2024.5%2013.2%205.1%2028.5%203.2%2041.3%209.5%2013.2%206.5%2025.9%2018.4%2029.7%2033.1H135c1.9-8.3%206.5-14.6%2012.1-20.6%209.2-9.7-5.9%206.3%200%200z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144.1%20322c7-3.5%2014.6-4.3%2022.3-5.1%202.8-.3%204.1-2.2%202-4.9-4-5.1-17.8-6.1-23.6-8.4-3.6-1.4-4.6-2.7-4.9-6.7-.1-1.8-1.1-9.8.3-11.1%201-1%207.3-.6%208.7-.8%205.7-.7%2011.5-1.9%2016.9-4%202.3-.9%204.5-2%206.5-3.4%202.4-1.8-1.8-6.2-2.9-8.6-3.4-7.5-4.9-15.7-5.4-23.9-1-16.1%201.5-32.3-1.5-48.3C158%20172.3%20139.1%20160%20115%20160c-14.9%200-29.6%205.1-37.9%2018.1-9.2%2014.3-8.7%2032.1-8.2%2048.4.3%209.3.7%2018.7-.6%2028-.6%204-1.5%207.9-2.9%2011.7-1.1%202.9-6.7%2010.1-4.5%2011.6%208.3%205.9%2022.3%207.9%2032.3%207.1.3%204.9%201.2%2011.2-.6%2015.8-2.8%207.2-23.7%209.1-30%2011.2C45%20317.8%2032%20332.5%2032%20352h79.5c1.3%200%206.3-9.3%207.7-10.8%207-7.8%2015.6-14.5%2024.9-19.2%209-4.5-14.6%207.4%200%200zm-41.3%2014H53.9c7.1-11.8%2024.9-11%2036.6-15.2%2010.8-3.9%2017.7-10.5%2018.8-22%20.1-1.3.2-29.2-.9-29.2-8.7-.3-17.8-.1-26.5-1.4%206.9-22.3.3-45.3%204-67.8%202.7-16.3%2013.1-25.3%2029.7-25.3%2015.9%200%2027.7%207.4%2031.1%2023.4%204.8%2023.2-2%2046.9%205.4%2069.9-5.5%201.4-11.3%201.6-17%201.8-2.8.1-5.7.2-8.5.3-1.8.1-1.2%203.2-1.3%204.7-1%2010.9-5%2028.1%203.7%2036.9-9.6%206-20%2014.3-26.2%2023.9zM399.8%20352H480c0-19.5-13.1-34.3-30.7-40.1-8.1-2.6-23.7-3.4-29.5-10.4-2.9-3.5-1.3-12.4-1-16.6%204.4.4%209.2-.3%2013.7-.9%204.1-.6%208.1-1.4%2012-2.8%201.8-.7%203.6-1.4%205.3-2.4%203.9-2.3%202.1-2.7.1-6.1-10.9-18.3-6-41.5-6.5-61.6-.4-16.7-4.8-35-20-44.4-13.7-8.5-34-8.8-48.7-2.8-42.4%2017-17.4%2073.2-31.9%20105.4-2.5%205.4-6.1%207.3.2%2010.5%203.5%201.8%207.3%203%2011.1%203.9%205.8%201.4%2011.8%202.2%2017.8%202.4%201%200%20.3%2012.6%200%2013.9-1.1%204.9-11.8%206.3-15.8%207.4-4.1%201.1-10.9%201.4-12.9%205.7-3%206.4%209.9%204.8%2013.1%205.4%2010.3%201.9%2019.4%207.6%2027.4%2014.1%205.9%204.8%2013.9%2011.6%2016.1%2019.4zm-.4-27.1c-5.1-4.7-10.4-9.3-16.3-13%208.8-8.8%204.7-25.9%203.7-36.9-.6-6.3-2-4.7-8.3-4.9-6-.2-12.8.1-18.5-1.8%207.2-22.3%201.3-45.2%205-67.9%202.8-17.1%2014.5-25.5%2031.5-25.5%2015.4%200%2026%207.7%2029.2%2023%204.9%2023.1-2.6%2047%204.5%2070-8.5%201.3-17.3%201-25.9%201.3-2.1.1-1.9%2025.1-1.7%2027.3.7%2011.7%206.1%2018.8%2017.2%2023.3%2012.1%204.9%2031%203.6%2038.4%2015.9h-44.7c-7.1.1-8.9-6.1-14.1-10.8-5-4.6%204%203.6%200%200z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-people-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-people-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-people-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M349.2%20334.8c11.3%203.9-11.2-3.9%200%200z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M349.2%20334.8c-13.5-4.7-28.1-5-41.6-9.7-4.1-1.4-12.2-3.1-13.9-7.8-1.6-4.6-1.6-10-1.9-14.8-.2-3.8-.3-7.6-.3-11.4%200-2.5%206.4-7.8%207.8-10.1%205.4-9%205.9-21.1%206.9-31.3%208.7%202.4%209.8-13.7%2011.3-18.6%201.1-3.4%207.8-26.8-2.6-23.6%202.5-4.4%203.5-9.8%204.2-14.7%202-12.8%202.8-26.8-1.1-39.3-8.1-26-33-40.6-59.3-41.4-26.7-.9-53.5%2011.9-63.5%2037.8-4.8%2012.6-4.4%2026.3-2.8%2039.5.7%206%201.7%2012.7%204.7%2018.1-9.7-2.9-4.5%2017.7-3.4%2021.3%201.6%205.1%203%2023.4%2012.1%2020.9.8%208.1%201.7%2016.4%203.9%2024.3%201.5%205.3%204.6%209.8%208.2%2013.9%201.8%202%202.7%202.2%202.6%204.8-.1%207.8.1%2016.2-1.9%2023.8-2%207.6-18.7%2010.8-25.4%2012.2-18%203.7-34.6%205.4-49.6%2016.6-17.5%2012.9-26.6%2033-26.6%2054.7h278c0-29.5-17.8-55.5-45.8-65.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M143.3%20322.5l1.6-.8c-.3.1-.6.3-.8.4-.3.1-.5.2-.8.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M143.3%20322.5c-3.4%201.7-7.5%203.8.8-.4l.8-.4c6.8-3.2%2014.1-4%2021.4-4.7%202.8-.3%204.1-2.2%202-4.9-4-5.1-17.8-6.1-23.6-8.4-3.6-1.4-4.6-2.7-4.9-6.7-.1-1.8-1.1-9.8.3-11.1%201-1%207.3-.6%208.7-.8%205.7-.7%2011.5-1.9%2016.9-4%202.3-.9%204.5-2%206.5-3.4%202.4-1.8-1.8-6.2-2.9-8.6-3.4-7.5-4.9-15.7-5.4-23.9-1-16.1%201.5-32.3-1.5-48.3-4.5-24.5-23.4-36.8-47.5-36.8-14.9%200-29.6%205.1-37.9%2018.1-9.2%2014.3-8.7%2032.1-8.2%2048.4.3%209.3.7%2018.7-.6%2028-.6%204-1.5%207.9-2.9%2011.7-1.1%202.9-6.7%2010.1-4.5%2011.6%208.3%205.9%2022.3%207.9%2032.3%207.1.3%204.9%201.2%2011.2-.6%2015.8-2.8%207.2-23.7%209.1-30%2011.2C45%20317.8%2032%20332%2032%20352h79.5c1.3%200%206.3-9.3%207.7-10.8%206.8-7.5%2015.1-14%2024.1-18.7zM449.3%20311.9c-8.1-2.6-23.7-3.4-29.5-10.4-2.9-3.5-1.3-12.4-1-16.6%204.4.4%209.2-.3%2013.7-.9%204.1-.6%208.1-1.4%2012-2.8%201.8-.7%203.6-1.4%205.3-2.4%203.9-2.3%202.1-2.7.1-6.1-10.9-18.3-6-41.5-6.5-61.6-.4-16.7-4.8-35-20-44.4-13.7-8.5-34-8.8-48.7-2.8-42.4%2017-17.4%2073.2-31.9%20105.4-2.5%205.4-6.1%207.3.2%2010.5%203.5%201.8%207.3%203%2011.1%203.9%205.8%201.4%2011.8%202.2%2017.8%202.4%201%200%20.3%2012.6%200%2013.9-1.1%204.9-11.8%206.3-15.8%207.4-4.1%201.1-10.9%201.4-12.9%205.7-3%206.4%209.9%204.8%2013.1%205.4%2010.3%201.9%2019.4%207.6%2027.4%2014.1%206%204.9%2014.1%2011.5%2016.3%2019.5h80.2c-.2-20.1-13.3-34.4-30.9-40.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-people($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-people-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-person-add-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20153h-25v-25h-14v25h-25v14h25v25h14v-25h25zM202.4%20201.7zM363.3%20363.9c-12.9-4.6-31.4-6.2-43.2-8.8-6.8-1.5-16.7-5.3-20-9.2-3.3-4-1.3-40.9-1.3-40.9s6.1-9.6%209.4-18c3.3-8.4%206.9-31.4%206.9-31.4s6.8%200%209.2-11.9c2.6-13%206.6-18.4%206.1-28.1-.5-9-5.2-9.5-5.7-9.5s4.9-13.6%205.6-42.4C331.1%20129.6%20305%2096%20256%2096s-75%2033.5-74.3%2067.6c.6%2028.7%205.6%2042.4%205.6%2042.4-.5%200-5.2.5-5.7%209.5-.5%209.7%203.6%2014.9%206.1%2027.9%202.4%2011.9%209.2%2012%209.2%2012s3.6%2023.1%206.9%2031.5c3.3%208.5%209.4%2018%209.4%2018s2%2036.9-1.3%2040.9-13.2%207.7-20%209.2c-11.9%202.6-30.3%204.3-43.2%208.9C135.8%20368.5%2096%20384%2096%20416h320c0-32-39.8-47.5-52.7-52.1zM256%20400H118.7c2-3%204.7-5.1%208.2-7.6%207-5.1%2016.1-9.8%2027.1-13.6%206.8-2.4%2016.7-4%2025.4-5.3%205.7-.9%2011.1-1.7%2015.9-2.8%203.4-.8%2020.8-5%2028.8-14.6%204.5-5.4%205.8-12.7%205.6-32.3-.1-10-.6-19.3-.6-19.7l-.2-4.2-2.3-3.5c-1.5-2.3-5.8-9.5-8-15.3-1.8-4.7-4.6-19.2-6-28.1%200%200%20.4%201-.5-3.7s-8.4-4.3-9.4-8c-.9-3.6-1.8-6.9-4.3-18.2-2.5-11.3%202.8-11.2%203.9-16.2.6-3.1%200-5.7%200-5.8-.3-1-4.1-13.4-4.7-37.7-.3-13.2%204.6-25.6%2013.8-34.9%2010.6-10.8%2026-16.5%2044.5-16.5%2019%200%2034%205.7%2044.6%2016.5%209.2%209.3%2014.1%2021.7%2013.8%2034.9-.5%2024.2-4.3%2036.6-4.7%2037.7%200%20.1-.6%201.7-.4%205.2.2%205.4%206.8%205.5%204.3%2016.8s-3.4%2014.6-4.3%2018.2c-.9%203.6-8.5%203.3-9.4%208s-.5%203.7-.5%203.7c-1.4%208.9-4.2%2023.4-6%2028.1-2.3%205.8-6.6%2013-8%2015.3l-2.3%203.5-.2%204.2c0%20.4-.5%209.7-.6%2019.7-.2%2019.6%201.1%2026.9%205.6%2032.3%208%209.5%2025.4%2013.8%2028.8%2014.6%204.8%201.1%2010.2%201.9%2015.9%202.8%208.7%201.3%2018.6%202.9%2025.4%205.3%2011%203.9%2020.2%208.6%2027.1%2013.7%203.5%202.5%206.2%204.6%208.2%207.6H256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-person-add-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-person-add-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-person-add-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20153h-25v-25h-14v25h-25v14h25v25h14v-25h25zM363.3%20363.9c-12.9-4.6-31.4-6.2-43.2-8.8-6.8-1.5-16.7-5.3-20-9.2-3.3-4-1.3-40.9-1.3-40.9s6.1-9.6%209.4-18c3.3-8.4%206.9-31.4%206.9-31.4s6.8%200%209.2-11.9c2.6-13%206.6-18.4%206.1-28.1-.5-9-5.2-9.5-5.7-9.5s4.9-13.6%205.6-42.4C331.1%20129.6%20305%2096%20256%2096s-75%2033.5-74.3%2067.6c.6%2028.7%205.6%2042.4%205.6%2042.4-.5%200-5.2.5-5.7%209.5-.5%209.7%203.6%2014.9%206.1%2027.9%202.4%2011.9%209.2%2012%209.2%2012s3.6%2023.1%206.9%2031.5c3.3%208.5%209.4%2018%209.4%2018s2%2036.9-1.3%2040.9-13.2%207.7-20%209.2c-11.9%202.6-30.3%204.3-43.2%208.9C135.8%20368.5%2096%20384%2096%20416h320c0-32-39.8-47.5-52.7-52.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-person-add($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-person-add-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-person-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M202.4%20201.7zM363.3%20363.9c-12.9-4.6-31.4-6.2-43.2-8.8-6.8-1.5-16.7-5.3-20-9.2-3.3-4-1.3-40.9-1.3-40.9s6.1-9.6%209.4-18%206.9-31.4%206.9-31.4%206.8%200%209.2-11.9c2.6-13%206.6-18.4%206.1-28.1-.5-9-5.2-9.5-5.7-9.5%200%200%204.9-13.6%205.6-42.4C331.1%20129.6%20305%2096%20256%2096s-75%2033.5-74.3%2067.6c.6%2028.7%205.6%2042.4%205.6%2042.4-.5%200-5.2.5-5.7%209.5-.5%209.7%203.6%2014.9%206.1%2027.9%202.4%2011.9%209.2%2012%209.2%2012s3.6%2023.1%206.9%2031.5c3.3%208.5%209.4%2018%209.4%2018s2%2036.9-1.3%2040.9-13.2%207.7-20%209.2c-11.9%202.6-30.3%204.3-43.2%208.9C135.8%20368.5%2096%20384%2096%20416h320c0-32-39.8-47.5-52.7-52.1zM256%20400H118.7c2-3%204.7-5.1%208.2-7.6%207-5.1%2016.1-9.8%2027.1-13.6%206.8-2.4%2016.7-4%2025.4-5.3%205.7-.9%2011.1-1.7%2015.9-2.8%203.4-.8%2020.8-5%2028.8-14.6%204.5-5.4%205.8-12.7%205.6-32.3-.1-10-.6-19.3-.6-19.7l-.2-4.2-2.3-3.5c-1.5-2.3-5.8-9.5-8-15.3-1.8-4.7-4.6-19.2-6-28.1%200%200%20.4%201-.5-3.7s-8.4-4.3-9.4-8c-.9-3.6-1.8-6.9-4.3-18.2-2.5-11.3%202.8-11.2%203.9-16.2.6-3.1%200-5.7%200-5.8-.3-1-4.1-13.4-4.7-37.7-.3-13.2%204.6-25.6%2013.8-34.9%2010.6-10.8%2026-16.5%2044.5-16.5%2019%200%2034%205.7%2044.6%2016.5%209.2%209.3%2014.1%2021.7%2013.8%2034.9-.5%2024.2-4.3%2036.6-4.7%2037.7%200%20.1-.6%201.7-.4%205.2.2%205.4%206.8%205.5%204.3%2016.8s-3.4%2014.6-4.3%2018.2c-.9%203.6-8.5%203.3-9.4%208-.9%204.7-.5%203.7-.5%203.7-1.4%208.9-4.2%2023.4-6%2028.1-2.3%205.8-6.6%2013-8%2015.3l-2.3%203.5-.2%204.2c0%20.4-.5%209.7-.6%2019.7-.2%2019.6%201.1%2026.9%205.6%2032.3%208%209.5%2025.4%2013.8%2028.8%2014.6%204.8%201.1%2010.2%201.9%2015.9%202.8%208.7%201.3%2018.6%202.9%2025.4%205.3%2011%203.9%2020.2%208.6%2027.1%2013.7%203.5%202.5%206.2%204.6%208.2%207.6L256%20400z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-person-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-person-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-person-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M363.3%20363.9c-12.9-4.6-31.4-6.2-43.2-8.8-6.8-1.5-16.7-5.3-20-9.2-3.3-4-1.3-40.9-1.3-40.9s6.1-9.6%209.4-18%206.9-31.4%206.9-31.4%206.8%200%209.2-11.9c2.6-13%206.6-18.4%206.1-28.1-.5-9-5.2-9.5-5.7-9.5%200%200%204.9-13.6%205.6-42.4C331.1%20129.6%20305%2096%20256%2096s-75%2033.5-74.3%2067.6c.6%2028.7%205.6%2042.4%205.6%2042.4-.5%200-5.2.5-5.7%209.5-.5%209.7%203.6%2014.9%206.1%2027.9%202.4%2011.9%209.2%2012%209.2%2012s3.6%2023.1%206.9%2031.5c3.3%208.5%209.4%2018%209.4%2018s2%2036.9-1.3%2040.9-13.2%207.7-20%209.2c-11.9%202.6-30.3%204.3-43.2%208.9C135.8%20368.5%2096%20384%2096%20416h320c0-32-39.8-47.5-52.7-52.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-person($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-person-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-phone-landscape-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20176.3v158.5c0%2018.3%2014.6%2033.1%2032.9%2033.1h381c18.4%200%2034.1-14.8%2034.1-33.1V176.3c0-18.3-15.7-32.3-34.1-32.3h-381C46.6%20144%2032%20158%2032%20176.3zM55%20271v-30c0-2.2%201.8-4%204-4s4%201.8%204%204v30c0%202.2-1.8%204-4%204s-4-1.8-4-4zm414-15.5c0%209.6-7.8%2017.4-17.4%2017.4-9.6%200-17.4-7.8-17.4-17.4%200-9.6%207.8-17.4%2017.4-17.4%209.6%200%2017.4%207.8%2017.4%2017.4zM424%20160v192H83V160h341z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M441.6%20255.5c0%205.5%204.5%2010%209.9%2010%205.5%200%2010-4.5%2010-10s-4.5-10-10-10c-5.4.1-9.9%204.5-9.9%2010z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-phone-landscape($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-phone-landscape-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-phone-portrait-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M335.7%2032H177.1C158.8%2032%20144%2046.6%20144%2064.9v381c0%2018.4%2014.8%2034.1%2033.1%2034.1h158.5c18.3%200%2032.3-15.7%2032.3-34.1v-381C368%2046.6%20354%2032%20335.7%2032zM241%2055h30c2.2%200%204%201.8%204%204s-1.8%204-4%204h-30c-2.2%200-4-1.8-4-4s1.8-4%204-4zm15.5%20414c-9.6%200-17.4-7.8-17.4-17.4%200-9.6%207.8-17.4%2017.4-17.4%209.6%200%2017.4%207.8%2017.4%2017.4%200%209.6-7.8%2017.4-17.4%2017.4zm95.5-45H160V83h192v341z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.5%20441.6c-5.5%200-10%204.5-10%209.9%200%205.5%204.5%2010%2010%2010s10-4.5%2010-10c-.1-5.4-4.5-9.9-10-9.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-phone-portrait($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-phone-portrait-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-photos-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20128v320h384V128H96zm368%20304H112V144h352v288z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2064v320h48v-16H48V80h352v32h16V64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-photos-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-photos-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-photos-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20128v320h384V128H96z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%2064H32v320h48V112h336z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-photos($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-photos-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pie-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%2080.826c45.293%203.705%2087.354%2023.024%20119.81%2055.494C444.043%20172.57%20464%20220.744%20464%20272.043c0%2025.924-5.08%2051.042-15.1%2074.703-9.68%2022.86-23.54%2043.384-41.193%2061.024-17.654%2017.64-38.204%2031.48-61.08%2041.15-23.673%2010.01-48.823%2015.082-74.752%2015.082-41.193%200-80.47-12.847-113.584-37.146a193.027%20193.027%200%200%201-41.632-41.692%20191.38%20191.38%200%200%201-21.04-36.634l180.258-45.008L288%20300.496V81m-16-17v224L74.245%20337.376C101.653%20420.22%20179.84%20480%20271.875%20480%20386.75%20480%20480%20386.875%20480%20272S387%2064%20272%2064z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M240%2048.18v214.944l-180.342%2045.73C50.54%20285.286%2048.46%20251.88%2048.5%20239.358V239.287c0-47.31%2016.465-93.746%2045.173-127.398%2016.735-19.62%2037.502-34.982%2061.72-45.664C180.1%2055.33%20208.52%2049.274%20240%2048.18M256%2032h-5.5C90.5%2032%2032%20148.25%2032%20239.287c0%200%20.25%2056.666%2018.91%2088.29L256%20275.574V32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pie-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pie-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pie-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272%2064v224L74.245%20337.376C101.653%20420.22%20179.84%20480%20271.875%20480%20386.75%20480%20480%20386.875%20480%20272S387%2064%20272%2064z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032h-5.5C90.5%2032%2032%20148.25%2032%20239.287c0%200%20.25%2056.666%2018.91%2088.29L256%20275.574V32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pie($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pie-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pin-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064c70.6%200%20128%2052.8%20128%20117.7%200%2039.5-24%2098.7-69.4%20171.4-22.4%2035.9-45.1%2067-58.6%2084.8-13.5-17.8-36-48.7-58.4-84.5-45.5-72.8-69.6-132.2-69.6-171.7C128%20116.8%20185.4%2064%20256%2064m0-16c-79.5%200-144%2059.9-144%20133.7%200%20104%20144%20282.3%20144%20282.3s144-178.3%20144-282.3C400%20107.9%20335.5%2048%20256%2048z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20128c-35.3%200-64%2028.7-64%2064s28.7%2064%2064%2064%2064-28.7%2064-64-28.7-64-64-64zm0%20110.9c-25.9%200-46.9-21-46.9-46.9s21-46.9%2046.9-46.9%2046.9%2021%2046.9%2046.9-21%2046.9-46.9%2046.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pin-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pin-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pin-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c-79.5%200-144%2059.9-144%20133.7%200%20104%20144%20282.3%20144%20282.3s144-178.3%20144-282.3C400%20107.9%20335.5%2048%20256%2048zm0%20190.9c-25.9%200-46.9-21-46.9-46.9s21-46.9%2046.9-46.9%2046.9%2021%2046.9%2046.9-21%2046.9-46.9%2046.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pin($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pin-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pint-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20175.2c0-19.5-1-81.7-19.3-115.6C344.2%2051.4%20336.2%2048%20317%2048H195c-19.3%200-27.2%203.4-31.7%2011.6-18.3%2033.9-19.3%2096.5-19.3%20116%200%2091%2032%2093.1%2032%20167.8%200%2036.7-16%2066.7-16%2092.7%200%2025.1%209%2027.8%2032%2027.8h128c23%200%2032-2.9%2032-27.9%200-26-16-55.7-16-92.4%200-74.7%2032-77.4%2032-168.4zM177.4%2067c.5-.9.7-1%202-1.5%202-.8%206.4-1.5%2015.6-1.5h122c9.1%200%2013.5.7%2015.6%201.5%201.4.5%201.6.7%202.1%201.6%207.1%2013.1%2012.2%2033.8%2015%2059.9H162.4c2.8-26.1%207.9-47%2015-60zm157.4%20379.6c-1.4.6-5.2%201.4-14.8%201.4H192c-9.6%200-13.4-.8-14.9-1.4-.4-.9-1.1-3.8-1.1-10.5%200-9.8%203-21.2%206.4-34.3%204.5-17%209.6-36.3%209.6-58.3%200-38.5-8.1-59.8-15.9-80.4-8.3-21.9-16.1-42.7-16.1-87.5%200-11.4.4-22.3%201-32.5h190c.7%2010.2%201%2021%201%2032.2%200%2044.8-7.8%2065.7-16.2%2087.8-7.8%2020.7-15.8%2042.1-15.8%2080.6%200%2022%205.1%2041.2%209.6%2058.1%203.5%2013.1%206.4%2024.5%206.4%2034.3%200%206.7-.8%209.6-1.2%2010.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pint-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pint-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pint-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%20175.2c0-19.5-1-81.7-19.3-115.6C344.2%2051.4%20336.2%2048%20317%2048H195c-19.3%200-27.2%203.4-31.7%2011.6-18.3%2033.9-19.3%2096.5-19.3%20116%200%2091%2032%2093.1%2032%20167.8%200%2036.7-16%2066.7-16%2092.7%200%2025.1%209%2027.8%2032%2027.8h128c23%200%2032-2.9%2032-27.9%200-26-16-55.7-16-92.4%200-74.7%2032-77.4%2032-168.4zM177.4%2067c.5-.9.7-1%202-1.5%202-.8%206.4-1.5%2015.6-1.5h122c9.1%200%2013.5.7%2015.6%201.5%201.4.5%201.6.7%202.1%201.6%207.1%2013.1%2012.2%2033.8%2015%2059.9H162.4c2.8-26.1%207.9-47%2015-60z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pint($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pint-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pizza-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M418.3%2091.5C388.2%2078%20342.3%2064%20256.7%2064c-85.4%200-130%2012.3-161.5%2027.4-27.5%2013.1-19.1%2024-13.1%2036.6%204%208.6%208.2%2011.8%2014.5%2011.8.5%200%201%200%201.4-.1L256.7%20448%20415%20140.5h.9c6.5%200%2011-3.4%2015.5-12.6%206.1-12.4%209.8-26.2-13.1-36.4zm-285%2082.4c9-3.9%2019-4.4%2028.4-1.2%2010%203.4%2018.2%2010.6%2022.9%2020.1%204.7%209.6%205.4%2020.4%202.1%2030.5-3%209-8.9%2016.5-16.9%2021.3-13.4-25.8-26.1-50.5-36.5-70.7zm163.5%20156.5c-21.9%200-39.7-17.9-39.7-40s17.8-40%2039.7-40c14%200%2026.7%207.3%2033.9%2019.2l-31.2%2060.7c-.9.1-1.8.1-2.7.1zm42-76.6c-10.4-12.2-25.6-19.3-42-19.3-30.6%200-55.6%2025.1-55.6%2056%200%2029%2022%2052.9%2050.1%2055.7l-34.6%2067.4c-14.3-27.7-47.9-93-79.6-154.5%2011.6-6.8%2020.3-17.5%2024.6-30.5%204.7-14.2%203.7-29.4-2.9-42.8-13.3-27.1-45.7-38.5-72.8-26.1-5-9.7-9.2-17.9-12.3-23.9%2022.9-7.7%2063.3-23.8%20142.9-23.8h1.4c-.7%2027.3%2019%2051.6%2046.5%2055.7%202.7.4%205.4.6%208.1.6%2011.6%200%2022.9-3.7%2032.4-10.8%2010.6-7.9%2017.8-19.1%2020.6-31.9%2014.3%204%2025.1%208.2%2033.5%2011.1l-60.3%20117.1zM274%20112.3c31.9%201%2056.8%204.8%2076.3%209.3-2%209.2-7.1%2017.3-14.7%2023-8.3%206.2-18.4%208.8-28.6%207.3-10.2-1.5-19.2-6.9-25.3-15.3-5.4-7.1-8-15.6-7.7-24.3zm143.1%208.6c-.9%201.9-1.6%203-2.1%203.6-3.3-.4-9.8-2.7-16.7-5.1-24.6-8.8-65.7-23.4-141.6-23.4-76.3%200-117.8%2014.3-142.6%2022.8-6.6%202.3-12.9%204.4-16.3%204.9-.3-.6-.8-1.4-1.4-2.6-.6-1.2-1.1-2.4-1.7-3.5-.9-1.8-2.1-4.2-2.6-5.8%201.1-1%203.7-3.2%209.8-6.1%2025.2-12%2065.6-25.8%20154.7-25.8%2086.7%200%20130.1%2014.9%20155.2%2026.1%207.2%203.2%208.2%205.6%208.2%205.6.1.3.6%202.1-2.9%209.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pizza-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pizza-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pizza-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M418.3%2091.5C388.2%2078%20342.3%2064%20256.7%2064c-85.4%200-130%2012.3-161.5%2027.4-27.5%2013.1-19.1%2024-13.1%2036.6%204%208.6%208.2%2011.8%2014.5%2011.8.5%200%201%200%201.4-.1L256.7%20448%20415%20140.5h.9c6.5%200%2011-3.4%2015.5-12.6%206.1-12.4%209.8-26.2-13.1-36.4zm-285%2082.4c9-3.9%2019-4.4%2028.4-1.2%2010%203.4%2018.2%2010.6%2022.9%2020.1%204.7%209.6%205.4%2020.4%202.1%2030.5-3%209-8.9%2016.5-16.9%2021.3-13.4-25.8-26.1-50.5-36.5-70.7zm163.5%20156.5c-21.9%200-39.7-17.9-39.7-40s17.8-40%2039.7-40c14%200%2026.7%207.3%2033.9%2019.2l-31.2%2060.7c-.9.1-1.8.1-2.7.1zM274%20112.3c31.9%201%2056.8%204.8%2076.3%209.3-2%209.2-7.1%2017.3-14.7%2023-8.3%206.2-18.4%208.8-28.6%207.3-10.2-1.5-19.2-6.9-25.3-15.3-5.4-7.1-8-15.6-7.7-24.3zm143.1%208.6c-.9%201.9-1.6%203-2.1%203.6-3.3-.4-9.8-2.7-16.7-5.1-24.6-8.8-65.7-23.4-141.6-23.4-76.3%200-117.8%2014.3-142.6%2022.8-6.6%202.3-12.9%204.4-16.3%204.9-.3-.6-.8-1.4-1.4-2.6-.6-1.2-1.1-2.4-1.7-3.5-.9-1.8-2.1-4.2-2.6-5.8%201.1-1%203.7-3.2%209.8-6.1%2025.2-12%2065.6-25.8%20154.7-25.8%2086.7%200%20130.1%2014.9%20155.2%2026.1%207.2%203.2%208.2%205.6%208.2%205.6.1.3.6%202.1-2.9%209.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pizza($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pizza-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-plane-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M215.2%2088l93.5%20146.1%204.9%207.5%209.1-.3%2067.8-2h.4c3.2-.2%206.2-.2%209.2-.2%2017.2%200%2033.7%202.4%2046.5%206.7%2010.6%203.6%2015.4%207.4%2017.1%209.3-1.6%201.9-6.5%205.7-17.1%209.3-12.8%204.3-29.3%206.7-46.5%206.7-2.8%200-6.1%200-9.2-.2h-.4l-67.8-1.6-9-.2-4.9%207.9-93.6%20147h-16.1L250%20289l7.8-20.9-22.2-1-126.1-5.1-8.2-.3-5.1%206.7-40%2051.6h-.6l23.2-58.3%202.4-6.1-2.4-5.8L55.6%20192h.6l39.4%2049.8%205%206.2%208.1-.3%20126.8-4.2%2022.4-.7-7.9-20.7L199.2%2088H215m9-16h-48l59%20155.7-126.8%204.3L64%20176H32l32%2080-32%2080h32l44.9-57.7%20126.1%205.2L176%20440h48l98.2-154.5L390%20287c3.3.2%206.6.1%2010%20.1%2044.2%200%2080-14.4%2080-32.1s-35.8-32-80-32c-3.4%200-6.7.1-10%20.2l-67.8%202.2L224%2072z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-plane-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-plane-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-plane-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M224%2072h-48l59%20155.7-126.8%204.3L64%20176H32l32%2080-32%2080h32l44.9-57.7%20126.1%205.2L176%20440h48l98.2-154.5L390%20287c3.3.2%206.6.1%2010%20.1%2044.2%200%2080-14.4%2080-32.1s-35.8-32-80-32c-3.4%200-6.7.1-10%20.2l-67.8%202.2L224%2072z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-plane($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-plane-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-planet-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M396.2%20288.9c-1.1%204.5-2.3%209-3.9%2013.4%205.8%204.5%2011.4%208.9%2016.8%2013.3%2036%2029.1%2059%2057.2%2053.2%2057.2-7.9.5-27.6-1.1-71.1-17.1-12.2-4.5-25.2-9.7-38.8-15.6%2019.7-22.5%2031.6-52%2031.6-84.2%200-70.7-57.3-128-128-128-57%200-105.2%2037.2-121.8%2088.6-12-8.6-23.2-17.1-33.3-25.2-36-29.1-47.6-45.2-51.2-52.2-4.3-7%2032.6-.9%2076.1%2015.1%206.8%202.5%2013.9%205.2%2021.1%208%202.8-3.3%205.8-6.5%208.9-9.5C89.9%20125.2%2041.6%20115%2033.3%20129.8c-9%2015.9%2030.8%2056.7%2096.8%20103.4-1.3%207.4-2%2014.9-2%2022.7%200%2070.7%2057.3%20128%20128%20128%2032.3%200%2061.8-11.9%2084.3-31.7%2074%2032.6%20129.5%2045.7%20138.5%2029.8%208.2-14.7-25.3-50.7-82.7-93.1zM176.8%20176.8C198%20155.6%20226.1%20144%20256%20144s58%2011.7%2079.2%2032.8C356.3%20198%20368%20226.1%20368%20256c0%2029.1-11%2056.4-31%2077.3-30.7-13.9-63.7-30.8-96.8-49.5-33-18.7-64.5-38.3-92.3-57.5%205.1-18.5%2014.9-35.5%2028.9-49.5zM256%20368c-29.9%200-58-11.7-79.2-32.8C155.7%20314%20144%20285.9%20144%20256c0-4.2.2-8.4.7-12.5%2026.2%2017.8%2055.8%2036.2%2087.7%2054.3%2031.9%2018.1%2062.9%2034%2091.7%2047.2-19.5%2014.9-43.2%2023-68.1%2023z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-planet-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-planet-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-planet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M396.2%20288.9c-1.1%204.5-2.3%209-3.9%2013.4%205.8%204.5%2011.4%208.9%2016.8%2013.3%2036%2029.1%2059%2057.2%2053.2%2057.2-7.9.5-27.6-1.1-71.1-17.1-12.2-4.5-25.3-9.7-38.8-15.6%2019.7-22.5%2031.6-51.9%2031.6-84.2%200-70.7-57.3-128-128-128-57%200-105.2%2037.2-121.8%2088.7-12-8.6-23.2-17.1-33.3-25.3-36-29.1-47.6-45.2-51.2-52.2-4.3-7%2032.6-.9%2076.1%2015.1%206.8%202.5%2013.9%205.2%2021.1%208%202.8-3.3%205.8-6.5%208.9-9.5C89.9%20125.2%2041.6%20115%2033.3%20129.8c-13.1%2023.1%2076.1%2098.2%20199.1%20167.9%20123%2069.6%20233.4%20107.4%20246.4%2084.3%208.3-14.7-25.2-50.7-82.6-93.1zM128.1%20252.3c0%201.2-.1%202.4-.1%203.7%200%2070.7%2057.3%20128%20128%20128%2025.8%200%2049.8-7.6%2069.9-20.7-32.5-14.4-66.4-29.5-103.5-50.5-33.8-19.2-67.1-41.7-94.3-60.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-planet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-planet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-play-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144%20124.9L353.8%20256%20144%20387.1V124.9M128%2096v320l256-160L128%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-play-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-play-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-play-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%2096v320l256-160L128%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-play($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-play-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-podium-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20256V96H192v96H64v224h384V256H320zM192%20400H80V208h112v192zm112%200h-96V112h96v288zm128%200H320V272h112v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-podium-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-podium-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-podium-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20192h112v224H64zM192%2096v320h128V96zM336%20256h112v160H336z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-podium($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-podium-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-power-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M390.7%2097.9c-3.4-2.9-8.4-2.5-11.3.9-2.9%203.4-2.5%208.4.9%2011.3%2043%2036.6%2067.6%2089.7%2067.6%20145.8C448%20361.8%20361.9%20448%20256%20448S64%20361.8%2064%20255.9c0-56.1%2024.6-109.2%2067.6-145.8%203.4-2.9%203.8-7.9.9-11.3-2.9-3.4-7.9-3.8-11.3-.9-46.5%2039.6-73.2%2097.2-73.2%20158C48%20370.6%20141.3%20464%20256%20464s208-93.4%20208-208.1c0-60.8-26.7-118.4-73.3-158z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M257%20272c4.4%200%208-3.6%208-8V56c0-4.4-3.6-8-8-8s-8%203.6-8%208v208c0%204.4%203.6%208%208%208z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-power-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-power-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-power-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cg%20fill%3D%22%23231F20%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M390.7%2099.7c-2.8-2.4-6.4-3.7-10.2-3.7-4.6%200-9%202-11.9%205.5-2.7%203.2-4%207.2-3.7%2011.4.3%204.2%202.3%208%205.5%2010.7%2039.5%2033.5%2062.2%2082.1%2062.2%20133.3%200%2096.9-79.2%20175.8-176.6%20175.8S79.4%20353.8%2079.4%20256.9c0-51.3%2022.7-99.9%2062.2-133.3%203.2-2.7%205.2-6.5%205.5-10.7.3-4.2-1-8.2-3.7-11.4-3-3.5-7.3-5.5-11.9-5.5-3.7%200-7.3%201.3-10.2%203.7C74.7%20139.1%2048%20196.4%2048%20256.9%2048%20371.1%20141.3%20464%20256%20464s208-92.9%20208-207.1c0-60.5-26.7-117.8-73.3-157.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M257%20272c8.8%200%2016-7.2%2016-16V64c0-8.8-7.2-16-16-16s-16%207.2-16%2016v192c0%208.8%207.2%2016%2016%2016z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-power($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-power-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pricetag-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20160c17.6%200%2032-14.4%2032-32s-14.4-32-32-32-32%2014.4-32%2032%2014.4%2032%2032%2032zm0-48c8.8%200%2016%207.2%2016%2016s-7.2%2016-16%2016-16-7.2-16-16%207.2-16%2016-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2064v130.7L201.3%20441.4%2070.6%20310.7%20317.3%2064H448m16-16H310.7L48%20310.7%20201.3%20464%20464%20201.3V48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pricetag-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pricetag-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pricetag-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22384%22%20cy%3D%22128%22%20r%3D%2216%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%2048H310.7L48%20310.7%20201.3%20464%20464%20201.3V48zm-80%20112c-17.6%200-32-14.4-32-32s14.4-32%2032-32%2032%2014.4%2032%2032-14.4%2032-32%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pricetag($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pricetag-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pricetags-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2064V32H288L32%20320l160%20160%2023.47-23.904L240%20480l240-272V64h-32zM192%20457.37L54.39%20320%20294.62%2048H432v137.377l-216.555%20247.99-11.34%2011.363L192%20457.37zm272-255.993L240%20457.37l-13.182-12.65L448%20192V80h16v121.377z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20160c17.645%200%2032-14.355%2032-32s-14.355-32-32-32-32%2014.355-32%2032%2014.355%2032%2032%2032zm0-48c8.836%200%2016%207.163%2016%2016s-7.164%2016-16%2016-16-7.163-16-16%207.164-16%2016-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pricetags-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pricetags-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pricetags-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%2064v137.377L227.153%20467.48%20240%20480l240-272V64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%2032L32%20320l160%20160%2023.47-23.904%2011.35-11.375L448%20192V32H288zm64%20128c-17.645%200-32-14.355-32-32s14.355-32%2032-32%2032%2014.355%2032%2032-14.355%2032-32%2032z%22%2F%3E%3Ccircle%20cx%3D%22352%22%20cy%3D%22128%22%20r%3D%2216%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pricetags($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pricetags-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-print-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432.5%20112H400V64H112v48H80.5C62.9%20112%2048%20125.8%2048%20143.3v158.4c0%2017.5%2014.9%2032.3%2032.5%2032.3H128v114h256V334h48.5c17.6%200%2031.5-14.8%2031.5-32.3V143.3c0-17.5-13.9-31.3-31.5-31.3zM128%2080h256v32H128V80zm240%20352H144V240h224v192zm80-130.3c0%208.7-6.7%2016.3-15.5%2016.3H384v-94H128v94H80.5c-8.8%200-16.5-7.6-16.5-16.3V143.3c0-8.7%207.7-15.3%2016.5-15.3h352c8.8%200%2015.5%206.6%2015.5%2015.3v158.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-print-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-print-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-print-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20224h256v224H128z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M127.5%20224.5h256v224h-256zM111.5%2064.5h288v32h-288z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432.5%20112.5h-352c-17.645%200-33%2012.842-33%2030.31V301.2c0%2017.468%2015.355%2033.3%2033%2033.3h31v-126h288v126h33c17.645%200%2031-15.832%2031-33.3V142.81c0-17.468-13.355-30.31-31-30.31z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-print($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-print-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pulse-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20288c-15.268%200-28.03%2010.695-31.223%2025h-59.004l-30.18-90.896a8.006%208.006%200%200%200-7.76-5.478%207.996%207.996%200%200%200-7.524%205.795l-54.243%20189.32-58.175-349.055a8.003%208.003%200%200%200-7.576-6.68%207.996%207.996%200%200%200-8.078%206.062L121.748%20313H32v16h96a8%208%200%200%200%207.763-6.066l54.685-219.59%2057.66%20345.972a8.002%208.002%200%200%200%2015.584.888l56.872-198.496%2023.845%2071.813A8.002%208.002%200%200%200%20352%20329h65.292c3.89%2013.29%2016.16%2023%2030.708%2023%2017.674%200%2032-14.327%2032-32S465.674%20288%20448%20288z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pulse-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pulse-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-pulse-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20273c-21.27%200-39.296%2014-45.596%2033h-38.857l-28.36-85.417a16%2016%200%200%200-15.184-10.956c-.112%200-.224%200-.335.004a15.997%2015.997%200%200%200-15.05%2011.59l-44.483%20155.26-52.353-314.107C206.535%2054.893%20200.332%2048%20192%2048s-13.693%205.776-15.525%2013.135L115.495%20306H16v32h112c7.348%200%2013.75-5.004%2015.525-12.135l45.368-182.177%2051.324%20307.94c1.23%207.377%207.397%2011.92%2014.864%2012.344.31.018.615.028.92.028%207.097%200%2013.406-3.7%2015.38-10.594l49.745-173.617%2015.69%2047.25A16%2016%200%200%200%20352%20338h51.108c6.865%2018%2024.37%2031%2044.892%2031%2026.51%200%2048-22.492%2048-49%200-26.51-21.49-47-48-47z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-pulse($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-pulse-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-qr-scanner-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20124.2C64%20102%2085%2080%20108.2%2080H176V64h-66.8C75.7%2064%2048%2090.7%2048%20124.2V192h16v-67.8zM448%20192h16v-67.8c0-33.5-27.7-60.2-61.2-60.2H336v16h67.8c23.2%200%2044.2%2022%2044.2%2044.2V192zM64%20320H48v67.8c0%2033.5%2027.7%2060.2%2061.2%2060.2H176v-16h-67.8C85%20432%2064%20410%2064%20387.8V320zM448%20387.8c0%2022.2-21%2044.2-44.2%2044.2H336v16h66.8c33.5%200%2061.2-26.7%2061.2-60.2V320h-16v67.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-qr-scanner($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-qr-scanner-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-quote-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M209%20112c8.8%200%2015%206.2%2015%2015v192c0%2023.3-4.3%2045-13.3%2064-3.5%207.5-6.8%2013-9.4%2017H182c12.7-19%2025-45.3%2025-80.5V304h-78c-8.8%200-17-8.2-17-17V127c0-8.5%207.9-15%2017-15h80m0-16h-80c-17.7%200-33%2013.3-33%2031v160c0%2017.7%2015.3%2033%2033%2033h62c0%2064-46%2096-46%2096h64s31-33.6%2031-97V127c0-17.7-13.3-31-31-31zM385%20112c8.8%200%2015%206.2%2015%2015v192c0%2023.3-4.3%2045-13.3%2064-3.5%207.5-6.8%2013-9.4%2017H358c12.7-19%2025-45.3%2025-80.5V304h-78c-8.8%200-17-8.2-17-17V127c0-8.5%207.9-15%2017-15h80m0-16h-80c-17.7%200-33%2013.3-33%2031v160c0%2017.7%2015.3%2033%2033%2033h62c0%2064-46%2096-46%2096h64s31-33.6%2031-97V127c0-17.7-13.3-31-31-31z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-quote-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-quote-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-quote-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M209%2096h-80c-17.7%200-33%2013.3-33%2031v160c0%2017.7%2015.3%2033%2033%2033h62c0%2064-46%2096-46%2096h64s31-33.6%2031-97V127c0-17.7-13.3-31-31-31zM385%2096h-80c-17.7%200-33%2013.3-33%2031v160c0%2017.7%2015.3%2033%2033%2033h62c0%2064-46%2096-46%2096h64s31-33.6%2031-97V127c0-17.7-13.3-31-31-31z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-quote($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-quote-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-radio-button-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-radio-button-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-radio-button-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-radio-button-on-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2096c-88.4%200-160%2071.6-160%20160s71.6%20160%20160%20160%20160-71.6%20160-160S344.4%2096%20256%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-radio-button-on($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-radio-button-on-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-radio-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M113.9%20406c-2.1%200-4.2-.8-5.8-2.5-39.3-41-60.1-92-60.1-147.5s20.8-106.5%2060.2-147.5c3.1-3.2%208.1-3.3%2011.3-.2s3.3%208.1.2%2011.3C83.3%20157.5%2064%20204.7%2064%20256c0%2051.3%2019.3%2098.5%2055.7%20136.5%203.1%203.2%203%208.3-.2%2011.3-1.6%201.5-3.6%202.2-5.6%202.2zM398.1%20406c-2%200-4-.7-5.5-2.2-3.2-3.1-3.3-8.1-.2-11.3%2036.4-38%2055.7-85.2%2055.7-136.5s-19.3-98.5-55.7-136.5c-3.1-3.2-3-8.3.2-11.3s8.3-3%2011.3.2c39.4%2041%2060.2%2092%2060.2%20147.5s-20.8%20106.5-60.2%20147.5c-1.6%201.8-3.7%202.6-5.8%202.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M156.1%20365.6c-2.1%200-4.1-.8-5.7-2.4-28.1-28.6-43.6-66.3-43.6-106.4%200-41%2016.1-79.4%2045.3-108.1%203.1-3.1%208.2-3.1%2011.3.1%203.1%203.2%203.1%208.2-.1%2011.3-26.2%2025.7-40.6%2060.1-40.6%2096.7%200%2035.8%2013.8%2069.6%2039%2095.1%203.1%203.2%203.1%208.2-.1%2011.3-1.5%201.6-3.5%202.4-5.5%202.4zM355.9%20365.6c-2%200-4.1-.8-5.6-2.3-3.1-3.1-3.2-8.2-.1-11.3%2025.1-25.5%2039-59.3%2039-95.1%200-36.7-14.4-71-40.6-96.7-3.1-3.1-3.2-8.2-.1-11.3%203.1-3.1%208.2-3.2%2011.3-.1%2029.2%2028.8%2045.3%2067.2%2045.3%20108.1%200%2040-15.5%2077.8-43.6%20106.4-1.4%201.5-3.5%202.3-5.6%202.3z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M198%20326.9c-2.1%200-4.1-.8-5.7-2.4-17.9-18.2-27.8-42.4-27.8-67.9%200-26.2%2010.3-50.7%2029-69.1%203.1-3.1%208.2-3.1%2011.3.1%203.1%203.2%203.1%208.2-.1%2011.3-15.6%2015.3-24.2%2035.8-24.2%2057.7%200%2021.4%208.2%2041.5%2023.2%2056.7%203.1%203.1%203.1%208.2-.1%2011.3-1.5%201.5-3.5%202.3-5.6%202.3zM314%20326.9c-2%200-4.1-.8-5.6-2.3-3.1-3.1-3.2-8.2-.1-11.3%2015-15.2%2023.2-35.4%2023.2-56.7%200-21.9-8.6-42.3-24.2-57.7-3.1-3.1-3.2-8.2-.1-11.3%203.1-3.1%208.2-3.2%2011.3-.1%2018.7%2018.4%2029%2042.9%2029%2069.1%200%2025.6-9.9%2049.7-27.8%2067.9-1.6%201.6-3.7%202.4-5.7%202.4z%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22256%22%20r%3D%2232%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-radio-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-radio-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-radio-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm-94.2%20315.7c-1.6%201.5-3.6%202.3-5.6%202.3-2.1%200-4.1-.8-5.7-2.4-28-28.7-43.5-66.6-43.5-106.8%200-41.1%2016.1-79.7%2045.3-108.5%203.1-3.1%208.2-3.1%2011.3.1%203.1%203.2%203.1%208.2-.1%2011.4-26.1%2025.8-40.5%2060.3-40.5%2097.1%200%2035.9%2013.8%2069.9%2038.9%2095.5%203.1%203.1%203.1%208.2-.1%2011.3zm42-50.2c3.1%203.2%203.1%208.2-.1%2011.4-1.6%201.5-3.6%202.3-5.6%202.3-2.1%200-4.1-.8-5.7-2.4-17.9-18.3-27.8-42.5-27.8-68.2%200-26.3%2010.3-50.9%2028.9-69.3%203.1-3.1%208.2-3.1%2011.3.1%203.1%203.2%203.1%208.2-.1%2011.4-15.6%2015.4-24.1%2035.9-24.1%2057.9%200%2021.3%208.2%2041.5%2023.2%2056.8zm52.2-25.4c-17.7%200-32-14.4-32-32.1%200-17.7%2014.3-32.1%2032-32.1s32%2014.4%2032%2032.1c0%2017.7-14.3%2032.1-32%2032.1zm63.6%2036.6c-1.6%201.6-3.6%202.4-5.7%202.4-2%200-4-.8-5.6-2.3-3.1-3.1-3.2-8.2-.1-11.4%2015-15.3%2023.2-35.5%2023.2-56.9%200-21.9-8.6-42.5-24.1-57.9-3.1-3.1-3.2-8.2-.1-11.4%203.1-3.2%208.2-3.2%2011.3-.1%2018.7%2018.4%2028.9%2043.1%2028.9%2069.3%200%2025.8-9.9%2050-27.8%2068.3zm41.9%2038.9c-1.6%201.6-3.6%202.4-5.7%202.4-2%200-4-.8-5.6-2.3-3.1-3.1-3.2-8.2-.1-11.4%2025.1-25.6%2038.9-59.6%2038.9-95.5%200-36.8-14.4-71.3-40.5-97.1-3.1-3.1-3.2-8.2-.1-11.4%203.1-3.2%208.2-3.2%2011.3-.1%2029.2%2028.9%2045.3%2067.4%2045.3%20108.5%200%2040.3-15.5%2078.2-43.5%20106.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-radio($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-radio-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-rainy-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M374.4%20143.2l-13.3-.1C349.3%2089.6%20306%2048%20236%2048S108.2%2099.7%20108.2%20170.8l.3%204.8C66.2%20181.2%2032%20220.1%2032%20264.5c0%2047%2037.9%2088.5%2084.6%2088.5h10.6l-37.4%2050.7c-2.6%203.6-1.8%208.3%201.8%2010.9%201.3%201%202.9%201.4%204.4%201.4%202.3%200%205.1-.6%206.8-2.9L147%20353h61.4l-72.3%2099c-2.6%203.6-2.2%208%201.4%2010.6%201.3%201%203.3%201.4%204.8%201.4%203.7%200%206.1-1.3%207.8-3.6l78-107.4h61.1l-37.3%2050.7c-2.6%203.6-1.8%208.3%201.8%2010.9%201.3%201%202.9%201.4%204.4%201.4%202.3%200%205.1-.6%206.8-2.9L309%20353h61.4l-72.3%2099c-2.6%203.6-2.1%207.8%201.5%2010.3%201.3%201%203.2%201.7%204.7%201.7%202.3%200%205.1-.8%206.8-3.1l80.1-110.3c50.4-8.4%2088.9-53.7%2088.9-106.6-.1-58.6-47.4-100.8-105.7-100.8zm12.8%20192.6s-8.9%201.2-20.2%201.2H116.6c-18%200-35.1-7.9-48.2-21.8-13-13.7-20.4-32.3-20.4-50.9%200-17.5%206.6-34.7%2018.5-48.4%2011.8-13.5%2027.4-22.2%2044.1-24.4l14.8-2-1-14.9-.3-4.3c.1-29.3%2011.7-56.3%2032.6-75.9C177.7%2074.8%20205.8%2064%20236%2064c29.3%200%2055%208.3%2074.3%2023.9%2017.7%2014.4%2029.9%2034.7%2035.2%2058.7l2.9%2013.4c11.5-.7%2026-.7%2026-.7%2024.5%200%2047.1%208.6%2063.7%2024.1%2016.7%2015.6%2025.8%2037.1%2025.8%2060.7.1%2044.6-33.6%2084.5-76.7%2091.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-rainy-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-rainy-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-rainy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M374.4%20143.2l-13.3-.1C349.3%2089.6%20306%2048%20236%2048S108.2%2099.7%20108.2%20170.8l.3%204.8C66.2%20181.2%2032%20220.1%2032%20264.5c0%2047%2037.9%2088.5%2084.6%2088.5h10.6l-37.4%2050.7c-2.6%203.6-1.8%208.3%201.8%2010.9%201.3%201%202.9%201.4%204.4%201.4%202.3%200%205.1-.6%206.8-2.9L147%20353h61.4l-72.3%2099c-2.6%203.6-2.2%208%201.4%2010.6%201.3%201%203.3%201.4%204.8%201.4%203.7%200%206.1-1.3%207.8-3.6l78-107.4h61.1l-37.3%2050.7c-2.6%203.6-1.8%208.3%201.8%2010.9%201.3%201%202.9%201.4%204.4%201.4%202.3%200%205.1-.6%206.8-2.9L309%20353h61.4l-72.3%2099c-2.6%203.6-2.1%207.8%201.5%2010.3%201.3%201%203.2%201.7%204.7%201.7%202.3%200%205.1-.8%206.8-3.1l80.1-110.3c50.4-8.4%2088.9-53.7%2088.9-106.6-.1-58.6-47.4-100.8-105.7-100.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-rainy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-rainy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-recording-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M386.2%20144c-60.6%200-109.8%2050.1-109.8%20112%200%2040.4%2021%2075.7%2052.5%2095.4H183.1c31.5-19.7%2052.5-55%2052.5-95.4%200-61.9-49.2-112-109.8-112C65.2%20144%2016%20194.1%2016%20256s49.2%20112%20109.8%20112h260.4c60.6%200%20109.8-50.1%20109.8-112s-49.2-112-109.8-112zM32.3%20256c0-52.6%2042-95.4%2093.5-95.4%2051.6%200%2093.5%2042.8%2093.5%2095.4s-42%2095.4-93.5%2095.4c-51.6%200-93.5-42.8-93.5-95.4zm353.9%2095.4c-51.6%200-93.5-42.8-93.5-95.4s42-95.4%2093.5-95.4%2093.5%2042.8%2093.5%2095.4-41.9%2095.4-93.5%2095.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20208c26.5%200%2048%2021.5%2048%2048s-21.5%2048-48%2048-48-21.5-48-48%2021.5-48%2048-48m0-16c-35.3%200-64%2028.7-64%2064s28.7%2064%2064%2064%2064-28.7%2064-64-28.7-64-64-64zM128%20208c26.5%200%2048%2021.5%2048%2048s-21.5%2048-48%2048-48-21.5-48-48%2021.5-48%2048-48m0-16c-35.3%200-64%2028.7-64%2064s28.7%2064%2064%2064%2064-28.7%2064-64-28.7-64-64-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-recording-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-recording-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-recording-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M386.2%20144c-60.6%200-109.8%2049.9-109.8%20111.8%200%2040.4%2021%2076.2%2052.5%2095.2H183.1c31.5-19%2052.5-54.8%2052.5-95.2%200-61.9-49.2-111.9-109.8-111.9-60.6%200-109.8%2050.2-109.8%20112C16%20317.8%2065.2%20368%20125.8%20368h260.4c60.6%200%20109.8-50.1%20109.8-112s-49.2-112-109.8-112zM128%20320c-35.3%200-64-28.7-64-64s28.7-64%2064-64%2064%2028.7%2064%2064-28.7%2064-64%2064zm256%200c-35.3%200-64-28.7-64-64s28.7-64%2064-64%2064%2028.7%2064%2064-28.7%2064-64%2064z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20208c-26.5%200-48%2021.5-48%2048s21.5%2048%2048%2048%2048-21.5%2048-48-21.5-48-48-48zM128%20208c-26.5%200-48%2021.5-48%2048s21.5%2048%2048%2048%2048-21.5%2048-48-21.5-48-48-48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-recording($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-recording-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-redo-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20400h10.3l19.2-31.2c20.5-32.7%2044.9-62.8%2075.8-76.6%2024.4-10.9%2046.7-18.9%2086.7-20V352l192-128L256%2096v80.3c-63%202.8-108.1%2020.7-143.3%2056.2C60.4%20285.2%2064%20351.5%2064%20368.2c.1%208.9%200%2021.7%200%2031.8zm208-208v-64.7l148.1%2096.8L272%20320.8V256c-91%200-144.6%2024.6-192.2%20105.4%200%200-8.8-169.4%20192.2-169.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-redo-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-redo-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-redo-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20400h10.3l19.2-31.2c20.5-32.7%2044.9-62.8%2075.8-76.6%2024.4-10.9%2046.7-18.9%2086.7-20V352l192-128L256%2096v80.3c-63%202.8-108.1%2020.7-143.3%2056.2C60.4%20285.2%2064%20351.5%2064%20368.2c.1%208.9%200%2021.7%200%2031.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-redo($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-redo-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-refresh-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M364.1%20256c0%2060-48.5%20108.2-108.1%20108.2S147.9%20315.7%20147.9%20256c0-59.6%2048.5-108.1%20108.1-108.1v55.8l96-55.7-96-64v44c-70.7%200-128%2057.4-128%20128.1%200%2070.8%2057.3%20128.1%20128%20128.1s128-57.1%20128-128.1h-19.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-refresh-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-refresh-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-refresh-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20336.1c-70.7%200-128-57.3-128-128.1s57.3-128.1%20128-128.1V84l96%2064-96%2055.7v-55.8c-59.6%200-108.1%2048.5-108.1%20108.1%200%2059.6%2048.5%20108.1%20108.1%20108.1S364.1%20316%20364.1%20256H384c0%2071-57.3%20128.1-128%20128.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-refresh-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-refresh-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-refresh-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20384.1c-70.7%200-128-57.3-128-128.1s57.3-128.1%20128-128.1V84l96%2064-96%2055.7v-55.8c-59.6%200-108.1%2048.5-108.1%20108.1%200%2059.6%2048.5%20108.1%20108.1%20108.1S364.1%20316%20364.1%20256H384c0%2071-57.3%20128.1-128%20128.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-refresh($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-refresh-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-remove-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20248h256v17H128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-remove-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-remove-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-remove-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm128%20217H128v-17h256v17z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-remove-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-remove-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-remove-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20265H128v-17h256v17z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-remove($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-remove-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-reorder-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M80%20304h352v16H80zM80%20248h352v16H80zM80%20192h352v16H80z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-reorder($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-reorder-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-repeat-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M332.3%20163.7l-33.6-33.4c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7%202.3c-3.1%203.1-3.1%208.2%200%2011.3L314%20168H136c-39.6%200-72%2032.4-72%2072v24h16v-24c0-14.9%205.8-28.9%2016.5-39.5%2010.6-10.6%2024.7-16.5%2039.5-16.5h176l-26.6%2026.4c-3.1%203.1-3.1%208.2%200%2011.3%203.1%203.1%208.2%203.1%2011.3%200l35.6-35.4c6.3-6.2%206.3-16.3%200-22.6zM432.1%20248v24c0%2014.9-5.8%2028.9-16.5%2039.5-10.7%2010.7-24.7%2016.5-39.6%2016.5H200l26.6-26.4c3.1-3.1%203.1-8.2%200-11.3-3.1-3.1-8.2-3.1-11.3%200l-35.6%2035.4c-6.3%206.2-6.3%2016.3%200%2022.6l33.6%2033.4c1.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3c3.1-3.1%203.1-8.2%200-11.3L198.1%20344h178c39.6%200%2072-32.4%2072-72v-24h-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-repeat($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-repeat-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-resize-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M440%2064H328c-4.4%200-8%203.6-8%208s3.6%208%208%208h92L80%20419.9V328c0-4.4-3.6-8-8-8s-8%203.6-8%208v112c0%204.4%203.6%208%208%208h112c4.4%200%208-3.6%208-8s-4-8-8.4-8H92L432%2092v92c0%204.4%203.6%208%208%208s8-3.6%208-8V72c0-4.4-3.6-8-8-8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-resize($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-resize-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-restaurant-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384.5%2064c-24.8%200-47.8%2077.3-47.8%20160%200%2057%2032.1%2080%2032.1%2080s6.2%204.8%2015.1%206v130c0%204.4%203.6%208%208%208s8-3.6%208-8V75c.1-11-10.4-11-15.4-11zm-.5%2017v212c-1-.1-5-1-7.3-3.1-1.3-1.1-5.2-4.6-10.3-12.9-11.3-18.1-13.6-38.8-13.6-52.9%200-34.9%204.2-71.4%2012-100.1%207.5-28%2016.2-39.7%2019.2-43zM296%2064h-8l10%20103.5c0%204.4-3.6%207.8-8%207.8s-8-3.2-8-7.6L276%2064h-8l-6%20103.5c0%204.4-3.6%207.8-8%207.8s-8-3.2-8-7.6L256%2064h-8s-24%20107.1-24%20127.9c0%2020.8%2013.2%2039.4%2032%2045.3%205.3%201.7%208%201.8%208%201.8v201c0%204.4%203.6%208%208%208s8-3.6%208-8V239s5.1-.9%208-1.8c18.6-6%2032-24.2%2032-45.2S296%2064%20296%2064zm-24%20159c-28.6%200-32-26.6-32-31.6%200%200%20.1-2.7.3-4.5%203.9%202.7%208.6%204.3%2013.7%204.3%207.2%200%2011.5-3.1%2018-3.1s10.8%203.1%2018%203.1c5.1%200%209.8-1.6%2013.7-4.3.2%201.9.3%204.6.3%204.6%200%204.7-3.4%2031.5-32%2031.5zM160%2064c-26.5%200-48%2063.9-48%20127.9%200%2017.3%209.2%2033.2%2023.2%2041.3%2011.4%206.7%2016.8%206.8%2016.8%206.8v200c0%204.4%203.6%208%208%208s8-3.6%208-8V240s5.1%200%2016.2-6.2c14.2-8%2023.8-24%2023.8-41.8%200-64-21.5-128-48-128zm16.3%20155.6l-.1.1-.1.1c-.7.4-1.6%201-2.6%201.4-1.2.3-2.4.7-3.5%201.3-3.4.7-6.8%201.3-9.9%201.3-3.1%200-6.5-.6-9.9-1.3-1.1-.5-2.2-.9-3.5-1.2-1-.5-2.2-1.2-3-1.7l-.2-.1-.2-.1c-9.4-5.6-15.3-16.1-15.3-27.4%200-29.4%204.8-59.5%2013.1-82.5%204.8-13.2%209.5-20.5%2012.6-24.3%203.4-4.2%205.8-5.1%206.3-5.1s2.9.9%206.3%205.1c3.1%203.8%207.8%2011%2012.6%2024.3%208.3%2023%2013.1%2053%2013.1%2082.5%200%2011.3-6.2%2022.2-15.7%2027.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-restaurant-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-restaurant-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-restaurant-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%2064c-24.8%200-48%2077.3-48%20160%200%2057%2032%2080%2032%2080v128c0%208.8%207.2%2016%2016%2016s16-7.2%2016-16V75c0-11-11-11-16-11zM288%2064l10%20104c0%204.4-3.6%208-8%208s-8-3.6-8-8l-6-104h-8l-6%20104c0%204.4-3.6%208-8%208s-8-3.6-8-8l10-104h-8s-24%20107.2-24%20128%2013.4%2038.6%2032%2045.2V432c0%208.8%207.2%2016%2016%2016s16-7.2%2016-16V237.2c18.6-6.6%2032-24.2%2032-45.2S296%2064%20296%2064h-8zM160%2064c-26.5%200-48%2064-48%20128%200%2020.8%2013.4%2038.6%2032%2045.2V432c0%208.8%207.2%2016%2016%2016s16-7.2%2016-16V237.2c18.6-6.6%2032-24.2%2032-45.2%200-64-21.5-128-48-128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-restaurant($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-restaurant-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-return-left-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M68.7%20292.3l57.6%2057.4c1.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3c3.1-3.1%203.1-8.2%200-11.3L88%20288h288c39.6%200%2072-32.4%2072-72v-56h-16v56c0%2014.9-5.8%2028.9-16.5%2039.5-10.6%2010.6-24.7%2016.5-39.5%2016.5H88l51.6-50.4c3.1-3.1%203.1-8.2%200-11.3-3.1-3.1-8.2-3.1-11.3%200l-59.6%2059.4c-6.3%206.2-6.3%2016.3%200%2022.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-return-left($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-return-left-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-return-right-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M443.3%20292.3l-57.6%2057.4c-1.6%201.6-3.6%202.3-5.7%202.3s-4.1-.8-5.7-2.3c-3.1-3.1-3.1-8.2%200-11.3L424%20288H136c-39.6%200-72-32.4-72-72v-56h16v56c0%2014.9%205.8%2028.9%2016.5%2039.5%2010.6%2010.6%2024.7%2016.5%2039.5%2016.5h288l-51.6-50.4c-3.1-3.1-3.1-8.2%200-11.3%203.1-3.1%208.2-3.1%2011.3%200l59.6%2059.4c6.3%206.2%206.3%2016.3%200%2022.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-return-right($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-return-right-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-reverse-camera-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M301.815%20318.608C288.7%20329.638%20272.86%20335.964%20256%20335.964c-36.36%200-66.286-28.965-70.89-61.965h30.61l-38.87-50-37.534%2050h29.48c4.695%2042%2041.716%2078%2087.204%2078%2020.9%200%2041.17-7.567%2057.076-21.22l2.37-2.158-11.6-11.662-2.03%201.648zM315.736%20198.885c-16.188-14.775-37.402-22.84-59.736-22.84-20.9%200-41.17%207.557-57.075%2021.207l-2.37%202.052%2011.598%2011.61%202.033-1.706c12.927-10.872%2029.197-17.005%2045.814-17.005%2036.343%200%2066.274%2028.797%2070.89%2063.797h-30.643l38.846%2051.225L372.72%20256h-29.513c-2.24-20-11.932-42.936-27.47-57.115z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M417.5%20160h-61.725c-32.105-36-42.22-48-54.525-48h-88.5c-12.314%200-22.167%2012-54.52%2048H145v-16h-34v16H97.5C79.855%20160%2064%20173.217%2064%20190.684v176.018C64%20384.17%2079.855%20400%2097.5%20400h320c17.645%200%2030.5-15.83%2030.5-33.3V190.685C448%20173.217%20435.145%20160%20417.5%20160zM432%20366.7c0%209.264-6.23%2017.3-14.5%2017.3h-320c-8.738%200-17.5-8.664-17.5-17.3V190.685C80%20182.518%2088.126%20176%2097.5%20176h66.862c2.01%200%203.225-.2%205.768-3.2s7.702-10.008%2011.08-13.795c11.296-12.666%2019.457-21.915%2025.316-27.132%204.746-4.225%206.21-3.873%206.225-3.873h88.5c.017%200%201.612-.363%206.71%204.22%206.14%205.52%2014.705%2016.84%2026.558%2030.197%202.888%203.255%207.214%208.11%209.317%2010.44s4.252%203.143%205.77%203.143H417.5c8.832%200%2014.5%205.965%2014.5%2014.684V366.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-reverse-camera-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-reverse-camera-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-reverse-camera-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M417.5%20160h-61.725c-32.105-36-42.22-48-54.525-48h-88.5c-12.314%200-22.167%2012-54.52%2048H145v-16h-34v16H97.5C79.855%20160%2064%20173.217%2064%20190.684v176.018C64%20384.17%2079.855%20400%2097.5%20400h320c17.645%200%2030.5-15.83%2030.5-33.3V190.685C448%20173.217%20435.145%20160%20417.5%20160zM313.076%20330.782C297.17%20344.434%20276.9%20352%20256%20352c-45.487%200-82.51-36-87.205-78h-29.48l37.535-50%2038.87%2050h-30.61c4.604%2033%2034.53%2061.965%2070.89%2061.965%2016.86%200%2032.7-6.327%2045.815-17.356l2.032-1.648%2011.6%2011.662-2.37%202.158zm22.018-23.557L296.248%20256h30.644c-4.617-35-34.548-63.797-70.89-63.797-16.62%200-32.89%206.133-45.815%2017.005l-2.033%201.706-11.6-11.61%202.372-2.052c15.905-13.65%2036.175-21.206%2057.075-21.206%2022.334%200%2043.55%208.063%2059.737%2022.84%2015.538%2014.178%2025.23%2037.114%2027.47%2057.114h29.512l-37.626%2051.225z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-reverse-camera($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-reverse-camera-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-rewind-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%20155v201.9L280.5%20256%20464%20155m-224%201v200.4L64%20256l176-100.2m16-27.8L32%20256l224%20128V260.8L480%20384V128L256%20251.2V128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-rewind-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-rewind-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-rewind-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20128L32%20256l224%20128V260.8L480%20384V128L256%20251.2V128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-rewind($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-rewind-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ribbon-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2088c39.7%200%2072%2032.3%2072%2072s-32.3%2072-72%2072-72-32.3-72-72%2032.3-72%2072-72m0-16c-48.5%200-88%2039.5-88%2088s39.5%2088%2088%2088%2088-39.5%2088-88-39.5-88-88-88z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c29.9%200%2058%2011.7%2079.2%2032.8S368%20130.1%20368%20160s-11.7%2058-32.8%2079.2S285.9%20272%20256%20272s-58-11.7-79.2-32.8S144%20189.9%20144%20160s11.7-58%2032.8-79.2S226.1%2048%20256%2048m0-16c-70.7%200-128%2057.3-128%20128s57.3%20128%20128%20128%20128-57.3%20128-128S326.7%2032%20256%2032z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M150.6%20280.4C179.6%20305.8%20217%20320%20256%20320c2.4%200%204.7-.1%207.1-.2l-21.7%2047.7-35.4%2078-32.3-53.8-4.7-7.8H91.5l59.1-103.5m-3.5-26.2L64%20400h96l48%2080%2048-105.8%2033.6-74.2c-10.8%202.6-22.1%204-33.6%204-43.5%200-82.5-19.3-108.9-49.8zM361.4%20280.4L420.5%20384h-77.6l-4.7%207.8-32.2%2053.8-24.3-53.5%2039.1-85.8c14.7-6.5%2028.5-15.3%2040.6-25.9m3.5-26.2c-15.1%2017.4-34.3%2031.2-56%2039.8l-44.8%2098.1L304%20480l48-80h96l-83.1-145.8z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ribbon-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ribbon-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-ribbon-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20288c70.7%200%20128-57.3%20128-128S326.7%2032%20256%2032%20128%2089.3%20128%20160s57.3%20128%20128%20128zm0-216c48.5%200%2088%2039.5%2088%2088s-39.5%2088-88%2088-88-39.5-88-88%2039.5-88%2088-88z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20232c39.7%200%2072-32.3%2072-72s-32.3-72-72-72-72%2032.3-72%2072%2032.3%2072%2072%2072zM256%20304c-43.5%200-82.5-19.3-108.9-49.8L64%20400h96l48%2080%2048-105.8%2033.6-74.2c-10.8%202.6-22%204-33.6%204zM364.9%20254.2c-15.1%2017.4-34.3%2031.2-56%2039.8l-44.8%2098.1L304%20480l48-80h96l-83.1-145.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-ribbon($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-ribbon-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-rose-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M378.6%20162.1c-28.5%2051.1-16.4%2091.7-5.4%20128.3C378.7%20309%20384%20326.5%20384%20345c0%2029-11.5%2054.2-33.2%2072.7-23.2%2019.8-56%2030.2-94.8%2030.2s-71.5-10.5-94.8-30.2C139.5%20399.2%20128%20374.1%20128%20345c0-28.9%206.8-51.2%2021.4-70%2013-16.8%2032.6-31.6%2063.4-47.9l6.5-3.5c20.2-10.7%2027-14.4%2044-21.9%2031.9-14.2%2066.6-26.4%20103.2-36.3%204-1.1%208.1-2.2%2012.1-3.3m37.4-25c-18.9%203.9-36.8%208.2-53.7%2012.8-40.5%2011-75.5%2023.9-105.4%2037.2-19.3%208.6-26.2%2012.4-51.5%2025.9C147%20243.9%20112%20277.3%20112%20345c0%2067.8%2055.6%20119%20144%20119s144-51.2%20144-119c0-67.7-61-118.7%2016-207.9zM134.5%20134c21.3%206.5%2047.3%2015.7%2069.2%2027.6%205.5%203%2010.5%206%2015%209-4.8%202.4-9.5%204.8-14.1%207.2-7.2%203.8-14.4%207.8-21.2%2011.8-10.7%206.2-20.8%2012.6-30.3%2019-.6-23.4-5.5-49.3-18.6-74.6M96%20107.4c41.5%2043.7%2044.6%2096.5%2039.4%20134.4%2012.8-10.5%2031.2-23.9%2056.1-38.4%206.4-3.8%2013.3-7.6%2020.6-11.4%2011.6-6.1%2023.5-11.9%2035.8-17.4-9.1-10.1-22.1-19.1-36.6-27C162.6%20121.1%2096%20107.4%2096%20107.4zM344.9%2094.3c4.9%206.2%2011.4%2015.1%2016.5%2023.8-29.8%207.9-65.6%2019.6-94.3%2031-5.6-5.5-12.2-10.8-19.6-16%2021.1-17.1%2044.7-26.6%2062.2-31.7%2014.9-4.3%2027.6-6.3%2035.2-7.1m7.1-16.6s-78.6%202.2-130.7%2058c16.6%209.2%2029.7%2019%2039%2029.3l2.7%203c37.2-15.6%2088.1-31.7%20121-39-6.4-21.7-32-51.3-32-51.3zM181.1%2068.9c9%205.5%2022.1%2014.7%2035.3%2028.6-4.5%203.7-8.8%207.5-12.9%2011.5-14.2-6.7-25.1-11.4-36.4-15.3%203.6-7.5%208.3-16%2014-24.8M176%2048c-15.3%2020.8-25.7%2042.1-30.3%2055.7%2021.1%205.9%2035.5%2012.3%2061.4%2024.7%209.5-10.6%2020.4-20.1%2032.6-28.4C210.3%2062.5%20176%2048%20176%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-rose-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-rose-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-rose-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20137.1c-18.9%203.9-36.8%208.2-53.7%2012.8-40.5%2011-75.5%2023.9-105.4%2037.2-19.3%208.6-26.2%2012.4-51.5%2025.9C147%20243.9%20112%20277.3%20112%20345c0%2067.8%2055.6%20119%20144%20119s144-51.2%20144-119c0-67.7-61-118.7%2016-207.9zM96%20107.4c41.5%2043.7%2044.6%2096.5%2039.4%20134.4%2012.8-10.5%2031.2-23.9%2056.1-38.4%206.4-3.8%2013.3-7.6%2020.6-11.4%2011.6-6.1%2023.5-11.9%2035.8-17.4-9.1-10.1-22.1-19.1-36.6-27C162.6%20121.1%2096%20107.4%2096%20107.4zM352%2077.7s-78.6%202.2-130.7%2058c16.6%209.2%2029.7%2019%2039%2029.3l2.7%203c37.2-15.6%2088.1-31.7%20121-39-6.4-21.7-32-51.3-32-51.3zM176%2048c-15.3%2020.8-25.7%2042.1-30.3%2055.7%2021.1%205.9%2035.5%2012.3%2061.4%2024.7%209.5-10.6%2020.4-20.1%2032.6-28.4C210.3%2062.5%20176%2048%20176%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-rose($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-rose-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-sad-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064c25.9%200%2051.1%205.1%2074.7%2015.1%2022.9%209.7%2043.4%2023.5%2061%2041.2%2017.6%2017.6%2031.5%2038.2%2041.2%2061%2010%2023.7%2015.1%2048.8%2015.1%2074.7s-5.1%2051.1-15.1%2074.7c-9.7%2022.9-23.5%2043.4-41.2%2061-17.6%2017.6-38.2%2031.5-61%2041.2-23.7%2010-48.8%2015.1-74.7%2015.1s-51.1-5.1-74.7-15.1c-22.9-9.7-43.4-23.5-61-41.2-17.6-17.6-31.5-38.2-41.2-61C69.1%20307.1%2064%20281.9%2064%20256s5.1-51.1%2015.1-74.7c9.7-22.9%2023.5-43.4%2041.2-61%2017.6-17.6%2038.2-31.5%2061-41.2C204.9%2069.1%20230.1%2064%20256%2064m0-16C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048z%22%2F%3E%3Ccircle%20cx%3D%22328%22%20cy%3D%22224%22%20r%3D%2224%22%2F%3E%3Ccircle%20cx%3D%22184%22%20cy%3D%22224%22%20r%3D%2224%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20271c-48.3%200-88%2035-96%2081h192c-8-46-47.7-81-96-81z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-sad-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-sad-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-sad-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm-72%20152c13.3%200%2024%2010.7%2024%2024s-10.7%2024-24%2024-24-10.7-24-24%2010.7-24%2024-24zm-24%20152c8-46%2047.7-81%2096-81s88%2035%2096%2081H160zm168-104c-13.3%200-24-10.7-24-24s10.7-24%2024-24%2024%2010.7%2024%2024-10.7%2024-24%2024z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-sad($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-sad-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-school-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.4%2064L32.2%20192%2096%20228.6v127.9L256%20448l160-91.5V228.6l48-27.4V384h16V192L256.4%2064zM248%20425l-136-77.8V237.7l136%2077.7V425zm152-77.8L264%20425V315.4l136-77.7v109.5zM256%20301L64.6%20192l192-109.6L448.1%20192%20256%20301z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-school-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-school-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-school-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20244.6v111.9l152%2086.9v-112zM264%20443.4l152-86.9V244.6l-152%2086.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064L32%20192l224%20128%20208-118.9V384h16V192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-school($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-school-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-search-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448.3%20424.7L335%20311.3c20.8-26%2033.3-59.1%2033.3-95.1%200-84.1-68.1-152.2-152-152.2-84%200-152%2068.2-152%20152.2s68.1%20152.2%20152%20152.2c36.2%200%2069.4-12.7%2095.5-33.8L425%20448l23.3-23.3zM120.1%20312.6c-25.7-25.7-39.8-59.9-39.8-96.3s14.2-70.6%2039.8-96.3%2059.9-40%2096.2-40c36.3%200%2070.5%2014.2%2096.2%2039.9s39.8%2059.9%2039.8%2096.3-14.2%2070.6-39.8%2096.3c-25.7%2025.7-59.9%2039.9-96.2%2039.9-36.3.1-70.5-14.1-96.2-39.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-search-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-search-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-search-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M344.5%20298c15-23.6%2023.8-51.6%2023.8-81.7%200-84.1-68.1-152.3-152.1-152.3C132.1%2064%2064%20132.2%2064%20216.3c0%2084.1%2068.1%20152.3%20152.1%20152.3%2030.5%200%2058.9-9%2082.7-24.4l6.9-4.8L414.3%20448l33.7-34.3-108.5-108.6%205-7.1zm-43.1-166.8c22.7%2022.7%2035.2%2052.9%2035.2%2085s-12.5%2062.3-35.2%2085c-22.7%2022.7-52.9%2035.2-85%2035.2s-62.3-12.5-85-35.2c-22.7-22.7-35.2-52.9-35.2-85s12.5-62.3%2035.2-85c22.7-22.7%2052.9-35.2%2085-35.2s62.3%2012.5%2085%2035.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-search($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-search-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-send-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20249.6l116.6%2051.3L269.8%20416%20416%2096%2096%20249.6zm132.1%2046.9l155.7-166.2-114.6%20248.9-41.1-82.7zm153.7-168.2l-165%20157.1L134%20249l247.8-120.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-send-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-send-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-send-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20249.6l106%2046.7L416%2096zM416%2096L217.9%20311.7%20269.8%20416z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-send($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-send-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-settings-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M189.2%2083c6.7%208.5%2014.9%2015.8%2024.1%2021.4%2013.3%208.2%2028%2012.5%2042.7%2012.5%2014.7%200%2029.4-4.3%2042.7-12.5%209.2-5.6%2017.3-12.9%2024.1-21.4%204.7%201.7%209.3%203.6%2013.8%205.7-3.2%2024.8%204.3%2046.5%2022.3%2064.4%2017.9%2017.9%2037.4%2026.9%2058%2026.9%202.1%200%204.2-.1%206.3-.3%202.1%204.5%204%209.2%205.8%2013.9-21.9%2016.4-33.9%2038.2-33.9%2062.3%200%2024.2%2011.9%2045.9%2033.8%2062.3-1.7%204.7-3.7%209.4-5.8%2013.9-2.1-.2-4.2-.3-6.2-.3-20.7%200-40.2%209.1-58.1%2026.9-17.9%2018-25.4%2039.7-22.3%2064.4-4.5%202.1-9.1%204-13.8%205.7-6.7-8.5-14.9-15.8-24.1-21.4-13.3-8.2-28-12.5-42.7-12.5s-29.4%204.3-42.7%2012.5c-9.2%205.6-17.3%2012.9-24.1%2021.4-4.7-1.7-9.3-3.6-13.8-5.7%203.2-24.9-4.3-46.5-22.3-64.4-15.3-15.3-33.3-23-53.5-23-3.5%200-7.1.2-10.8.7-2.1-4.5-4-9.1-5.7-13.8%208.5-6.7%2015.8-14.9%2021.5-24.1%208.2-13.3%2012.6-28.1%2012.6-42.7%200-24.2-12-45.9-34-62.4%201.7-4.7%203.7-9.4%205.8-13.9%202.1.2%204.2.3%206.2.3%2020.7%200%2040.2-9.1%2058.1-26.9%2017.9-18%2025.4-39.7%2022.3-64.4%204.4-1.9%209-3.8%2013.7-5.5M256%20368c29.9%200%2058-11.6%2079.2-32.8S368%20285.9%20368%20256s-11.6-58-32.8-79.2S285.9%20144%20256%20144s-58%2011.6-79.2%2032.8S144%20226.1%20144%20256c0%2061.8%2050.2%20112%20112%20112m60.4-304c-13%2022.2-36.4%2036.9-60.4%2036.9-23.9%200-47.4-14.7-60.4-36.9-13.4%204-26.2%209.3-38.2%2015.8%206.5%2024.9%201.3%2045-15.6%2062-13.3%2013.3-28.7%2022.2-46.7%2022.2-4.9%200-9.9-.6-15.2-2-6.6%2012-11.9%2024.8-15.9%2038.2%2022.2%2013%2037%2031.9%2037%2055.8s-14.8%2047.4-37%2060.4c4%2013.4%209.3%2026.2%2015.8%2038.2%206.9-1.8%2013.5-2.7%2019.7-2.7%2016.1%200%2030%206.1%2042.2%2018.3%2017%2016.9%2022.1%2037.1%2015.6%2062%2012.1%206.5%2024.8%2011.8%2038.2%2015.8%2013-22.2%2036.5-36.9%2060.4-36.9s47.4%2014.7%2060.4%2036.9c13.4-4%2026.2-9.3%2038.2-15.8-6.5-24.9-1.3-45%2015.6-62%2013.3-13.3%2028.7-22.2%2046.8-22.2%204.9%200%209.9.6%2015.2%202%206.5-12.1%2011.8-24.9%2015.8-38.2-22.1-13-36.8-31.9-36.8-55.8s14.8-42.8%2036.9-55.8c-4-13.3-9.3-26.2-15.8-38.2-5.3%201.4-10.4%202-15.3%202-18%200-33.3-8.9-46.7-22.2-16.9-16.9-22.1-37.1-15.6-62-12-6.5-24.8-11.8-38.2-15.8zM256%20352c-52.9%200-96-43-96-96s43-96%2096-96%2096%2043%2096%2096-43%2096-96%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-settings-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-settings-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-settings-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M411.1%20256c0-23.9%2014.8-42.8%2036.9-55.8-4-13.3-9.3-26.2-15.8-38.2-24.9%206.5-45-3.2-62-20.2-16.9-16.9-22.1-37.1-15.6-62-12-6.5-24.8-11.8-38.2-15.8-13%2022.2-36.4%2036.9-60.4%2036.9-23.9%200-47.4-14.7-60.4-36.9-13.4%204-26.2%209.3-38.2%2015.8%206.5%2024.9%201.3%2045-15.6%2062-16.9%2016.9-37.1%2026.7-61.9%2020.2-6.6%2012-11.9%2024.8-15.9%2038.2%2022.2%2013%2037%2031.9%2037%2055.8s-14.8%2047.4-37%2060.4c4%2013.4%209.3%2026.2%2015.8%2038.2%2024.9-6.5%2045-1.3%2061.9%2015.6%2017%2016.9%2022.1%2037.1%2015.6%2062%2012.1%206.5%2024.8%2011.8%2038.2%2015.8%2013-22.2%2036.5-36.9%2060.4-36.9s47.4%2014.7%2060.4%2036.9c13.4-4%2026.2-9.3%2038.2-15.8-6.5-24.9-1.3-45%2015.6-62%2016.9-16.9%2037.1-26.7%2062-20.2%206.5-12.1%2011.8-24.9%2015.8-38.2-22.1-13-36.8-31.9-36.8-55.8zM256%20352c-52.9%200-96-43-96-96s43-96%2096-96%2096%2043%2096%2096-43%2096-96%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-settings($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-settings-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-share-alt-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22none%22%20d%3D%22M304%20291v67.3l120.5-110.5L304%20133.3v61.9l-13.7%202c-33.7%204.8-63.8%2014.5-89.5%2028.8-23.2%2012.9-43.5%2030-60.4%2050.8-17.4%2021.4-31.6%2047-42.7%2077.1%2016-14.1%2032.7-25.6%2051.2-34.7%2038-18.9%2083.5-28.2%20139.1-28.2h16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20248L288%2096v85.3C138.7%20202.7%2085.3%20309.3%2064%20416c53.3-74.7%20117.3-108.8%20224-108.8v87.5L448%20248zm-299.1%2071.2c-18.5%209.2-35.2%2020.6-51.2%2034.7%2011.1-30.2%2025.3-55.7%2042.7-77.1%2016.9-20.8%2037.2-37.9%2060.4-50.8%2025.7-14.3%2055.8-24%2089.5-28.8L304%20196v-64l120.5%20115.8L304%20360v-68l-16-1c-55.6%200-101.1%209.3-139.1%2028.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-share-alt-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-share-alt-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-share-alt-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20248L288%2096v85.3C138.7%20202.7%2085.3%20309.3%2064%20416c53.3-74.7%20117.3-108.8%20224-108.8v87.5L448%20248z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-share-alt($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-share-alt-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-share-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%20144v16h112v272H112V160h112v-16H96v304h320V144z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M193.1%20118.1l-11.6-11.6L256%2032l74.5%2074.5-11.6%2011.6-54.7-54.7v243h-16.4v-243z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-share-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-share-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-share-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20144v162h-16V144H96v304h320V144zM264%2063.4l54.8%2054.7%2011.6-11.6L256%2032l-74.5%2074.5%2011.7%2011.6L248%2063.4V144h16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-share($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-share-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-shirt-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M372.5%2092.6C352%2077.9%20332%2063.9%20310%2063.9s-22%208-54%208-32-8-54-8-42%2014-62.5%2028.7C107.9%20115.3%2048%20179%2048%20179l80%2093.2V448h256V272.6l80-93.7s-59.9-63.6-91.5-86.3zM213.1%2080.8c9.9%200%2025.4%207.3%2042.9%207.3s33.1-7.3%2042.9-7.3c6.9%200%2011.1%203.6%2011.1%2016%200%2023.3-24.2%2044-54%2044s-54-21.3-54-44c0-12.3%204.1-16%2011.1-16zM384%20200.1c0-4.4-3.6-8-8-8s-8%203.6-8%208V432H144V200.1c0-4.4-3.6-8-8-8s-8%203.6-8%208v49.2c-13.6-16-51.4-60.9-58.6-69.6%2018-18.7%2056.9-57.9%2079.5-74.1%2012.9-9.3%2026.2-18.8%2039.2-23.2-1.4%204.1-2.1%208.9-2.1%2014.5%200%2015.7%207.9%2031.3%2021.6%2042.8%2013.3%2011.1%2030.5%2017.2%2048.4%2017.2%2018%200%2035.2-6%2048.4-16.9%2013.7-11.4%2021.6-27.1%2021.6-43.1%200-5.6-.7-10.4-2.1-14.5%2013%204.4%2026.3%2013.9%2039.2%2023.2%2022.6%2016.2%2061.4%2055.4%2079.4%2074.1-7.4%209-46.1%2054.9-58.6%2069.6v-49.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-shirt-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-shirt-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-shirt-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M372.5%2092.7C352%2078%20332%2064%20310%2064s-22%208-54%208-32-8-54-8-42%2014-62.5%2028.7C107.9%20115.4%2048%20179%2048%20179s34.6%2041.3%2051.7%2061c12.7%2014.7%2016%2017.8%2016%200%200-42.7%200-48%206.3-48s6%203.6%206%208v248h256V200c0-4.4-.3-8%206-8s6.3%205.3%206.3%2048c0%2017.8%203.3%2014.7%2016%200%2017-19.7%2051.7-61%2051.7-61s-59.9-63.6-91.5-86.3zM256%20141c-30%200-54-20.7-54-44%200-30%2024-8.7%2054-8.7%2029.8%200%2054-21.3%2054%208.7%200%2023.3-24.2%2044-54%2044z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-shirt($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-shirt-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-shuffle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M443.3%20325.7l-35.6-35.4c-3.1-3.1-8.2-3.1-11.3%200-3.1%203.1-3.1%208.2%200%2011.3L423%20328h-99L198.2%20170.8c-1.5-1.8-3.9-2.8-6.3-2.8H72c-4.4%200-8%203.6-8%208s3.6%208%208%208h116.3l57.3%2072-57.3%2072H72c-4.4%200-8%203.6-8%208s3.6%208%208%208h120c2.4%200%204.6-1%206.1-2.8l57.9-72.7%2057.9%2072.7c1.5%201.8%203.8%202.8%206.1%202.8h105l-26.6%2026.4c-3.1%203.1-3.1%208.2%200%2011.3%201.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3l33.6-33.4c6.2-6.3%206.2-16.4-.1-22.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M323.7%20184h99.2l-26.6%2026.4c-3.1%203.1-3.1%208.2%200%2011.3%203.1%203.1%208.2%203.1%2011.3%200l35.6-35.4c6.2-6.2%206.2-16.3%200-22.5l-33.6-33.4c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7%202.3c-3.1%203.1-3.1%208.2%200%2011.3l26.6%2026.4H320c-2.4%200-4.6%201-6.1%202.8l-47.3%2060.2%2010.5%2012.4%2046.6-59.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-shuffle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-shuffle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-skip-backward-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%2096v320h79V274.2L416%20416V96L175%20237.8V96H96zm79.6%20160l7.6-4.4L400%20124v264L183.1%20260.4l-7.5-4.4zM112%20112h47v288h-47V112z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-skip-backward-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-skip-backward-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-skip-backward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%2096v320h79V274.2L416%20416V96L175%20237.8V96H96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-skip-backward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-skip-backward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-skip-forward-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337%2096v141.8L96%2096v320l241-141.8V416h79V96h-79zm-8.1%20164.4L112%20388V124l216.9%20127.6%207.6%204.4-7.6%204.4zM400%20400h-47V112h47v288z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-skip-forward-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-skip-forward-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-skip-forward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337%2096v141.8L96%2096v320l241-141.8V416h79V96h-79z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-skip-forward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-skip-forward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-snow-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M431.7%20348.4l-37.6-21.9c13.1-16.9%2032.1-24.8%2032.4-24.9%204.3-1.7%206.6-6.7%205.2-11.1-1.4-4.4-6.1-6.6-10.4-4.8-1.1.5-25.1%2010.3-41.3%2032.5L273.2%20256l106.7-62.2c16.1%2022.2%2040.2%2032.1%2041.3%2032.5%204.3%201.7%209-.4%2010.4-4.8%201.4-4.4-.9-9.4-5.2-11.1-.2-.1-19.3-7.9-32.4-24.9l37.6-21.9c4.1-2.4%205.5-7.7%203.1-11.9s-7.6-5.6-11.8-3.2l-37.6%2021.9c-7.9-19.8-5.2-40.5-5.1-40.7.7-4.6-2.4-9.2-6.9-10.1-4.5-.9-8.7%202.1-9.3%206.7-.2%201.2-3.5%2027.1%207.5%2052.4L265%20240.9v-124c27-3%2047.5-19%2048.5-19.8%203.7-2.9%204-8%201-11.5-3.1-3.5-8.4-3.9-12-1-.2.1-16.4%2012.9-37.4%2015.8V56.7c0-4.8-4.2-8.7-9-8.7s-9%203.9-9%208.7v43.7c-21-3-37.2-15.7-37.4-15.8-3.7-2.9-9-2.4-12.1%201-3.1%203.5-2.7%208.6.9%2011.5.9.7%2021.5%2016.8%2048.5%2019.8V241l-106.5-62.2c11-25.2%207.5-51.2%207.4-52.4-.7-4.6-4.8-7.6-9.3-6.7-4.5.9-7.6%205.5-6.9%2010.1%200%20.2%202.8%2020.8-5.1%2040.7L89%20148.6c-4.1-2.4-9.4-1-11.8%203.2-2.4%204.2-1%209.5%203.2%2011.9l37.6%2021.9c-13%2016.8-32.1%2024.8-32.3%2024.9-4.3%201.7-6.6%206.7-5.2%2011.1%201.4%204.4%206.1%206.6%2010.4%204.8%201.1-.4%2025.1-10.3%2041.3-32.5L238.8%20256l-106.7%2062.2C116%20296%2091.9%20286.1%2090.8%20285.7c-4.3-1.7-9%20.4-10.4%204.8-1.4%204.4.9%209.4%205.2%2011.1.2.1%2019.3%208%2032.3%2024.9l-37.6%2021.9c-4.1%202.4-5.5%207.7-3.1%2011.9s7.6%205.6%2011.8%203.2l37.6-21.9c8%2019.9%205.2%2040.5%205.1%2040.7-.7%204.6%202.4%209.2%206.9%2010.1%204.5.9%208.7-2.1%209.3-6.7.2-1.2%203.5-27.1-7.5-52.4L247%20271.1v124.1c-27%203-47.5%2019-48.5%2019.8-3.7%202.9-4%208-1%2011.5%203.1%203.5%208.4%203.9%2012%201%20.2-.1%2016.4-12.8%2037.4-15.8v43.7c0%204.8%204.2%208.7%209%208.7s9-3.9%209-8.7v-43.7c21%203%2037.2%2015.7%2037.4%2015.8%203.7%202.9%209%202.4%2012.1-1%203.1-3.5%202.7-8.6-.9-11.5-.9-.7-21.5-16.8-48.5-19.8V271.1l106.5%2062.2c-11%2025.2-7.5%2051.2-7.4%2052.4.7%204.6%204.8%207.6%209.3%206.7%204.5-.9%207.6-5.5%206.9-10.1%200-.2-2.8-20.9%205.1-40.7l37.6%2021.9c4.1%202.4%209.4%201%2011.8-3.2%202.4-4.2%201-9.5-3.1-11.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-snow-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-snow-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-snow-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M435.7%20341.5l-29.1-17c10.7-10.4%2022.7-15.4%2022.8-15.5%208.3-3.3%2012.6-12.6%209.8-21-2.1-6.5-8.2-10.9-15-10.9-2.1%200-4.1.4-6%201.2-2.5%201-23.5%209.9-40.3%2029.5L290.1%20256l87.9-51.8c17.1%2020.1%2039.2%2029.1%2040.3%2029.6%201.9.8%204%201.2%206%201.2%206.8%200%2012.8-4.4%2015-10.9%202.8-8.5-1.5-17.7-9.8-21-.1-.1-12.2-5.1-22.9-15.5l29.1-17c7.9-4.6%2010.6-14.8%206.1-22.8-3-5.2-8.5-8.4-14.4-8.4-2.9%200-5.8.8-8.3%202.3l-29%2016.9c-3.5-14.5-1.8-27.5-1.8-27.6%201.3-8.9-4.5-17.3-13.2-19.1-1.1-.2-2.2-.3-3.3-.3-7.8%200-14.3%205.6-15.6%2013.4l-.1.3c-2.4%2010.4-3.1%2030.8%203.5%2050.9L273%20227.3V123.7c25-4.7%2041.8-16.3%2044.4-18.4%204.2-3.3%206.9-8.1%207.4-12.8.3-3.8-.9-7.5-3.3-10.3-3.2-3.6-8.4-5.6-14.3-5.6-4.4%200-8.4%201.2-11.4%203.4-1.4.9-8.8%206.5-22.8%2010.5V56.7c0-9-7.8-16.7-17-16.7s-17%207.6-17%2016.7v33.7c-11-3.7-18.6-8.7-22.7-11.4-4.1-2.8-9.1-4.2-12.1-4.2-2.9%200-9.8.1-13.7%206.6-3%204.9-2.8%209.2-2.4%2011.8.5%202.9%201.9%206.3%205.5%2010.2%203.6%203.9%2023.4%2016.1%2045.4%2020.3v103l-91.6-51.3c9.4-26%207.4-49.9%207.4-50.2-1.2-8.2-7-13.7-14.6-13.7-1.1%200-2.2.1-3.2.3-8.5%201.8-14%2010-12.7%2019.1.1.6%201.9%2013.3-1.6%2027.6l-29.8-16.9c-2.5-1.5-5.4-2.3-8.3-2.3-5.9%200-11.4%203.2-14.4%208.4-4.5%207.9-1.8%2018.1%206.1%2022.8l29.1%2017c-10.7%2010.3-22.7%2015.4-22.8%2015.5-8.3%203.3-12.6%2012.6-9.8%2021%202.1%206.5%208.2%2010.9%2015%2010.9%202.1%200%204.1-.4%206-1.2%201-.4%2023.1-9.5%2040.3-29.6l89.9%2051.8-89.9%2051.8c-16.7-19.7-37.7-28.5-40.3-29.5-1.9-.8-4-1.2-6-1.2-6.8%200-12.8%204.4-15%2010.9-2.8%208.5%201.5%2017.7%209.7%2021%20.1.1%2012.2%205.2%2022.9%2015.5l-29.1%2017c-7.9%204.6-10.6%2014.8-6.1%2022.8%203%205.2%208.5%208.4%2014.4%208.4%202.9%200%205.8-.8%208.3-2.3l29-16.9c3.5%2014.5%201.8%2027.5%201.8%2027.6-1.3%208.9%204.5%2017.2%2013.2%2019.1%201.1.2%202.2.3%203.3.3%207.9%200%2014.5-5.8%2015.6-13.7.5-3.4%203.2-26.8-5.4-50.2l88.6-51.3v103c-21%204.2-39.8%2016.4-45.4%2021.3l-.1.1c-2.9%202.3-4.6%205.6-4.9%209.3-.4%204.6%201.4%209.6%205.1%2013.7%201.2%201.4%205%205.6%2010.8%205.6%203.1%200%206.1-1.2%209.2-3.6l.5-.4c1-.9%2013-8.8%2025-12.7v33.7c0%209%207.8%2016.7%2017%2016.7s17-7.6%2017-16.7v-33.9c15%204%2022.2%2010.6%2023.8%2011.6%202.9%202.2%206.8%203.3%2010.9%203.3%205.6%200%2010.6-2%2013.7-5.6%202.3-2.7%203.5-6.1%203.2-9.6-.4-4.7-3.5-9.7-8.1-13.4-.2-.2-16.5-14.4-43.5-19.4V285.7l86.6%2051.1c-7.2%2021.3-4.8%2041.6-3.3%2049.8v.2c1.2%207.8%206.3%2013.6%2014.5%2013.6%201.1%200%202.2-.1%203.3-.3%208.8-1.8%2014.9-10.3%2013.7-19-.1-.8-1.4-13.6%202-27.8l29.1%2017.1c2.5%201.5%205.4%202.5%208.3%202.5%206%200%2011.5-3.4%2014.4-8.6%204.5-7.8%201.8-18.2-6.1-22.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-snow($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-snow-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-speedometer-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064C132.288%2064%2032%20164.226%2032%20287.938c0%2056.975%2021.283%20108.97%2056.316%20148.5%203.55%204.006%207.24%207.82%2011.066%2011.562%203.06-3.49%206.232-6.834%209.54-10.14.48-.48.97-.948%201.455-1.423%2018.78-18.426%2040.52-32.95%2064.664-43.16%2025.634-10.843%2052.872-16.34%2080.96-16.34s55.324%205.497%2080.957%2016.34c24.144%2010.21%2045.884%2024.734%2064.664%2043.16.485.475.977.94%201.457%201.422%203.307%203.306%206.48%206.65%209.54%2010.14%203.824-3.742%207.515-7.557%2011.065-11.562%2035.033-39.53%2056.316-91.525%2056.316-148.5C480%20164.226%20379.712%2064%20256%2064zm191.66%20305.177c-8.662%2020.48-20.428%2039.092-35.043%2055.776-40.39-39.51-95.653-63.945-156.617-63.945s-116.228%2024.33-156.617%2063.84c-14.615-16.685-26.38-35.172-35.044-55.653A206.047%20206.047%200%200%201%2048.165%20296.5H79.5v-16H48.166c.945-25%206.363-50.047%2016.173-73.238%209.37-22.157%2022.375-42.43%2038.69-60.11l26.933%2026.893%205.496-5.538%205.276-5.264-.02-.027.547-.552-26.95-26.984c17.86-16.647%2038.003-29.894%2060.478-39.4a206.128%20206.128%200%200%201%2072.71-16.174V117.5h16V80.104c26%20.945%2050.016%206.363%2073.207%2016.173%2022.437%209.49%2042.92%2022.706%2060.762%2039.312l-26.976%2027.068.577.547-.003.02%205.285%205.245%205.5%205.503%2027.026-27.057c16.356%2017.703%2029.392%2038.148%2038.78%2060.345%209.81%2023.192%2015.23%2048.24%2016.174%2073.24H431.5v16h32.334a205.96%20205.96%200%200%201-16.173%2072.677z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368.48%20174.545l-85.485%2073.727A47.72%2047.72%200%200%200%20256%20239.938c-26.466%200-48%2021.533-48%2048%200%2010.48%203.386%2020.178%209.107%2028.08l-11.948%2011.948%2011.31%2011.313%2012.034-12.034c7.795%205.47%2017.273%208.69%2027.496%208.69%2026.467%200%2048-21.532%2048-48%200-10.386-3.327-20.004-8.956-27.867l74.85-84.11-1.415-1.415zM256%20319.938c-17.673%200-32-14.326-32-32%200-17.673%2014.327-32%2032-32s32%2014.327%2032%2032c0%2017.673-14.327%2032-32%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-speedometer-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-speedometer-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-speedometer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M417%20278.742V278h29.814c-.93-23-6.056-45.61-14.83-66.15-8.644-20.23-20.504-38.666-35.258-54.563l-24.867%2024.646-11.23-10.992%2024.788-24.678c-16.187-14.836-34.86-26.742-55.515-35.392C308.48%20101.897%20286%2097.092%20263%2096.186V130h-15V96.186c-23%20.894-44.95%205.7-66.404%2014.685-20.353%208.524-38.958%2020.458-55.315%2035.472l24.797%2024.583-.55.55.002.005-.29.335-10.27%2010.203-24.78-24.48c-14.77%2015.933-26.604%2034.244-35.176%2054.31C71.24%20232.388%2066.117%20255%2065.187%20278H94v16H65.187c.926%2022%205.915%2044.432%2014.83%2065.297%207.688%2018%2018.397%2034.664%2031.83%2049.926%2038.785-37.377%2089.958-57.928%20144.154-57.928%2054.114%200%20105.287%2020.676%20144.155%2058.135%2013.354-15.175%2024.06-31.98%2031.83-50.166C440.9%20338.396%20445.89%20316%20446.815%20294H417v-15.258zm-113%209.196c0%2026.467-21.533%2048-48%2048-10.223%200-19.7-3.223-27.496-8.69L216.47%20339.28l-11.31-11.313%2011.947-11.948c-5.722-7.903-9.106-17.603-9.106-28.08%200-26.468%2021.534-48%2048-48a47.72%2047.72%200%200%201%2026.995%208.333l73.484-65.727%201.413%201.414-62.85%2076.11c5.63%207.863%208.957%2017.48%208.957%2027.868z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064C132.288%2064%2032%20164.226%2032%20287.938c0%2056.975%2021.283%20108.97%2056.316%20148.5%203.55%204.006%207.24%207.82%2011.066%2011.562h22.193c31.713-39.103%2080.144-64.096%20134.424-64.096S358.71%20408.897%20390.423%20448h22.193c3.825-3.742%207.516-7.557%2011.066-11.562%2035.033-39.53%2056.316-91.525%2056.316-148.5C480%20164.226%20379.71%2064%20256%2064zm154.744%20356.797c-3.05%203.408-6.392%206.863-10.213%2010.564l-.375.366-.348-.393c-2.63-2.97-5.493-5.985-8.76-9.22-.274-.27-.554-.54-.833-.807l-.504-.485c-17.258-16.765-37.234-29.966-59.375-39.237C306.8%20371.727%20281.79%20366.73%20256%20366.73c-25.792%200-50.802%204.997-74.337%2014.853-22.14%209.27-42.117%2022.473-59.375%2039.238l-.504.486c-.28.268-.558.535-.833.807-3.265%203.234-6.13%206.25-8.758%209.22l-.348.393-.377-.365c-3.82-3.7-7.162-7.155-10.212-10.563-33.514-37.44-51.97-85.63-51.97-135.685%200-54.666%2021.5-106.053%2060.544-144.694C148.87%20101.778%20200.78%2080.5%20256%2080.5c55.22%200%20107.13%2021.28%20146.17%2059.918%2039.043%2038.642%2060.545%2090.03%2060.545%20144.694%200%2050.056-18.456%2098.243-51.97%20135.685z%22%2F%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22287.938%22%20r%3D%2232%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-speedometer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-speedometer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-square-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M216%20357c.4%200%20.4-.1%200-.2-.4.1-.5.2%200%20.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432%2080v352H80V80h352m16-16H64v384h384V64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-square-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-square-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-square-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M216%20357c.4%200%20.4-.1%200-.2-.4.1-.5.2%200%20.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2064H64v384h384V64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-square($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-square-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-star-half-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M172.248%20304.93L117.57%20464.005%20256%20365.37l138.445%2098.634-54.685-159.067L480%20207H308.613L256%2048.005%20203.402%20207H32l140.248%2097.93zM256%20100.75L297%20224h131l-108%2074.71%2042.623%20122.482L256%20345.257V100.75z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-star-half($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-star-half-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-star-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20207H308.6L256%2047.9%20203.4%20207H32l140.2%2097.9L117.6%20464%20256%20365.4%20394.4%20464l-54.7-159.1L480%20207zM362.6%20421.2l-106.6-76-106.6%2076L192%20298.7%2084%20224h131l41-123.3L297%20224h131l-108%2074.6%2042.6%20122.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-star-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-star-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-star-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20207H308.6L256%2047.9%20203.4%20207H32l140.2%2097.9L117.6%20464%20256%20365.4%20394.4%20464l-54.7-159.1L480%20207z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-star($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-star-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-stats-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M176%20448h64V64h-64v384zm16-368h32v352h-32V80zM80%20448h64V288H80v160zm16-144h32v128H96V304zM272%20448h64V224h-64v224zm16-208h32v192h-32V240zM368%20128v320h64V128h-64zm48%20304h-32V144h32v288z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-stats-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-stats-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-stats-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M176%20448h64V64h-64v384zM80%20448h64V288H80v160zM272%20448h64V224h-64v224zM368%20128v320h64V128h-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-stats($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-stats-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-stopwatch-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M397.6%20146.7l-1.8-1.7h18.4l8.5%207.8%2022.5-22.8-40.8-40.3-23.2%2022.3%208.8%209.2v18.6l-5-4.7c-31.3-28.3-70-45.2-113-48.9V48h-32v38h-2c-43.7%203-85%2022.5-116%2053v-17.8l8.9-9.2L108%2089.8%2067.2%20130l22.5%2022.8%208.5-7.8H116c-.3%200-.7.7-1%201.1-32.8%2035.1-51%2080.9-51%20128.5C64%20379%20150.1%20464%20256.1%20464%20361.9%20464%20448%20379.1%20448%20274.7c0-47.6-18-93.1-50.4-128zm-141.3%20299c-95.5%200-173.1-76.7-173.1-170.9%200-94.3%2077.7-170.9%20173.1-170.9%2095.5%200%20173.1%2076.7%20173.1%20170.9.1%2094.2-77.6%20170.9-173.1%20170.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20257.3V128h-16v129.4c-12.5%204.3-24%2016.5-24%2030.3%200%2014.7%2010%2027%2024%2030.5l8%2017.8%208-17.8c14-3.5%2024-15.8%2024-30.5%200-14.5-10.5-26.7-24-30.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-stopwatch-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-stopwatch-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-stopwatch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M397.6%20146.7l-1.8-1.7h18.4l8.5%207.8%2022.5-22.8-40.8-40.3-23.2%2022.3%208.8%209.2v18.6l-5-4.7c-31.3-28.3-70-45.2-113-48.9V48h-32v38h-2c-43.7%203-85%2022.5-116%2053v-17.8l8.9-9.2L108%2089.8%2067.2%20130l22.5%2022.8%208.5-7.8H116c-.3%200-.7.7-1%201.1-32.8%2035.1-51%2080.9-51%20128.5C64%20379%20150.1%20464%20256.1%20464%20361.9%20464%20448%20379.1%20448%20274.7c0-47.6-18-93.1-50.4-128zM264%20318.2l-8%2017.8-8-17.8c-14-3.5-24-15.8-24-30.5%200-13.8%2011.5-26%2024-30.3V128h16v129.3c13.5%203.7%2024%2015.9%2024%2030.4%200%2014.7-10%2027-24%2030.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-stopwatch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-stopwatch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-subway-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M347.2%20464H370l-49.3-48h-22.8l16.1%2016H198l16.1-16h-22.8L142%20464h22.8l17.1-16h148.2zM200%2072h112c4.4%200%208%203.6%208%208s-3.6%208-8%208H200c-4.4%200-8-3.6-8-8s3.6-8%208-8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M344%2064c26.5%200%2048%2021.5%2048%2048v224c0%2026.5-21.5%2048-48%2048H168c-26.5%200-48-21.5-48-48V112c0-26.5%2021.5-48%2048-48h176M168%20256h178c17.6%200%2032-14.4%2032-32v-96c0-17.6-14.3-32-32-32H168c-17.6%200-32%2014.4-32%2032v96c0%2017.6%2014.3%2032%2032%2032m168.5%20119.5c24.3%200%2044-19.7%2044-44s-19.7-44-44-44-44%2019.7-44%2044%2019.7%2044%2044%2044m-160%200c24.3%200%2044-19.7%2044-44s-19.7-44-44-44-44%2019.7-44%2044%2019.7%2044%2044%2044M344%2048H168c-35.3%200-64%2028.7-64%2064v224c0%2035.3%2028.7%2064%2064%2064h176c35.3%200%2064-28.7%2064-64V112c0-35.3-28.7-64-64-64zM168%20240c-8.8%200-16-7.2-16-16v-96c0-8.8%207.2-16%2016-16h178c8.8%200%2016%207.2%2016%2016v96c0%208.8-7.2%2016-16%2016H168zm168.5%20119.5c-15.5%200-28-12.5-28-28s12.5-28%2028-28%2028%2012.5%2028%2028-12.5%2028-28%2028zm-160%200c-15.5%200-28-12.5-28-28s12.5-28%2028-28%2028%2012.5%2028%2028-12.5%2028-28%2028z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-subway-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-subway-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-subway-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M344%2048H168c-35.2%200-64%2028.8-64%2064v224c0%2035.2%2028.8%2064%2064%2064h176c35.2%200%2064-28.8%2064-64V112c0-35.2-28.8-64-64-64zM200%2072h112c4.4%200%208%203.6%208%208s-3.6%208-8%208H200c-4.4%200-8-3.6-8-8s3.6-8%208-8zm-32%20304c-15.5%200-28-12.5-28-28s12.5-28%2028-28%2028%2012.5%2028%2028-12.5%2028-28%2028zm176%200c-15.5%200-28-12.5-28-28s12.5-28%2028-28%2028%2012.5%2028%2028-12.5%2028-28%2028zm40-152c0%208.8-7.2%2016-16%2016H144.2c-8.8%200-16.2-7.2-16.2-16v-95.8c0-8.8%207.4-16.2%2016.2-16.2H368c8.8%200%2016%207.4%2016%2016.2V224zM369.2%20464H392l-49.3-48h-22.8l16.1%2016H176l16.1-16h-22.8L120%20464h22.8l17.1-16h192.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-subway($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-subway-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-sunny-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M248%20400h16v64h-16zM248%2048h16v64h-16zM48%20248h64v16H48zM400%20248h64v16h-64z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M148.452%20352.163l11.313%2011.314-45.254%2045.254-11.313-11.312zM397.49%20103.262l11.313%2011.313-45.255%2045.255-11.313-11.314z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M159.905%20148.52l-11.314%2011.313-45.253-45.254%2011.313-11.315zM408.67%20397.42l-11.313%2011.315-45.255-45.255%2011.314-11.313z%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20176c44.1%200%2080%2035.9%2080%2080s-35.9%2080-80%2080-80-35.9-80-80%2035.9-80%2080-80m0-16c-52.9%200-96%2043.1-96%2096s43.1%2096%2096%2096%2096-43.1%2096-96-43.1-96-96-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-sunny-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-sunny-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-sunny-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M248%20400h16v64h-16zM248%2048h16v64h-16zM48%20248h64v16H48zM400%20248h64v16h-64z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M148.452%20352.163l11.313%2011.314-45.254%2045.254-11.313-11.312zM397.49%20103.262l11.313%2011.313-45.255%2045.255-11.313-11.314z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M159.905%20148.52l-11.314%2011.313-45.253-45.254%2011.313-11.315zM408.67%20397.42l-11.313%2011.315-45.255-45.255%2011.314-11.313z%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20160c-52.9%200-96%2043.1-96%2096s43.1%2096%2096%2096%2096-43.1%2096-96-43.1-96-96-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-sunny($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-sunny-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-swap-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M389.5%2093l-11.3%2011.6L449%20176H192v16h257l-70.8%2070.9%2011.3%2011.2%2090.5-90.6zM122.5%20236.9l11.3%2011.6L63%20320h257v16H63l70.8%2070.9-11.3%2011.1L32%20327.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-swap($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-swap-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-switch-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144%20320c26.5%200%2048%2021.5%2048%2048s-21.5%2048-48%2048-48-21.5-48-48%2021.5-48%2048-48m0-16c-35.3%200-64%2028.7-64%2064s28.7%2064%2064%2064%2064-28.7%2064-64-28.7-64-64-64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M367.2%20288c44.4%200%2080.6%2036.1%2080.6%2080.5s-36%2079.5-80.4%2079.5h-223c-44.4%200-80.5-35.1-80.5-79.5S100%20288%20144.4%20288H367m.5-16h-223C91.2%20272%2048%20315.2%2048%20368.5S91.2%20464%20144.5%20464h223c53.3%200%2096.5-42.2%2096.5-95.5S420.8%20272%20367.5%20272z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%2096c26.5%200%2048%2021.5%2048%2048s-21.5%2048-48%2048-48-21.5-48-48%2021.5-48%2048-48m0-16c-35.3%200-64%2028.7-64%2064s28.7%2064%2064%2064%2064-28.7%2064-64-28.7-64-64-64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M145%2064h222.5c44.4%200%2080.5%2036.1%2080.5%2080.5S411.9%20224%20367.5%20224h-223c-44.4%200-80.4-35.1-80.4-79.5S100.4%2064%20144.8%2064m-.3-16C91.2%2048%2048%2091.2%2048%20144.5S91.2%20240%20144.5%20240h223c53.3%200%2096.5-42.2%2096.5-95.5S420.8%2048%20367.5%2048h-223z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-switch-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-switch-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-switch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M367.5%20272h-223C91.2%20272%2048%20315.2%2048%20368.5S91.2%20464%20144.5%20464h223c53.3%200%2096.5-42.2%2096.5-95.5S420.8%20272%20367.5%20272zM144%20432c-35.3%200-64-28.7-64-64s28.7-64%2064-64%2064%2028.7%2064%2064-28.7%2064-64%2064zM144.5%20240h223c53.3%200%2096.5-42.2%2096.5-95.5S420.8%2048%20367.5%2048h-223C91.2%2048%2048%2091.2%2048%20144.5S91.2%20240%20144.5%20240zM368%2080c35.3%200%2064%2028.7%2064%2064s-28.7%2064-64%2064-64-28.7-64-64%2028.7-64%2064-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-switch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-switch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-sync-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M493.4%20256l-31.8%2031.8c9.7-63-9.8-130.2-58.5-178.9-81.2-81.2-213-81.3-294.2%200-16.3%2016.3-29.3%2034.5-39%2054l15.5%207.8c8.9-17.9%2020.8-34.7%2035.7-49.6%2074.3-74.3%20195.3-74.3%20269.7.1%2045.6%2045.6%2063.2%20108.6%2052.9%20168L409.6%20256l-10.8%2010.8L452%20320l52.7-52.7-11.3-11.3zM390.8%20390.8c-74.3%2074.3-195.3%2074.4-269.7%200C75.6%20345.2%2058%20281.9%2068.3%20222.9l33.1%2033.1%2011.3-11.3L60%20192%207.3%20244.7%2018.6%20256l31.8-31.8c-9.8%2063.4%209.7%20130.2%2058.4%20178.9%2081.2%2081.2%20213%2081.2%20294.2%200%2016.3-16.3%2029.3-34.6%2039-54l-15.5-7.8c-8.9%2017.9-20.8%2034.6-35.7%2049.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-sync($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-sync-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-tablet-landscape-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20110v292c0%207.8%206.1%2014%2014%2014h420c7.9%200%2014-6.2%2014-14V110c0-7.8-6.1-14-14-14H46c-7.9%200-14%206.3-14%2014zm16.7%20146.4c0-3.9%203.1-7%207-7s7%203.1%207%207-3.1%207-7%207c-3.8%200-7-3.2-7-7zM470%20256c0%207.7-6.5%2014-14.1%2014-7.5%200-14-6.2-14-14%200-7.7%206.4-14.1%2014-14.1%207.6.1%2014.1%206.4%2014.1%2014.1zm-38-144v288H80V112h352z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-tablet-landscape($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-tablet-landscape-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-tablet-portrait-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M402%2032H110c-7.8%200-14%206.1-14%2014v420c0%207.9%206.2%2014%2014%2014h292c7.8%200%2014-6.1%2014-14V46c0-7.9-6.3-14-14-14zM255.6%2048.7c3.9%200%207%203.1%207%207s-3.1%207-7%207-7-3.1-7-7c0-3.8%203.2-7%207-7zM256%20470c-7.7%200-14-6.5-14-14.1%200-7.5%206.2-14%2014-14%207.7%200%2014.1%206.4%2014.1%2014-.1%207.6-6.4%2014.1-14.1%2014.1zm144-38H112V80h288v352z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-tablet-portrait($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-tablet-portrait-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-tennisball-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%20256c0-114.863-93.13-208-208-208-114.863%200-208%2093.136-208%20208%200%20114.863%2093.137%20208%20208%20208%202.54%200%205.068-.062%207.587-.152a202.8%20202.8%200%200%200%204.258-.19c.85-.048%201.698-.105%202.547-.162.64-.044%201.28-.08%201.917-.13%201.353-.104%202.704-.22%204.054-.352v-.01c97.47-9.473%20175.23-86.228%20186.274-183.222h.057a208.68%20208.68%200%200%200%201.196-16.05h-.048c.095-2.566.158-5.14.158-7.732zm-17.335%200c0%202.568-.066%205.12-.167%207.664-23.64-1.076-46.677-6.106-68.616-15.005-25.79-10.46-48.938-25.832-68.797-45.692-19.86-19.86-35.233-43.007-45.692-68.797-8.903-21.955-13.935-45.013-15.006-68.67%202.527-.1%205.063-.164%207.614-.164%20105.13%200%20190.665%2085.533%20190.665%20190.664zm-381.328%200c0-1.318.023-2.63.05-3.942%2022.476%201.38%2044.388%206.337%2065.3%2014.817%2025.79%2010.458%2048.938%2025.83%2068.798%2045.69s35.232%2043.008%2045.69%2068.8c8.475%2020.895%2013.43%2042.79%2014.815%2065.248-1.328.027-2.656.05-3.99.05-105.13%200-190.664-85.533-190.663-190.663zm210.606%20189.623c-3.273-52.566-24.974-104.198-65.145-144.37-40.186-40.185-91.84-61.888-144.427-65.15%209.173-88.052%2078.52-158.477%20166.075-169.312%202.595%2053.64%2024.36%20106.526%2065.326%20147.49%2040.95%2040.953%2093.812%2062.714%20147.434%2065.323-10.853%2087.515-81.247%20156.83-169.26%20166.02z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-tennisball-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-tennisball-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-tennisball-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48.05%20251.556c0%20.04-.003.077-.004.116h.003v-.116zM260.31%20463.915c.067-.002.134-.006.2-.007-.066%200-.133%200-.2.004v.003z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c-2.586%200-5.29.065-7.852.16l-.148-.007v.006c-5%20.198-10%20.6-16%201.204v-.008c0%20.005.083.008.072.012-96.974%2011.06-173.654%2088.975-183.13%20186.41-.004.018.045.222.042.222h.007c-.512%205-.825%2010-.935%2016h-.004l.004-.152c-.028%201.43-.054%202.777-.054%204.215C48%20370.915%20140.977%20464%20255.84%20464c6.857%200%2014.16-.382%2020.16-1.03v.006c0-.004.213-.008.24-.014%2097.436-9.486%20175.247-86.086%20186.312-183.036.004-.014.088.074.092.074h-.008c.89-8%201.363-15.86%201.363-23.904C464%20141.246%20370.87%2048%20256%2048zM130.63%20266.854c-20.895-8.474-42.788-13.43-65.244-14.816.11-5.374.438-10.695.986-15.952%2052.568%203.275%20104.203%2024.977%20144.375%2065.146%2040.172%2040.17%2061.876%2091.798%2065.152%20144.36-5.258.548-10.58.876-15.955.985-1.385-22.453-6.342-44.344-14.816-65.236-10.46-25.79-25.835-48.938-45.697-68.796-19.86-19.86-43.01-35.233-68.803-45.69zm167.092-52.588c-40.964-40.96-62.73-93.835-65.332-147.467%205.25-.652%2010.568-1.08%2015.94-1.293%201.074%2023.65%206.106%2046.702%2015.008%2068.654%2010.46%2025.79%2025.835%2048.935%2045.696%2068.794%2019.862%2019.86%2043.01%2035.232%2068.803%2045.69%2021.954%208.902%2045.008%2013.934%2068.66%2015.008-.213%205.37-.643%2010.69-1.293%2015.94-53.64-2.603-106.518-24.367-147.482-65.327z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-tennisball($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-tennisball-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-text-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20112c97%200%20176%2062%20176%20138.3%200%2035.9-17.6%2069.2-49.5%2093.9-32.8%2025.4-77.4%2039.3-125.5%2039.3-28.9%200-51-3-69.7-9.3-.6-.2-1.3-.5-2-.7-.3-.1-.6-.2-.8-.2-4.7-1.4-9.7-2.1-14.7-2.1-5.6%200-11.1.9-16.3%202.6l-.3.1c-.6.2-8.9%203.3-11%204.3l-39.6%2017.2c13.8-43.9%2013.8-44.8%2013.8-47.6%200-7.1-2.2-14.1-6.3-20.2-.5-.7-1-1.4-1.6-2.1-.7-.9-1.3-1.7-1.8-2.3-17.4-21.9-26.6-47.1-26.6-73C80%20174%20159%20112%20256%20112m0-16C149.9%2096%2064%20165.1%2064%20250.3c0%2030.7%2011.2%2059.3%2030.4%2083.3.9.9%202.9%203.8%203.6%204.9%200%200-1-1.6-1.1-1.9%202.3%203.3%203.6%207.1%203.6%2011.2%200%201.4-17.9%2058-17.9%2058-1.3%204.4%202.1%208.9%207.6%2010%20.8.2%201.6.2%202.4.2%201.3%200%202.5-.2%203.7-.5l1.6-.6%2050.6-22c.9-.4%209-3.5%2010-3.9l.6-.2s-.1%200-.6.2c3.4-1.2%207.2-1.8%2011.2-1.8%203.6%200%207.1.5%2010.3%201.5.1%200%20.2%200%20.2.1.5.2%201%20.3%201.5.5%2023.1%207.9%2048.4%2010.3%2075.1%2010.3%20106%200%20191-64.1%20191-149.3C448%20165.1%20362%2096%20256%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-text-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-text-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-text-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2096C149.9%2096%2064%20165.1%2064%20250.3c0%2030.7%2011.2%2059.3%2030.4%2083.3.9.9%202.9%203.8%203.6%204.9%200%200-1-1.6-1.1-1.9%202.3%203.3%203.6%207.1%203.6%2011.2%200%201.4-17.9%2058-17.9%2058-1.3%204.4%202.1%208.9%207.6%2010%20.8.2%201.6.2%202.4.2%201.3%200%202.5-.2%203.7-.5l1.6-.6%2050.6-22c.9-.4%209-3.5%2010-3.9l.6-.2s-.1%200-.6.2c3.4-1.2%207.2-1.8%2011.2-1.8%203.6%200%207.1.5%2010.3%201.5.1%200%20.2%200%20.2.1.5.2%201%20.3%201.5.5%2023.1%207.9%2048.4%2010.3%2075.1%2010.3%20106%200%20191-64.1%20191-149.3C448%20165.1%20362%2096%20256%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-text($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-text-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thermometer-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M303%20300.3V78.4c0-25.7-21-46.5-47-46.5s-47%2020.8-47%2046.5v221.9c-29%2016.5-48.9%2047.8-48.9%2083.7%200%2053%2043%2096%2096%2096s96-43%2096-96c0-35.9-20.1-67.3-49.1-83.7zm9.5%20140.3C297.4%20455.7%20277.4%20464%20256%20464c-44.2%200-80.1-35.9-80.1-80%200-28.8%2015.8-55.5%2040.8-69.8l8.3-4.6V78.4c0-16.8%2013.9-30.5%2031-30.5s31%2013.7%2031%2030.5V309.5l7.9%204.6c25.4%2014.4%2041%2041.1%2041%2069.9%200%2021.4-8.4%2041.5-23.4%2056.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272%20322V144c0-8.8-7.2-16-16-16s-16%207.2-16%2016v178c-28%207.1-48.1%2032.2-48.1%2062%200%2035.3%2028.6%2064%2064%2064s64.1-28.7%2064.1-64c-.1-29.8-21-54.9-48-62z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thermometer-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thermometer-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thermometer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M303%20300.3V78.5c0-25.7-21-46.5-47-46.5s-47%2020.8-47%2046.5v221.9c-29%2016.5-49%2047.8-49%2083.6%200%2053%2042.9%2096%2095.9%2096s96.1-43%2096.1-96c0-36-20-67.3-49-83.7zM256.2%20448c-35.3%200-64-28.6-64-64%200-29.8%2019.8-54.9%2047.8-62V144c0-8.8%207.2-16%2016-16s16%207.2%2016%2016v178c27%207.1%2048.1%2032.2%2048.1%2062%200%2035.3-28.6%2064-63.9%2064z%22%2F%3E%3Ccircle%20cx%3D%22255.8%22%20cy%3D%22384.2%22%20r%3D%2248%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thermometer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thermometer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thumbs-down-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M214.3%2048c38.5%200%2080.2%204.1%20112.6%208.1%2021.5%202.6%2034.1%207.5%2046.4%2012.1%2015.9%206.1%2031%2011.8%2066.7%2011.8%204.4%200%208%203.6%208%208s-3.6%208-8%208c-38.7%200-55.8-6.5-72.4-12.9-11.8-4.5-23-8.8-42.6-11.2-48.6-6-111.5-11-165.4-4.1-37.4%204.7-56.1%2012.5-62.2%2027.3-2.1%205%20.5%2010.9%202.7%2016.1%201.5%203.5%202.9%206.6%202.9%209.8%200%205.5-4.1%208.9-8.9%2012.8C87.8%20139%2080%20145.4%2080%20154.6c0%209.1%204.8%2014.8%209.4%2020.3%203.7%204.5%207.6%209.1%207.6%2015.1%200%205.6-2.9%209.5-5.3%2012.6-3.2%204.2-6.7%208.9-6.7%2021.4%200%208.8%204.5%2012.5%209.6%2016.8%204.6%203.8%2014.2%2011.8%205.9%2023.8-7.3%2010.5-2.5%2022.6%202.4%2028.1%205.3%206%208.2%207.8%2033.6%206.3%2017.2-1%2054.2-6.8%2078.7-10.6%2011.2-1.8%2019.3-3%2022.4-3.3%204.9-.5%2011.5-1.2%2017.8.4%208.3%202.2%2013.8%207.9%2015.9%2016.6%201.9%207.8-1.5%2014.5-6.1%2023.9-3.7%207.6-8.9%2018-13.5%2033.4-7.3%2024-9.7%2060%201.3%2079.8%202.7%204.9%206.9%207.8%2012.6%208.7%206%20.9%2011-.9%2012.3-1.9%201.5-2.5%204-12.5%206-20.5%203.3-13.1%207.3-32.4%2012.9-44.7%208.2-18.1%2034.7-42.4%2061-65.7%204-3.5%207.4-6.6%209.8-8.8%207.4-6.8%2015.8-19.1%2023.2-30%206-8.8%2011.2-16.5%2015.6-20.8%209.4-9.4%2022.7-15.6%2033.7-15.6%204.4%200%208%203.6%208%208s-3.6%208-8%208c-5.7%200-15.2%203.7-22.3%2010.9-3.3%203.3-8.4%2010.7-13.7%2018.5-7.9%2011.5-16.8%2024.6-25.5%2032.7-2.5%202.4-6.1%205.5-10.1%209.1-17.3%2015.3-49.5%2043.8-57%2060.4-5%2011-8.9%2029.5-12%2042-3.8%2015.3-5.8%2022.8-9.2%2026.8-4.6%205.5-13.4%207.9-24.9%207.9s-20.8-7.2-26.3-17.1c-11.7-21-12.7-59-2.7-92.2%205-16.7%2010.5-27.7%2014.5-35.8%203-6.1%205.4-10.9%204.9-13-1.2-4.8-3.7-6.2-16.4-4.9-2.7.3-11.5%201.7-21.6%203.2-24.8%203.9-62.2%209.7-80.2%2010.8-26.1%201.5-36%20.1-46.4-11.7-10.2-11.5-14.8-31.6-3.7-47.7-.8-.7-1.9-1.7-2.9-2.5C78.7%20248.4%2069%20240.4%2069%20224c0-17.9%206-25.8%2010-31.1.7-.9%201.6-2.2%201.9-2.8-.6-1.1-2.4-3.3-3.8-5-5.2-6.2-13.1-15.7-13.1-30.6%200-16.8%2012.5-27.1%2019.9-33.2.7-.6%201.6-1.3%202.4-2-.3-.6-.6-1.3-.8-1.9-2.8-6.5-7.6-17.3-2.8-28.7%2010.9-26.2%2044.1-33.4%2075.2-37%2016.5-1.7%2036-3.7%2056.4-3.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thumbs-down-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thumbs-down-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thumbs-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20154.6c0%2014.9%207.9%2024.3%2013.1%2030.6%201.4%201.6%203.2%203.8%203.8%205-.3.6-1.2%201.9-1.9%202.8-4%205.2-10%2013.2-10%2031.1%200%2016.4%209.7%2024.4%2015.4%2029.1.9.8%202.1%201.7%202.9%202.5-11.1%2016.1-6.5%2036.2%203.7%2047.7%2010.5%2011.8%2020.3%2013.2%2046.4%2011.7%2018-1.1%2055.5-6.9%2080.2-10.8%2010.1-1.6%2018.9-3%2021.6-3.2%2012.7-1.3%2015.2%200%2016.4%204.9.5%202.1-1.9%206.9-4.9%2013-4%208.1-9.5%2019.2-14.5%2035.8-10.1%2033.2-9%2071.2%202.7%2092.2%205.5%209.9%2014.8%2017.1%2026.3%2017.1s20.3-2.4%2024.9-7.9c3.4-4%205.3-11.6%209.2-26.8%203.1-12.4%207-30.9%2012-42%207.5-16.6%2039.7-45.1%2057-60.4%204.1-3.6%207.6-6.7%2010.1-9.1%208.7-8.1%2017.6-21.1%2025.5-32.7%205.4-7.8%2010.4-15.2%2013.7-18.5%207.1-7.1%2016.6-10.9%2022.3-10.9%204.4%200%208-3.6%208-8V88c0-4.4-3.6-8-8-8-35.7%200-50.7-5.7-66.7-11.8-12.2-4.7-24.9-9.5-46.4-12.1-32.4-4-74.2-8.1-112.6-8.1-20.4%200-39.9%202-56.6%203.9-31%203.6-64.2%2010.8-75.2%2037-4.7%2011.4%200%2022.2%202.8%2028.7.3.6.5%201.2.8%201.9-.8.6-1.6%201.4-2.4%202-7.1%206.1-19.6%2016.3-19.6%2033.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thumbs-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thumbs-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thumbs-up-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M297.7%20464c-38.5%200-80.2-4.1-112.6-8.1-21.5-2.6-34.1-7.5-46.4-12.1-15.9-6.1-31-11.8-66.7-11.8-4.4%200-8-3.6-8-8s3.6-8%208-8c38.7%200%2055.8%206.5%2072.4%2012.9%2011.8%204.5%2023%208.8%2042.6%2011.2%2048.6%206%20111.5%2011%20165.4%204.1%2037.4-4.7%2056.1-12.5%2062.2-27.3%202.1-5-.5-10.9-2.7-16.1-1.5-3.5-2.9-6.6-2.9-9.8%200-5.5%204.1-8.9%208.9-12.8%206.3-5.1%2014.1-11.5%2014.1-20.8%200-9.1-4.8-14.8-9.4-20.3-3.7-4.5-7.6-9.1-7.6-15.1%200-5.6%202.9-9.5%205.3-12.6%203.2-4.2%206.7-8.9%206.7-21.4%200-8.8-4.5-12.5-9.6-16.8-4.6-3.8-14.2-11.8-5.9-23.8%207.3-10.5%202.5-22.6-2.4-28.1-5.3-6-8.2-7.8-33.6-6.3-17.2%201-54.2%206.8-78.7%2010.6-11.2%201.8-19.3%203-22.4%203.3-4.9.5-11.5%201.2-17.8-.4-8.3-2.2-13.8-7.9-15.9-16.6-1.9-7.8%201.5-14.5%206.1-23.9%203.7-7.6%208.9-18%2013.5-33.4%207.3-24%209.7-60-1.3-79.8-2.7-4.9-6.9-7.8-12.6-8.7-6-.9-11%20.9-12.3%201.9-1.5%202.5-4%2012.5-6%2020.5-3.3%2013.1-7.3%2032.4-12.9%2044.7-8.2%2018.1-34.7%2042.4-61%2065.7-4%203.5-7.4%206.6-9.8%208.8-7.4%206.8-15.8%2019.1-23.2%2030-6%208.8-11.2%2016.5-15.6%2020.8-9.4%209.4-22.7%2015.6-33.7%2015.6-4.4%200-8-3.6-8-8s3.6-8%208-8c5.7%200%2015.2-3.7%2022.3-10.9%203.3-3.3%208.4-10.7%2013.7-18.5%207.9-11.5%2016.8-24.6%2025.5-32.7%202.5-2.4%206.1-5.5%2010.1-9.1%2017.3-15.3%2049.5-43.8%2057-60.4%205-11%208.9-29.5%2012-42%203.8-15.3%205.8-22.8%209.2-26.8%204.6-5.5%2013.4-7.9%2024.9-7.9s20.8%207.2%2026.3%2017.1c11.7%2021%2012.7%2059%202.7%2092.2-5%2016.7-10.5%2027.7-14.5%2035.8-3%206.1-5.4%2010.9-4.9%2013%201.2%204.8%203.7%206.2%2016.4%204.9%202.7-.3%2011.5-1.7%2021.6-3.2%2024.8-3.9%2062.2-9.7%2080.2-10.8%2026.1-1.5%2036-.1%2046.4%2011.7%2010.2%2011.5%2014.8%2031.6%203.7%2047.7.8.7%201.9%201.7%202.9%202.5%205.8%204.8%2015.4%2012.8%2015.4%2029.1%200%2017.9-6%2025.8-10%2031.1-.7.9-1.6%202.2-1.9%202.8.6%201.1%202.4%203.3%203.8%205%205.2%206.2%2013.1%2015.7%2013.1%2030.6%200%2016.8-12.5%2027.1-19.9%2033.2-.7.6-1.6%201.3-2.4%202%20.3.6.6%201.3.8%201.9%202.8%206.5%207.6%2017.3%202.8%2028.7-10.9%2026.2-44.1%2033.4-75.2%2037-16.3%201.9-35.8%203.9-56.2%203.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thumbs-up-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thumbs-up-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thumbs-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20357.4c0-14.9-7.9-24.3-13.1-30.6-1.4-1.6-3.2-3.8-3.8-5%20.3-.6%201.2-1.9%201.9-2.8%204-5.2%2010-13.2%2010-31.1%200-16.4-9.7-24.4-15.4-29.1-.9-.8-2.1-1.7-2.9-2.5%2011.1-16.1%206.5-36.2-3.7-47.7-10.5-11.8-20.3-13.2-46.4-11.7-18%201.1-55.5%206.9-80.2%2010.8-10.1%201.6-18.9%203-21.6%203.2-12.7%201.3-15.2%200-16.4-4.9-.5-2.1%201.9-6.9%204.9-13%204-8.1%209.5-19.2%2014.5-35.8%2010.1-33.2%209-71.2-2.7-92.2-5.5-9.9-14.8-17.1-26.3-17.1s-20.3%202.4-24.9%207.9c-3.4%204-5.3%2011.6-9.2%2026.8-3.1%2012.4-7%2030.9-12%2042-7.5%2016.6-39.7%2045.1-57%2060.4-4.1%203.6-7.6%206.7-10.1%209.1-8.7%208.1-17.6%2021.1-25.5%2032.7-5.4%207.8-10.4%2015.2-13.7%2018.5-7.1%207.1-16.6%2010.9-22.3%2010.9-4.4%200-8%203.6-8%208V424c0%204.4%203.6%208%208%208%2035.7%200%2050.7%205.7%2066.7%2011.8%2012.2%204.7%2024.9%209.5%2046.4%2012.1%2032.4%204%2074.2%208.1%20112.6%208.1%2020.4%200%2039.9-2%2056.6-3.9%2031-3.6%2064.2-10.8%2075.2-37%204.7-11.4%200-22.2-2.8-28.7-.3-.6-.5-1.2-.8-1.9.8-.6%201.6-1.4%202.4-2%207.1-6.1%2019.6-16.3%2019.6-33.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thumbs-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thumbs-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thunderstorm-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M283.2%20176l-17.8%2059.4-6.2%2020.6H312l-69.2%20109.8%2015.5-57.7%205.4-20.2h-72.8l24.9-112h67.4m21.5-15.9H203l-32%20144h71.8L200%20464l141-224h-60.3l24-80z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M374.4%20141.9l-13.3-.1C349.4%2088.2%20306%2048%20236%2048S108.2%2098.4%20108.2%20169.5l.3%204.8C66.3%20179.9%2032%20219.6%2032%20264c0%2047%2037.9%2088%2084.7%2088H214l4.2-16H116.7c-18%200-35.1-8.1-48.2-21.9-13-13.7-20.4-32.4-20.4-51%200-17.5%206.6-34.8%2018.5-48.5%2011.8-13.5%2027.4-22.2%2044.1-24.5l14.8-2-1-14.9-.3-4.3c.1-29.3%2011.7-56.3%2032.6-75.9%2020.9-19.6%2049-29.4%2079.2-29.4%2029.3%200%2055%207.3%2074.3%2022.9%2017.7%2014.4%2029.9%2034.7%2035.2%2058.7l2.9%2013.4c11.5-.7%2026-.7%2026-.7%2024.5%200%2047.1%208.6%2063.7%2024.1%2016.7%2015.6%2025.8%2037.2%2025.8%2060.8%200%2044.7-33.7%2084.7-76.8%2091.8%200%200-8.9%201.4-20.2%201.4h-70.4l-10.2%2016H367c72%200%20113-52%20113-110%200-58.6-47.3-100.1-105.6-100.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thunderstorm-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thunderstorm-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-thunderstorm-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M374.4%20141.9l-13.3-.1C349.4%2088.2%20306%2048%20236%2048S108.2%2098.4%20108.2%20169.5l.3%204.8C66.3%20179.9%2032%20219.6%2032%20264c0%2047%2037.9%2088%2084.7%2088h96.8l8.6-32h-70.9l4.3-19.5%2032-144%202.8-12.5h135.9l-6.2%2020.6-17.8%2059.4H370l-15.4%2024.5L289.4%20352H367c72%200%20113-52%20113-110%200-58.6-47.3-100.1-105.6-100.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M341%20240h-60.3l24-80H203l-32%20144h72l-42.9%20160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-thunderstorm($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-thunderstorm-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-time-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm0%20398.7c-105.1%200-190.7-85.5-190.7-190.7%200-105.1%2085.5-190.7%20190.7-190.7%20105.1%200%20190.7%2085.5%20190.7%20190.7%200%20105.1-85.6%20190.7-190.7%20190.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20256h-96v17.3h113.3V128H256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-time-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-time-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-time-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm17%20225H160v-17h96V128h17v145z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-time($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-time-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-timer-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M236.6%20271.6c4.6%205.7%2011.5%209.4%2019.4%209.4%2013.8%200%2025-11.2%2025-25%200-7.3-3.2-13.8-8.2-18.4-.6-.7-1.3-1.5-2.2-2.2%200%200-117.7-87.5-120.3-85.2-2.6%202.3%2085.3%20120.2%2085.3%20120.2.2.4.7.8%201%201.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.2%2048h-.2v112h16V65.3c97.8%208.3%20175.3%2090.5%20175.3%20190.5%200%20105.5-85.7%20191.4-191.2%20191.4-105.5%200-191.3-85.8-191.3-191.3%200-52.8%2021.5-100.6%2056.1-135.2L109%20108.9C71.3%20146.6%2048%20198.6%2048%20256c0%20114.9%2093.1%20208%20208%20208s208-93.1%20208-208S371%2048%20256.2%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-timer-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-timer-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-timer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zM150.5%20150.5c2.6-2.3%20119.9%2084.9%20119.9%2084.9%201%20.7%201.6%201.5%202.2%202.2%205%204.6%208.2%2011%208.2%2018.3%200%2013.7-11.1%2024.9-24.9%2024.9-7.8%200-14.7-3.7-19.3-9.4-.4-.4-.8-.7-1.1-1.1.1.1-87.5-117.4-85-119.8zm105.6%20296.7c-105.7%200-191.4-85.7-191.4-191.4%200-52.8%2021.4-100.7%2056-135.3l11.8%2011.8c-31.6%2031.6-51.2%2075.3-51.2%20123.5%200%2096.3%2078.4%20174.7%20174.7%20174.7s174.5-78.4%20174.5-174.7c0-90.3-70.5-165.1-158.5-174V160h-16V64.4c105.7%200%20191.5%2085.7%20191.5%20191.4s-85.8%20191.4-191.4%20191.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-timer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-timer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-train-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M347.2%20464H370l-54.5-53.2-17.6%205.2%2016.1%2016H198l16.1-16-17.4-5.2L142%20464h22.8l17.1-16h148.2zM256%20368c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048zm0-78.5c-16.8%200-30.5%2013.7-30.5%2030.5s13.7%2030.5%2030.5%2030.5%2030.5-13.7%2030.5-30.5-13.7-30.5-30.5-30.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337%2064h-17c0-8.8-7.2-16-16-16h-96c-8.8%200-16%207.2-16%2016h-15c-35.3%200-65%2027.7-65%2063v224c0%2035.3%20144%2065%20144%2065s144-29.7%20144-65V127c0-35.3-27.7-63-63-63zm-128%200h94v16h-94V64zm175%20286.5c0%201.6-8.7%2014.3-65%2031.9-27.2%208.5-53.7%2015.4-62.6%2017.3-8.9-1.9-35.5-8.7-62.7-17.2-56.5-17.6-64.7-30.3-65.7-31.9V127c0-26.2%2022.3-47%2049-47h15c0%208.8%207.2%2016%2016%2016h96c8.8%200%2016-7.2%2016-16h17c12.8%200%2024.5%204.7%2033.4%2013.6%208.9%208.9%2013.6%2020.6%2013.6%2033.4v223.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M336%20144v64H176v-63.9-.1h160m0-16H176c-8.8%200-16%207.2-16%2016v64c0%208.8%207.2%2016%2016%2016h160c8.8%200%2016-7.2%2016-16v-64c0-8.8-7.2-16-16-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-train-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-train-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-train-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M297.9%20416l16.1%2016H198l16.1-16-17.4-5.2L142%20464h22.8l17.1-16h148.2l17.1%2016H370l-54.5-53.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337%2064h-17c0-8.8-7.2-16-16-16h-96c-8.8%200-16%207.2-16%2016h-15c-35.3%200-65%2027.7-65%2063v224c0%2035.3%20144%2065%20144%2065s144-29.7%20144-65V127c0-35.3-27.7-63-63-63zm-128%200h94v16h-94V64zm47%20304c-26.5%200-48-21.5-48-48s21.5-48%2048-48%2048%2021.5%2048%2048-21.5%2048-48%2048zm96-160c0%208.8-7.2%2016-16%2016H176c-8.8%200-16-7.2-16-16v-64c0-8.8%207.2-16%2016-16h160c8.8%200%2016%207.2%2016%2016v64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20289.5c-16.8%200-30.5%2013.7-30.5%2030.5s13.7%2030.5%2030.5%2030.5%2030.5-13.7%2030.5-30.5-13.7-30.5-30.5-30.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-train($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-train-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-transgender-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M427.3%20416l34.3-34.3c3.1-3.1%203.1-8.2%200-11.3-3.1-3.1-8.2-3.1-11.3%200L416%20404.7l-27.3-27.3c17.2-25.5%2027.3-56.3%2027.3-89.4%200-49.4-22.4-93.6-57.6-123L448%2076v76c0%204.4%203.6%208%208%208s8-3.6%208-8V56c0-4.4-3.6-8-8-8h-96c-4.4%200-8%203.6-8%208s3.6%208%208%208h76l-90.7%2091.2C319.8%20138%20289.1%20128%20256%20128c-33.1%200-63.8%2010-89.3%2027.2l-27.2-27.4%2033.2-33.2c3.1-3.1%203.1-8.2%200-11.3-3.1-3.1-8.2-3.1-11.3%200l-33.2%2033.2L76%2064h76c4.4%200%208-3.6%208-8s-3.6-8-8-8H56c-4.4%200-8%203.6-8%208v96c0%204.4%203.6%208%208%208s8-3.6%208-8V76l52.5%2052.2-35.2%2035.2c-3.1%203.1-3.1%208.2%200%2011.3%201.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3l35.2-35.2%2025.8%2025.6C118.4%20194.4%2096%20238.6%2096%20288c0%2088.4%2071.6%20160%20160%20160%2049.4%200%2093.7-22.4%20123-57.7l25.7%2025.7-34.3%2034.3c-3.1%203.1-3.1%208.2%200%2011.3%201.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3l34.3-34.3%2034.3%2034.3c1.6%201.6%203.6%202.3%205.7%202.3s4.1-.8%205.7-2.3c3.1-3.1%203.1-8.2%200-11.3L427.3%20416zm-69.5-26.2C330.6%20417%20294.5%20432%20256%20432s-74.6-15-101.8-42.2C127%20362.6%20112%20326.5%20112%20288s15-74.6%2042.2-101.8C181.4%20159%20217.5%20144%20256%20144s74.6%2015%20101.8%2042.2C385%20213.4%20400%20249.5%20400%20288s-15%2074.6-42.2%20101.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-transgender($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-transgender-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-trash-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20113.3h-80v-20c0-16.2-13.1-29.3-29.3-29.3h-69.5C205.1%2064%20192%2077.1%20192%2093.3v20h-80V128h21.1l23.6%20290.7c0%2016.2%2013.1%2029.3%2029.3%2029.3h141c16.2%200%2029.3-13.1%2029.3-29.3L379.6%20128H400v-14.7zm-193.4-20c0-8.1%206.6-14.7%2014.6-14.7h69.5c8.1%200%2014.6%206.6%2014.6%2014.7v20h-98.7v-20zm135%20324.6v.8c0%208.1-6.6%2014.7-14.6%2014.7H186c-8.1%200-14.6-6.6-14.6-14.7v-.8L147.7%20128h217.2l-23.3%20289.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M249%20160h14v241h-14zM320%20160h-14.6l-10.7%20241h14.6zM206.5%20160H192l10.7%20241h14.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-trash-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-trash-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-trash-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20113V93.3c0-16.2-13.1-29.3-29.3-29.3h-69.5C205.1%2064%20192%2077.1%20192%2093.3V113h-80v15h21.1l23.6%20290.7c0%2016.2%2013.1%2029.3%2029.3%2029.3h141c16.2%200%2029.3-13.1%2029.3-29.3L379.6%20128H400v-15h-80zM207%2093.3c0-8.1%206.2-14.3%2014.3-14.3h69.5c8.1%200%2014.3%206.2%2014.3%2014.3V113h-98V93.3h-.1zM202.7%20401L192%20160h14.5l10.9%20241h-14.7zm60.3%200h-14V160h14v241zm46.3%200h-14.6l10.8-241H320l-10.7%20241z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-trash($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-trash-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-trending-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M472%20396H360c-4.4%200-8-3.6-8-8s3.6-8%208-8h92L287.6%20215.8l-83.9%2084.1c-1.5%201.5-3.5%202.4-5.7%202.4-2.1%200-4.2-.8-5.7-2.3L34.1%20141.6c-1.6-1.6-2.1-3.7-2.1-5.9%200-2.1.6-3.9%202.1-5.4%201.6-1.6%203.6-2.3%205.7-2.3%202%200%204.1.8%205.7%202.3L198%20283l83.9-84c3.1-3.1%208.2-3.1%2011.3%200L464%20368.3v-92c0-4.4%203.6-8%208-8s8%203.6%208%208v112c0%204.4-3.6%207.7-8%207.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-trending-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-trending-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-trending-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M472%20128H360c-4.4%200-8%203.6-8%208s3.6%208%208%208h92L287.6%20308.4l-83.9-84c-1.5-1.5-3.5-2.3-5.7-2.3-2.1%200-4.2.8-5.7%202.3L34.1%20382.6c-1.6%201.6-2.1%203.7-2.1%205.9%200%202.1.6%203.9%202.1%205.5%201.6%201.6%203.6%202.3%205.7%202.3%202%200%204.1-.8%205.7-2.3L198%20241.3l83.9%2084c3.1%203.1%208.2%203.1%2011.3%200L464%20156v92c0%204.4%203.6%208%208%208s8-3.6%208-8V136c0-4.4-3.6-8-8-8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-trending-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-trending-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-trophy-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%2096V64H128v32H48v8c0%2082%2030.5%20132.2%2082%20135.8%2012.9%2049.2%2083.9%2075.8%20118%2079.7V432h-88v16h192v-16h-88V319.5c34.1-3.9%20105.1-30.5%20118-79.7%2051.5-3.6%2082-53.7%2082-135.8v-8h-80zM80.7%20188.3c-7.1-13.7-15.6-37.8-16.6-76.3H128v111.4c-20-2.7-36.5-14.4-47.3-35.1zM368%20224c0%2027.3-23.9%2046.7-43.9%2058.1-26.5%2015.1-55.7%2021.9-68.1%2021.9s-41.6-6.8-68.1-21.9c-20-11.5-43.9-30.8-43.9-58.1V80h224v144zm63.3-35.7C420.5%20209%20404%20220.7%20384%20223.4V112h63.9c-1%2038.5-9.5%2062.6-16.6%2076.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-trophy-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-trophy-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-trophy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%2096V64H128v32H48v8c0%2082%2030.5%20132.2%2082%20135.8%2012.9%2049.2%2083.9%2075.8%20118%2079.7V432h-88v16h192v-16h-88V319.5c34.1-3.9%20105.1-30.5%20118-79.7%2051.5-3.6%2082-53.7%2082-135.8v-8h-80zM80.7%20188.3c-7.1-13.7-15.6-37.8-16.6-76.3H128v111.4c-20-2.7-36.5-14.4-47.3-35.1zm350.6%200C420.5%20209%20404%20220.7%20384%20223.4V112h63.9c-1%2038.5-9.5%2062.6-16.6%2076.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-trophy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-trophy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-umbrella-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M271%2064.8V64c0-8.8-6.8-16-15-16s-15%207.2-15%2016v.7c-108%208-192.8%20103.7-192.8%20222%200%20.4-.2.8-.2%201.3h3.2c6.4-23%2026.2-39.8%2049.6-39.8%2023.3%200%2043%2016.9%2049.5%2039.8h4.9c6.4-23%2026.4-39.8%2049.8-39.8%2018.4%200%2035%2010.5%2044%2026.3V424c0%2013.2-11%2024-24.2%2024s-24.1-10.8-24.1-24c0-4.4-3.6-8-8.1-8-4.4%200-8%203.6-8%208%200%2022.1%2018.2%2040%2040.2%2040s40.2-17.9%2040.2-40V275.2c9-16.2%2025.3-27%2044-27%2023.3%200%2042.8%2016.9%2049.3%2039.8h4.9c6.4-23%2026.2-40%2049.6-40%2023.5%200%2043.4%2016.9%2049.7%2040h1.6C462.1%20171.4%20378%2073.2%20271%2064.8zm141.8%20167.1c-20.9%200-39.6%2010.1-52.1%2025.9-12.4-15.8-31.1-25.8-52-25.8s-39.6%2010.1-52%2025.9c-12.4-15.8-31.1-25.9-52-25.9s-39.6%2010.1-52%2025.9c-12.4-15.8-31.1-25.9-52-25.9-11.5%200-22.3%203-31.8%208.4%207.5-35.7%2023.6-68.7%2047.2-95.7%2033-37.7%2077.8-60.5%20126-64.1%200%200%206.6-.4%2014.3-.4%207.8%200%2013.2.5%2013.2.5%2048%203.8%2092.8%2027.5%20126.2%2066.9%2022.3%2026.3%2038%2057.6%2046%2091.3-8.8-4.6-18.7-7-29-7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-umbrella-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-umbrella-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-umbrella-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M271%2064.8V64c0-8.8-6.8-16-15-16s-15%207.2-15%2016v.7c-108%208-192.8%20103.7-192.8%20222%200%20.4-.2.8-.2%201.3h3.2c6.4-23%2026.2-39.8%2049.6-39.8%2023.3%200%2043%2016.9%2049.5%2039.8h4.9c6.4-23%2026.4-39.8%2049.8-39.8%2018.4%200%2035%2010.5%2044%2026.3V424c0%2013.2-11%2024-24.2%2024s-24.1-10.8-24.1-24c0-4.4-3.6-8-8.1-8-4.4%200-8%203.6-8%208%200%2022.1%2018.2%2040%2040.2%2040s40.2-17.9%2040.2-40V275.2c9-16.2%2025.3-27%2044-27%2023.3%200%2042.8%2016.9%2049.3%2039.8h4.9c6.4-23%2026.2-40%2049.6-40%2023.5%200%2043.4%2016.9%2049.7%2040h1.6C462.1%20171.4%20378%2073.2%20271%2064.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-umbrella($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-umbrella-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-undo-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M447.9%20368.2c0-16.8%203.6-83.1-48.7-135.7-35.2-35.4-80.3-53.4-143.3-56.2V96L64%20224l192%20128v-79.8c40%201.1%2062.4%209.1%2086.7%2020%2030.9%2013.8%2055.3%2044%2075.8%2076.6l19.2%2031.2H448c0-10.1-.1-22.9-.1-31.8zm-15.7-6.8C384.6%20280.6%20331%20256%20240%20256v64.8L91.9%20224.1%20240%20127.3V192c201%200%20192.2%20169.4%20192.2%20169.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-undo-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-undo-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-undo-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M447.9%20368.2c0-16.8%203.6-83.1-48.7-135.7-35.2-35.4-80.3-53.4-143.3-56.2V96L64%20224l192%20128v-79.8c40%201.1%2062.4%209.1%2086.7%2020%2030.9%2013.8%2055.3%2044%2075.8%2076.6l19.2%2031.2H448c0-10.1-.1-22.9-.1-31.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-undo($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-undo-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-unlock-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20288c-17.673%200-32%2014.327-32%2032%200%2014.91%2010.198%2027.44%2024%2030.992V384h16v-33.008c13.802-3.553%2024-16.082%2024-30.992%200-17.673-14.327-32-32-32zm0%2048c-8.822%200-16-7.178-16-16s7.178-16%2016-16%2016%207.178%2016%2016-7.178%2016-16%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M168%20224v-72c0-48.523%2039.484-88%2088.016-88C304.53%2064%20344%20103.477%20344%20152v8h16v-8c0-57.43-46.562-104-103.984-104C198.562%2048%20152%2094.57%20152%20152v72H96v240h320V224H168zm232%20224H112V240h288v208z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-unlock-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-unlock-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-unlock-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20304c-8.822%200-16%207.178-16%2016s7.178%2016%2016%2016%2016-7.178%2016-16-7.178-16-16-16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M168%20224v-72c0-48.523%2039.484-88%2088.016-88C304.53%2064%20344%20103.477%20344%20152v8h16v-8c0-57.43-46.562-104-103.984-104C198.562%2048%20152%2094.57%20152%20152v72H96v240h320V224H168zm96%20126.992V384h-16v-33.008c-13.802-3.553-24-16.082-24-30.992%200-17.673%2014.327-32%2032-32s32%2014.327%2032%2032c0%2014.91-10.198%2027.44-24%2030.992z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-unlock($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-unlock-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-videocam-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M303.7%20128h-221C63.9%20128%2047%20142.1%2047%20160.7v187.9c0%2018.6%2016.9%2035.4%2035.7%2035.4h221c18.8%200%2033.3-16.8%2033.3-35.4V160.7c0-18.6-14.5-32.7-33.3-32.7zM320%20348.6c0%209.3-6.9%2018.4-16.3%2018.4h-221c-9.4%200-18.7-9.1-18.7-18.4V160.7c0-9.3%209-15.5%2018.4-15.5l221%20.1c9.4%200%2016.6%206.1%2016.6%2015.4v187.9zM367%20213v85.6l98%2053.4V160l-98%2053zm81-23v132.3l-64-33.5v-65.6l64.1-33.6-.1.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-videocam-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-videocam-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-videocam-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M303.7%20128h-221C63.9%20128%2047%20142.1%2047%20160.7v187.9c0%2018.6%2016.9%2035.4%2035.7%2035.4h221c18.8%200%2033.3-16.8%2033.3-35.4V160.7c0-18.6-14.5-32.7-33.3-32.7zM367%20213v85.6l98%2053.4V160l-98%2053z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-videocam($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-videocam-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-volume-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M330.4%20319.9C343.9%20302%20352%20280%20352%20256s-8.1-46-21.6-63.9l-13.3%209.8c11.4%2015.1%2018.2%2033.8%2018.2%2054.1%200%2020.3-6.8%2039-18.2%2054.1l13.3%209.8zM217.9%20216H160v80h57.9l69.1%2056V160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-volume-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-volume-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-volume-mute-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M249.9%20216H192v80h57.9l70.1%2056V160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-volume-mute($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-volume-mute-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-volume-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M365%20388c30-35.2%2047-84%2047-132s-15.6-92.3-41.9-128.1l-13.6%2010.3c24.2%2032.9%2038.6%2073.7%2038.6%20117.8s-14.4%2084.9-38.6%20117.8L365%20388zM351.2%20256c0-35.9-12-69-32-95.8l-13.5%2010.1c17.9%2024%2028.6%2053.6%2028.6%2085.8%200%2021.4-4.8%2041.7-13.3%2060l10.1%2017.3c12.8-23%2020.1-49.3%2020.1-77.4zM293.9%20256c0-24-8.2-46-21.8-63.9l-13.5%209.8c8%2010.4%2013.7%2022.5%2016.5%2035.7l18.1%2030.8c.5-4%20.7-8.2.7-12.4zM158.4%20216H100v80h58.4l69.6%2056v-92.8l-39.5-67.4z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M162.8%2080L148%2088.5%20349.2%20432l14.8-8.5z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-volume-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-volume-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-volume-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M374.1%20128l-13.6%2010.3C384.6%20171.2%20399%20211.9%20399%20256c0%2044.1-14.4%2084.8-38.6%20117.7L374%20384c26.3-35.7%2041.9-80%2041.9-128s-15.5-92.3-41.8-128zM320%20351.8c20-26.8%2032-59.9%2032-95.8s-12-69-32-95.8l-13.6%2010.1c17.9%2024%2028.6%2053.6%2028.6%2085.7s-10.7%2061.7-28.6%2085.7l13.6%2010.1zM273.1%20319.9C286.8%20302%20295%20280%20295%20256s-8.2-46-21.9-63.9l-13.5%209.8c11.6%2015.1%2018.5%2033.8%2018.5%2054.1s-6.9%2038.9-18.5%2054.1l13.5%209.8zM153.9%20216H96v80h57.9l70.1%2056V160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-volume-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-volume-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-walk-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cg%20fill%3D%22%23231F20%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M208%20346.1L148.6%20388c-3.2%203-4.5%207.8-4.6%2011.9s1%207.5%204.1%2010.7c3.1%203.3%207.7%205.3%2011.9%205.3%204%200%2010.9-4.2%2014-7.2l61-44.3c3.2-3%205-7.2%205-11.6l8-45-40-40v78.3z%22%2F%3E%3Ccircle%20cx%3D%22272%22%20cy%3D%2296%22%20r%3D%2232%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M338.9%20430.2l-13.3-100.7c-.4-3-1.7-5.8-3.6-8.1l-49.9-59V155.7c0-9.7-13.2-11.7-16-11.7h-32c-2.5%200-4.9.6-7.2%201.7l-59.5%2029.7C148.7%20180%20144%20188.7%20144%20200v56c0%208.8%207.2%2016%2016%2016s16-7.2%2016-16v-54.1l32-16V256l86.5%2086.5%2012.7%2092c1.1%208%208%2013.4%2015.8%2013.4h1.8c8.7-1.1%2015.3-9%2014.1-17.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M363.1%20235.8L280%20153.3v45.1l60.6%2060.1c6.3%206.2%2016.4%206.2%2022.6-.1%203.1-3.1%204.8-6.4%204.8-10.4%200-4.1-1.7-9-4.9-12.2z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-walk($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-walk-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-warning-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20368c-8.8%200-16%207.2-16%2016s7.2%2016%2016%2016%2016-7.2%2016-16-7.2-16-16-16zM244.2%20273.7V208h24v65.7l-6%2070.3h-12l-6-70.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2097.5L437.2%20432H74.8L256%2097.5m0-33.5L48%20448h416L256%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-warning-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-warning-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-warning-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064L48%20448h416L256%2064zm-11.8%20144h24v65.7l-6%2070.3h-12l-6-70.3V208zM256%20400c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-warning($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-warning-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-watch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M127.9%20376c0-2%20.7-4%202.2-5.5%203.1-3.2%208.1-3.3%2011.3-.2%2020.9%2020%2046.8%2030.8%2079.3%2032.8%2019%201.2%2027.1%205.8%2035%2010.3%209.3%205.3%2018.9%2010.7%2054.2%2010.7%2071.7%200%20122-59.2%20122-132v-56c0-24.7-3-48.9-16.1-69.8-12.8-20.4-26.9-37-48.3-47.9-3.9-2-5.5-6.8-3.5-10.8%202-3.9%206.8-5.5%2010.8-3.5%2024%2012.2%2040.2%2030.8%2054.6%2053.6%2014.8%2023.5%2018.5%2050.6%2018.5%2078.3v56c0%2081.6-57.5%20148-138%20148-39.4%200-51.4-6.8-62-12.8-7.2-4.1-12.8-7.3-28.2-8.2-36.4-2.3-65.6-14.4-89.3-37.2-1.6-1.6-2.5-3.7-2.5-5.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272.7%20402c0-.4%200-.9.1-1.3.7-4.4%204.8-7.3%209.2-6.6%2035.5%205.8%2066.1-2.4%2088.5-23.9%203.2-3.1%208.3-2.9%2011.3.2%203.1%203.2%202.9%208.3-.2%2011.3-26.2%2025.1-61.5%2034.8-102.1%2028.1-4-.6-6.8-4-6.8-7.8zM64%20292v-56c0-27.7%203.8-54.8%2018.5-78.3%2014.3-22.8%2030.6-41.4%2054.6-53.6%203.9-2%208.8-.4%2010.8%203.5s.4%208.8-3.5%2010.8c-21.4%2010.9-35.5%2027.5-48.3%2047.9-13.2%2020.8-16.2%2045-16.2%2069.7v56c0%2034.8%209%2070.1%2038.8%2096.9%2030.3%2027.4%2071%2043.1%20111.6%2043.1%204.4%200%208%203.6%208%208s-3.6%208-8%208c-44.5%200-89-17.2-122.3-47.2-33.1-29.9-44-69.5-44-108.8z%22%2F%3E%3Ccircle%20cx%3D%22304.2%22%20cy%3D%22104%22%20r%3D%2219%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M375.3%20129c-1.9.6-3.9%201-6.1%201-10.5%200-19-8.5-19-19s8.5-19%2019-19c5.7%200%2010.7%202.4%2014.2%206.3-3-19.4-19.8-34.3-40-34.3h-175c-19.6%200-36.1%2014-39.8%2032.7%203.4-3%207.8-4.7%2012.6-4.7%2010.5%200%2019%208.5%2019%2019s-8.5%2019-19%2019c-1.5%200-2.9-.2-4.3-.5%207.4%208.9%2018.8%2014.5%2031.5%2014.5h175c12.9%200%2024.6-5.8%2031.9-15zm-98.1-25c0-14.9%2012.1-27%2027-27s27%2012.1%2027%2027-12.1%2027-27%2027c-14.7%200-27-12.1-27-27z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-watch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-watch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-water-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.8%2068c30.2%2024.1%2058.1%2054%2083.1%2089.2%2041.1%2057.7%2061%20111.4%2061%20164.3%200%2069.7-64.6%20126.4-144.1%20126.4-49.1%200-94.3-21.7-120.9-57.9-5.4-7.3-9.9-15.1-13.4-23.1-6.3-14.6-9.6-29.8-9.6-45.4v-1.2c0-.7.1-1.5.1-2.3%201-52.6%2021-105.2%2061.1-160.8%2034.5-47.8%2065.3-75.5%2082.7-89.2m.3-20c-23.1%2016-58.6%2048.1-95.8%2099.8s-62.9%20107.8-64.1%20170c0%201.2-.1%202.5-.1%203.7%200%2018.3%203.9%2035.8%2010.9%2051.8%204.1%209.3%209.2%2018%2015.2%2026.2%2028.5%2038.8%2077.8%2064.4%20133.8%2064.4%2088.4%200%20160.1-63.8%20160.1-142.4%200-63.4-27-121.6-64-173.6s-72.6-82.4-96-99.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M265.9%20411c-15.8%200-32.7-1.4-45.9-7.4C307%20390%20339%20358%20359.8%20281.4c5.2%2011.2%206.2%2023.7%206.2%2036.8%200%2051.2-44.8%2092.8-100.1%2092.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-water-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-water-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-water-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20148c-37-52-72.5-82.5-96-100-23.1%2016-58.6%2048.1-95.8%2099.8s-62.9%20107.8-64.1%20170c0%201.2-.1%202.5-.1%203.7%200%2018.3%203.9%2035.8%2010.9%2051.8%204.1%209.3%209.2%2018%2015.2%2026.2%2028.5%2038.8%2077.8%2064.4%20133.8%2064.4%2088.4%200%20160.1-63.8%20160.1-142.4%200-63.3-27-121.5-64-173.5zm-86.1%20263c-15.8%200-32.7-1.4-45.9-7.4C307%20390%20339%20358%20359.8%20281.4c5.2%2011.2%206.2%2023.7%206.2%2036.8%200%2051.2-44.8%2092.8-100.1%2092.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-water($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-water-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-wifi-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20112c72.3%200%20146.5%2029.1%20201.4%2078.4L442%20206.7c-22.9-20.4-48.7-36.8-77-48.7-34.5-14.6-71.2-22-109-22s-74.5%207.4-109%2022c-28.3%2012-54.1%2028.3-77%2048.7l-15.4-16.3C109.5%20141.1%20183.7%20112%20256%20112m0-16c-83%200-166.1%2035.8-224%2093.7l37.3%2039.6c24.3-24.3%2052.5-43.3%2083.9-56.6C185.8%20159%20220.3%20152%20256%20152s70.2%207%20102.7%2020.7c31.4%2013.3%2059.7%2032.3%2083.9%2056.6l37.3-39.6C422.1%20131.8%20339%2096%20256%2096z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20225c45.6%200%2088.9%2015.9%20123.4%2044.9l-17%2017c-29.9-24.6-67.2-38-106.4-38s-76.5%2013.4-106.4%2038l-17-17c34.5-29%2077.8-44.9%20123.4-44.9m0-16c-57.2%200-109%2023.1-146.6%2060.4L149%20309c28.7-28.4%2066.6-44%20107-44%2040.4%200%2078.3%2015.6%20107%2044l39.6-39.6C365%20232.1%20313.2%20209%20256%20209zM256%20337c15.4%200%2029.9%205.4%2041.3%2015.1L256%20393.4l-41.3-41.3c11.4-9.7%2025.9-15.1%2041.3-15.1m0-16c-25.9%200-48.9%2012.3-63.6%2031.4L256%20416l63.6-63.6C304.9%20333.3%20281.9%20321%20256%20321z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-wifi-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-wifi-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-wifi-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2096c-83%200-166.1%2035.8-224%2093.7l37.3%2039.6c24.3-24.3%2052.5-43.3%2083.9-56.6C185.8%20159%20220.3%20152%20256%20152s70.2%207%20102.7%2020.7c31.4%2013.3%2059.7%2032.3%2083.9%2056.6l37.3-39.6C422.1%20131.8%20339%2096%20256%2096z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20209c-57.2%200-109%2023.1-146.6%2060.4L149%20309c28.7-28.4%2066.6-44%20107-44%2040.4%200%2078.3%2015.6%20107%2044l39.6-39.6C365%20232.1%20313.2%20209%20256%20209zM256%20321c-25.9%200-48.9%2012.3-63.6%2031.4L256%20416l63.6-63.6C304.9%20333.3%20281.9%20321%20256%20321z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-wifi($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-wifi-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-wine-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20325c0-22%2020.5-38.7%2040.2-54.8%207.9-6.5%2015.4-12.5%2021.5-19%2026.5-27.7%2026.2-51.7%2026.2-71.1V176c0-44.2-30.8-124.6-32-128h-128c-1.2%203.4-32%2083.5-32%20128v4.1c0%2019.3-.3%2043.4%2026.2%2071.1%206.1%206.4%2013.6%2012.5%2021.5%2019C227.5%20286.3%20248%20303%20248%20325v123h-72v16h160v-16h-72V325zM202.7%2064h106.6c5.4%2016%2019.5%2062.7%2024.8%2096H177.9c5.3-33.3%2019.5-80%2024.8-96zM256%20289.4c-3%200-5.2-.9-7.2-2.8-8.8-10.8-20.2-20.2-31-28.9-7.5-6.1-14.6-11.9-20.1-17.6-22.1-23-21.9-40.9-21.8-59.9%200-1.4-.1-2.8%200-4.3h160c.1%201.4%200%202.8%200%204.3.1%2019%20.3%2036.9-21.8%2059.9-5.5%205.7-12.6%2011.5-20.1%2017.6-10.7%208.8-22.2%2018.1-31%2028.9-1.8%201.9-4%202.8-7%202.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-wine-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-wine-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-wine-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M264%20325c0-22%2020.5-38.7%2040.2-54.8%207.9-6.5%2015.4-12.5%2021.5-19%2026.5-27.7%2026.2-51.7%2026.2-71.1V176c0-44.2-30.8-124.6-32-128h-128c-1.2%203.4-32%2083.5-32%20128v4.1c0%2019.3-.3%2043.4%2026.2%2071.1%206.1%206.4%2013.6%2012.5%2021.5%2019C227.5%20286.3%20248%20303%20248%20325v123h-72v16h160v-16h-72V325zM202.7%2064h106.6c5.4%2016%2019.5%2062.7%2024.8%2096H177.9c5.3-33.3%2019.5-80%2024.8-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-wine($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-wine-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-woman-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M286%20496c-6.1%200-11.8-2.3-16-6.6-3.2-3.3-7.1-9.1-7.1-18.6V351.4H249v119.4c0%209.5-4%2015.4-7.4%2018.7-4.3%204.2-10.1%206.5-16.3%206.5-6.2%200-11.9-2.3-16.3-6.5-3.4-3.3-7.4-9.1-7.4-18.7V351.4h-43.9l44.5-170.6h-6.8L171%20271.2c-4%2013.1-13.7%2017.8-21.4%2017.8-6.6%200-12.9-3.2-17-8.7-4.8-6.4-6.1-14.9-3.6-23.9l29-104.1c4.2-15.2%2020.7-38.2%2048.7-39.3H305.1c28.4%201.2%2044.1%2026%2048.5%2038.9l.1.4%2029%20104.3c2.4%209%201%2017.6-3.9%2024-4.1%205.4-10.4%208.6-16.9%208.6-7.7%200-17.3-4.8-21.3-18.1v-.2l-24.3-90.1h-7.7l45.5%20170.6H309v119.4c0%209.5-3.9%2015.3-7.1%2018.6-4.2%204.3-9.8%206.6-15.9%206.6zm-52.7-160.5h45.3v135.3c0%206.8%203.8%209.2%207.4%209.2s7.4-2.4%207.4-9.2V335.5h40.3l-45.5-170.6h40.3L356%20266.6c1.2%204.2%203.5%206.6%206.1%206.6%201.6%200%203.3-.9%204.4-2.4%201.8-2.4%202.2-6%201.1-10.1l-28.9-103.9c-2.6-7.6-13.6-27-34-27.9h-97.4c-21.7%201-32.1%2020.8-34%2027.7l-28.9%20104.1c-1.1%204.1-.8%207.6%201%209.9%201.1%201.5%202.8%202.4%204.5%202.4%202.7%200%205-2.3%206.3-6.4l27.4-101.7h39.3l-44.5%20170.6h39.2v135.3c0%208.8%206.6%209.2%207.9%209.2%201.3%200%207.9-.4%207.9-9.2V335.5zM255.9%20106.4c-24.2%200-43.9-20.3-43.9-45.2S231.7%2016%20255.9%2016s43.9%2020.3%2043.9%2045.2-19.7%2045.2-43.9%2045.2zm0-74.4c-15.5%200-28.2%2013.1-28.2%2029.2s12.6%2029.2%2028.2%2029.2%2028.2-13.1%2028.2-29.2S271.5%2032%20255.9%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-woman-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-woman-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-ios-woman-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M286%20496c-6.1%200-11.8-2.3-16-6.6-3.2-3.3-7.1-9.1-7.1-18.6V351.4H249v119.4c0%209.5-4%2015.4-7.4%2018.7-4.3%204.2-10.1%206.5-16.3%206.5s-11.9-2.3-16.3-6.5c-3.4-3.3-7.4-9.1-7.4-18.7V351.4h-43.9l44.5-170.6h-6.8L171%20271.2c-4%2013.1-13.7%2017.8-21.4%2017.8-6.6%200-12.9-3.2-17-8.7-4.8-6.4-6.1-14.9-3.6-23.9l29-104.1c4.2-15.2%2020.7-38.2%2048.7-39.3H305.1c28.4%201.2%2044.1%2026%2048.5%2038.9l.1.4%2029%20104.3c2.4%209%201%2017.6-3.9%2024-4.1%205.4-10.4%208.6-16.9%208.6-7.7%200-17.3-4.8-21.3-18.1v-.2l-24.3-90.1h-7.7l45.5%20170.6H309v119.4c0%209.5-3.9%2015.3-7.1%2018.6-4.2%204.3-9.8%206.6-15.9%206.6zM255.9%20106.4c-24.2%200-43.9-20.3-43.9-45.2S231.7%2016%20255.9%2016s43.9%2020.3%2043.9%2045.2-19.7%2045.2-43.9%2045.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-ios-woman($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-ios-woman-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-android-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M144%20268.4V358c0%206.9%204.5%2014%2011.4%2014H184v52c0%2013.3%2010.7%2024%2024%2024s24-10.7%2024-24v-52h49v52c0%207.5%203.4%2014.2%208.8%2018.6%203.9%203.4%209.1%205.4%2014.7%205.4h.5c13.3%200%2024-10.7%2024-24v-52h27.6c7%200%2011.4-7.1%2011.4-13.9V192H144v76.4zM408%20176c-13.3%200-24%2010.7-24%2024v96c0%2013.3%2010.7%2024%2024%2024s24-10.7%2024-24v-96c0-13.3-10.7-24-24-24zM104%20176c-13.3%200-24%2010.7-24%2024v96c0%2013.3%2010.7%2024%2024%2024s24-10.7%2024-24v-96c0-13.3-10.7-24-24-24z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M311.2%2089.1l18.5-21.9c.4-.5-.2-1.6-1.3-2.5-1.1-.8-2.4-1-2.7-.4l-19.2%2022.8c-13.6-5.4-30.2-8.8-50.6-8.8-20.5-.1-37.2%203.2-50.8%208.5l-19-22.4c-.4-.5-1.6-.4-2.7.4s-1.7%201.8-1.3%202.5l18.3%2021.6c-48.2%2020.9-55.4%2072.2-56.4%2087.2h223.6c-.9-15.1-8-65.7-56.4-87zm-104.4%2049.8c-7.4%200-13.5-6-13.5-13.3%200-7.3%206-13.3%2013.5-13.3%207.4%200%2013.5%206%2013.5%2013.3%200%207.3-6%2013.3-13.5%2013.3zm98.4%200c-7.4%200-13.5-6-13.5-13.3%200-7.3%206-13.3%2013.5-13.3%207.4%200%2013.5%206%2013.5%2013.3%200%207.3-6.1%2013.3-13.5%2013.3z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-android($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-android-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-angular-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M213.573%20256h84.846l-42.428-89.356z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.98%2032L32%20112l46.12%20272L256%20480l177.75-96L480%20112%20255.98%2032zM344%20352l-26.59-56H194.585L168%20352h-40L256%2072l128%20280h-40z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-angular($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-angular-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-apple-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M333.6%20153.9c-33.6%200-47.8%2016.5-71.2%2016.5-24%200-42.3-16.4-71.4-16.4-28.5%200-58.9%2017.9-78.2%2048.4-27.1%2043-22.5%20124%2021.4%20193%2015.7%2024.7%2036.7%2052.4%2064.2%2052.7h.5c23.9%200%2031-16.1%2063.9-16.3h.5c32.4%200%2038.9%2016.2%2062.7%2016.2h.5c27.5-.3%2049.6-31%2065.3-55.6%2011.3-17.7%2015.5-26.6%2024.2-46.6-63.5-24.8-73.7-117.4-10.9-152.9-19.2-24.7-46.1-39-71.5-39z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M326.2%2064c-20%201.4-43.3%2014.5-57%2031.6-12.4%2015.5-22.6%2038.5-18.6%2060.8h1.6c21.3%200%2043.1-13.2%2055.8-30.1%2012.3-16.1%2021.6-38.9%2018.2-62.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-apple($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-apple-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-bitcoin-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M410.5%20279.2c-5-11.5-12.7-21.6-28.1-30.1-8.2-4.5-16.1-7.8-25.4-10%205.4-2.5%2010-5.4%2016.3-11%207.5-6.6%2013.1-15.7%2015.6-23.3%202.6-7.5%204.1-18%203.5-28.2-1.1-16.8-4.4-33.1-13.2-44.8-8.8-11.7-21.2-20.7-37.6-27-12.6-4.8-25.5-7.8-45.5-8.9V32h-40v64h-32V32h-41v64H96v48h27.9c8.7%200%2014.6.8%2017.6%202.3%203.1%201.5%205.3%203.5%206.5%206%201.3%202.5%201.9%208.4%201.9%2017.5V343c0%209-.6%2014.8-1.9%2017.4-1.3%202.6-2%204.9-5.1%206.3-3.1%201.4-3.2%201.3-11.8%201.3h-26.4L96%20416h87v64h41v-64h32v64h40v-64.4c26-1.3%2044.5-4.7%2059.4-10.3%2019.3-7.2%2034.1-17.7%2044.7-31.5%2010.6-13.8%2014.9-34.9%2015.8-51.2.7-14.5-.9-33.2-5.4-43.4zM224%20150h32v74h-32v-74zm0%20212v-90h32v90h-32zm72-208.1c6%202.5%209.9%207.5%2013.8%2012.7%204.3%205.7%206.5%2013.3%206.5%2021.4%200%207.8-2.9%2014.5-7.5%2020.5-3.8%204.9-6.8%208.3-12.8%2011.1v-65.7zm28.8%20186.7c-7.8%206.9-12.3%2010.1-22.1%2013.8-2%20.8-4.7%201.4-6.7%201.9v-82.8c5%20.8%207.6%201.8%2011.3%203.4%207.8%203.3%2015.2%206.9%2019.8%2013.2%204.6%206.3%208%2015.6%208%2024.7%200%2010.9-2.8%2019.2-10.3%2025.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-bitcoin($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-bitcoin-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-buffer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M70.7%20164.5l169.2%2081.7c4.4%202.1%2010.3%203.2%2016.1%203.2s11.7-1.1%2016.1-3.2l169.2-81.7c8.9-4.3%208.9-11.3%200-15.6L272.1%2067.2c-4.4-2.1-10.3-3.2-16.1-3.2s-11.7%201.1-16.1%203.2L70.7%20148.9c-8.9%204.3-8.9%2011.3%200%2015.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M441.3%20248.2s-30.9-14.9-35-16.9-5.2-1.9-9.5.1S272%20291.6%20272%20291.6c-4.5%202.1-10.3%203.2-16.1%203.2s-11.7-1.1-16.1-3.2c0%200-117.3-56.6-122.8-59.3-6-2.9-7.7-2.9-13.1-.3l-33.4%2016.1c-8.9%204.3-8.9%2011.3%200%2015.6l169.2%2081.7c4.4%202.1%2010.3%203.2%2016.1%203.2s11.7-1.1%2016.1-3.2l169.2-81.7c9.1-4.2%209.1-11.2.2-15.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M441.3%20347.5s-30.9-14.9-35-16.9-5.2-1.9-9.5.1S272.1%20391%20272.1%20391c-4.5%202.1-10.3%203.2-16.1%203.2s-11.7-1.1-16.1-3.2c0%200-117.3-56.6-122.8-59.3-6-2.9-7.7-2.9-13.1-.3l-33.4%2016.1c-8.9%204.3-8.9%2011.3%200%2015.6l169.2%2081.7c4.4%202.2%2010.3%203.2%2016.1%203.2s11.7-1.1%2016.1-3.2l169.2-81.7c9-4.3%209-11.3.1-15.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-buffer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-buffer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-chrome-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M188.8%20255.925c0%2036.946%2030.243%2067.178%2067.2%2067.178s67.2-30.23%2067.2-67.178c0-36.945-30.243-67.18-67.2-67.18s-67.2%2030.235-67.2%2067.18z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M476.752%20217.795c-.01.005-.016.038-.024.042-1.7-9.877-4.04-19.838-6.99-28.838h-.106c2.983%209%205.352%2019%207.072%2029h-.002c-1.72-10-4.088-20-7.07-29h-155.39c19.044%2017%2031.358%2040.174%2031.358%2067.05%200%2016.797-4.484%2031.285-12.314%2044.725L231.044%20478.452s-.01.264-.014.264l-.01.284h.015l-.005-.262c8.203.92%2016.53%201.262%2024.97%201.262%206.842%200%2013.61-.393%2020.3-1.002a223.86%20223.86%200%200%200%2029.776-4.733C405.68%20451.525%20480%20362.405%20480%20255.94c0-12.998-1.12-25.752-3.248-38.145z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20345.496c-33.6%200-61.6-17.91-77.285-44.785L76.005%20123.048l-.136-.236a223.516%20223.516%200%200%200-25.904%2045.124C38.406%20194.944%2032%20224.686%2032%20255.924c0%2062.696%2025.784%20119.36%2067.316%20160.01%2029.342%2028.72%2066.545%2049.433%20108.088%2058.62l.03-.052%2077.682-134.604c-8.96%203.358-19.03%205.598-29.116%205.598z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M91.292%20104.575l77.35%20133.25C176.482%20197.513%20212.315%20166%20256%20166h205.172c-6.92-15-15.594-30.324-25.78-43.938.04.02.08.053.118.074C445.644%20135.712%20454.278%20151%20461.172%20166h.172c-6.884-15-15.514-30.38-25.668-43.99-.115-.06-.23-.168-.342-.257C394.474%2067.267%20329.36%2032%20256%2032c-26.372%200-51.673%204.57-75.172%2012.936-34.615%2012.327-65.303%2032.917-89.687%2059.406l.143.243.01-.01z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-chrome($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-chrome-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-codepen-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M241.24%20303.936c-15.323-10.357-30.743-20.57-46.063-30.93-2.03-1.373-3.43-1.472-5.502-.03l-38.87%2026.155C181.964%20319.906%20244%20361.318%20244%20361.318V307.53c-.012-1.223-1.553-2.78-2.76-3.594zM195.092%20240.666c15.454-10.16%2030.85-20.41%2046.11-30.86%201.485-1.018%202.774-3.51%202.798-5.334v-51.706s-62.033%2041.124-93.262%2061.942c13.7%209.16%2026.67%2017.913%2039.787%2026.443%201.02.663%203.396.285%204.567-.484zM269.838%20209.354a4521.517%204521.517%200%200%200%2047.627%2031.815c.916.603%202.92.6%203.84%200l39.75-26.468L268%20152.484v53.35c.01%201.2.805%202.82%201.838%203.52zM258.11%20230.37c-1.21-.803-3.612-.53-4.744.167-4.817%202.962-9.463%206.203-14.164%209.355-8.248%205.53-25.356%2017.023-25.356%2017.023l38.842%2025.865c1.748%201.157%204.436%201.22%206.26.11l39.014-25.992s-34.08-22.7-39.853-26.53zM141%20237.116v39.61l29.622-19.84z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032C132.288%2032%2032%20132.288%2032%20256s100.288%20224%20224%20224%20224-100.288%20224-224S379.712%2032%20256%2032zm139%20265.006c0%205.785-2.652%209.868-7.51%2013.094a38019.91%2038019.91%200%200%200-123.287%2082.188c-5.854%203.918-11.174%203.754-16.984-.137-40.784-27.313-81.72-54.545-122.626-81.675-5.11-3.39-7.594-7.557-7.594-13.73v-79.73c0-6.14%202.52-10.33%207.624-13.715%2040.906-27.13%2081.94-54.363%20122.724-81.676%205.818-3.896%2011.094-4.007%2016.938-.095a41090.004%2041090.004%200%200%200%20123.26%2082.194c4.68%203.106%207.454%206.943%207.454%2012.66v80.622z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M316.247%20273.234a3826.352%203826.352%200%200%201-45.386%2030.332c-2.41%201.588-2.887%203.318-2.86%206.19V361.1l93.04-62.003-38.528-25.882c-2.345-1.604-3.93-1.567-6.265.02zM370%20276.676V237.06l-29.59%2019.873z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-codepen($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-codepen-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-css3-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.282%20339.488zM64%2032l34.946%20403.22L255.766%20480l157.26-44.85L448%2032H64zm290.676%20334.898l-98.607%2028.125-98.46-28.248L150.865%20289h48.253l3.433%2039.562%2053.586%2015.163.132.273h.034l53.467-14.852L315.38%20265H203l-4-50h120.646l4.396-51H140l-4-49h240.58l-21.904%20251.898z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-css3($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-css3-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-designernews-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M290.4%20145L227%2096l63.6%20102.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M329%2096v163h-36.4l-63.2-98.6%201.7%2098.6H191V152l-37.3-29.3c1%201.2%202%202.4%202.9%203.7%2010%2013.9%2015%2030.5%2015%2050.5%200%2049.2-30.6%2082.1-76.9%2082.1H32v.4L231.6%20416H480V214.1L329%2096z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M129.9%20178.1c0-29-14.2-45.1-39.7-45.1H71v89h19c26%200%2039.9-15.4%2039.9-43.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-designernews($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-designernews-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-dribbble-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064C150%2064%2064%20150%2064%20256c0%20106.1%2086%20192%20192%20192s192-85.9%20192-192c0-106-86-192-192-192zm121.9%2088.5c21.6%2025.4%2035.3%2057.6%2037.7%2092.9-34.6-1.8-76-1.8-109.2%201.3-4.2-10.6-8.5-21-13.2-31%2038.3-16.6%2067.8-38.4%2084.7-63.2zM256%2096c38.8%200%2074.4%2013.8%20102.1%2036.8-17.4%2022-44.7%2041.1-78.7%2055.6-18.6-34.4-40-64-62.8-87.3%2012.7-3.2%2025.8-5.1%2039.4-5.1zm-72.4%2017.5c23.1%2023%2044.8%2052.3%2063.8%2086.6-36.1%2011-77.5%2017.3-121.7%2017.3-8.4%200-16.6-.3-24.7-.8%2011.5-45.1%2042-82.5%2082.6-103.1zM96.3%20248.4c9.1.4%2018.3.6%2027.6.5%2050.4-.6%2097.3-8.5%20137.6-21.4%203.8%207.9%207.4%2016%2010.8%2024.3-5.5%201.3-10.4%202.7-14.3%204.3-55.1%2023.1-98.5%2060.4-122%20105.5-24.8-28.2-40-65.1-40-105.6%200-2.6.1-5.1.3-7.6zM256%20416c-37%200-71-12.6-98.1-33.7%2021.3-42.2%2059.3-77.1%20107.2-98.8%204.5-2.1%2010.5-3.8%2017.4-5.3%205.7%2015.8%2010.8%2032.2%2015.3%2049.2%206.9%2026.5%2011.8%2052.7%2014.8%2078.1C295%20412.2%20276%20416%20256%20416zm86.5-25.5c-3-25.7-7.9-52.1-14.9-78.9-3.4-13-7.3-25.6-11.5-37.9%2031.4-2.6%2069-2.2%2098.9%200-5.4%2049.1-33%2091.3-72.5%20116.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-dribbble($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-dribbble-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-dropbox-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M177%2077L64%20150.9l78.1%2062.7L256%20143.1zM64%20276.3l113%2073.9%2079-66.1-113.9-70.5zM256%20284.1l79%2066.1%20113-73.9-78.1-62.7zM448%20150.9L335%2077l-79%2066.1%20113.9%2070.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.2%20298.3l-79.8%2066-34.4-22.2V367l114%2068%20114-68v-24.9l-34.2%2022.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-dropbox($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-dropbox-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-euro-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M234%20272v-48h131.094l7.15-48H234v-1.83c0-35.92%2014.975-58.086%2079.25-58.086%2026.264%200%2055.867%202.498%2093.19%208.742l9.56-64.96C377.988%2051.123%20345.306%2048%20310.057%2048%20195.327%2048%20146%2089.225%20146%20165.43V176H96v48h50v48H96v48h50v26.57C146%20422.774%20195.297%20464%20310.027%20464c35.25%200%2067.848-3.123%20105.86-11.866l-9.62-64.96c-37.322%206.244-66.78%208.742-93.045%208.742-64.276%200-79.223-18.74-79.223-63.086V320h116.794l7.148-48H234z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-euro($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-euro-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-facebook-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M426.8%2064H85.2C73.5%2064%2064%2073.5%2064%2085.2v341.6c0%2011.7%209.5%2021.2%2021.2%2021.2H256V296h-45.9v-56H256v-41.4c0-49.6%2034.4-76.6%2078.7-76.6%2021.2%200%2044%201.6%2049.3%202.3v51.8h-35.3c-24.1%200-28.7%2011.4-28.7%2028.2V240h57.4l-7.5%2056H320v152h106.8c11.7%200%2021.2-9.5%2021.2-21.2V85.2c0-11.7-9.5-21.2-21.2-21.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-facebook($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-facebook-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-foursquare-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M376.764%2032H138.54C105.667%2032%2096%2056.798%2096%2072.414v379.64c0%2017.59%209.425%2024.117%2014.718%2026.267%205.3%202.156%2019.916%203.972%2028.673-6.167%200%200%20112.47-130.895%20114.4-132.834%202.922-2.93%202.922-2.93%205.845-2.93h72.767c30.574%200%2035.49-21.87%2038.684-34.753%202.66-10.79%2032.49-163.962%2042.452-212.56C421.143%2051.994%20411.745%2032%20376.764%2032zm-5.678%20269.637c2.66-10.79%2032.49-163.962%2042.452-212.56m-50.846%207.593l-10%2051.734C351.5%20154.054%20344.407%20160%20337.83%20160h-95.917C231.473%20160%20224%20166.137%20224%20176.6v13.448c0%2010.473%207.52%2017.894%2017.965%2017.894h81.848c7.374%200%2014.61%208.11%2013.016%2016.005-1.603%207.907-9.087%2046.568-9.985%2050.89-.902%204.327-5.845%2011.724-14.61%2011.724h-64.27c-11.705%200-15.244%201.533-23.074%2011.293-7.836%209.77-78.255%2094.592-78.255%2094.592-.713.82-1.41.583-1.41-.313V95.897c0-6.685%205.793-14.524%2014.48-14.524h191.172c7.035%200%2013.61%206.63%2011.815%2015.297z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-foursquare($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-foursquare-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-freebsd-devil-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M502.6%20115c-22.5-43.7-58-51-58-51s15.5%2032%2016%2051c.4%2016.1-5.5%2028-27.2%2033.5s-30.8-2-47.8-17.5-41.6-26.5-72.6-28c-40-2-77%209-77%209-20-25%2020-80%2020-80-74.5%2029.5-93.7%2083.3-96%20113.7-1.9%2024.1%208.5%2040.8%208.5%2040.8s-.5%2027.8-5%2042c-3.1%209.8-16.9%2025-26%2034.5-12.2%2012.7-12.5%2038.5%200%2057s44%2027.5%2067%2039.5%2031.5%2021%2031.5%2021%201%208.3.5%2015.3-3.2%2014-9%2018.2c-5.5%203.9-15.5.5-20.5-2s-5-6.2-10.5-8-7.3-4-6.5-11%202-9-3.5-18.5-18.5-9.5-29.5-8-17.3%206.8-17.3%206.8l-16.3-10s8.5-15.6%205.2-35.6c-7.3-43.8-50-62.8-50-62.8L89%20309.3s1.1-2.6%206.4-6.4%208.1-3.6%208.1-3.6%206.6%207.6%209.1%2025.3c2.5%2018-6.7%2027.2-6.7%2027.2l-28.3-18%201-14.5L39.8%20309%2056%20345.7l15-4%2024%2022.7s-15.7%2011.7-33%2011.7c-11%200-22-6-22-6s-1.4-1-.8-5.5c.7-5%206.8-12.5%206.8-12.5H0s27.3%2038.7%2065%2038.7c31%200%2044.2-12.5%2044.2-12.5L128%20397s3%205.5%200%207-7%203.5-9%2015%2018%2029%2018%2029c21.8%2017.8%207%2032%207%2032h272c-9-13-22.5-18-32-32%200%200-44.8-58.4-1.8-90.4%2057.4-42.7%2042.8-69.4%2041.2-101.4%200%200%2031.8-6.6%2059.3-33.6s38.9-70.8%2019.9-107.6zM195%20203c-16.9%204.5-22.5%2035.5-22.5%2035.5%201.5-63%2057.5-93%2065-89s-6.5%2039-21%2064c0%200-8-14.1-21.5-10.5zm37%2015s18-56%2037.5-59.5%2041.5%2021%2041.5%2062-26%2065.4-42.8%2069.2c-16.5%203.8-23%202-23%202s27.5-21.6%2023.5-56.8c-2.8-24.7-31.4-24.2-36.7-16.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-freebsd-devil($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-freebsd-devil-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-github-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032C132.3%2032%2032%20134.9%2032%20261.7c0%20101.5%2064.2%20187.5%20153.2%20217.9%201.4.3%202.6.4%203.8.4%208.3%200%2011.5-6.1%2011.5-11.4%200-5.5-.2-19.9-.3-39.1-8.4%201.9-15.9%202.7-22.6%202.7-43.1%200-52.9-33.5-52.9-33.5-10.2-26.5-24.9-33.6-24.9-33.6-19.5-13.7-.1-14.1%201.4-14.1h.1c22.5%202%2034.3%2023.8%2034.3%2023.8%2011.2%2019.6%2026.2%2025.1%2039.6%2025.1%2010.5%200%2020-3.4%2025.6-6%202-14.8%207.8-24.9%2014.2-30.7-49.7-5.8-102-25.5-102-113.5%200-25.1%208.7-45.6%2023-61.6-2.3-5.8-10-29.2%202.2-60.8%200%200%201.6-.5%205-.5%208.1%200%2026.4%203.1%2056.6%2024.1%2017.9-5.1%2037-7.6%2056.1-7.7%2019%20.1%2038.2%202.6%2056.1%207.7%2030.2-21%2048.5-24.1%2056.6-24.1%203.4%200%205%20.5%205%20.5%2012.2%2031.6%204.5%2055%202.2%2060.8%2014.3%2016.1%2023%2036.6%2023%2061.6%200%2088.2-52.4%20107.6-102.3%20113.3%208%207.1%2015.2%2021.1%2015.2%2042.5%200%2030.7-.3%2055.5-.3%2063%200%205.4%203.1%2011.5%2011.4%2011.5%201.2%200%202.6-.1%204-.4C415.9%20449.2%20480%20363.1%20480%20261.7%20480%20134.9%20379.7%2032%20256%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-github($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-github-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-google-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M457.6%20224l-2.1-8.9H262V297h115.6c-12%2057-67.7%2087-113.2%2087-33.1%200-68-13.9-91.1-36.3-23.7-23-38.8-56.9-38.8-91.8%200-34.5%2015.5-69%2038.1-91.7%2022.5-22.6%2056.6-35.4%2090.5-35.4%2038.8%200%2066.6%2020.6%2077%2030l58.2-57.9c-17.1-15-64-52.8-137.1-52.8-56.4%200-110.5%2021.6-150%2061C72.2%20147.9%2052%20204%2052%20256s19.1%20105.4%2056.9%20144.5c40.4%2041.7%2097.6%2063.5%20156.5%2063.5%2053.6%200%20104.4-21%20140.6-59.1%2035.6-37.5%2054-89.4%2054-143.8%200-22.9-2.3-36.5-2.4-37.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-google($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-google-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-googleplus-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M318.2%20230.9l-1.6-7H160V288h90.7c-9.4%2045-48.4%2063.6-84.1%2063.6-26%200-50.2-7.8-68.3-25.3-18.6-18.1-28.9-43.1-28.9-70.4%200-27.1%209.8-51.8%2027.6-69.6%2017.7-17.7%2042-25.4%2068.7-25.4%2030.5%200%2049.9%2013.8%2058.1%2021.1l48-47.7C258.3%20122.6%20221.5%2093%20164.1%2093c-44.3%200-86.7%2016.8-117.7%2047.8C15.9%20171.3%200%20215.2%200%20256s15%2082.6%2044.6%20113.3C76.3%20402%20121.2%20419%20167.5%20419c42.1%200%2081.9-16.5%20110.3-46.3%2028-29.4%2042.4-70.1%2042.4-112.7-.1-18-1.9-28.7-2-29.1zM512%20224h-57v-57h-41v57h-57v41h57v57h41v-57h57z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-googleplus($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-googleplus-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-hackernews-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v384h384V64H64zm214%20215v72h-40v-72l-66-120h47.1l39.7%2083.6%2038-83.6H342l-64%20120z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-hackernews($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-hackernews-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-html5-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2032l34.936%20403.213L255.77%20480l157.244-44.854L448%2032H64zm307.997%20132h-184l3.99%2051h176.01L354.49%20366.386l-98.5%2028.094-98.68-27.976L150.544%20289H198.8l3.422%2039.287%2053.77%2014.78%2053.42-14.914L314.988%20264h-167l-12.572-149.59%20240.79.017L371.996%20164z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-html5($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-html5-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-instagram-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22255.833%22%20r%3D%2280%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M177.805%20176.887c21.154-21.154%2049.28-32.93%2079.195-32.93s58.04%2011.838%2079.195%2032.992c13.422%2013.42%2023.01%2029.55%2028.232%2047.55H448.5v-113c0-26.51-20.49-47-47-47h-288c-26.51%200-49%2020.49-49%2047v113h85.072c5.222-18%2014.81-34.19%2028.233-47.613zM416.5%20147.7c0%207.07-5.73%2012.8-12.8%2012.8h-38.4c-7.07%200-12.8-5.73-12.8-12.8v-38.4c0-7.07%205.73-12.8%2012.8-12.8h38.4c7.07%200%2012.8%205.73%2012.8%2012.8v38.4zM336.195%20335.28c-21.154%2021.153-49.28%2032.678-79.195%2032.678s-58.04-11.462-79.195-32.616c-21.115-21.115-32.76-49.842-32.803-78.842H64.5v143c0%2026.51%2022.49%2049%2049%2049h288c26.51%200%2047-22.49%2047-49v-143h-79.502c-.043%2029-11.687%2057.664-32.803%2078.78z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-instagram($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-instagram-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-javascript-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M208%2088h-80v212.5c0%2052.58-18.032%2067.26-49.412%2067.26-14.705%200-27.948-2.52-38.25-6.063L32%20423.904C46.7%20428.966%2069.26%20432%2086.907%20432%20158.955%20432%20208%20398.13%20208%20301.02V88zM382.463%2080C305.02%2080%20256%20123.998%20256%20182.154c0%2050.083%2037.75%2081.44%2092.64%20101.665%2039.7%2014.157%2055.393%2026.807%2055.393%2047.538%200%2022.756-18.14%2037.425-52.448%2037.425-31.863%200-60.79-10.64-80.394-21.255v-.02L256%20410.727c18.64%2010.637%2053.44%2021.254%2091.167%2021.254C437.854%20431.98%20480%20383.43%20480%20326.284c0-48.55-26.958-79.9-85.278-102.163-43.14-17.19-61.27-26.794-61.27-48.54%200-17.2%2015.688-32.87%2048.043-32.87%2031.846%200%2053.744%2010.707%2066.505%2017.29l19.125-64c-20-8.78-46.937-16-84.662-16z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-javascript($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-javascript-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-linkedin-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M417.2%2064H96.8C79.3%2064%2064%2076.6%2064%2093.9V415c0%2017.4%2015.3%2032.9%2032.8%2032.9h320.3c17.6%200%2030.8-15.6%2030.8-32.9V93.9C448%2076.6%20434.7%2064%20417.2%2064zM183%20384h-55V213h55v171zm-25.6-197h-.4c-17.6%200-29-13.1-29-29.5%200-16.7%2011.7-29.5%2029.7-29.5s29%2012.7%2029.4%2029.5c0%2016.4-11.4%2029.5-29.7%2029.5zM384%20384h-55v-93.5c0-22.4-8-37.7-27.9-37.7-15.2%200-24.2%2010.3-28.2%2020.3-1.5%203.6-1.9%208.5-1.9%2013.5V384h-55V213h55v23.8c8-11.4%2020.5-27.8%2049.6-27.8%2036.1%200%2063.4%2023.8%2063.4%2075.1V384z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-linkedin($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-linkedin-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-markdown-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23231F20%22%20d%3D%22M447.66%2096H64.34C46.505%2096%2032%20110.484%2032%20128.308v255.35C32%20401.492%2046.504%20416%2064.34%20416h383.32c17.836%200%2032.34-14.507%2032.34-32.344V128.308C480%20110.484%20465.496%2096%20447.66%2096zM284.022%20352h-56.048v-96l-42.04%2053.878L143.913%20256v96H87.87V160h56.043l42.022%2067.98%2042.04-67.98h56.048v192zm83.657%200l-69.635-96h42v-96h56.043v96h42.027l-70.453%2096h.018z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-markdown($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-markdown-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-nodejs-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.917%20480a32.536%2032.536%200%200%201-16.633-4.6L186.3%20442.96c-7.915-4.56-4.024-6.202-1.444-7.14%2010.565-3.78%2013.713-5.657%2024.947-12.285%201.206-.667%202.747-.424%203.955.322l39.71%2023.504c1.476.85%203.557.85%204.93%200l155.19-92.245c1.474-.877%202.414-2.646%202.414-4.44V163.868c0-1.85-.94-3.593-2.45-4.53l-155.12-94.67c-1.477-.895-3.42-.895-4.897%200l-155.02%2094.704c-1.543.903-2.515%202.698-2.515%204.495v186.804c0%201.813.972%203.513%202.48%204.39l39.93%2023.97c23.61%2012.205%2037.59-.17%2037.59-14.61v-183.7c0-2.65%202.047-4.726%204.596-4.726h22.81c2.514%200%204.596%202.072%204.596%204.727v183.698c0%2032.563-19.353%2051.248-49.2%2051.248-9.155%200-16.396%200-36.55-10.278l-41.585-24.78C70.37%20374.458%2064%20362.964%2064%20350.655V161.19c0-12.315%206.37-23.783%2016.665-29.916L239.35%2036.41c10.027-5.88%2023.374-5.88%2033.332%200l158.65%2094.864C441.63%20137.424%20448%20148.9%20448%20161.19v189.466c0%2012.31-6.37%2023.75-16.668%2029.953l-158.65%2094.773a32.52%2032.52%200%200%201-16.698%204.6l-.067.017z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M304.943%20351.998c-64.61%200-84.006-31.61-84.006-59.27%200-2.63%202.048-4.73%204.562-4.73h20.52c2.282%200%204.227%201.7%204.562%204.016%203.084%2021.602%2016.748%2031.15%2054.324%2031.15%2033.4%200%2047.09-10.346%2047.09-28.684%200-10.592-3.462-18.424-55.406-23.697-43.427-4.44-70.288-14.373-70.288-50.295%200-33.135%2026.996-52.49%2072.234-52.49%2046.128%200%2076.462%2014%2079.173%2050.83.1%201.336-.37%202.628-1.242%203.643-.87.966-2.078%201.528-3.353%201.528h-20.59c-2.147%200-4.025-1.562-4.46-3.713-4.4-16.953-16.97-23.402-49.563-23.402-36.486%200-40.746%2012.753-40.746%2022.607%200%2011.963%205.03%2015.44%2054.294%2022.172%2048.76%206.663%2071.933%2016.117%2071.933%2051.552%200%2035.78-28.808%2058.783-79.075%2058.783h.035z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-nodejs($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-nodejs-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-octocat-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cg%20fill%3D%22%23231F20%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M178.354%20287.478c-9.123%200-16.928%204.207-23.2%2012.833-6.292%208.48-9.4%2018.974-9.4%2031.432%200%2012.474%203.167%2023.008%209.4%2031.51%206.272%208.54%2014.038%2012.77%2023.2%2012.77%208.494%200%2015.89-4.27%2022.12-12.77%206.272-8.502%209.4-19.036%209.4-31.51%200-12.42-3.167-22.93-9.4-31.43-6.232-8.588-13.566-12.834-22.12-12.834zM334.668%20287.478c-9.045%200-16.89%204.207-23.182%2012.833-6.27%208.48-9.36%2018.974-9.36%2031.432%200%2012.474%203.187%2023.008%209.36%2031.51%206.29%208.54%2014.098%2012.77%2023.182%2012.77%208.533%200%2015.906-4.27%2022.178-12.77%206.293-8.502%209.418-19.036%209.418-31.51%200-12.42-3.164-22.93-9.418-31.43-6.272-8.588-13.547-12.834-22.178-12.834z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M445.777%20172h-.06s2.794-14.264.315-39.18c-2.182-24.916-7.47-47.838-16.123-68.82%200%200-4.423.76-12.76%202.896s-22.08%206.3-40.94%2014.768c-18.54%208.54-37.985%2019.788-58.296%2033.505-13.803-3.935-34.408-5.94-61.994-5.94-26.29%200-46.914%202.012-61.977%205.945C149.35%2084.315%20112.11%2067.23%2081.85%2064c-8.593%2020.982-13.882%2043.99-16.044%2068.97-2.398%2024.94.432%2039.33.432%2039.33C41.978%20198.55%2032%20236.54%2032%20267.792c0%2024.244.658%2046.078%206.125%2065.48%205.564%2019.31%2012.662%2035.13%2021.098%2047.22%208.61%2012.122%2019.012%2022.79%2031.576%2031.94%2012.466%209.313%2023.987%2015.96%2034.388%2020.215%2010.46%204.372%2022.375%207.602%2035.982%209.86%2013.33%202.387%2023.438%203.646%2030.477%203.997%200%200%2028%201.494%2064.354%201.494%2036.355%200%2064.296-1.495%2064.296-1.495%207.02-.352%2017.145-1.634%2030.535-3.996%2013.548-2.3%2025.522-5.608%2035.942-9.862%2010.402-4.293%2021.943-10.9%2034.47-20.216%2012.522-9.032%2022.905-19.74%2031.517-31.938%208.435-12.09%2015.493-27.91%2021.097-47.22%205.486-19.403%206.145-41.386%206.145-65.63C480%20237.39%20469.982%20199%20445.777%20172zm-65.394%20233.645C352.52%20418.735%20311.486%20424%20257.06%20424l-2.142-.04c-54.443%200-95.36-5.247-122.848-18.41-27.508-13.09-41.27-40.056-41.27-80.737%200-24.33%208.57-43.99%2025.48-59.107%207.355-6.515%2016.44-11.02%2027.646-13.717%2011.13-2.56%2021.354-2.763%2030.97-2.466%209.397.415%2022.55%202.196%2039.343%203.464C231.03%20254.285%20243.534%20256%20256%20256c11.698%200%2027.213-1.957%2052.104-3.96%2024.99-1.97%2043.494-2.97%2055.467-1%2012.29%202.003%2022.987%206.203%2032.13%2014.743%2017.734%2015.75%2026.602%2035.505%2026.602%2059.084%200%2040.666-14.138%2067.67-41.92%2080.778z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-octocat($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-octocat-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-pinterest-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032C132.3%2032%2032%20132.3%2032%20256c0%2091.7%2055.2%20170.5%20134.1%20205.2-.6-15.6-.1-34.4%203.9-51.4%204.3-18.2%2028.8-122.1%2028.8-122.1s-7.2-14.3-7.2-35.4c0-33.2%2019.2-58%2043.2-58%2020.4%200%2030.2%2015.3%2030.2%2033.6%200%2020.5-13.1%2051.1-19.8%2079.5-5.6%2023.8%2011.9%2043.1%2035.4%2043.1%2042.4%200%2071-54.5%2071-119.1%200-49.1-33.1-85.8-93.2-85.8-67.9%200-110.3%2050.7-110.3%20107.3%200%2019.5%205.8%2033.3%2014.8%2043.9%204.1%204.9%204.7%206.9%203.2%2012.5-1.1%204.1-3.5%2014-4.6%2018-1.5%205.7-6.1%207.7-11.2%205.6-31.3-12.8-45.9-47-45.9-85.6%200-63.6%2053.7-139.9%20160.1-139.9%2085.5%200%20141.8%2061.9%20141.8%20128.3%200%2087.9-48.9%20153.5-120.9%20153.5-24.2%200-46.9-13.1-54.7-27.9%200%200-13%2051.6-15.8%2061.6-4.7%2017.3-14%2034.5-22.5%2048%2020.1%205.9%2041.4%209.2%2063.5%209.2%20123.7%200%20224-100.3%20224-224C480%20132.3%20379.7%2032%20256%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-pinterest($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-pinterest-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-playstation-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M399.8%20203c-.8-17.1-3.3-34.5-10.8-50.1-4.1-8.6-9.7-16.5-16.5-23.2-6.3-6.4-13.6-11.7-21.3-16.3-17.1-10.2-37.5-17-84.4-31S192%2064%20192%2064v358.3l79.9%2025.7s.1-198.8.1-299.5v-3.8c0-9.3%207.5-16.8%2016.1-16.8h.5c8.5%200%2015.5%207.5%2015.5%2016.8V278c11%205.3%2029.2%209.3%2041.8%209.1%208.3.2%2016.7-1.7%2024-5.7%207.6-4.1%2013.9-10.4%2018.4-17.8%205.1-8.3%208.2-17.8%209.9-27.3%201.9-10.8%202-22.1%201.6-33.3zM86.7%20357.8c27.4-9.8%2089.3-29.5%2089.3-29.5v-47.2s-76.5%2024.8-111.3%2037.1c-8.6%203.1-17.3%205.9-25.7%209.5-9.8%204.1-19.4%208.7-28.1%2014.8-3.8%202.6-7.2%205.9-9.2%2010.1-2%204.2-2.2%209.2-.5%2013.6%202%205.1%205.8%209.3%2010.1%2012.6%207.8%205.9%2017.1%209.5%2026.4%2012.2%2028.4%209.4%2058.4%2014%2088.4%2013.3%2014.5-.2%2036-1.9%2050-4.4v-42s-11%202.5-41.3%2012.5c-4.6%201.5-9.2%203.3-14%204.3-7.1%201.6-14.4%202.1-21.6%202.2-6.5-.3-13.2-.7-19.3-3.1-2.2-1-4.6-2.2-5.5-4.6-.8-2%20.3-4%201.7-5.4%202.8-2.9%206.8-4.5%2010.6-6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M512%20345.9c-.1-6-3.7-11.2-7.9-15-7.1-6.3-15.9-10.3-24.7-13.5-5.5-1.9-9.3-3.3-14.7-5-25.2-8.2-51.9-11.2-78.3-11.3-8%20.3-23.1.5-31%201.4-21.9%202.5-67.3%2015.4-67.3%2015.4v48.8s67.5-21.6%2096.5-31.8c9.7-3.3%2020.1-4.6%2030.3-4.6%206.5.2%2013.2.7%2019.4%203.1%202.2.9%204.5%202.2%205.5%204.5.9%202.6-.9%205-2.9%206.5-4.7%203.8-10.7%205.3-16.2%207.4-41%2014.5-132.7%2044.7-132.7%2044.7v47s117.2-39.6%20170.8-58.8c8.9-3.3%2017.9-6.1%2026.4-10.4%207.9-4%2015.8-8.6%2021.8-15.3%203.1-3.6%205-8%205-13.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-playstation($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-playstation-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-python-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M193.46%20249.056c3.723-.67%207.59-1.04%2011.586-1.04l-3.122-.016h103.823c4.503%200%208.806-.617%2012.908-1.754C338.025%20240.883%20352%20223.71%20352%20202.583V115.36c0-24.833-21.15-43.485-46.29-47.607-15.93-2.624-39.257-3.827-55.088-3.75-15.83.087-30.98%201.405-44.277%203.75C167.143%2074.576%20160%2088.928%20160%20115.36V144h96v16H128.82c-35.628%200-64.538%2042.57-64.813%2095.242-.002.253-.007.505-.007.758%200%209.523.94%2018.72%202.685%2027.404C74.648%20323.07%2099.45%20352%20128.82%20352H144v-45.935c0-26.827%2020.146-51.733%2049.46-57.01zm10.196-122.054c-9.592%200-17.384-7.785-17.384-17.403%200-9.665%207.774-17.52%2017.384-17.52%209.574%200%2017.4%207.854%2017.4%2017.52%200%209.617-7.81%2017.402-17.4%2017.402z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M443.95%20222.543C434.78%20186.02%20411.034%20160%20383.18%20160H368v40.672c0%2033.915-22.286%2058.474-49.49%2062.68a53.943%2053.943%200%200%201-8.3.647H206.35a51.41%2051.41%200%200%200-13.048%201.67C174.18%20270.69%20160%20286.6%20160%20307.237v87.227c0%2024.832%2024.977%2039.426%2049.48%2046.55%2029.328%208.532%2061.268%2010.07%2096.367%200%2023.303-6.66%2046.153-20.12%2046.153-46.55V368h-96v-16h127.18c25.24%200%2047.107-21.365%2057.814-52.55C445.474%20286.405%20448%20271.64%20448%20256c0-11.768-1.433-23.038-4.05-33.457zM307.868%20382.82c9.59%200%2017.38%207.785%2017.38%2017.4%200%209.65-7.79%2017.52-17.38%2017.52-9.577%200-17.4-7.87-17.4-17.52%200-9.63%207.807-17.4%2017.4-17.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-python($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-python-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-reddit-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22322.3%22%20cy%3D%22288.4%22%20r%3D%2231.8%22%2F%3E%3Ccircle%20cx%3D%22190.3%22%20cy%3D%22288.4%22%20r%3D%2231.8%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480.5%20251c0-27.7-22.2-50.2-49.5-50.2-13%200-24.7%205-33.6%2013.3-33.2-23.4-78.4-38.5-128.7-40.7L292%2095.7l69.6%2013.9c.2%2024.7%2020.1%2044.7%2044.5%2044.7%2024.6%200%2044.5-20.2%2044.5-45.1S430.7%2064%20406.1%2064c-18.6%200-34.5%2011.6-41.2%2028l-85.2-17-29.4%2098.2-7.1.2c-50.3%202.2-95.5%2017.4-128.7%2040.7-8.8-8.3-20.6-13.3-33.6-13.3-27.3%200-49.5%2022.5-49.5%2050.2%200%2019.6%2011%2036.5%2027.1%2044.8-.8%204.9-1.2%209.8-1.2%2014.8C57.5%20386.4%20146.4%20448%20256%20448s198.5-61.6%20198.5-137.5c0-5-.4-9.9-1.1-14.8%2016.1-8.3%2027.1-25.2%2027.1-44.7zM406.1%2081.9c14.8%200%2026.8%2012.2%2026.8%2027.2s-12%2027.2-26.8%2027.2-26.8-12.2-26.8-27.2%2012-27.2%2026.8-27.2zM49.2%20251c0-17.8%2014.3-32.2%2031.8-32.2%207.2%200%2013.9%202.5%2019.2%206.6-17.3%2015.2-30.1%2033-37%2052.4-8.4-5.9-14-15.7-14-26.8zm337.2%20141.9C351.8%20416.8%20305.5%20430%20256%20430s-95.8-13.2-130.4-37.1c-32.5-22.5-50.4-51.8-50.4-82.4%200-3.2.2-6.5.6-9.7.7-6%202.2-11.9%204.3-17.7%205.6-15.6%2016-30.3%2030.7-43.4%204.4-3.9%209.2-7.7%2014.4-11.3.1-.1.3-.2.4-.3C160.2%20204.2%20206.5%20191%20256%20191s95.8%2013.2%20130.4%2037.1c.1.1.3.2.4.3%205.2%203.6%2010%207.4%2014.4%2011.3%2014.7%2013.1%2025.1%2027.8%2030.7%2043.4%202.1%205.8%203.5%2011.7%204.3%2017.7.4%203.2.6%206.4.6%209.7%200%2030.6-17.9%2059.9-50.4%2082.4zm62.4-115.2c-6.9-19.4-19.7-37.2-37-52.4%205.3-4.1%2012-6.6%2019.2-6.6%2017.5%200%2031.8%2014.5%2031.8%2032.2%200%2011.2-5.6%2021-14%2026.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320.5%20357.9c-.2.2-24.2%2024.2-64.5%2024.4-40.9-.2-64.4-24.2-64.6-24.4l-12.6%2012.4c1.2%201.2%2029.6%2029.5%2077.2%2029.7%2047.6-.2%2075.9-28.5%2077.1-29.7l-12.6-12.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-reddit($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-reddit-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-rss-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M119.9%20336.1c-30.8%200-55.9%2025.1-55.9%2055.8%200%2030.8%2025.1%2055.6%2055.9%2055.6%2030.9%200%2055.9-24.9%2055.9-55.6%200-30.7-25-55.8-55.9-55.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20192v79.9c48%200%2094.1%2014.2%20128%2048.1%2033.9%2033.9%2048%2079.9%2048%20128h80c0-139.9-116-256-256-256z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v79.9c171%200%20303.9%20133%20303.9%20304.1H448C448%20236.3%20276%2064%2064%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-rss($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-rss-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-sass-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23231F20%22%20d%3D%22M511.784%20329.108c-1.67-13.6-9.236-24.146-20.795-32.416l-.056-.04c-7.19-5.132-3.38-2.412-.047-.033-28.5-20.302-65.676-15.79-96.733-4.512-12.447-20.295-12.987-35.783-5.816-57.937.93-2.8.295-4.353-2.624-5.603-7.086-3.03-17.29-1.427-24.422.463-2.462.646-4.254%201.9-4.8%204.38-5.154%2024.244-21.01%2046.45-34.828%2066.887-9.73-18.652-8.96-33.087-2.414-52.516.798-2.365.43-3.623-1.937-4.878-7.26-3.757-18.4-1.912-25.8.276-8.51%202.482-21.29%2044.594-25.372%2052.946-8.53%2017.442-16.09%2044.665-30.584%2058.502-12.3-15.807%2022.526-51.517%2010.882-65.85-3.938-4.85-11.063-4.724-15.586-.617%201.085-7.61%201.648-12.61-.32-19.064-2.08-6.79-7.36-10.687-15.09-10.49-17.995.527-33.843%2013.815-44.64%2026.397-10.278%2012.105-37.382%2019.627-51.954%2026.927-25.032-21.807-79.22-44.947-80.632-82.08-1.528-41.847%2048.32-70.246%2081.597-87.23%2043.28-22.103%20109.96-49.607%20159.138-25.435%2013.05%206.414%2018.3%2020.17%2014.708%2033.348-9.368%2034.366-47.198%2057.293-80.103%2067.807-16.19%205.175-33.97%209.027-51.1%208.026-22.955-1.343-40.83-15.224-43.28-16.086-2.05-.39-1.89%202.26-1.348%203.664%2023.816%2062.433%20144.417%2016.68%20175.956-15.37%2015.19-15.422%2024.413-30.366%2028.35-53.895%204.617-27.584-15.633-44.843-31.003-51.958C213.212%2056.65%20105.494%20103.89%2046.577%20152.05c-25.568%2020.9-57.552%2054.11-42.874%2088.945%2015.93%2037.805%2064.736%2057.19%2096.503%2080.312-25.704%2012.773-57.862%2025.983-74.518%2049.933-9.524%2013.73-12.903%2028.36-5.81%2043.966%2012.57%2027.568%2058.284%2015.622%2077.572%203.47%2017.67-11.13%2029.563-26.07%2034.7-45.227%204.455-16.61%203.54-33.867-3.856-49.513l28.585-14.458c-7.698%2023.075-11.098%2052.002%204.88%2072.854%206.402%208.338%2023.017%208.675%2029.817.31%208.816-10.942%2014.664-24.654%2020.503-37.205-.682%209.372-1.856%2019.995%201.377%2028.164%203.71%209.373%2012.126%2011.29%2020.792%205.343%2026.52-18.203%2043.397-68.652%2056.462-98.062%203.552%2012.83%207.473%2024.548%2013.957%2036.376%201.6%202.904%201.406%204.775-.797%207.196-9.685%2010.675-32.826%2028.48-35.07%2042.9-.523%203.37%201.714%206.598%205.687%207.37%2015.573%203.107%2032.838-2.532%2045.482-11.08%2013.188-8.92%2017.446-21.086%2014.245-35.514-4.576-20.77%2010.993-43.98%2025.8-61.03%202.72%2012.908%206.817%2025.33%2014.144%2036.606-13.074%2011.483-32.58%2027.764-29.778%2046.94.988%206.864%207.135%2011.3%2014.514%209.735%2015.783-3.324%2029.416-10.113%2039.37-22.146%209.023-10.855%205.792-22.7%201.856-34.635%2023.872-6.815%2048.022-8.177%2071.83-.027%2011.496%203.91%2020.756%2010.5%2026.25%2020.818%206.725%2012.644%202.938%2024.292-10.05%2032.604-3.288%202.104-5.563%203.833-4.45%204.743%201.11.91%204.9%202.113%2013.283-3.152%208.384-5.267%2013.51-12.383%2014.823-21.725a37.09%2037.09%200%200%200-.024-7.755zm-398.838%2025.26c-1.358%2016.672-9.636%2030.192-23.175%2041.113-7.616%206.16-17.1%2011.177-26.52%2012.093-9.417.917-16.75-1.46-17.377-11.23-1.764-27.493%2040.923-54.424%2064.625-62.533%202.02%206.86%203.01%2013.666%202.432%2020.587l.016-.03zm103.102-72.454c-3.903%2022.31-14.83%2062.347-32.314%2078.336-2.356%202.143-4.61%202.018-5.81-.77-10.344-24.06%203.672-73.67%2033.083-81.33%203.457-.888%205.602.583%205.04%203.764zm70.31%2081.768c8.423-8.962%2016.835-17.916%2025.27-26.927%201.043%2010.02-17.57%2029.964-25.27%2026.927zm80.715-17.696c-2.348%201.273-7.62%202.515-7.827.835-1.482-12.084%2011.816-24.873%2020.067-30.866%204.453%2011.343-.818%2023.834-12.24%2030.032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-sass($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-sass-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-skype-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M436.9%20296.8c2.8-12.5%204.2-25.4%204.2-38.7%200-99.7-82-180.6-183.2-180.6-10.7%200-21.1.9-31.3%202.6C210.3%2069.9%20191%2064%20170.2%2064%20111.6%2064%2064%20110.9%2064%20168.7c0%2019.4%205.3%2037.5%2014.6%2053-2.4%2011.7-3.7%2023.9-3.7%2036.3%200%2099.8%2082%20180.6%20183.1%20180.6%2011.5%200%2022.7-1%2033.5-3%2015%207.9%2032.1%2012.4%2050.2%2012.4%2058.7%200%20106.2-46.9%20106.2-104.7.1-16.7-3.9-32.5-11-46.5zm-85%2047.5c-8.5%2011.8-21%2021.2-37.2%2027.8-16.1%206.6-35.3%209.9-57.3%209.9-26.3%200-48.3-4.6-65.6-13.6-12.3-6.6-22.4-15.4-30.2-26.4-7.8-11-11.7-22-11.7-32.6%200-6.6%202.6-12.3%207.6-17.1%205-4.6%2011.5-7%2019.1-7%206.3%200%2011.7%201.8%2016.1%205.5%204.2%203.5%207.8%208.7%2010.7%2015.5%203.3%207.3%206.8%2013.5%2010.6%2018.4%203.6%204.7%208.7%208.6%2015.3%2011.7%206.7%203.1%2015.6%204.7%2026.6%204.7%2015.1%200%2027.5-3.2%2036.8-9.5%209.2-6.1%2013.6-13.5%2013.6-22.5%200-7.1-2.3-12.7-7.1-17.1-5-4.6-11.5-8.2-19.6-10.6-8.3-2.6-19.6-5.3-33.6-8.2-19-4-35.1-8.8-48-14.2-13.1-5.5-23.7-13.2-31.5-22.7-7.9-9.7-11.8-21.9-11.8-36.2%200-13.7%204.2-25.9%2012.4-36.5%208.2-10.5%2020.1-18.7%2035.6-24.3%2015.2-5.6%2033.3-8.4%2053.7-8.4%2016.4%200%2030.7%201.9%2042.7%205.5%2012.1%203.7%2022.2%208.7%2030.3%2014.9%208%206.2%2014%2012.8%2017.8%2019.7%203.8%207%205.7%2013.9%205.7%2020.6%200%206.4-2.5%2012.3-7.5%2017.4-5%205.1-11.3%207.8-18.8%207.8-6.8%200-12.1-1.6-15.8-4.8-3.4-3-7-7.6-10.9-14.3-4.6-8.5-10.1-15.3-16.4-20.1-6.2-4.6-16.4-7-30.6-7-13.1%200-23.8%202.6-31.7%207.7-7.6%204.9-11.3%2010.6-11.3%2017.3%200%204.1%201.2%207.5%203.7%2010.5%202.6%203.1%206.2%205.9%2010.9%208.2%204.8%202.4%209.8%204.3%2014.7%205.6%205.1%201.4%2013.6%203.5%2025.3%206.1%2014.9%203.1%2028.5%206.7%2040.5%2010.4%2012.2%203.9%2022.7%208.6%2031.3%2014.1%208.8%205.6%2015.7%2012.9%2020.7%2021.5%204.9%208.6%207.4%2019.4%207.4%2031.8.4%2015.1-3.9%2028.7-12.5%2040.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-skype($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-skype-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-snapchat-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M495.998%20360.39l-.19-14.502-14.397-1.278c-15.412-1.396-43.8-7.22-54.3-16.9-16.28-15.01-35.688-36.2-35.688-51.893%200-1.014%200-2.546%204.15-5.186%204.985-3.173%2012.59-5.583%2019.297-7.71%205.216-1.653%2010.143-3.216%2014.393-5.235%209.236-4.39%2018.498-15.978%2017.47-28.807-1.214-15.166-14.423-27.046-30.07-27.046-4.022%200-8.07.76-12.028%202.26-8.027%203.04-13.743%204.41-17.705%204.96.747-9.318%201.79-20.12%203.21-30.67%205.112-37.947-5.28-73.508-29.263-101.04C335.497%2048.207%20297.377%2032%20256.283%2032H256c-41.093%200-79.215%2016.208-104.59%2045.34-23.983%2027.535-34.376%2063.346-29.266%20101.293%201.416%2010.51%202.46%2021.23%203.21%2030.618-3.97-.558-9.686-1.997-17.703-5.033-3.964-1.502-8.016-2.295-12.042-2.295-15.64%200-28.844%2011.852-30.057%2027.003-1.026%2012.818%208.236%2024.393%2017.47%2028.783%204.252%202.02%209.182%203.578%2014.4%205.232%206.708%202.125%2014.31%204.532%2019.294%207.703%204.147%202.64%204.147%204.168%204.147%205.182%200%208.66-6.19%2024.69-35.687%2051.888-10.5%209.68-39.055%2015.5-54.588%2016.897l-14.572%201.31L16%20360.604c0%201.68.312%2010.546%206.485%2020.32%205.246%208.305%2016.073%2019.282%2037.863%2024.406%206.18%201.452%2011.186%202.562%2015.208%203.453%202.306.512%204.555%201.01%206.454%201.453l.08.623c.9%207.003%201.612%2012.534%204.393%2017.75%202.453%204.6%208.574%2012.315%2022.015%2012.315%202.478%200%205.25-.246%208.472-.75%201.672-.264%203.386-.555%205.2-.864%207.116-1.21%2015.182-2.586%2023.45-2.586%2010.278%200%2018.733%202.188%2025.847%206.688%204.53%202.867%208.892%205.972%2013.51%209.26C202.966%20465.482%20223.356%20480%20256%20480c32.726%200%2053.293-14.582%2071.44-27.446%204.575-3.244%208.897-6.31%2013.376-9.142%207.113-4.5%2015.568-6.688%2025.846-6.688%208.27%200%2016.334%201.375%2023.45%202.586%201.813.31%203.528.602%205.2.864%203.224.505%205.994.75%208.473.75%2013.44%200%2019.562-7.714%2022.015-12.312%202.78-5.214%203.492-10.746%204.392-17.75l.082-.628a678.3%20678.3%200%200%201%206.455-1.452c4.022-.892%209.028-2%2015.205-3.454%2021.85-5.14%2032.61-16.17%2037.79-24.518%206.097-9.828%206.296-18.736%206.273-20.42zM208%20128c8.836%200%2016%2010.745%2016%2024s-7.164%2024-16%2024-16-10.745-16-24%207.164-24%2016-24zm103.615%2077.698C296.368%20220.725%20276.617%20229%20256%20229c-20.838%200-40.604-8.29-55.657-23.343a8%208%200%201%201%2011.313-11.313C223.688%20206.374%20239.436%20213%20256%20213c16.387%200%2032.15-6.64%2044.385-18.698a8%208%200%201%201%2011.23%2011.396zM304%20176c-8.836%200-16-10.746-16-24s7.164-24%2016-24%2016%2010.746%2016%2024-7.164%2024-16%2024z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-snapchat($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-snapchat-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-steam-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20id%3D%22Gears%22%20class%3D%22st0%22%20d%3D%22M480%20208.2c0%2020.5-16.6%2037.2-37.2%2037.2-20.5%200-37.2-16.6-37.2-37.2%200-20.5%2016.6-37.2%2037.2-37.2%2020.5%200%2037.2%2016.7%2037.2%2037.2zM442.6%20139c-38.1%200-69%2030.7-69.4%2068.7l-43.2%2062c-1.8-.2-3.6-.3-5.4-.3-9.7%200-18.7%202.7-26.4%207.3L102.4%20198c-5.1-23.2-25.9-40.7-50.6-40.7C23.3%20157.2%200%20180.6%200%20209.1c0%2028.5%2023.3%2051.8%2051.8%2051.8%209.7%200%2018.7-2.7%2026.4-7.3L274%20332.2c5.1%2023.3%2025.8%2040.8%2050.6%2040.8%2026.8%200%2049-20.6%2051.5-46.7l66.5-48.6c38.3%200%2069.4-31%2069.4-69.3S480.9%20139%20442.6%20139zm0%2022.9c25.7%200%2046.5%2020.9%2046.5%2046.5%200%2025.7-20.9%2046.4-46.5%2046.4-25.7%200-46.5-20.8-46.5-46.4%200-25.7%2020.8-46.5%2046.5-46.5zm-390.8%209c14.6%200%2027.3%208.2%2033.7%2020.2l-18.9-7.6v.1c-15.3-5.5-32.2%202-38.3%2017.1-6.1%2015.2.9%2032.3%2015.7%2038.9v.1l16.1%206.4c-2.6.6-5.4.9-8.2.9-21.1%200-38.1-17-38.1-38.1-.1-20.9%2016.9-38%2038-38zm272.8%20112.2c21.1%200%2038.1%2017%2038.1%2038.1s-17%2038.1-38.1%2038.1c-14.7%200-27.4-8.2-33.7-20.3%206.3%202.5%2012.5%205%2018.8%207.6%2015.5%206.2%2033.2-1.3%2039.4-16.8%206.2-15.5-1.3-33.1-16.9-39.4l-15.9-6.4c2.8-.5%205.5-.9%208.3-.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-steam($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-steam-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-tumblr-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M321.2%20396.3c-11.8%200-22.4-2.8-31.5-8.3-6.9-4.1-11.5-9.6-14-16.4-2.6-6.9-3.6-22.3-3.6-46.4V224h96v-64h-96V48h-61.9c-2.7%2021.5-7.5%2044.7-14.5%2058.6-7%2013.9-14%2025.8-25.6%2035.7-11.6%209.9-25.6%2017.9-41.9%2023.3V224h48v140.4c0%2019%202%2033.5%205.9%2043.5%204%2010%2011.1%2019.5%2021.4%2028.4%2010.3%208.9%2022.8%2015.7%2037.3%2020.5%2014.6%204.8%2031.4%207.2%2050.4%207.2%2016.7%200%2030.3-1.7%2044.7-5.1%2014.4-3.4%2030.5-9.3%2048.2-17.6v-65.6c-20.9%2013.7-41.8%2020.6-62.9%2020.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-tumblr($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-tumblr-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-tux-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M426.3%20396c-6.7-4-13.2-11-12-18.8%202.3-15.3%202.5-21.5-.2-25.8-1.9-3.2-5.5-5-8.6-5.8%202-2.5%203.1-5.4%203.8-10.9%201.3-10-4.7-41-12.7-65.7s-29.9-50-44.7-68c-26-31.8-22.8-39.2-26.3-99.7C323.4%2062.8%20306.3%2032%20256%2032s-67%2032-67%2059c0%2028.7%202%2051%202%2051%201.3%2033.4%201%2039.4-8%2055.3-4.9%208.7-27%2030-35.7%2044.7s-7.6%2029.5-24.6%2052.8c-12.4%2017-13.8%2028.4-9.7%2044-7%208.2-3.6%2019.9-5%2024.9-2.6%208.7-13.7%2010.3-22.3%2011s-15.3%200-18.7%205.3.7%2016%204.3%2030-7.3%2015-7.3%2031%2030%2016%2059.7%2022.7%2040.7%2016.3%2056%2016.3%2026.8-10.2%2038-19.3c7.2-5.9%2029-3.7%2042.3-3.7s34.3-.6%2045.7%202.4S317%20480%20345%20480s34.7-20.7%2061-34.3%2042-20%2042-29.7-15-16-21.7-20zm-226.5%2055.5c-1.3%2013-12.6%2017.1-24.1%2016.1-13-1.1-29-7.6-44.1-12.1s-35.5-7.5-49-9.9c-15.3-2.7%200-13.6-.2-34.2-.1-8-7.1-19.4-4.2-24.7s17.3-2.4%2022.3-3.8%2012.7-5.7%2015.3-11.9c1.4-3.4%201.8-17.7%202.9-22.8%201.1-4.9%207.9-7.2%2022.2.1s28.9%2038.1%2042.3%2059.8%2017.9%2030.4%2016.6%2043.4zm118.5-65.8c2%2010.3%203.2%2024.5.7%2036.3s-7%2015.5-10.7%2023c-2.2-6.8%205.3-13.8%204.4-30.8-.5-9.5-.8-7.8-11.5%201.8-12.2%2010.8-27.6%2020.1-53%2022.5-21%202-32.5-8.3-32.5-8.3%205%2016-4.3%2024.7-4.3%2024.7.3-3.7.8-14.3-2.5-21.6-4-9-9.3-18.7-9.3-18.7s8.6-2.7%2011.6-10%202-17.3-8.7-27.7-52.5-37.6-55.9-42.1c-4.9-6.5-6.7-10.2-7-23.2s5.4-24.8%204.3-20.3c-.8%203.2.1%206.8.1%2019.8s7.6%2023.3%2013.9%2025c9.5%202.6%202-26.1%208-53.1s11.7-32.8%2019.2-43.8%2019.2-20.5%2017-43.1-.1-20.1%205.1-11.8c4%206.5%2013.3%2024%2024.7%2022%2019.4-3.3%2043.9-24.6%2047.6-28.2%203.7-3.6.7-7.1-2.3-5.8-15.5%206.7-44.3%2021.5-51.5%2018.2s-18.1-20.6-16.8-19.5c15.4%2013.6%2019.9%2011.1%2026.4%209%208.4-2.8%2012.8-4.3%2028.5-11.3s20.7-5.3%2022.3-8.7-.4-6.7-4.7-5.7c-6.4%201.5-3.4%205.1-22.7%2012.3-25.3%209.5-33.3%2010.3-44%203-8.6-5.9-15-12.7-15-16.7s8.3-8.3%2012.3-11.3%2012.3-10.9%2012.3-10.9%201-7.2-.6-12.7c-1.9-6.5-7.8-9.3-11.9-8.1-4.1%201.1-8%205.5-6.8%2014.8%201%208.3%207%2011%207%2011s-2.7%203.5-5.2%204.7c0%200-.8-.3-3.5-6.3s-6.6-19.5-.3-31.1%2019.6-5.2%2023.8%203.8c3.9%208.3%202.4%2022.7%202.4%2022.7%206-2.2%2013-2%2021%203.5-7.1-29.8%209.5-41.1%2022-41.1s22.3%209.6%2022.3%2025c0%2012-3.5%2018.2-6.9%2022-4.1-.5-8.2-1.5-6.3-3.4%201.3-1.4%204.4-5.7%204.4-13.2s-5.9-13.7-13.7-13.7c-9.2%200-12.6%208.3-13.7%2013s-.4%208.6-.2%2010.4c.6%205%2010.9%209.6%2023.9%2012.9s11.3%209%208.3%2025.3%206.3%2018.3%2014.3%2033.8%205.7%2021.8%2015.9%2035.2%2019%2047.8%2016.4%2076.8c-.9%2010.5-3.9%2010.2%207.3%206.7%205.6-1.7%2012-2.7%2012-2.7%203.1-6.3%203.4-16.3%203.5-22.3.2-13.5.7-41.5-26.7-71.5%200%200%2029.5%2021.7%2034%2062%202.5%2022.3-2%2032.4-2%2032.4%205.3%201.3%209.8%207.3%2012.6%2011.8%203.7%206.1-3.9-5.8-20-5.8-8.5%200-15.3%203.9-18.5%207.9s-3.1%207.6-3.2%2011.7c-7.1-1.2-12.4%200-16.8%204.9-5.6%207-2.8%2024.2-.8%2034.6zm90.1%2047.2c-24.1%2010.4-32.7%2023.5-47.7%2031.5s-27.7%202.3-33.7-8%2010.4-28.2%204.7-59.6c-4.4-24.2-6.3-31-4.9-36.8%201.4-5.5%209.4-4.4%2011.5-3.9%201.3%205.4%206.7%2019.5%2027%2019.5%200%200%2023.2%202.6%2032.7-21.2%200%200%205.7-.2%207.2%203.5%202.3%205.8-2.9%2016.5-2.8%2021.3.3%2015.7%2011.7%2021.1%2028.4%2032%208.2%205.6%202.1%2011.1-22.4%2021.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-tux($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-tux-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-twitch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M80%2032l-32%2080v304h96v64h64l64-64h80l112-112V32H80zm336%20256l-64%2064h-96l-64%2064v-64h-80V80h304v208z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20143h48v129h-48zM208%20143h48v129h-48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-twitch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-twitch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-twitter-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M492%20109.5c-17.4%207.7-36%2012.9-55.6%2015.3%2020-12%2035.4-31%2042.6-53.6-18.7%2011.1-39.4%2019.2-61.5%2023.5C399.8%2075.8%20374.6%2064%20346.8%2064c-53.5%200-96.8%2043.4-96.8%2096.9%200%207.6.8%2015%202.5%2022.1-80.5-4-151.9-42.6-199.6-101.3-8.3%2014.3-13.1%2031-13.1%2048.7%200%2033.6%2017.2%2063.3%2043.2%2080.7-16-.4-31-4.8-44-12.1v1.2c0%2047%2033.4%2086.1%2077.7%2095-8.1%202.2-16.7%203.4-25.5%203.4-6.2%200-12.3-.6-18.2-1.8%2012.3%2038.5%2048.1%2066.5%2090.5%2067.3-33.1%2026-74.9%2041.5-120.3%2041.5-7.8%200-15.5-.5-23.1-1.4C62.8%20432%20113.7%20448%20168.3%20448%20346.6%20448%20444%20300.3%20444%20172.2c0-4.2-.1-8.4-.3-12.5C462.6%20146%20479%20129%20492%20109.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-twitter($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-twitter-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-usd-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M411.387%20303.256c-3.12-9.577-7.89-18.56-14.3-26.952-6.423-8.382-14.397-15.826-23.93-22.33-9.54-6.5-20.722-11.63-33.554-15.4-5.143-1.364-14.19-3.507-26.104-6.42-8.517-2.073-16.5-4.2-25.5-6.366V120.065c9%202.396%2015.25%206.202%2021.925%2010.43%2014.28%209.04%2023.232%2024.505%2025.855%2045.505h69.174c-.654-18-4.65-32.76-11.996-46.02-8.07-14.543-18.977-27.024-32.73-36.956-13.75-9.922-30.225-17.49-48.377-22.455-7.883-2.154-14.85-3.965-23.85-5.184V32h-64v33.167c-7%201.044-15.148%202.445-22.426%204.25-17.242%204.283-32.388%2010.868-45.95%2019.764-13.572%208.906-24.353%2020.113-32.605%2033.628-8.252%2013.523-12.313%2029.52-12.313%2048%200%209.585%201.407%2018.993%204.157%2028.235%202.752%209.24%207.442%2017.967%2014.042%2026.18%206.603%208.215%2015.495%2015.66%2026.687%2022.333%2011.183%206.672%2024.705%2012.064%2041.576%2016.17%209.286%202.346%2018.83%204.535%2026.83%206.577V389.89c-11-2.92-21.89-7.4-30.68-13.48-9.17-6.327-16.065-13.953-21.197-23.884-4.78-9.23-7.073-20.526-7.407-32.526H96c.695%2021%205.25%2039.494%2013.672%2055.37%208.8%2016.605%2020.533%2029.96%2035.204%2040.563%2014.662%2010.613%2031.393%2018.356%2051.198%2023.49%208.885%202.305%2018.926%203.96%2027.926%205.23V480h64v-34.54c10-1.07%2018.957-2.69%2028.527-4.88%2018.7-4.272%2035.645-11.035%2050.316-20.275%2014.662-9.24%2026.62-21.128%2035.61-35.68%208.98-14.542%2013.546-32.086%2013.546-52.62%200-9.578-1.502-19.164-4.613-28.75zM224%20209.7c-12-3.744-23.912-9.09-32.05-16.05-8.622-7.354-12.674-17.533-12.674-30.544%200-9.24%202.414-16.94%207.004-23.102%204.58-6.16%209.912-11.038%2016.88-14.63%206.18-3.19%2013.84-5.566%2020.84-7.14V209.7zm118.902%20149.77c-2.94%206.674-7.7%2012.577-14.303%2017.712-6.603%205.133-15.745%209.328-26.378%2012.577-4.5%201.377-8.223%202.443-14.223%203.235v-107.11c10%202.624%2018.18%205.332%2026.325%208.13%208.062%202.745%2015.748%207.444%2022.537%2014.117%206.785%206.676%2010.31%2017.03%2010.31%2031.06%200%206.85-1.338%2013.605-4.27%2020.28z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-usd($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-usd-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-vimeo-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M476.9%20114c-5-23.4-17.5-38.8-40.6-46.3s-64.9-4.5-94.1%2016.8c-29.9%2021.8-47.6%2059.7-53.8%2083.8%2014.7-6.3%2024-7.7%2039-6.9%2015%20.8%2024.5%2012%2024.9%2025.3.3%209.8-.2%2018.7-3.6%2027.7-10.8%2028.7-27.7%2056.5-47.6%2080.8-2.9%203.6-6.4%206.9-10%209.9-10.2%208.3-18.8%206.1-25.4-5.2-5.4-9.3-9-18.9-12.2-29.1-12.4-39.7-16.8-80.9-23.8-121.6-3.3-19.5-7-39.8-18-56.9-11.6-17.8-28.6-24.6-50-22-14.7%201.8-36.9%2017.5-47.8%2026.4%200%200-56%2046.9-81.8%2071.4l21.2%2027s17.9-12.5%2027.5-18.3c5.7-3.4%2012.4-4.1%2017.2.2%204.5%203.9%209.6%209%2012.3%2014.1%205.7%2010.7%2011.2%2021.9%2014.7%2033.4%2013.2%2044.3%2025.5%2088.7%2037.8%20133.3%206.3%2022.8%2013.9%2044.2%2028%2063.6%2019.3%2026.6%2039.6%2032.7%2070.9%2021.5%2025.4-9.1%2046.6-26.2%2066-43.9%2033.1-30.2%2059.1-65.4%2085.5-101.2%2020.4-27.7%2037.3-55.7%2051.4-87%2013.9-31%2019.4-63.5%2012.3-96.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-vimeo($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-vimeo-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-whatsapp-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M260.062%2032C138.605%2032%2040.134%20129.7%2040.134%20250.232c0%2041.23%2011.532%2079.79%2031.56%20112.687L32%20480l121.764-38.682c31.508%2017.285%2067.745%2027.146%20106.298%2027.146C381.535%20468.464%20480%20370.75%20480%20250.232%20480%20129.702%20381.535%2032%20260.062%2032zm109.362%20301.11c-5.174%2012.827-28.574%2024.533-38.9%2025.072-10.313.547-10.607%207.994-66.84-16.434-56.224-24.434-90.05-83.844-92.718-87.67-2.67-3.812-21.78-31.047-20.75-58.455%201.04-27.413%2016.048-40.346%2021.405-45.725%205.352-5.387%2011.487-6.352%2015.233-6.413%204.428-.072%207.296-.132%2010.573-.01%203.274.123%208.192-.686%2012.45%2010.638%204.256%2011.323%2014.443%2039.153%2015.746%2041.99%201.302%202.838%202.108%206.125.102%209.77-2.012%203.653-3.042%205.935-5.96%209.083-2.936%203.148-6.175%207.042-8.793%209.45-2.92%202.664-5.97%205.57-2.9%2011.268%203.07%205.693%2013.654%2024.356%2029.78%2039.736%2020.725%2019.77%2038.598%2026.33%2044.098%2029.317%205.515%203.004%208.806%202.67%2012.226-.93%203.404-3.598%2014.64-15.745%2018.596-21.168%203.955-5.44%207.66-4.374%2012.742-2.33%205.078%202.052%2032.157%2016.556%2037.673%2019.55%205.51%202.99%209.193%204.53%2010.51%206.9%201.317%202.38.9%2013.532-4.27%2026.36z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-whatsapp($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-whatsapp-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-windows-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M480%20265H232v179l248%2036V265zM216%20265H32v150l184%2026.7V265zM480%2032L232%2067.4V249h248V32zM216%2069.7L32%2096v153h184V69.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-windows($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-windows-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-wordpress-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M259%20271.3L226.2%20367h-.1l-25.4%2073.1c1.8.5%203.5.9%205.3%201.4h.3c15.8%204.2%2032.4%206.5%2049.5%206.5%208.5%200%2016.8-.5%2024.9-1.8%2011.2-1.4%2022-3.8%2032.5-7.1%202.6-.8%205.2-1.7%207.8-2.6-2.8-6-8.8-19.3-9.1-19.9L259%20271.3zM80.8%20180.5C70.8%20203.1%2064%20230.9%2064%20256c0%206.3.3%2012.6.9%2018.8%206.9%2071.2%2052.9%20131%20116.1%20157.9%202.6%201.1%205.3%202.2%208%203.2L96%20180.6c-8-.3-9.5.2-15.2-.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M430.2%20175.4c-4.3-9.3-9.4-18.2-15.1-26.6-1.6-2.4-3.4-4.8-5.1-7.2-21.5-28.8-50.8-51.4-84.9-64.6-21.4-8.4-44.8-13-69.2-13-60.3%200-114.2%2028-149.4%2071.7-6.5%208-12.3%2016.6-17.5%2025.6%2014.2.1%2031.8.1%2033.8.1%2018.1%200%2046-2.2%2046-2.2%209.4-.6%2010.4%2013.1%201.1%2014.2%200%200-9.4%201.1-19.8%201.6L213%20362l37.8-113.3-26.8-73.6c-9.4-.5-18.1-1.6-18.1-1.6-9.4-.5-8.2-14.8%201-14.2%200%200%2028.5%202.2%2045.5%202.2%2018.1%200%2046-2.2%2046-2.2%209.3-.6%2010.5%2013.1%201.1%2014.2%200%200-9.3%201.1-19.7%201.6l62.3%20185.6%2017.3-57.6c8.7-22.4%2013.1-40.9%2013.1-55.7%200-21.3-7.7-36.1-14.3-47.6-8.7-14.3-16.9-26.3-16.9-40.4%200-15.9%2012-30.7%2029-30.7h2.2c26.2-.7%2034.8%2025.3%2035.9%2043v.6c.4%207.2.1%2012.5.1%2018.8%200%2017.4-3.3%2037.1-13.1%2061.8l-39%20112.8-22.3%2065.7c1.8-.8%203.5-1.6%205.3-2.5%2056.7-27.4%2098-82%20106.7-146.7%201.3-8.5%201.9-17.2%201.9-26%200-28.9-6.4-56.3-17.8-80.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-wordpress($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-wordpress-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-xbox-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cstyle%3E.st0%7Bfill%3A%23010101%7D%3C%2Fstyle%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20class%3D%22st0%22%20d%3D%22M126.8%20248.3c39.7-58.6%2077.9-92.8%2077.9-92.8s-42.1-48.9-92.8-67.4l-3.3-.8C61.7%20128.4%2032%20188.7%2032%20256c0%2050.7%2016.9%2097.5%2045.2%20135%200-4.4.6-70.3%2049.6-142.7zM480%20256c0-67.3-29.7-127.6-76.6-168.7l-3.2.9c-50.7%2018.5-92.9%2067.4-92.9%2067.4s38.2%2034.2%2077.9%2092.8c49%2072.4%2049.6%20138.3%2049.5%20142.7C463.2%20353.5%20480%20306.7%20480%20256zM201.2%2080.9c29.3%2013.1%2054.6%2034.6%2054.6%2034.6s25.5-21.4%2054.8-34.6c36.8-16.5%2064.9-11.3%2072.3-9.5C346.8%2046.6%20303.1%2032%20256%2032c-47.1%200-90.8%2014.6-126.9%2039.4%207.2-1.8%2035.2-7.1%2072.1%209.5zM358.7%20292.9C312.4%20236%20255.8%20199%20255.8%20199s-56.3%2037-102.7%2093.9c-39.8%2048.9-54.6%2084.8-62.6%20107.8l-1.3%204.8c41%2045.7%20100.5%2074.5%20166.8%2074.5%2066.3%200%20125.8-28.8%20166.8-74.5l-1.4-4.8c-8-23-22.9-58.9-62.7-107.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-xbox($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-xbox-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-yahoo-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384.6%2068.4c-11.3%200-22.5-.8-32.6-4.4l-96%20160-96-160c-10.1%203.6-20.7%204.4-32%204.4-11.1%200-22.1-.9-32-4.4l128%20212.7V448c10-3.5%2020.8-4.4%2032-4.4s22%20.9%2032%204.4V277L416%2064c-9.9%203.4-20.3%204.4-31.4%204.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-yahoo($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-yahoo-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-yen-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2032h-80L256%20253.128%20144%2032H64l112.368%20208H128v48h73.564L216%20319v17h-88v48h88v96h80v-96h88v-48h-88v-17l14.89-31H384v-48h-48.29L448%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-yen($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-yen-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-logo-youtube-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M508.6%20148.8c0-45-33.1-81.2-74-81.2C379.2%2065%20322.7%2064%20265%2064h-18c-57.6%200-114.2%201-169.6%203.6C36.6%2067.6%203.5%20104%203.5%20149%201%20184.6-.1%20220.2%200%20255.8c-.1%2035.6%201%2071.2%203.4%20106.9%200%2045%2033.1%2081.5%2073.9%2081.5%2058.2%202.7%20117.9%203.9%20178.6%203.8%2060.8.2%20120.3-1%20178.6-3.8%2040.9%200%2074-36.5%2074-81.5%202.4-35.7%203.5-71.3%203.4-107%20.2-35.6-.9-71.2-3.3-106.9zM207%20353.9V157.4l145%2098.2-145%2098.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-logo-youtube($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-logo-youtube-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-add-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.125%2048%2048%20141.125%2048%20256s93.125%20208%20208%20208%20208-93.125%20208-208S370.875%2048%20256%2048zm107%20229h-86v86h-42v-86h-86v-42h86v-86h42v86h86v42z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-add-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-add-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-add-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20277.333H277.333V416h-42.666V277.333H96v-42.666h138.667V96h42.666v138.667H416v42.666z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-add($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-add-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-alarm-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M470%20124.837l-98.443-81.78-27.814%2032.93%2098.442%2081.77L470%20124.837zM167.192%2074.92L139.366%2042%2042%20124.837l27.814%2032.92%2097.378-82.838zm99.51%2097.708H234.6v127.446l101.65%2060.54%2016.05-26.554-85.6-49.917V172.628zM256%2087.665c-107%200-192.6%2086.02-192.6%20191.166C63.4%20383.98%20149%20470%20256%20470c105.936%200%20192.6-86.02%20192.6-191.17%200-105.143-86.664-191.165-192.6-191.165zm0%20339.855c-82.393%200-149.8-66.906-149.8-148.688%200-81.777%2067.407-148.684%20149.8-148.684%2082.394%200%20149.8%2066.906%20149.8%20148.684%200%2082.84-67.406%20148.688-149.8%20148.688z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-alarm($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-alarm-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-albums-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M154.7%20464h266.7c23.5%200%2042.7-19.2%2042.7-42.7V154.7c0-23.5-19.2-42.7-42.7-42.7H154.7c-23.5%200-42.7%2019.2-42.7%2042.7v266.7c0%2023.4%2019.2%2042.6%2042.7%2042.6z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M90.7%2048h266.7c23.5%200%2042.7%2019.2%2042.7%2042.7V96H138.7C115.2%2096%2096%20115.2%2096%20138.7V400h-5.3C67.2%20400%2048%20380.8%2048%20357.3V90.7C48%2067.2%2067.2%2048%2090.7%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-albums($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-albums-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-alert-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm24%20312h-48v-40h48v40zm0-88h-48V144h48v128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-alert($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-alert-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-american-football-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20256c14.1%2035%2036.2%2066%2064%2090.6V165.4C68.2%20190%2046.1%20221%2032%20256zM480%20256c-14.1-35-36.2-66-64-90.6v181.2c27.8-24.6%2049.9-55.6%2064-90.6z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20105c-47.1%200-91%2013.4-128%2036.5v228.9c37%2023.1%2080.9%2036.5%20128%2036.5s91-13.4%20128-36.5V141.5c-37-23.1-80.9-36.5-128-36.5zm96%20135v64h-32v-32h-48v32h-32v-32h-48v32h-32v-96h32v32h48v-32h32v32h48v-32h32v32z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-american-football($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-american-football-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-analytics-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M379.4%20178.3l-87.2%20133.4C299%20320%20303%20330.5%20303%20342c0%2026.5-21.5%2048-48%2048s-48-21.5-48-48c0-3%20.3-6%20.8-8.9l-57.6-33.5c-8.6%208.3-20.3%2013.4-33.3%2013.4-8.6%200-16.6-2.3-23.6-6.2L32%20364.2v57.2c0%2023.5%2019.2%2042.7%2042.7%2042.7h362.7c23.5%200%2042.7-19.2%2042.7-42.7V208.8l-58.6-38.9c-8.1%206.3-18.3%2010.1-29.4%2010.1-4.4%200-8.7-.6-12.7-1.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M117%20217c26.5%200%2048%2021.5%2048%2048%200%202.1-.2%204.2-.4%206.2l60.1%2033.6c8.3-6.8%2018.8-10.8%2030.4-10.8%203.6%200%207.1.4%2010.4%201.1l87.4-135.4c-5.6-7.8-8.9-17.4-8.9-27.8%200-26.5%2021.5-48%2048-48s48%2021.5%2048%2048c0%203.9-.5%207.7-1.3%2011.3l41.3%2027.6V90.7c0-23.5-19.2-42.7-42.7-42.7H74.7C51.2%2048%2032%2067.2%2032%2090.7V320l40-38.3c-1.9-5.2-3-10.8-3-16.7%200-26.5%2021.5-48%2048-48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-analytics($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-analytics-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-aperture-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032C132.288%2032%2032%20132.288%2032%20256s100.288%20224%20224%20224%20224-100.288%20224-224S379.712%2032%20256%2032zm135.765%20359.765C355.5%20428.028%20307.285%20448%20256%20448s-99.5-19.972-135.765-56.235C83.972%20355.5%2064%20307.285%2064%20256s19.972-99.5%2056.235-135.765C156.5%2083.972%20204.715%2064%20256%2064s99.5%2019.972%20135.765%2056.235C428.028%20156.5%20448%20204.715%20448%20256s-19.972%2099.5-56.235%20135.765z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M200.043%20106.067c-40.63%2015.17-73.434%2046.382-90.717%2085.933H256l-55.957-85.933zM412.797%20288c2.1-10.34%203.203-21.04%203.203-32%200-36.624-12.314-70.367-33.016-97.334L311%20288h101.797zM359.973%20134.395C332.007%20110.46%20295.693%2096%20256%2096c-7.966%200-15.794.59-23.448%201.715L310.852%20224l49.12-89.605zM99.204%20224A160.65%20160.65%200%200%200%2096%20256c0%2036.64%2012.324%2070.394%2033.04%2097.366L201%20224H99.204zM311.96%20405.932c40.63-15.17%2073.432-46.382%2090.714-85.932H256l55.96%2085.932zM152.046%20377.62C180.01%20401.546%20216.314%20416%20256%20416c7.97%200%2015.8-.592%2023.456-1.716L201.164%20288l-49.118%2089.62z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-aperture($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-aperture-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-apps-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20176h80V96H96v80zm120%20240h80v-80h-80v80zm-120%200h80v-80H96v80zm0-120h80v-80H96v80zm120%200h80v-80h-80v80zM336%2096v80h80V96h-80zm-120%2080h80V96h-80v80zm120%20120h80v-80h-80v80zm0%20120h80v-80h-80v80z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-apps($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-apps-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-appstore-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%20152H360c0-57-46.562-103.86-104-103.86S152%2095%20152%20152H48c18.688%20216%2013%20312%2013%20312h390c-.002%200-5.69-98%2013-312zM256%2074.105c43.008%200%2078%2034.895%2078%2077.895H178c0-43%2034.99-77.895%2078-77.895zM204%20397.64V228.867l143%2084.387-143%2084.386z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-appstore($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-appstore-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-archive-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M453.594%20100L421.24%2060.703C415.47%2052.627%20405.084%2048%20394.665%2048h-277.33c-10.415%200-20.8%204.627-26.575%2012.702l-32.352%2039.3C51.468%20106.92%2048%20117.334%2048%20128.885v288.89C48%20443.2%2068.8%20464%2094.225%20464h323.553C443.202%20464%20464%20443.2%20464%20417.775v-288.89c0-11.55-3.463-21.962-10.406-28.884zM256%20383.11L128.89%20256h80.89v-46.224h92.443V256h80.89L256%20383.11zM96.534%2094.22l18.486-23.11h277.33l21.966%2023.11H96.534z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-archive($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-archive-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-back-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M427%20234.625H167.296l119.702-119.702L256%2085%2085%20256l171%20171%2029.922-29.924-118.626-119.7H427v-42.75z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-back($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-back-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M277.375%2085v259.704l119.702-119.702L427%20256%20256%20427%2085%20256l29.924-29.922%20119.7%20118.626V85h42.75z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropdown-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.125%2048%2048%20141.125%2048%20256s93.125%20208%20208%20208%20208-93.125%20208-208S370.875%2048%20256%2048zm0%20272l-96-96h192l-96%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropdown-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropdown-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropdown-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20192l128%20128%20128-128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropdown($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropdown-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropleft-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%20256c0-114.875-93.125-208-208-208S48%20141.125%2048%20256s93.125%20208%20208%20208%20208-93.125%20208-208zm-272%200l96-96v192l-96-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropleft-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropleft-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropleft-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%20128L192%20256l128%20128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropleft($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropleft-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropright-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20464c114.875%200%20208-93.125%20208-208S370.875%2048%20256%2048%2048%20141.125%2048%20256s93.125%20208%20208%20208zm-32-112V160l96%2096-96%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropright-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropright-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropright-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20128l128%20128-128%20128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropright($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropright-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropup-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%20256c0-114.875-93.125-208-208-208S48%20141.125%2048%20256s93.125%20208%20208%20208%20208-93.125%20208-208zm-112%2032H160l96-96%2096%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropup-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropup-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-dropup-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20320l128-128%20128%20128z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-dropup($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-dropup-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-forward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M85%20277.375h259.704L225.002%20397.077%20256%20427l171-171L256%2085l-29.922%2029.924%20118.626%20119.7H85v42.75z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-forward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-forward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-round-back-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M401.4%20224h-214l83-79.4c11.9-12.5%2011.9-32.7%200-45.2s-31.2-12.5-43.2%200L89%20233.4c-6%205.8-9%2013.7-9%2022.4v.4c0%208.7%203%2016.6%209%2022.4l138.1%20134c12%2012.5%2031.3%2012.5%2043.2%200%2011.9-12.5%2011.9-32.7%200-45.2l-83-79.4h214c16.9%200%2030.6-14.3%2030.6-32%20.1-18-13.6-32-30.5-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-round-back($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-round-back-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-round-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M99.4%20284.9l134%20138.1c5.8%206%2013.7%209%2022.4%209h.4c8.7%200%2016.6-3%2022.4-9l134-138.1c12.5-12%2012.5-31.3%200-43.2-12.5-11.9-32.7-11.9-45.2%200l-79.4%2083v-214c0-16.9-14.3-30.6-32-30.6-18%200-32%2013.7-32%2030.6v214l-79.4-83c-12.5-11.9-32.7-11.9-45.2%200s-12.5%2031.2%200%2043.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-round-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-round-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-round-forward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M284.9%20412.6l138.1-134c6-5.8%209-13.7%209-22.4v-.4c0-8.7-3-16.6-9-22.4l-138.1-134c-12-12.5-31.3-12.5-43.2%200-11.9%2012.5-11.9%2032.7%200%2045.2l83%2079.4h-214c-17%200-30.7%2014.3-30.7%2032%200%2018%2013.7%2032%2030.6%2032h214l-83%2079.4c-11.9%2012.5-11.9%2032.7%200%2045.2%2012%2012.5%2031.3%2012.5%2043.3%200z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-round-forward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-round-forward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-round-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M412.6%20227.1L278.6%2089c-5.8-6-13.7-9-22.4-9h-.4c-8.7%200-16.6%203-22.4%209l-134%20138.1c-12.5%2012-12.5%2031.3%200%2043.2%2012.5%2011.9%2032.7%2011.9%2045.2%200l79.4-83v214c0%2016.9%2014.3%2030.6%2032%2030.6%2018%200%2032-13.7%2032-30.6v-214l79.4%2083c12.5%2011.9%2032.7%2011.9%2045.2%200s12.5-31.2%200-43.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-round-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-round-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-arrow-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M277.375%20427V167.296l119.702%20119.702L427%20256%20256%2085%2085%20256l29.924%2029.922%20119.7-118.626V427h42.75z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-arrow-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-arrow-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-at-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M265.6%20212.3c-10.5%200-18.5%204.4-24%2013.2-5.5%208.8-9.1%2022-10.8%2039.6-.9%2011.7%200%2020.5%202.7%2026.5s7.1%209%2013.1%209c5.5%200%2010.3-1.5%2014.6-4.4%204.3-2.9%208.1-8.3%2011.3-16.2l6.1-66c-2.2-.5-4.4-.9-6.5-1.2-2.3-.4-4.4-.5-6.5-.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm127.8%20201.9c-.9%2021.4-7.6%2039.9-20%2055.6-12.4%2015.6-31%2023.4-55.6%2023.4-8.2%200-15.3-2.2-21.2-6.6-6-4.4-10.2-10.7-12.6-18.8-4.1%208.3-9.4%2014.5-15.7%2018.6-6.3%204.1-13.7%206.2-22.2%206.2-15.1%200-26.6-5.8-34.6-17.3s-10.9-26.8-8.8-45.9c2.6-24.4%2010-44%2022.2-58.7%2012.2-14.7%2027-22%2044.4-22%2012.2%200%2022.1%201.3%2029.5%203.8%207.4%202.5%2015.6%205.7%2024.5%2011l-.5-.1h.8l-7.7%2083.4c-.5%208.5.1%2014.6%201.7%2017.8%201.7%203.2%203.9%204.9%206.7%204.9%2011.3%200%2020.4-5.1%2027.2-15.6%206.8-10.5%2010.6-23.6%2011.4-39.6%201.6-33-5.1-58.7-20.2-77.1-15.1-18.4-38.3-27.7-69.7-27.7-30.5%200-54.8%209.9-72.8%2029.8s-27.7%2046.9-29.3%2081.2c-1.7%2033.4%205.6%2059.8%2021.9%2079.1%2016.3%2019.4%2039.7%2029.1%2070.3%2029.1%208.5%200%2017.3-.9%2026.5-2.7%209.1-1.8%2017.1-4.1%2023.7-6.8l5.8%2024.2c-6.8%204.1-15.4%207.3-25.9%209.6-10.5%202.3-20.7%203.4-30.7%203.4-40.8%200-72.3-12.1-94.3-36.4-22-24.2-32.2-57.4-30.5-99.6%201.8-41.8%2014.9-74.9%2039.1-99.4%2024.3-24.5%2056.5-36.7%2096.7-36.7%2039.5%200%2069.8%2011.6%2090.7%2034.7%2021.2%2023.2%2030.8%2054.9%2029.2%2095.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-at($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-at-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-attach-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M341.334%20128v234.666C341.334%20409.604%20302.938%20448%20256%20448c-46.937%200-85.333-38.396-85.333-85.334V117.334C170.667%2087.47%20194.135%2064%20224%2064c29.864%200%2053.333%2023.47%2053.333%2053.334v245.333c0%2011.73-9.605%2021.333-21.334%2021.333-11.73%200-21.334-9.604-21.334-21.333V160h-32v202.667C202.666%20392.53%20226.136%20416%20256%20416c29.865%200%2053.334-23.47%2053.334-53.333V117.334C309.334%2070.4%20270.938%2032%20224%2032s-85.334%2038.4-85.334%2085.334v245.332C138.666%20427.73%20190.938%20480%20256%20480c65.062%200%20117.334-52.27%20117.334-117.334V128h-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-attach($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-attach-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-backspace-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M433.5%2096H167.2c-12.2%200-21.8%206.2-28.2%2015.6L43%20256l96%20144.2c6.4%209.4%2016%2015.8%2028.2%2015.8h266.2c19.5%200%2035.5-16%2035.5-35.6V131.6C469%20112%20453%2096%20433.5%2096zm-53.3%20223.8l-25%2025.1-63.7-63.8-63.7%2063.8-25-25.1%2063.7-63.8-63.7-63.8%2025-25.1%2063.7%2063.8%2063.7-63.8%2025%2025.1-63.7%2063.8%2063.7%2063.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-backspace($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-backspace-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-barcode-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M88%20128h48v256H88zM232%20128h48v256h-48zM160%20144h48v224h-48zM304%20144h48v224h-48zM376%20128h48v256h-48z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M104%20104V56H16v400h88v-48H64V104zM408%2056v48h40v304h-40v48h88V56z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-barcode($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-barcode-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-baseball-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M365.9%20402.6L343%20416.1l-16-28%2020.2-11.9c-5.2-8.5-9.8-17.4-13.9-26.7-1.4-3.1-2.7-6.3-3.9-9.5l-25.1%205.8-7.1-31.6%2022.6-5.2c-2.8-12.1-4.7-24-5.5-37H290v-32h24.3c.8-12%202.7-24.8%205.5-36.8l-22.6-5.2%207.1-31.6%2025.1%205.8c1.3-3.2%202.6-6.4%204-9.6%204.1-9.2%208.7-18.1%2013.8-26.6L327%20124.1l16-28%2022.8%2013.5c5.2-6.4%2010.8-12.5%2016.7-18.3C347.4%2064.1%20303.5%2048%20256%2048s-91.4%2016.1-126.5%2043.2c5.9%205.8%2011.5%2012%2016.7%2018.3L169%2096.1l16%2028-20.2%2011.9c5.1%208.5%209.8%2017.4%2013.8%2026.6%201.4%203.2%202.7%206.4%204%209.6l25.1-5.8%207.1%2031.6-22.6%205.2c2.8%2012.1%204.6%2024.8%205.5%2036.8H222v32h-24.3c-.8%2013-2.7%2024.9-5.5%2037l22.6%205.2-7.1%2031.6-25.1-5.8c-1.2%203.2-2.5%206.3-3.9%209.5-4.1%209.2-8.7%2018.1-13.9%2026.7l20.2%2011.9-16%2028-22.9-13.5c-5.2%206.3-10.7%2012.4-16.6%2018.2%2035.1%2027.1%2079%2043.2%20126.5%2043.2s91.4-16.1%20126.5-43.2c-5.9-5.8-11.4-11.9-16.6-18.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M393.8%20126l18.1%2010.7-16%2028-21.2-12.5c-5%208.3-9.5%2016.9-13.3%2025.9-.2.4-.4.9-.5%201.3l21%204.9-7.1%2031.6-23.9-5.5c-2.3%209.7-3.8%2019.6-4.6%2029.6H370v32h-23.6c.8%2010%202.3%2020%204.6%2029.8l23.9-5.5%207.1%2031.6-21%204.9c.2.4.3.8.5%201.2%203.8%209%208.3%2017.7%2013.3%2026l21.1-12.4%2016%2028-18%2010.6c3.3%203.9%206.8%207.7%2010.5%2011.3l2%202C442%20362%20464%20311.4%20464%20256s-22-106-57.7-143.4c-.7.7-1.4%201.3-2%202-3.7%203.7-7.2%207.5-10.5%2011.4zM118.2%20386.1l-18-10.6%2016-28%2021.1%2012.4c5.1-8.3%209.5-17%2013.3-26%20.2-.4.3-.8.5-1.2l-21-4.9%207.1-31.6%2023.9%205.5c2.3-9.8%203.8-19.8%204.6-29.8H142v-32h23.6c-.8-10-2.3-19.9-4.6-29.6l-23.9%205.5-7.1-31.6%2021-4.9c-.2-.4-.3-.9-.5-1.3-3.8-9-8.2-17.7-13.3-25.9L116%20164.6l-16-28%2018.1-10.7c-3.4-3.9-6.9-7.7-10.6-11.4l-2-2C70%20150%2048%20200.6%2048%20256s22%20106%2057.7%20143.4c.7-.7%201.4-1.3%202-2%203.6-3.6%207.1-7.4%2010.5-11.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-baseball($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-baseball-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-basket-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M362.1%20205.2L272.9%2072.5C269%2066.8%20262.5%2064%20256%2064c-6.5%200-13%202.8-16.9%208.7l-89.2%20132.5H52.4c-11.2%200-20.4%209.1-20.4%2020.2%200%201.8.2%203.6.8%205.5l51.7%20187.5c4.7%2017%2020.4%2029.5%2039.1%2029.5h264.7c18.7%200%2034.4-12.5%2039.3-29.5l51.7-187.5.6-5.5c0-11.1-9.2-20.2-20.4-20.2h-97.4zm-167.2%200l61.1-89%2061.1%2089H194.9zM256%20367.1c-22.4%200-40.7-18.2-40.7-40.5s18.3-40.5%2040.7-40.5%2040.7%2018.2%2040.7%2040.5-18.3%2040.5-40.7%2040.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-basket($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-basket-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-basketball-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M191.6%20272c-3.8%2055-26.4%20107.1-64.5%20147.7%2031.6%2025%2070.9%2041%20112.9%2044.3V272h-48.4zM272%20464c42-3.3%2081.5-19.4%20113.1-44.5-38-40.6-60.5-92.5-64.3-147.5H272v192zM240%2048c-42%203.2-80.5%2019-111.9%2043.6%2038%2040.9%2060.3%2093.4%2063.7%20148.4H240V48zM320.7%20240c3.4-55%2025.6-107.4%2063.5-148.3C352.7%2067.1%20314%2051.2%20272%2048v192h48.7zM408.6%20114.2c-17.2%2018.5-30.7%2039.7-40.1%2062.9-8.2%2020.2-13.1%2040.9-14.6%2062.9H464c-3.7-48-24.1-92.2-55.4-125.8zM368.5%20333.1c9.6%2023.7%2023.3%2045.1%2040.9%2063.8C440.3%20363.4%20460.3%20320%20464%20272H354.1c1.6%2021%206.5%2041.5%2014.4%2061.1zM143.9%20177.1c-9.5-23.3-23-44.5-40.3-63.1-31.4%2033.6-51.9%2078-55.6%20126h110.5c-1.6-22-6.5-42.8-14.6-62.9zM102.7%20397.1c17.7-18.8%2031.5-40.3%2041.1-64%208-19.6%2012.8-40.1%2014.5-61.1H48c3.7%2048%2023.8%2091.6%2054.7%20125.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-basketball($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-basketball-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-battery-charging-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M338.2%2076.8h-37.4V32h-89.6v44.8h-37.4c-16.4%200-29.8%2013.4-29.8%2029.8V450c0%2016.6%2013.4%2030%2029.8%2030H338c16.6%200%2030-13.4%2030-29.8V106.6c0-16.4-13.4-29.8-29.8-29.8zM233.6%20435.2V312h-44.8l89.6-168v123.2h44.8l-89.6%20168z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-battery-charging($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-battery-charging-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-battery-dead-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M338.2%2076.8h-37.4V32h-89.6v44.8h-37.4c-16.4%200-29.8%2013.4-29.8%2029.8V450c0%2016.6%2013.4%2030%2029.8%2030H338c16.6%200%2030-13.4%2030-29.8V106.6c0-16.4-13.4-29.8-29.8-29.8zM320%20432H192V124.8h128V432z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-battery-dead($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-battery-dead-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-battery-full-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M338.2%2076.8h-37.4V32h-89.6v44.8h-37.4c-16.4%200-29.8%2013.4-29.8%2029.8V450c0%2016.6%2013.4%2030%2029.8%2030H338c16.6%200%2030-13.4%2030-29.8V106.6c0-16.4-13.4-29.8-29.8-29.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-battery-full($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-battery-full-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-beaker-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448.1%2034.9c0-1.2-.4-2.9-2.9-2.9H128.5c-54.3%200-64.4%2027.4-64.4%2039.8C94.4%2076%2096%2076.5%2096%20108.5v307c0%2035.3%2028.9%2064.5%2064.3%2064.5H368c35.3%200%2064-29.2%2064-64.5V73.3c2.2-17.5%2012-31.8%2013.1-33.5%201.2-1.9%203-3.8%203-4.9zM354.2%20432H176.3c-15.9%200-29.7-11.9-32.3-27.1V80h240v319.7c0%2018-12.4%2032.3-29.8%2032.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M182%20160v226c0%204.4%203.6%208%208%208h148c4.4%200%208-3.6%208-8V160H182z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-beaker($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-beaker-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-beer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20140h-16v-6c8.9-9%2016-22.9%2016-38%200-35.3-28.7-64-64-64-16.3%200-31.1%206.1-42.4%2016.1C297.2%2038%20281.4%2032%20264.2%2032c-15.8%200-30.4%205.1-42.3%2013.7a56.78%2056.78%200%200%200-37-13.7c-17.1%200-32.4%207.6-42.8%2019.5-11.7-12-28-19.5-46.1-19.5-35.3%200-64%2028.7-64%2064%200%2016.2%206.1%2031%2016%2042.3V193c0%2026.5%2021.5%2048%2048%2048v174.5c0%2035.3%2028.8%2064.5%2064.2%2064.5H336c35.3%200%2064.1-29.2%2064.1-64.5V372h16c50%200%2064-32.7%2064-68v-96c-.1-35.3-17.1-68-64.1-68zm-64%2052H144v-53.7c.3-.4.7-.8%201-1.2%201.2-1.5%202.4-3%203.5-4.6%201.5%201.2%203%202.4%204.6%203.4%209.1%206.1%2020%209.7%2031.7%209.7%206.4%200%2012.6-1.1%2018.3-3%2012.8%2020.2%2035.3%2033.7%2061%2033.7%2022%200%2041.7-9.9%2054.9-25.4%205.7-6.7%2010.2-14.4%2013.1-22.9H352v64zM96%20128.1v75c-9%200-16-7.2-16-16v-63.3c-8-4.5-13.4-12.1-15.3-21-.5-2.1-.7-4.4-.7-6.7%200-17.6%2014.4-32%2032-32%2011.8%200%2023.3%207.7%2030.1%2015.4s26.7%207.7%2033.9%200c6.8-7.3%2014.3-15.4%2024.8-15.4%206%200%2011.6%202.2%2015.9%205.8%201.9%201.6%203.6%203.5%204.9%205.6%201.1%201.8%202%204.2%203.1%205.8%202.7%203.4%206.5%205.5%2011.2%205.5%204.4%200%208.3-1.9%2011-5%20.6-.7%201.2-1.5%201.7-2.3%202-2.5%204.2-4.8%206.7-6.8%206.8-5.4%2015.5-8.6%2024.8-8.6%2010.6%200%2020.2%204.1%2027.4%2010.9%201.7%201.6%206.7%204.5%2013.2%205.1%204.5.4%206.1.3%208.2%200%2010.3-1.3%2014.4-4.7%2016.4-6.6%205.8-5.8%2013.8-9.4%2022.6-9.4%2017.6%200%2032%2014.4%2032%2032%20.2%203.1-.3%206.2-1.2%209.1-2.5-5.5-8.1-9.2-14.6-9.2h-55s-8.7-.7-8.7%208.2c0%208.9-2.9%2017.1-7.8%2023.7-7.3%209.9-19.1%2016.4-32.4%2016.4-14.9%200-27.9-8.1-34.8-20.2-1.6-2.7-2.8-5.6-3.7-8.6-.1-.6-.3-1.1-.4-1.6-2-5.9-7.5-10.2-14.1-10.2-3.9%200-7.5%201.5-10.2%204l-.1.1c-2.4%202.1-5.3%203.7-8.4%204.7-2.4.8-5%201.2-7.7%201.2-7.5%200-14.7-4-18.8-8.6-10-11.4-23.7-6.8-29.7-5.5-6%201.3-12.2%2011.7-12.2%2011.7-1.1%202.1-2.4%204-3.9%205.8-6%206.7-15.2%2011-24.2%2011zM432%20304c0%2017.7-6.3%2024-24%2024h-8V184h8c17.7%200%2024%206.3%2024%2024v96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-beer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-beer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bicycle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M330.666%20131.202c18.668%200%2033.598-14.935%2033.598-33.6S349.334%2064%20330.666%2064C312%2064%20297.07%2078.935%20297.07%2097.6s14.93%2033.602%2033.596%2033.602zm56%20130.132c-51.332%200-93.332%2042-93.332%2093.333s42%2093.333%2093.332%2093.333C438%20448%20480%20406%20480%20354.667s-42-93.333-93.334-93.333zm0%20158.666c-36.402%200-65.332-28.93-65.332-65.333s28.93-65.333%2065.332-65.333c36.404%200%2065.334%2028.93%2065.334%2065.333S423.07%20420%20386.666%20420zm-81.07-196H384v-32h-58.845l-34.62-60.134c-5.605-9.333-15.87-15.864-27.07-15.864-8.4%200-16.798%203.732-22.4%209.333l-71.73%2069.065c-5.602%205.6-9.334%2014-9.334%2022.4%200%2012.13%209.203%2021.464%2018.536%2027.064L240%20282.134V368h32V256l-39.333-32%2042.93-44.533%2030%2044.533zm-180.263%2037.334C74%20261.334%2032%20303.334%2032%20354.667S74%20448%20125.333%20448s93.333-42%2093.333-93.333-42-93.333-93.333-93.333zm0%20158.666C88.933%20420%2060%20391.07%2060%20354.667s28.934-65.333%2065.333-65.333c36.4%200%2065.333%2028.93%2065.333%2065.333S161.732%20420%20125.333%20420z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bicycle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bicycle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bluetooth-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M399%20159.9L270.5%2032H248v170L144.7%2099.2%20113%20130.8%20238.8%20256%20113%20381.2l31.7%2031.6L248%20310v170h22.5L399%20352.1%20302.2%20256l96.8-96.1zm-106-42.1l42.3%2042.1L293%20202v-84.2zm42.3%20234.3L293%20394.2V310l42.3%2042.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bluetooth($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bluetooth-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-boat-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M84.255%20413h1.063c34.123%200%2063.977-19.02%2085.305-42.494%2021.325%2023.473%2051.18%2042.762%2085.304%2042.762s63.98-19.334%2085.305-42.806C362.56%20393.934%20392.412%20413%20426.535%20413h1.062l51.253-138.78c2.126-5.33%201.063-11.64-1.07-16.976-2.136-5.333-7.237-8.487-12.567-10.623L427%20234.134v-98.15C427%20112.51%20407.344%2093%20383.884%2093h-63.98l-15.992-53h-95.97L191.95%2093h-63.98C104.512%2093%2085%20112.51%2085%20135.982v98.15l-38.074%2012.533c-5.33%202.136-10.582%205.334-12.718%2010.667-2.135%205.335-3.158%2010.49-1.03%2016.887L84.254%20413zM128%20136h256v84.26l-128-41.604-128%2041.605V136z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M341.23%20408.007c-52.252%2036.267-118.355%2036.258-170.607-.01%200%200-57.638%2064.003-106.632%2064.003H85.32c29.854%200%2058.646-11.726%2085.305-25.594%2053.315%2027.734%20117.293%2027.728%20170.608-.007%2026.66%2013.868%2055.45%2025.6%2085.305%2025.6h21.328c-47.65%200-106.632-63.993-106.632-63.993z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-boat($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-boat-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-body-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c22%200%2040%2018%2040%2040s-18%2040-40%2040-40-18-40-40%2018-40%2040-40zm192%20144.1H320V464h-42.7V320h-42.7v144H192V192.1H64v-42.7h384v42.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-body($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-body-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bonfire-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M272.2%20350.6c-.8-8.2-8.2-14.6-17.3-14.6-8.3%200-15.2%205.4-16.9%2012.5L221.1%20441c-.5%202.3-.8%204.6-.8%207%200%2017.7%2015.5%2032%2034.7%2032s34.7-14.3%2034.7-32c0-2.9-.4-5.7-1.2-8.4l-16.3-89zM310.1%20355zM404.3%20390.3c-1.9-1.4-3.6-2.9-5.6-3.9l-68.9-47.5c-6.3-3.8-13-3.7-17.9.9-4.5%204.1-5.1%2010.4-1.8%2015.4l53%2065.8c1%201.5%202.3%202.8%203.6%204.2%208.5%209.1%2027.2%209.6%2037.5%200%2010.4-9.8%2010.3-27.2.1-34.9zM382.2%20335zM450.4%20322.5l-64.5-2.3c-4.2-.6-8%202.1-8.7%206-.7%203.6%201.5%207.1%205.1%208.8h.1l62.5%2017.8c9%201.9%2019.1-2.3%2019.1-11.6%200-11.9-3.3-17.5-13.6-18.7zM129.5%20335zM129.5%20335c3.6-1.6%205.7-5.2%205.1-8.8-.7-4-4.5-6.6-8.7-6l-64.5%202.3C51%20323.7%2048%20329.3%2048%20341.1c0%209.3%209.9%2013.6%2018.8%2011.6l62.5-17.8c.1.1.1.1.2.1zM182.2%20338.8l-68.9%2047.4c-2%201.1-3.9%202.4-5.6%203.9-10.4%209.6-10.4%2025.1%200%2034.6%2010.4%209.6%2027.1%209.6%2037.5%200%201.4-1.3%202.6-2.7%203.6-4.2l53-65.6c3.3-5%202.7-11.2-1.8-15.3-4.8-4.5-12.6-4.8-17.8-.8zM256%2032s30.2%2035.4%2030.2%2064.4c0%2027.8-18.2%2050.3-45.9%2050.3-27.9%200-48.9-22.5-48.9-50.3l.4-6.9c-27.2%2032.3-43.5%2076.2-43.5%20121.8%200%2059.6%2048.2%20107.8%20107.8%20107.8s107.8-48.2%20107.8-107.8C363.8%20138.7%20328%2053.7%20256%2032zm-3.9%20246.7c-24%200-43.4-18.9-43.4-42.3%200-21.8%2014.1-37.2%2037.9-42%2023.8-4.9%2048.5-16.3%2062.3-34.8%205.3%2017.4%207.9%2035.7%207.9%2054.4%200%2035.7-29%2064.7-64.7%2064.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bonfire($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bonfire-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-book-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M426.2%2080.4l-170.2%2032-170.2-32C64%2077%2048%2097.3%2048%20118v244.5c0%2020.7%2016%2032.6%2037.8%2037.6L256%20432l170.2-32c21.8-5%2037.8-16.9%2037.8-37.6V118c0-20.7-16-41-37.8-37.6zm0%20282l-151.2%2032V149.9l151.2-32v244.5zm-189.2%2032l-151.2-32V118L237%20150v244.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-book($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-book-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bookmark-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M360%2064H152c-22.002%200-40%2017.998-40%2040v344l144-64%20144%2064V104c0-22.002-17.998-40-40-40z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bookmark($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bookmark-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bookmarks-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.2%2064h-21c15%205.7%2022.8%2020.6%2022.8%2042.7v298.7c0%2022.1-7%2037.3-22.8%2042.7h21c23.7%200%2042.8-19.2%2042.8-42.7V106.7c0-23.5-19.1-42.7-42.8-42.7zM345.5%2064.2c-1.4-.1-2.8-.2-4.2-.2H106.7C83.2%2064%2064%2083.2%2064%20106.7v298.7c0%2023.5%2019.2%2042.7%2042.7%2042.7h234.7c1.4%200%202.8-.1%204.2-.2%2021.5-2.1%2038.5-20.4%2038.5-42.5V106.7c-.1-22.1-17.1-40.4-38.6-42.5zM208%20256l-56-32-56%2032V96h112v160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bookmarks($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bookmarks-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bowtie-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M276%20304h-40c-15.4%200-28-12.6-28-28v-40c0-15.4%2012.6-28%2028-28h40c15.4%200%2028%2012.6%2028%2028v40c0%2015.4-12.6%2028-28%2028zM176%20280v-48c0-18.2%208.7-34.4%2022.2-44.6C192%20160%2096%2096%2064%2096c-17.6%200-32%2014.4-32%2032v256c0%2017.6%2014.3%2032%2032%2032%2032%200%20128-64%20134.2-91.4-13.5-10.2-22.2-26.4-22.2-44.6zM448%2096c-32%200-128%2064-134.2%2091.4%2013.5%2010.2%2022.2%2026.4%2022.2%2044.6v48c0%2018.2-8.7%2034.4-22.2%2044.6C320%20352%20416%20416%20448%20416c17.7%200%2032-14.4%2032-32V128c0-17.6-14.4-32-32-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bowtie($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bowtie-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-briefcase-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20144v-39.6C352%2082%20334%2064%20311.6%2064H200.4C178%2064%20160%2082%20160%20104.4V144H48v263.6C48%20430%2066%20448%2088.4%20448h335.2c22.4%200%2040.4-18%2040.4-40.4V144H352zm-40%200H200v-40h112v40z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-briefcase($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-briefcase-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-browsers-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M424%2064H88c-26.6%200-48%2021.6-48%2048v288c0%2026.4%2021.4%2048%2048%2048h336c26.4%200%2048-21.6%2048-48V112c0-26.4-21.4-48-48-48zm0%20336H88V176h336v224z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-browsers($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-browsers-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-brush-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M149.9%20302.2c-39.1%200-70.7%2031-70.7%2069.3%200%2030.3-27.3%2046.2-47.2%2046.2C53.7%20446%2090.7%20464%20126.3%20464c52.1%200%2094.3-41.4%2094.3-92.4%200-38.4-31.6-69.4-70.7-69.4zM473.1%2085.7l-31.6-31c-9.2-9-24-9-33.2%200L197%20261.8l64.8%2063.5%20211.2-207c9.3-9%209.3-23.6.1-32.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-brush($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-brush-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bug-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20160h-67.4c-10.8-18.7-25.7-34.8-43.7-47L376%2073.8%20342.2%2040l-52.1%2052.1C279%2089.4%20267.8%2088%20256%2088s-23%201.4-33.8%204.1L169.8%2040%20136%2073.8l38.9%2039.1c-17.8%2012.2-32.6%2028.3-43.4%2047H64v48h50.2c-1.2%207.9-2.2%2015.8-2.2%2024v24H64v48h48v24c0%208.2%201%2016.1%202.2%2024H64v48h67.4c25%2043%2071.3%2072%20124.6%2072s99.6-29%20124.6-72H448v-48h-50.2c1.2-7.9%202.2-15.8%202.2-24v-24h48v-48h-48v-24c0-8.2-1-16.1-2.2-24H448V160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bug($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bug-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-build-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M474.1%20398.2L289.1%20212c18.3-47%208.1-102.3-30.5-141.1C217.9%2030%20156.9%2021.8%20108.1%2044.3l87.4%2088-61%2061.4-89.5-88c-24.3%2049-14.1%20110.4%2026.5%20151.3%2038.6%2038.9%2093.5%2049.1%20140.3%2030.7l185%20186.2c8.1%208.2%2020.3%208.2%2028.5%200l46.8-47c10.2-8.3%2010.2-22.6%202-28.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-build($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-build-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bulb-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20170.136c25.5%200%2049.567%2010.025%2067.77%2028.23%2018.205%2018.202%2028.23%2042.27%2028.23%2067.77%200%2017.62-4.422%2034.03-13.144%2048.773-8.34%2014.097-20.437%2026.035-34.985%2034.525L288%20358.697V448h-64V358.697l-15.87-9.262C178.44%20332.11%20160%20300.192%20160%20266.135c0-25.498%2010.025-49.566%2028.23-67.77%2018.203-18.204%2042.27-28.23%2067.77-28.23M277.333%2032h-42.666v64h42.666V32zm129.063%2053.864L368%20124.27l29.864%2029.866%2038.406-38.396-29.874-29.876zm-300.792%200L75.73%20115.74l38.405%2038.395L144%20124.27l-38.396-38.406zM256%20138.136c-70.396%200-128%2057.604-128%20128%200%2046.938%2025.604%2088.53%2064%20110.938V480h128V377.073c38.396-22.406%2064-62.938%2064-110.938%200-70.396-57.604-128-128-128zm224%20106.666h-64v42.667h64V244.8zm-384%200H32v42.667h64V244.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bulb($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bulb-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-bus-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M80%20352c0%2019.198%2013.864%2024.53%2026.667%2036.27v38.397c0%2011.73%209.6%2021.334%2021.333%2021.334h21.333c11.734%200%2021.334-9.603%2021.334-21.333v-21.333h170.666v21.333c0%2011.73%209.604%2021.334%2021.334%2021.334H384c11.73%200%2021.333-9.603%2021.333-21.333V388.27C418.136%20376.53%20432%20370.137%20432%20352V148.334C432%2073.667%20349.864%2064%20256%2064S80%2073.667%2080%20148.334V352zm80%2015.99c-18.136%200-32-13.865-32-32%200-18.136%2013.864-32%2032-32s32%2013.864%2032%2032c0%2018.135-13.864%2032-32%2032zm192%200c-18.136%200-32-13.865-32-32%200-18.136%2013.864-32%2032-32s32%2013.864%2032%2032c0%2018.135-13.864%2032-32%2032zm32-122.657H128V138.667h256v106.666z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-bus($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-bus-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cafe-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20400h368v48H48zM424%2064H80v224c0%2044%2036%2080%2080%2080h144c44%200%2080-36%2080-80v-64h40c22%200%2040-18%2040-40v-80c0-22-18-40-40-40zm0%20112h-40v-64h40v64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cafe($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cafe-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-calculator-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368%2048H144c-26.6%200-48%2021.6-48%2048v320c0%2026.4%2021.4%2048%2048%2048h224c26.4%200%2048-21.6%2048-48V96c0-26.4-21.4-48-48-48zM200%20416h-48v-48h48v48zm0-88h-48v-48h48v48zm0-88h-48v-48h48v48zm80%20176h-48v-48h48v48zm0-88h-48v-48h48v48zm0-88h-48v-48h48v48zm80%20176h-48V280h48v136zm0-176h-48v-48h48v48zm0-96H152V96h208v48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-calculator($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-calculator-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-calendar-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M368.005%20272h-96v96h96v-96zm-32-208v32h-160V64h-48v32h-24.01c-22.002%200-40%2017.998-40%2040v272c0%2022.002%2017.998%2040%2040%2040h304.01c22.002%200%2040-17.998%2040-40V136c0-22.002-17.998-40-40-40h-24V64h-48zm72%20344h-304.01V196h304.01v212z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-calendar($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-calendar-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-call-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M426.666%20330.667c-26.666%200-52.27-4.27-75.73-11.73-7.468-2.135-16-1.072-21.33%205.334l-46.94%2046.93c-60.802-30.93-109.864-80-140.802-140.804l46.94-46.927c5.33-5.334%207.46-13.865%205.33-21.334-8.536-24.53-12.8-50.136-12.8-76.803%200-11.73-9.6-21.333-21.334-21.333H85.333C73.6%2064%2064%2073.604%2064%2085.333%2064%20285.863%20226.136%20448%20426.666%20448c11.73%200%2021.334-9.604%2021.334-21.333V352c0-11.73-9.604-21.333-21.334-21.333z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-call($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-call-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-camera-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Ccircle%20cx%3D%22256%22%20cy%3D%22280%22%20r%3D%2263%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M440%2096h-88l-32-32H192l-32%2032H72c-22.092%200-40%2017.908-40%2040v272c0%2022.092%2017.908%2040%2040%2040h368c22.092%200%2040-17.908%2040-40V136c0-22.092-17.908-40-40-40zM256%20392c-61.855%200-112-50.145-112-112s50.145-112%20112-112%20112%2050.145%20112%20112-50.145%20112-112%20112z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-camera($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-camera-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-car-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.208%20117.333c-4.27-12.802-16-21.333-29.875-21.333H138.667c-13.875%200-25.604%208.53-29.875%2021.333L64%20234.667v160C64%20406.397%2073.604%20416%2085.333%20416h21.334c11.73%200%2021.333-9.604%2021.333-21.333V384h256v10.667c0%2011.73%209.604%2021.333%2021.333%2021.333h21.334c11.73%200%2021.333-9.604%2021.333-21.333v-160l-44.792-117.334zM138.668%20320c-18.126%200-32-13.865-32-32s13.874-32%2032-32%2032%2013.866%2032%2032-13.876%2032-32%2032zm234.665%200c-18.125%200-32-13.865-32-32s13.875-32%2032-32%2032%2013.866%2032%2032-13.875%2032-32%2032zM106.667%20213.333l32-85.333h234.666l32%2085.333H106.667z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-car($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-car-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-card-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M435.2%2080H76.8c-24.9%200-44.6%2019.6-44.6%2044L32%20388c0%2024.4%2019.9%2044%2044.8%2044h358.4c24.9%200%2044.8-19.6%2044.8-44V124c0-24.4-19.9-44-44.8-44zm0%20308H76.8V256h358.4v132zm0-220H76.8v-44h358.4v44z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-card($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-card-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cart-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M169.6%20377.6c-22.882%200-41.6%2018.718-41.6%2041.6%200%2022.883%2018.718%2041.6%2041.6%2041.6s41.6-18.717%2041.6-41.6c0-22.883-18.72-41.6-41.6-41.6zM48%2051.2v41.6h41.6l74.883%20151.682-31.308%2050.954c-3.118%205.2-5.2%2012.482-5.2%2019.765%200%2027.85%2019.025%2041.6%2044.825%2041.6H416v-40H177.893c-3.118%200-5.2-2.08-5.2-5.2%200-1.035%202.207-5.2%202.207-5.2l20.782-32.8h154.954c15.6%200%2029.128-8.316%2036.4-21.835l74.882-128.8c1.237-2.46%202.082-6.246%202.082-10.4%200-11.445-9.364-19.764-20.8-19.764H135.364L115.6%2051.2H48zm326.4%20326.4c-22.883%200-41.6%2018.718-41.6%2041.6%200%2022.883%2018.717%2041.6%2041.6%2041.6s41.6-18.718%2041.6-41.6c0-22.883-18.72-41.6-41.6-41.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cart($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cart-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cash-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2096v256h448V96H32zm160.5%20224h-80.4c0-26.6-21.5-48.1-48.1-48.1V192c35.3%200%2064-28.7%2064-64h64.5c-19.9%2023.5-32.5%2057.8-32.5%2096s12.6%2072.5%2032.5%2096zM448%20271.9c-26%200-48%2021.5-48%2048.1h-80.5c19.9-23.5%2032.5-57.8%2032.5-96s-12.6-72.5-32.5-96H384c0%2035.3%2028.7%2064%2064%2064v79.9zM32%20384h448v32H32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cash($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cash-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-chatboxes-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M391.553%2064H57.607C53.13%2064%2048%2067.745%2048%2072.16v214.216c0%204.413%205.13%208.624%209.607%208.624H115v88.894L205.128%20295h186.425c4.477%200%207.447-4.21%207.447-8.624V72.16c0-4.415-2.97-8.16-7.447-8.16z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M456.396%20127H424v166.57c0%2015.987-6.915%2026.43-25.152%2026.43H218.096l-38.905%2039h129.69L399%20448v-89h57.396c4.478%200%207.604-4.262%207.604-8.682V136.103c0-4.414-3.126-9.103-7.604-9.103z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-chatboxes($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-chatboxes-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-chatbubbles-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M132.8%20368c-20.2%200-44.8-24.6-44.8-44.8V160h-9.6C61.7%20160%2048%20173.7%2048%20190.4V464l58.5-58h215.1c16.7%200%2030.4-14.1%2030.4-30.9V368H132.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M429.1%2048H149.9C130.7%2048%20115%2063.7%20115%2082.9V309c0%2019.2%2015.7%2035%2034.9%2035h238.2l75.9%2053V82.9c0-19.2-15.7-34.9-34.9-34.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-chatbubbles($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-chatbubbles-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-checkbox-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M168.53%20215.47l-29.863%2029.863%2096%2096L448%20128l-29.864-29.864-183.47%20182.395-66.135-65.06zm236.803%20189.863H106.667V106.667H320V64H106.667C83.197%2064%2064%2083.198%2064%20106.667v298.666C64%20428.803%2083.198%20448%20106.667%20448h298.666c23.47%200%2042.667-19.198%2042.667-42.667V234.667h-42.667v170.666z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-checkbox-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-checkbox-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-checkbox-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.333%2064H106.667C83.197%2064%2064%2083.198%2064%20106.667v298.666C64%20428.803%2083.198%20448%20106.667%20448h298.666c23.47%200%2042.667-19.198%2042.667-42.667V106.667C448%2083.197%20428.802%2064%20405.333%2064zm-192%20298.667L106.667%20256l29.864-29.864%2076.803%2076.802L375.47%20140.802l29.863%2029.865-192%20192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-checkbox($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-checkbox-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-checkmark-circle-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M170.718%20216.482L141.6%20245.6l93.6%2093.6%20208-208-29.118-29.118L235.2%20279.918l-64.482-63.436zM422.4%20256c0%2091.518-74.883%20166.4-166.4%20166.4S89.6%20347.518%2089.6%20256%20164.482%2089.6%20256%2089.6c15.6%200%2031.2%202.082%2045.764%206.24L334%2063.6C310.082%2053.2%20284.082%2048%20256%2048%20141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208h-41.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-checkmark-circle-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-checkmark-circle-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-checkmark-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm-42.7%20318.9L106.7%20260.3l29.9-29.9%2076.8%2076.8%20162.1-162.1%2029.9%2029.9-192.1%20191.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-checkmark-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-checkmark-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-checkmark-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M186.3%20339.893L96%20249.46%2064%20279.97%20186.3%20402%20448%20140.506%20416%20110z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-checkmark($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-checkmark-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-clipboard-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.333%2080h-87.35C310.88%2052.396%20285.82%2032%20256%2032s-54.88%2020.396-61.983%2048h-87.35C83.197%2080%2064%2099.198%2064%20122.667v314.665C64%20460.802%2083.198%20480%20106.667%20480h298.666c23.47%200%2042.667-19.2%2042.667-42.668V122.667C448%2099.197%20428.802%2080%20405.333%2080zM256%2080c11.73%200%2021.333%209.6%2021.333%2021.333S267.73%20122.667%20256%20122.667s-21.333-9.6-21.333-21.334S244.27%2080%20256%2080zm152%20360H104V120h40v72h224v-72h40v320z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-clipboard($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-clipboard-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-clock-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.1%20108.9c-81.2-81.2-212.9-81.2-294.2%200-81.3%2081.2-81.2%20212.9%200%20294.2%2081.2%2081.2%20212.9%2081.2%20294.2%200%2081.2-81.2%2081.2-213%200-294.2zm-16.5%2053.2c7.6-4.4%2017.5-1.8%2021.9%205.9%204.4%207.6%201.8%2017.5-5.9%2021.9-7.6%204.4-17.5%201.8-21.9-5.9-4.4-7.6-1.8-17.5%205.9-21.9zM80%20256c0-8.8%207.2-16%2016-16s16%207.2%2016%2016-7.2%2016-16%2016-16-7.2-16-16zm45.4%2093.9c-7.6%204.4-17.5%201.8-21.9-5.9-4.4-7.6-1.8-17.5%205.9-21.9%207.6-4.4%2017.5-1.8%2021.9%205.9%204.4%207.6%201.8%2017.5-5.9%2021.9zm5.9-165.9c-4.4%207.6-14.2%2010.3-21.9%205.9-7.6-4.4-10.3-14.2-5.9-21.9%204.4-7.6%2014.2-10.3%2021.9-5.9%207.7%204.4%2010.3%2014.3%205.9%2021.9zm36.7-80.4c7.6-4.4%2017.5-1.8%2021.9%205.9%204.4%207.6%201.8%2017.5-5.9%2021.9s-17.5%201.8-21.9-5.9c-4.4-7.7-1.7-17.5%205.9-21.9zm-7.8%20110.7l15.6-26.6%2095.2%2056.9V384h-31V260.6l-79.8-46.3zm29.7%20188.3c-4.4%207.6-14.2%2010.3-21.9%205.9s-10.3-14.2-5.9-21.9c4.4-7.6%2014.2-10.3%2021.9-5.9%207.6%204.4%2010.3%2014.2%205.9%2021.9zM256%20432c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016zm0-320c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016zm88%20296.4c-7.6%204.4-17.5%201.8-21.9-5.9-4.4-7.6-1.8-17.5%205.9-21.9%207.6-4.4%2017.5-1.8%2021.9%205.9%204.4%207.7%201.7%2017.5-5.9%2021.9zm5.9-283c-4.4%207.6-14.2%2010.3-21.9%205.9s-10.3-14.2-5.9-21.9c4.4-7.6%2014.2-10.3%2021.9-5.9s10.3%2014.3%205.9%2021.9zM408.4%20344c-4.4%207.6-14.2%2010.3-21.9%205.9-7.6-4.4-10.3-14.2-5.9-21.9%204.4-7.6%2014.2-10.3%2021.9-5.9%207.7%204.4%2010.3%2014.3%205.9%2021.9zm7.6-72c-8.8%200-16-7.2-16-16s7.2-16%2016-16%2016%207.2%2016%2016-7.2%2016-16%2016z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-clock($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-clock-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-close-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C140.56%2048%2048%20140.56%2048%20256c0%20115.436%2092.56%20208%20208%20208%20115.435%200%20208-92.564%20208-208%200-115.44-92.564-208-208-208zm104.002%20282.88L330.882%20360%20256%20285.118l-74.88%2074.88-29.122-29.117L226.88%20256%20152%20181.12l29.12-29.117L256%20226.88l74.88-74.877L360%20181.12%20285.12%20256%20360%20330.88z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-close-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-close-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-close-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405%20136.798L375.202%20107%20256%20226.202%20136.798%20107%20107%20136.798%20226.202%20256%20107%20375.202%20136.798%20405%20256%20285.798%20375.202%20405%20405%20375.202%20285.798%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-close($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-close-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-closed-captioning-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2096v320h448V96H32zm406%20159.8c0%2023.4-1.4%2041.2-3.3%2070.2s-16.8%2049.4-51.7%2052.6c-34.9%203.2-83.8%203.5-127%203.4-42.9.1-92-.1-127-3.4-34.9-3.2-49.7-23.6-51.7-52.6S74%20279.2%2074%20255.8c0-23.4.1-38.6%203.3-70.2s20.1-49.2%2051.7-52.4%2086-3.2%20127-3.2%2095.4%200%20127%203.2c31.6%203.2%2048.5%2020.9%2051.7%2052.4%203.2%2031.6%203.3%2046.9%203.3%2070.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M357.5%20280.4v.7c0%2016.3-10.1%2025.9-23.6%2025.9-13.5%200-22.6-10.8-23.9-25.9%200%200-1.2-7.9-1.2-23.9s1.4-26%201.4-26c2.4-17%2010.7-25.9%2024.2-25.9%2013.4%200%2024.1%2011.6%2024.1%2029.2v.5h45.1c0-21.9-5.5-41.6-16.6-54-11-12.4-27.5-18.6-49.3-18.6-10.9%200-20.9%201.4-30%204.3-9.1%202.9-17%207.9-23.6%2015.1-6.6%207.2-11.7%2016.8-15.4%2028.9-3.6%2012.1-5.5%2027.3-5.5%2045.7%200%2018%201.5%2033%204.4%2045.1%203%2012.1%207.3%2021.7%2013.1%2028.9%205.8%207.2%2013.1%2012.2%2021.8%2015%208.8%202.8%2019.1%204.2%2030.9%204.2%2025%200%2043-6.4%2053.8-18.7%2010.8-12.3%2016.2-30.3%2016.2-53.9h-46.1c.2%200%20.2%202.5.2%203.4zM202.6%20280.4v.7c0%2016.3-10.1%2025.9-23.6%2025.9-13.5%200-22.6-10.8-23.9-25.9%200%200-1.2-7.9-1.2-23.9s1.4-26%201.4-26c2.4-17%2010.7-25.9%2024.2-25.9%2013.4%200%2024.1%2011.6%2024.1%2029.2v.5h45.1c0-21.9-5.5-41.6-16.6-54-11-12.4-27.5-18.6-49.3-18.6-10.9%200-20.9%201.4-30%204.3-9.1%202.9-17%207.9-23.6%2015.1-6.6%207.2-11.7%2016.8-15.4%2028.9-3.6%2012.1-5.5%2027.3-5.5%2045.7%200%2018%201.5%2033%204.4%2045.1%203%2012.1%207.3%2021.7%2013.1%2028.9%205.8%207.2%2013.1%2012.2%2021.8%2015%208.8%202.8%2019.1%204.2%2030.9%204.2%2025%200%2043-6.4%2053.8-18.7%2010.8-12.3%2016.2-30.3%2016.2-53.9h-46.1c.2%200%20.2%202.5.2%203.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-closed-captioning($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-closed-captioning-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloud-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm93.6%20291.2H172.8c-34.317%200-62.4-28.082-62.4-62.4s28.083-62.4%2062.4-62.4h3.118c9.364-36.4%2041.6-62.398%2080.083-62.398%2045.765%200%2083.2%2037.435%2083.2%2083.198h10.4c29.118%200%2052%2022.882%2052%2052s-22.882%2052-52%2052z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloud-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloud-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloud-done-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.002%20217C388.998%20148.003%20328.998%2096%20256%2096c-57.998%200-107.998%2032.998-132.998%2081C63.002%20183.003%2016%20234%2016%20296c0%2065.996%2054%20120%20120%20120h260c55%200%20100-45%20100-100%200-52.998-40.996-96-92.998-99zm-189.67%20145.667L138.668%20288l29.864-29.864%2044.803%2044.802L324.27%20192l29.866%2029.864-140.803%20140.803z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloud-done($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloud-done-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloud-download-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.002%20217C388.998%20148.003%20328.998%2096%20256%2096c-57.998%200-107.998%2032.998-132.998%2081C63.002%20183.003%2016%20234%2016%20296c0%2065.996%2054%20120%20120%20120h260c55%200%20100-45%20100-100%200-52.998-40.996-96-92.998-99zM224%20268v-76h64v76h68L256%20368%20156%20268h68z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloud-download($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloud-download-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloud-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403%20217C388.998%20148.003%20329%2096%20256%2096c-57.998%200-108%2032.998-132.997%2081C63.003%20183.002%2016%20233.998%2016%20296c0%2065.996%2054.004%20120%20120%20120h260c55%200%20100-45%20100-100%200-52.998-40.997-96-93-99zm-7%20159H136c-44.004%200-80-35.996-80-80%200-44%2035.996-80%2080-80h14.004c12.998-46%2055-80%20105.996-80%2060.996%200%20110%2049%20110%20110v10h30c32.998%200%2060%2027.003%2060%2060%200%2032.998-27.002%2060-60%2060z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloud-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloud-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloud-upload-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.002%20217C388.998%20148.003%20328.998%2096%20256%2096c-57.998%200-107.998%2032.998-132.998%2081C63.002%20183.003%2016%20234%2016%20296c0%2065.996%2054%20120%20120%20120h260c55%200%20100-45%20100-100%200-52.998-40.996-96-92.998-99zM288%20276v76h-64v-76h-68l100-100%20100%20100h-68z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloud-upload($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloud-upload-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloud-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M403.002%20217C388.998%20148.003%20328.998%2096%20256%2096c-57.998%200-107.998%2032.998-132.998%2081C63.002%20183.003%2016%20234%2016%20296c0%2065.996%2054%20120%20120%20120h260c55%200%20100-45%20100-100%200-52.998-40.996-96-92.998-99z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloud($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloud-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloudy-night-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M123.4%20183c.4-.1.8-.1%201.2-.2-.5.1-.8.2-1.2.2zM341.5%20303.4C330.7%20247.7%20282.2%20206%20224%20206c-34%200-65.1%2012-86.5%2039.1%2029.4%202.2%2056.7%2013.1%2077.7%2034.2%2015.6%2015.7%2026.6%2034.9%2032.1%2055.8h-28.7c-13.1-37.6-48-64.5-90.6-64.5-5.1%200-12.3.6-17.7%201.7-45.7%209.4-78.3%2047.6-78.3%2095%200%2053.4%2043%2096.8%2096%2096.8h208c44.1%200%2080-36.1%2080-80.6-.1-42.7-32.9-77.2-74.5-80.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M112.5%20225.4c13.6-17.3%2030.7-30.5%2050.8-39.2%2018.4-8%2038.8-12%2060.7-12%206.1%200%2012.2.4%2018.2%201.1-6.1-18.1-9.4-37.6-9.4-57.8%200-24.6%204.9-48.1%2013.8-69.4C161.9%2068.7%2099%20145.7%2099%20237.3c0%201.6%200%203.2.1%204.8.1%200%20.2-.1.3-.1l13.1-16.6zM417.6%20306.8c13.3%2014.2%2022.6%2031.5%2027.1%2050.1%2016.5-21.4%2028.7-46.4%2035.3-73.5-21.2%209-44.5%2013.9-68.9%2013.9h-3.6c3.5%202.9%206.9%206.1%2010.1%209.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloudy-night($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloudy-night-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cloudy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M123.4%20183c.4-.1.8-.1%201.2-.2-.5.1-.8.2-1.2.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M393.2%20219.2C380.5%20154.6%20323.9%20106%20256%20106c-39.7%200-76%2014-100.9%2045.4%2034.3%202.6%2066.1%2015.2%2090.7%2039.8%2018.2%2018.2%2031%2040.5%2037.4%2064.8h-33.5c-15.3-43.7-56-75-105.7-75-6%200-14.3.7-20.6%202C70%20194%2032%20238.4%2032%20293.5%2032%20355.6%2082.2%20406%20144%20406h242.7c51.5%200%2093.3-42%2093.3-93.8%200-49.4-38.3-89.6-86.8-93z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cloudy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cloudy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-code-download-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M234.6%20160v125.7l-44.7-43.6L160%20272l96%2096%2096-96-29.9-31-44.7%2044.7V160h-42.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M190.4%20354.1L91.9%20256l98.4-98.1-30-29.9L32%20256l128.4%20128%2030-29.9zm131.2%200L420%20256l-98.4-98.1%2030-29.9L480%20256%20351.6%20384l-30-29.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-code-download($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-code-download-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-code-working-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M190.4%20354.1L91.9%20256l98.4-98.1-30-29.9L32%20256l128.4%20128%2030-29.9zm131.2%200L420%20256l-98.4-98.1%2030-29.9L480%20256%20351.6%20384l-30-29.9z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M155.6%20276h40v-40h-40v40zm200.8-40h-40v40h40v-40zM236%20276h40v-40h-40v40z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-code-working($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-code-working-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-code-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M190.4%20354.1L91.9%20256l98.4-98.1-30-29.9L32%20256l128.4%20128%2030-29.9zm131.2%200L420%20256l-98.4-98.1%2030-29.9L480%20256%20351.6%20384l-30-29.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-code($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-code-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cog-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20288v-64h-34.7c-2-12.1-5.2-23.8-9.3-35l30-17.3-32-55.4-30%2017.3c-7.7-9.3-16.3-17.9-25.6-25.6l17.3-30-55.4-32L323%2076c-11.2-4.2-22.9-7.3-35-9.3V32h-64v34.7c-12.1%202-23.8%205.2-35%209.3l-17.3-30-55.4%2032%2017.3%2030c-9.3%207.7-17.9%2016.3-25.6%2025.6l-30-17.3-32%2055.4L76%20189c-4.2%2011.2-7.3%2022.9-9.3%2035H32v64h34.7c2%2012.1%205.2%2023.8%209.3%2035l-30%2017.3%2032%2055.4%2030-17.3c7.7%209.3%2016.3%2017.9%2025.6%2025.6l-17.3%2030%2055.4%2032%2017.3-30c11.2%204.2%2022.9%207.3%2035%209.3V480h64v-34.7c12.1-2%2023.8-5.2%2035-9.3l17.3%2030%2055.4-32-17.3-30c9.3-7.7%2017.9-16.3%2025.6-25.6l30%2017.3%2032-55.4-30-17.3c4.2-11.2%207.3-22.9%209.3-35H480zM377%20177.9L330.1%20195c-11-13.3-25.5-23.6-42.1-29.5v-49.9c37.2%208.4%2068.9%2031.2%2089%2062.3zm-153-62.3v49.9c-16.6%205.9-31.1%2016.2-42.1%2029.5L135%20177.9c20.1-31.1%2051.8-53.9%2089-62.3zM112%20256c0-6.1.4-12.1%201.1-18l46.9%2017.1v.9c0%2017.8%204.9%2034.5%2013.3%2048.8L141.2%20343c-18.3-24.2-29.2-54.3-29.2-87zm144%20144c-23.7%200-46-5.7-65.8-15.9l32.1-38.2c10.5%203.9%2021.8%206.1%2033.7%206.1%2011.9%200%2023.2-2.2%2033.7-6.1l32.1%2038.2C302%20394.3%20279.7%20400%20256%20400zm114.8-57l-32.1-38.2c8.4-14.3%2013.3-31%2013.3-48.8v-.9l46.9-17.1c.7%205.9%201.1%2011.9%201.1%2018%200%2032.7-10.9%2062.8-29.2%2087z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cog($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cog-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-color-fill-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M136.5%2077.7l37%2067L32%20285.7%20216.4%20464l152.4-148.6%2054.4-11.4L166.4%2048l-29.9%2029.7zm184%20208H114.9l102.8-102.3%20102.8%20102.3zM423.3%20304s-56.7%2061.5-56.7%2092.1c0%2030.7%2025.4%2055.5%2056.7%2055.5%2031.3%200%2056.7-24.9%2056.7-55.5S423.3%20304%20423.3%20304z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-color-fill($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-color-fill-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-color-filter-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M441.8%20120.1l-49.9-49.9c-8.3-8.3-21.8-8.3-30.1%200l-66.6%2066.6L254.1%2096%20224%20126.1l30.3%2030.3L64%20346.7V448h101.3l190.3-190.3%2030.3%2030.3%2030.1-30.1-41-41%2066.6-66.6c8.5-8.4%208.5-21.8.2-30.2zM147.6%20405.4l-41-41%20171.9-171.9%2041%2041-171.9%20171.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-color-filter($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-color-filter-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-color-palette-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064C150.4%2064%2064%20150.4%2064%20256c0%20105.604%2086.4%20192%20192%20192%2018.136%200%2032-13.864%2032-32%200-8.53-3.198-16-8.53-21.333-5.334-5.334-8.532-12.803-8.532-21.334%200-18.135%2013.864-32%2032-32h38.396c58.667%200%20106.667-48%20106.667-106.666C448%20140.802%20361.605%2064%20256%2064zM138.667%20256c-18.136%200-32-13.864-32-32s13.864-32%2032-32c18.135%200%2032%2013.864%2032%2032s-13.865%2032-32%2032zm64-85.333c-18.136%200-32-13.865-32-32%200-18.136%2013.864-32%2032-32%2018.135%200%2032%2013.864%2032%2032%200%2018.135-13.865%2032-32%2032zm106.666%200c-18.135%200-32-13.865-32-32%200-18.136%2013.865-32%2032-32%2018.136%200%2032%2013.864%2032%2032%200%2018.135-13.864%2032-32%2032zm64%2085.333c-18.135%200-32-13.864-32-32s13.865-32%2032-32c18.136%200%2032%2013.864%2032%2032s-13.864%2032-32%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-color-palette($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-color-palette-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-color-wand-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M200.8%20157.2l-36.4%2037.4L411.7%20448l36.3-37.4zM181%2064h37v68h-37zM181%20262h37v68h-37zM270%20176h69v37h-69zM305.6%20115.8l-25.7-26.3-47.1%2048.3%2025.6%2026.2zM168.8%20137.8l-47.1-48.3-25.6%2026.3%2047.1%2048.2zM96.1%20277.9l25.6%2026.2%2047.1-48.2-25.6-26.3zM64%20176h65v37H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-color-wand($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-color-wand-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-compass-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20231.358c-13.442%200-24.643%2011.2-24.643%2024.642s11.2%2024.643%2024.643%2024.643%2024.643-11.2%2024.643-24.643-11.2-24.642-24.643-24.642zM256%2032C132.8%2032%2032%20132.8%2032%20256s100.8%20224%20224%20224%20224-100.8%20224-224S379.2%2032%20256%2032zm49.284%20273.284L121.6%20390.4l85.116-183.68L390.4%20121.6l-85.116%20183.684z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-compass($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-compass-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-construct-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M430.9%20393.4l-119.6-119-58.1-57.9-13.4-13.3c15.9-40.6%207.1-88.2-26.6-121.7-35.4-35.3-88.5-42.3-131-22.9l76.1%2075.8-53.1%2052.9-77.9-75.8C6.2%20153.8%2015%20206.7%2050.4%20242c33.6%2033.5%2081.4%2042.3%20122.1%2026.5l14.4%2014.3L81.7%20388c-7.6%205.7-7.6%2019%201.9%2026.6l43.8%2043.7c7.6%207.6%2019.1%207.6%2026.7%200l96.1-112.4%20113.4%20112.9c7.1%207.1%2017.7%207.1%2024.8%200l40.7-40.6c8.9-7.1%208.9-19.5%201.8-24.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M494.4%20216.6l-34.5-34.1c-2.2-2.2-5.8-2.2-8%200l-3.7%203.7-18.5-15.8s1.2-10-4.9-18.7c-6.2-8.7-16.1-19.8-23.2-26.9-7.1-7-34.1-33.9-69.7-51.4C296.2%2055.7%20271%2048%20241%2048v29.7s28.7%2016.6%2045.1%2029.7c16.3%2013.1%2016.8%2059.5%2016.8%2059.5l-28.5%2028.5%2056.5%2056.1%2031-36.3c12.9-3.5%2023.8-3.8%2030.2-.3l13.7%2013.3-9.6%209.5c-2.2%202.2-2.2%205.7%200%207.9l34.5%2034.1c2.2%202.2%205.8%202.2%208%200l55.7-55.2c2.1-2.2%202.1-5.8%200-7.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-construct($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-construct-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-contact-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm0%2062.4c34.3%200%2062.4%2028.1%2062.4%2062.4s-28.1%2062.4-62.4%2062.4-62.4-28.1-62.4-62.4%2028.1-62.4%2062.4-62.4zm0%20295.4c-52%200-97.8-27-124.8-66.6%201-41.6%2083.2-64.5%20124.8-64.5s123.8%2022.9%20124.8%2064.5c-27%2039.5-72.8%2066.6-124.8%2066.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-contact($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-contact-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-contacts-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M239.208%20343.937c-17.78%2010.103-38.342%2015.876-60.255%2015.876-21.91%200-42.467-5.77-60.246-15.87C71.544%20358.33%2042.643%20406%2032%20448h293.912c-10.64-42-39.537-89.683-86.704-104.063zM178.953%20120.035c-58.48%200-105.886%2047.394-105.886%20105.858%200%2058.464%2047.407%20105.857%20105.886%20105.857%2058.48%200%20105.886-47.394%20105.886-105.857%200-58.464-47.41-105.858-105.887-105.858zm0%20186.488c-33.67%200-62.445-22.513-73.997-50.523H252.95c-11.554%2028.01-40.326%2050.523-73.997%2050.523z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M322.602%20384H480c-10.638-42-39.537-81.69-86.703-96.072-17.78%2010.104-38.343%2015.873-60.256%2015.873-14.822%200-29.023-2.653-42.167-7.49-7.445%2012.47-16.927%2025.593-27.974%2034.907C289.244%20341.354%20309.145%20364%20322.6%20384zM306.545%20200h100.493c-11.554%2028-40.327%2050.293-73.997%2050.293-8.874%200-17.403-1.692-25.374-4.51a128.41%20128.41%200%200%201-6.52%2025.118c10.066%203.175%2020.78%204.863%2031.895%204.863%2058.48%200%20105.887-47.41%20105.887-105.872%200-58.464-47.407-105.865-105.886-105.865-37.49%200-70.426%2019.703-89.242%2049.09C275.608%20131.383%20298.96%20163%20306.545%20200z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-contacts($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-contacts-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-contract-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20371.2h76.795V448H192V320H64v51.2zm76.795-230.4H64V192h128V64h-51.205v76.8zM320%20448h51.2v-76.8H448V320H320v128zm51.2-307.2V64H320v128h128v-51.2h-76.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-contract($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-contract-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-contrast-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm113.1%20321.1C338.9%20399.4%20298.7%20416%20256%20416V96c42.7%200%2082.9%2016.6%20113.1%2046.9C399.4%20173.1%20416%20213.3%20416%20256s-16.6%2082.9-46.9%20113.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-contrast($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-contrast-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-copy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M296%2048H176.5C154.4%2048%20136%2065.4%20136%2087.5V96h-7.5C106.4%2096%2088%20113.4%2088%20135.5v288c0%2022.1%2018.4%2040.5%2040.5%2040.5h208c22.1%200%2039.5-18.4%2039.5-40.5V416h8.5c22.1%200%2039.5-18.4%2039.5-40.5V176L296%2048zm0%2044.6l83.4%2083.4H296V92.6zm48%20330.9c0%204.7-3.4%208.5-7.5%208.5h-208c-4.4%200-8.5-4.1-8.5-8.5v-288c0-4.1%203.8-7.5%208.5-7.5h7.5v255.5c0%2022.1%2010.4%2032.5%2032.5%2032.5H344v7.5zm48-48c0%204.7-3.4%208.5-7.5%208.5h-208c-4.4%200-8.5-4.1-8.5-8.5v-288c0-4.1%203.8-7.5%208.5-7.5H264v128h128v167.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-copy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-copy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-create-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M64%20368v80h80l235.727-235.73-80-79.997L64%20368zm377.602-217.602c8.53-8.53%208.53-21.334%200-29.865l-50.135-50.135c-8.53-8.53-21.334-8.53-29.865%200l-39.468%2039.47%2080%2079.997%2039.468-39.467z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-create($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-create-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-crop-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20312.7h37.8V160c0-20.8-17-37.8-37.8-37.8H199.3V160H352v152.7zm-192%2033.5V48h-37.8v74.2H48V160h74.2v186.2c0%2020.8%2017%2037.8%2037.8%2037.8h192v80h37.8v-80H464v-37.8H160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-crop($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-crop-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cube-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M467.3%20168.1c-1.8%200-3.5.3-5.1%201l-177.6%2092.1h-.1c-7.6%204.7-12.5%2012.5-12.5%2021.4v185.9c0%206.4%205.6%2011.5%2012.7%2011.5%202.2%200%204.3-.5%206.1-1.4.2-.1.4-.2.5-.3L466%20385.6l.3-.1c8.2-4.5%2013.7-12.7%2013.7-22.1V179.6c0-6.4-5.7-11.5-12.7-11.5zM454.3%20118.5L272.6%2036.8S261.9%2032%20256%2032c-5.9%200-16.5%204.8-16.5%204.8L57.6%20118.5s-8%203.3-8%209.5c0%206.6%208.3%2011.5%208.3%2011.5l185.5%2097.8c3.8%201.7%208.1%202.6%2012.6%202.6%204.6%200%208.9-1%2012.7-2.7l185.4-97.9s7.5-4%207.5-11.5c.1-6.3-7.3-9.3-7.3-9.3zM227.5%20261.2L49.8%20169c-1.5-.6-3.3-1-5.1-1-7%200-12.7%205.1-12.7%2011.5v183.8c0%209.4%205.5%2017.6%2013.7%2022.1l.2.1%20174.7%2092.7c1.9%201.1%204.2%201.7%206.6%201.7%207%200%2012.7-5.2%2012.7-11.5V282.6c.1-8.9-4.9-16.8-12.4-21.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cube($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cube-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-cut-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M203.1%20158.3c5.2-11.2%208.1-23.5%208.1-36.7%200-49.5-40.1-89.6-89.6-89.6S32%2072.1%2032%20121.6s40.1%2089.6%2089.6%2089.6c13.2%200%2025.5-2.9%2036.7-8.1l52.9%2052.9-52.9%2052.9c-11.2-5.2-23.5-8.1-36.7-8.1-49.5%200-89.6%2040.1-89.6%2089.6S72.1%20480%20121.6%20480s89.6-40.1%2089.6-89.6c0-13.2-2.9-25.5-8.1-36.7l52.9-52.9%20156.8%20156.8H480v-22.4L203.1%20158.3zm-81.5%208.1c-24.6%200-44.8-19.9-44.8-44.8S97%2076.8%20121.6%2076.8s44.8%2019.9%2044.8%2044.8-20.2%2044.8-44.8%2044.8zm0%20268.8c-24.6%200-44.8-19.9-44.8-44.8s20.2-44.8%2044.8-44.8%2044.8%2019.9%2044.8%2044.8-20.2%2044.8-44.8%2044.8zm134.4-168c-6.3%200-11.2-4.9-11.2-11.2%200-6.3%204.9-11.2%2011.2-11.2%206.3%200%2011.2%204.9%2011.2%2011.2%200%206.3-4.9%2011.2-11.2%2011.2zM412.8%2054.4L278.4%20188.8l44.8%2044.8L480%2076.8V54.4h-67.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-cut($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-cut-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-desktop-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M437.333%2032H74.667C51.197%2032%2032%2051.197%2032%2074.666v282.667C32%20380.803%2051.198%20400%2074.667%20400h138.666l-42.666%2048v32h170.666v-32l-42.666-48h138.666c23.47%200%2042.667-19.198%2042.667-42.667V74.666C480%2051.196%20460.802%2032%20437.333%2032zm0%20288H74.667V74.666h362.666V320z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-desktop($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-desktop-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-disc-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.2%2048%2048%20141.2%2048%20256s93.2%20208%20208%20208%20208-93.2%20208-208S370.8%2048%20256%2048zm0%20301.6c-51.8%200-93.6-41.8-93.6-93.6s41.8-93.6%2093.6-93.6%2093.6%2041.8%2093.6%2093.6-41.8%2093.6-93.6%2093.6zm0-114.4c-11.4%200-20.8%209.4-20.8%2020.8s9.4%2020.8%2020.8%2020.8%2020.8-9.4%2020.8-20.8-9.4-20.8-20.8-20.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-disc($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-disc-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-document-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%2048H136c-22.092%200-40%2017.908-40%2040v336c0%2022.092%2017.908%2040%2040%2040h240c22.092%200%2040-17.908%2040-40V176L288%2048zm-16%20144V80l112%20112H272z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-document($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-document-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-done-all-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M387.58%20139.712L356.756%20109%20216.913%20248.32l30.83%2030.718%20139.838-139.326zM481.173%20109L247.744%20340.47l-91.39-91.052-30.827%2030.715L247.744%20403%20512%20139.712%20481.172%20109zM0%20280.133L123.32%20403l30.83-30.713-122.216-122.87L0%20280.134z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-done-all($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-done-all-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-download-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20199.5h-91.4V64H187.4v135.5H96l160%20158.1%20160-158.1zM96%20402.8V448h320v-45.2H96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-download($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-download-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-easel-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20176h256v128H128z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2096H64c-8.8%200-16%207.2-16%2016v256c0%208.8%206.9%2016%2015.8%2016H448c8.8%200%2016-7.2%2016-16V112c0-8.8-7.2-16-16-16zm-32%20240H96V144h320v192zM80%20464h57l22.5-64h-56.4zM279.4%2048h-46.8l-11.5%2032h69.8zM375%20464h57l-23-64h-56.5zM232%20400h48v32h-48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-easel($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-easel-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-egg-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032C185.6%2032%2080%20165.2%2080%20288.9S150.4%20480%20256%20480s176-67.4%20176-191.1S326.4%2032%20256%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-egg($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-egg-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-exit-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M215.47%20332.802l29.862%2029.864L352%20256%20245.332%20149.333l-29.863%2029.865%2055.468%2055.47H64v42.665h205.864l-54.395%2055.47zM405.333%2064H106.666C83.198%2064%2064%2083.198%2064%20106.666V192h42.666v-85.333h298.668v298.668H106.666V320H64v85.334C64%20428.802%2083.198%20448%20106.666%20448h298.668C428.802%20448%20448%20428.802%20448%20405.334V106.666C448%2083.198%20428.802%2064%20405.334%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-exit($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-exit-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-expand-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M396.795%20396.8H320V448h128V320h-51.205zM396.8%20115.205V192H448V64H320v51.205zM115.205%20115.2H192V64H64v128h51.205zM115.2%20396.795V320H64v128h128v-51.205z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-expand($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-expand-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-eye-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256.1%20144.8c56.2%200%20101.9%2045.3%20101.9%20101.1%200%2013.1-2.6%2025.5-7.3%2037l59.5%2059c30.8-25.5%2055-58.4%2069.9-96-35.3-88.7-122.3-151.6-224.2-151.6-28.5%200-55.8%205.1-81.1%2014.1l44%2043.7c11.6-4.6%2024.1-7.3%2037.3-7.3zM52.4%2089.7l46.5%2046.1%209.4%209.3c-33.9%2026-60.4%2060.8-76.3%20100.8%2035.2%2088.7%20122.2%20151.6%20224.1%20151.6%2031.6%200%2061.7-6.1%2089.2-17l8.6%208.5%2059.7%2059%2025.9-25.7L78.2%2064%2052.4%2089.7zM165%20201.4l31.6%2031.3c-1%204.2-1.6%208.7-1.6%2013.1%200%2033.5%2027.3%2060.6%2061.1%2060.6%204.5%200%209-.6%2013.2-1.6l31.6%2031.3c-13.6%206.7-28.7%2010.7-44.8%2010.7-56.2%200-101.9-45.3-101.9-101.1%200-15.8%204.1-30.7%2010.8-44.3zm87.8-15.7l64.2%2063.7.4-3.2c0-33.5-27.3-60.6-61.1-60.6l-3.5.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-eye-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-eye-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-eye-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20105c-101.8%200-188.4%2062.4-224%20151%2035.6%2088.6%20122.2%20151%20224%20151s188.4-62.4%20224-151c-35.6-88.6-122.2-151-224-151zm0%20251.7c-56%200-101.8-45.3-101.8-100.7S200%20155.3%20256%20155.3%20357.8%20200.6%20357.8%20256%20312%20356.7%20256%20356.7zm0-161.1c-33.6%200-61.1%2027.2-61.1%2060.4s27.5%2060.4%2061.1%2060.4%2061.1-27.2%2061.1-60.4-27.5-60.4-61.1-60.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-eye($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-eye-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-fastforward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20256L262.4%20110v292L480%20256zM32%20110v292l217.6-146L32%20110z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-fastforward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-fastforward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-female-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20176c0-79.5-64.5-144-144-144S112%2096.5%20112%20176c0%2071.4%2051.9%20130.6%20120%20142v50h-72v48h72v64h48v-64h72v-48h-72v-50c68.1-11.4%20120-70.6%20120-142zm-240%200c0-52.9%2043.1-96%2096-96s96%2043.1%2096%2096-43.1%2096-96%2096-96-43.1-96-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-female($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-female-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-filing-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M449.2%20208H423v-32l-14.4-48H383V96l-15-48H144l-15%2048v32h-25.6L89%20176v32H62.8L48%20256v165.3c0%2023.5%2035.2%2042.7%2058.7%2042.7h314.7c21.8%200%2042.7-19.7%2042.7-41V256l-14.9-48zM176%2096h160v32H176V96zm-41%2080h242v32H135v-32zm282%20112h-82.6c-7.4%2036.5-39.7%2064-78.4%2064s-71-27.5-78.4-64H95v-32h322v32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-filing($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-filing-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-film-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M376%2064v42.667h-40V64H176v42.667h-40V64H96v384h40v-42.666h40V448h160v-42.666h40V448h40V64h-40zM176%20362.667h-40V320h40v42.667zm0-85.333h-40v-42.667h40v42.667zM176%20192h-40v-42.666h40V192zm200%20170.667h-40V320h40v42.667zm0-85.333h-40v-42.667h40v42.667zM376%20192h-40v-42.666h40V192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-film($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-film-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-finger-print-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M78.1%20205.6c-2.4%200-4.9-.6-7.1-1.9-6.7-3.9-9-12.4-5.1-19.1%2017.8-30%2071.9-100.1%20190.1-100.1%2051.2%200%2096.1%2013.6%20133.4%2040.4%2030.7%2022%2047.9%2046.9%2056.1%2058.9%204.4%206.4%202.7%2015-3.7%2019.4-6.4%204.3-15.2%202.7-19.6-3.7-14.9-21.6-60.1-87.2-166.2-87.2-103.6%200-150.4%2060.4-165.7%2086.3-2.6%204.6-7.3%207-12.2%207z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M315.5%20480c-1.2%200-2.3-.1-3.5-.4-85.7-21.5-117.7-108.1-119-111.7l-.2-.8c-.7-2.5-17.9-61.9%208.5-96.7%2012.1-15.9%2030.5-24%2054.8-24%2022.6%200%2038.9%207.1%2050.1%2021.8%209.2%2012%2012.9%2026.8%2016.5%2041.1%207.5%2029.7%2012.9%2045.3%2044.1%2046.9%2013.7.7%2022.7-7.4%2027.8-14.3%2013.8-18.8%2016.2-49.5%205.8-76.5-13.4-35-60.8-100.9-144.4-100.9-35.7%200-68.5%2011.6-94.8%2033.4-21.8%2018.1-39.1%2043.6-47.4%2069.8-15.4%2048.8%204.8%20125.5%205%20126.2%202%207.4-2.5%2015.1-10%2017-7.5%202-15.3-2.5-17.3-9.9-.9-3.5-22.5-85.3-4.7-141.7C106.2%20198.2%20166%20136.6%20256%20136.6c41.6%200%2080.9%2014.3%20113.7%2041.3%2025.4%2021%2046.2%2049.2%2057%2077.4%2013.8%2036%2010.1%2076.4-9.4%20102.8-13%2017.6-31.5%2026.8-52%2025.8-53.4-2.7-63-40.4-70-67.9-7.2-28.2-11.8-41.8-39.3-41.8-15.1%200-25.7%204.2-32.3%2012.9-9%2011.9-9.7%2030.5-8.7%2044%201%2014.1%204%2025.5%204.7%2027.8%202.2%205.6%2030.8%2076.5%2099.3%2093.7%207.6%201.9%2012.1%209.5%2010.2%2016.9-1.7%206.3-7.4%2010.5-13.7%2010.5z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M205.5%20473.6c-3.8%200-7.5-1.5-10.3-4.4-34.3-36.4-53.7-77.1-61-128v-.3c-4.1-33.7%201.9-81.4%2031.3-114.2%2021.7-24.2%2052.2-36.5%2090.5-36.5%2045.3%200%2080.9%2021.3%20103.1%2061.5%2016.1%2029.2%2019.3%2058.3%2019.4%2059.5.8%207.7-4.9%2014.5-12.6%2015.3-7.7.8-14.7-4.8-15.5-12.4%200-.3-2.8-25.3-16.5-49.7-17.2-30.7-43.4-46.3-78-46.3-29.9%200-53.3%209.1-69.4%2027.1-23.2%2025.9-27.7%2065.8-24.5%2092.2%206.4%2045%2023.5%2080.8%2053.7%20112.8%205.3%205.6%205%2014.5-.7%2019.7-2.6%202.4-6.1%203.7-9.5%203.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M363.5%20433.5c-30%200-55.5-8.4-75.9-25.1-41-33.4-45.6-87.8-45.8-90.1-.6-7.7%205.2-14.4%2013-15%207.8-.6%2014.5%205.1%2015.1%2012.8.1.8%204.2%2045.3%2035.8%2070.9%2018.7%2015.1%2043.7%2021.1%2074.5%2017.6%207.7-.9%2014.7%204.6%2015.6%2012.3.9%207.7-4.7%2014.6-12.4%2015.4-6.8.8-13.5%201.2-19.9%201.2zM387.2%2062.6C375.5%2054.9%20334%2032%20256%2032c-81.9%200-123.5%2025.3-132.7%2031.7-.6.4-1.2.8-1.7%201.3-.1.1-.2.1-.2.1-2.9%202.6-4.7%206.3-4.7%2010.4%200%207.7%206.3%2013.9%2014.1%2013.9%203.1%200%205.9-1%208.2-2.6l-.1.1c.4-.3%2036.3-27%20117.1-27s116.7%2026.8%20117.1%2027l-.1-.1.2-.2c2.4%201.8%205.3%202.8%208.5%202.8%207.8%200%2014.1-6.2%2014.1-13.9%200-5.8-3.5-10.8-8.6-12.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-finger-print($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-finger-print-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-flag-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M396%2083.2c-13.8%201.7-31.1%204.2-49.6%204.2-28.8%200-55-6.8-81.5-12.2C238%2069.7%20210.2%2064%20180.8%2064c-58.6%200-78.5%2012.1-80.6%2013.4L96%2080.3V448h48V269.8c9.7-1.2%2021.9-2%2036.9-2%2027.3%200%2052.8%2010%2079.8%2015.5%2027.6%205.6%2056%2011.5%2086.9%2011.5%2018.4%200%2034.6-2.4%2048.4-4%207.5-.9%2014-1.7%2020-2.7V80.2c-5%201-12.5%202.1-20%203z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-flag($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-flag-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-flame-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M393.3%20222.1l-.2%2010.4c-.8%2011.7-7.9%2043.4-22.1%2054.7%207-15.2%2017.3-47.2%2010.2-82.7C361.6%20107%20287.5%2065.6%20193%2050l-17.2-2.2c39.5%2047.2%2056.1%2081.7%2049.7%20116.8-2.3%2012.6-10%2023.4-14%2031.6%200%200%202.4-12.9%202-28.7-.3-14.2-6.6-31-18-39.6%203.5%2018.4-.8%2033.5-9.1%2047.7-24.7%2042.2-85.4%2057.8-90.4%20135.8v3.8c0%2053.7%2025.6%2099%2068.7%20125-6.8-12.3-12-35.2-5.7-60.2%204%2023.7%2014%2036%2024.9%2051.8%208.2%2011.7%2019.1%2019.3%2033.1%2024.9s31%207.2%2047.9%207.2c55.8%200%2091.4-18.1%20119.1-50.5s32.1-68%2032.1-106.4-8.5-60.9-22.8-84.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-flame($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-flame-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-flash-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%2048v224h64v192l128-256h-64l64-160H160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-flash($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-flash-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-flask-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M436.9%20354.4L336%20192V96h32V48H144v48h32v96L76.1%20354.4C67.7%20370.3%2063.6%20385.8%2064%20400c1.1%2036.5%2028.7%2064%2065.1%2064H385c36.3%200%2062.1-27.6%2063-64%20.3-14.2-2.6-29.7-11.1-45.6zM155.1%20304l29.5-48h143.1l29.8%2048H155.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-flask($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-flask-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-flower-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.1%20256c25.2-11.9%2042.9-37.1%2042.9-66.9%200-41-33.6-74.3-75-74.3-15.9%200-30.3%204.8-42.6%2013.1l.6-5.6c0-41-33.6-74.3-75-74.3s-75%2033.3-75%2074.3l.6%205.6c-12-8.3-26.7-13.1-42.6-13.1-41.4%200-75%2033.3-75%2074.3%200%2029.7%2017.7%2055%2042.9%2066.9C81.7%20267.9%2064%20293.1%2064%20322.9c0%2041%2033.6%2074.3%2075%2074.3%2015.9%200%2030.3-4.8%2042.6-13.1l-.6%205.6c0%2041%2033.6%2074.3%2075%2074.3s75-33.3%2075-74.3l-.6-5.6c12%208.3%2026.7%2013.1%2042.6%2013.1%2041.4%200%2075-33.3%2075-74.3%200-29.8-17.7-55-42.9-66.9zM256%20330.3c-41.4%200-75-33.3-75-74.3s33.6-74.3%2075-74.3%2075%2033.3%2075%2074.3-33.6%2074.3-75%2074.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-flower($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-flower-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-folder-open-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M437.334%20144H256.006l-42.668-48H74.666C51.196%2096%2032%20115.198%2032%20138.667v234.666C32%20396.803%2051.197%20416%2074.666%20416h362.668c23.47%200%2042.666-19.198%2042.666-42.667V186.667c0-23.47-19.197-42.667-42.666-42.667zM448%20373.333c0%205.782-4.885%2010.667-10.666%2010.667H74.666C68.884%20384%2064%20379.115%2064%20373.333V176h373.334c5.78%200%2010.666%204.885%2010.666%2010.667v186.666z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-folder-open($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-folder-open-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-folder-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M213.338%2096H74.666C51.196%2096%2032%20115.198%2032%20138.667v234.666C32%20396.803%2051.197%20416%2074.666%20416h362.668c23.47%200%2042.666-19.198%2042.666-42.667V186.667c0-23.47-19.197-42.667-42.666-42.667H256.006l-42.668-48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-folder($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-folder-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-football-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.3%2048%2048%20141.3%2048%20256s93.3%20208%20208%20208%20208-93.3%20208-208S370.7%2048%20256%2048zM127%20238.2l39.2%2017.9%2017.1%2066.9-15.6%2029.3-57.2-.7C95.6%20329%2086.2%20303.1%2083%20276.3l44-38.1zm217.3%20114.1L328.7%20323l17.1-67%2039.1-17.8%2044%2038.1c-3.1%2026.8-12.6%2052.7-27.5%2075.3l-57.1.7zm32.4-146.2l-43.6%2019.6-61.1-51.6v-47.2l47.9-32.6c29.8%2011.9%2056.4%2032.3%2075.6%2057.8l-18.8%2054zM191.3%2094.4l47.7%2032.5v47.2l-61%2051.5-43-19.6-18.7-53.6c19.3-26.1%2045.1-46%2075-58zM218.4%20426c-.7-.2-1.3-.3-2-.5l-20.5-55.1%2014.7-29.4h90.8l15%2030.3-19.8%2053.9c-1%20.2-2%20.5-3%20.7-11.5%202.3-27%203.8-40.4%204.1-11.7-.1-23.4-1.5-34.8-4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-football($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-football-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-funnel-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M208%20400h96v-47.994h-96V400zM32%20112v47.994h448V112H32zm80%20168.783h288v-49.555H112v49.555z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-funnel($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-funnel-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-game-controller-a-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M156%20215h-24v31h-31v24h31v30h24v-30h30v-24h-30z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M369.3%20144H142.7C81.5%20144%2032%20190.5%2032%20255.4c0%2065%2049.5%20112.6%20110.7%20112.6h226.5c61.2%200%20110.7-47.6%20110.7-112.6.1-64.9-49.4-111.4-110.6-111.4zM144.2%20316.5c-33.1%200-60-27.1-60-60.5s26.9-60.5%2060-60.5%2060%2027.1%2060%2060.5-26.8%2060.5-60%2060.5zm203.1-47.4c-7.2%207.2-19%207.2-26.2%200-7.2-7.2-7.2-19%200-26.2%207.2-7.2%2019-7.2%2026.2%200%207.2%207.2%207.2%2019%200%2026.2zm37.5%2037.5c-7.2%207.2-19%207.2-26.2%200-7.2-7.2-7.2-19%200-26.2%207.2-7.2%2019-7.2%2026.2%200s7.3%2019%200%2026.2zm0-75c-7.2%207.2-19%207.2-26.2%200-7.2-7.2-7.2-19%200-26.2%207.2-7.2%2019-7.2%2026.2%200s7.3%2019%200%2026.2zm37.6%2037.5c-7.2%207.2-19%207.2-26.2%200s-7.2-19%200-26.2c7.2-7.2%2019-7.2%2026.2%200%207.2%207.2%207.2%2019%200%2026.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-game-controller-a($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-game-controller-a-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-game-controller-b-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M163%20160h-24v31h-31v24h31v30h24v-30h30v-24h-30z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M467.1%20204.1C461.9%20141%20419.4%2096%20360%2096H152C92.6%2096%2050.2%20141%2045%20204.1c0%200-13%20134.7-13%20163.9s21.5%2048%2048%2048c13.1%200%2025-5.3%2034-13.9h-.3L192%20321h128l78.3%2081-.3.1c9%208.6%2020.9%2013.9%2034%2013.9%2026.5%200%2048-20.3%2048-48s-12.9-163.9-12.9-163.9zM151%20262c-33.1%200-60-27.1-60-60.5s26.9-60.5%2060-60.5%2060%2027.1%2060%2060.5-26.9%2060.5-60%2060.5zm187.1-47.4c-7.2%207.2-19%207.2-26.2%200s-7.2-19%200-26.2c7.2-7.2%2019-7.2%2026.2%200%207.2%207.2%207.2%2019%200%2026.2zm37.5%2037.5c-7.2%207.2-19%207.2-26.2%200-7.2-7.2-7.2-19%200-26.2%207.2-7.2%2019-7.2%2026.2%200%207.2%207.2%207.2%2019%200%2026.2zm0-75c-7.2%207.2-19%207.2-26.2%200-7.2-7.2-7.2-19%200-26.2%207.2-7.2%2019-7.2%2026.2%200%207.2%207.2%207.2%2019%200%2026.2zm37.5%2037.5c-7.2%207.2-19%207.2-26.2%200-7.2-7.2-7.2-19%200-26.2%207.2-7.2%2019-7.2%2026.2%200%207.2%207.2%207.2%2019%200%2026.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-game-controller-b($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-game-controller-b-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-git-branch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20160c0-35.3-28.7-64-64-64s-64%2028.7-64%2064c0%2023.7%2012.9%2044.3%2032%2055.4v8.6c0%2019.9-7.8%2033.7-25.3%2044.9-15.4%209.8-38.1%2017.1-67.5%2021.5-14%202.1-25.7%206-35.2%2010.7V151.4c19.1-11.1%2032-31.7%2032-55.4%200-35.3-28.7-64-64-64S96%2060.7%2096%2096c0%2023.7%2012.9%2044.3%2032%2055.4v209.2c-19.1%2011.1-32%2031.7-32%2055.4%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-16.6-6.3-31.7-16.7-43.1%201.9-4.9%209.7-16.3%2029.4-19.3%2038.8-5.8%2068.9-15.9%2092.3-30.8%2036-22.8%2055-57%2055-98.8v-8.6c19.1-11.1%2032-31.7%2032-55.4zM160%2056c22.1%200%2040%2017.9%2040%2040s-17.9%2040-40%2040-40-17.9-40-40%2017.9-40%2040-40zm0%20400c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040zm192-256c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-git-branch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-git-branch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-git-commit-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20224h-99.8c-14.2-55.2-64.2-96-123.7-96S147%20168.8%20132.8%20224H32v64h100.8c14.2%2055.2%2064.2%2096%20123.7%2096s109.5-40.8%20123.7-96H480v-64zM256.5%20336c-44%200-79.8-35.9-79.8-80s35.8-80%2079.8-80%2079.8%2035.9%2079.8%2080-35.8%2080-79.8%2080z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-git-commit($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-git-commit-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-git-compare-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20382h-22c-24.6%200-29-3.6-33.8-9.6-5.5-6.9-8.2-19.1-8.2-54.2V151.4c19.1-11.1%2032-31.7%2032-55.4%200-35.3-28.7-64-64-64S32%2060.7%2032%2096c0%2023.7%2012.9%2044.3%2032%2055.4v166.8c0%2046.4%203.7%2070.8%2022.1%2094%2019.9%2025.1%2045%2035.8%2083.9%2035.8h22v64l96-96-96-96v62zM96%2056c22.1%200%2040%2017.9%2040%2040s-17.9%2040-40%2040-40-17.9-40-40%2017.9-40%2040-40zM448%20360.6V190.8c0-46.4-3.7-70.8-22.1-94C406%2071.7%20380.9%2062%20342%2062h-22V0l-96%2096%2096%2096v-64h22c24.6%200%2029%202.6%2033.8%208.6%205.5%206.9%208.2%2019.1%208.2%2054.2v169.8c-19.1%2011.1-32%2031.7-32%2055.4%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-23.7-12.9-44.3-32-55.4zM416%20456c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-git-compare($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-git-compare-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-git-merge-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20224c-23.7%200-44.4%2012.9-55.4%2032-18.3-.5-52.4-4.1-75.5-18.1-32.3-19.4-64.6-53.1-87-90.5%2015.7-11.7%2026-30.3%2026-51.4%200-35.3-28.7-64-64-64S64%2060.7%2064%2096c0%2023.7%2012.9%2044.3%2032%2055.4v209.2c-19.1%2011.1-32%2031.7-32%2055.4%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-23.7-12.9-44.3-32-55.4V244.2c18.7%2019.4%2039.1%2036%2060%2048.6%2038.8%2023.4%2087%2026.9%20108.6%2027.3%2011.1%2019.1%2031.7%2031.9%2055.4%2031.9%2035.3%200%2064-28.7%2064-64s-28.7-64-64-64zM88%2096c0-22.1%2017.9-40%2040-40s40%2017.9%2040%2040-17.9%2040-40%2040-40-17.9-40-40zm80%20320c0%2022.1-17.9%2040-40%2040s-40-17.9-40-40%2017.9-40%2040-40%2040%2017.9%2040%2040zm216-88c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-git-merge($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-git-merge-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-git-network-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%2096c0-35.3-28.7-64-64-64s-64%2028.7-64%2064c0%2023.6%2012.9%2044.3%2032%2055.4v52.8l-96%2048-96-48v-52.8c19.1-11.1%2032-31.8%2032-55.4%200-35.3-28.7-64-64-64S64%2060.7%2064%2096c0%2023.6%2012.9%2044.3%2032%2055.4v92.4l128%2064v52.8c-19.1%2011.1-32%2031.8-32%2055.4%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-23.6-12.9-44.3-32-55.4v-52.8l128-64v-92.4c19.1-11.1%2032-31.8%2032-55.4zM128%2056c22.1%200%2040%2017.9%2040%2040s-17.9%2040-40%2040-40-17.9-40-40%2017.9-40%2040-40zm128%20400c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040zm128-320c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-git-network($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-git-network-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-git-pull-request-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20376.6V206.8c0-46.4-3.7-70.8-22.1-94C374%2087.7%20348.9%2077%20310%2077h-22V16l-96%2096%2096%2096v-65h22c24.6%200%2029%203.6%2033.8%209.6%205.5%206.9%208.2%2019.1%208.2%2054.2v169.8c-19.1%2011.1-32%2031.7-32%2055.4%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-23.7-12.9-44.3-32-55.4zM384%20472c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040zM128%2048c-35.3%200-64%2028.7-64%2064%200%2023.7%2012.9%2044.3%2032%2055.4v209.2c-19.1%2011.1-32%2031.7-32%2055.4%200%2035.3%2028.7%2064%2064%2064s64-28.7%2064-64c0-23.7-12.9-44.3-32-55.4V167.4c19.1-11.1%2032-31.7%2032-55.4%200-35.3-28.7-64-64-64zm0%20424c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040zm0-320c-22.1%200-40-17.9-40-40s17.9-40%2040-40%2040%2017.9%2040%2040-17.9%2040-40%2040z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-git-pull-request($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-git-pull-request-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-glasses-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20176H272v.1h-32v-.1H32v48h11l5%2021.5C64%20313%2088.5%20336%20144%20336s96-17.4%2096-90.5V224s1.5-16%2016-16%2016%2016%2016%2016v21.8c0%2073%2042.1%2090.2%2097%2090.2s79-25%2095-90.2l5-21.8h11v-48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-glasses($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-glasses-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-globe-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.124%2048%2048%20141.125%2048%20256s93.124%20208%20208%20208c114.875%200%20208-93.125%20208-208S370.875%2048%20256%2048zm-21.55%20385c-39.463-4.727-75.977-22.393-104.518-50.933C96.258%20348.393%2077.714%20303.622%2077.714%20256c0-42.87%2015.036-83.424%2042.6-115.66.71%208.518%202.464%2017.65%202.015%2024.176-1.64%2023.795-3.99%2038.687%209.94%2058.762%205.425%207.82%206.758%2019.028%209.4%2028.078%202.582%208.854%2012.9%2013.498%2020.018%2018.953%2014.36%2011.008%2028.096%2023.804%2043.322%2033.493%2010.05%206.395%2016.326%209.576%2013.383%2021.84-2.367%209.86-3.028%2015.936-8.13%2024.722-1.557%202.68%205.877%2019.918%208.35%2022.392%207.5%207.497%2014.94%2014.375%2023.112%2021.125%2012.67%2010.47-1.23%2024.072-7.274%2039.117zm147.617-50.933c-25.633%2025.633-57.7%2042.486-92.556%2049.08%204.94-12.215%2013.737-23.07%2021.896-29.36%207.097-5.477%2015.986-16.01%2019.693-24.353%203.703-8.332%208.61-15.555%2013.576-23.217%207.065-10.9-17.42-27.336-25.353-30.78-17.854-7.752-31.294-18.21-47.16-29.376-11.306-7.953-34.258%204.155-47.02-1.416-17.482-7.633-31.884-20.896-47.08-32.34-15.68-11.808-14.92-25.575-14.92-42.996%2012.28.453%2029.753-3.4%2037.907%206.478%202.573%203.117%2011.42%2017.042%2017.342%2012.094%204.838-4.043-3.585-20.25-5.212-24.06-5.005-11.714%2011.404-16.283%2019.803-24.227%2010.96-10.364%2034.47-26.618%2032.612-34.047s-23.524-28.477-36.25-25.193c-1.906.492-18.696%2018.097-21.94%2020.86.086-5.747.172-11.492.26-17.238.055-3.628-6.768-7.352-6.45-9.692.8-5.914%2017.26-16.647%2021.356-21.357-2.868-1.793-12.658-10.202-15.62-8.968-7.175%202.99-15.277%205.05-22.45%208.04%200-2.49-.303-4.826-.663-7.134a176.585%20176.585%200%200%201%2045.31-13.152l14.084%205.66%209.945%2011.8%209.924%2010.234%208.674%202.795%2013.78-12.994L282%2087.93v-8.34c27.25%203.958%2052.984%2014.124%2075.522%2029.8-4.032.36-8.463.954-13.462%201.59-2.065-1.22-4.714-1.774-6.965-2.623%206.53%2014.042%2013.343%2027.89%2020.264%2041.746%207.392%2014.8%2023.792%2030.677%2026.672%2046.3%203.394%2018.417%201.04%2035.145%202.896%2056.812%201.788%2020.865%2023.524%2044.572%2023.524%2044.572s10.037%203.42%2018.384%202.228c-7.78%2030.783-23.733%2059.014-46.77%2082.052z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-globe($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-globe-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-grid-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M409.6%2064H102.4C81.3%2064%2064%2081.3%2064%20102.4v307.2c0%2021.1%2017.3%2038.4%2038.4%2038.4h307.2c21.1%200%2038.4-17.3%2038.4-38.4V102.4c0-21.1-17.3-38.4-38.4-38.4zM179.2%20409.6h-76.8v-76.8h76.8v76.8zm0-115.2h-76.8v-76.8h76.8v76.8zm0-115.2h-76.8v-76.8h76.8v76.8zm115.2%20230.4h-76.8v-76.8h76.8v76.8zm0-115.2h-76.8v-76.8h76.8v76.8zm0-115.2h-76.8v-76.8h76.8v76.8zm115.2%20230.4h-76.8v-76.8h76.8v76.8zm0-115.2h-76.8v-76.8h76.8v76.8zm0-115.2h-76.8v-76.8h76.8v76.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-grid($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-grid-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-hammer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M474.1%20398.2L229.8%20167.8s8.8-57.7%2026.2-71.8c17.5-14.2%2048-32%2048-32V32c-32%200-58.8%208.3-96.9%2027.3-38%2018.9-66.8%2047.8-74.4%2055.4-7.6%207.6-18.1%2019.5-24.7%2028.9s-5.3%2020.1-5.3%2020.1l-19.7%2017-4-4c-2.3-2.3-6.2-2.3-8.5%200l-36.8%2036.8c-2.3%202.3-2.3%206.2%200%208.5l59.4%2059.4c2.3%202.3%206.2%202.3%208.5%200l36.8-36.8c2.3-2.3%202.3-6.2%200-8.5l-10.3-10.3%2014.6-14.3c6.8-3.7%2025.4-8.9%2039.1-5.1l214.9%20267.3c8.1%208.2%2020.3%208.2%2028.5%200l46.8-47.1c10.3-8%2010.3-22.3%202.1-28.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-hammer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-hammer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-hand-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M450.68%20273.5c-14.586-14.577-36.055-15.89-50.64-1.312l-41.687%2041.664c-10.852%2010.836-23.93%2010.86-31.564%201.852-5.058-5.968-3.062-24.374-1.645-36.05l20.907-171.848c1.867-15.353-9.07-30.185-24.43-32.05-15.358-1.868-29.322%209.938-31.19%2025.288L267.37%20236.02c-1.205%203.36-3.79%203.94-4.08-.58L255.44%2060c0-15.465-12.542-28-28.014-28-15.473%200-28.015%2012.535-28.015%2028l-.55%20176.752c.145%202.04-1.605%202.624-1.92.294l-24.924-137.97c-2.75-15.218-17.323-26.202-32.548-23.452-15.227%202.748-25.34%2018.187-22.59%2033.403l22.192%20161.455c.023%202.872-.94%204.513-2.308.83l-33.11-88.516c-5.18-14.572-21.195-23.065-35.775-17.89-14.58%205.178-22.2%2022.062-17.023%2036.632l58.042%20189.625c.303%201.046.624%202.085.953%203.118l.12.39c.01.032.025.06.035.09C126.08%20444.232%20172.57%20480%20227.427%20480c35.116%200%2071.59-12.378%2099.357-33.672l.003-.002c29.99-18.05%20126.07-121.347%20126.07-121.347%2014.588-14.578%2012.41-36.9-2.178-51.48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-hand($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-hand-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-happy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C140.563%2048%2048%20141.6%2048%20256s92.563%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm0%20374.4c-91.518%200-166.404-74.883-166.404-166.4%200-91.518%2074.887-166.4%20166.404-166.4S422.404%20164.482%20422.404%20256%20347.518%20422.4%20256%20422.4zm72.8-187.2c17.683%200%2031.2-13.518%2031.2-31.2s-13.518-31.2-31.2-31.2-31.2%2013.518-31.2%2031.2%2013.518%2031.2%2031.2%2031.2zm-145.6%200c17.682%200%2031.2-13.518%2031.2-31.2s-13.52-31.2-31.2-31.2c-17.683%200-31.2%2013.518-31.2%2031.2s13.518%2031.2%2031.2%2031.2zM256%20370.4c48.883%200%2089.436-30.164%20106.08-72.8H149.92c16.644%2042.636%2057.197%2072.8%20106.08%2072.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-happy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-happy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-headset-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C150%2048%2064%20136.2%2064%20245.1v153.3c0%2036.3%2028.6%2065.7%2064%2065.7h64V288h-85.3v-42.9c0-84.7%2066.8-153.3%20149.3-153.3s149.3%2068.5%20149.3%20153.3V288H320v176h64c35.4%200%2064-29.3%2064-65.7V245.1C448%20136.2%20362%2048%20256%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-headset($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-headset-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-heart-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M349.6%2064c-36.4%200-70.718%2016.742-93.6%2043.947C233.117%2080.742%20198.8%2064%20162.4%2064%2097.918%2064%2048%20114.22%2048%20179.095c0%2079.516%2070.718%20143.348%20177.836%20241.694L256%20448l30.164-27.21C393.28%20322.44%20464%20258.61%20464%20179.094%20464%20114.22%20414.082%2064%20349.6%2064zm-80.764%20329.257l-4.22%203.873-8.616%207.773-8.616-7.772-4.214-3.868c-50.418-46.282-93.96-86.254-122.746-121.994C92.467%20236.555%2080%20208.128%2080%20179.095c0-22.865%208.422-43.93%2023.715-59.316C118.957%20104.444%20139.798%2096%20162.4%2096c26.134%200%2051.97%2012.167%2069.11%2032.545L256%20157.66l24.49-29.115C297.63%20108.167%20323.464%2096%20349.6%2096c22.603%200%2043.443%208.445%2058.686%2023.778C423.578%20135.164%20432%20156.228%20432%20179.095c0%2029.033-12.467%2057.46-40.422%2092.17-28.784%2035.74-72.325%2075.71-122.742%20121.992z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-heart-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-heart-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-heart-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20448l-30.164-27.21C118.718%20322.44%2048%20258.61%2048%20179.094%2048%20114.22%2097.918%2064%20162.4%2064c36.4%200%2070.717%2016.742%2093.6%2043.947C278.882%2080.742%20313.2%2064%20349.6%2064%20414.082%2064%20464%20114.22%20464%20179.095c0%2079.516-70.72%20143.348-177.836%20241.694L256%20448z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-heart($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-heart-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-help-buoy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208S370.9%2048%20256%2048zm61%20356l-12.2-39.6c13-5.8%2024.9-14%2035.3-24.4%2010.4-10.4%2018.6-22.3%2024.4-35.3l39.5%2012.1c-7.9%2019.3-19.7%2037-34.9%2052.2-15.1%2015.3-32.8%2027.1-52.1%2035zM195%20108l12.2%2039.6c-13%205.8-24.9%2014-35.3%2024.4-10.4%2010.4-18.6%2022.3-24.4%2035.3L108%20195.2c7.9-19.3%2019.7-37%2034.9-52.2%2015.1-15.3%2032.8-27.1%2052.1-35zm61%2084c35.3%200%2064%2028.7%2064%2064s-28.7%2064-64%2064-64-28.7-64-64%2028.7-64%2064-64zm113.1-49.1c15.2%2015.2%2026.9%2032.9%2034.9%2052.1l-39.5%2012.2c-5.9-13-14-24.9-24.4-35.3-10.4-10.4-22.3-18.6-35.3-24.4l12.1-39.5c19.3%207.9%2037%2019.7%2052.2%2034.9zM142.9%20369.1c-15.2-15.1-27-32.8-34.9-52.1l39.5-12.2c5.9%2013%2014%2024.9%2024.4%2035.3%2010.4%2010.4%2022.3%2018.6%2035.3%2024.4L195.1%20404c-19.3-7.9-37-19.7-52.2-34.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-help-buoy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-help-buoy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-help-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.2%2048%2048%20141.2%2048%20256s93.2%20208%20208%20208%20208-93.2%20208-208S370.8%2048%20256%2048zm21%20333h-42v-42h42v42zm-.2-63h-41.6c0-67%2062.4-62.2%2062.4-103.8%200-22.9-18.7-41.7-41.6-41.7S214.4%20192%20214.4%20214h-41.6c0-46%2037.2-83%2083.2-83s83.2%2037.1%2083.2%2083.1c0%2052-62.4%2057.9-62.4%20103.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-help-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-help-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-help-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M289%20448h-66v-65h66v65zm-1-98h-64c0-101%2096-95.1%2096-159%200-35.2-28.8-63.4-64-63.4S192%20158%20192%20192h-64c0-71%2057.3-128%20128-128s128%2056.4%20128%20127c0%2079.9-96%2089-96%20159z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-help($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-help-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-home-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M208%20448V320h96v128h97.6V256H464L256%2064%2048%20256h62.4v192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-home($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-home-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-ice-cream-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128.1%20256l128%20224%20128-224zM392%20161c3-9%204.7-22.7%204.7-32.9%200-53.1-43-96.1-96.1-96.1-31.4%200-59.2%2015-76.8%2038.3%200%200-9.1%2014-10.8%2029l-3.4-1c-2.3-9-3.7-20%201.6-31.5-7.4-2.5-9.4-2.8-17.6-2.8-41.7%200-75.6%2033.8-75.6%2075.6%200%206.3.8%2015.5%202.3%2021.4-13.9%203.5-24.3%2016.1-24.3%2031%200%2017.6%2014.4%2032%2032%2032h256c17.6%200%2032-14.4%2032-32%200-14.8-10.2-27.4-24-31z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-ice-cream($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-ice-cream-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-image-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20405.333V106.667C448%2083.197%20428.802%2064%20405.333%2064H106.667C83.197%2064%2064%2083.198%2064%20106.667v298.666C64%20428.803%2083.198%20448%20106.667%20448h298.666c23.47%200%2042.667-19.198%2042.667-42.667zM181.333%20288l53.334%2064%2074.666-96%2096%20128H106.667l74.666-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-image($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-image-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-images-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M457.6%20140.2l-82.5-4-4.8-53.8c-1-11.3-11.1-19.2-22.9-18.3L51.5%2088.4c-11.8%201-20.3%2010.5-19.4%2021.7l21.2%20235.8c1%2011.3%2011.2%2019.2%2022.9%2018.3l15-1.2-2.4%2045.8c-.6%2012.6%209.2%2022.8%2022.4%2023.5L441.3%20448c13.2.6%2024.1-8.6%2024.8-21.2L480%20163.5c.6-12.5-9.3-22.7-22.4-23.3zm-354.9%205.3l-7.1%20134.8L78.1%20305%2062%20127v-.5-.5c1-5%204.4-9%209.6-9.4l261-21.4c5.2-.4%209.7%203%2010.5%207.9%200%20.2.3.2.3.4%200%20.1.3.2.3.4l2.7%2030.8-219-10.5c-13.2-.4-24.1%208.8-24.7%2021.3zm334%20236.9l-84.8-99.5-37.4%2034.3-69.2-80.8-122.7%20130.7L133%20168v-.4c1-5.4%206.2-9.3%2011.9-9l291.2%2014c5.8.3%2010.3%204.7%2010.4%2010.2%200%20.2.3.3.3.5l-10.1%20199.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20256c17.6%200%2032-14.4%2032-32s-14.3-32-32-32c-17.6%200-32%2014.3-32%2032s14.3%2032%2032%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-images($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-images-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-infinite-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M434.7%20188c-18.8-18-43.8-28-70.5-28-26.6%200-51.6%209.9-70.4%2027.9l-17.6%2015.9%2033.1%2032.1%2017-15.4.1-.1c10.1-9.6%2023.5-15%2037.7-15%2014.2%200%2027.6%205.3%2037.7%2014.9%2010%209.6%2015.4%2022.3%2015.4%2035.8%200%2013.5-5.5%2026.1-15.4%2035.6-10.1%209.6-23.5%2015-37.7%2015s-27.6-5.3-37.7-14.9L218.2%20188c-18.9-18-43.9-28-70.4-28-26.7%200-51.7%209.9-70.5%2028C58.4%20206.1%2048%20230.2%2048%20256c0%2025.7%2010.4%2049.9%2029.3%2068%2018.8%2018%2043.8%2028%2070.5%2028%2026.7%200%2051.7-9.9%2070.4-28l37.8-36.1%2037.7%2036.1c18.9%2018%2043.9%2028%2070.4%2028%2026.7%200%2051.7-9.9%2070.4-27.9%2019-18.1%2029.4-42.2%2029.4-68%20.1-25.8-10.3-50-29.2-68.1zM185.5%20291.7c-10.1%209.6-23.5%2015-37.7%2015-14.2%200-27.6-5.3-37.7-14.9-10-9.6-15.4-22.3-15.4-35.8%200-13.5%205.5-26.1%2015.4-35.6%2010.1-9.6%2023.5-15%2037.7-15%2014.2%200%2027.6%205.3%2037.7%2014.9l37.4%2035.8-37.4%2035.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-infinite($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-infinite-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-information-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.2%2048%2048%20141.2%2048%20256s93.2%20208%20208%20208%20208-93.2%20208-208S370.8%2048%20256%2048zm21%20312h-42V235h42v125zm0-166h-42v-42h42v42z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-information-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-information-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-information-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M232%20235h48v137h-48zM232%20140h48v48h-48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-information($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-information-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-ionic-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20164.3c-50.6%200-91.7%2041.1-91.7%2091.7s41.1%2091.7%2091.7%2091.7%2091.7-41.1%2091.7-91.7-41.1-91.7-91.7-91.7z%22%2F%3E%3Ccircle%20cx%3D%22394%22%20cy%3D%22124.6%22%20r%3D%2243.8%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M445.3%20169.8c-7.4%208.4-16.9%2015-27.6%2019%208.6%2020.7%2013.4%2043.4%2013.4%2067.2%200%2096.6-78.6%20175.2-175.2%20175.2S80.7%20352.6%2080.7%20256%20159.3%2080.8%20255.9%2080.8c26.9%200%2052.3%206.1%2075.1%2016.9%204.5-10.5%2011.5-19.6%2020.3-26.6C322.8%2056.4%20290.4%2048%20256%2048%20141.1%2048%2048%20141.1%2048%20256s93.1%20208%20208%20208%20208-93.1%20208-208c0-30.7-6.7-59.9-18.7-86.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-ionic($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-ionic-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-ionitron-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M478.7%20269.8C474%20236.4%20460%20208%20443%20210c6.8%2015.3%2012.1%2036.8%2010.3%2075.3-1.5-27-6.6-52.4-18-75.3C401.6%20142.5%20329.6%2097.8%20249%20102.3c-90.2%205-162.7%2069.7-180.6%20153.3l-12%201.7c-18.1%202.5-28.3%2036.4-22.8%2075.7%205.5%2039.3%2024.7%2069.2%2042.8%2066.7l16.6-2.3c36.4%2058.8%20103.4%2096.5%20177.8%2092.4%2089.6-4.9%20161.7-68.9%20180.2-151.7l7.7-.5c15.9-2.6%2024.9-32.8%2020-67.8zm-397.1-5.4c7.1%205.6%2026.5%2018.5%2031.4%2057.6%204.9%2039.1-8.9%2058.9-15%2067.1%206.3-15.5%206.5-39%203-64.7-3.4-25-9.5-46.7-19.4-60zm193.1%20121.3c-8.9.5-16.6-6.3-17.1-15.2-.5-8.9%206.3-16.4%2015.3-16.9%208.9-.5%2016.6%206.3%2017.1%2015.2.5%208.9-6.4%2016.5-15.3%2016.9zm85-4.8c-8.9.5-16.6-6.3-17.1-15.2-.5-8.9%206.3-16.4%2015.3-16.9%208.9-.5%2016.6%206.3%2017.1%2015.2.5%208.8-6.4%2016.4-15.3%2016.9zM160.6%2061.7s.1%200%200%200c.1.1.1.2.1.2.1.2.2.4.3.5v.1c.4%201.1%201.2%202%202.4%202.9%202.1%201.5%205.2%202.5%209%203.1%203.6.6%207.9.7%2012.5.5%201%200%202-.1%203.1-.2-.4-.5-.9-.9-1.3-1.4h-1.4c-4.5.1-8.7-.2-12.2-.9-3.7-.7-6.8-1.9-8.8-3.6-.6-.5-1-1-1.4-1.5-.2-.7-.2-1.5%200-2.4.5-2.4%202.5-5%205.7-7.8%202.9-2.4%206.7-4.9%2011.4-7.3.9-.5%201.8-.9%202.8-1.4.2-.1.3-.1.5-.2-.8%203.5-1%207.2-.3%2010.9%202.4%2012.5%2013.2%2021.2%2025.5%2021.6l5.2%2027.5%2011.3-2.1-5.2-27.5c11.3-4.8%2018.2-16.8%2015.8-29.3-.7-3.7-2.1-7-4.1-9.9-5.6-.8-16.4-.8-30.7%202.2%201.1-.3%202.2-.7%203.4-1%208-2.2%2015.7-3.7%2022.6-4.4.6-.1%201.3-.1%201.9-.2%201.2-.1%202.5-.2%203.7-.3h.6c4.3-.2%208.1-.1%2011.3.4%202.5.3%204.7.8%206.4%201.5-.6%201-1%202.1-1%203.3%200%202.9%201.9%205.3%204.5%206.1-.6%201-1.3%202-2.2%203-.9%201-1.9%201.9-3%202.9-1.1.9-2.4%201.9-3.7%202.8l-6.8%203.9c-.1.5-.2%201.1-.3%201.6.1%200%20.2-.1.3-.1l8.8-4.9c1.3-.8%202.5-1.7%203.6-2.5%201.2-1%202.3-1.9%203.3-2.9s1.8-2%202.5-2.9l.3-.6c3.2-.4%205.6-3%205.6-6.3%200-3.5-2.9-6.4-6.4-6.4-1%200-2%20.3-2.9.7-2.1-1.3-5-2.2-8.6-2.9-4.5-.8-10-1-16.3-.7-.7%200-1.5.1-2.2.2-.7.1-1.4.2-2.1.2-5.6-3.6-12.5-5.2-19.6-3.9-8.3%201.5-15%206.8-18.6%2013.6-1.4.6-2.7%201.1-4%201.7-.7.3-1.4.6-2.1%201-6.2%203.1-11.2%206.3-14.6%209.5-3.3%203-5.2%206-5.6%208.7-.2%201.5%200%202.9.8%204.1%200%20.4.1.6.2.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-ionitron($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-ionitron-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-jet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M480%2032s-23.4-.7-59.3%2027.1C404%2072%20244.9%20186.8%20244.9%20186.8l-168.8-4.2L32%20222l109.8%2055.2-8.6%2010.8-87.9.1-7.2%2040.5%2063.1%2048.7-26.6%2059.8%2060-26.4%2048.7%2063.1%2040.5-7.2.1-87.8%2010.9-8.5L290.1%20480l39.3-44.1-4.2-168.7S440.1%20108.2%20453%2091.6C480.7%2055.5%20480%2032%20480%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-jet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-jet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-key-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M249.2%20224c-14.2-40.2-55.1-72-100.2-72-57.2%200-101%2046.8-101%20104s45.8%20104%20103%20104c45.1%200%2084.1-31.8%2098.2-72H352v64h69.1v-64H464v-64H249.2zm-97.6%2066.5c-19%200-34.5-15.5-34.5-34.5s15.5-34.5%2034.5-34.5%2034.5%2015.5%2034.5%2034.5-15.5%2034.5-34.5%2034.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-key($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-key-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-keypad-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20398.5c-22.3%200-40.5%2018.3-40.5%2040.7%200%2022.4%2018.2%2040.7%2040.5%2040.7s40.5-18.3%2040.5-40.7c0-22.3-18.2-40.7-40.5-40.7zM136.5%2032C114.2%2032%2096%2050.3%2096%2072.7s18.2%2040.7%2040.5%2040.7S177%2095.1%20177%2072.7%20158.8%2032%20136.5%2032zm0%20122.2c-22.3%200-40.5%2018.3-40.5%2040.7s18.2%2040.7%2040.5%2040.7%2040.5-18.3%2040.5-40.7-18.2-40.7-40.5-40.7zm0%20122.2c-22.3%200-40.5%2018.3-40.5%2040.7%200%2022.4%2018.2%2040.7%2040.5%2040.7s40.5-18.3%2040.5-40.7c0-22.4-18.2-40.7-40.5-40.7zm239-162.9c22.3%200%2040.5-18.3%2040.5-40.7S397.8%2032%20375.5%2032%20335%2050.3%20335%2072.7s18.2%2040.8%2040.5%2040.8zM256%20276.4c-22.3%200-40.5%2018.3-40.5%2040.7%200%2022.4%2018.2%2040.7%2040.5%2040.7s40.5-18.3%2040.5-40.7c0-22.4-18.2-40.7-40.5-40.7zm119.5%200c-22.3%200-40.5%2018.3-40.5%2040.7%200%2022.4%2018.2%2040.7%2040.5%2040.7s40.5-18.3%2040.5-40.7c0-22.4-18.2-40.7-40.5-40.7zm0-122.2c-22.3%200-40.5%2018.3-40.5%2040.7s18.2%2040.7%2040.5%2040.7%2040.5-18.3%2040.5-40.7-18.2-40.7-40.5-40.7zm-119.5%200c-22.3%200-40.5%2018.3-40.5%2040.7s18.2%2040.7%2040.5%2040.7%2040.5-18.3%2040.5-40.7-18.2-40.7-40.5-40.7zM256%2032c-22.3%200-40.5%2018.3-40.5%2040.7s18.2%2040.7%2040.5%2040.7%2040.5-18.3%2040.5-40.7S278.3%2032%20256%2032z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-keypad($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-keypad-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-laptop-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M437.334%20416c23.47%200%2042.666-19.197%2042.666-42.666V106.668C480%2083.198%20460.803%2064%20437.334%2064H74.666C51.196%2064%2032%2083.2%2032%20106.668v266.666C32%20396.804%2051.197%20416%2074.666%20416H0c0%2023.47%2064%2032%2096%2032h320c32%200%2096-8.53%2096-32h-74.666zM74.666%20106.668h362.668v271.998H74.666V106.668zM256%20434.666c-11.73%200-21.333-9.604-21.333-21.334S244.27%20392%20256%20392s21.333%209.604%2021.333%2021.332c0%2011.73-9.604%2021.334-21.333%2021.334z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-laptop($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-laptop-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-leaf-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20287.6C416%20120.9%20256%2032%20256%2032S96%20120.9%2096%20287.6c0%20118.8%2081.3%20140.5%20128%20143.2V480h64v-49.3c46.7-2.6%20128-24.3%20128-143.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-leaf($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-leaf-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-link-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M74.6%20256c0-38.3%2031.1-69.4%2069.4-69.4h88V144h-88c-61.8%200-112%2050.2-112%20112s50.2%20112%20112%20112h88v-42.6h-88c-38.3%200-69.4-31.1-69.4-69.4zm85.4%2022h192v-44H160v44zm208-134h-88v42.6h88c38.3%200%2069.4%2031.1%2069.4%2069.4s-31.1%2069.4-69.4%2069.4h-88V368h88c61.8%200%20112-50.2%20112-112s-50.2-112-112-112z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-link($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-link-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-list-box-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M408%2064H104c-22.09%200-40%2017.908-40%2040v304c0%2022.092%2017.91%2040%2040%2040h304c22.092%200%2040-17.908%2040-40V104c0-22.092-17.908-40-40-40zM304%20368H144v-48h160v48zm64-88H144v-48h224v48zm0-88H144v-48h224v48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-list-box($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-list-box-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-list-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M80%20280h256v48H80zM80%20184h320v48H80zM80%2088h352v48H80z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M80%20376h288v48H80z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-list($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-list-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-locate-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20176c-44.004%200-80%2036-80%2080%200%2044.004%2035.996%2080%2080%2080%2044.005%200%2080-35.996%2080-80%200-44-35.995-80-80-80zm190.938%2058.667c-9.605-88.53-81.074-160-169.605-169.6V32h-42.666v33.067c-88.53%209.6-160%2081.068-169.604%20169.6H32v42.666h33.062c9.604%2088.53%2081.072%20160%20169.604%20169.604V480h42.666v-33.062c88.53-9.604%20160-81.073%20169.605-169.604H480v-42.667h-33.062zM256%20405.333c-82.137%200-149.334-67.198-149.334-149.333%200-82.136%2067.197-149.333%20149.334-149.333%2082.135%200%20149.332%2067.198%20149.332%20149.333S338.135%20405.333%20256%20405.333z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-locate($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-locate-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-lock-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M376%20186h-20v-40c0-55-45-100-100-100S156%2091%20156%20146v40h-20c-22.002%200-40%2017.998-40%2040v200c0%2022.002%2017.998%2040%2040%2040h240c22.002%200%2040-17.998%2040-40V226c0-22.002-17.998-40-40-40zM256%20368c-22.002%200-40-17.998-40-40s17.998-40%2040-40%2040%2017.998%2040%2040-17.998%2040-40%2040zm62.002-182H193.998v-40c0-34.004%2028.003-62.002%2062.002-62.002%2034.004%200%2062.002%2027.998%2062.002%2062.002v40z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-lock($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-lock-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-log-in-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c-42.9%200-84.2%2013-119.2%2037.5-34.2%2024-60.2%2057.2-75.1%2096.1L58%20192h45.7l1.9-5c8.2-17.8%2019.4-33.9%2033.5-48%2031.2-31.2%2072.7-48.4%20116.9-48.4s85.7%2017.2%20116.9%2048.4c31.2%2031.2%2048.4%2072.7%2048.4%20116.9%200%2044.1-17.2%2085.7-48.4%20116.9-31.2%2031.2-72.7%2048.4-116.9%2048.4-44.1%200-85.6-17.2-116.9-48.4-14-14-25.3-30.1-33.5-47.9l-1.9-5H58l3.6%2010.4c14.9%2038.9%2040.9%2072.1%2075.1%2096.1C171.8%20451.1%20213%20464%20256%20464c114.7%200%20208-93.3%20208-208S370.7%2048%20256%2048z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20277.4h189.7l-43.6%2044.7L224%20352l96-96-96-96-31%2029.9%2044.7%2044.7H48v42.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-log-in($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-log-in-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-log-out-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M192%20277.4h189.7l-43.6%2044.7L368%20352l96-96-96-96-31%2029.9%2044.7%2044.7H192v42.8z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.7%20421.3c-44.1%200-85.5-17.2-116.7-48.4-31.2-31.2-48.3-72.7-48.3-116.9%200-44.1%2017.2-85.7%2048.3-116.9%2031.2-31.2%2072.6-48.4%20116.7-48.4%2044%200%2085.3%2017.1%20116.5%2048.2l30.3-30.3c-8.5-8.4-17.8-16.2-27.7-23.2C339.7%2061%20298.6%2048%20255.7%2048%20141.2%2048%2048%20141.3%2048%20256s93.2%20208%20207.7%20208c42.9%200%2084-13%20119-37.5%2010-7%2019.2-14.7%2027.7-23.2l-30.2-30.2c-31.1%2031.1-72.5%2048.2-116.5%2048.2zM448.004%20256.847l-.85-.848.85-.85.848.85z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-log-out($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-log-out-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-magnet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M383.6%2098.8C352.1%2065.8%20308%2048.2%20256%2048c-51.9.2-96%2017.8-127.5%2050.8C96.8%20132%2080%20178.8%2080%20234c0%2043.5%201.8%2069.2%2012.9%20115.8%200%200%2022.7%2075.7%2035.5%20104.1%203.5%207.8%207.4%2011.8%2015.5%209.3%206.4-2%2046.8-17.9%2054.7-21.6%207.9-3.6%2011.6-8.6%208.9-15.2-3.8-9.2-33.9-95.6-33.9-95.6-8.4-36.3-11.6-53.9-11.6-94.3%200-28.2%209.8-54.1%2027.7-72.9%2017.5-18.3%2041-28.4%2066.3-28.4s48.8%2010.1%2066.3%2028.4c17.9%2018.8%2027.7%2044.6%2027.7%2072.8%200%2040-3.2%2064-11.7%2094.4s-32.2%2090.1-33.9%2095.6c-1.7%205.6%202.1%2012.5%208.9%2015.2%206.8%202.7%2049.3%2019.6%2054.7%2021.6%205.4%202%2010.6.6%2014.5-7.7%204-8.3%2024.6-61.4%2036.5-105.7%2012-44.3%2013-72.3%2013-115.8%200-55.2-16.7-101.9-48.4-135.2zM173.1%20419.7l-22.9%209.6c-6.9-16.3-17.2-43.2-25.9-77.2l22-6.5%2026.8%2074.1zm188.6%209.6l-22.9-9.6c7.2-16.6%2019.1-45.1%2026.6-74.1l22%206.5c-8.4%2033.9-18.7%2060.9-25.7%2077.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-magnet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-magnet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-mail-open-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20201.667c0-14.933-7.47-28.803-20.27-36.266L256%2064%2052.27%20165.4C40.53%20172.865%2032%20186.735%2032%20201.668v203.666C32%20428.803%2051.197%20448%2074.666%20448h362.668c23.47%200%2042.666-19.198%2042.666-42.667V201.667zM256%20304L84.63%20192%20256%20106.667%20427.37%20192%20256%20304z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-mail-open($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-mail-open-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-mail-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M437.332%2080H74.668C51.198%2080%2032%2099.198%2032%20122.667v266.666C32%20412.803%2051.2%20432%2074.668%20432h362.664c23.47%200%2042.668-19.198%2042.668-42.667V122.667C480%2099.197%20460.8%2080%20437.332%2080zM432%20170.667L256%20288%2080%20170.667V128l176%20117.333L432%20128v42.667z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-mail($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-mail-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-male-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%2048H288v48h94.1L275.4%20202.6C251.9%20185.9%20223.1%20176%20192%20176c-79.5%200-144%2064.5-144%20144s64.5%20144%20144%20144%20144-64.5%20144-144c0-31.1-9.9-59.9-26.6-83.4L416%20129.9V224h48V48h-48zM192%20416c-52.9%200-96-43.1-96-96s43.1-96%2096-96%2096%2043.1%2096%2096-43.1%2096-96%2096z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-male($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-male-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-man-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20106.6c20.6.1%2037.3-16.6%2037.3-37.3%200-20.6-16.7-37.3-37.3-37.3-20.6%200-37.3%2016.7-37.3%2037.3%200%2020.6%2016.7%2037.3%2037.3%2037.3zM293.4%20115h-74.8c-28.2%200-46.6%2024.8-46.6%2048.4V277c0%2022%2031%2022%2031%200V172h6v285.6c0%2030.4%2042%2029.4%2043%200V293h8v164.7c1.7%2031.2%2043%2028.2%2043-.1V172h5v105c0%2022%2032%2022%2032%200V163.4c0-23.5-18.5-48.4-46.6-48.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-man($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-man-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-map-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M437.333%2064c-2.176%200-4.396%201.37-9.176%203.207S320%20108.802%20320%20108.802L192%2064%2071.47%20104.53c-4.273%201.074-7.47%205.334-7.47%2010.667v322.136C64%20443.73%2068.27%20448%2074.666%20448c1.828%200%206.505-2.33%209.087-3.32L192%20403.198%20320%20448l120.53-40.53c4.272-1.074%207.47-5.335%207.47-10.668V74.666C448%2068.27%20443.73%2064%20437.333%2064zM320%20405.333L192%20360.53V106.667l128%2044.803v253.863z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-map($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-map-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-medal-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M273.5%20152.1H48l54.1-103.9h240.7z%22%2F%3E%3Ccircle%20cx%3D%22256.2%22%20cy%3D%22377.2%22%20r%3D%2286.6%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M348.9%20299.1l115.1-147-69.3-103.9L256.4%20256c32.3%200%2062.7%2012.7%2085.5%2035.5%202.5%202.5%204.8%205%207%207.6zM205.8%20266.6L152.3%20186H48.4l90.1%20161.5c5.2-21.2%2016.1-40.6%2032-56.4%2010.4-10.3%2022.3-18.6%2035.3-24.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-medal($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-medal-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-medical-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M351.9%20256L460%20193.6l-48-83.2-108%2062.4V48h-96v124.8l-108-62.4-48%2083.2L160.1%20256%2052%20318.4l48%2083.2%20108-62.4V464h96V339.2l108%2062.4%2048-83.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-medical($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-medical-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-medkit-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20144v-39.6C352%2082%20334%2064%20311.6%2064H200.4C178%2064%20160%2082%20160%20104.4V144H48v263.6C48%20430%2066%20448%2088.4%20448h335.2c22.4%200%2040.4-18%2040.4-40.4V144H352zm-152-40h112v40H200v-40zm136%20224h-56v56h-48v-56h-56v-48h56v-56h48v56h56v48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-medkit($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-medkit-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-megaphone-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M382.1%20143.4l-23.1%2023c14.7%2014.7%2023.9%2035.2%2023.9%2057.6s-9.2%2042.9-23.9%2057.6l23.1%2023.1c20.6-20.6%2033.4-49.2%2033.4-80.6s-12.8-60.1-33.4-80.7z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M428.2%2099l-22.7%2022.7c26.1%2026.1%2042.3%2062.4%2042.3%20102.3%200%2039.8-16.1%2076.1-42.3%20102.3l22.7%2022.7c31.9-32.1%2051.8-76.3%2051.8-125s-19.8-92.9-51.8-125zM320%20184.1V80h-32l-96%2080H64l-32%2016v112l32%2016%2080%20128h48l-30-128h30l96%2064h32V263.9c18.4-1.7%2032-18.9%2032-39.9s-13.6-38.2-32-39.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-megaphone($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-megaphone-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-menu-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20384h384v-42.666H64V384zm0-106.666h384v-42.667H64v42.667zM64%20128v42.665h384V128H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-menu($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-menu-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-mic-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M367.95%20354.654l-26.615-26.562-9.568-9.548-4.698-4.706L187%20174.04v.347L76.112%2063.53l-24.19%2024.042L187%20222.47v28.816c0%2037.79%2031.12%2068.714%2068.91%2068.714a68.6%2068.6%200%200%200%2024.565-4.545l32.39%2032.274c-17.334%208.792-36.813%2013.86-56.783%2013.86-62.986%200-121.365-48.59-121.365-116.59H95.773C95.773%20322%20158%20387.7%20233%20398.012V480h46v-81.987c22-3.352%2043.066-11.222%2061.627-22.622l95.278%2095.08%2024.033-24-33.847-33.786-58.215-57.96%2058.224%2057.96-58.15-58.03zM325%20251.286V100.714C325%2062.924%20293.79%2032%20256%2032s-69%2030.924-69%2068.714v25.244l137.11%20136.968c.67-3.79.89-7.68.89-11.64zM416.44%20245h-38.942c0%2020.496-5.498%2039.676-14.93%2056.197l27.57%2027.516c16.524-24.11%2026.3-52.787%2026.3-83.713zM460%20446.427L426.1%20412.684l33.855%2033.785z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-mic-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-mic-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-mic-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20320c37.712%200%2068.57-30.924%2068.57-68.714V100.714C324.57%2062.924%20293.713%2032%20256%2032s-68.57%2030.924-68.57%2068.714v150.572c0%2037.79%2030.858%2068.714%2068.57%2068.714zm121.14-75.452c0%2068.714-58.283%20116.815-121.14%20116.815S134.86%20313.26%20134.86%20244.548H96c0%2077.873%2061.72%20143.153%20137.144%20153.465V480h45.713v-81.987C354.28%20386.56%20416%20322.42%20416%20244.548h-38.86z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-mic($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-mic-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-microphone-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20112V84.4c0-29-24.5-52.4-54.8-52.4H182.9C152.5%2032%20128%2055.4%20128%2084.4V112h152v37H128v43h152v37H128v43h152v37H128v41.8c0%2029%2024.5%2052.2%2054.9%2052.2H213v77h86v-77h30.2c30.3%200%2054.8-23.2%2054.8-52.2V309h-56v-37h56v-43h-56v-37h56v-43h-56v-37h56z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-microphone($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-microphone-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-moon-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M195%20125c0-26.3%205.3-51.3%2014.9-74.1C118.7%2073%2051%20155.1%2051%20253c0%20114.8%2093.2%20208%20208%20208%2097.9%200%20180-67.7%20202.1-158.9-22.8%209.6-47.9%2014.9-74.1%2014.9-106%200-192-86-192-192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-moon($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-moon-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-more-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M296%20136c0-22.002-17.998-40-40-40s-40%2017.998-40%2040%2017.998%2040%2040%2040%2040-17.998%2040-40zm0%20240c0-22.002-17.998-40-40-40s-40%2017.998-40%2040%2017.998%2040%2040%2040%2040-17.998%2040-40zm0-120c0-22.002-17.998-40-40-40s-40%2017.998-40%2040%2017.998%2040%2040%2040%2040-17.998%2040-40z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-more($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-more-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-move-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20256l-96-96v64h-96v-96h64l-96-96-96%2096h64v96h-96v-64l-96%2096%2096%2096v-64h96v96h-64l96%2096%2096-96h-64v-96h96v64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-move($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-move-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-musical-note-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064v225.1c-12.6-7.3-27.1-11.7-42.7-11.7-47.1%200-85.3%2038.2-85.3%2085.3s38.2%2085.3%2085.3%2085.3%2085.3-38.2%2085.3-85.3V149.3H384V64H256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-musical-note($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-musical-note-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-musical-notes-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M160%2064v257.6c-8.2-2.7-17.2-4.1-26.6-4.1-38.3%200-69.4%2027.1-69.4%2065.4%200%2038.3%2031.1%2065.1%2069.4%2065.1%2038.3%200%2069.6-28.2%2069.6-69.1V200h202v121.6c-8.2-2.7-17.2-4.1-26.6-4.1-38.3%200-69.4%2027.1-69.4%2065.4%200%2038.3%2031.1%2065.1%2069.4%2065.1%2038.3%200%2069.6-28.2%2069.6-69.1V64H160zm245%2096H203v-53h202v53z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-musical-notes($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-musical-notes-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-navigate-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2064L96%20433.062%20110.938%20448%20256%20384l145.062%2064L416%20433.062z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-navigate($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-navigate-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-no-smoking-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M360%20256h16v48h-16zM112%20304h129.6l-48-48H112z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M364.5%2060.1c-.4-.2-.7-.4-1-.6-10.9-6-22.5-10.7-34.4-14.8l-5.4-1.8C302.3%2036.1%20279.6%2032%20256%2032%20132.3%2032%2032%20132.3%2032%20256c0%2084.3%2046.6%20157.6%20115.4%20195.8.4.2.7.5%201.1.7%2010.9%206%2022.5%2010.7%2034.4%2014.8l5.4%201.8c21.4%206.8%2044%2010.9%2067.7%2010.9%20123.7%200%20224-100.3%20224-224%200-84.3-46.6-157.7-115.5-195.9zM256%20426.4c-9.3%200-18.4-.9-27.2-2.4-9.8-1.6-19.3-4.1-28.5-7.3-1.9-.6-3.8-1.2-5.6-1.9-6.5-2.5-12.9-5.3-19-8.6-53.6-28.7-90.1-85.2-90.1-150.3%200-37.2%2012.4-71.4%2032.7-99.4l237.2%20237.2c-28.1%2020.3-62.3%2032.7-99.5%2032.7zm137.8-71L156.6%20118.2c28-20.2%2062.1-32.6%2099.4-32.6%209.3%200%2018.3.9%2027.2%202.4%209.8%201.6%2019.3%204.1%2028.5%207.3%201.8.6%203.7%201.2%205.6%201.9%206.2%202.4%2012.2%205%2018%208.1%2054.2%2028.5%2091.2%2085.3%2091.2%20150.8-.1%2037.2-12.5%2071.3-32.7%2099.3z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%20256h-34l34%2034zM384%20256h16v48h-16zM360.1%20212.7c-8.8-4.1-22-5.7-45.6-5.7h-3.6c-12.7.1-15.9-.1-20-6.1-2.8-4.2-1-14.8%203.7-21.9%201.6-2.4%201.8-5.6.4-8.2-1.4-2.6-4.1-4.2-7-4.3-.1%200-9.4-.1-18.3-3.9-10.6-4.5-15.6-12.1-15.6-23.1%200-25.8%2021.8-27.7%2022.8-27.7v-16c-12%200-38.8%2011-38.8%2043.7%200%2017.5%209%2031%2025.7%2038%204.2%201.7%208.4%202.9%2012%203.6-3.3%209.8-3.6%2020.9%201.7%2028.7%209%2013.3%2020.3%2013.2%2033.3%2013.1h3.5c26.3%200%2034.6%202.3%2038.9%204.3%205.7%202.6%206.8%207.5%206.6%2015.7v1h16v-1c0-7.1.3-22.8-15.7-30.2z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20244c0-25.7-3-39.2-9.1-49.6C382.3%20180%20368.5%20172%20352%20172h-17.4c2.9-8.3%205.4-19.8%203.5-30.9-3.2-18.8-19.1-30-43.1-30v16c21%200%2026.1%209.1%2027.4%2016.7%202.5%2014.5-6.8%2032.1-6.9%2032.3-1.4%202.5-1.3%205.5.1%207.9s4.1%203.9%206.9%203.9H352c10.9%200%2019.4%204.9%2025.1%2014.6%203.1%205.3%206.9%2013.5%206.9%2041.4h16v.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-no-smoking($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-no-smoking-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-notifications-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20463.656c22.814%200%2041.475-18.656%2041.475-41.656h-82.95c0%2023%2018.66%2041.656%2041.475%2041.656z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M131.083%20107.172l.053.074-33.046-32.97-24.086%2024.107%2063.042%2063.153C126.888%20180.52%20121%20202.196%20121%20225.07v114.555L80%20381.28V402h297.743l36.182%2036.33%2024.08-24.3L425.9%20402h.316L131.083%20107.172zM391%20225.07c0-63.526-45-117.677-104-131.218V79.274c0-17.706-13.37-31.243-31-31.243-17.628%200-31%2013.538-31%2031.244v14.578c-15%203.438-29.048%209.5-41.75%2017.663L391%20319.355V225.07z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-notifications-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-notifications-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-notifications-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M257%20120.47c7.083%200%2023.91%204.48%2023.91%204.48%2045.59%2010.447%2077.68%2052.44%2077.68%2099.85V352.412l9.32%209.364%207.788%207.823H136.302l7.788-7.824%209.32-9.364V224.8c0-47.41%2032.09-89.403%2077.68-99.85%200%200%2018.042-4.48%2023.91-4.48M256%2048c-17.602%200-31.06%2013.518-31.06%2031.2v14.56c-59.014%2013.522-103.53%2067.6-103.53%20131.04v114.4L80%20380.8v20.8h352v-20.8l-41.41-41.6V224.8c0-63.44-44.517-117.518-103.53-131.04V79.2C287.06%2061.518%20273.6%2048%20256%2048zm41.41%20374.4H214.59c0%2022.88%2018.633%2041.6%2041.412%2041.6s41.41-18.72%2041.41-41.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-notifications-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-notifications-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-notifications-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20464c22.78%200%2041.41-18.72%2041.41-41.6H214.59c0%2022.88%2018.633%2041.6%2041.412%2041.6zm134.59-124.8V224.8c0-63.44-44.517-117.518-103.53-131.04V79.2C287.06%2061.518%20273.6%2048%20256%2048s-31.06%2013.518-31.06%2031.2v14.56c-59.014%2013.522-103.53%2067.6-103.53%20131.04v114.4L80%20380.8v20.8h352v-20.8l-41.41-41.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-notifications($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-notifications-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-nuclear-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M336%20272c0-29.8-16.3-55.7-40.4-69.5l73.1-124.1C335.6%2059.1%20297.1%2048%20256%2048c-41.2%200-79.9%2011.2-113.1%2030.6l71.6%20125C191.4%20217.6%20176%20243%20176%20272H32c0%2083.3%2046.9%20153.4%20114.4%20192l70.1-122.4c11.7%206.6%2025.1%2010.4%2039.5%2010.4%2014.3%200%2027.7-3.8%2039.3-10.3L365.6%20464C433.1%20425.4%20480%20355.3%20480%20272H336z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-nuclear($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-nuclear-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-nutrition-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M357.2%20235.6L274.7%20153h-.8c-8.1-6-18.2-10.3-28.4-10.3-13.7%200-26.1%206.3-34.3%2016.3h-.6L53%20414.1v.8c-3%206.2-5%2013.3-5%2020.8%200%2024.4%2019.7%2044.3%2044.3%2044.3%209.4%200%2018-2.9%2027.4-9.1l232.9-168.1c10.9-8.3%2017.4-21.6%2017.4-36%200-12-4.7-23.2-12.8-31.2zM464%20145.1l-29.2-49-36.6%2020.3%2031.5-55.9L380.6%2032l-67.3%20127.8%2041.3%2041.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-nutrition($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-nutrition-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-open-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.34%20405.332H106.66V106.668H240V64H106.66C83.19%2064%2064%2083.197%2064%20106.668v298.664C64%20428.802%2083.19%20448%20106.66%20448h298.68c23.47%200%2042.66-19.197%2042.66-42.668V272h-42.66v133.332zM288%2064v42.668h87.474L160%20322.133%20189.864%20352%20405.34%20136.53V224H448V64H288z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-open($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-open-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-options-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20384h272v32H32zM400%20384h80v32h-80zM384%20447.5c0%2017.95-14.327%2032.5-32%2032.5-17.673%200-32-14.55-32-32.5v-95c0-17.95%2014.327-32.5%2032-32.5%2017.673%200%2032%2014.55%2032%2032.5v95z%22%2F%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20240h80v32H32zM208%20240h272v32H208zM192%20303.5c0%2017.95-14.327%2032.5-32%2032.5-17.673%200-32-14.55-32-32.5v-95c0-17.95%2014.327-32.5%2032-32.5%2017.673%200%2032%2014.55%2032%2032.5v95z%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%2096h272v32H32zM400%2096h80v32h-80zM384%20159.5c0%2017.95-14.327%2032.5-32%2032.5-17.673%200-32-14.55-32-32.5v-95c0-17.95%2014.327-32.5%2032-32.5%2017.673%200%2032%2014.55%2032%2032.5v95z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-options($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-options-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-outlet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M369.5%2032H142.4C81.5%2032%2032%2082.6%2032%20144.6v222.8c0%2062%2049.5%20112.6%20110.4%20112.6h227.2c60.9%200%20110.5-50.6%20110.5-112.6V144.6C480%2082.6%20430.5%2032%20369.5%2032zM175%20251v.7c0%2010.9-9.1%2020.4-19.9%2020.4h-23.3c-10.8%200-19.9-9.5-19.9-20.4V148.1c1-10.8%209.2-20.2%2019.9-20.2h23.3c10.9%200%2019.9%209.8%2019.9%2020.8V251zm122%20147.4c0%2011.4-8.9%2017.6-20.1%2017.6h-41.8c-11.2%200-20.1-8.1-20.1-19.6v-29.3c0-23.3%2018.1-42.3%2041-42.3s41%2019%2041%2042.3v31.3zM400%20251v.7c0%2010.9-9.1%2020.4-19.9%2020.4h-24.3c-10.8%200-19.9-9.5-19.9-20.4V148.1c1-10.8%209.2-20.2%2019.9-20.2h24.3c10.8%200%2019.9%209.8%2019.9%2020.8V251z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-outlet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-outlet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-paper-plane-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20fill%3D%22%23010101%22%20d%3D%22M48%20270.9l118.9%2044.6L181.7%20464%20256%20360l104%20104L464%2048%2048%20270.9zm294.9%20126L260%20313.4%20374.9%20152%20193.6%20289.8%20124.9%20265l291-156.2-73%20288.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-paper-plane($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-paper-plane-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-paper-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M464%2064H192c-8.8%200-16%207.7-16%2016.5V112H74c-23.1%200-42%2018.9-42%2042v207.5c0%2047.6%2039%2086.5%2086%2086.5h279.7c45.1%200%2082.3-36.9%2082.3-82V80c0-8.8-7.2-16-16-16zm-288%2080v192h-42V163.2c0-6.8-.8-13.3-3.3-19.2H176zm-17%20255.4C148%20410%20133.2%20416%20118.5%20416c-14.5%200-28.1-5.7-38.5-16-10.3-10.3-16-24-16-38.5V163.2c0-10.6%208.4-19.2%2019-19.2s19%208.6%2019%2019.2V352c0%208.8%207.2%2016%2016%2016h57.5c-1.5%2011.6-7.2%2022.6-16.5%2031.4zM448%20366c0%2013.3-5.4%2025.8-14.9%2035.3-9.5%209.5-22.2%2014.7-35.4%2014.7H187.3c12.8-14.9%2020.7-33.9%2020.7-54.5V97h240v269z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M248%20136h160v56H248zM248%20224h160v32H248zM248%20288h160v32H248zM408%20352H248s0%2032-8%2032h148.7c19.3%200%2019.3-21%2019.3-32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-paper($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-paper-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-partly-sunny-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M248.03%20116.81l24.68-24.678%2019.232%2019.234-24.678%2024.677zM176%20125.7c-45.3%200-82.3%2037-82.3%2082.3%200%2017.5%205.5%2033.7%2014.9%2047%2015.3-13%2033.9-22.6%2054.7-27.6l13.2-16.6c13.6-17.1%2030.7-30.2%2050.8-38.9%206.1-2.6%2012.4-4.8%2019-6.6-14.5-23.7-40.6-39.6-70.3-39.6zM162%2064h28v41h-28zM32%20194h41v28H32zM81.6%20276.8l-.8-.8-24.7%2024.7%2019.2%2019.2%2024.7-24.7zM79.29%2092.13l24.677%2024.678-19.233%2019.233-24.678-24.677zM405.6%20288.6C394.7%20233.4%20346.2%20192%20288%20192c-34%200-65.1%2011.9-86.5%2038.8%2029.4%202.2%2056.7%2013%2077.8%2033.9%2015.6%2015.6%2026.6%2034.6%2032.1%2055.3h-28.7c-13.1-37.3-48-64-90.6-64-5.1%200-12.3.6-17.7%201.7C128.6%20267.1%2096%20305%2096%20352c0%2053%2043%2096%2096%2096h208c44.2%200%2080-35.8%2080-80%200-42.2-32.8-76.5-74.4-79.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-partly-sunny($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-partly-sunny-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pause-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20448h106.7V64H96v384zM309.3%2064v384H416V64H309.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pause($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pause-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-paw-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M459.5%20190.5c-4.7-12.7-12.7-21.9-23.1-26.6-4.8-2.1-9.7-3.2-14.8-3.2-21.7%200-43.7%2020.2-54.9%2050.3-13.8%2037.3-5.8%2073.8%2018.6%2085%204.9%202.2%2010.1%203.4%2015.6%203.4%2022.1%200%2044.6-18.5%2055.9-46.1%208.5-21%209.5-44.4%202.7-62.8zM145.3%20211c-11.1-30.1-33.2-50.3-54.9-50.3-5.1%200-10.1%201.1-14.8%203.2-10.4%204.7-18.3%2013.9-23.1%2026.6-6.9%2018.4-5.9%2041.8%202.7%2062.7%2011.3%2027.6%2033.8%2046.1%2055.9%2046.1%205.4%200%2010.7-1.1%2015.6-3.4%2024.4-11.1%2032.4-47.6%2018.6-84.9zM193.5%20206.8c2%20.1%204%200%206-.2%2011.7-1.1%2022.3-7.1%2030.6-17.3%2013.4-16.5%2017.1-42.2%2014.3-68.7-4.3-40.8-25.8-71.3-54.8-72.6%200%200-4.1%200-6.2.2-12.8%201.3-24.4%207.9-33.5%2019.2-13.3%2016.4-19.7%2040.7-17.1%2065.1%204.3%2040.4%2030.9%2073%2060.7%2074.3zM256%20238.7c-69.3%200-138.7%2082.4-138.7%20161.6%200%2023.6%2011.8%2042.6%2023.5%2050.4%2014.4%209.6%2024.5%2013.4%2045.5%2013.4%2025%200%2031.8-8.8%2043.5-16.5%208.5-5.6%2015.8-10.4%2026.2-10.4%2010.4%200%2017.7%204.8%2026.2%2010.4%2011.7%207.7%2018.5%2016.5%2043.5%2016.5%2021.1%200%2031.2-3.8%2045.5-13.4%2011.6-7.8%2023.5-26.8%2023.5-50.4%200-79.2-69.4-161.6-138.7-161.6zM312.6%20206.5c2%20.2%204%20.3%206%20.2%2029.8-1.3%2056.5-33.9%2060.8-74.3%202.6-24.4-3.8-48.8-17.1-65.1-9.2-11.3-20.3-17.6-33.1-18.8-2.1-.2-6.7-.3-6.7-.3-28.9%201.3-50.4%2031.5-54.8%2072.4-2.8%2026.5.9%2052.3%2014.3%2068.7%208.4%2010%2019%2016%2030.6%2017.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-paw($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-paw-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-people-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337.454%20232c33.6%200%2061.092-27.002%2061.092-60%200-32.997-27.493-60-61.092-60s-61.09%2027.003-61.09%2060c0%2032.998%2027.49%2060%2061.09%2060zm-162.908%200c33.6%200%2061.09-27.002%2061.09-60%200-32.997-27.49-60-61.09-60s-61.092%2027.003-61.092%2060c0%2032.998%2027.493%2060%2061.092%2060zm0%2044C126.688%20276%2032%20298.998%2032%20346v54h288v-54c0-47.002-97.6-70-145.454-70zm162.908%2011.003c-6.105%200-10.325%200-17.454.997%2023.426%2017.002%2032%2028%2032%2058v54h128v-54c0-47.002-94.688-58.997-142.546-58.997z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-people($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-people-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-person-add-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M304%20256c52.805%200%2096-43.2%2096-96s-43.195-96-96-96-96%2043.2-96%2096%2043.195%2096%2096%2096zm0%2048c-63.598%200-192%2032.402-192%2096v48h384v-48c0-63.598-128.402-96-192-96zM112%20224v-64H80v64H16v32h64v64h32v-64h64v-32h-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-person-add($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-person-add-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-person-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20256c52.805%200%2096-43.2%2096-96s-43.195-96-96-96-96%2043.2-96%2096%2043.195%2096%2096%2096zm0%2048c-63.598%200-192%2032.402-192%2096v48h384v-48c0-63.598-128.402-96-192-96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-person($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-person-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-phone-landscape-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20358.856V153.143c0-22.63-18.326-41.143-40.728-41.143H72.728C50.326%20112%2032%20130.512%2032%20153.143v205.713C32%20381.488%2050.326%20400%2072.728%20400h366.545c22.4%200%2040.727-18.512%2040.727-41.144zM112%20364V148h288v216H112z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-phone-landscape($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-phone-landscape-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-phone-portrait-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M358.856%2032H153.143C130.513%2032%20112%2050.326%20112%2072.728v366.545c0%2022.4%2018.512%2040.727%2041.143%2040.727h205.713C381.488%20480%20400%20461.674%20400%20439.272V72.728C400%2050.326%20381.488%2032%20358.856%2032zM364%20400H148V112h216v288z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-phone-portrait($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-phone-portrait-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-photos-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M400%20421.3V154.7c0-23.5-19.2-42.7-42.7-42.7H90.7C67.2%20112%2048%20131.2%2048%20154.7v266.7c0%2023.5%2019.2%2042.7%2042.7%2042.7h266.7c23.4-.1%2042.6-19.3%2042.6-42.8zM157.3%20304l45.3%2064%2066.7-96%2088%20128H90.7l66.6-96z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M421.3%2048H154.7C131.2%2048%20112%2067.2%20112%2090.7V96h261.3c23.5%200%2042.7%2019.2%2042.7%2042.7V400h5.3c23.5%200%2042.7-19.2%2042.7-42.7V90.7c0-23.5-19.2-42.7-42.7-42.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-photos($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-photos-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pie-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32.6%20256H256V32.6c-5-.4-10.6-.6-16-.6-114.9%200-208%2093.1-208%20208%200%205.4.2%2011%20.6%2016z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M109.8%20402.2C147.9%20449.6%20206.4%20480%20272%20480c114.9%200%20208-93.1%20208-208%200-65.6-30.4-124.1-77.8-162.2C370.5%2084.3%20331%2067.9%20288%2064.6V288H64.6c3.3%2043%2019.7%2082.5%2045.2%20114.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pie($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pie-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pin-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032c-88.004%200-160%2070.557-160%20156.8C96%20306.4%20256%20480%20256%20480s160-173.6%20160-291.2C416%20102.558%20344.004%2032%20256%2032zm0%20212.8c-31.996%200-57.144-24.644-57.144-56s25.147-56%2057.144-56%2057.144%2024.644%2057.144%2056-25.148%2056-57.144%2056z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pin($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pin-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pint-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2048l42.9%20379.2c2.6%2020.8%2020.5%2036.8%2042.5%2036.8h213.3c22%200%2039.9-16%2042.5-36.8L448%2048H64zm327%20124.8H121l-9.4-83.2h288.6l-9.2%2083.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pint($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pint-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pizza-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M407.2%20130.4C360.7%20111.5%20309.8%20102%20256%20102c-53.9%200-108.3%2010.3-151.2%2028-8.1%203.3-15.3%209-10.1%2019.5S255.9%20480%20255.9%20480l161-329.9c3.2-6.9.9-15.4-9.7-19.7zm-221%2073.6c-18.7%200-32-14.3-32-32s13.3-32%2032-32%2032%2014.3%2032%2032-13.3%2032-32%2032zM256%20347c-18.7%200-32-14.3-32-32s13.3-32%2032-32%2032%2014.3%2032%2032-13.3%2032-32%2032zm69.8-123c-18.7%200-32-14.3-32-32s13.3-32%2032-32%2032%2014.3%2032%2032-13.3%2032-32%2032z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M436.9%2066C384.7%2045.4%20320.3%2032%20256%2032c-64.3%200-127.6%2012.1-180.9%2033.4C70.4%2067.3%2064%2071%2064%2079.2l9.7%2024.1c2.8%204.9%208.7%208.2%2015.1%208.2%201.8%200%204.3-.3%207.3-1.5%2049-18.9%20103.1-29.6%20160-29.6%2056.9%200%20115.2%2011.6%20160%2029.6%203.6%201.4%205.6%201.5%207.3%201.5%206.6%200%2012.2-3.3%2015-8.1l9.8-24.1c-.2-7.3-5-10.8-11.3-13.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pizza($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pizza-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-plane-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20336v-40L288%20192V79.2c0-17.683-14.82-31.2-32-31.2s-32%2013.518-32%2031.2V192L64%20296v40l160-48v113.602l-48%2031.2V464l80-16%2080%2016v-31.2l-48-31.198V288l160%2048z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-plane($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-plane-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-planet-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M135.7%20151c-2.5%203-4.9%206-7.2%209.2%2032.2%2036.3%2076.1%2076.5%20124.2%20113.7%2037.8%2029.2%2076.3%2055.2%20111.4%2075.1%205.9%203.3%2011.7%206.5%2017.3%209.4%202.5-3%204.9-6%207.2-9.2%2011.7-16.1%2018.1-33.2%2023.3-53.6.8-3.2%201.5-6.4%202.1-9.5%2015.8-83-35.6-164.9-118.5-185.9-37-9.4-74.1-5.1-106.3%209.7-21.4%209.9-38.2%2022.9-53.5%2041.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M418.2%20326.8c-4.1%2011-7.4%2017.5-7.4%2017.5%2018.2%2021.1%2024.6%2033.9%2031.9%2046.4%202.4%204.1%207.4%2013.1.9%2012.4-1.7-.3-3.5-.7-5.5-1.3-21.3-5.4-51.2-18.7-84.3-37.4-35.8-20.3-74.9-46.7-113.3-76.3-51.1-39.5-97.5-82.3-130.6-120.5-15.3-17.6-27.6-34.2-35.7-47.9-2.4-4.1-3.9-6.3-5.6-10.4-2.5-6.2%205-5.1%207-4.6%2014.9%203.8%2035%209.9%2058.2%2023.8%200%200%204.3-4.8%2013.9-11.4-22.8-15.4-44.6-27.7-65.2-35.5-23.1-8.8-41.1-6.8-47.5%203.7-12.2%2019.9%2014%2072.3%2065.3%20132-21.5%2086%2030.6%20173.3%20116.5%20195%2041.1%2010.4%2082.4%203.9%20116.8-15%2038.1%2017.6%2072.1%2028.6%2096.9%2034.9%2023.9%206.1%2040.4%205.5%2046.8-4.9%2011.1-18.2-12.1-51.8-59.1-100.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-planet($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-planet-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-play-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%2052v408l320-204L96%2052z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-play($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-play-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-podium-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20224h128v192H32zM192%20128h128v288H192zM352%20288h128v128H352z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-podium($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-podium-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-power-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M279.1%2048h-46.2v231.1h46.2V48zm111.6%2050.2L357.9%20131c36.5%2029.4%2059.9%2074.4%2059.9%20125%200%2089.4-72.3%20161.8-161.8%20161.8S94.2%20345.4%2094.2%20256c0-50.6%2023.3-95.7%2059.6-125.3l-32.6-32.6C76.4%20136.3%2048%20192.7%2048%20256c0%20114.9%2093.1%20208%20208%20208s208-93.1%20208-208c0-63.3-28.4-119.7-73.3-157.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-power($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-power-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pricetag-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%2064H257.6L76.5%20251.6c-8%208-12.3%2018.5-12.5%2029-.3%2011.3%203.9%2022.6%2012.5%2031.2l123.7%20123.6c8%208%2020.8%2012.5%2028.8%2012.5s22.8-3.9%2031.4-12.5L448%20256V96l-32-32zm-30.7%20102.7c-21.7%206.1-41.3-10-41.3-30.7%200-17.7%2014.3-32%2032-32%2020.7%200%2036.8%2019.6%2030.7%2041.3-2.9%2010.3-11.1%2018.5-21.4%2021.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pricetag($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pricetag-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pricetags-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M442%20107v141L229.2%20451.7c8%208%2020.8%2012.3%2028.8%2012.3s22.8-3.7%2031.4-12.3L480%20272V144l-38-37z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%2048H224L44.3%20235.6c-8%208-12%2017.8-12.3%2028.4-.3%2011.3%203.7%2023.3%2012.3%2031.9l123.8%20123.6c8%208%2020.8%2012.5%2028.8%2012.5s22.7-3.9%2031.3-12.5L416%20240V80l-32-32zm-30.7%20102.7c-21.7%206.1-41.3-10-41.3-30.7%200-17.7%2014.3-32%2032-32%2020.7%200%2036.8%2019.6%2030.7%2041.3-2.9%2010.3-11.1%2018.5-21.4%2021.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pricetags($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pricetags-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-print-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M399.95%20160h-287.9C76.824%20160%2048%20188.803%2048%20224v138.667h79.9V448h256.2v-85.333H464V224c0-35.197-28.825-64-64.05-64zM352%20416H160V288h192v128zm32.1-352H127.9v80h256.2V64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-print($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-print-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-pulse-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M428%20269c-21.5%200-40.6%2013.1-48.4%2033h-41.2L307%20221.3c-2.7-8.2-10.3-13.7-19-13.7h-.4c-8.8.2-16.4%206-18.8%2014.5l-33.6%20135.4-55.5-291.8C178%2055.6%20169.6%2048%20160%2048c-9.5%200-16.9%206.2-19.4%2016.2L90.3%20302H32v40h74c9.2%200%2017.2-6.2%2019.4-15.2l30.7-160.6%2054.1%20282.1c1.5%208.8%208.9%2015.1%2018.6%2015.7h1.2c9.3%200%2016.9-5.3%2019.2-13.5l40.2-162.9%2015.5%2040.7c2.7%208.2%2010.3%2013.7%2019%2013.7h56.4c8.3%2019%2027.1%2031%2047.6%2031%2013.9%200%2026.9-5.6%2036.8-15.8%209.8-10.1%2015.2-23.3%2015.2-37.2.1-28.6-22.7-51-51.9-51z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-pulse($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-pulse-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-qr-scanner-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20124.2c0-6.9%205.2-12.2%2012.2-12.2H176V64h-66.8C75.7%2064%2048%2090.7%2048%20124.2V192h48v-67.8zM403.6%2064H336v48h67.2c6.9%200%2012.8%205.2%2012.8%2012.2V192h48v-67.8c0-33.5-27-60.2-60.4-60.2zM416%20386.8c0%206.9-5.2%2012.2-12.2%2012.2H336v49h67.8c33.5%200%2060.2-27.7%2060.2-61.2V320h-48v66.8zM108.2%20399c-6.9%200-12.2-5.2-12.2-12.2V320H48v66.8c0%2033.5%2027.7%2061.2%2061.2%2061.2H176v-49h-67.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-qr-scanner($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-qr-scanner-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-quote-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96.4%20416h77.1l50.9-96.6V96h-160v223.4h77.1L96.4%20416zm224%200h77.1l50-96.6V96H288.4v223.4h82l-50%2096.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-quote($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-quote-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-radio-button-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm0%20374.4c-91.518%200-166.4-74.883-166.4-166.4S164.483%2089.6%20256%2089.6%20422.4%20164.482%20422.4%20256%20347.518%20422.4%20256%20422.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-radio-button-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-radio-button-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-radio-button-on-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20152c-57.2%200-104%2046.8-104%20104s46.8%20104%20104%20104%20104-46.8%20104-104-46.8-104-104-104zm0-104C141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm0%20374.4c-91.518%200-166.4-74.883-166.4-166.4S164.482%2089.6%20256%2089.6%20422.4%20164.482%20422.4%20256%20347.518%20422.4%20256%20422.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-radio-button-on($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-radio-button-on-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-radio-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M73.8%20141.9c-15.2%206-25.8%2021.8-25.8%2039.5v256c0%2023.5%2018.5%2042.7%2041.6%2042.7h332.8c23.1%200%2041.6-19.2%2041.6-42.7v-256c0-23.7-18.5-42.7-41.6-42.7H179l171.8-71.3L336.7%2032%2073.8%20141.9zM160%20438c-35.4%200-64-28.6-64-64s28.6-64%2064-64%2064%2028.6%2064%2064-28.6%2064-64%2064zm256-171.3h-32v-46.2h-44.8v46.2H96v-85.3h320v85.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-radio($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-radio-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-rainy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M139%20400s-23%2025.3-23%2040.7c0%2012.8%2010.3%2023.3%2023%2023.3s23-10.5%2023-23.3c0-15.4-23-40.7-23-40.7zM217%20368s-23%2025.3-23%2040.7c0%2012.8%2010.4%2023.3%2023%2023.3%2012.7%200%2023-10.5%2023-23.3%200-15.4-23-40.7-23-40.7zM295%20400s-23%2025.3-23%2040.7c0%2012.8%2010.3%2023.3%2023%2023.3%2012.6%200%2023-10.5%2023-23.3%200-15.4-23-40.7-23-40.7zM373%20368s-23%2025.3-23%2040.7c0%2012.8%2010.4%2023.3%2023%2023.3%2012.7%200%2023-10.5%2023-23.3%200-15.4-23-40.7-23-40.7zM393.2%20161.2C380.5%2096.6%20323.9%2048%20256%2048c-39.7%200-76%2014-100.9%2045.4%2034.3%202.6%2066.1%2015.2%2090.7%2039.8%2018.2%2018.2%2031%2040.5%2037.4%2064.8h-33.5c-15.3-43.7-56-75-105.7-75-6%200-14.3.7-20.6%202C70%20136%2032%20180.4%2032%20235.5%2032%20297.6%2079.4%20352%20141.2%20352h242.7c51.5%200%2096.2-46%2096.2-97.8-.1-49.4-38.4-89.6-86.9-93z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-rainy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-rainy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-recording-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M369.8%20160c-53.4%200-96.2%2042.8-96.2%2096%200%2023.6%207.9%2044.5%2021.9%2061.1h-78.8c14-16.6%2021.9-37.5%2021.9-61.1%200-53.2-42.9-96-96.2-96S46%20202.8%2046%20256s42.9%2096%2096.2%2096h227.5c53.4%200%2096.2-42.8%2096.2-96s-42.8-96-96.1-96zM142.2%20317.1C108.1%20317.1%2081%20290%2081%20256s27.1-61.1%2061.2-61.1%2061.2%2027.1%2061.2%2061.1-27%2061.1-61.2%2061.1zm227.6%200c-34.1%200-61.2-27.1-61.2-61.1s27.1-61.1%2061.2-61.1S431%20222%20431%20256s-27.1%2061.1-61.2%2061.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-recording($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-recording-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-redo-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20337.2L83.8%20352c22.9-69.7%2088.7-117.8%20166-117.8%2042.8%200%2081.5%2015.7%20111.8%2041.1L282.5%20352H480V160l-79.6%2076.3c-40.4-35.2-92.8-56.8-150.7-56.8-101.5.1-187.3%2066.2-217.7%20157.7z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-redo($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-redo-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-refresh-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.6%2048%2048%20141.6%2048%20256s93.6%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm112%20194h-98l44.8-44.8C300.1%20181.8%20279.1%20172%20256%20172c-46.2%200-84%2037.8-84%2084s37.8%2084%2084%2084c34.9%200%2065.3-21.2%2077.6-52h29.8c-13.9%2046.3-56.3%2080-107.4%2080-62.3%200-112-50.4-112-112s50.4-112%20112-112c30.8%200%2058.8%2012.6%2079.1%2032.9L368%20144v98z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-refresh-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-refresh-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-refresh-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20388c-72.597%200-132-59.405-132-132%200-72.6%2059.403-132%20132-132%2036.3%200%2069.3%2015.4%2092.406%2039.6L278%20234h154V80l-51.698%2051.702C348.406%2099.798%20304.406%2080%20256%2080c-96.797%200-176%2079.203-176%20176s78.094%20176%20176%20176c81.045%200%20148.287-54.134%20169.4-128h-46.55c-18.745%2049.56-67.138%2084-122.85%2084z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-refresh($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-refresh-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-remove-circle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.125%2048%2048%20141.125%2048%20256s93.125%20208%20208%20208%20208-93.125%20208-208S370.875%2048%20256%2048zm107%20229H149v-42h214v42z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-remove-circle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-remove-circle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-remove-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20235h320v42H96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-remove($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-remove-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-reorder-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M96%20348h320v36H96zM96%20128h320v36H96zM96%20200.7h320v35.6H96zM96%20275.8h320v35.6H96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-reorder($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-reorder-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-repeat-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M149.3%20152h213.3v62.4l85.3-83.2L362.7%2048v62.4h-256v124.8h42.7V152zm213.4%20208H149.3v-62.4L64%20380.8l85.3%2083.2v-62.4h256V276.8h-42.7V360z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-repeat($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-repeat-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-resize-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M297.6%2048l64.9%2064.9-249.6%20249.6L48%20297.6V464h166.4l-64.9-64.9%20249.6-249.6%2064.9%2064.9V48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-resize($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-resize-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-restaurant-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M164.852%20279.94l61.834-60.252L73.72%2071.706c-33.626%2032.764-33.626%2086.677%200%20119.44l91.132%2088.793z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M312.39%20241.88c33.635%2014.802%2080.282%204.232%20113.91-29.593%2041.22-40.165%2049.908-98.303%2017.362-128.96-31.465-31.71-91.13-23.245-132.354%2016.92-34.718%2033.826-45.566%2079.277-30.374%20110.987-47.74%2047.568-211.552%20207.173-211.552%20207.173L99.76%20448l149.71-145.866L399.176%20448l30.374-29.593-149.708-145.87%2032.547-30.657z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-restaurant($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-restaurant-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-return-left-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M432.8%20136v96H122.3l84.4-86.2-33.2-33.8L32%20256l141.5%20144%2033.2-33.8-84.4-86.2H480V136h-47.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-return-left($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-return-left-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-return-right-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20136v144h357.7l-84.4%2086.2%2033.2%2033.8L480%20256%20338.5%20112l-33.2%2033.8%2084.4%2086.2H79.2v-96H32z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-return-right($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-return-right-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-reverse-camera-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M440%2096h-88l-32-32H192l-32%2032H72c-22.1%200-40%2017.9-40%2040v272c0%2022.1%2017.9%2040%2040%2040h368c22.1%200%2040-17.9%2040-40V136c0-22.1-17.9-40-40-40zm-72%20171h-97.7l44.8-45.1c-14.7-15.4-35.7-25.5-58.8-25.5-46.2%200-84%2037.8-84%2084s37.8%2084%2084%2084c35.5%200%2066.2-21.5%2078.2-53.5h29.6c-13.4%2047-56.2%2081.5-107.8%2081.5-62.3%200-112-50.4-112-112s50.4-112%20112-112c30.8%200%2058.7%2012.6%2079%2032.9l32.8-32.9V267z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-reverse-camera($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-reverse-camera-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-rewind-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M249.6%20402V110L32%20256l217.6%20146zm12.8-146L480%20402V110L262.4%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-rewind($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-rewind-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-ribbon-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2032c-70.7%200-128%2057.3-128%20128s57.3%20128%20128%20128%20128-57.3%20128-128S326.7%2032%20256%2032zm0%20208c-44.2%200-80-35.8-80-80s35.8-80%2080-80%2080%2035.8%2080%2080-35.8%2080-80%2080zM193.7%20307.4c-19.1-8.1-36.2-19.6-50.8-34.3-1.4-1.4-2.8-2.8-4.1-4.3L64%20400h96l48%2080%2048-105.8%2025.5-56.2c-8.4%201.3-16.9%202-25.5%202-21.6%200-42.5-4.2-62.3-12.6zM373.3%20268.9c-1.3%201.4-2.7%202.9-4.1%204.3-14.6%2014.6-31.7%2026.2-50.7%2034.2L294%20361.2l-21.9%2048.4L304%20480l48-80h96l-74.7-131.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-ribbon($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-ribbon-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-rose-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M260.6%20214.8c23.8-40.9%2048-71.6%2091.4-96.4%208.3-4.8%2021.2-8%2022.8-8.9C290.7%2083.7%20256%2032%20256%2032s-34.7%2051.7-120.5%2076.5c5.8%203.4%2016.5%206.5%2030.7%2013.7%2034.5%2017.4%2062.5%2051.3%2094.4%2092.6zM246.3%20253.4C186.7%20161.2%20131.4%20126.8%2048%20126.8c54.2%2078.6%2052%20174.6%2052%20215.4%200%2076.1%2069.8%20137.8%20156%20137.8%2057.6%200%20107.9-27.6%20135-68.7-35.5-27.6-85.1-65.7-144.7-157.9zM464%20126.8s-55.2-2.3-85.2%2015.4c-43%2025.5-74.4%2061.3-95.4%20103.2%2038.8%2052%2073%2087.9%2095.4%20109.4%2010.7%2010.2%2019.8%2018.2%2027.5%2024.5%203.7-11.8%205.8-24.3%205.8-37.2-.1-40.8-17.4-114.1%2051.9-215.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-rose($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-rose-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-sad-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20288c-45.443%200-83.675%2026.076-102.205%2064h204.41c-18.53-37.924-56.762-64-102.205-64z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C140.563%2048%2048%20141.6%2048%20256s92.563%20208%20208%20208%20208-93.6%20208-208S370.4%2048%20256%2048zm0%20374.4c-91.518%200-166.404-74.883-166.404-166.4%200-91.518%2074.887-166.4%20166.404-166.4S422.404%20164.482%20422.404%20256%20347.518%20422.4%20256%20422.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M328.8%20235.2c17.683%200%2031.2-13.518%2031.2-31.2s-13.518-31.2-31.2-31.2-31.2%2013.518-31.2%2031.2%2013.518%2031.2%2031.2%2031.2zM183.2%20235.2c17.682%200%2031.2-13.518%2031.2-31.2s-13.52-31.2-31.2-31.2c-17.683%200-31.2%2013.518-31.2%2031.2s13.518%2031.2%2031.2%2031.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-sad($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-sad-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-school-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M113.5%20281.2v85.3L256%20448l142.5-81.5v-85.3L256%20362.7l-142.5-81.5zM256%2064L32%20192l224%20128%20183.3-104.7v147.4H480V192L256%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-school($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-school-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-search-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M337.51%20305.372h-17.502l-6.57-5.486c20.79-25.232%2033.92-57.054%2033.92-93.257C347.36%20127.63%20283.897%2064%20205.136%2064%20127.452%2064%2064%20127.632%2064%20206.63s63.452%20142.627%20142.225%20142.627c35.01%200%2067.83-13.167%2092.99-34.008l6.562%205.486v17.55L415.18%20448%20448%20415.086%20337.51%20305.372zm-131.285%200c-54.702%200-98.463-43.887-98.463-98.743%200-54.86%2043.76-98.743%2098.463-98.743%2054.7%200%2098.462%2043.884%2098.462%2098.742%200%2054.855-43.762%2098.742-98.462%2098.742z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-search($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-search-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-send-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M48%20448l416-192L48%2064v149.333L346%20256%2048%20298.667z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-send($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-send-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-settings-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M413.967%20276.8c1.06-6.235%201.06-13.518%201.06-20.8s-1.06-13.518-1.06-20.8l44.667-34.318c4.26-3.118%205.32-8.317%202.13-13.518l-42.55-71.764c-2.128-4.164-8.506-6.235-12.766-4.164l-53.186%2020.8c-10.638-8.317-23.394-15.6-36.16-20.8l-7.448-55.117c-1.06-4.155-5.32-8.32-10.638-8.32h-85.098c-5.318%200-9.577%204.165-10.637%208.32l-8.507%2055.116c-12.767%205.2-24.464%2012.482-36.17%2020.8l-53.187-20.8c-5.32-2.07-10.638%200-12.767%204.164L49.1%20187.365c-2.12%204.153-1.06%2010.4%202.13%2013.518L96.97%20235.2c0%207.282-1.06%2013.518-1.06%2020.8s1.06%2013.518%201.06%2020.8l-44.668%2034.318c-4.26%203.118-5.318%208.317-2.13%2013.518l42.55%2071.764c2.13%204.164%208.507%206.235%2012.766%204.164l53.187-20.8c10.637%208.317%2023.394%2015.6%2036.16%2020.8l8.508%2055.117c1.07%205.2%205.318%208.32%2010.637%208.32h85.098c5.32%200%209.578-4.165%2010.638-8.32l8.518-55.116c12.757-5.2%2024.464-12.482%2036.16-20.8l53.187%2020.8c5.32%202.07%2010.638%200%2012.768-4.164l42.55-71.765c2.128-4.153%201.06-10.4-2.13-13.518l-46.8-34.317zm-158.5%2052c-41.488%200-74.46-32.235-74.46-72.8s32.972-72.8%2074.46-72.8%2074.462%2032.235%2074.462%2072.8-32.973%2072.8-74.462%2072.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-settings($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-settings-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-share-alt-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M448%20248L288%2096v85.334C138.666%20202.667%2085.333%20309.334%2064%20416c53.333-74.666%20117.333-108.802%20224-108.802v87.47L448%20248z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-share-alt($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-share-alt-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-share-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M383.822%20344.427c-16.045%200-31.024%205.326-41.72%2015.98l-152.958-88.42c1.07-5.33%202.142-9.594%202.142-14.92%200-5.328-1.07-9.593-2.142-14.92l150.826-87.35c11.762%2010.654%2026.74%2017.042%2043.852%2017.042%2035.295%200%2064.178-28.767%2064.178-63.92C448%2072.766%20419.117%2044%20383.822%2044c-35.297%200-64.18%2028.767-64.18%2063.92%200%205.327%201.066%209.593%202.143%2014.92l-150.82%2087.35c-11.768-10.655-26.742-17.042-43.857-17.042-35.296%200-63.108%2028.766-63.108%2063.92%200%2035.153%2028.877%2063.92%2064.178%2063.92%2017.115%200%2032.09-6.39%2043.856-17.042l151.89%2088.42c-1.075%204.256-2.14%208.522-2.14%2013.848%200%2034.094%2027.806%2061.787%2062.037%2061.787%2034.23%200%2062.037-27.692%2062.037-61.786s-27.805-61.787-62.035-61.787z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-share($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-share-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-shirt-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M320%2064c-11.1%2019.1-40.3%2032-64%2032s-52.9-12.9-64-32L64%2096v96l77-16-13%20272h256l-13-272%2077%2016V96L320%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-shirt($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-shirt-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-shuffle-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M222.2%20188.1L97.8%2064%2064%2097.8l124.1%20124.1%2034.1-33.8zM316%2064l49%2049L64%20414.2%2097.8%20448%20399%20147l49%2049V64H316zm7.9%20225.8l-33.8%2033.8%2075.1%2075.1L316%20448h132V316l-49%2049-75.1-75.2z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-shuffle($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-shuffle-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-skip-backward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M170.7%20256L448%20448V64L170.7%20256zM64%2064h64v384H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-skip-backward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-skip-backward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-skip-forward-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%2064v384l277.3-192L64%2064zM384%2064h64v384h-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-skip-forward($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-skip-forward-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-snow-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M461.4%20298.5l-8.3-30.9-88%2023.6-60.4-34.9%2060.4-34.9%2088%2023.6%208.3-30.9-57.1-15.3%2057.7-33.3-24-41.5-56.6%2032.7%2015.3-57.1-30.9-8.3-23.6%2088-62.2%2035.9v-71.1l64.5-64.4-22.7-22.6L280%2098.9V32h-48v65.6l-41.7-41.7-22.6%2022.6%2064.3%2064.4v71.4l-60.7-35-23.6-88-30.9%208.3%2015.3%2057.1-57.7-33.4-24%2041.6%2056.7%2032.7L50%20212.9l8.3%2030.9%2087.9-23.6%2062.6%2036.1-62.6%2036.2-87.9-23.6-8.3%2030.9%2057.1%2015.3-56.7%2032.7%2024%2041.5%2057.7-33.3-15.3%2057%2030.9%208.3%2023.6-87.9%2060.7-35.1v70.9l-64.3%2064.4%2022.6%2022.6%2041.7-41.8V480h48v-66.8l41.9%2041.7%2022.5-22.6L280%20368v-70.6l62.2%2036%2023.6%2087.9%2030.9-8.3-15.3-57%2056.6%2032.7%2024-41.6-57.7-33.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-snow($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-snow-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-speedometer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20416h256v48H128zM256%20288c17.7%200%2032-14.3%2032-32s-14.3-32-32-32c-3%200-6%20.4-8.8%201.2l-66.7-48.7-4%203.5%2048.9%2066.7c-.9%202.9-1.4%206-1.4%209.3%200%2017.7%2014.3%2032%2032%2032z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048C141.1%2048%2048%20141.1%2048%20256c0%2048.3%2016.5%2092.7%2044.1%20128h58.8l4-4%2022.1-22.1-22.9-22.9-22.1%2022c-19.9-24.3-32.1-54-35.2-85H128v-32H96.8c3.1-31%2015.3-60.7%2035.2-85l22.1%2022%2022.9-22.9-22-22.1c24.3-19.9%2054-32.1%2085-35.2V128h32V96.8c31%203.1%2060.7%2015.3%2085%2035.2l-22%2022.1%2022.9%2022.9%2022.1-22c19.9%2024.3%2032.1%2054%2035.2%2085H384v32h31.2c-3.1%2031-15.3%2060.7-35.2%2085l-22.1-22-22.9%2022.9%2022.1%2022.1%204%204h58.8c27.6-35.3%2044.1-79.7%2044.1-128%200-114.9-93.1-208-208-208z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-speedometer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-speedometer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-square-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.333%20106.667v298.666H106.667V106.667h298.666m0-42.667H106.667C83.197%2064%2064%2083.198%2064%20106.667v298.666C64%20428.803%2083.198%20448%20106.667%20448h298.666c23.47%200%2042.667-19.198%2042.667-42.667V106.667C448%2083.197%20428.802%2064%20405.333%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-square-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-square-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-square-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.333%2064H106.667C83.197%2064%2064%2083.198%2064%20106.667v298.666C64%20428.803%2083.198%20448%20106.667%20448h298.666c23.47%200%2042.667-19.198%2042.667-42.667V106.667C448%2083.197%20428.802%2064%20405.333%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-square($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-square-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-star-half-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M458%20210.41l-145.267-12.477L256%2064l-56.743%20133.934L54%20210.41l110.192%2095.523L131.162%20448%20256%20372.686%20380.83%20448l-33.02-142.066L458%20210.41zM272.53%20345.286L256%20335.313l-.002-189.277%2027.27%2064.38%207.52%2017.75%2019.208%201.65%2069.846%205.998-52.993%2045.94-14.577%2012.635%204.367%2018.787%2015.875%2068.3-59.984-36.19z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-star-half($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-star-half-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-star-outline-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M458%20210.41l-145.267-12.477L256%2064l-56.743%20133.934L54%20210.41l110.192%2095.523L131.162%20448%20256%20372.686%20380.83%20448l-33.02-142.066L458%20210.41zM272.53%20345.285L256%20335.312l-16.53%209.973-59.988%2036.19%2015.88-68.295%204.368-18.79-14.577-12.637-52.994-45.94%2069.835-5.997%2019.206-1.65%207.522-17.75%2027.276-64.38%2027.27%2064.378%207.52%2017.75%2019.208%201.65%2069.846%206-52.993%2045.938-14.577%2012.636%204.367%2018.788%2015.875%2068.3-59.984-36.19z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-star-outline($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-star-outline-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-star-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20372.686L380.83%20448l-33.02-142.066L458%20210.41l-145.267-12.476L256%2064l-56.743%20133.934L54%20210.41l110.192%2095.524L131.162%20448z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-star($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-star-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-stats-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M176%2064h64v384h-64zM80%20336h64v112H80zM272%20272h64v176h-64zM368%20176h64v272h-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-stats($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-stats-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-stopwatch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M232%20306.667h48V176h-48v130.667z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M407.67%20170.27l30.786-30.785-33.942-33.94-30.785%2030.785C341.216%20111.057%20300.37%2096%20256%2096%20149.96%2096%2064%20181.96%2064%20288s85.96%20192%20192%20192%20192-85.96%20192-192c0-44.37-15.057-85.217-40.33-117.73zm-45.604%20223.796C333.734%20422.398%20296.066%20438%20256%20438s-77.735-15.602-106.066-43.934C121.602%20365.736%20106%20328.066%20106%20288s15.602-77.735%2043.934-106.066C178.264%20153.602%20215.934%20138%20256%20138s77.734%2015.602%20106.066%2043.934C390.398%20210.264%20406%20247.934%20406%20288s-15.602%2077.735-43.934%20106.066zM192%2032h128v48H192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-stopwatch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-stopwatch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-subway-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2048c-93.864%200-176%2010.668-176%2085.334v213.332c0%2041.604%2033.062%2074.666%2074.667%2074.666L128%20448v16h256v-16l-26.667-26.668c41.604%200%2074.667-33.062%2074.667-74.666V133.334C432%2058.668%20349.864%2048%20256%2048zm-96%20336c-18.136%200-32-13.865-32-32%200-18.137%2013.864-32%2032-32s32%2013.863%2032%2032c0%2018.135-13.864%2032-32%2032zm80-144H128v-96h112v96zm112%20144c-18.136%200-32-13.865-32-32%200-18.137%2013.864-32%2032-32s32%2013.863%2032%2032c0%2018.135-13.864%2032-32%2032zm32-144H272v-96h112v96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-subway($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-subway-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-sunny-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M277.3%2032h-42.7v64h42.7V32zm129.1%2043.7L368%20114.1l29.9%2029.9%2038.4-38.4-29.9-29.9zm-300.8%200l-29.9%2029.9%2038.4%2038.4%2029.9-29.9-38.4-38.4zM256%20128c-70.4%200-128%2057.6-128%20128s57.6%20128%20128%20128%20128-57.6%20128-128-57.6-128-128-128zm224%20106.7h-64v42.7h64v-42.7zm-384%200H32v42.7h64v-42.7zM397.9%20368L368%20397.9l38.4%2038.4%2029.9-29.9-38.4-38.4zm-283.8%200l-38.4%2038.4%2029.9%2029.9%2038.4-38.4-29.9-29.9zm163.2%2048h-42.7v64h42.7v-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-sunny($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-sunny-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-swap-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M131.3%20231.1L32%20330.6l99.3%2099.4v-74.6h174.5v-49.7H131.3v-74.6zM480%20181.4L380.7%2082v74.6H206.2v49.7h174.5v74.6l99.3-99.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-swap($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-swap-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-switch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M168%20216h94.9c14.5%2014.8%2034.7%2024%2057.1%2024%2044.2%200%2080-35.8%2080-80s-35.8-80-80-80c-22.4%200-42.6%209.2-57.1%2024H168c-30.8%200-56%2025.2-56%2056s25.2%2056%2056%2056zm-16.9-72.9c4.6-4.6%2010.6-7.1%2016.9-7.1h75.7c-2.4%207.6-3.7%2015.6-3.7%2024s1.3%2016.4%203.7%2024H168c-6.3%200-12.4-2.5-16.9-7.1-4.6-4.6-7.1-10.6-7.1-16.9s2.5-12.4%207.1-16.9zM344%20296h-94.9c-14.5-14.8-34.7-24-57.1-24-44.2%200-80%2035.8-80%2080s35.8%2080%2080%2080c22.4%200%2042.6-9.2%2057.1-24H344c30.8%200%2056-25.2%2056-56s-25.2-56-56-56zm16.9%2072.9c-4.6%204.6-10.6%207.1-16.9%207.1h-75.7c2.4-7.6%203.7-15.6%203.7-24s-1.3-16.4-3.7-24H344c6.3%200%2012.4%202.5%2016.9%207.1%204.6%204.6%207.1%2010.6%207.1%2016.9s-2.5%2012.4-7.1%2016.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-switch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-switch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-sync-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%2093.09V32l-80%2081.454%2080%2081.456v-61.093c65.996%200%20120%2054.982%20120%20122.183%200%2020.363-5%2039.714-14.004%2057.016L391%20342.546c15.996-25.456%2025-54.987%2025-86.546%200-89.6-72.002-162.91-160-162.91zm0%20285.094c-66%200-120-54.988-120-122.184%200-20.363%205-39.71%2014-57.02l-29-29.526C105%20193.89%2096%20224.436%2096%20256c0%2089.6%2072.002%20162.91%20160%20162.91V480l80-81.453-80-81.457v61.094z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-sync($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-sync-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-tablet-landscape-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20120v272c0%2013.3%2010.7%2024%2024%2024h400c13.3%200%2024-10.7%2024-24V120c0-13.3-10.7-24-24-24H56c-13.3%200-24%2010.7-24%2024zm384%208v256H80V128h336zm46%20128c0%207.7-6.5%2014-14.1%2014-7.5%200-14-6.2-14-14%200-7.7%206.4-14.1%2014-14.1%207.6.1%2014.1%206.4%2014.1%2014.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-tablet-landscape($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-tablet-landscape-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-tablet-portrait-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M392%2032H120c-13.3%200-24%2010.7-24%2024v400c0%2013.3%2010.7%2024%2024%2024h272c13.3%200%2024-10.7%2024-24V56c0-13.3-10.7-24-24-24zm-8%20384H128V80h256v336zm-128%2046c-7.7%200-14-6.5-14-14.1%200-7.5%206.2-14%2014-14%207.7%200%2014.1%206.4%2014.1%2014-.1%207.6-6.4%2014.1-14.1%2014.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-tablet-portrait($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-tablet-portrait-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-tennisball-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M383.8%2092.2C348.5%2064.5%20304.1%2048%20256%2048c-48%200-92.3%2016.5-127.6%2044%2041.6%2044.8%2064.3%20103%2064%20164.3-.3%2061-23.3%20118.6-64.9%20162.9%2035.4%2028%2080.1%2044.8%20128.5%2044.8%2048.5%200%2093.3-16.8%20128.8-45-41.5-44.3-64.5-101.8-64.8-162.7-.3-61.2%2022.3-119.3%2063.8-164.1z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M353.1%20255.1c0%2026.9%205.1%2053%2015.1%2077.8%209.6%2023.6%2023.3%2044.9%2040.8%2063.6%2034.1-37.1%2055-86.5%2055-140.5%200-54.5-21.2-104.2-55.8-141.4-17.1%2018.5-30.6%2039.6-40%2062.7-10%2024.8-15.1%2051-15.1%2077.8zM159.3%20255.1c0-26.9-5.1-53-15.1-77.8-9.4-23.2-22.9-44.4-40.2-62.9-34.7%2037.2-56%2087-56%20141.6%200%2054.2%2021%20103.6%2055.2%20140.7%2017.6-18.7%2031.4-40.1%2041-63.8%2010-24.7%2015.1-50.9%2015.1-77.8z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-tennisball($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-tennisball-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-text-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M408%2064H96c-22.002%200-32%2017.998-32%2040v344l64-64h280c22.002%200%2040-17.998%2040-40V104c0-22.002-17.998-40-40-40zM198.4%20242H160v-40h38.4v40zm76.8%200h-38.4v-40h38.4v40zm76.8%200h-38.4v-40H352v40z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-text($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-text-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-thermometer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M303%20300.2V78.4c0-25.7-21-46.5-47-46.5s-47%2020.8-47%2046.5v221.9c-29%2016.5-48.9%2047.8-48.9%2083.7%200%2053%2043%2096%2096%2096s96-43%2096-96c0-36-20.1-67.3-49.1-83.8zM240%2078.4c0-8%207.7-14.5%2016-14.5s16%206.5%2016%2014.5V128h-32V78.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-thermometer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-thermometer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-thumbs-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M314%2064H142c-15.7%200-28.6%209.6-34.2%2023.4L50.6%20222.8c-1.7%204.4-2.6%209-2.6%2014v38.6c0%2021.1%2017%2044.6%2037.8%2044.6h119.3l-18%2081.5-.6%206c0%207.9%203.2%2015.1%208.3%2020.3l20%2020.1L341%20320.7c6.8-6.9%2011-16.5%2011-27.1v-192c0-21.1-17.2-37.6-38-37.6zM400%2064h64v224h-64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-thumbs-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-thumbs-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-thumbs-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M198%20448h172c15.7%200%2028.6-9.6%2034.2-23.4l57.1-135.4c1.7-4.4%202.6-9%202.6-14v-38.6c0-21.1-17-44.6-37.8-44.6H306.9l18-81.5.6-6c0-7.9-3.2-15.1-8.3-20.3L297%2064%20171%20191.3c-6.8%206.9-11%2016.5-11%2027.1v192c0%2021.1%2017.2%2037.6%2038%2037.6zM48%20224h64v224H48z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-thumbs-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-thumbs-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-thunderstorm-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M393.2%20161.2C380.5%2096.6%20323.9%2048%20256%2048c-39.7%200-76%2014-100.9%2045.4%2034.3%202.6%2066.1%2015.2%2090.7%2039.8%2018.2%2018.2%2031%2040.5%2037.4%2064.8h-33.5c-15.3-43.7-56-75-105.7-75-6%200-14.3.7-20.6%202C70%20136%2032%20180.4%2032%20235.5%2032%20297.6%2082.2%20336%20144%20336h68V233h99.1l-33.2%2067H311l-18%2036h93.7c51.5%200%2093.3-30%2093.3-81.8%200-49.4-38.3-89.6-86.8-93zM212%20368h22v96l59-128h-81z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-thunderstorm($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-thunderstorm-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-time-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cg%20fill-opacity%3D%22.9%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M255.8%2048C141%2048%2048%20141.2%2048%20256s93%20208%20207.8%20208c115%200%20208.2-93.2%20208.2-208S370.8%2048%20255.8%2048zm.2%20374.4c-91.9%200-166.4-74.5-166.4-166.4S164.1%2089.6%20256%2089.6%20422.4%20164.1%20422.4%20256%20347.9%20422.4%20256%20422.4z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M266.4%20152h-31.2v124.8l109.2%2065.5%2015.6-25.6-93.6-55.5V152z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-time($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-time-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-timer-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M232.9%20371.6c0%2012.7%2010.4%2023.1%2023.1%2023.1s23.1-10.4%2023.1-23.1c0-12.7-10.4-23.1-23.1-23.1s-23.1%2010.3-23.1%2023.1zm0-323.6v92.4h46.2V96.1c78.3%2011.3%20138.7%2078.3%20138.7%20159.9%200%2089.4-72.3%20161.8-161.8%20161.8S94.2%20345.4%2094.2%20256c0-38.8%2013.6-74.4%2036.5-102.2L256%20279.1l32.6-32.6L131.4%2089.4v.5C80.8%20127.7%2048%20187.8%2048%20256c0%20114.9%2092.9%20208%20208%20208%20114.9%200%20208-93.1%20208-208S370.9%2048%20256%2048h-23.1zm161.8%20208c0-12.7-10.4-23.1-23.1-23.1-12.7%200-23.1%2010.4-23.1%2023.1s10.4%2023.1%2023.1%2023.1c12.7%200%2023.1-10.4%2023.1-23.1zm-277.4%200c0%2012.7%2010.4%2023.1%2023.1%2023.1s23.1-10.4%2023.1-23.1-10.4-23.1-23.1-23.1-23.1%2010.4-23.1%2023.1z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-timer($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-timer-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-train-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M80%20346.666c0%2041.604%2033.062%2074.666%2074.667%2074.666L128%20448v16h256v-16l-26.667-26.668c41.604%200%2074.667-33.062%2074.667-74.666V133.334C432%2058.668%20349.864%2048%20256%2048S80%2058.668%2080%20133.334v213.332zM256%20376c-22.002%200-40-17.997-40-40s17.998-40%2040-40%2040%2018%2040%2040-17.998%2040-40%2040zm128-152H128v-96h256v96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-train($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-train-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-transgender-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352%2032v35h63.1l-81.4%2080.5c-7.5-7.2-13.2-11-13.2-11C302.2%20123.6%20280%20116%20256%20116c-30.2%200-57.6%2012-77.8%2031.4l-15.2-15%2031.4-31.4-28.5-28.5-31.5%2031.5-37.5-37H160V32H32v128h35V91.3l40.3%2039.9-31.2%2031.2%2028.5%2028.5%2031.4-31.4%2019.4%2019.2c-7.3%2014.9-11.5%2031.7-11.5%2049.5%200%2054.8%2039.5%20100.4%2091.1%20110.2v45.3h-63V424h63v56h42v-56h63v-40.2h-63v-45.3c50.8-9.9%2091.2-55.5%2091.2-110.3%200-17.7-4.2-34.8-11.5-49.6L445%2091.3V160h35V32H352zm-96%20258c-35.3%200-64-28.7-64-64s28.7-64%2064-64%2064%2028.7%2064%2064-28.7%2064-64%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-transgender($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-transgender-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-trash-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M128%20405.43c0%2023.416%2019.198%2042.57%2042.667%2042.57h170.667C364.802%20448%20384%20428.846%20384%20405.43V160H128v245.43zM416%2096h-80l-26.785-32h-106.43L176%2096H96v32h320V96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-trash($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-trash-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-trending-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M480%20397V262.5l-51.3%2051.3-141.1-141-89.6%2089.7L63.6%20128%2032%20159.6l166%20166.3%2089.6-89.7%20109.3%20109.4-51.3%2051.4H480z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-trending-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-trending-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-trending-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M345.6%20128l51.3%2051.3-109.3%20109.4-89.6-89.6L32%20365.4%2063.6%20397%20198%20262.5l89.6%2089.7%20141.1-141%2051.3%2051.3V128H345.6z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-trending-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-trending-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-trophy-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M392%20105c.9-27%20.2-56%20.1-57H119.3c0%201-.8%2030%20.1%2057H48c0%2068%209.9%20102.3%2021%20126.7S95.4%20277%20127.7%20302c30.1%2023.3%2095.5%2053.6%20104.3%2057.6v28.3c-4.6%2010-23.5%2028.2-83.3%2028.2H128v48h256v-48h-25.7c-60.7%200-75-19.1-78.3-28.2v-28.3c9.3-4.6%2080.9-40.3%20104.4-57.5%2025.2-18.4%2050.9-51.5%2058.7-70.3S464%20167%20464%20105h-72zM109.6%20211.9c-8.8-18.2-14-37.9-15.7-61.9h28.7c.7%206%201.4%2011.3%202.3%2016.3%206.6%2039.2%2014.8%2070.2%2025.7%2096.5-17.3-13.5-31.3-30.8-41-50.9zm292.8%200c-9.9%2020.3-24%2037.7-41.6%2051.3%2011-26.2%2019-56.8%2025.8-96.9.8-5%201.6-10.3%202.3-16.3h29.3c-1.8%2024-6.9%2043.7-15.8%2061.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-trophy($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-trophy-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-umbrella-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M410.1%20244.1c12%200%2026.6%2010.9%2033.8%2025.9H464c-.3-50-21.2-101.5-59.4-140.9-36.3-37.4-83-60.5-132.6-65.7-3-9-11.5-15.4-21.6-15.4-10%200-18.5%206.5-21.5%2015.3C125.3%2073.8%2048%20159.7%2048%20266.2c0%201.1.1%201.8.4%203.8h21.8c6.8-15%2022.2-25.9%2035.3-25.9%2017%200%2031.5%2010.9%2036.5%2025.9h19.8c4.1-15%2016.9-25.7%2033-25.7%2017.8%200%2033.1%2014.5%2034.1%2032.6v118.3c0%209.3.1%2024.1-13.4%2024.1-6.9%200-16.6-1.8-16.6-16V382h-43v21.3c0%2034.6%2023.6%2060.7%2060%2060.7%2019.5%200%2033.3-8.5%2043.5-18.7%2013.1-13.2%2013.5-34.7%2013.5-50.1V276.1c2-25.8%2023.9-31.7%2041.9-31.7%2017.2%200%2032.3%2011.6%2037.8%2025.6h20.5c5.1-15%2019.8-25.9%2037-25.9z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-umbrella($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-umbrella-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-undo-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M262.3%20179.6c-57.9%200-110.3%2021.6-150.7%2056.8L32%20160v192h197.5l-79.1-76.8c30.4-25.3%2069-41.1%20111.8-41.1%2077.3%200%20143.1%2048.2%20166%20117.8l51.8-14.8c-30.4-91.4-116.2-157.5-217.7-157.5z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-undo($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-undo-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-unlock-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M376%20186h-20v-40c0-55-45-100-100-100S156%2091%20156%20146h37.998c0-34.004%2028.003-62.002%2062.002-62.002%2034.004%200%2062.002%2027.998%2062.002%2062.002H318v40H136c-22.002%200-40%2017.998-40%2040v200c0%2022.002%2017.998%2040%2040%2040h240c22.002%200%2040-17.998%2040-40V226c0-22.002-17.998-40-40-40zM256%20368c-22.002%200-40-17.998-40-40s17.998-40%2040-40%2040%2017.998%2040%2040-17.998%2040-40%2040z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-unlock($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-unlock-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-videocam-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M384%20219.5v-85.2c0-13.4-11.2-24.3-24.9-24.3H56.9C43.2%20110%2032%20120.9%2032%20134.3v243.3C32%20391%2043.2%20402%2056.9%20402h302.2c13.7%200%2024.9-11%2024.9-24.3v-85.2l96%2097.3V122.2l-96%2097.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-videocam($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-videocam-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-volume-down-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20192v128h85.334L256%20431.543V80.458L149.334%20192H64zm288%2064c0-38.4-21.333-72.407-53.333-88.863v176.636C330.667%20328.408%20352%20294.4%20352%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-volume-down($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-volume-down-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-volume-mute-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20192v128h85.334L256%20431.543V80.458L149.334%20192H64z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-volume-mute($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-volume-mute-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-volume-off-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M405.5%20256c0%2022.717-4.883%2044.362-13.603%2063.855l31.88%2031.88C439.283%20323.33%20448%20290.653%20448%20256c0-93.256-64-172.254-149-192v44.978C361%20127.632%20405.5%20186.882%20405.5%20256zM256%2080.458l-51.02%2052.48%2051.02%2051.02zM420.842%20396.885L91.116%2067.157l-24%2024%2090.5%2090.413-8.28%2010.43H64v128h85.334L256%20431.543V280l94.915%2094.686C335.795%20387.443%20318%20397.213%20299%20403.022V448c31-7.172%2058.996-22.163%2082.315-42.81l39.61%2039.694%2024-24.043-24.002-24.038-.08.083z%22%2F%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M352.188%20256c0-38.4-21.188-72.407-53.188-88.863v59.82l50.8%2050.8A100.596%20100.596%200%200%200%20352.19%20256z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-volume-off($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-volume-off-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-volume-up-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M64%20192v128h85.334L256%20431.543V80.458L149.334%20192H64zm288%2064c0-38.4-21.333-72.407-53.333-88.863v176.636C330.667%20328.408%20352%20294.4%20352%20256zM298.667%2064v44.978C360.53%20127.632%20405.334%20186.882%20405.334%20256c0%2069.12-44.803%20128.37-106.667%20147.022V448C384%20428.254%20448%20349.257%20448%20256c0-93.256-64-172.254-149.333-192z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-volume-up($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-volume-up-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-walk-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M288%20112c22.223%200%2039.997-17.776%2039.997-40%200-22.225-17.774-40-39.997-40s-40.003%2017.775-40.003%2040c0%2022.224%2017.78%2040%2040.003%2040zM288%20232h104v-40h-72l-44.802-69.333C267.5%20111%20257.062%20104.53%20244.265%20104.53c-3.198%200-8.828.532-12.8%201.748L120%20144v112h40v-80l40.53-16L120%20480h40l56.698-164.27L267%20384v96h38V352l-57.03-96%2019.744-61.864L288%20232z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-walk($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-walk-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-warning-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M32%20464h448L256%2048%2032%20464zm248-64h-48v-48h48v48zm0-80h-48v-96h48v96z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-warning($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-warning-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-watch-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M416%20256c0-51-24.004-96-60.996-125L336%2016H176l-19.004%20115C120.004%20160%2096%20205%2096%20256c0%2050.996%2024.004%2095.996%2060.996%20125L176%20496h160l19.004-115C391.996%20351.996%20416%20306.996%20416%20256zm-280%200c0-66%2054.004-120%20120-120s120%2054%20120%20120c0%2065.996-54.004%20120-120%20120s-120-54.004-120-120z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-watch($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-watch-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-water-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M380.5%20163.3L256%2032%20131.5%20163.3c-68.6%2072.4-68.6%20190%200%20262.4C165.8%20461.9%20210.9%20480%20256%20480s90.2-18.1%20124.5-54.3c68.7-72.4%2068.7-190%200-262.4z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-water($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-water-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-wifi-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M256%20228.72c-22.88%200-41.597%2018.528-41.597%2041.18%200%2022.65%2018.718%2041.18%2041.597%2041.18%2022.878%200%2041.597-18.528%2041.597-41.18s-18.72-41.18-41.597-41.18zm124.8%2041.178c0-67.946-56.163-123.54-124.8-123.54S131.2%20201.953%20131.2%20269.9c0%2045.303%2024.96%2085.447%2062.396%20107.072l20.807-36.032c-24.972-14.417-41.604-40.153-41.604-71.04%200-45.295%2037.432-82.358%2083.2-82.358%2045.77%200%2083.2%2037.063%2083.2%2082.358%200%2030.887-16.632%2056.623-41.603%2071.04l20.807%2036.032c37.433-21.624%2062.396-61.77%2062.396-107.072zM256%2064C141.597%2064%2048%20156.654%2048%20269.898%2048%20346.085%2089.592%20411.968%20152%20448l20.8-36.032c-49.92-28.824-83.208-81.324-83.208-142.07%200-90.592%2074.89-164.717%20166.408-164.717%2091.517%200%20166.406%2074.126%20166.406%20164.72%200%2060.744-33.284%20114.27-83.205%20142.068L360%20448c62.406-36.032%20104-101.915%20104-178.102C464%20156.654%20370.403%2064%20256%2064z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-wifi($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-wifi-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-wine-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M234.667%20277.333V408H128v40h256v-40H277.333V277.333L448%20106.667V64H64v42.667l170.667%20170.666zm-74.667-128l-42.667-42.666h277.334L352%20149.333H160z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-wine($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-wine-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n@function ion-md-woman-image($color: #000000) {\n  @return url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cpath%20fill%3D%22#{ion-fix-color($color)}%22%20d%3D%22M190.4%20148.6L161%20252.9c-6.3%2022.8%2020.7%2031.7%2027.3%2010.3l26.3-96.2h7.4l-45.2%20169H219v127c0%2023%2032%2023%2032%200V336h10v127c0%2023%2031%2023%2031%200V336h43.4l-46.2-169h8.4l26.3%2096.2c6.5%2021.9%2033.3%2012.5%2027.3-10.2l-29.4-104.4c-4-11.8-18.2-32.6-42-33.6h-47.3c-24.6%201-38.7%2021.6-42.1%2033.6zM292.6%2069.2c0-20.6-16.4-37.3-36.6-37.3-20.2%200-36.6%2016.7-36.6%2037.3%200%2020.6%2016.4%2037.3%2036.6%2037.3%2020.2%200%2036.6-16.7%2036.6-37.3z%22%2F%3E%3C%2Fsvg%3E\");\n}\n\n@mixin ion-md-woman($size: 16px, $color: #000000) {\n  @include ion-base;\n  background: ion-md-woman-image($color) center center / $size $size no-repeat;\n  height: $size;\n  width: $size;\n}\n\n"
  },
  {
    "path": "src/sass/vendor/modularscale/_modularscale.scss",
    "content": "// https://github.com/modularscale/modularscale-sass v3.0.3\n\n// Ratios\n@use \"sass:math\";\n\n$double-octave    : 4                 ;\n$pi               : 3.14159265359     ;\n$major-twelfth    : 3                 ;\n$major-eleventh   : 2.666666667       ;\n$major-tenth      : 2.5               ;\n$octave           : 2                 ;\n$major-seventh    : 1.875             ;\n$minor-seventh    : 1.777777778       ;\n$major-sixth      : 1.666666667       ;\n$phi              : 1.618034          ;\n$golden           : $phi              ;\n$minor-sixth      : 1.6               ;\n$fifth            : 1.5               ;\n$augmented-fourth : 1.41421           ;\n$fourth           : 1.333333333       ;\n$major-third      : 1.25              ;\n$minor-third      : 1.2               ;\n$major-second     : 1.125             ;\n$minor-second     : 1.066666667       ;\n\n// Base config\n$ms-base          : 1em       !default;\n$ms-ratio         : $fifth    !default;\n$modularscale     : ()        !default;// Parse settings starting with defaults.\n// Settings should cascade down like you would expect in CSS.\n// More specific overrides previous settings.\n\n@function ms-settings($b: false, $r: false, $t: false, $m: $modularscale) {\n  $base: $ms-base;\n  $ratio: $ms-ratio;\n  $thread: map-get($m, $t);\n\n  // Override with user settings\n  @if map-get($m, base) {\n    $base: map-get($m, base);\n  }\n  @if map-get($m, ratio) {\n    $ratio: map-get($m, ratio);\n  }\n\n  // Override with thread settings\n  @if $thread {\n    @if map-get($thread, base) {\n      $base: map-get($thread, base);\n    }\n    @if map-get($thread, ratio) {\n      $ratio: map-get($thread, ratio);\n    }\n  }\n\n  // Override with inline settings\n  @if $b {\n    $base: $b;\n  }\n  @if $r {\n    $ratio: $r;\n  }\n\n  @return $base $ratio;\n}// Sass does not have native pow() support so this needs to be added.\n// Compass and other libs implement this more extensively.\n// In order to keep this simple, use those when they are avalible.\n// Issue for pow() support in Sass: https://github.com/sass/sass/issues/684\n\n@function ms-pow($b,$e) {\n\n  // Return 1 if exponent is 0\n  @if $e == 0 {\n    @return 1;\n  }\n\n  // If pow() exists (compass or mathsass) use that.\n  @if function-exists('pow') {\n    @return pow($b,$e);\n  }\n\n  // This does not support non-integer exponents,\n  // Check and return an error if a non-integer exponent is passed.\n  @if (floor($e) != $e) {\n    // @error '\n// ======================================================================\n// Non-integer values are not supported in modularscale by default.\n\n// Try using mathsass in your project to add non-integer scale support.\n// https://github.com/terkel/mathsass\n// ======================================================================\n// '\n  }\n\n  // Seed the return.\n  $ms-return: $b;\n\n  // Multiply or divide by the specified number of times.\n  @if $e > 0 {\n    @for $i from 1 to $e {\n      $ms-return: $ms-return * $b;\n    }\n  }\n  @if $e < 0 {\n    @for $i from $e through 0 {\n      $ms-return: math.div($ms-return, $b);\n    }\n  }\n  @return $ms-return;\n}// Stripping units is not a best practice\n// This function should not be used elsewhere\n// It is used here because calc() doesn't do unit logic\n// AND target ratios use units as a hack to get a number.\n@function ms-unitless($val) {\n  @return math.div($val, $val - $val + 1);\n}// Basic list sorting\n// Would like to replace with http://sassmeister.com/gist/30e4863bd03ce0e1617c\n// Unfortunately libsass has a bug with passing arguments into the min() funciton.\n\n@function ms-sort($l) {\n\n  // loop until the list is confirmed to be sorted\n  $sorted: false;\n  @while $sorted == false {\n\n    // Start with the assumption that the lists are sorted.\n    $sorted: true;\n\n    // Loop through the list, checking each value with the one next to it.\n    // Swap the values if they need to be swapped.\n    // Not super fast but simple and modular scale doesn't lean hard on sorting.\n    @for $i from 2 through length($l) {\n      $n1: nth($l,$i - 1);\n      $n2: nth($l,$i);\n\n      // If the first value is greater than the 2nd, swap them.\n      @if $n1 > $n2 {\n        $l: set-nth($l, $i, $n1);\n        $l: set-nth($l, $i - 1, $n2);\n\n        // The list isn't sorted and needs to be looped through again.\n        $sorted: false;\n      }\n    }\n  }\n\n  // Return the sorted list.\n  @return $l;\n}// No reason to have decimal pixel values,\n// normalize them to whole numbers.\n\n@function ms-round-px($r) {\n  @if unit($r) == 'px' {\n    @return round($r);\n  }\n  @return $r;\n}// Convert number string to number\n@function ms-to-num($n) {\n  $l: str-length($n);\n  $r: 0;\n  $m: str-index($n,'.');\n  @if $m == null {\n    $m: $l + 1;\n  }\n  // Loop through digits and convert to numbers\n  @for $i from 1 through $l {\n    $v: str-slice($n,$i,$i);\n    @if $v == '1' { $v: 1; }\n    @else if $v == '2' { $v: 2; }\n    @else if $v == '3' { $v: 3; }\n    @else if $v == '4' { $v: 4; }\n    @else if $v == '5' { $v: 5; }\n    @else if $v == '6' { $v: 6; }\n    @else if $v == '7' { $v: 7; }\n    @else if $v == '8' { $v: 8; }\n    @else if $v == '9' { $v: 9; }\n    @else if $v == '0' { $v: 0; }\n    @else { $v: null; }\n    @if $v != null {\n      $m: $m - 1;\n      $r: $r + ms-pow(10,$m - 1) * $v;\n    } @else {\n      $l: $l - 1;\n    }\n  }\n  @return $r;\n}\n\n// Find a ratio based on a target value\n@function ms-target($t,$b) {\n  // Convert to string\n  $t: $t + '';\n  // Remove base units to calulate ratio\n  $b: ms-unitless(nth($b,1));\n  // Find where 'at' is in the string\n  $at: str-index($t,'at');\n\n  // Slice the value and target out\n  // and convert strings to numbers\n  $v: ms-to-num(str-slice($t,0,$at - 1));\n  $t: ms-to-num(str-slice($t,$at + 2));\n\n  // Solve the modular scale function for the ratio.\n  @return ms-pow(math.div($v, $b),math.div(1, $t));\n}@function ms-function($v: 0, $base: false, $ratio: false, $thread: false, $settings: $modularscale) {\n\n  // Parse settings\n  $ms-settings: ms-settings($base,$ratio,$thread,$settings);\n  $base: nth($ms-settings, 1);\n  $ratio: nth($ms-settings, 2);\n\n  // Render target values from settings.\n  @if unit($ratio) != '' {\n    $ratio: ms-target($ratio,$base)\n  }\n\n  // Fast calc if not multi stranded\n  @if(length($base) == 1) {\n    @return ms-round-px(ms-pow($ratio, $v) * $base);\n  }\n\n  // Create new base array\n  $ms-bases: nth($base,1);\n\n  // Normalize base values\n  @for $i from 2 through length($base) {\n    // initial base value\n    $ms-base: nth($base,$i);\n    // If the base is bigger than the main base\n    @if($ms-base > nth($base,1)) {\n      // divide the value until it aligns with main base.\n      @while($ms-base > nth($base,1)) {\n        $ms-base: math.div($ms-base, $ratio);\n      }\n      $ms-base: $ms-base * $ratio;\n    }\n    // If the base is smaller than the main base.\n    @else if ($ms-base < nth($base,1)) {\n      // pump up the value until it aligns with main base.\n      @while $ms-base < nth($base,1) {\n        $ms-base: $ms-base * $ratio;\n      }\n    }\n    // Push into new array\n    $ms-bases: append($ms-bases,$ms-base);\n  }\n\n  // Sort array from smallest to largest.\n  $ms-bases: ms-sort($ms-bases);\n\n  // Find step to use in calculation\n  $vtep: floor(math.div($v, length($ms-bases)));\n  // Find base to use in calculation\n  $ms-base: round((math.div($v, length($ms-bases)) - $vtep) * length($ms-bases)) + 1;\n\n  @return ms-round-px(ms-pow($ratio, $vtep) * nth($ms-bases,$ms-base));\n}// Generate calc() function\n// based on Mike Riethmuller's Precise control over responsive typography\n// http://madebymike.com.au/writing/precise-control-responsive-typography/\n@function ms-fluid($val1: 1em, $val2: 1em, $break1: 0, $break2: 0) {\n  $diff: ms-unitless($val2) - ms-unitless($val1);\n\n  // v1 + (v2 - v1) * ( (100vw - b1) / b2 - b1 )\n  @return calc( #{$val1} + #{ms-unitless($val2) - ms-unitless($val1)} * ( ( 100vw - #{$break1}) / #{ms-unitless($break2) - ms-unitless($break1)} ) );\n}\n\n// Main responsive mixin\n@mixin ms-respond($prop, $val, $map: $modularscale) {\n  $base: $ms-base;\n  $ratio: $ms-ratio;\n\n  $first-write: true;\n  $last-break: null;\n\n  // loop through all settings with a breakpoint type value\n  @each $v, $s in $map {\n    @if type-of($v) == number {\n      @if unit($v) != '' {\n\n        // Write out the first value without a media query.\n        @if $first-write {\n          #{$prop}: ms-function($val, $thread: $v, $settings: $map);\n\n          // Not the first write anymore, reset to false to move on.\n          $first-write: false;\n          $last-break: $v;\n        }\n\n        // Write intermediate breakpoints.\n        @else {\n          @media (min-width: $last-break) and (max-width: $v) {\n            $val1: ms-function($val, $thread: $last-break, $settings: $map);\n            $val2: ms-function($val, $thread: $v, $settings: $map);\n            #{$prop}: ms-fluid($val1,$val2,$last-break,$v);\n          }\n          $last-break: $v;\n        }\n      }\n    }\n  }\n\n  // Write the last breakpoint.\n  @if $last-break {\n    @media (min-width: $last-break) {\n      #{$prop}: ms-function($val, $thread: $last-break, $settings: $map);\n    }\n  }\n}// To attempt to avoid conflicts with other libraries\n// all funcitons are namespaced with `ms-`.\n// However, to increase usability, a shorthand function is included here.\n\n@function ms($v: 0, $base: false, $ratio: false, $thread: false, $settings: $modularscale) {\n  @return ms-function($v, $base, $ratio, $thread, $settings);\n}\n"
  },
  {
    "path": "src/scripts/v2017/_utils.scss",
    "content": "// Vendor\n@import '../_sass/2017/variables.scss';\n@import '../_sass/vendor/ionicons-inline/ionicons.scss';\n\n// Utilities\n@import '../_sass/2017/utils/_font-size.scss';\n@import '../_sass/2017/utils/gutter.scss';\n@import '../_sass/2017/utils/heading-style.scss';\n@import '../_sass/2017/utils/section-gutter.scss';\n@import '../_sass/2017/utils/section-with-container.scss';\n"
  },
  {
    "path": "src/scripts/v2017/behaviors_2/anchors.js",
    "content": "const DEFAULTS = {\n  // select elements to put anchor on\n  rule: 'h2[id]',\n  // class name for anchor\n  className: 'local-anchor anchor',\n  // text of anchor\n  text: '#',\n  // append before or after innerText?\n  shouldAppend: true\n}\n\n/*\n * Behavior: Add local anchors\n */\n\nexport function setupAnchors() {\n  document.querySelectorAll('[data-js-anchors]').forEach((parent) => {\n    const data = JSON.parse(parent.getAttribute('data-js-anchors') || '{}')\n    const rules = Array.isArray(data)\n      ? data.length\n        ? data\n        : [DEFAULTS]\n      : [Object.assign({}, DEFAULTS, data)]\n\n    for (const { rule, className, text, shouldAppend } of rules) {\n      for (const el of parent.querySelectorAll(rule)) {\n        if (!el.hasAttribute('id')) {\n          continue\n        }\n\n        const id = el.getAttribute('id')\n        const anchor = document.createElement('a')\n        anchor.setAttribute('href', `#${id}`)\n        anchor.setAttribute('class', className)\n        anchor.setAttribute('aria-hidden', 'true')\n        anchor.innerText = String(text || DEFAULTS.text)\n\n        if (shouldAppend) {\n          el.appendChild(anchor)\n        } else {\n          prepend(el, anchor)\n        }\n      }\n    }\n  })\n}\n\nfunction prepend(el, child) {\n  if (el.firstChild) {\n    el.insertBefore(child, el.firstChild)\n  } else {\n    el.appendChild(child)\n  }\n}\n"
  },
  {
    "path": "src/scripts/v2017/behaviors_2/dismiss.js",
    "content": "import { getData } from '../helpers/data'\nimport * as Dismiss from '../helpers/dismiss'\n\n/**\n * Dismiss button\n */\n\nexport function setupDismiss() {\n  document.querySelectorAll('[data-js-dismiss]').forEach((el) => {\n    const parent = el.closest('[data-js-dismissable]')\n    const dismissable = getData(parent, 'js-dismissable')\n    const id = (dismissable && dismissable.id) || ''\n\n    el.addEventListener('click', (e) => {\n      Dismiss.setDismissed(id)\n      e.preventDefault()\n      if (parent && parent.parentNode) parent.parentNode.removeChild(parent)\n    })\n  })\n}\n"
  },
  {
    "path": "src/scripts/v2017/behaviors_2/dismissable.js",
    "content": "import { getData } from '../helpers/data'\nimport { isDismissed } from '../helpers/dismiss'\nimport { isPreview } from '../helpers/preview'\n\nexport function setupDismissable() {\n  document.querySelectorAll('[data-js-dismissable]').forEach((el) => {\n    const id = getData(el, 'js-dismissable').id || ''\n\n    if (isPreview() || isDismissed(id)) {\n      el.parentNode.removeChild(el)\n    } else {\n      el.classList.remove('-hide')\n    }\n  })\n}\n"
  },
  {
    "path": "src/scripts/v2017/behaviors_2/disqus.js",
    "content": "import { onScrollVisible } from '~/lib/domutils/onScrollVisible'\nimport injectDisqus from '../helpers/inject_disqus'\n\n/**\n * Injects Disqus onto the page.\n */\n\nexport function setupDisqus() {\n  document.querySelectorAll('[data-js-disqus]').forEach((el) => {\n    const data = JSON.parse(el.getAttribute('data-js-disqus'))\n    const $parent = el.parentNode\n\n    onScrollVisible($parent, () => {\n      activateDisqus(data, $parent)\n    })\n  })\n}\n\nfunction activateDisqus(data, $parent) {\n  $parent.setAttribute('hidden', true)\n\n  window.disqus_config = function () {\n    this.page.url = data.url\n    this.page.identifier = data.identifier\n  }\n\n  // Disqus takes a while to load, don't do it so eagerly.\n  injectDisqus(data.host)\n  $parent.removeAttribute('hidden')\n}\n"
  },
  {
    "path": "src/scripts/v2017/behaviors_2/no-preview.js",
    "content": "import { isPreview } from '../helpers/preview'\n\n/*\n * Behavior: Things to remove when preview mode is on\n */\n\nexport function setupNoPreview() {\n  document.querySelectorAll('[data-js-no-preview]').forEach((el) => {\n    if (isPreview()) {\n      el.parentNode.removeChild(el)\n      document.documentElement.classList.add('PreviewMode')\n    }\n  })\n}\n"
  },
  {
    "path": "src/scripts/v2017/helpers/data.js",
    "content": "/**\n * Stores and retrieves data from an element. Works like jQuery.data().\n */\n\nexport function data(el, key, val) {\n  if (typeof val !== 'undefined') {\n    return getData(el, key)\n  } else {\n    return setData(el, key, val)\n  }\n}\n\nexport function getData(el, key) {\n  const str = el.getAttribute('data-' + key)\n  return JSON.parse(str || '{}')\n}\n\nexport function setData(el, key, val) {\n  el.setAttribute('data-' + key, JSON.stringify(val))\n}\n"
  },
  {
    "path": "src/scripts/v2017/helpers/dismiss.js",
    "content": "import * as Store from './store'\n\n/**\n * Dismisses an announcement.\n *\n * @example\n *     setDismissed('2017-09-02-happy-birthday')\n */\n\nexport function setDismissed(id) {\n  Store.update('dismissed', function (data) {\n    data[id] = true\n    return data\n  })\n}\n\n/**\n * Checks if an announcement has been dismissed before.\n *\n * @example\n *     setDismissed('2017-09-02-happy-birthday')\n *     isDismissed('2017-09-02-happy-birthday') => true\n */\n\nexport function isDismissed(id) {\n  const data = Store.fetch('dismissed')\n  return data && data[id]\n}\n"
  },
  {
    "path": "src/scripts/v2017/helpers/inject_disqus.js",
    "content": "/**\n * Injects disqus's scripts into the page.\n *\n * @example\n *     inject('devhints.disqus.com')\n */\n\nexport default function inject(host) {\n  injectEmbed(host)\n  injectCount(host)\n}\n\nexport function injectEmbed(host) {\n  const d = document\n  const s = d.createElement('script')\n  s.src = `https://${host}/embed.js`\n  s.setAttribute('data-timestamp', +new Date())\n  ;(d.head || d.body).appendChild(s)\n}\n\nexport function injectCount(host) {\n  const d = document\n  const s = d.createElement('script')\n  s.src = `https://${host}/count.js`\n  s.id = 'dsq-count-scr'\n  s.async = true\n  ;(d.head || d.body).appendChild(s)\n}\n"
  },
  {
    "path": "src/scripts/v2017/helpers/preview.js",
    "content": "/**\n * Checks if we're in preview mode (?preview=1).\n */\n\nexport function isPreview() {\n  return window.location.search.indexOf('preview=1') !== -1\n}\n"
  },
  {
    "path": "src/scripts/v2017/helpers/qs.js",
    "content": "/*\n * Helper: minimal qs implementation\n */\n\nexport default function qs(search) {\n  search = search.substr(1)\n  const parts = search.split('&').map((p) => p.split('='))\n  return parts.reduce((result, part) => {\n    result[part[0]] = qsdecode(part[1])\n    return result\n  }, {})\n}\n\nexport function qsdecode(string) {\n  if (!string) string = ''\n  string = string.replace(/\\+/g, ' ')\n  return string\n}\n"
  },
  {
    "path": "src/scripts/v2017/helpers/store.js",
    "content": "/**\n * Updates a local storage key. If it doesn't exist, it defaults to an empty\n * object.\n *\n * @example\n *     update('dismissed', (data) => {\n *       data.lol = true\n *       return data\n *     })\n */\n\nexport function update(key, fn) {\n  if (!window.localStorage) return\n  let data = JSON.parse(window.localStorage[key] || '{}')\n  data = fn(data)\n  window.localStorage[key] = JSON.stringify(data)\n}\n\n/**\n * Fetches a local storage key.\n *\n * @example\n *     const data = fetch('dismissed')\n */\n\nexport function fetch(key) {\n  if (!window.localStorage) return\n  return JSON.parse(window.localStorage[key] || '{}')\n}\n"
  },
  {
    "path": "src/styles/CommonStyles.ts",
    "content": "export const typeStyles = {\n  manrope: 'font-manrope font-extrabold tracking-[-0.02em]'\n}\n"
  },
  {
    "path": "src/types/JsonLdDocument.ts",
    "content": "export type JsonLdNewsArticle = {\n  '@context': 'http://schema.org'\n  '@type': 'NewsArticle'\n  mainEntityOfPage: {\n    '@type': 'WebPage'\n    '@id': string\n  }\n  headline: string\n  image: string[]\n  description: string\n}\n\nexport type JsonLdListItem = {\n  '@type': 'ListItem'\n  position: number\n  item: {\n    '@id': string\n    name: string\n  }\n}\n\nexport type JsonLdBreadcrumbList = {\n  '@context': 'http://schema.org'\n  '@type': 'BreadcrumbList'\n  itemListElement: JsonLdListItem[]\n}\n\nexport type JsonLdDocument = JsonLdNewsArticle | JsonLdBreadcrumbList\n"
  },
  {
    "path": "src/types/SheetFrontmatter.ts",
    "content": "import { z } from 'zod'\n\nexport const SheetFrontmatterSchema = z.object({\n  title: z\n    .union([z.string(), z.number()])\n    .transform((x) => x.toString())\n    .pipe(z.string())\n    .optional(),\n\n  category: z.string().optional(),\n  weight: z.number().optional(),\n  tags: z.string().array().optional(),\n  updated: z.date().optional(),\n  keywords: z\n    .string()\n    .array()\n    .optional()\n    .describe(\n      'Search keywords. Appears in meta descriptions, and helps in search.'\n    ),\n  deprecated_by: z.string().optional().describe('Name of newer sheet'),\n  intro: z\n    .string()\n    .optional()\n    .describe(\n      'Introduction text in Markdown. Appears above the fold and on meta descriptions.'\n    )\n})\n\nexport type SheetFrontmatter = z.infer<typeof SheetFrontmatterSchema>\n"
  },
  {
    "path": "stencil.md",
    "content": "---\ntitle: Stencil\ncategory: JavaScript libraries\nupdated: 2019-05-08\nkeywords:\n  - \"@Component\"\n  - \"@Prop()\"\n  - \"@State()\"\n  - \"render()\"\n  - \"componentWillLoad()\"\n  - \"componentWillUpdate()\"\n  - \"Templating\"\n  - \"Lifecycle\"\nintro: |\n  [Stencil](https://github.com/ionic-team/stencil) is a compiler for web components made by the Ionic team. This guide targets Stencil v0.0.5.\n---\n\n## Quick-start guide\n{: .-three-column}\n\n### Getting started\n{: .-prime}\n\n#### JavaScript\n\n```js\nimport { Component, Prop, State } from '@stencil/core'\n\n@Component({\n  tag: 'my-component',\n  styleUrl: 'my-component.scss'\n})\nexport class MyComponent {\n  @Prop() name: string\n  @State() isVisible: boolean = true\n\n  render () {\n    return <p>I am {this.name}!</p>\n    )\n  }\n}\n```\n\n#### HTML\n\n```html\n<my-component name='Groot' />\n```\n\nThat's the same example in the [Readme](https://github.com/ionic-team/stencil), that's as simple as you can get! Just use `<my-component>` like you would use any other HTML tag.\n\n### DOM events\n\n```js\nexport class MyComponent {\n  render () {\n    return (\n      <input\n        onChange={(event: UIEvent) => this.inputChanged(event)}\n      />\n    )\n  }\n\n  inputChanged (event) {\n    console.log('input changed:', event.target.value)\n  }\n}\n```\n{: data-line=\"5,10,11\"}\n\nStencil uses DOM events.\n\nSee: [Handling user input](https://stenciljs.com/docs/templating/#handling-user-input)\n\n### Multiple children\n\n```js\nrender () {\n  return [\n    <h1>Hello there</h1>,\n    <p>This component returns multiple nodes</p>\n  ]\n}\n```\n{: data-line=\"3,4\"}\n\n`render()` can return an array of elements.\n\nSee: [Complex template content](https://stenciljs.com/docs/templating#complex-template-content)\n\n## State\n\n### Managing state\n\n```js\nexport class MyComponent {\n  @State() isVisible: boolean\n\n  show () {\n    this.isVisible = true\n  }\n}\n```\n{: data-line=\"4,5\"}\n\nJust do assignments. You can't do mutations though, see next section.\n\nSee: [Managing component state](https://stenciljs.com/docs/decorators#managing-component-state)\n\n### Updating arrays and objects\n\n#### ✗ Bad\n```js\nthis.names.push('Larry')  // ⚠️\nthis.options.show = true  // ⚠️\n```\n\n#### ✓ OK\n\n```js\nthis.names = [ ...this.names, 'Larry' ]\nthis.options = { ...this.options, show: true }\n```\n\nMutable operations such as `push()` won't work. You'll need to assign a new copy.\n\nSee: [Updating arrays](https://stenciljs.com/docs/reactive-data/#updating-arrays)\n\n## Slots\n\n### Using slot\n\n```html\n<my-component>\n  <span>Hello, friends</span>\n</my-component>\n```\n{: data-line=\"2\"}\n\n#### Component\n\n```js\nrender() {\n  return <h1><slot /></h1>\n}\n```\n{: data-line=\"2\"}\n\nYou can pass JSX/HTML as child elements. Use the `slot` tag to use them inside your component.\n\nSee: [Slots](https://stenciljs.com/docs/templating#slots)\n\n### Multiple slots\n\n```html\n<my-component>\n  <p slot='my-header'>Hello</p>\n  <p slot='my-footer'>Thanks</p>\n</my-component>\n```\n{: data-line=\"2,3\"}\n\n#### Component\n\n```js\nrender () {\n  return <div>\n    <header><slot name='my-header' /></header>\n    <footer><slot name='my-footer' /></footer>\n  </div>\n}\n```\n{: data-line=\"3,4\"}\n\nSee: [Slots](https://stenciljs.com/docs/templating#slots)\n\n## Lifecycle\n\n### Lifecycle hooks\n\n| Event                   | Description      |\n| ---                     | ---              |\n| `componentWillLoad()`   | Before rendering |\n| `componentDidLoad()`    | After rendering  |\n| ---                     | ---              |\n| `componentWillUpdate()` | Before updating  |\n| `componentDidUpdate()`  | After updating   |\n| ---                     | ---              |\n| `componentDidUnload()`  | After unmounting |\n\nSee: [Component lifecycle](https://stenciljs.com/docs/component-lifecycle)\n\n### Example\n\n```js\nexport class MyComponent {\n  componentWillUpdate () {\n    console.log('updating')\n  }\n}\n```\n\n## References\n\n- [Stencil docs](https://stenciljs.com/docs/) _(stenciljs.com)_\n"
  },
  {
    "path": "stimulus-reflex.md",
    "content": "---\ntitle: StimulusReflex\ncategory: Ruby\nupdated: 2021-01-07\n---\n\n### via Data Attributes\n\nTrigger reflexes without writing any javascript with the `data-reflex` attribute.\n\n#### index.html.erb\n\n```html\n<a\n  href=\"#\"\n  data-reflex=\"click->CounterReflex#increment\"\n  data-step=\"1\"\n  data-count=\"<%= @count.to_i %>\"\n  >Increment <%= @count.to_i %></a\n>\n```\n\n#### counter_reflex.rb\n\n```ruby\nclass CounterReflex < StimulusReflex::Reflex\n  def increment\n    @count = element.dataset[:count].to_i + element.dataset[:step].to_i\n  end\nend\n```\n\n### from Stimulus.js Controller\n\nStimulus.js controllers registered with StimulusReflex can use the `stimulate` method to trigger reflexes\n\n#### index.html.erb\n\n```html\n<a href=\"#\"\n  data-controller=\"counter\"\n  data-action=\"click->counter#increment\"\n>Increment <%= @count %></a>\n```\n\n#### counter_controller.js\n\n```javascript\nimport { Controller } from 'stimulus'\nimport StimulusReflex from 'stimulus_reflex'\n\nexport default class extends Controller {\n  connect() {\n    StimulusReflex.register(this)\n  }\n\n  increment(event) {\n    event.preventDefault()\n    this.stimulate('Counter#increment', 1)\n  }\n}\n```\n\n#### counter_reflex.rb\n\n```ruby\nclass CounterReflex < StimulusReflex::Reflex\n  def increment(step = 1)\n    session[:count] = session[:count].to_i + step\n   end\nend\n```\n\n## Morphs\n\n### Selector morphs\n\nInstead of refreshing the entire page, you can specify a portion of the page to update with `morph(selector, content)`\n\n```html\n<!-- show.html.erb -->\n<header data-reflex=\"click->Example#change\">\n  <%= render partial: \"path/to/foo\", locals: {message: \"Am I the medium or the massage?\"} %>\n</header>\n```\n\n```html\n<!-- _foo.html.erb -->\n<div id=\"foo\">\n  <span class=\"spa\"><%= message %></span>\n</div>\n```\n\n```ruby\n# example_reflex.rb\nclass ExampleReflex < ApplicationReflex\n  def change\n    morph \"#foo\", \"Your muscles... they are so tight.\"\n  end\nend\n```\n\n### Nothing morph\n\nUse `morph :nothing` in reflexes that do something on the server without updating the client.\n\n```ruby\n# example_reflex.rb\nclass ExampleReflex < ApplicationReflex\n  def change\n    LongRunningJob.perform_later\n    morph :nothing\n  end\nend\n```\n\n## Lifecycle\n\n### Server-side callbacks\n\nReflex classes can use the following callbacks. [Full Docs](http://docs.stimulusreflex.com/lifecycle#server-side-reflex-callbacks)\n\n- `before_reflex`\n- `around_reflex`\n- `after_reflex`\n\n### Client-side callbacks (generic)\n\nStimulusReflex controllers automatically support five generic lifecycle callback methods.\n\n- `beforeReflex(element, reflex, noop, reflexId)` prior to sending a request over the web socket\n- `reflexSuccess(element, reflex, noop, reflexId)` after the server side Reflex succeeds and the DOM has been updated\n- `reflexError(element, reflex, error, reflexId)` whenever the server side Reflex raises an error\n- `reflexHalted(element, reflex, noop, reflexId)` reflex canceled with throw :abort in the before_reflex callback\n- `afterReflex(element, reflex, noop, reflexId)` after both success and error\n- `finalizeReflex(element, reflex, noop, reflexId)` after both success and error\n\n### Client-side callbacks (custom)\n\nStimulusReflex controllers can define up to five custom lifecycle callback methods for each Reflex action. These methods use a naming convention based on the name of the Reflex. e.g. for the `add_one` reflex:\n\n- `beforeAddOne(element, reflex, noop, reflexId)`\n- `addOneSuccess(element, reflex, noop, reflexId)`\n- `addOneError(element, reflex, error, reflexId)`\n- `addOneHalted(element, reflex, noop, reflexId)`\n- `afterAddOne(element, reflex, noop, reflexId)`\n- `finalizeAddOne(element, reflex, noop, reflexId)`\n\n### Client-side events\n\nIf you need to know when a Reflex method is called, but you're working outside of the Stimulus controller that initiated it, you can subscribe to receive DOM events\n\n- `stimulus-reflex:before`\n- `stimulus-reflex:success`\n- `stimulus-reflex:error`\n- `stimulus-reflex:halted`\n- `stimulus-reflex:after`\n\nThere are also events related to the StimulusReflex library setting up and connecting to ActionCable\n\n- `stimulus-reflex:connected`\n- `stimulus-reflex:disconnected`\n- `stimulus-reflex:rejected`\n- `stimulus-reflex:ready`\n\n## Helpful tips\n\n### Forms\n\nIf a Reflex is called on a form element - or a child of that form element - then the data for the whole form will be properly serialized and made available to the Reflex action method as the `params` accessor. [Read more](http://docs.stimulusreflex.com/working-with-forms)\n\n### Promises\n\n`stimulate()` method returns a promise\n\n```javascript\nthis.stimulate('Comments#create')\n  .then(() => this.doSomething())\n  .catch(() => this.handleError())\n```\n\n### Inheriting data-attributes from parent elements\n\nYou can use the `data-reflex-dataset=\"combined\"` directive to scoop all data attributes up the DOM hierarchy and pass them as part of the Reflex payload.\n\n```html\n<!-- new.html.erb -->\n<div data-post-id=\"<%= @post.id %>\">\n  <div data-category-id=\"<%= @category.id %>\">\n    <button data-reflex=\"click->Comment#create\" data-reflex-dataset=\"combined\">Create</button>\n  </div>\n</div>\n```\n\n```html\n# comment_reflex.rb\nclass CommentReflex < ApplicationReflex\n  def create\n    puts element.dataset[\"post-id\"]\n    puts element.dataset[\"category-id\"]\n  end\nend\n```\n\n### Reflex root\n\nInstead of updating your entire page, you can specify exactly which parts of the DOM will be updated using the `data-reflex-root` attribute. [Full docs](http://docs.stimulusreflex.com/morph-modes#scoping-page-morphs)\n\n```text\n<!-- index.html.erb -->\n<div data-reflex-root=\"[forward],[backward]\">\n  <input type=\"text\" value=\"<%= @words %>\" data-reflex=\"keyup->Example#words\">\n  <div forward><%= @words %></div>\n  <div backward><%= @words&.reverse %></div>\n</div>\n```\n\n```ruby\n# example_reflex.rb\n  def words\n    @words = element[:value]\n  end\n```\n\n### Permanent elements\n\nAdd data-reflex-permanent to any element in your DOM, and it will be left unchanged by full-page Reflex updates and morph calls that re-render partials.\n\n```erb\n<!-- index.html.erb -->\n<div data-reflex-permanent>\n  <iframe src=\"https://ghbtns.com/github-btn.html?user=hopsoft&repo=stimulus_reflex&type=star&count=true\" frameborder=\"0\" scrolling=\"0\" class=\"ghbtn\"></iframe>\n  <iframe src=\"https://ghbtns.com/github-btn.html?user=hopsoft&repo=stimulus_reflex&type=fork&count=true\" frameborder=\"0\" scrolling=\"0\" class=\"ghbtn\"></iframe>\n</div>\n```\n\n### Aborting a reflex\n\ncall `raise :abort` within a reflex method to cancel it.\n\n```ruby\n# comment_reflex.rb\nclass CommentReflex < ApplicationReflex\n  def create\n    raise :abort\n  end\nend\n```\n"
  },
  {
    "path": "strftime.md",
    "content": "---\ntitle: strftime format\nweight: -5\nupdated: 2017-11-27\ntags: [Featurable]\nintro: |\n  The strftime format is the standard date formatting for UNIX. It's used in C, Ruby, and more.\n---\n\n{% include common/strftime_format.md title=\"strftime\" %}\n"
  },
  {
    "path": "stylus.md",
    "content": "---\ntitle: Stylus\ncategory: CSS\nprism_languages: [stylus]\nweight: -3\nupdated: 2017-10-30\ntags: [Featurable]\n---\n\nGetting started\n---------------\n{: .-three-column}\n\n### CSS syntax\n\n```stylus\n.box {\n  color: blue;\n\n  .button {\n    color: red;\n  }\n}\n```\n\nStylus is a CSS pre-processor.\n\nSee: [stylus-lang.com](http://stylus-lang.com/)\n\n### Indent syntax\n\n```stylus\n.box\n  color: blue\n\n  .button\n    color: red\n```\n\nAlso works! The colon is optional, as well. This is typically the syntax used with Stylus documents.\n\n### Mixins\n\n```stylus\ncaps-type()\n  text-transform: uppercase\n  letter-spacing: 0.05em\n```\n{: data-line=\"1\"}\n\n```stylus\nh5\n  caps-type()\n```\n{: data-line=\"2\"}\n\nSee [Mixins](#mixins-1) below.\n\n### Variables\n\n```stylus\nroyal-blue = #36a\n```\n{: data-line=\"1\"}\n\n```stylus\ndiv\n  color: royal-blue\n```\n\nMixins\n------\n{: .-three-column}\n\n### Without arguments\n\n```stylus\nred-border()\n  border: solid 2px red\n```\n{: data-line=\"1\"}\n\n```stylus\ndiv\n  red-border()\n```\n{: data-line=\"2\"}\n\nSee: [Mixins](http://stylus-lang.com/docs/mixins.html)\n\n### With arguments\n\n```stylus\nborder-radius(n)\n  -webkit-border-radius: n\n  border-radius: n\n```\n{: data-line=\"1\"}\n\n```stylus\ndiv\n  border-radius: 2px\n  border-radius(2px)\n```\n{: data-line=\"2,3\"}\n\nMixins can be applied in two different ways.\n\n### Argument defaults\n\n```stylus\nborder-radius(n = 2px)\n  -webkit-border-radius: n\n```\n{: data-line=\"1\"}\n\n### Block mixins\n\n```stylus\nmobile()\n  @media (max-width: 480px)\n    {block}\n```\n{: data-line=\"3\"}\n\n```stylus\n+mobile()\n  width: 10px\n```\n{: data-line=\"1\"}\n\nSee: [Block mixins](http://stylus-lang.com/docs/mixins.html#block-mixins)\n\n### Rest params\n\n```stylus\nshadow(offset-x, args...)\n  box-shadow: offset-x args\n  margin-top: offset-x\n```\n{: data-line=\"1\"}\n\n```stylus\n#login\n  shadow: 1px 2px 5px #eee\n```\n\nSee: [Rest params](http://stylus-lang.com/docs/vargs.html)\n\nFunctions\n---------\n{: .-three-column}\n\n### Functions\n\n```stylus\nadd(a, b)\n  a + b\n```\n{: data-line=\"1\"}\n\n```stylus\nbody\n  padding: add(10px, 5)\n```\n{: data-line=\"2\"}\n\nSee: [Functions](http://stylus-lang.com/docs/functions.html)\n\n### Argument defaults\n\n```stylus\nadd(a, b = 2)\n  a + b\n```\n{: data-line=\"1\"}\n\nSee: [Argument defaults](http://stylus-lang.com/docs/functions.html#argument-defaults)\n\n### Named parameters\n\n```stylus\nshadow(x, y)\n  x y (y * 1.5) #000\n```\n\n```stylus\n.button\n  box-shadow: shadow(x: 2, y: 4)\n```\n{: data-line=\"2\"}\n\nSee: [Named parameters](http://stylus-lang.com/docs/functions.html#named-parameters)\n\n### Multiple return values\n\n```stylus\nsizes()\n  8px 16px\n```\n{: data-line=\"2\"}\n\n```stylus\nsizes()[0]  // → 8px\nsizes()[1]  // → 16px\n```\n\nSee: [Multiple return values](http://stylus-lang.com/docs/functions.html#multiple-return-values)\n\nValues\n------\n{: .-three-column}\n\n### Conditional assignment\n\n```stylus\nroyal-blue = #36a\nroyal-blue ?= #89f\n```\n{: data-line=\"2\"}\n\n```stylus\ndiv\n  color: royal-blue  // #36a\n```\n\n`?=` will only set a variable if it's previously unset.\n\nSee: [Conditional assignment](https://stylus-lang.com/docs/operators.html#conditional-assignment--)\n\n### Property lookup\n\n```stylus\n.logo\n  width: w = 150\n  margin-left: -(w / 2)\n  // or\n  height: 80px\n  margin-top: -(@height / 2)\n```\n{: data-line=\"2,3\"}\n\nSee: [Property lookup](https://stylus-lang.com/docs/variables.html#property-lookup)\n\n### Interpolation\n\n```stylus\n-{prefix}-border-radius: 2px\n```\n\nSee: [Interpolation](https://stylus-lang.com/docs/interpolation.html)\n\n### Color operators\n\n```stylus\n#888 + 50%    // → #c3c3c3 (lighten)\n#888 - 50%    // → #444 (darken)\n#f00 + 50deg  // → #ffd500 (hue)\n```\n\n### Casting\n\n```stylus\nn = 5px\n```\n\n```stylus\nfoo: (n)em\nfoo: (n * 5)%\n```\n{: data-line=\"1,2\"}\n\n### Lookup\n\n```stylus\nlight-blue = #3bd\nname = 'blue'\nlookup('light-' + name)\n```\n{: data-line=\"3\"}\n\nSee: [lookup](https://stylus-lang.com/docs/bifs.html#lookupname)\n\nAdvanced features\n-----------------\n{: .-three-column}\n\n### Conditional\n\n```stylus\nif color == blue\n  display: block\nelse if true and true\n  display: inline\nelse if 'hey' is not 'bye'\n  display: flex\nelse\n  display: none\n```\n\nAliases:\n\n\n| `==` | `is` |\n| `!=` | `is not` |\n| `!=` | `isnt` |\n\nSee: [Conditionals](https://stylus-lang.com/docs/functions.html#conditionals)\n\n### For loops\n\n```stylus\nfont-size-1 = 10px\nfont-size-2 = 20px\nfont-size-3 = 30px\n\nfor i in 1..3\n  .text-{i}\n    font-size: lookup('font-size-' + i)\n```\n{: data-line=\"5\"}\n\n### Definition check\n\n```stylus\nif ohnoes is defined\n  color: blue\n```\n{: data-line=\"1\"}\n\nSee: [is defined](https://stylus-lang.com/docs/operators.html#variable-definition-is-defined)\n\n### False values\n\n```stylus\n0\nnull\nfalse\n''\n```\n\n### Type check\n\n```stylus\nif val is a 'string'\nif val is a 'ident'\nif #fff is a 'rgba'    // → true\n```\n\nSee: [Instance check](https://stylus-lang.com/docs/operators.html#instance-check-is-a)\n\nBuilt-in functions\n------------------\n{: .-three-column}\n\n### Color functions\n\n```stylus\nalpha(#fff)   //→ 1\nalpha(rgba(0, 0, 0, 0.2))   //→ 0.2\n```\n\n```stylus\ndark(black)  //→ true\nlight(black) //→ false\n```\n\n```stylus\nhue(#0a0)         //→ 50deg\nsaturation(#f00)  //→ 100%\nlightness(#f00)   //→ 50%\nluminosity(#f00)  //→ 0.2126\n```\n\n```stylus\nhue(#0a0, 0deg)\nsaturation(#f00, 50%)\nlightness(#f00)\n```\n\n```stylus\nlighten(color, 10%)\ndarken(color, 10%)\nsaturate(color, 10%)\ndesaturate(color, 10%)\ninvert(color)\n```\n\n```stylus\ntint(color, 50%)  // mix with white\nshade(color, 50%) // mix with black\n```\n\n```stylus\nunquote(string)\n```\n\nSee: [Built-in functions](http://stylus-lang.com/docs/bifs.html)\n\n### Image size\n\n```stylus\nwidth:  image-size('tux.png')[0]\nheight: image-size('tux.png')[1]\n```\n\nReturns the width and height of a given image.\n\nSee: [image-size](http://stylus-lang.com/docs/bifs.html#image-sizepath)\n\n### Caching\n\n```stylus\nsize($width)\n  +cache('w' + $width)\n    width: $width\n.a { size: 10px }\n.b { size: 10px }\n```\n\n```stylus\n// yields: .a, b { width: 10px }\n```\n\nApplies its contents to the given selector on the first call, but would @extend the first call’s selector at the second call with the same params.\n\nSee: [cache](http://stylus-lang.com/docs/bifs.html#cachekeys)\n\n### Add Property\n\n```stylus\ngradient(color)\n  add-property('background-image', linear-gradient(top, color, darken(color, 20%)))\n  color\n```\n\n```stylus\nbody\n  background: gradient(red)\n```\n\nSee: [add-property](http://stylus-lang.com/docs/bifs.html#add-propertyname-expr)\n\n### sprintf\n\n```stylus\n'-webkit-gradient(%s, %s, %s)' % (linear (0 0) (0 100%))\n// → -webkit-gradient(linear, 0 0, 0 100%)\n```\n\n```stylus\ns(\"rgba(0, 0, 0, %s)\", 0.3)\n```\n\nSee: [s](http://stylus-lang.com/docs/bifs.html#sfmt-)\n\n### Embed URL\n\n```\nbackground: embedurl('logo.png')\n// → background: url(\"data:image/png;base64,…\")\n```\n\nSee: [embedurl](http://stylus-lang.com/docs/bifs.html#embedurlpath-encoding)\n"
  },
  {
    "path": "sublime-text.md",
    "content": "---\ntitle: Sublime Text\ncategory: Apps\n---\n\n### Select & Expand\n\n| `⌘ D`       | select current word (repeat to include next instance of word) |\n| `⌘ L`       | select current line (repeat to include next line) |\n| `⌘ ⇧ L`     | split selection into multiple lines |\n| `⌘ ⇧ A`     | select text inside tag (repeat to expand) |\n| `Ctrl ⇧ M`  | select to curly or angle brackets (repeat to expand) |\n{: .-shortcuts}\n\nReplace ⌘ with Ctrl on Windows and Linux.\n\n### Code Folding\n\n| `⌘ Alt [`         | fold closest block                     |\n| `⌘ Alt ]`         | unfold closest block                   |\n| `⌘ K` `⌘ 1`       | fold all first level code blocks       |\n| `⌘ K` `⌘ 2`       | fold all second level code blocks      |\n| `⌘ K` `⌘ 3 (etc)` | fold all third level code blocks (etc) |\n| `⌘ K` `⌘ T`       | fold all HTML attributes               |\n| `⌘ K` `⌘ 0`       | unfold everything                      |\n{: .-shortcuts}\n\n### Editing\n\n| `⌘ ⇧ D` | duplicate current line/selection |\n| `⌘ ⇧ K` | delete current line/selection |\n| `⇧ del` | delete current line/selection |\n| `⌘ ⇧ ↑` | move line up   |\n| `⌘ ⇧ ↓` | move line down |\n{: .-shortcuts}\n\n### Goto\n\n| `⌘ P`         | goto anything |\n| `⌘ G`         | goto line number |\n| `⌘ R`         | goto symbol |\n| `⌘ P, :`      | goto line number (enter number after `:`) |\n| `⌘ P, #`      | goto and list fuzzy-matches of string (enter characters after `#`) |\n| `⌘ P, @`      | goto and list symbol (begin typing symbol name after `@`) |\n{: .-shortcuts}\n\n### Command line\n\n```sh\n$ subl .\n$ subl README.md\n```\n\nUse `subl` to open files in Sublime from the terminal.\n"
  },
  {
    "path": "superagent.md",
    "content": "---\ntitle: Superagent\ncategory: JavaScript libraries\nupdated: 2018-04-21\ntags:\n  - WIP\n---\n\n### Response object\n```javascript\n  res: {\n    // The HTTP Status Code (see: httpstatuses.com for definitions on HTTP status codes)\n    status: 202,\n    // True when res.status is 2xx\n    ok: true,\n    // True when res.status is 4xx or 5xx\n    error: false,\n    // True when res.status is 4xx\n    clientError: false,\n    // True when res.status is 5xx\n    serverError: false,\n\n    // True when res.status == 202\n    accepted: true,\n    // True when res.status == 204 || res.status == 1223 \n    noContent: false,\n    // True when res.status == 400\n    badRequest: false,\n    // True when res.status == 401\n    unauthorized: false,\n    // True when res.status == 406\n    notAcceptable: false,\n    // True when res.status == 404\n    notFound: false,\n    // True when res.status == 403\n    forbidden: false,\n\n    // Unparsed response text\n    text: '{\"user\":{\"username\":\"JohnDoe\",\"role\":\"admin\"}}'\n\n    // Parsed response text (only if response is 'application/json' or 'application/x-www-form-urlencoded'\n    body: {\n      // Example of parsed object from res.text\n      user: {\n        username: 'JohnDoe',\n        role: 'admin'\n      }\n    }\n\n    // The content-type (parsed from headers)\n    type: 'application/json'\n    // The charset (parsed from headers)\n    charset: 'UTF-8'\n    // Header object with each header field as a property\n    headers: {\n      'content-type': 'application/json; charset=UTF-8',\n      ...\n    }\n}\n```\n"
  },
  {
    "path": "tabular.md",
    "content": "---\ntitle: Tabular\ncategory: Vim\nupdated: 2017-10-11\nweight: -1\nintro: |\n  [Tabular](https://github.com/godlygeek/tabular) is a Vim script for text alignment.\n---\n\n## Common usage\n{: .-three-column}\n\n### Tables\n\n```\n:Tab /|\n```\n{: .-setup}\n\n```\n| Fruit  | Color  |\n| -----  | -----  |\n| Apple  | Red    |\n| Banana | Yellow |\n| Kiwi   | Green  |\n```\n\n### Variables\n\n```\n:Tab /=\n```\n{: .-setup}\n\n```\ntitle = \"Hello\"\nsrc   = \"image.jpg\"\nwidth = 640\n```\n\n### Colons\n\n```\n:Tab /:\\zs/l0l1\n```\n{: .-setup}\n\n```\ntitle:       \"Hello world\"\ndescription: \"This is a description\"\nsrc:         \"image.jpg\"\nheight:      320\nwidth:       640\n```\n\n## Tab command\n{: .-three-column}\n\n### Basic example\n\n```\n:Tab /:\n```\n{: .-setup}\n\n```bash\ntitle : My picture\nsrc   : img.jpg\n```\n\n### Right align\n\n```\n:Tab /:/r0\n```\n{: .-setup}\n\n```bash\ntitle:My picture\n  src:   img.jpg\n```\n\n### The \\zs atom\n\n```\n:Tab /:\\zs\n```\n{: .-setup}\n\n```\ntitle:  My picture\nsrc:    img.jpg\n```\n\nThe `\\zs` atom will exclude the `:` from the search match.\n\n### Specifier\n\n```\n:Tab /:/r1c1l0\n```\n{: .-setup}\n\n```bash\ntitle : My picture\n  src : img.jpg\n```\n\n#### Explanation\n\n- `r1` -- Right align with 1 space\n- `c1` -- Center align the comma with 1 space\n- `l0` -- Left align with 0 spaces\n\n### Regexp\n\n```\n:Tab /^[^,]*\\zs,/r0\n```\n{: .-setup}\n\n```bash\nabc,hello\n  c,hi there\n  a,yo\n```\n\n### Specifiers\n\n| Specifier | Description |\n| --- | --- |\n| `r1c1l0` |  multiple specifiers, one per column<br>(the separator counts as a column) |\n| --- | --- |\n| `lN` | Left-align (with N spaces padding) |\n| `rN` | Right-align (with N spaces padding) |\n| `cN` | Center-align (with N spaces padding) |\n\n## Also see\n\n- [godlygeek/tabular](https://github.com/godlygeek/tabular) _(github.com)_\n- [Aligning text with Tabular.vim](http://vimcasts.org/episodes/aligning-text-with-tabular-vim/) _(vimcasts.org)_\n"
  },
  {
    "path": "tailwind.config.mjs",
    "content": "import resolveConfig from 'tailwindcss/resolveConfig'\n\nconst defaults = resolveConfig({})\n\n/** @type {import('tailwindcss').Config} */\nexport default {\n  content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],\n  theme: {\n    extend: {\n      spacing: {\n        // max-widths\n        content: '1232px',\n        slim: '740px'\n      },\n      colors: {\n        mildindigo: {\n          50: '#F2F1F8',\n          100: '#E8E7F3',\n          200: '#D0CFE8',\n          300: '#B5B4DA',\n          400: '#9E9CCF',\n          500: '#8784C3',\n          600: '#6F6BB7',\n          700: '#4C4893',\n          800: '#312F60',\n          900: '#191730',\n          950: '#0C0C18'\n        }\n      },\n\n      fontFamily: {\n        manrope: ['Manrope', ...defaults.theme.fontFamily.sans]\n      },\n\n      boxShadow: {\n        'lg-cool': [\n          '0 1px 1px rgb(0 0 80 / 0.05)',\n          '0 1.5px 3px -1px rgb(0 0 80 / 0.15)',\n          '0 4px 6px -1px rgb(0 0 80 / 0.07)',\n          '0 8px 12px -1px rgb(0 0 80 / 0.04)'\n        ].join(', '),\n        'md-cool': [\n          '0 0 0 1px rgb(0 0 80 / 0.1)',\n          '0 1px 1px rgb(0 0 80 / 0.1)',\n          '0 1.5px 3px -2px rgb(0 0 80 / 0.3)',\n          '0 4px 6px rgb(0 0 80 / 0.04)',\n          '0 8px 12px -1px rgb(0 0 80 / 0.03)'\n        ].join(', ')\n      }\n    }\n  },\n  plugins: []\n}\n"
  },
  {
    "path": "tape.md",
    "content": "---\ntitle: Tape\ncategory: JavaScript libraries\n---\n\n### Example\n\n```js\ntest('things', (t) => {\n  t.plan(1)\n\n  t.equal('actual', 'expected')\n  t.equal('actual', 'expected', 'should be equal') // messages are optional\n\n  t.end(err)\n  t.fail('msg')\n  t.pass('msg')\n  t.timeoutAfter(2000)\n  t.skip('msg')\n\n  t.ok(value, 'is truthy')\n  t.notOk(value, 'is falsy')\n  t.error(err, 'is falsy (print err.message)')\n\n  t.equal(actual, expected, 'is equal')\n  t.notEqual\n\n  t.deepEqual(actual, expected, 'is equal (use node's deepEqual)')\n  t.notDeepEqual\n\n  t.looseEqual(actual, expected, 'is equal (use node's deepEqual with ==)')\n  t.notLooseEqual\n\n  t.throws(fn, /FooError/)\n  t.throws(fn, FooError /* class */)\n  t.doesNotThrow\n\n  t.comment('message')\n})\n```\n\n```js\ntest.only((t) => { ... })\n```\n"
  },
  {
    "path": "tar.md",
    "content": "---\ntitle: tar\ncategory: CLI\nupdated: 2022-08-11\nintro: Concatenate, Deflate, Inflate files\n---\n## Reference\n{:.-two-column}\n\n### Deflate / Inflate / Concatenate\n```shell\n# Deflate / Compress\ntar -czf archive.tar.gz /path/files\n```\n\n```shell\n# Inflate / Uncompress\ntar -xzf archive.tar.gz\n```\n\n```shell\n# Concatenate files into a single tar\ntar -cf archive.tar /path/files\n```\n\n```shell\n# Extract file to a defined directory\ntar -xzf archive.tar.gz -C /target/directory\n```\n\n```shell\n# Append a file to an existing archive\ntar -zu archive.tar.gz -C /target/file\n```\n\n```shell\n# List files in archive\n# Add -v for additional details\ntar -tzf archive.tar.gz\n```\n\n### Common options\n\n| Option | Description                                                             |\n|--------|-------------------------------------------------------------------------|\n| `z`    | compress with gzip                                                      |\n| `c`    | create an archive                                                       |\n| `u`    | append files which are newer than the corresponding copy in the archive |\n| `f`    | filename of the archive                                                 |\n| `v`    | verbose, display what is inflated or deflated                           |\n| `a`    | unlike of `z`, determine compression based on file extension            |\n"
  },
  {
    "path": "test/basicPage.e2e.ts",
    "content": "import { expect, test } from '@playwright/test'\nimport type {\n  JsonLdBreadcrumbList,\n  JsonLdNewsArticle\n} from '~/types/JsonLdDocument'\nimport { expectMeta, getLdJsonPayloads } from './e2eUtils'\n\ntest('/tests/basic', async ({ page }) => {\n  await page.goto('/tests/basic')\n\n  await expectMeta(page, {\n    name: 'description',\n    content:\n      'The one-page guide to Basic test: usage, examples, links, snippets, and more.'\n  })\n\n  const ldJsonPayloads = await getLdJsonPayloads(page)\n  expect(ldJsonPayloads.length).toEqual(2)\n\n  const jsonData = ldJsonPayloads[0] as JsonLdNewsArticle\n  expect(jsonData).toEqual({\n    '@context': 'http://schema.org',\n    '@type': 'NewsArticle',\n    mainEntityOfPage: {\n      '@type': 'WebPage',\n      '@id': 'https://google.com/article'\n    },\n    headline: 'Basic test cheatsheet',\n    image: ['https://assets.devhints.io/previews/tests/basic.jpg'],\n    description:\n      'The one-page guide to Basic test: usage, examples, links, snippets, and more.'\n  })\n\n  const jsonData2 = ldJsonPayloads[1] as JsonLdBreadcrumbList\n  expect(jsonData2).toEqual({\n    '@context': 'http://schema.org',\n    '@type': 'BreadcrumbList',\n    itemListElement: [\n      {\n        '@type': 'ListItem',\n        position: 1,\n        item: { '@id': 'https://devhints.io/#hidden', name: 'Hidden' }\n      },\n      {\n        '@type': 'ListItem',\n        position: 2,\n        item: {\n          '@id': 'https://devhints.io/tests/basic',\n          name: 'Basic test cheatsheet'\n        }\n      }\n    ]\n  })\n})\n"
  },
  {
    "path": "test/e2eUtils.ts",
    "content": "import { expect, type Page } from '@playwright/test'\nimport type { JsonLdDocument } from '~/types/JsonLdDocument'\n\n/**\n * Helper: assert that a `<meta>` tag has a given `name` and `content`\n */\n\nexport async function expectMeta(\n  page: Page,\n  options:\n    | { name: string; content: string }\n    | { property: string; content: string }\n) {\n  const { content } = options\n  const metaElement = page.locator(\n    'name' in options\n      ? `meta[name=\"${options.name}\"]`\n      : `meta[property=\"${options.property}\"]`\n  )\n  await expect(metaElement).toHaveAttribute('content', content)\n}\n\n/**\n * Retrieves all JSON-LD payloads from the page.\n */\n\nexport async function getLdJsonPayloads(\n  page: Page\n): Promise<Array<null | JsonLdDocument>> {\n  const elements = await page\n    .locator('script[type=\"application/ld+json\"]')\n    .all()\n\n  return Promise.all(\n    elements.map(async (element) => {\n      const text = await element.textContent()\n      return text ? JSON.parse(text) : null\n    })\n  )\n}\n"
  },
  {
    "path": "test/index.e2e.ts",
    "content": "import { expect, test } from '@playwright/test'\nimport type { JsonLdBreadcrumbList } from '~/types/JsonLdDocument'\nimport { expectMeta, getLdJsonPayloads } from './e2eUtils'\n\ntest('homepage', async ({ page }) => {\n  await page.goto('/')\n  await expect(page).toHaveTitle('Devhints — TL;DR for developer documentation')\n  const linksToAssert = [\n    { name: 'Xpath', href: '/xpath' },\n    { name: 'React', href: '/react' },\n    { name: 'Bash', href: '/bash' }\n  ]\n\n  for (const { name, href } of linksToAssert) {\n    await expect(page.getByRole('link', { name }).first()).toHaveAttribute(\n      'href',\n      href\n    )\n  }\n\n  // Share buttons\n  const shareOnFacebook = page.getByLabel('Share on Facebook')\n  const facebookHref = await shareOnFacebook.getAttribute('href')\n  expect(facebookHref).toEqual(\n    'https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fdevhints.io%2F'\n  )\n\n  const shareOnTwitter = page.getByLabel('Share on Twitter')\n  const twitterHref = await shareOnTwitter.getAttribute('href')\n  expect(twitterHref).toEqual(\n    'https://twitter.com/intent/tweet?text=Ridiculous%20collection%20of%20web%20development%20cheatsheets%20https%3A%2F%2Fdevhints.io%2F'\n  )\n})\n\ntest('search', async ({ page }) => {\n  await page.goto('/')\n  await page.getByPlaceholder('Search...').click()\n  await page.getByPlaceholder('Search...').fill('es6')\n\n  // Pick the first\n  await page.getByRole('option', { name: 'ES2015+' }).click()\n\n  // Navigate to next page\n  await expect(page).toHaveTitle('ES2015+ cheatsheet')\n  await expect(\n    page.getByRole('heading', { name: 'ES2015+ cheatsheet' })\n  ).toBeVisible()\n})\n\ntest('date pages', async ({ page }) => {\n  await page.goto('/strftime')\n  await page\n    .getByRole('heading', { name: 'strftime format cheatsheet' })\n    .focus()\n  await page.getByRole('heading', { name: 'Presets' }).focus()\n\n  // This should make the `{% include %}` directive work\n  await page.goto('/moment')\n  await page.getByRole('heading', { name: 'Moment.js cheatsheet' }).focus()\n  await page.getByRole('heading', { name: 'Parsing' }).focus()\n  await page\n    .getByRole('heading', { name: 'Internationalization', exact: true })\n    .focus()\n  await page.getByRole('heading', { name: 'Add' }).focus()\n\n  await page.goto('/datetime')\n  await page.getByRole('heading', { name: 'strftime format' }).focus()\n  await page.getByRole('heading', { name: 'Moment.js format' }).focus()\n})\n\ntest('/knex', async ({ page }) => {\n  await page.goto('/knex')\n\n  // Assert Markdown text\n  await expectMeta(page, {\n    name: 'description',\n    content:\n      'One-page guide to Knex: usage, examples, and more. Knex is an SQL query builder for Node.js. This guide targets v0.13.0.'\n  })\n\n  // Share buttons\n  const shareOnFacebook = page.getByLabel('Share on Facebook')\n  const facebookHref = await shareOnFacebook.getAttribute('href')\n  expect(facebookHref).toEqual(\n    'https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fdevhints.io%2Fknex'\n  )\n\n  const shareOnTwitter = page.getByLabel('Share on Twitter')\n  const twitterHref = await shareOnTwitter.getAttribute('href')\n  expect(twitterHref).toEqual(\n    'https://twitter.com/intent/tweet?text=The%20ultimate%20cheatsheet%20for%20Knex%20https%3A%2F%2Fdevhints.io%2Fknex'\n  )\n})\n\ntest('/sinon', async ({ page }) => {\n  await page.goto('/sinon')\n\n  const ldJsonPayloads = await getLdJsonPayloads(page)\n\n  const payload2 = ldJsonPayloads[1] as JsonLdBreadcrumbList\n  expect(payload2.itemListElement[0].item['@id']).toEqual(\n    'https://devhints.io/#javascript-libraries'\n  )\n})\n\ntest('/tests/keywords_test', async ({ page }) => {\n  await page.goto('/tests/keywords_test')\n\n  await expectMeta(page, {\n    name: 'description',\n    content:\n      'Variables · Functions · Interpolation · Brace expansions · Loops · Conditional execution · Command substitution · One-page guide to Intro test'\n  })\n})\n"
  },
  {
    "path": "tests/basic.md",
    "content": "---\ntitle: \"Basic test\"\ncategory: Hidden\n---\n\n### Introduction\n\nThis is a test cheatsheet. It's used as a reference for automated tests.\n"
  },
  {
    "path": "tests/keywords_test.md",
    "content": "---\ntitle: Intro test\ncategory: Hidden\nupdated: 2020-07-05\nkeywords:\n  - Variables\n  - Functions\n  - Interpolation\n  - Brace expansions\n  - Loops\n  - Conditional execution\n  - Command substitution\n---\n\n### Example test\nThis page has keywords.\n"
  },
  {
    "path": "textile.md",
    "content": "---\ntitle: Textile\ncategory: Markup\nupdated: 2017-09-20\nweight: -1\n---\n\n## Reference\n{: .-three-column}\n\n### Inlines\n\n| Code | Description |\n| --- | --- |\n| `_em_` | |\n| `*strong*` | |\n| `__bold-italic__` | |\n| `@code@` | |\n| `??citation??` | |\n| --- | --- |\n| `-strikethrough-` | |\n| `+insertion+` | |\n| --- | --- |\n| `%span%` | HTML tag |\n| `%{color:red}formatting%` | CSS styles |\n| --- | --- |\n\n### Blocks\n\n```textile\nh1. Header 1\n```\n\n```textile\nh2. Header 2\n```\n\n```textile\nbq. Blockquote\n```\n\n```textile\np(classname). Class.\n```\n\n```textile\np(#id). ID.\n```\n\n### Lists\n\n```textile\n## ordered list\n```\n\n```textile\n* unordered list\n```\n\n### Links\n\n| Code | Description |\n| --- | --- |\n| `\"Hypertext\":index.html` | Link |\n| --- | --- |\n| `\"Text link\":link` <br> `[link]http://link.com` | Link via reference |\n\n### Images\n\n| Code | Description |\n| --- | --- |\n| `!image.jpg!` | Image |\n| `!image.jpg(title text)!` | |\n| `!image.jpg!:link.html` | |\n| `!>right.jpg!` | |\n\n### Escaped HTML\n\n```html\n<pre>\nI am <b>very serious.</b> -- this\nwill get escaped.\n</pre>\n```\n\n### Line breaks\n\n```textile\nLine breaks.\nJust break the lines.\n```\n\n### Entities\n\n```textile\none(TM), two(R), three(C).\n```\n\n### Horizontal line\n\n```textile\n--\n```\n\n### Footnotes\n\n```textile\nFootnotes[1].\n```\n\n```textile\nfn1. Something.\n```\n"
  },
  {
    "path": "tig.md",
    "content": "---\ntitle: Tig\ncategory: Git\nupdated: 2022-12-08\nweight: -3\n---\n\n### Installing\n\n```bash\n# MacOS + Homebrew\n$ brew install tig --HEAD\n```\n\n```bash\n# Ubuntu\n$ sudo apt install tig\n```\n\n### Invocation\n\n| Command             | Description                                  |\n| ------------------- | -------------------------------------------- |\n| `tig`               | Logs                                         |\n| ---                 | ---                                          |\n| `tig status`        | Status                                       |\n| `tig blame FILE`    | Blame                                        |\n| ---                 | ---                                          |\n| `tig master`        | Show a branch                                |\n| `tig test..master`  | Show difference between two branches         |\n| `tig FILE`          | Show history of file                         |\n| `tig v0.0.3:README` | Show contents of file in a specific revision |\n| `tig -C /repo/path` | Run in dir `/repo/path` (like `git -C`)      |\n\nYou can substitute `git log` → `tig`.\n\n## Shortcut keys\n{: .-three-column}\n\n### Switching views\n\n| Shortcut | Description  |\n| -------- | ------------ |\n| `m`      | Main view    |\n| `d`      | Diff         |\n| `t`      | Tree (files) |\n| `b`      | Blame        |\n| `s`      | Status       |\n| `c`      | Stage        |\n| `y`      | Stash        |\n| `g`      | Grep         |\n| `h`      | Help         |\n{: .-shortcuts}\n\n### All views\n\n| Shortcut  | Description                  |\n| ---       | ---                          |\n| `<enter>` | Enter and open selected line |\n| `<`       | Back to previous view state  |\n| `<tab>`   | Move focus to next view      |\n| `R`       | Refresh                      |\n| `q`       | Close view                   |\n| `Q`       | Close all (quit)             |\n| `,`       | Parent commit                |\n{: .-shortcuts}\n\n### Cursor navigation\n\n| Shortcut  | Description                  |\n| ---       | ---                          |\n| `/`       | Search                       |\n| `?`       | Search backwards             |\n| `j`  `k`  | Up/down                      |\n| `J`  `K`  | Next/previous                |\n| `<space>` | Page down                    |\n| `-`       | Page up                      |\n| `^D`      | Half page down               |\n| `^U`      | Half page up                 |\n{: .-shortcuts}\n\n### Option toggles\n\n| Shortcut  | Description                  |\n| ---       | ---                          |\n| `I`       | Toggle sort order modes      |\n| `i`       | Change sort header           |\n| `D`       | Toggle date display modes    |\n| `A`       | Toggle author display modes  |\n| `#`       | Toggle line numbers          |\n| `~`       | Toggle line graphics         |\n| `F`       | Toggle file names            |\n| `W`       | Toggle ignore space          |\n{: .-shortcuts}\n\n### `m` - Main view\n\n| Shortcut  | Description                  |\n| ---       | ---                          |\n| `X`       | Toggle commit sha            |\n| `C`       | Cherry pick a commit         |\n{: .-shortcuts}\n\n### `s` - Status view\n\n| Shortcut  | Description                        |\n| ---       | ---                                |\n| `u`       | Stage/unstage file or chunk        |\n| `!`       | Revert file or chunk               |\n| `C`       | Commit                             |\n| `M`       | Merge with external tool           |\n{: .-shortcuts}\n\n### `c` - Stage view\n\n| Shortcut  | Description                        |\n| ---       | ---                                |\n| `u`       | Stage/unstage file or chunk        |\n| `!`       | Revert file or chunk               |\n| `1`       | Stage line                         |\n| `\\`       | Split current diff hunk            |\n| `[` `]`   | Increase/decrease the diff context |\n{: .-shortcuts}\n\n### `d` - Diff view\n\n| Shortcut  | Description                        |\n| ---       | ---                                |\n| `[` `]`   | Increase/decrease the diff context |\n{: .-shortcuts}\n\n### `y` - Stash view\n\n| Shortcut  | Description                        |\n| ---       | ---                                |\n| `A`       | Apply selected stash               |\n| `P`       | Pop selected stash                 |\n| `!`       | Drop selected stash                |\n{: .-shortcuts}\n"
  },
  {
    "path": "tmux.md",
    "content": "---\ntitle: tmux\ncategory: CLI\nupdated: 2024-04-08\n---\n\n### Commands\n\n    $ tmux\n      -u        # UTF8 mode\n      -S ~/.tmux.socket\n\n#### Sessions\n\n    $ tmux new\n    $ tmux new -s session_name\n\n    $ tmux attach # Default session\n    $ tmux attach -t session_name\n\n    $ tmux switch -t session_name\n\n    $ tmux ls     # List sessions\n\n    $ tmux detach\n\n#### Windows\n\n    $ tmux new-window\n\n### Help\n\n    C-b ?\n\n### Scrolling\n\n    C-b [       # Enter scroll mode then press up and down, you can also scroll with mouse support enabled (`set -g mouse on` in `~/.tmux.conf`)\n\n### Copy/paste\n\n    C-b [       # 1. Enter scroll mode first\n    Space       # 2. Start selecting and move around\n    Enter       # 3. Press enter to copy\n    C-b ]       # Paste\n\n### Panes\n\n    C-b %       # vert\n    C-b \"       # horiz\n    C-b hkjl    # navigation\n    C-b HJKL    # resize\n    C-b o       # next window\n    C-b q       # show pane numbers\n    C-b x       # close pane\n\n    C-b { or }  # move windows around\n\n### Windows\n\n    C-b c       # New window\n    C-b 1       # Go to window 1\n    C-b n       # Go to next window\n    C-b p       # Go to previous window\n    C-b w       # List all window\n\n### Detach/attach\n\n    C-b d       # Detach\n    C-b ( )     # Switch through sessions\n    $ tmux attach\n\n### Search in buffer\n\n    C-b [       # 1. Enter scroll mode first, you can also scroll with mouse support enabled\n    C-s         # 2. Enter search mode, type pattern then press Enter to start search\n    n or N      # 3. Go to the previous or next match\n    C-c         # 4. Exit search and scroll mode\n\n### Niceties\n\n    C-b t       # Display a clock, press any key to quit\n\n## Status formats\n\n```\nsetw -g window-status-format `#[fg=8,bg=default]#I`\n```\n\nSee `message-command-style` in the man page.\n\n### Attribute/colors\n\n| Key | Description |\n| --- | --- |\n| `#[fg=1]` | standard color |\n| `#[fg=yellow]` | yellow |\n| `#[bold]` | bold |\n| `#[fg=colour240]` | 256 color |\n| `#[fg=default]` | default |\n| `#[fg=1,bg=2]` | combinations |\n| `#[default]` | reset |\n\n### Colors\n\n * `black` `red` `green` `yellow` `blue` `magenta` `cyan` `white`\n * `brightred` (and so on)\n * `colour0` ... `colour255`\n * `#333` (rgb hex)\n\n### Attributes\n\n * `bold` `underscore` `blink` `noreverse` `hidden` `dim` `italics`\n\n### Variables\n\n| Key | Description |\n| --- | --- |\n| `#(date)` | shell command |\n| `#I` | window index |\n| `#S` | session name |\n| `#W` | window name |\n| `#F` | window flags |\n| `#H` | Hostname |\n| `#h` | Hostname, short |\n| `#D` | pane id |\n| `#P` | pane index |\n| `#T` | pane title |\n\n## Options\n\n    set -g status-justify [left|centre|right]\n    set -g status-left '...'\n\n    setw -g window-status-style\n    setw -g window-status-activity-style\n    setw -g window-status-bell-style\n    setw -g window-status-content-style\n    setw -g window-status-current-style\n    setw -g window-status-last-style\n\n    setw -g window-status-format\n    setw -g window-status-current-format\n\n    setw -g window-status-separator\n"
  },
  {
    "path": "tomdoc.md",
    "content": "---\ntitle: Tomdoc\ncategory: Markup\n---\n\n### Tomdoc\n{: .-prime}\n\n```ruby\n# Public: Duplicate some text an arbitrary number of times.\n#\n# text  - The String to be duplicated.\n# count - The Integer number of times to duplicate the text.\n#\n# Examples\n#\n#   multiplex('Tom', 4)\n#   # => 'TomTomTomTom'\n#\n# Returns the duplicated String.\ndef multiplex(text, count)\n  text * count\nend\n```\n\nSee [tomdoc.org](http://tomdoc.org/).\n\n### Tags\n\n- `Deprecated`\n- `Internal`\n- `Public`\n\n### Options\n\n```ruby\n# options - The Hash options used to refine the selection (default: {}):\n#           :color  - The String color to restrict by (optional).\n#           :weight - The Float weight to restrict by. The weight should\n#                     be specified in grams (optional).\n```\n\n### Yields\n\n```ruby\n# Yields the Integer index of the iteration.\n```\n\n```ruby\n# Returns the duplicated String.\n```\n\n```ruby\n# Returns nothing.\n```\n\n```ruby\n# Raises Errno::ENOENT if the file can't be found.\n```\n\n```ruby\n# Returns something else and this is a wrapped\n#   multi-line comment.\n```\n\n### Signatures\n\n```ruby\n# Signature\n#\n#   find_by_<field>[_and_<field>...](args)\n#\n```\n"
  },
  {
    "path": "top.md",
    "content": "---\ntitle: top\ncategory: CLI\nupdated: 2020-01-01\nintro: See the processes in your Unix machine.\n---\n\n### Shortcuts\n\n| Shortcut  | Description           |\n| --------- | --------------------- |\n| `h`       | shows help            |\n| `q`       | quits the program     |\n| `m`       | switches memory view  |\n| `1`       | switches cpu view     |\n| `k`       | kills process         |\n| `Shift+p` | sorts by CPU usage    |\n| `Shift+m` | sorts by memory usage |\n| `Shift+r` | reverses sorting      |\n| `Shift+l` | searches for string   |\n| `o`       | adds a filter         |\n| `u`       | filter user           |\n| `=`       | clears filters        |\n| `V`       | Forest view           |\n| `c`       | show full path        |\n{: .-shortcuts}\n"
  },
  {
    "path": "travis.md",
    "content": "---\ntitle: Travis.yml\ncategory: Devops\nprism_languages: [yaml]\nintro: |\n  Quick reference for [Travis CI](https://travis-ci.org) yaml configuration. See [official documentation](https://docs.travis-ci.com/user/customizing-the-build/).\n---\n\n## Reference\n{:.-three-column}\n\n### Node.js\n\n```yaml\nlanguage: node_js\nnode_js:\n  - '4'\n```\n\nDefaults install to `npm install`, and defaults test to `npm test`.\n\n### Ruby\n\n```yaml\nlanguage: ruby\nrvm:\n  - 2.0.0\n  - 1.9.3\n  - 1.8.7\n```\n\nDefaults install to `bundle install`, defaults test to `rake`.\n\n### Build lifecycle\n\n| Lifecycle                          |\n| ---------------------------------- |\n| `before_install`                   |\n| `install`                          |\n| ---                                |\n| `before_script`                    |\n| `script`                           |\n| ---                                |\n| `after_success` or `after_failure` |\n| `after_script`                     |\n| ---                                |\n| `before_deploy` (optional)         |\n| `deploy` (optional)                |\n| `after_deploy` (optional)          |\n\n### Branches\n\n```yaml\nbranches:\n  except: ['..']\n  only: ['master']\n```\n\n### Environment vars\n\n```yaml\nenv:\n  - 'rack=master'\n  - 'rack=1.3.4'\n```\n\n### Custom test command\n\n```yaml\nscript: make test\nbefore_script: make pretest\nafter_script:  make clean\n\nbefore_script:\n  - make pretest1\n  - make pretest2\n```\n\n### Branches\n\n```yaml\nbranches:\n  except:\n    - legacy\n\n  only:\n    - gh-pages\n    - /^deploy/\n```\n\n### Apt packages\n\n```yaml\nbefore_install:\n  - sudo apt-get update -q\n  - sudo apt-get install gcc-4.8 -y\n```\n\n<https://docs.travis-ci.com/user/installing-dependencies/>\n\n### Etc\n\n```yaml\ngemfile:\n  - gemfiles/Gemfile.rails-2.3.x\n  - gemfiles/Gemfile.rails-3.0.x\n```\n\n### References\n\n- https://about.travis-ci.org/docs/user/build-configuration/\n- https://about.travis-ci.org/docs/user/languages/javascript-with-nodejs/\n- https://about.travis-ci.org/docs/user/languages/ruby/\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"extends\": \"astro/tsconfigs/strict\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"types\": [\"vitest/globals\" /* https://vitest.dev/config/#globals */],\n    \"plugins\": [{ \"name\": \"@astrojs/ts-plugin\" }],\n    \"paths\": {\n      \"~/*\": [\"src/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "typescript.md",
    "content": "---\ntitle: TypeScript\ncategory: JavaScript libraries\n---\n\n### About\n\nTypeScript is just like ES2015 with type-checking. All ES2015 (classes, etc) should work.\n\n### Basic types\n\n```ts\nany\nvoid\n\nboolean\nnumber\nstring\n\nnull\nundefined\n\nbigint\nsymbol\n\nstring[]          /* or Array<string> */\n[string, number]  /* tuple */\n\nstring | null | undefined   /* union */\n\nnever  /* unreachable */\nunknown\n```\n\n```ts\nenum Color {\n  Red,\n  Green,\n  Blue = 4\n};\n\nlet c: Color = Color.Green\n```\n\n### Declarations\n\n```ts\nlet isDone: boolean\nlet isDone: boolean = false\n```\n\n```ts\nfunction add (a: number, b: number): number {\n  return a + b\n}\n\n// Return type is optional\nfunction add (a: number, b: number) { ... }\n```\n\n## Type assertions\n\n#### Variables\n```ts\nlet len: number = (input as string).length\nlet len: number = (<string> input).length  /* not allowed in JSX */\n```\n\n#### Functions\n```ts\nfunction object(this: {a: number, b: number}, a: number, b: number) {\n  this.a = a;\n  this.b = b;\n  return this;\n}\n\n// this is used only for type declaration\nlet a = object(1,2);\n// a has type {a: number, b: number}\n```\n\n\n## Interfaces\n\n### Inline\n\n```ts\nfunction printLabel (options: { label: string }) {\n  console.log(options.label)\n}\n\n// Note the semicolon\nfunction getUser (): { name: string; age?: number } {\n}\n```\n\n### Explicit\n\n```ts\ninterface LabelOptions {\n  label: string\n}\n\nfunction printLabel(options: LabelOptions) { ... }\n```\n\n### Optional properties\n\n```ts\ninterface User {\n  name: string;\n  age?: number;\n}\n```\n\n### Read only\n\n```ts\ninterface User {\n  readonly name: string\n}\n```\n\n### Dynamic keys\n\n```ts\n{\n  [key: string]: Object[]\n}\n```\n\n## Type aliases\n\n### Type aliases\n\n```ts\ntype Name = string | string[]\n```\n\n### Intersection\n\n```ts\ninterface Colorful { ... }\n\ninterface Circle { ... }\n \ntype ColorfulCircle = Colorful & Circle;\n```\n\n## Function types\n\n```ts\ninterface User { ... }\n\nfunction getUser(callback: (user: User) => any) { callback({...}) }\n\ngetUser(function (user: User) { ... })\n```\n\n## Classes\n\n```ts\nclass Point {\n  x: number\n  y: number\n  static instances = 0\n  constructor(x: number, y: number) {\n    this.x = x\n    this.y = y\n  }\n}\n```\n\n#### Inheritance\n\n```ts\nclass Point {...}\n\nclass Point3D extends Point {...}\n\ninterface Colored {...}\n\nclass Pixel extends Point implements Colored {...}\n```\n\n#### Short fields initialisation\n\n```ts\nclass Point {\n  static instances = 0;\n  constructor(\n    public x: number,\n    public y: number,\n  ){}\n}\n```\n\n#### Fields which do not require initialisation\n```ts\nclass Point {\n  public someUselessValue!: number;\n  ...\n}\n```\n\n## Generics\n\n```ts\nclass Greeter<T> {\n  greeting: T\n  constructor(message: T) {\n    this.greeting = message\n  }\n}\n\nlet greeter = new Greeter<string>('Hello, world')\n```\n\n## Modules\n\n```ts\nexport interface User { ... }\n```\n\n## Type extraction\n\n```ts\ninterface Building {\n  room: {\n    door: string;\n    walls: string[];\n  };\n}\n\ntype Walls = Building['room']['walls']; // string[]\n```\n\n## Keyof Type Operator\n\n```ts\ntype Point = { x: number; y: number };\n\ntype P = keyof Point; // x | y\n```\n\n## Conditional Types\n\n```ts\n// SomeType extends OtherType ? TrueType : FalseType;\n\ntype ToArray<T> = T extends any ? T[] : never;\n\ntype StrArrOrNumArr = ToArray<string | number>; // string[] | number[]\n```\n\n### Inferring\n\n```ts\ntype GetReturnType<T> = T extends (...args: unknown[]) => infer R\n  ? R\n  : never;\n\ntype Num = GetReturnType<() => number>; // number\n```\n\n```ts\ntype First<T extends Array<any>> = T extends [infer F, ...infer Rest] ? F : never;\n\ntype Str = First<['hello', 1, false]>; // 'hello'\n```\n\n## Literal Type\n\n```ts\nconst point = { x: 4, y: 2 }; // { x: number, y: number }\n\nconst literalPoint = { x: 4, y: 2 } as const; // { readonly x: 4, readonly y: 2 };\n```\n\n## Template Literal Types\n\n```ts\ntype SpaceChar = ' ' | '\\n' | '\\t';\n\ntype TrimLeft<S extends string> = S extends `${SpaceChar}${infer Rest}` ? TrimLeft<Rest> : S;\n\ntype Str = TrimLeft<'    hello'>; // 'hello'\n```\n"
  },
  {
    "path": "ubuntu.md",
    "content": "---\ntitle: Ubuntu\n---\n\n### Aptitude stuff\n\n    aptitude search mysql       # Look for something\n    dpkg -S `which tsclient`    # What package does it belong to?\n    dpkg -L aria2c              # What does this package provide?\n    dpkg -i *.deb               # Install a deb file\n    dpkg -s nodejs              # Show info\n\n    dpkg --get-selections       # list installed packages\n\n### Apt archives path\n\n    /var/cache/apt/archives\n\n### List services\n\n    service --status-all\n"
  },
  {
    "path": "umdjs.md",
    "content": "---\ntitle: Universal JS module loader\ncategory: JavaScript libraries\n---\n\n### Reference\n\n * <https://github.com/umdjs/umd>\n\n### [With dependency](https://github.com/umdjs/umd/blob/master/amdWebGlobal.js)\n\n~~~ js\n;(function (root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(['jquery'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('jquery'));\n  } else {\n    root.YourModule = factory(root.jQuery);\n  }\n\n}(this, function (jquery) {\n  return {};\n}));\n~~~\n\n### No dependencies\n\n~~~ js\n;(function (root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.YourModule = factory();\n  }\n\n}(this, function () {\n  return {};\n}));\n~~~\n\n### [Supports circular references](https://github.com/umdjs/umd/blob/master/commonjsStrict.js)\n\n~~~ js\n(function (root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(['exports', 'jquery'], factory);\n  } else if (typeof exports === 'object') {\n    factory(exports, require('jquery'));\n  } else {\n    factory((root.YourModule = {}), root.jQuery);\n  }\n\n}(this, function (exports, jQuery) {\n  exports.action = function () {};\n}));\n~~~\n"
  },
  {
    "path": "underscore-string.md",
    "content": "---\ntitle: Underscore-string\ncategory: JavaScript libraries\n---\n\n### Usage\n\n    // Use it like so:\n    _.str.trim(\"hey\");\n    _s.trim(\"hey\");\n\n    // Unless you do:\n    _.mixin(_.string.exports());\n\n    // So you can:\n    _.trim(\"hey\");\n    _(\"hey\").trim();\n\n### Trimming\n\n    _.truncate(\"Hello world\", 4) // => \"Hell...\"\n    _.prune(\"Hello world\", 5)    // => \"Hello...\"\n\n    _.trim(\" foo \")              // => \"foo\"\n    _.trim(\"-foo-\", '-')         // => \"foo\"\n    _.ltrim\n    _.rtrim\n\n### Numbers\n\n    _.numberFormat(1000, 2)  // => \"1,000.00\"\n\n### Caps\n\n    _.capitalize(\"foo bar\")       // => \"Foo Bar\"\n    _.humanize(\"hey-there foo\")   // => \"Hey there foo\"\n    _.titleize('My name is hi')   // => \"My Name Is Hi\"\n\n    _.dasherize('MozTransform')   // => \"-moz-transform\"\n    _.underscored('MozTransform') // => \"moz_transform\"\n    _.classify('-moz-transform')  // => \"MozTransform\"\n    _.camelize('moz_transform')   // => \"MozTransform\"\n\n    _.slugify(\"hey there\")        // => \"hey-there\"\n\n    _.swapCase(\"hELLO\")           // => \"Hello\"\n\n### Checks\n\n    _.startsWith('image.gif', 'image') // => true\n    _.endsWith('image.gif', '.gif')    // => true\n    _.isBlank(\" \")                     // => true (also for \"\\n\", \"\")\n\n### HTML\n\n    _.escapeHTML(\"<div>\")\n    _.unescapeHTML(\"&lt;div&gt;\")\n    _.stripTags(\"<div>hi</div>\")\n\n### Quote\n\n    _.quote(\"hi\", '\"') // => '\"hi\"'\n    _.unquote('\"hi\"')  // => \"hi\"\n\n### Splits\n\n    _.lines(\"hi\\nthere\")     // => [\"hi\",\"there\"]\n    _.words(\"hi  there you\") // => [\"hi\",\"there\",\"you\"]\n\n### Sprintf\n\n    _.sprintf(\"%.1f\", 1.17)\n\n### Pad\n\n    _.pad(\"1\", 8)               // => \"       1\"\n    _.pad(\"1\", 8, \"0\")          // => \"00000001\"\n    _.pad(\"1\", 8, \" \", \"right\") // => \"1       \"\n    _.pad(\"1\", 8, \" \", \"both\")  // => \"    1   \"\n\n    _.lpad(..)  // same as _.pad(.., 'left')\n    _.rpad(..)  // same as _.pad(.., 'right')\n    _.lrpad(..) // same as _.pad(.., 'both')\n\n### References\n\n* https://github.com/epeli/underscore.string\n"
  },
  {
    "path": "unicode.md",
    "content": "---\ntitle: Unicode symbols\n---\n\n### Symbols\n\n    ✈   \\u2708 airplane\n    ❄   \\u2744 snowflake\n    ⚑   \\u2691 flag\n    ☯   \\u262f yinyang\n    ♞   \\u265e horse\n    ☀   \\u2600 rays\n    ⚠   \\u26a0 warning\n\n    ★   star\n    ☆   star2\n\n    ⚐   \\u2690 flag\n    ⚑   \\u2691 flag\n\n### Bullets\n\n    •   \\u2022\n    ·   \\u00b7\n    ┄   \\u2504\n    —   \\u2014 (mdash)\n    –   \\u2013 (ndash)\n    ◦   \\u25e6 circle\n\n### Checks\n\n    ✓   \\u2713 check\n    ✕   \\u2715\n    ✗   \\u2717 x mark\n    ✘   \\u2718 x mark bold\n    ❏   \\u274f checkbox\n    ×   times\n\n\n### Spinners\n\n      ◜◠◝◞◡◟\n      ❘❙❚\n\n### Triangles and arrows\n\n    ▲\n    ▼\n    ▶\n\n    ⬅   \\u2b05\n    ⬆   \\u2b06\n    ⬇   \\u2b07\n\n    ◢\n    ◣\n    ◤\n    ◥\n\n    «   &laquo;\n    »   &raquo;\n    ‹   &lsaquo;\n    ›   &rsaquo;\n    •   &middot;\n\n    ⌘ – &#x2318; – &#8984; – Command Key\n    ⌥ – &#x2325; – &#8997; – Option Key\n    ⇧ – &#x21E7; – &#8679; – Shift Key\n    ⎋ – &#x238B; – &#9099; – ESC Key\n    ⇪ – &#x21ea; – &#8682; – Capslock\n    ⏎ – &#x23ce; – &#9166; – Return\n    ⌫ – &#x232b; – &#9003; – Delete / Backspace\n\n    ▸   \\u25b8 right arrow\n    ▹\n\n    ◇   \\u25c7\n    ◆\n\n    ◐\n    ◑\n    ◒\n    ◓\n\n\n    ♠   \\u2660\n    ♣   \\u2663\n    ♥   \\u2665\n    ♦   \\u2666\n\n\n    ✂  scissors\n    ℹ information &#008505;\n    ♡ heart &#009825;\n    ⚙ cog or gear &#009881;\n    ✉ envelope &#009993;\n    ✎ pencil &#009998;\n\n### JavaScript\n\n    \"x\".charCodeAt(0)\n    \"x\".charCodeAt(0).toString(16)\n\n    http://www.danshort.com/HTMLentities/index.php?w=dingb\n"
  },
  {
    "path": "vagrant.md",
    "content": "---\ntitle: Vagrant\ncategory: Devops\nintro: |\n [Vagrant](http://vagrantup.com) lets you build isolated virtual environments for your apps.\n---\n\n### Get started\n\nAdd some base boxes:\n{: .-setup}\n\n```bash\nvagrant box add precise64 http://files.vagrantup.com/precise64.box\n```\n\nWork it:\n\n```bash\nmkdir test_box\ncd test_box\nvagrant init precise64\n```\n\nRun it:\n\n```bash\nvagrant up\nvagrant ssh\n```\n\nTo stop, use one of the following:\n\n```bash\nvagrant ssh        # then: sudo shutdown -h now\nvagrant suspend\nvagrant destroy    # !!\n```\n\n### Also see\n\n* [Vagrant website](http://vagrantup.com) _(vagrantup.com)_\n* [Vagrantfile cheatsheet](./vagrantfile)\n"
  },
  {
    "path": "vagrantfile.md",
    "content": "---\ntitle: Vagrantfile\ncategory: Devops\n---\n\n## Vagrantfile\n{: .-one-column}\n\n```rb\nVagrant.configure(\"2\") do |config|\n  # All Vagrant configuration is done here. The most common configuration\n  # options are documented and commented below. For a complete reference,\n  # please see the online documentation at vagrantup.com.\n\n  # Every Vagrant virtual environment requires a box to build off of.\n  config.vm.box = \"precise64\"\n\n  # The url from where the 'config.vm.box' box will be fetched if it\n  # doesn't already exist on the user's system.\n  # config.vm.box_url = \"http://domain.com/path/to/above.box\"\n\n  # Create a forwarded port mapping which allows access to a specific port\n  # within the machine from a port on the host machine. In the example below,\n  # accessing \"localhost:8080\" will access port 80 on the guest machine.\n  # config.vm.network :forwarded_port, guest: 80, host: 8080\n\n  # Create a private network, which allows host-only access to the machine\n  # using a specific IP.\n  # config.vm.network :private_network, ip: \"192.168.33.10\"\n\n  # Create a public network, which generally matched to bridged network.\n  # Bridged networks make the machine appear as another physical device on\n  # your network.\n  # config.vm.network :public_network\n\n  # If true, then any SSH connections made will enable agent forwarding.\n  # Default value: false\n  # config.ssh.forward_agent = true\n\n  # Share an additional folder to the guest VM. The first argument is\n  # the path on the host to the actual folder. The second argument is\n  # the path on the guest to mount the folder. And the optional third\n  # argument is a set of non-required options.\n  # config.vm.synced_folder \"../data\", \"/vagrant_data\"\n\n  # Provider-specific configuration so you can fine-tune various\n  # backing providers for Vagrant. These expose provider-specific options.\n  # Example for VirtualBox:\n  #\n  # config.vm.provider :virtualbox do |vb|\n  #   # Don't boot with headless mode\n  #   vb.gui = true\n  #\n  #   # Use VBoxManage to customize the VM. For example to change memory:\n  #   vb.customize [\"modifyvm\", :id, \"--memory\", \"1024\"]\n  # end\n  #\n  # View the documentation for the provider you're using for more\n  # information on available options.\n\n  # Enable provisioning with Puppet stand alone.  Puppet manifests\n  # are contained in a directory path relative to this Vagrantfile.\n  # You will need to create the manifests directory and a manifest in\n  # the file precise64.pp in the manifests_path directory.\n  #\n  # An example Puppet manifest to provision the message of the day:\n  #\n  # # group { \"puppet\":\n  # #   ensure => \"present\",\n  # # }\n  # #\n  # # File { owner => 0, group => 0, mode => 0644 }\n  # #\n  # # file { '/etc/motd':\n  # #   content => \"Welcome to your Vagrant-built virtual machine!\n  # #               Managed by Puppet.\\n\"\n  # # }\n  #\n  # config.vm.provision :puppet do |puppet|\n  #   puppet.manifests_path = \"manifests\"\n  #   puppet.manifest_file  = \"init.pp\"\n  # end\n\n  # Enable provisioning with chef solo, specifying a cookbooks path, roles\n  # path, and data_bags path (all relative to this Vagrantfile), and adding\n  # some recipes and/or roles.\n  #\n  # config.vm.provision :chef_solo do |chef|\n  #   chef.cookbooks_path = \"../my-recipes/cookbooks\"\n  #   chef.roles_path = \"../my-recipes/roles\"\n  #   chef.data_bags_path = \"../my-recipes/data_bags\"\n  #   chef.add_recipe \"mysql\"\n  #   chef.add_role \"web\"\n  #\n  #   # You may also specify custom JSON attributes:\n  #   chef.json = { :mysql_password => \"foo\" }\n  # end\n\n  # Enable provisioning with chef server, specifying the chef server URL,\n  # and the path to the validation key (relative to this Vagrantfile).\n  #\n  # The Opscode Platform uses HTTPS. Substitute your organization for\n  # ORGNAME in the URL and validation key.\n  #\n  # If you have your own Chef Server, use the appropriate URL, which may be\n  # HTTP instead of HTTPS depending on your configuration. Also change the\n  # validation key to validation.pem.\n  #\n  # config.vm.provision :chef_client do |chef|\n  #   chef.chef_server_url = \"https://api.opscode.com/organizations/ORGNAME\"\n  #   chef.validation_key_path = \"ORGNAME-validator.pem\"\n  # end\n  #\n  # If you're using the Opscode platform, your validator client is\n  # ORGNAME-validator, replacing ORGNAME with your organization name.\n  #\n  # If you have your own Chef Server, the default validation client name is\n  # chef-validator, unless you changed the configuration.\n  #\n  #   chef.validation_client_name = \"ORGNAME-validator\"\nend\n```\n\n## Also see\n\n* [Vagrant cheatsheet](./vagrant)\n"
  },
  {
    "path": "vainglory.md",
    "content": "---\ntitle: Vainglory\n---\n\n## T3 items by use\n{: .-one-column}\n\n### Items by use\n\n| Use                    | CP                                | WP                           | Util                                                                           |\n| ---                    | ---                               | ---                          | ---                                                                            |\n| __Anti-armor/shield__  | [Myth][BM]                        | [Bonesaw][BS], [Tension][TB] |                                                                                |\n| __Stacking damage__    | [Myth][BM]                        | [Break][BP]                  |                                                                                |\n| __Lifesteal__          | [Eve][Eve]                        | [Serpent][SM], [Shiv][PS]    |                                                                                |\n| __Raw power__          | [Shatterglass][SG]                | [Sorrowblade][SB]            |                                                                                |\n| __Burst damage__       | [Aftershock][AS]                  | [Tension][TB]                |                                                                                |\n| __Attack speed__       | [AC][AC]                          | [Tornado][TT], [Break][BP]   |                                                                                |\n| __Critical__           |                                   | [Monocle][TM]                |                                                                                |\n| __Auto-attack damage__ | [AC][AC], [Aftershock][AS]        | _everything_                 | [Stormcrown][SC]                                                               |\n| __Cooldown__           | [Clockwork][CW], [Aftershock][AS] | Spellsword                   | [Stormcrown][SC], [Contraption][Con], [Nullwave][Null], [Halcyon Boots][HBoot] |\n| __Slow__               | [Frostburn][FB]                   |                              | [Shiversteel][SS]                                                              |\n| __Reflex block__       |                                   |                              | [Aegis][Aegis] (self/shield) <br> [Crucible][Cru] (team/HP)                    |\n| __Ability repeat__     | [Echo][Echo]                      |                              |                                                                                |\n{: .-left-align.-headers}\n\n## Tier 3 items\n{: .-one-column}\n\n### Crystal power\n\n| Item                          | Cost  | CP      | Use                                                                                    |\n| ----                          | ---   | ---     | ---                                                                                    |\n| AS: [Aftershock][AS]          | 2400  | +35 cp  | __Basic dmg, atk speed__ <br> *+basic dmg after ability*, +25% cooldown, +2.5 recharge |\n| EoH: [Eve of Harvest][Eve]    | 2600  | +55 cp  | __Lifesteal__            <br> *+10% lifesteal*, +250 energy, +5 recharge               |\n| AC: [Alternating Current][AC] | 2800  | +60 cp  | __Basic dmg__            <br> *+basic dmg based on CP*, +65% atk speed                 |\n| BM: [Broken Myth][BM]         | 2150  | +70 cp  | __Stack dmg__            <br> +10% shield pierce, stacking dmg                         |\n| FB: [Frostburn][FB]           | 2600  | +100 cp | __Slow__                 <br> *slow for 1.5s* at (10% + 1% per 10CP)                   |\n| SG: [Shatterglass][SG]        | 3000  | +150 cp | __Raw power__            <br> -                                                        |\n| CW: [Clockwork][CW]           | 2500  | +30% cp | __Cooldown__             <br> *+40% cooldown*, +250 energy, +7.5 recharge              |\n| [Echo][Echo]                  | 2500? |         | __Ability repeat__       <br> +250 energy, +4 recharge                                 |\n{: .-left-align.-headers}\n\n[AS]: http://www.vaingloryfire.com/vainglory/wiki/items/aftershock\n[AC]: http://www.vaingloryfire.com/vainglory/wiki/items/alternating-current\n[Eve]: http://www.vaingloryfire.com/vainglory/wiki/items/eve-of-harvest\n[SG]: http://www.vaingloryfire.com/vainglory/wiki/items/shatterglass\n[BM]: http://www.vaingloryfire.com/vainglory/wiki/items/broken-myth\n[CW]: http://www.vaingloryfire.com/vainglory/wiki/items/clockwork\n[FB]: http://www.vaingloryfire.com/vainglory/wiki/items/frostburn\n[Echo]: http://www.vaingloryfire.com/vainglory/wiki/items/echo\n\n### Weapon power\n\n| Item                       | Cost | WP      | Other                                                                         |\n| ----                       | ---  | ---     | ---                                                                           |\n| TT: [Tornado Trigger][TT]  | 2600 |         | __Atk speed__     <br> *+75% atk speed*, +20% crit change, +20% crit dmg      |\n| BS: [Bonesaw][BS]          | 2700 | +15 wp  | __Armor shred__   <br> *stacking armor shred*                                 |\n| TB: [Tension Bow][TB]      | 2300 | +45 wp  | __Bonus dmg__     <br> *bonus dmg every 6s*, +8% armor pierce                 |\n| TM: [Tyrant's Monocle][TM] | 2750 | +50 wp  | __Crit__          <br> *+40% crit chance*, +20% crit dmg                      |\n| BP: [Breaking Point][BP]   | 2600 | +55 wp  | __Stacking dmg__  <br> *stacking weapon dmg*, +35% atk speed                  |\n| SM: [Serpent Mask][SM]     | 2800 | +85 wp  | __Lifesteal__     <br> *stacking lifesteal*, +10% lifesteal                   |\n| SB: [Sorrowblade][SB]      | 3100 | +150 wp | __Raw power__     <br> -                                                      |\n| PS: [Poisoned Shiv][PS]    | 2250 | +30 wp  | __Mortal wounds__ <br> *mortal wounds for 2s*, +10% lifesteal, +30% atk speed |\n| SS: Spellsword             | ?    | +90 wp  | __Cooldown__      <br> ?                                                      |\n{: .-left-align.-headers}\n\n[BS]: http://www.vaingloryfire.com/vainglory/wiki/items/bonesaw\n[BP]: http://www.vaingloryfire.com/vainglory/wiki/items/breaking-point\n[SM]: http://www.vaingloryfire.com/vainglory/wiki/items/serpent-mask\n[SB]: http://www.vaingloryfire.com/vainglory/wiki/items/sorrowblade\n[TB]: http://www.vaingloryfire.com/vainglory/wiki/items/tension-bow\n[TT]: http://www.vaingloryfire.com/vainglory/wiki/items/tornado-trigger\n[TM]: http://www.vaingloryfire.com/vainglory/wiki/items/tyrants-monocle\n[PS]: http://www.vaingloryfire.com/vainglory/wiki/items/poisoned-shiv\n\n### Utilities\n\n| Item                            | Cost | HP      | Use                                                                    |\n| ---                             | ---  | ---     | ---                                                                    |\n| [Halcyon Chargers][HBoot]       | 2300 | +200 hp | 👟 __Boots__        <br> +15% cooldown, +250 energy, +4 recharge       |\n| [Stormcrown][SC]                | 2200 | +200 hp | 🔴 __Bonus dmg__    <br> +30% cooldown, +4 recharge, bonus true damage |\n| [Journey Boots][JBoot]          | 1900 | +250 hp | 👟 __Boots__        <br> damaging heroes resets sprint cooldown        |\n| [Nullwave Gauntlet][Null] (2.0) | 2250 | +300 hp | 😶 __Item silence__ <br> +25% cooldown                                 |\n| [Contraption][Con]              | 2100 | +350 hp | 👀 __Vision__       <br> traps/flares, +40% cooldown, +3 recharge      |\n| [Shiversteel][SS]               | 1450 | +500 hp | 🐌 __Slow__         <br> active: slow targets                          |\n| [War Treads][WBoot]             | 2500 | +600 hp | 👟 __Boots__        <br> gives sprint to nearby teammates              |\n{: .-left-align.-headers}\n\n### Defense\n\n| Item                            | Cost | HP      | Armor   | Shield  | Use                                    |\n| ---                             | ---  | ---     | ---     | ---     | ---                                    |\n| [Aegis][Aegis]                  | 2250 |         | +30 ar  | +125 sh | ✊__Reflex block__ (self)              |\n| [Fountain of Renewal][Fountain] | 2300 | +200 hp | +30 ar  | +75 sh  | ❤ __Heal__ allies                      |\n| [Atlas Pauldron][Atlas]         | 1900 |         | +85 ar  | +35 sh  | 🐌 __Slow__ target attack speed        |\n| [Metal Jacket][Metal]           | 2100 |         | +170 ar | +35 sh  |                                        |\n| [Crucible][Cru]                 | 1850 | +600 hp |         |         | ✊ __Reflex block__ (team)             |\n| [Slumbering Husk][Husk] (2.0)   | 1600 | +400 hp |         |         | __Fortification__ against burst damage |\n{: .-left-align.-headers}\n\n[Fountain]: http://www.vaingloryfire.com/vainglory/wiki/items/fountain-of-renewal\n[Cru]: http://www.vaingloryfire.com/vainglory/wiki/items/aegis\n[Aegis]: http://www.vaingloryfire.com/vainglory/wiki/items/aegis\n[Atlas]: http://www.vaingloryfire.com/vainglory/wiki/items/atlas-pauldron\n[Metal]: http://www.vaingloryfire.com/vainglory/wiki/items/metal-jacket\n[Husk]: http://www.vaingloryfire.com/vainglory/wiki/items/slumbering-husk\n[Null]: http://www.vaingloryfire.com/vainglory/wiki/items/nullwave-gauntlet\n\n### Boots\n\n| Item                      | Movement speed | HP      | Sprint                                          | Use            |\n| ---                       | ---            | ---     | ---                                             | ---            |\n| [War Treads][WBoot]       | +0.4           | +600 hp | 2s (60s cooldown) <br> incl. nearby teammates   | __HP, assist__ |\n| [Halcyon Chargers][HBoot] | +0.5           |         | 3s (50s cooldown)                               | __Energy__     |\n| [Journey Boots][JBoot]    | +0.6           | +250 hp | 2s (60s cooldown) <br> damaging resets cooldown | __Gap close__  |\n{: .-left-align.-headers}\n\n[Con]: http://www.vaingloryfire.com/vainglory/wiki/items/contraption\n[HBoot]: http://www.vaingloryfire.com/vainglory/wiki/items/halcyon-chargers\n[WBoot]: http://www.vaingloryfire.com/vainglory/wiki/items/war-treads\n[JBoot]: http://www.vaingloryfire.com/vainglory/wiki/items/journey-boots\n[SC]: http://www.vaingloryfire.com/vainglory/wiki/items/stormcrown\n[SS]: http://www.vaingloryfire.com/vainglory/wiki/items/shiversteel\n\n## Skill tier names\n\n### Skill tier names\n\n| Just Beginning | 1 |\n| Getting There | 2 |\n| Rock Solid | 3 |\n| Worthy Foe |4 |\n| Got Swagger | 5 |\n| Credible Threat | 6 |\n| The Hotness | 7 |\n| Simply Amazing | 8 |\n| Pinnacle of Awesome | 9 |\n| Vainglorious | 10 |\n\nSee: [Skill tier names](http://www.vaingloryfire.com/vainglory/forum/general-discussion/bronze-silver-gold-rankings-5312)\n\n## References\n\n- Last updated for Vainglory 1.22 with some 2.0 stuff.\n- [Vaingloryfire.com](http://www.vaingloryfire.com/)\n- [Version history](http://forums.vainglorygame.com/index.php?threads/41129/) (forums.vainglorygame.com)\n- [Skill tier points](http://brokenmyth.net/skill-tier-point-far-next-tier/#more-10043) (brokenmyth.net)\n"
  },
  {
    "path": "vim-diff.md",
    "content": "---\ntitle: Vimdiff\ncategory: Vim\nupdated: 2018-12-06\nweight: -10\nintro: |\n  [Vim](https://www.vim.org/) is a very efficient text editor. This reference was made for Vim 8.0.\n---\n\nGetting started\n---------------\n{: .-three-column}\n\n### Navigating\n{: .-prime}\n\n| Shortcut       | Description                      |\n| ---            | ---                              |\n| `]c`           | Next difference                  |\n| `[c`           | Previous difference              |\n{: .-shortcuts}\n\n### Editing\n\n| Shortcut | Description                         |\n| ---            | ---                              |\n| `do`           | Diff Obtain! <br>Pull the changes to the current file. |\n| `dp`           | Diff Put! <br>Push the changes to the other file. |\n| ---            | ---                              |\n| `:diffupdate`  | Re-scan the files for differences.                    |\n| `ZQ`           | Quit without checking changes    |\n{: .-shortcuts}\n\n### Folds\n\n| Shortcut      | Description                  |\n| ---           | ---                          |\n| `zo` _/_ `zO` | Open                         |\n| `zc` _/_ `zC` | Close                        |\n| `za` _/_ `zA` | Toggle                       |\n| ---           | ---                          |\n| `zv`          | Open folds for this line     |\n| ---           | ---                          |\n| `zM`          | Close all                    |\n| `zR`          | Open all                     |\n| ---           | ---                          |\n| `zm`          | Fold more _(foldlevel += 1)_ |\n| `zr`          | Fold less _(foldlevel -= 1)_ |\n| ---           | ---                          |\n| `zx`          | Update folds                 |\n{: .-shortcuts}\n\n\nAlso see\n--------\n\n- [Vim cheatsheet](https://vim.rtorr.com/) _(vim.rotrr.com)_\n- [Vim documentation](https://vimdoc.sourceforge.net/htmldoc/) _(vimdoc.sourceforge.net)_\n- [Interactive Vim tutorial](https://openvim.com/) _(openvim.com)_\n"
  },
  {
    "path": "vim-digraphs.md",
    "content": "---\ntitle: Vim digraphs\ncategory: Vim\n---\n\n### Typing digraphs in insert mode\n\n```\n<Ctrl-K>OK\n```\n{:.light}\n\n### Listing digraphs\n\n\n```\n:dig\n:digraphs\n```\n{:.lights}\n\n## Reference\n\n### Symbols\n\n| ℠  | ™  | ©  | ®  | ¶  | †  | ‡  | &ndash; | ±  |\n| SM | TM | Co | Rg | PI | /- | /= | --      | +- |\n\n| §  | µ  | £  | ¢  | ¥  | ¤  |\n| SE | My | $$ | Ct | Ye | Cu |\n\n| ★  | ☆  | ♡  | ◆  | ◇  |\n| *2 | *1 | cH | Db | Dw |\n\n| ✓  | ✗  |\n| OK | XX |\n\n### Dots and bullets\n\n| ⋅  | ·  | ○  | ∙  | ∘  | ∴  | ∵  | ∶  | ∷  |\n| .P | .M | 0m | Sb | Ob | .: | :. | :R | :: |\n\n| ⊙  | ⊚  | ◎   | □  | ▪  |\n| 0. | 02 | 0o  | OS | sB |\n\n### Math\n\n| ø  | ≃  | ≅  | ≥  | ≤  | ≡  | ≮  | ≯  | ≠  |\n| o/ | ?- | ?= | >= | =< | =3 | !< | !> | != |\n\n| √         | ×          | ÷           |\n| RT *root* | /\\ *times* | -: *divide* |\n\n\n| ¼  | ½  | ¾  | ₃  | ₂  | ³  | ²  |\n| 14 | 12 | 34 | 3s | 2s | 3S | 2S |\n\n### Set Theory\n\n| ∀         | ∃          | ∈              | ∅             | ⊆                    | ⊇                     |\n| FA *forall* | TE *exists* | (- *element of* | /0 *empty set* | (_ *subset or equal* | )_ *superset or equal* |\n\n| ∩                 | ∪          | ⊂           | ⊃             |\n| (U *intersection* | )U *union* | (C *subset* | )C *superset* |\n\n### Greek\n\n| Α  | α  | Β  | β  | Γ  | γ  | Δ  | δ  | Ε  | ε  | Ζ  | ζ  |\n| A* | a* | B* | b* | G* | g* | D* | d* | E* | e* | Z* | z* |\n\n| Η  | η  | Θ  | θ  | Ι  | ι  | Κ  | κ  | Λ  | λ  | Μ  | μ  |\n| Y* | y* | H* | h* | I* | i* | K* | k* | L* | l* | M* | m* |\n\n| Ν  | ν  | Ξ  | ξ  | Ο  | ο  | Π  | π  | Ρ  | ρ  | Σ  | σ  | ς  |\n| N* | n* | C* | c* | O* | o* | P* | p* | R* | r* | S* | s* | *s |\n\n| Τ  | τ  | Υ  | υ  | Φ  | φ  | Χ  | χ  | Ψ  | ψ  | Ω  | ω  |\n| T* | t* | U* | u* | F* | f* | X* | x* | Q* | q* | W* | w* |\n\n### Triangles\n\n| ▲  | △  | ▼  | ▽  |\n| UT | uT | Dt | dT |\n\n| ▶  | ▷  | ◀  | ◁  |\n| PR | Tr | PL | Tl |\n\n| »  | «  | 〈 | 〉 | ‹  | ›  |\n| >> | << | </ | /> | <1 | >1 |\n\n### Arrows\n\n| ←  | →  | ↑  | ↓  | ↕ | ↔ |\n| <- | -> | -! | -v | UD | <> |\n\n| ⇐  | ⇒  | ⇔  |\n| <= | => | == |\n\n<style>\n.all table tr td { text-align: center; }\n.all table tr:first-child td { font-size: 1.3em; padding-bottom: 0; }\n.all table tr:first-child+tr td { font-size: 0.9em; color: dodgerblue; border-top: 0; padding-top: 0; font-family: fira mono, monospace; }\n.all table em { color: #aaa; font-size: 0.9em; font-style: normal; font-family: roboto, sans-serif; }\n</style>\n"
  },
  {
    "path": "vim-easyalign.md",
    "content": "---\ntitle: Vim Easyalign\nhtml_class: key-codes\nhljs_languages: [vim]\ncategory: Vim\n---\n\n## Command mode\n\n### Align by delimiters\n\n```vim\n:EasyAlign :       \" preset characters (\\=:.,&#|)\n:EasyAlign |\n:EasyAlign \\       \" \\ means space\n```\n\n### Align by regexp\n\n```vim\n:EasyAlign /[:;]+/\n```\n\n### Specify which\n\n```vim\n:EasyAlign |       \" align by 1st `|`\n:EasyAlign 3 |     \" align by 3rd `|`\n:EasyAlign * |     \" align by all `|`s\n```\n\n### Add options\n\n```vim\n:EasyAlign * | l4r1\n\n  l4     \" lN - left_margin\n  r1     \" rN - right_margin\n         \"    spaces to the left/right of `|`\n  ar     \" a[lrc] - align\n         \"    align left/right/center\n  dr     \" d[lrc] - delimiter_align\n         \"    alignment of the delimiter itself\n```\n\n### Spaces are optional\n\n```vim\n:EasyAlign * /[;:]+/ l3\n:EasyAlign*/[;:]+/l3\n```\n\n## Examples\n\n### `:EasyAlign = dr` (delimiter_align right)\n\n```\napple    = 1\nbanana  += apple\ncake   ||= banana\n```\n\n### `:EasyAlign :` (for json or yaml)\n\n```\nurl:      jdbc:mysql://localhost/test\ndatabase: test\n```\n\n### `:EasyAlign *|` (markdown tables)\n\n```nohighlight\n| `<Enter>` | right align                   |\n| `1`       | on 1st occurrence             |\n| `2`       | on 2nd occurrence (and so on) |\n```\n\n## Interactive mode\n\n| `{Visual}` `⏎` | activate for selection |\n| `ga` `{motion}` | activate for motion/text object |\n{:.greycode}\n\nThen press options (if available), then a delimiter.\n\n### Interactive mode options\n\n| `⏎` | Set `alignment` |\n| `<ctrl-l>` `4 ⏎` | Set `left_margin` (to the left of the delimiter) |\n| `<ctrl-r>` `4 ⏎` | Set `right_margin` |\n| `↓` | no margin |\n{:.greycode}\n\n### Example\n\n- `gaip` `<ctrl-l>` `8⏎` `=` - puts 8 spaces before the equal sign\n\n## Also see\n\n- [vim-easy-align](https://github.com/junegunn/vim-easy-align)\n- [Examples](https://github.com/junegunn/vim-easy-align#examples)\n- [Alignment options](https://github.com/junegunn/vim-easy-align#alignment-options)\n"
  },
  {
    "path": "vim-help.md",
    "content": "---\ntitle: Vim helpfiles\ncategory: Vim\nupdated: 2017-09-09\n---\n\n## Writing help files\n{: .-left-reference}\n\n### Creating a document\n\n```nohighlight\n:e doc/potion.txt\n:set ft=help\n:set ft=text\n```\n\nUse `ft=help` to preview it, and `ft=text` to edit it.\n\n### Example\n\n```nohighlight\n*ack.txt*   Plugin that integrates ack with Vim\n\n==============================================================================\nUSAGE INSTRUCTIONS                                                 *ack-usage*\n\n:Ack[!] {pattern}                                                       *:Ack*\n\n    Search recursively for {pattern}. See |:AckAdd|.\n    Also see http://beyondgrep.com for more information.\n\nvim:tw=78:ts=8:ft=help:norl:\n```\n\nThis is a cheatsheet for writing Vim help files. See: `:help help-writing`\n\n## Syntax\n\n### Reference\n\n| Code                 | Description    | Example             |\n| -----                | -----          | -----               |\n| *Inline items*                                              |\n| -----                | -----          | -----               |\n| `*tags*`             | Tags           |                     |\n| `|link-to-tags|`     | Links to tags  | `|:command|`        |\n| `'vimoption'`        | Vim option     | `'textwidth'`       |\n| -----                | -----          | -----               |\n| `{code-text}`        | Code text      | `{Visual}gf`        |\n| `<code-text>`        | Code text      | `<PageDown>`        |\n| `` `code-text` ``    | Code text      | `` `set fo=want` `` |\n| `CTRL-X`             | Code text      |                     |\n| -----                | -----          | -----               |\n| *Block items*                                               |\n| -----                | -----          | -----               |\n| `INTRODUCTION *tag*` | Section header |                     |\n| `Column heading~`    | Highlighting   |                     |\n| `www.url.com`        | Web URL        |                     |\n| -----                | -----          | -----               |\n| `=====`              | Separator      |                     |\n| `-----`              | Separator      |                     |\n\n### Tags\n\n * Tags are created with asterisks, eg, `*potion-usage*`\n * Links to tags are `|potion-usage|`\n * Press `^]` to jump to a tag\n\n### Code blocks\n\n```\nExample: >\n xyz\n<\n```\n\nSurround with `>` and `<` characters\n\n### File header\n\n```\n*potion.txt*  functionality for the potion programming language\n```\n\nIt's customary to start a file with a tag of the filename, plus a description.\n\n### Heading\n\n```\n==============================================================================\nCONTENTS                                                     *potion-contents*\n```\n\nStarts with `ALL CAPS`, ends with `*a-tag*`\n\n### Notes\nUsing `*Todo` and `*Error` will highlight your notes.\n\n```\n\t*Todo something to do\n\t*Error something wrong\n```\n\n### Final modeline\n\n```nohighlight\nvim:tw=78:ts=8:ft=help:norl:\n```\n\n## Conventions\n\n### Table of contents\n\n```nohighlight\n|rails-introduction|            Introduction and Feature Summary\n|rails-commands|                General Commands\n|rails-navigation|              Navigation\n```\n\n```nohighlight\n    1.Intro...................................|ergonomic|\n    2.Note to use..............................|CAPSLOCK|\n    3.Insert Mode Remappings............|ergonomicInsert|\n```\n\n### Author lines\n\n```nohighlight\nAuthor:  Jack Hackness <captain@time.com>         *xyz-author*\nLicense: Same terms as Vim itself (see |license|)\n```\n"
  },
  {
    "path": "vim-rails.md",
    "content": "---\ntitle: Vim-rails\ncategory: Vim\nhtml_class: key-codes\n---\n\nAlternate files\n---------------\n\n### Alternate files\n\n| Command | Description |\n| --- | --- |\n| `:A` |  alternate file (test)          |\n| `:R` |  related file (controller/view) |\n\n### What it does\n\n| .                     | :A                | :R              |\n| ----                  | ---               | ---             |\n| **Model**             | test/models/      | db/schema.rb    |\n| **Controller method** | test/controllers/ | app/views/      |\n| **View template**     | test/views/       | app/controllers |\n\nAbbreviations\n-------------\n\nType `:Rabbrev` for a full list.\n\n| Abbrev  | Expansion        |\n| ---     | ---              |\n| `AC::`  | ActionController |\n| `AR::`  | ActiveRecord     |\n| `AV::`  | ActionView       |\n| `...`   | ...              |\n| ---     | ---              |\n| `logd(` | logger.debug     |\n| `logi(` | logger.info      |\n| `...`   | ...              |\n{:.no-head.greycode}\n\n### Model\n\n| Abbrev   | Expansion                 |\n| ---      | ---                       |\n| `bt(`    | `belongs_to`              |\n| `hm(`    | `has_many`                |\n| `ho(`    | `has_one`                 |\n| `habtm(` | `has_and_belongs_to_many` |\n{:.no-head.greycode}\n\n### Controllers\n\n| Abbrev  | Expansion        |\n| ---     | ---              |\n| `pa[`   | params           |\n| `re(`   | redirect_to      |\n| `rp(`   | render partial:  |\n| `rst(`  | respond_to       |\n{:.no-head.greycode}\n\n### Views\n\n| Abbrev  | Expansion                   |\n| ---     | ---                         |\n| `dotiw` | `distance_of_time_in_words` |\n| `taiw`  | `time_ago_in_words`         |\n{:.no-head.greycode}\n\nExtracting partials\n-------------------\n\n```rb\n# from view => app/views/home/_foo_partial.haml\n  :Rextract home/foo_partial\n\n# from model => app/models/concerns/foo_concern.rb\n  :Rextract FooConcern\n```\n\nLoading files\n-------------\n\n### App\n\n    :Econtroller <file>     # app/controllers/*_controller.rb\n    :Ehelper                # app/helpers/*_helper.rb\n    :Emodel <file>          # app/models/*.rb\n    :Ejob <file>            # app/jobs/*_job.rb\n    :Emailer <file>         # app/mailers/*.rb\n\n### DB\n\n    :Emigration <file>     # db/migrations/*.rb\n    :Eschema               # db/schema.rb\n    \n### Lib\n\n    :Elib <file>      # lib/*.rb\n    :Elib             # Gemfile\n    :Etask <file>     # lib/tasks/*.rake\n\n### Assets\n\n    :Estylesheet\n    :Ejavascript\n\n### Views\n\n    :Eview\n    :Elayout\n\n### Test\n\n    :Espec\n    :Eunittest\n      # test/{unit,models,helpers}/*_test.rb\n      # spec/{unit,models,helpers}/*_spec.rb\n\n    :Efunctionaltest\n      # test/{functional,controllers,mailers}/*_test.rb\n      # spec/{functional,controllers,mailers}/*_spec.rb\n\n    :Eintegrationtest\n      # test/integration/*_test.rb\n      # spec/{features,requests,integration}/*_spec.rb\n      # features/*.feature\n\n    :Efixtures\n    :Efunctionaltest\n\n### Config\n\n    :Einitializer <file>          # config/initializers/*.rb\n    :Elocale                      # config/locales/*.yml\n    :Eenvironment                 # application.rb\n    :Eenvironment development     # config/environments/*.rb\n\n## Reference\n\n * [vim-rails](https://github.com/tpope/vim-rails)\n"
  },
  {
    "path": "vim-unite.md",
    "content": "---\ntitle: Vim-Unite\ncategory: Vim\n---\n\n### Usage\n\n``` vim\n:Unite file\n:Unite file_rec/async:!\n:Unite tag\n:Unite buffer\n```\n\n### Sources\n\n* `file/new`\n* `file/async`\n* `file_rec/async`\n* `file_rec/git`\n* `buffer`\n* `buffer_tab` (current tab only)\n* `tab`\n* `register`\n* `bookmark`\n* `source`\n\n### Options\n\n| Option                     | Description                                                 |\n| -------------------------- | ----------------------------------------------------------- |\n| `-start-insert`            |                                                             |\n| `-no-quit`                 |                                                             |\n| `-winheight=10`            |                                                             |\n| `-quick-match`             | select by pressing asdf keys                                |\n| `-winwidth=40`             | use with vertical                                           |\n| `-no-split`                | open in current buffer                                      |\n| `-auto-preview`            | great for outline                                           |\n| `-vertical`                | open as sidebar                                             |\n| `-buffer-name=xxx -resume` | resume the next time it's called (faster)                   |\n| `-input=`                  | reset input (use with -resume)                              |\n| `-unique`                  | remove duplicates (eg, if using `file_rec` with `file_mru`) |\n"
  },
  {
    "path": "vim.md",
    "content": "---\ntitle: Vim\ncategory: Vim\ntags: [Featured]\nupdated: 2020-07-05\nweight: -10\n---\n\n## Getting started\n{: .-three-column}\n\n### Introduction\n\n [Vim](http://www.vim.org/) is a very efficient text editor. This reference was made for Vim 8.0.   \n\n For shortcut notation, see `:help key-notation`.\n\n### Exiting\n{: .-prime}\n\n| Shortcut       | Description                      |\n| -------------- | -------------------------------- |\n| `:q`           | Close file                       |\n| `:qa`          | Close all files                  |\n| ---            | ---                              |\n| `:w`           | Save                             |\n| `:wq` _/_ `:x` | Save and close file              |\n| ---            | ---                              |\n| `ZZ`           | Save and quit                    |\n| `:q!` _/_ `ZQ`           | Quit without checking changes    |\n{: .-shortcuts}\n\n### Exiting insert mode\n\n| Shortcut          | Description |\n| ---               | ---         |\n| `Esc` _/_ `<C-[>` | Exit insert mode |\n| `<C-C>`           | Exit insert mode, and abort current command |\n{: .-shortcuts}\n\n## Editing\n{: .-three-column}\n\n### Editing\n\n| Shortcut | Description                         |\n| ---      | ---                                 |\n| `a`      | Append                              |\n| `A`      | Append from end of line             |\n| `i`      | Insert                              |\n| `o`      | Next line                           |\n| `O`      | Previous line                       |\n| ---      | ---                                 |\n| `s`      | Delete char and insert              |\n| `S`      | Delete line and insert              |\n| `C`      | Delete until end of line and insert |\n| ---      | ---                                 |\n| `r`      | Replace one character               |\n| `R`      | Enter Replace mode                  |\n| ---      | ---                                 |\n| `u`      | Undo changes                        |\n| `<C-R>`  | Redo changes                        |\n{: .-shortcuts}\n\n### Clipboard\n\n| Shortcut        | Description                 |\n| ---             | ---                         |\n| `x`             | Delete character            |\n| ---             | ---                         |\n| `dd`            | Delete line _(Cut)_         |\n| `yy`            | Yank line _(Copy)_          |\n| ---             | ---                         |\n| `p`             | Paste                       |\n| `P`             | Paste before                |\n| ---             | ---                         |\n| `\"*p` _/_ `\"+p` | Paste from system clipboard |\n| `\"*y` _/_ `\"+y` | Paste to system clipboard   |\n{: .-shortcuts}\n\n### Visual mode\n\n| Shortcut | Description             |\n| ---      | ---                     |\n| `v`      | Enter visual mode       |\n| `V`      | Enter visual line mode  |\n| `<C-V>`  | Enter visual block mode |\n{: .-shortcuts}\n\n#### In visual mode\n\n| Shortcut    | Description             |\n| ---         | ---                     |\n| `d` _/_ `x` | Delete selection        |\n| `s`         | Replace selection       |\n| `y`         | Yank selection _(Copy)_ |\n{: .-shortcuts}\n\nSee [Operators](#operators) for other things you can do.\n\n### Find & Replace\n\n| Shortcut      | Description                            |\n| ---           | ---                                    |\n| :%s/foo/bar/g | Replace foo with bar in whole document |\n\n## Navigating\n{: .-three-column}\n\n### Directions\n\n| Shortcut            | Description       |\n| ---                 | ---               |\n| `h` `j` `k` `l`     | Arrow keys        |\n| `<C-U>` _/_ `<C-D>` | Half-page up/down |\n| `<C-B>` _/_ `<C-F>` | Page up/down      |\n{: .-shortcuts}\n\n### Words\n\n| Shortcut     | Description               |\n| ---          | ---                       |\n| `b` _/_ `w`  | Previous/next word        |\n| `ge` _/_ `e` | Previous/next end of word |\n{: .-shortcuts}\n\n### Line\n\n| Shortcut     | Description                        |\n| ---          | ---                                |\n| `0` _(zero)_ | Start of line                      |\n| `^`          | Start of line _(after whitespace)_ |\n| `$`          | End of line                        |\n{: .-shortcuts}\n\n### Character\n\n| `fc`  | Go forward to character `c`  |\n| `Fc`  | Go backward to character `c` |\n{: .-shortcuts}\n\n### Document\n\n| Shortcut    | Description              |\n| ---         | ---                      |\n| `gg`        | First line               |\n| `G`         | Last line                |\n| `:{number}` | Go to line `{number}`    |\n| `{number}G` | Go to line `{number}`    |\n| `{number}j` | Go down `{number}` lines |\n| `{number}k` | Go up `{number}` lines   |\n{: .-shortcuts}\n\n### Window\n\n| Shortcut | Description              |\n| ---      | ---                      |\n| `zz`     | Center this line         |\n| `zt`     | Top this line            |\n| `zb`     | Bottom this line         |\n| `H`      | Move to top of screen    |\n| `M`      | Move to middle of screen |\n| `L`      | Move to bottom of screen |\n{: .-shortcuts}\n\n### Search\n\n| Shortcut  | Description                         |\n| ---       | ---                                 |\n| `n`       | Next matching search pattern        |\n| `N`       | Previous match                      |\n| `*`       | Next whole word under cursor        |\n| `#`       | Previous whole word under cursor    |\n{: .-shortcuts}\n\nOperators\n---------\n{: .-three-column}\n\n### Usage\n{: .-prime}\n\nOperators let you operate in a range of text (defined by *motion*). These are performed in normal mode.\n{: .-setup}\n\n| `d`      | `w`    |\n| Operator | Motion |\n{: .-css-breakdown}\n\n### Operators list\n\n| Shortcut | Description                     |\n| ---      | ---                             |\n| `d`      | Delete                          |\n| `y`      | Yank _(copy)_                   |\n| `c`      | Change _(delete then insert)_   |\n| ---      | ---                             |\n| `>`      | Indent right                    |\n| `<`      | Indent left                     |\n| `=`      | Autoindent                      |\n| ---      | ---                             |\n| `g~`     | Swap case                       |\n| `gU`     | Uppercase                       |\n| `gu`     | Lowercase                       |\n| ---      | ---                             |\n| `!`      | Filter through external program |\n{: .-shortcuts}\n\nSee `:help operator`\n\n### Examples\n\nCombine operators with *motions* to use them.\n{: .-setup}\n\n| Shortcut               | Description                               |\n| ---                    | ---                                       |\n| `d`_d_                 | _(repeat the letter)_ Delete current line |\n| `d`_w_                 | Delete to next word                       |\n| `d`_b_                 | Delete to beginning of word               |\n| _2_`dd`                | Delete 2 lines                            |\n| `d`_ip_                | Delete a text object _(inside paragraph)_ |\n| _(in visual mode)_ `d` | Delete selection                          |\n\nSee: `:help motion.txt`\n\nText objects\n------------\n{: .-three-column}\n\n### Usage\n{: .-prime}\n\nText objects let you operate (with an *operator*) in or around text blocks (*objects*).\n{: .-setup}\n\n| `v`      | `i`                  | `p`         |\n| Operator | [i]nside or [a]round | Text object |\n{: .-css-breakdown}\n\n### Text objects\n\n| Shortcut               | Description           |\n| ---                    | ---                   |\n| `p`                    | Paragraph             |\n| `w`                    | Word                  |\n| `s`                    | Sentence              |\n| ---                    | ---                   |\n| `[` `(` `{` `<`        | A [], (), or {} block |\n| `'` `\"` <code>`</code> | A quoted string       |\n| ---                    | ---                   |\n| `b`                    | A block [(            |\n| `B`                    | A block in [{         |\n| `t`                    | A XML tag block       |\n{: .-shortcuts}\n\n### Examples\n\n| Shortcut    | Description                        |\n| ---         | ---                                |\n| `vip`       | Select paragraph                   |\n| `vipipipip` | Select more                        |\n| ---         | ---                                |\n| `yip`       | Yank inner paragraph               |\n| `yap`       | Yank paragraph (including newline) |\n| ---         | ---                                |\n| `dip`       | Delete inner paragraph             |\n| `cip`       | Change inner paragraph             |\n{: .-shortcuts}\n\nSee [Operators](#operators) for other things you can do.\n\n### Diff\n \n| Shortcut                             | Description                              |\n| ---                                  | ---                                      |\n| `gvimdiff file1 file2 [file3]`       | See differences between files, in HMI    |\n \n\nMisc\n----\n\n### Tab pages\n\n| Shortcut              | Description                     |\n| ---                   | ---                             |\n| `:tabedit [file]`     | Edit file in a new tab          |\n| `:tabfind [file]`     | Open file if exists in new tab  |\n| `:tabclose`           | Close current tab               |\n| `:tabs`               | List all tabs                   | \n| `:tabfirst`           | Go to first tab                 |\n| `:tablast`            | Go to last tab                  |\n| `:tabn    `           | Go to next tab                  |\n| `:tabp    `           | Go to previous tab              |\n\n### Folds\n\n| Shortcut      | Description                  |\n| ---           | ---                          |\n| `zo` _/_ `zO` | Open                         |\n| `zc` _/_ `zC` | Close                        |\n| `za` _/_ `zA` | Toggle                       |\n| ---           | ---                          |\n| `zv`          | Open folds for this line     |\n| ---           | ---                          |\n| `zM`          | Close all                    |\n| `zR`          | Open all                     |\n| ---           | ---                          |\n| `zm`          | Fold more _(foldlevel += 1)_ |\n| `zr`          | Fold less _(foldlevel -= 1)_ |\n| ---           | ---                          |\n| `zx`          | Update folds                 |\n{: .-shortcuts}\n\nUppercase ones are recursive (eg, `zO` is open recursively).\n\n### Navigation\n\n| Shortcut            | Description                |\n| ---                 | ---                        |\n| `%`                 | Nearest/matching `{[()]}`  |\n| `[(` `[{` `[<`      | Previous `(` or `{` or `<` |\n| `])`                | Next                       |\n| ---                 | ---                        |\n| `[m`                | Previous method start      |\n| `[M`                | Previous method end        |\n{: .-shortcuts}\n\n### Jumping\n\n| Shortcut | Description                  |\n| ---      | ---                          |\n| `<C-O>`  | Go back to previous location |\n| `<C-I>`  | Go forward                   |\n| ---      | ---                          |\n| `gf`     | Go to file in cursor         |\n{: .-shortcuts}\n\n### Counters\n\n| Shortcut | Description      |\n| ---      | ---              |\n| `<C-A>`  | Increment number |\n| `<C-X>`  | Decrement        |\n{: .-shortcuts}\n\n### Windows\n\n| `z{height}<Cr>` | Resize pane to `{height}` lines tall |\n\n### Tags\n\n| Shortcut              | Description                                     |\n| ---                   | ---                                             |\n| `:tag Classname`      | Jump to first definition of Classname           |\n| ---                   | ---                                             |\n| `<C-]>`               | Jump to definition                              |\n| `g]`                  | See all definitions                             |\n| `<C-T>`               | Go back to last tag                             |\n| `<C-O> <C-I>`         | Back/forward                                    |\n| ---                   | ---                                             |\n| `:tselect Classname`  | Find definitions of Classname                   |\n| `:tjump Classname`    | Find definitions of Classname (auto-select 1st) |\n{: .-shortcuts}\n\n### Case\n\n| Shortcut | Description                          |\n| ---      | ---                                  |\n| `~`      | Toggle case (Case => cASE)           |\n| `gU`     | Uppercase                            |\n| `gu`     | Lowercase                            |\n| ---      | ---                                  |\n| `gUU`    | Uppercase current line (also `gUgU`) |\n| `guu`    | Lowercase current line (also `gugu`) |\n{: .-shortcuts}\n\nDo these in visual or normal mode.\n\n### Marks\n\n| Shortcut           | Description                                          |\n| ---                | ---                                                  |\n| <code>`^</code>    | Last position of cursor in insert mode               |\n| <code>`.</code>    | Last change in current buffer                        |\n| <code>`\"</code>    | Last exited current buffer                           |\n| <code>`0</code>    | In last file edited                                  |\n| <code>''</code>    | Back to line in current buffer where jumped from     |\n| <code>``</code>    | Back to position in current buffer where jumped from |\n| <code>`[</code>    | To beginning of previously changed or yanked text    |\n| <code>`]</code>    | To end of previously changed or yanked text          |\n| <code>`&lt;</code> | To beginning of last visual selection                |\n| <code>`&gt;</code> | To end of last visual selection                      |\n| ---                | ---                                                  |\n| `ma`               | Mark this cursor position as `a`                     |\n| <code>`a</code>    | Jump to the cursor position `a`                      |\n| `'a`               | Jump to the beginning of the line with position `a`  |\n| <code>d'a</code>   | Delete from current line to line of mark `a`         |\n| <code>d`a</code>   | Delete from current position to position of mark `a` |\n| <code>c'a</code>   | Change text from current line to line of `a`         |\n| <code>y`a</code>   | Yank text from current position to position of `a`   |\n| ---                | ---                                                  |\n| `:marks`           | List all current marks                               |\n| `:delm a`          | Delete mark `a`                                      |\n| `:delm a-d`        | Delete marks `a`, `b`, `c`, `d`                      |\n| `:delm abc`        | Delete marks `a`, `b`, `c`                           |\n{: .-shortcuts}\n\n### Misc\n\n| Shortcut   | Description                                       |\n| ---        | ---                                               |\n| `.`        | Repeat last command                               |\n| `]p`       | Paste under the current indentation level         |\n| ---        | ---                                               |\n| `:set ff=unix` | Convert Windows line endings to Unix line endings |\n{: .-shortcuts}\n\n### Command line\n\n| Shortcut     | Description                               |\n| ---          | ---                                       |\n| `<C-R><C-W>` | Insert current word into the command line |\n| `<C-R>\"`     | Paste from \" register                     |\n| `<C-X><C-F>` | Auto-completion of path in insert mode    |\n{: .-shortcuts}\n\n### Text alignment\n\n    :center [width]\n    :right [width]\n    :left\n\nSee `:help formatting`\n\n### Calculator\n\n| Shortcut      | Description                               |\n| ---           | ---                                       |\n| `<C-R>=128/2` | Shows the result of the division : '64'   |\n\nDo this in insert mode.\n\n### Exiting with an error\n\n    :cq\n    :cquit\n\nWorks like `:qa`, but throws an error. Great for aborting Git commands.\n\n\n### Spell checking\n\n| Shortcut                     | Description                                             |\n| ---                          | ---                                                     |\n| `:set spell spelllang=en_us` | Turn on US English spell checking                       |\n| `]s`                         | Move to next misspelled word after the cursor           |\n| `[s`                         | Move to previous misspelled word before the cursor      |\n| `z=`                         | Suggest spellings for the word under/after the cursor   |\n| `zg`                         | Add word to spell list                                  |\n| `zw`                         | Mark word as bad/misspelling                            |\n| `zu` / `C-X (Insert Mode)`   | Suggest words for bad word under cursor from spellfile  |\n{: .-shortcuts}\n\nSee `:help spell`\n\n\nAlso see\n--------\n\n- [Vim cheatsheet](https://vim.rtorr.com/) _(vim.rotrr.com)_\n- [Vim documentation](http://vimdoc.sourceforge.net/htmldoc/) _(vimdoc.sourceforge.net)_\n- [Interactive Vim tutorial](http://openvim.com/) _(openvim.com)_\n"
  },
  {
    "path": "vimscript-functions.md",
    "content": "---\ntitle: Vimscript functions\ncategory: Vim\n---\n\n## Dictionaries and lists\n\n### Dictionaries\n\n```vim\nlet colors = {\n  \\ \"apple\": \"red\",\n  \\ \"banana\": \"yellow\"\n}\n\necho colors[\"a\"]\necho get(colors, \"apple\")   \" suppress error\n\nremove(colors, \"apple\")\n\n\" :help E715\nif has_key(dict, 'foo')\nif empty(dict)\nkeys(dict)\nlen(dict)\n\nmax(dict)\nmin(dict)\n\ncount(dict, 'x')\nstring(dict)\n\nmap(dict, '<>> \" . v:val')\nextend(s:fruits, { ... })\n```\n\n```vim\nfor key in keys(mydict)\n  echo key . ': ' . mydict(key)\nendfor\n```\n\n### Lists\n\n```vim\nlet mylist = [1, two, 3, \"four\"]\n\nlet first = mylist[0]\nlet last  = mylist[-1]\n\n\" Suppresses errors\nlet second = get(mylist, 1)\nlet second = get(mylist, 1, \"NONE\")\n```\n\nFunctions\n---------\n\n### Buffer\n\n    line('.')             \" current line number\n    col('.')\n    col('$')\n\n    getline('.')          \" current line as a string\n    getline(1)            \" get line 1\n    getline(1, 5)         \" get lines 1-5\n    search('^$')          \" next blank line, returns line number\n    search('^$','n')      \" but don't move cursor\n\n    getcurpos()           \" [bufnum, lnum, col, off, curswant]\n    getpos('.')           \" [bufnum, lnum, col, off]\n\n    nextnonblank(1)       \" next non-blank line after line1\n    prevnonblank()\n\n### Marks\n\n    getpos(\"'a\")          \" position of a mark\n    setpos(\"'a\",...)\n\n    getpos(\"'<\")          \" position of selection start\n\n### Cursor\n\n    cursor(line,col)      \" moves cursor\n    cursor(line,col,off,curswant)\n\n    getcurpos()           \" returns [bufnum,line,col,off,curswant]\n\n### Expand\n\n    expand('<cword>')      \" word under cursor\n    expand('%')            \" current file\n\n    \" <cword>  current word on cursor\n    \" :p    full path\n    \" :h    head\n    \" :p:h  dirname   (/Users/rsc/project)\n    \" :t    tail      (file.txt)\n    \" :r    root      (file)\n    \" :e    extension (.txt)\n    \" see :h cmdline-special\n\n### Files\n\n    fnameescape('string')\n    fnamemodify('main.c', ':p:h')\n    fnamemodify(fname, ':e')   \" current file extension - see expand()\n    filereadable(fname)\n    getfsize('file.txt')\n    getcwd()\n\n    globpath(&rtp, \"plugin/commentary.vim\")\n\n### Math\n\n    fmod(9, 2)  \" modulus\n    abs(-0.5)\n    sqrt(9)\n\n    trunc(1.84)\n    floor(1.84)\n    ceil(1.84)\n    float2nr(3.14)\n\n### Casting\n\n    str2float('0.2')\n    str2nr('240')\n    str2nr('ff', '16')\n\n    string(0.3)\n\n### Type checking\n\n    type(var) == type(0)\n    type(var) == type(\"\")\n    type(var) == type(function(\"tr\"))\n    type(var) == type([])\n    type(var) == type({})\n    type(var) == type(0.0)\n\n### Date/time\n\n    strftime('%c')\n    strftime('%c',getftime('file.c'))\n\n### Strings\n\n    if a =~ '\\s*'\n    substitute(str, '.', 'x', 'g')\n    strpart(\"abcdef\", 3, 2)    \" == \"de\" (substring)\n    strpart(\"abcdef\", 3)       \" == \"def\"\n    stridx(\"abcdef\", \"e\")      \" == 4\n    strridx()                  \" reverse\n\n    matchstr('testing','test')  \" == 'test' (or '')\n    match('testing','test')     \" == 0\n    matchend('testing','test')  \" == 4\n    match('testing','\\ctest')   \" ignore case\n\n    split(str, '\\zs')           \" split into characters\n\n    strlen(str)\n    strchars()                  \" accounts for composing chars\n    strwidth()                  \" accounts for ambig characters\n    strdisplaywidth()           \" accounts for tab stops\n\n    toupper(str)\n    tolower(str)\n    tr('foo', '_-', '  ')\n\n### Syntax\n\n    synstack(line('.'),col('.'))   \" returns many\n    synID(line('.'),col('.'),1)    \" only one\n\n    synIDattr(id,\"bg\")\n    synIDattr(id,\"name\")\n    synIDtrans()\n\n    \" syntax stack\n    map(synstack(line('.'), col('.')), 'synIDattr(v:val, \"name\")')\n\n### Shell\n\n    system('ls '.shellescape(expand('%:h')))\n\n### Registers\n\n    getreg('*')\n    getregtype('*')     \" v(char), V(line) <ctrl-v>(block)\n\nComparisons\n-----------\n\n    if name ==# 'John'     \" case-sensitive\n    if name ==? 'John'     \" case-insensitive\n    if name == 'John'      \" depends on :set ignorecase\n    \" also: is#, is?, >=#, >=?, and so on\n\n    if \"hello\" =~ '.*'\n    if \"hello\" !~ '.*'\n\nExecuting\n---------\n\n### Running commands\n\n    normal 'ddahello'\n    exe 'normal ^C'  \" with expansions\n    wincmd J\n"
  },
  {
    "path": "vimscript-snippets.md",
    "content": "---\ntitle: Vimscript snippets\ncategory: Vim\n---\n\n### Bind function to key and command\n\n    command! YoFunctionHere call s:YoFunctionHere()\n    nnoremap <silent> x :call <SID>FunctionHere()<CR>\n    function! s:FunctionHere()\n    endfunction\n\n### Call a function in insert mode\n\n    inoremap X <C-R>=script#myfunction()<CR>\n    inoremap <F2> <C-R>=MyVimFunc()?'':''<CR>\n\n### Checking plugins\n\n    if globpath(&rtp, \"plugin/commentary.vim\") != \"\"\n\n## Autoload\n\n    \" autoload/hello.vim\n    if exists(\"g:hello_loaded\") | finish | endif\n    let g:hello_loaded=1\n\n    function hello#method()\n    endfunction\n\n    \" calling hello#method() will load only if autoload()\n\n## Misc\n\n### Version check\n\n    if version < 704\n      echom \"requires vim >= 7.4\"\n    endif\n\n"
  },
  {
    "path": "vimscript.md",
    "content": "---\ntitle: Vim scripting\ncategory: Vim\nprism_languages: [vim]\nupdated: 2020-07-05\nweight: -10\ntags: [Featurable]\n---\n\n### Start hacking\n\n```vim\nlet name = \"John\"\necho \"Hello, \" . name\n```\n\nYou can either put this in a script (`script.vim`) and run it (`:source script.vim`), or you can type the commands individually in normal mode as `:let` and `:echo`.\n\n### Learn by example\n\n```vim\nfunction! SuperTab()\n  let l:part = strpart(getline('.'),col('.')-2,1)\n  if (l:part =~ '^\\W\\?$')\n      return \"\\<Tab>\"\n  else\n      return \"\\<C-n>\"\n  endif\nendfunction\n\nimap <Tab> <C-R>=SuperTab()<CR>\n```\n\n[Here](http://www.vimbits.com/bits/46)'s another example with [functions](#functions), [variables](#variables) and [mapping](#mapping).\n\nVariables\n---------\n\n### Defining\n{: .-prime}\n\n```vim\nlet var = \"hello\"\n```\n\n### Variable prefixes\n\n```vim\nlet g:ack_options = '-s -H'    \" g: global\nlet s:ack_program = 'ack'      \" s: local (to script)\nlet l:foo = 'bar'              \" l: local (to function)\n```\n\nThe `s:` prefix is also available in function names. See `:help local-variables`\n\n### Other prefixes\n\n```vim\nlet w:foo = 'bar'    \" w: window\nlet b:state = 'on'   \" b: buffer\nlet t:state = 'off'  \" t: tab\necho v:var           \" v: vim special\n```\n\n```vim\nlet @/ = ''          \" @  register (this clears last search pattern)\necho $PATH           \" $  env\n```\n\n### Vim options\n\n```vim\necho 'tabstop is ' . &tabstop\nif &insertmode\necho &g:option\necho &l:option\n```\n\nPrefix Vim options with `&`\n\n### Operators\n\n```vim\na + b             \" numbers only!\n'hello ' . name   \" concat\n```\n\n```vim\nlet var -= 2\nlet var += 5\nlet var .= 'string'   \" concat\n```\n\n## Strings\n\n### Strings\n\n```vim\nlet str = \"String\"\nlet str = \"String with \\n newline\"\n\nlet literal = 'literal, no \\ escaping'\nlet literal = 'that''s enough'  \" double '' => '\n\necho \"result = \" . re   \" concatenation\n```\n\nAlso see `:help literal-string` and `:help expr-quote`.\nSee: [Strings](http://learnvimscriptthehardway.stevelosh.com/chapters/26.html)\n\n### String functions\n\n```vim\nstrlen(str)    \" length\nlen(str)       \" same\nstrchars(str)  \" character length\n\nsplit(\"one two three\")       \"=> ['one', 'two', 'three']\nsplit(\"one.two.three\", '.')  \"=> ['one', 'two', 'three']\n\njoin(['a', 'b'], ',')  \"=> 'a,b'\n\ntolower('Hello')\ntoupper('Hello')\n```\n\nAlso see `:help functions`\nSee: [String functions](http://learnvimscriptthehardway.stevelosh.com/chapters/27.html)\n\nFunctions\n---------\n\n### Functions\n{: .-prime}\n\n```vim\n\" prefix with s: for local script-only functions\nfunction! s:Initialize(cmd, args)\n  \" a: prefix for arguments\n  echo \"Command: \" . a:cmd\n\n  return 1\nendfunction\n```\n\nSee: [Functions](http://learnvimscriptthehardway.stevelosh.com/chapters/23.html)\n\n### Overwriting\n```vim\nfunction f1()\n  echo \"f1\"\nendfunction\n\n\nfunction! f1()\n  echo \"f1 overridden\"\nendfunction\n```\n\nIf you define two functions with the same name, Vim will throw an error complaining that the function `f1` already exists. To overwrite the previous function with the same name, add a `!` after the function keyword.\n\n### Namespacing\n\n```vim\nfunction! myplugin#hello()\n```\n\n### Calling functions\n\n```vim\ncall s:Initialize()\ncall s:Initialize(\"hello\")\n```\n\n### Consuming return values\n\n```vim\necho \"Result: \" . s:Initialize()\n```\n\n### Abortable\n\n```vim\nfunction! myfunction() abort\nendfunction\n```\n\nAborts when an error occurs.\n\n### Var arguments\n\n```vim\nfunction! infect(...)\n  echo a:0    \"=> 2\n  echo a:1    \"=> jake\n  echo a:2    \"=> bella\n\n  for s in a:000  \" a list\n    echon ' ' . s\n  endfor\nendfunction\n\ninfect('jake', 'bella')\n```\n\nSee `:help function-argument`.  See: [Var arguments](http://learnvimscriptthehardway.stevelosh.com/chapters/24.html)\n\nLoops\n-----\n\n```vim\nfor s in list\n  echo s\n  continue  \" jump to start of loop\n  break     \" breaks out of a loop\nendfor\n```\n\n```vim\nwhile x < 5\nendwhile\n```\n\nCustom commands\n---------------\n\n### Custom commands\n{: .-prime}\n\n```vim\ncommand! Save :set fo=want tw=80 nowrap\n```\n\nCustom commands start with uppercase letters. The `!` redefines a command if it already exists.\n\n### Commands calling functions\n\n```vim\ncommand! Save call <SID>foo()\n```\n{: .-setup}\n\n```vim\nfunction! s:foo()\n  ...\nendfunction\n```\n\n### Commands with arguments\n\n```vim\ncommand! -nargs=? Save call script#foo(<args>)\n```\n{: .-setup}\n\n| What | What |\n| ---- | ---- |\n| `-nargs=0` | 0 arguments, default |\n| `-nargs=1` | 1 argument, includes spaces |\n| `-nargs=?` | 0 or 1 argument |\n| `-nargs=*` | 0+ arguments, space separated |\n| `-nargs=+` | 1+ arguments, space reparated |\n\nFlow\n----\n\n### Conditionals\n\n```vim\nlet char = getchar()\nif char == \"\\<LeftMouse>\"\n  \" ...\nelseif char == \"\\<RightMouse>\"\n  \" ...\nelse\n  \" ...\nendif\n```\n\n### Truthiness\n\n```vim\nif 1 | echo \"true\"  | endif\nif 0 | echo \"false\" | endif\n```\n\n```vim\nif 1       \"=> 1 (true)\nif 0       \"=> 0 (false)\nif \"1\"     \"=> 1 (true)\nif \"456\"   \"=> 1 (true)\nif \"xfz\"   \"=> 0 (false)\n```\n\nNo booleans. `0` is false, `1` is true.\nSee: [Truthiness](http://learnvimscriptthehardway.stevelosh.com/chapters/21.html)\n\n### Operators\n\n```vim\nif 3 > 2\nif a && b\nif (a && b) || (c && d)\nif !c\n```\n\nSee `:help expression-syntax`.\nSee: [Operators](http://learnvimscriptthehardway.stevelosh.com/chapters/22.html)\n\n### Strings\n\n```vim\nif name ==# 'John'     \" case-sensitive\nif name ==? 'John'     \" case-insensitive\nif name == 'John'      \" depends on :set ignorecase\n\n\" also: is#, is?, >=#, >=?, and so on\n```\n\n### Identity operators\n\n```vim\na is b\na isnot b\n```\n\nChecks if it's the same instance object.\n\n### Regexp matches\n\n```vim\n\"hello\" =~ 'xx*'\n\"hello\" !~ 'xx*'\n\"hello\" =~ '\\v<\\d+>'\n```\n\n`\\v` enables \"extended\" regex mode which allows word boundary (`<>`), `+`, and more.\n\n### Single line\n\n```vim\nif empty(a:path) | return [] | endif\na ? b : c\n```\n\nUse `|` to join lines together.\n\n### Boolean logic\n\n```vim\nif g:use_dispatch && s:has_dispatch\n  ···\nendif\n```\n\nLists\n-----\n\n### Lists\n\n```vim\nlet mylist = [1, two, 3, \"four\"]\n\nlet first = mylist[0]\nlet last  = mylist[-1]\n\n\" Suppresses errors\nlet second = get(mylist, 1)\nlet second = get(mylist, 1, \"NONE\")\n```\n\n### Functions\n\n```vim\nlen(mylist)\nempty(mylist)\n\nsort(list)\nlet sortedlist = sort(copy(list))\n\nsplit('hello there world', ' ')\n```\n\n### Concatenation\n\n```vim\nlet longlist = mylist + [5, 6]\nlet mylist += [7, 8]\n```\n\n### Sublists\n\n```vim\nlet shortlist = mylist[2:-1]\nlet shortlist = mylist[2:]     \" same\n\nlet shortlist = mylist[2:2]    \" one item\n```\n\n### Push\n\n```vim\nlet alist = [1, 2, 3]\nlet alist = add(alist, 4)\n```\n\n### Map\n\n```vim\ncall map(files, \"bufname(v:val)\")  \" use v:val for value\ncall filter(files, 'v:val != \"\"')\n```\n\nDictionaries\n------------\n\n### Dictionaries\n\n```vim\nlet colors = {\n  \\ \"apple\": \"red\",\n  \\ \"banana\": \"yellow\"\n}\n\necho colors[\"a\"]\necho get(colors, \"apple\")   \" suppress error\n```\n\nSee `:help dict`\n\n### Using dictionaries\n\n```vim\nremove(colors, \"apple\")\n```\n\n```vim\n\" :help E715\nif has_key(dict, 'foo')\nif empty(dict)\nkeys(dict)\nlen(dict)\n```\n\n```vim\nmax(dict)\nmin(dict)\n```\n\n```vim\ncount(dict, 'x')\nstring(dict)\n```\n\n```vim\nmap(dict, '<>> \" . v:val')\n```\n\n### Iteration\n\n```vim\nfor key in keys(mydict)\n  echo key . ': ' . mydict[key]\nendfor\n```\n\n### Prefixes\n\n```vim\nkeys(s:)\n```\n\nPrefixes (`s:`, `g:`, `l:`, etc) are actually dictionaries.\n\n### Extending\n\n```vim\n\" Extending with more\nlet extend(s:fruits, { ... })\n```\n\nCasting\n-------\n\n```vim\nstr2float(\"2.3\")\nstr2nr(\"3\")\nfloat2nr(\"3.14\")\n```\n\nNumbers\n-------\n\n### Numbers\n{: .-prime}\n\n```vim\nlet int = 1000\nlet int = 0xff\nlet int = 0755   \" octal\n```\n\nSee `:help Number`.\nSee: [Numbers](http://learnvimscriptthehardway.stevelosh.com/chapters/25.html)\n\n### Floats\n\n```vim\nlet fl = 100.1\nlet fl = 5.4e4\n```\n\nSee `:help Float`\n\n### Arithmetic\n\n```vim\n3 / 2     \"=> 1, integer division\n3 / 2.0   \"=> 1.5\n3 * 2.0   \"=> 6.0\n```\n\n### Math functions\n\n```vim\nsqrt(100)\nfloor(3.5)\nceil(3.3)\nabs(-3.4)\n\nsin() cos() tan()\nsinh() cosh() tanh()\nasin() acos() atan()\n```\n\nVim-isms\n--------\n\n### Execute a command\n\n```vim\nexecute \"vsplit\"\nexecute \"e \" . fnameescape(filename)\n```\n\nRuns an ex command you typically run with `:`. Also see `:help execute`.\nSee: [Execute a command](http://learnvimscriptthehardway.stevelosh.com/chapters/28.html)\n\n### Running keystrokes\n\n```vim\nnormal G\nnormal! G   \" skips key mappings\n\nexecute \"normal! gg/foo\\<cr>dd\"\n```\n\nUse `:normal` to execute keystrokes as if you're typing them in normal mode. Combine with `:execute` for special keystrokes.\nSee: [Running keystrokes](http://learnvimscriptthehardway.stevelosh.com/chapters/29.html)\n\n### Getting filenames\n\n```vim\necho expand(\"%\")      \" path/file.txt\necho expand(\"%:t\")    \" file.txt\necho expand(\"%:p:h\")  \" /home/you/path/file.txt\necho expand(\"%:r\")    \" path/file\necho expand(\"%:e\")    \" txt\n```\n\nSee `:help expand`\n\n### Silencing\n\n```vim\nsilent g/Aap/p\n```\n\nSuppresses output. See `:help silent`\n\n### Echo\n\n```vim\nechoerr 'oh it failed'\nechomsg 'hello there'\necho 'hello'\n\nechohl WarningMsg | echomsg \"=> \" . a:msg | echohl None\n```\n\n\n### Settings\n\n```vim\nset number\nset nonumber\nset number!     \" toggle\nset numberwidth=5\nset guioptions+=e\n```\n\n### Prompts\n\n```vim\nlet result = confirm(\"Sure?\")\nexecute \"confirm q\"\n```\n\n### Built-ins\n\n```vim\nhas(\"feature\")  \" :h feature-list\nexecutable(\"python\")\nglobpath(&rtp, \"syntax/c.vim\")\n\nexists(\"$ENV\")\nexists(\":command\")\nexists(\"variable\")\nexists(\"+option\")\nexists(\"g:...\")\n```\n\nMapping\n-------\n{: .-three-column}\n\n### Mapping commands\n\n```vim\nnmap\nvmap\nimap\nxmap\nnnoremap\nvnoremap\ninoremap\nxnoremap\n...\n```\n\n### Explanation\n\n```vim\n[nvixso](nore)map\n```\n\n```\n │       └ don't recurse\n │\n └ normal, visual, insert,\n   eX mode, select, operator-pending\n```\n{: .-setup}\n\n### Arguments\n\n| `<buffer>` | only in current buffer |\n| `<silent>` | no echo |\n| `<nowait>` | |\n\nSyntax\n------\n\n### Highlights\n\n```vim\nhi Comment\n  term=bold,underline\n  gui=bold\n  ctermfg=4\n  guifg=#80a0ff\n```\n\n### Filetype detection\n\n```vim\naugroup filetypedetect\n  au! BufNewFile,BufRead *.json setf javascript\naugroup END\n\nau Filetype markdown setlocal spell\n```\n\n### Conceal\n\n```vim\nset conceallevel=2\nsyn match newLine \"<br>\" conceal cchar=}\nhi newLine guifg=green\n```\n\n### Region conceal\n\n```vim\nsyn region inBold concealends matchgroup=bTag start=\"<b>\" end=\"</b>\"\nhi inBold gui=bold\nhi bTag guifg=blue\n```\n\n### Syntax\n\n```vim\nsyn match :name \":regex\" :flags\n\nsyn region Comment  start=\"/\\*\"  end=\"\\*/\"\nsyn region String   start=+\"+    end=+\"+\t skip=+\\\\\"+\n\nsyn cluster :name contains=:n1,:n2,:n3...\n\nflags:\n  keepend\n  oneline\n  nextgroup=\n  contains=\n  contained\n\nhi def link markdownH1 htmlH1\n```\n\n### Include guards\n\n```vim\nif exists('g:loaded_myplugin')\n  finish\nendif\n\n\" ...\n\nlet g:loaded_myplugin = 1\n```\n"
  },
  {
    "path": "virtual-dom.md",
    "content": "---\ntitle: Virtual-dom\ncategory: JavaScript libraries\n---\n\n### About\n\nSee <https://www.npmjs.com/package/virtual-dom>\n\n### Example\n\n```js\nvar h = require('virtual-dom/h')\nvar diff = require('virtual-dom/diff')\nvar patch = require('virtual-dom/patch')\nvar createElement = require('virtual-dom/create-element')\n```\n\n### Rendering\n\n```js\ntree = h('div', { style: { color: 'blue' } }, [ 'hello' ])\nel = createElement(tree)\ndocument.body.appendChild(root)\n```\n\n### Updating\n\n```js\ntree2 = h('div', { style: { color: 'blue' } }, [ 'hello world' ])\ndelta = diff(tree, tree2)\nel = patch(el, delta) // patch() modifies el\n```\n"
  },
  {
    "path": "vite.config.js",
    "content": "import { fileURLToPath, URL } from 'url'\nimport { defineConfig } from 'vitest/config'\n\nexport default defineConfig({\n  test: {\n    globals: true,\n    environment: 'jsdom'\n  },\n  resolve: {\n    alias: {\n      '~': fileURLToPath(new URL('./src', import.meta.url))\n    }\n  }\n})\n"
  },
  {
    "path": "vows.md",
    "content": "---\ntitle: Vows\ncategory: JavaScript libraries\n---\n\n### About vows\n\n  * [Vowsjs.org](http://vowsjs.org/)\n\n### CoffeeScript usage\n\n    vows = require \"vows\"\n    assert = require \"assert\"\n\n    vows\n      .describe('My tests')\n      .addBatch\n        'context':\n          topic: ->\n            100\n          'should work': (number) ->\n            assert.equal number, 100\n\n      .export(module)\n\n### Running\n\n    vows test/*-test.* --spec\n\n### Assertions\n\n    assert.equal a, b\n    assert.notEqual a, b\n    assert.strictEqual a, b\n\n    assert.isNaN(number)\n    assert.instanceOf(object, klass)\n    assert.isUndefined(object)\n    assert.isFunction(func)\n    assert.isNull(object)\n    assert.isNotZero(object)\n    assert.isObject(object)\n    assert.isString(object)\n\n### Async\n\n    .addBatch\n      topic: ->\n        doStuff()\n        @callback 2\n      'check things': (n) ->\n        assert.equal 2, n\n"
  },
  {
    "path": "vscode.md",
    "content": "---\ntitle: Visual Studio Code\ncategory: Apps\nupdated: 2018-02-01\nweight: -5\nkeywords:\n  - \"⌘P: Show files\"\n  - \"⌘B: Toggle sidebar\"\n  - \"⌘J: Toggle panel\"\n  - \"F5: Debug\"\nintro: |\n  [Visual Studio Code](https://code.visualstudio.com/), or VSCode, is an open-source code editor. This guide targets VSCode v1.19.\n---\n\n## Shortcuts\n{: .-three-column}\n\n### Command palette\n\n| Key   | Description       |\n| ----- | ----------------- |\n| `⇧⌘P` | Show all commands |\n| `⌘P`  | Show files        |\n{: .-shortcuts}\n\n### Sidebars\n\n| Key   | Description    |\n| ----- | -------------- |\n| `⌘B`  | Toggle sidebar |\n| ----  | ----           |\n| `⇧⌘E` | Explorer       |\n| `⇧⌘F` | Search         |\n| `⇧⌘D` | Debug          |\n| `⇧⌘X` | Extensions     |\n| `⇧^G` | Git (SCM)      |\n{: .-shortcuts}\n\n### Search\n\n| Key   | Description      |\n| ----- | ---------------- |\n| `⌘F`  | Find             |\n| `⌥⌘F` | Replace          |\n| ----  | ----             |\n| `⇧⌘F` | Find in files    |\n| `⇧⌘H` | Replace in files |\n{: .-shortcuts}\n\n### Panel\n\n| Key                        | Description   |\n| -------------------------- | ------------- |\n| `⌘J`                       | Toggle panel  |\n| ----                       | ----          |\n| `⇧⌘M`                      | Problems      |\n| `⇧⌘U`                      | Output        |\n| `⇧⌘Y`                      | Debug console |\n| <code>^`</code>            | Terminal      |\n{: .-shortcuts}\n\n### View\n\n| Key      | Description      |\n| -------- | ---------------- |\n| `⌘k` `z` | Zen mode         |\n| ----     | ----             |\n| `⌘k` `u` | Close unmodified |\n| `⌘k` `w` | Close all        |\n{: .-shortcuts}\n\n### Debug\n\n| Key    | Description             |\n| ------ | ----------------------- |\n| `F5`   | Start                   |\n| `⇧F5`  | Stop                    |\n| `⇧⌘F5` | Restart                 |\n| ----   | ----                    |\n| `^F5`  | Start without debugging |\n| ----   | ----                    |\n| `F9`   | Toggle breakpoint       |\n| ----   | ----                    |\n| `F10`  | Step over               |\n| `F11`  | Step into               |\n| `⇧F11` | Step out                |\n| ----   | ----                    |\n| `⇧⌘D`  | Debug sidebar           |\n| `⇧⌘Y`  | Debug panel             |\n{: .-shortcuts}\n\n## References\n\n* [Keyboard shortcuts (MacOS)](https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf) _(code.visualstudio.com)_\n* [Keyboard shortcuts (Windows)](https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf) _(code.visualstudio.com)_\n* [Keyboard shortcuts (Linux)](https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf) _(code.visualstudio.com)_\n"
  },
  {
    "path": "vue.md",
    "content": "---\ntitle: Vue.js\ncategory: JavaScript\nupdated: 2019-12-26\nweight: -10\nintro: |\n  [Vue.js](https://vuejs.org/) is an open-source Model–view–viewmodel JavaScript framework for building user interfaces and single-page applications.\n---\n\n{%raw%}\n\nExpressions\n----------\n{: .-three-column}\n\n### Expressions\n\n```html\n<div id=\"app\">\n  <p>I have a {{ product }}</p>\n  <p>{{ product + 's' }}</p>\n  <p>{{ isWorking ? 'YES' : 'NO' }}</p>\n  <p>{{ product.getSalePrice() }}</p>\n</div>\n```\n\nSee: [Delimiters](https://vuejs.org/v2/api/#delimiters)\n\n### Binding\n\n```html\n<a v-bind:href=\"url\">...</a>\n```\n\n#### Shorthand syntax\n```html\n<a :href=\"url\">...</a>\n```\n{: data-line=\"1\"}\n\n#### True or false will add or remove attribute\n```html\n<button :disabled=\"isButtonDisabled\">...\n```\n\n#### If isActive is truthy, the class ‘active’ will appear\n```html\n<div :class=\"{ active: isActive }\">...\n```\n\n#### Style color set to value of activeColor\n```html\n<div :style=\"{ color: activeColor }\">\n```\n\nSee: [v-bind](https://vuejs.org/v2/api/#v-bind)\n\n### Directives\n\n#### Element inserted/removed based on truthiness\n```html\n<p v-if=\"inStock\">{{ product }}</p>\n```\n```html\n<p v-else-if=\"onSale\">...</p>\n<p v-else>...</p>\n```\n\n#### Toggles the display: none CSS property\n```html\n<p v-show=\"showProductDetails\">...</p>\n```\n\n#### Two-way data binding\n```html\n<input v-model=\"firstName\" >\n```\n\n| Method | Description |\n| --- | --- |\n| `v-model.lazy=\"...\"` | Syncs input after change event |\n| `v-model.number=\"...\"` | Always returns a number |\n| `v-model.trim=\"...\"` | Strips whitespace |\n\nSee: [Directives](https://vuejs.org/v2/api/#Directives)\n\n### Actions/Events\n\n#### Calls addToCart method on component\n```html\n<button v-on:click=\"addToCart\">...\n```\n\n#### Shorthand syntax\n```html\n<button @click=\"addToCart\">...\n```\n{: data-line=\"1\"}\n\n#### Arguments can be passed\n```html\n<button @click=\"addToCart(product)\">...\n```\n\n#### To prevent default behavior (e.g. page reload)\n```html\n<form @submit.prevent=\"addProduct\">...\n```\n\n#### Only trigger once\n```html\n<img @mouseover.once=\"showImage\">...\n```\n\n| Method | Description |\n| --- | --- |\n| `.stop` | Stop all event propagation |\n| `.self ` | Only trigger if event.target is element itself |\n\n#### Keyboard entry example\n```html\n<input @keyup.enter=\"submit\">\n```\n\n#### Call onCopy when control-c is pressed\n```html\n<input @keyup.ctrl.c=\"onCopy\">\n```\n\nSee: [Events](https://vuejs.org/v2/guide/events.html)\n\n### List rendering\n\n#### The `:key` is always recommended\n```html\n<li v-for=\"item in items\"\n    :key=\"item.id\">\n  {{ item }}\n</li>\n```\n{: data-line=\"2\"}\n\n#### To access the position in the array\n```html\n<li v-for=\"(item, index) in items\">...\n```\n\n#### To iterate through objects\n```html\n<li v-for=\"(value, key) in object\">...\n```\n\n#### Using `v-for` with a component\n```html\n<cart-product v-for=\"item in products\"\n              :product=\"item\"\n              :key=\"item.id\">\n```\n\nSee: [List Rendering](https://vuejs.org/v2/guide/list.html)\n\n\nComponent\n--------\n\n### Component anatomy\n\n```js\nVue.component('my-component', {\n  components: {\n    // Components that can be used in the template\n    ProductComponent,\n    ReviewComponent\n  },\n  props: {\n    // The parameters the component accepts\n    message: String,\n    product: Object,\n    email: {\n      type: String,\n      required: true,\n      default: \"none\"\n      validator: function (value) {\n        // Should return true if value is valid\n      }\n    }\n  },\n  data: function() {\n    // `data` must be a function\n    return {\n      firstName: 'Vue',\n      lastName: 'Mastery'\n    }\n  },\n  computed: {\n    // Return cached values until dependencies change\n    fullName: function () {\n      return this.firstName + ' ' + this.lastName\n    }\n  },\n  watch: {\n    // Called when firstName changes value\n    firstName: function (value, oldValue) { ... }\n  },\n  methods: { ... },\n  template: '<span>{{ message }}</span>',\n  // Can also use backticks in `template` for multi-line\n})\n```\n{: data-line=\"3, 8, 16, 21, 28, 34, 39\"}\n\nSee: [Components Basics](https://vuejs.org/v2/guide/components.html)\n\n### Lifecycle hooks\n\n| Method | Description |\n| --- | --- |\n| `beforeCreate` | After the instance has been initialized [#](https://vuejs.org/v2/api/#beforeCreate) |\n| `created` | After the instance is created [#](https://vuejs.org/v2/api/#created) |\n| `beforeMount` | Before the first render [#](https://vuejs.org/v2/api/#beforeMount) |\n| `mounted` | After the instance has been mounted [#](https://vuejs.org/v2/api/#mounted) |\n| `beforeUpdate` | When data changes, before the DOM is patched [#](https://vuejs.org/v2/api/#beforeUpdate) |\n| `updated` | After a data change [#](https://vuejs.org/v2/api/#updated) |\n| `beforeDestroy` | Before the instance is destroyed [#](https://vuejs.org/v2/api/#beforeDestroy) |\n| `destroyed` | After a Vue instance has been destroyed [#](https://vuejs.org/v2/api/#destroyed) |\n\nSee: [Lifecycle Hooks](https://vuejs.org/v2/api/#Options-Lifecycle-Hooks)\n\n### Custom events\n\n#### Set listener on component, within its parent\n```html\n<button-counter v-on:incrementBy=\"incWithVal\">\n```\n\n#### Inside parent component\n```js\nmethods: {\n  incWithVal: function (toAdd) { ... }\n}\n```\n\n#### Inside button-counter template\n```js\nthis.$emit(\n    'incrementBy', // Custom event name\n    5 // Data sent up to parent\n  )\n```\n\nUse props to pass data into child components,\ncustom events to pass data to parent elements.\n\nSee: [Custom Events](https://vuejs.org/v2/guide/components-custom-events.html)\n\nSingle file components\n--------\n\n### Single file\n```html\n<template>\n  <p>{{ greeting }} World!</p>\n</template>\n\n<script>\nmodule.exports = {\n  data: function () {\n    return {\n      greeting: 'Hello'\n    }\n  }\n}\n</script>\n\n<style scoped>\np {\n  font-size: 2em;\n  text-align: center;\n}\n</style>\n```\n\nSee: [Single File Components](https://vuejs.org/v2/guide/single-file-components.html)\n\n### Separation\n```html\n<template>\n  <div>This will be pre-compiled</div>\n</template>\n<script src=\"./my-component.js\"></script>\n<style src=\"./my-component.css\"></style>\n```\n\nSee: [What About Separation of Concerns?](https://vuejs.org/v2/guide/single-file-components.html#What-About-Separation-of-Concerns)\n\nSlots\n--------\n\n### Using a single slot\n\n#### Component template\n```html\n<div>\n  <h2>I'm a title</h2>\n  <slot>\n    Only displayed if no slot content\n  </slot>\n</div>\n```\n{: data-line=\"3,4,5\"}\n\n#### Use of component with data for slot\n```html\n<my-component>\n  <p>This will go in the slot</p>\n</my-component>\n```\n{: data-line=\"2\"}\n\nSee: [Slots](https://vuejs.org/v2/guide/components-slots.html)\n\n### Multiple slots\n\n#### Component template\n```html\n<div class=\"container\">\n  <header>\n    <slot name=\"header\"></slot>\n  </header>\n  <main>\n    <slot>Default content</slot>\n  </main>\n  <footer>\n    <slot name=\"footer\"></slot>\n  </footer>\n</div>\n```\n{: data-line=\"3,6,9\"}\n\n#### Use of component with data for slots\n```html\n<app-layout>\n  <h1 slot=\"header\">Page title</h1>\n  <p>the main content.</p>\n  <p slot=\"footer\">Contact info</p>\n</app-layout>\n```\n{: data-line=\"2,3,4\"}\n\nSee: [Slots](https://vuejs.org/v2/guide/components-slots.html)\n\nAlso see\n--------\n\n* [Vue CLI](https://cli.vuejs.org/) _(cli.vuejs.org)_\n* [Vue Router](https://router.vuejs.org/) _(router.vuejs.org)_\n* [Vue DevTools](https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=en) _(chrome.google.com)_\n* [Nuxt.js](https://nuxtjs.org/) _(nuxtjs.org)_\n* [Vue.js v1.0.28 cheatsheet](vue@1.0.28/) _Legacy version_\n\n{%endraw%}\n"
  },
  {
    "path": "vue@1.0.28.md",
    "content": "---\ntitle: Vue.js v1.0.28\ncategory: JavaScript\ndeprecated: true\nweight: -10\nintro: |\n  **Deprecated:** this guide targets an old version of Vuej.js (v1.0.28). See the [updated Vue.js cheatsheet](vue) for new versions.\n---\n\n{% raw %}\n\n### Lists\n\n```html\n<li v-for=\"todo in todos\">\n  {{ todo.text }}\n  {{ $index }}\n</li>\n```\n\n### Events\n\n```html\n<button v-on:click='submit'>Go</button>\n```\n\n### Components\n\n```js\nnew Vue({\n  components: { app: App }\n})\n```\n\n## API\n\n```js\nVue.extend({ ... })        // creating components\nVue.nextTick(() => {...})\n\nVue.set(object, key, val)  // reactive\nVue.delete(object, key)\n\nVue.directive('my-dir', { bind, update, unbind })\n// <div v-my-dir='...'></div>\n\nVue.elementDirective('my-dir', { bind, update, unbind })\n// <my-dir>...</my-dir>\n\nVue.component('my-component', Vue.extend({ .. }))\n\nVue.partial('my-partial', '<div>hi {{msg}}</div>')\n// <partial name='my-partial'></partial>\n```\n\n```js\nnew Vue({\n  data: { ... }\n  props: ['size'],\n  props: { size: Number },\n  computed: { fullname() { return this.name + ' ' + this.lastName } },\n  methods: { go() { ... } },\n  watch: { a (val, oldVal) { ... } },\n  el: '#foo',\n  template: '...',\n  replace: true, // replace element (default true)\n\n  // lifecycle\n  created () {},\n  beforeCompile () {},\n  compiled () {},\n  ready () {}, // $el is inserted for the first time\n  attached () {},\n  detached () {},\n  beforeDestroy () {},\n  destroyed () {},\n\n  // options\n  directives: {},\n  elementDirectives: {},\n  filters: {},\n  components: {},\n  transitions: {},\n  partials: {}\n})\n```\n\n## Vue templates\nVia [vueify](https://www.npmjs.com/package/vueify)\n\n```js\n// app.vue\n<template>\n  <h1 class=\"red\">{{msg}}</h1>\n</template>\n \n<script>\n  module.exports = {\n    data () {\n      return {\n        msg: 'Hello world!'\n      }\n    }\n  }\n</script> \n```\n\nAlso\n\n```html\n<template lang='jade'>\nh1(class='red') {{msg}}\n</template>\n```\n\n{% endraw %}\n"
  },
  {
    "path": "watchexec.md",
    "content": "---\ntitle: Watchexec\nupdated: 2017-10-18\ncategory: CLI\nweight: -1\nkeywords:\n  - \"watchexec --excts js,jsx -- npm test\"\n  - \"watchexec --help\"\nintro: |\n  [mattgreen/watchexec](https://github.com/mattgreen/watchexec) runs commands whenever certain files change.\n---\n\n### Installation\n\n#### OSX\n\n```bash\nbrew install watchexec\n```\n\n#### Rust\n\n```bash\ncargo install watchexec\n```\n\nFor Linux and Windows, get it from [GitHub releases](https://github.com/mattgreen/watchexec).\n\n### Getting started\n\n```bash\nwatchexec --exts js,jsx -- npm test\n```\n\nRuns `npm test` when `js,jsx` files change.\n\n```bash\nwatchman -w lib -w test -- npm test\n```\n\nRuns `npm test` when `lib/` and `test/` files change.\n\n### Other options\n\n#### Flags\n\n| `-c` `--clear`   | Clear screen                         |\n| `-r` `--restart` | Restart process if its still running |\n\n#### Options\n\n| `-s` `--signal SIGKILL` | Kill signal to use            |\n| `-d` `--debounce MS`    | Debounce by `MS` milliseconds |\n| `-e` `--exts EXTS`      | Extensions                    |\n| `-i` `--ignore PATTERN` | Ignore these files            |\n| `-w` `--watch PATH`     | Watch these directories       |\n\n## Also see\n\n* [mattgreen/watchexec](https://github.com/mattgreen/watchexec) _(github.com)_\n"
  },
  {
    "path": "watchman.md",
    "content": "---\ntitle: Watchman\nupdated: 2017-10-18\nweight: -1\nkeywords:\n- \"watchman watch ~/src\"\n- \"watchman watch-list\"\n- \"watchman -- trigger ~/rsc remake '*.js' -- make \"\n---\n\n### Getting started\n\n```bash\nwatchman watch ./src\n```\n\nAdds `./src` to the watch list.\n\n```bash\nwatchman -- trigger ./src retest '*.js' -- npm test\n```\n\nAdds a trigger called `retest` to run `npm test` every time `*.js` changes in `./src`.\n\n### Watching\n\n```\nwatchman watch ~/src\nwatchman watch-list\nwatchman watch-del ~/src\n```\n\n## Also see\n\n * [Documentation](https://facebook.github.io/watchman/docs/install.html) _(facebook.github.io)_\n"
  },
  {
    "path": "web-workers.md",
    "content": "---\ntitle: Web workers\ncategory: JavaScript\nupdated: 2017-10-30\nweight: -1\n---\n\n## Web workers\n\n#### Client\n\n```js\nvar worker = new Worker('worker.js')\n\nworker.onmessage = function (message) {\n  alert(JSON.stringify(message.data))\n})\n\nworker.postMessage('hello!')\n```\n\nMessages can be anything that can be serialized into JSON (objects, arrays, strings, numbers, booleans). See: [structured clone](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)\n\n#### Worker\n\n```js\nself.onmessage = function (message) {\n  ···\n}\n\nself.postMessage({ msg: 'hello' })\n```\n\n### Message data\n\n#### [MessageEvent]\n\n```js\nbubbles: false\ncancelBubble: false\ncancelable: false\nclipboardData: undefined\ncurrentTarget: Worker\ndata: \"Hello\"             ← the data\ndefaultPrevented: false\neventPhase: 0\nlastEventId: \"\"\norigin: \"\"\nports: Array[0]\nreturnValue: true\nsource: null\nsrcElement: Worker\ntarget: Worker\ntimeStamp: 1344821022383\ntype: \"message\"\n```\n\nThese are the contents of `message` on onmessage.\n"
  },
  {
    "path": "webpack.md",
    "content": "---\ntitle: Webpack\ncategory: JavaScript libraries\nupdated: 2017-09-26\nintro: |\n  This is a very basic \"getting started with Webpack\" guide for use with [Webpack](https://webpack.js.org) v3. This doesn't cover all features, but it should get you started in understanding the config file format.\n---\n\n### Basic config\n\n#### webpack.config.js\n\n```js\nmodule.exports = {\n  context: __dirname,\n  entry: 'src/app.js',\n  output: {\n    path: __dirname + '/public',\n    filename: 'app.js'\n  }\n}\n```\n\n#### Terminal\n\n```bash\nnpm install --save-dev webpack\n```\n\n| `webpack` | build\n| `webpack -- -p` | build production\n| `webpack -- --watch` | compile continuously\n\nThis compiles `src/app.js` into `public/app.js`. (Note: you may need to use `./node_modules/.bin/webpack` as a command if you're not invoking Webpack via npm scripts.)\n\n### Multiple files\n\n#### webpack.config.js\n\n```js\nmodule.exports = {\n  entry: {\n    app: 'src/app.js',\n    vendor: 'src/vendor.js'\n  },\n  output: {\n    path: __dirname + '/public',\n    filename: '[name].js'\n  }\n}\n```\n{: data-line=\"2,3,4,8\"}\n\nThis creates `app.js` and `vendor.js`.\n\n## Loaders\n\n### Babel\n\n#### Terminal\n\n```bash\nnpm install --save-dev \\\n  babel-loader \\\n  babel-preset-env \\\n  babel-preset-react\n```\n\n#### webpack.config.js\n\n```js\nmodule.exports = {\n  ···\n  module: {\n    rules: [\n      { test: /\\.js$/,\n        exclude: /node_modules/,\n        use: [\n          { loader: 'babel-loader' }\n        ]\n      }\n    ]\n  }\n}\n```\n{: data-line=\"3,4,5,6,7,8\"}\n\n#### .babelrc\n\n```js\n{\n  \"presets\": [ \"env\", \"react\" ]\n}\n```\n\nAdds support for [Babel](http://babeljs.io).\n\n### CSS\n\n#### Terminal\n\n```bash\nnpm install --save-dev \\\n  css-loader \\\n  style-loader\n```\n\n#### webpack.config.js\n\n```js\nmodule.exports = {\n  ···\n  module: {\n    rules: [\n     { test: /\\.css$/,\n       exclude: /node_modules/,\n       use: [\n         { loader: 'style-loader' },\n         { loader: 'css-loader' }\n       ]\n      }\n    ]\n  }\n}\n```\n{: data-line=\"3,4,5,6,7,8,9\"}\n\n#### Your JavaScript\n\n```js\nimport './styles.css'\n// or:\nrequire('./styles.css')\n```\n\nThis allows you to use CSS inside your JavaScript. This packages your CSS inside your JavaScript bundle.\n\n### PostCSS\n\n#### Terminal\n\n```\nnpm install --save-dev \\\n  postcss-loader \\\n  postcss-cssnext\n```\n\n#### webpack.config.js\n\n```js\n···\n// Inside module.rules[]:\n{ test: /\\.css$/,\n  exclude: /node_modules/,\n  use: [\n    { loader: 'style-loader' },\n    { loader: 'css-loader' },\n    { loader: 'postcss-loader' }\n···\n```\n{: data-line=\"8\"}\n\n#### postcss.config.js\n\n```js\nmodule.exports = {\n  plugins: [\n    require('postcss-cssnext')()\n  ]\n}\n```\n{: data-line=\"3\"}\n\nThis example adds [postcss-cssnext](https://www.npmjs.com/package/postcss-cssnext) support to your CSS files.\n\n## Other features\n\n### Dev server\n\n#### package.json\n\n```json\n{ ···\n  \"scripts\": {\n    \"dev\": \"webpack-dev-server\"\n  }\n}\n```\n{: data-line=\"3\"}\n\n#### Terminal\n\n```bash\nnpm install --save-dev \\\n  webpack-dev-server\n```\n\n```bash\nnpm run dev\n```\n\nThis starts an HTTP server for development (port 8080 by default).\n"
  },
  {
    "path": "weechat.md",
    "content": "---\ntitle: Weechat\ncategory: Apps\n---\n\n## Keys\n{: .-three-column}\n\n### Buffers\n\n| Shortcut         | Description                      |\n| ---              | ---                              |\n| `^s` / `^u`      | Set unread marker on all windows |\n| ---              | ---                              |\n| `^p, A-left`     | Switch buffer left               |\n| `^n, A-right`    | Switch buffer right              |\n| `A-a`            | Next buffer with activity        |\n| `A-0...9`        | Switch buffers                   |\n| ---              | ---                              |\n| `F9` /` F10`     | Scroll buffer title              |\n| `F11` / `F12`    | Scroll nick list                 |\n| ---              | ---                              |\n| `A-w A-Left`     | Switch windows                   |\n| `A-w A-b`        | Balance windows                  |\n{: .-shortcuts}\n\n(`A-` is alt.)\n\n### Window commands\n\n| Shortcut         | Description                      |\n| ---              | ---                              |\n| `/window splith` | Split horizontal                 |\n| `/window splitv` | Split vertical                   |\n| `/window zoom`   | Zoom                             |\n\n### Search\n\n| `^r`              | Search      |\n| `Enter` `^j` `^m` | Stop search |\n{: .-shortcuts}\n"
  },
  {
    "path": "weinre.md",
    "content": "---\ntitle: Weinre\ncategory: JavaScript libraries\ntags: [Archived]\nintro: |\n  [weinre](https://www.npmjs.com/package/weinre) is a remote Web inspector. Note that it has been deprecated since 2016.\narchived: Weinre has been deprecated since 2016.\n---\n\n### Usage\n\n#### Install:\n\n```\n$ npm install -g weinre\n```\n\n#### Start the server:\n\n```\n$ weinre --boundHost 0.0.0.0\n$ open http://localhost:8080\n```\n\n### HTML to inject\n\n<!--prettier-ignore -->\n```html\n<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.async=1;js.src='http://'+location.hostname+':8080/target/target-script-min.js#anonymous';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','weinre');</script>\n```\n\n### References\n\n- [Weinre](http://people.apache.org/~pmuellr/weinre/)\n\n"
  },
  {
    "path": "wip/intl-datetime.md",
    "content": "---\ntitle: Intl.DateTimeFormat\ncategory: Hidden\ntags: [WIP]\nintro: |\n  `Intl.DateTimeFormat` is used to format date strings in JavaScript.\n---\n\n### Parsing\n\n#### As local time\n\n```js\nconst date = new Date(2012, 11, 20, 3, 0, 0)\n```\n\n#### As UTC time\n\n```js\nconst date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0))\n```\n\n#### From ISO strings\n\n```js\nconst date = new Date('2018-04-20T12:00:00Z')\n```\n\nNote that JavaScript doesn't \"store\" timezones in a date object. All these date objects, when expressed via `.toString()` or similar, will show the local timezone of the browser, regardless if you parsed UTC dates.\n\n### Formatting dates\n\n#### Default formatting\n\n```js\nconsole.log(new Intl.DateTimeFormat().format(date))\n// → '12/19/2012' (assuming America/Los_Angeles)\n```\n\n#### Custom locale\n\n```js\nconsole.log(new Intl.DateTimeFormat('en-GB').format(date))\n// → '19/12/2012' (date-first)\n```\n\n#### Custom timezone\n\n```js\nconsole.log(new Intl.DateTimeFormat('en-AU', {\n  timeZone: 'Australia/Sydney'\n}).format(date))\n// → '19/12/2012'\n```\n\n### Custom formats\n\n#### Time\n\n```js\nconsole.log(new Intl.DateTimeFormat('default', {\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric'\n}).format(date))\n// → '2:00:00 pm'\n```\n\n#### Date\n\n```js\nconsole.log(new Intl.DateTimeFormat('en-US', {\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric'\n}).format(date))\n// → '12/19/2012'\n```\n\nTo specify options without a locale, use `'default'` as a locale.\n\n### All options\n\n```js\n{\n  weekday: 'narrow' | 'short' | 'long',\n  era: 'narrow' | 'short' | 'long',\n  year: 'numeric' | '2-digit',\n  month: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long',\n  day: 'numeric' | '2-digit',\n  hour: 'numeric' | '2-digit',\n  minute: 'numeric' | '2-digit',\n  second: 'numeric' | '2-digit',\n  timeZoneName: 'short' | 'long',\n\n  // Time zone to express it in\n  timeZone: 'Asia/Shanghai',\n  // Force 12-hour or 24-hour\n  hour12: true | false,\n\n  // Rarely-used options\n  hourCycle: 'h11' | 'h12' | 'h23' | 'h24',\n  formatMatcher: 'basic' | 'best fit'\n}\n```\n\n\n## References\n\n- <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat>\n"
  },
  {
    "path": "wip/php.md",
    "content": "---\ntitle: PHP\ncategory: PHP\nprism_languages: [php]\n---\n\n### Hello world\n\n#### hello.php\n\n```php\n<?php\nfunction greetMe($name): string\n{\n    return \"Hello, \" . $name . \"!\";\n}\n\n$message = greetMe($name);\necho $message;\n```\n\nAll PHP files start with `<?php`.\n\nSee: [PHP tags](https://php.net/manual/en/language.basic-syntax.phptags.php)\n\n### Objects\n\n```php\n<?php\n\n$fruitsArray = array(\n    \"apple\" => 20,\n    \"banana\" => 30\n);\necho $fruitsArray['banana'];\n```\n\nOr cast as object\n\n```php\n<?php\n\n$fruitsObject = (object) $fruits;\necho $fruitsObject->banana;\n``` \n\n### Inspecting objects\n\n```php\n<?php\nvar_dump($object)\n```\n\nPrints the contents of a variable for inspection.\n\nSee: [var_dump](https://php.net/var_dump)\n\n### Classes\n\n```php\nclass Person\n{\n    public $name = '';\n}\n\n$person = new Person();\n$person->name = 'bob';\n\necho $person->name;\n```\n\n### Getters and setters\n\n```php\nclass Person \n{\n    private $name = '';\n\n    public function getName(): string\n    {\n        return $this->name;\n    }\n\n    public function setName(string $name)\n    {\n        $this->name = $name;\n        return $this;\n    }\n}\n\n$person = new Person();\n$person->setName('bob');\n\necho $person->getName();\n```\n\n### isset vs empty\n```php\n\n$options = [\n    'key' => 'value',\n    'blank' => '',\n    'nothing' => null,\n];\n\nvar_dump(isset($options['key']), empty($options['key'])); // true, false\nvar_dump(isset($options['blank']), empty($options['blank'])); // true, true\nvar_dump(isset($options['nothing']), empty($options['nothing'])); // false, true\n```\n"
  },
  {
    "path": "xpath.md",
    "content": "---\ntitle: Xpath\ncategory: HTML\ntags: [Featured]\nweight: -5\ndescription: |\n  $x('//div//p//*') == $('div p *'), $x('//[@id=\"item\"]') == $('#item'), and many other Xpath examples.\n---\n\n## Testing\n\n### Xpath test bed\n{: .-intro}\n\nTest queries in the Xpath test bed:\n\n- [Xpath test bed](http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm) _(whitebeam.org)_\n\n### Browser console\n\n```js\n$x(\"//div\")\n```\n\nWorks in Firefox and Chromium browsers.\n\n## Selectors\n\n### Descendant selectors\n\n| CSS                          | Xpath                                                    | ?                       |\n| ----                         | ----                                                     | --                      |\n| `h1`                         | `//h1`                                                   | [?](#prefixes)          |\n| `div p`                      | `//div//p`                                               | [?](#axes)              |\n| `ul > li`                    | `//ul/li`                                                | [?](#axes)              |\n| `ul > li > a`                | `//ul/li/a`                                              |                         |\n| `div > *`                    | `//div/*`                                                |                         |\n| ----                         | ----                                                     | --                      |\n| `:root`                      | `/`                                                      | [?](#prefixes)          |\n| `:root > body`               | `/body`                                                  |                         |\n{: .xp}\n\n### Attribute selectors\n\n| CSS                          | Xpath                                                    | ?                       |\n| ----                         | ----                                                     | --                      |\n| `#id`                        | `//*[@id=\"id\"]`                                           | [?](#predicates)        |\n| `.class`                     | `//*[@class=\"class\"]` *...[kinda](#class-check)*          |                         |\n| `input[type=\"submit\"]`       | `//input[@type=\"submit\"]`                                |                         |\n| `a#abc[for=\"xyz\"]`           | `//a[@id=\"abc\"][@for=\"xyz\"]`                             | [?](#chaining-order)    |\n| `a[rel]`                     | `//a[@rel]`                                              |                         |\n| ----                         | ----                                                     | --                      |\n| `a[href^='/']`               | `//a[starts-with(@href, '/')]`                           | [?](#string-functions)  |\n| `a[href$='pdf']`             | `//a[ends-with(@href, '.pdf')]`                          |                         |\n| `a[href*='://']`             | `//a[contains(@href, '://')]`                            |                         |\n| `a[rel~='help']`             | `//a[contains(@rel, 'help')]` *...[kinda](#class-check)* |                         |\n{: .xp}\n\n### Order selectors\n\n| CSS                          | Xpath                                                    | ?                       |\n| ----                         | ----                                                     | --                      |\n| `ul > li:first-of-type`      | `//ul/li[1]`                                             | [?](#indexing)          |\n| `ul > li:nth-of-type(2)`     | `//ul/li[2]`                                             |                         |\n| `ul > li:last-of-type`       | `//ul/li[last()]`                                        |                         |\n| `li#id:first-of-type`        | `//li[1][@id=\"id\"]`                                      | [?](#chaining-order)    |\n| `a:first-child`              | `//*[1][name()=\"a\"]`                                     |                         |\n| `a:last-child`               | `//*[last()][name()=\"a\"]`                                |                         |\n{: .xp}\n\n### Siblings\n\n| CSS                          | Xpath                                                    | ?                       |\n| ----                         | ----                                                     | --                      |\n| `h1 ~ ul`                    | `//h1/following-sibling::ul`                             | [?](#using-axes)        |\n| `h1 + ul`                    | `//h1/following-sibling::ul[1]`                          |                         |\n| `h1 ~ #id`                   | `//h1/following-sibling::[@id=\"id\"]`                     |                         |\n{: .xp}\n\n### jQuery\n\n| CSS                          | Xpath                                                    | ?                       |\n| ----                         | ----                                                     | --                      |\n| `$('ul > li').parent()`      | `//ul/li/..`                                             | [?](#other-axes)        |\n| `$('li').closest('section')` | `//li/ancestor-or-self::section`                         |                         |\n| `$('a').attr('href')`        | `//a/@href`                                              | [?](#steps)             |\n| `$('span').text()`           | `//span/text()`                                          |                         |\n{: .xp}\n\n### Other things\n\n| CSS                          | Xpath                                                    | ?                       |\n| ----                         | ----                                                     | --                      |\n| `h1:not([id])`               | `//h1[not(@id)]`                                         | [?](#boolean-functions) |\n| Text match                   | `//button[text()=\"Submit\"]`                              | [?](#operators)         |\n| Text match (substring)       | `//button[contains(text(),\"Go\")]`                        |                         |\n| Arithmetic                   | `//product[@price > 2.50]`                               |                         |\n| Has children                 | `//ul[*]`                                                |                         |\n| Has children (specific)      | `//ul[li]`                                               |                         |\n| Or logic                     | `//a[@name or @href]`                                    | [?](#operators)         |\n| Union (joins results)        | `//a | //div`                                            | [?](#unions)            |\n{: .xp}\n\n<style>\n/* ensure tables align */\ntable.xp {table-layout: fixed;}\ntable.xp tr>:nth-child(1) {width: 35%;}\ntable.xp tr>:nth-child(2) {width: auto;}\ntable.xp tr>:nth-child(3) {width: 10%; text-align:right;}\n</style>\n\n### Class check\n\n```bash\n//div[contains(concat(' ',normalize-space(@class),' '),' foobar ')]\n```\n\nXpath doesn't have the \"check if part of space-separated list\" operator, so this is the workaround ([source](http://pivotallabs.com/xpath-css-class-matching/)).\n\nExpressions\n-----------\n\n### Steps and axes\n\n| `//` | `ul` | `/`  | `a[@id='link']` |\n| Axis | Step | Axis | Step            |\n{: .-css-breakdown}\n\n### Prefixes\n\n| Prefix | Example               | What     |\n| ---    | ---                   | ---      |\n| `//`   | `//hr[@class='edge']` | Anywhere |\n| `./`   | `./a`                 | Relative |\n| `/`    | `/html/body/div`      | Root     |\n{: .-headers}\n\nBegin your expression with any of these.\n\n### Axes\n\n| Axis | Example             | What       |\n| ---  | ---                 | ---        |\n| `/`  | `//ul/li/a`         | Child      |\n| `//` | `//[@id=\"list\"]//a` | Descendant |\n{: .-headers}\n\nSeparate your steps with `/`. Use two (`//`) if you don't want to select direct children.\n\n### Steps\n\n```bash\n//div\n//div[@name='box']\n//[@id='link']\n```\n\nA step may have an element name (`div`) and [predicates](#predicate) (`[...]`). Both are optional.\nThey can also be these other things:\n\n```bash\n//a/text()     #=> \"Go home\"\n//a/@href      #=> \"index.html\"\n//a/*          #=> All a's child elements\n```\n\nPredicates\n----------\n\n### Predicates\n\n```bash\n//div[true()]\n//div[@class=\"head\"]\n//div[@class=\"head\"][@id=\"top\"]\n```\n\nRestricts a nodeset only if some condition is true. They can be chained.\n\n### Operators\n\n```bash\n# Comparison\n//a[@id = \"xyz\"]\n//a[@id != \"xyz\"]\n//a[@price > 25]\n```\n\n```bash\n# Logic (and/or)\n//div[@id=\"head\" and position()=2]\n//div[(x and y) or not(z)]\n```\n\nUse comparison and logic operators to make conditionals.\n\n### Using nodes\n\n```bash\n# Use them inside functions\n//ul[count(li) > 2]\n//ul[count(li[@class='hide']) > 0]\n```\n\n```bash\n# This returns `<ul>` that has a `<li>` child\n//ul[li]\n```\n\nYou can use nodes inside predicates.\n\n### Indexing\n\n```bash\n//a[1]                  # first <a>\n//a[last()]             # last <a>\n//ol/li[2]              # second <li>\n//ol/li[position()=2]   # same as above\n//ol/li[position()>1]   # :not(:first-of-type)\n```\n\nUse `[]` with a number, or `last()` or `position()`.\n\n### Chaining order\n\n```bash\na[1][@href='/']\na[@href='/'][1]\n```\n\nOrder is significant, these two are different.\n\n### Nesting predicates\n\n```\n//section[.//h1[@id='hi']]\n```\n\nThis returns `<section>` if it has an `<h1>` descendant with `id='hi'`.\n\nFunctions\n---------\n\n### Node functions\n\n```bash\nname()                     # //[starts-with(name(), 'h')]\ntext()                     # //button[text()=\"Submit\"]\n                           # //button/text()\nlang(str)\nnamespace-uri()\n```\n\n```bash\ncount()                    # //table[count(tr)=1]\nposition()                 # //ol/li[position()=2]\n```\n\n### Boolean functions\n\n```bash\nnot(expr)                  # button[not(starts-with(text(),\"Submit\"))]\n```\n\n### String functions\n\n```bash\ncontains()                 # font[contains(@class,\"head\")]\nstarts-with()              # font[starts-with(@class,\"head\")]\nends-with()                # font[ends-with(@class,\"head\")]\n```\n\n```bash\nconcat(x,y)\nsubstring(str, start, len)\nsubstring-before(\"01/02\", \"/\")  #=> 01\nsubstring-after(\"01/02\", \"/\")   #=> 02\ntranslate()\nnormalize-space()\nstring-length()\n```\n\n### Type conversion\n\n```bash\nstring()\nnumber()\nboolean()\n```\n\nAxes\n----\n\n### Using axes\n\n```bash\n//ul/li                       # ul > li\n//ul/child::li                # ul > li (same)\n//ul/following-sibling::li    # ul ~ li\n//ul/descendant-or-self::li   # ul li\n//ul/ancestor-or-self::li     # $('ul').closest('li')\n```\n\nSteps of an expression are separated by `/`, usually used to pick child nodes. That's not always true: you can specify a different \"axis\" with `::`.\n\n| `//` | `ul` | `/child::` | `li` |\n| Axis | Step | Axis       | Step |\n{: .-css-breakdown}\n\n### Child axis\n\n```bash\n# both the same\n//ul/li/a\n//child::ul/child::li/child::a\n```\n\n`child::` is the default axis. This makes `//a/b/c` work.\n\n```bash\n# both the same\n# this works because `child::li` is truthy, so the predicate succeeds\n//ul[li]\n//ul[child::li]\n```\n\n```bash\n# both the same\n//ul[count(li) > 2]\n//ul[count(child::li) > 2]\n```\n\n### Descendant-or-self axis\n\n```bash\n# both the same\n//div//h4\n//div/descendant-or-self::h4\n```\n\n`//` is short for the `descendant-or-self::` axis.\n\n```bash\n# both the same\n//ul//[last()]\n//ul/descendant-or-self::[last()]\n```\n\n### Other axes\n\n| Axis                 | Abbrev | Notes                                            |\n| ---                  | ---    | ---                                              |\n| `ancestor`           |        |                                                  |\n| `ancestor-or-self`   |        |                                                  |\n| ---                  | ---    | ---                                              |\n| `attribute`          | `@`    | `@href` is short for `attribute::href`           |\n| `child`              |        | `div` is short for `child::div`                  |\n| `descendant`         |        |                                                  |\n| `descendant-or-self` | `//`   | `//` is short for `/descendant-or-self::node()/` |\n| `namespace`          |        |                                                  |\n| ---                  | ---    | ---                                              |\n| `self`               | `.`    | `.` is short for `self::node()`                  |\n| `parent`             | `..`   | `..` is short for `parent::node()`               |\n| ---                  | ---    | ---                                              |\n| `following`          |        |                                                  |\n| `following-sibling`  |        |                                                  |\n| `preceding`          |        |                                                  |\n| `preceding-sibling`  |        |                                                  |\n{: .-headers}\n\nThere are other axes you can use.\n\n### Unions\n\n```bash\n//a | //span\n```\n\nUse `|` to join two expressions.\n\nMore examples\n-------------\n\n### Examples\n\n```bash\n//*                 # all elements\ncount(//*)          # count all elements\n(//h1)[1]/text()    # text of the first h1 heading\n//li[span]          # find a <li> with an <span> inside it\n                    # ...expands to //li[child::span]\n//ul/li/..          # use .. to select a parent\n```\n\n### Find a parent\n\n```bash\n//section[h1[@id='section-name']]\n```\nFinds a `<section>` that directly contains `h1#section-name`\n\n```bash\n//section[//h1[@id='section-name']]\n```\n\nFinds a `<section>` that contains `h1#section-name`.\n(Same as above, but uses descendant-or-self instead of child)\n\n### Closest\n\n```bash\n./ancestor-or-self::[@class=\"box\"]\n```\n\nWorks like jQuery's `$().closest('.box')`.\n\n### Attributes\n\n```bash\n//item[@price > 2*@discount]\n```\n\nFinds `<item>` and check its attributes\n\nReferences\n----------\n{: .-one-column}\n\n* [Xpath test bed](http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm) _(whitebeam.org)_\n"
  },
  {
    "path": "yaml.md",
    "content": "---\ntitle: Yaml\ncategory: Markup\nprism_languages: [yaml]\n---\n\n### Dictionaries and lists\n\n```yaml\n# comments start with \"#\"\n# dictionary are written like \"key: value\"\nname: Martin D'vloper\nlanguages:\n  perl: Elite\n  python: Elite\n  pascal: Lame\n\n# list items beginn with a \"- \"\nfoods:\n  - Apple\n  - Orange\n  - Strawberry\n  - Mango\n\n# booleans are lower case\nemployed: true\n```\n\n\n### Multiline strings\n\n```yaml\n# Literal Block Scalar\nMultiline: |\n  exactly as you see\n  will appear these three\n  lines of poetry\n```\n\n```yaml\n# Folded Block Scalar\nMultiline: <\n  this is really a\n  single line of text\n  despite appearances\n```\n\n### Inheritance\n\n```yaml\nparent: &defaults\n  a: 2\n  b: 3\n\nchild:\n  <<: *defaults\n  b: 4\n```\n\n### Reference content\n\n```yaml\nvalues: &ref\n  - These values\n  - will be reused below\n  \nother_values:\n  <<: *ref\n```\n"
  },
  {
    "path": "yargs.md",
    "content": "---\ntitle: Yargs\ncategory: JavaScript libraries\n---\n\n### Basic usage\n\n```js\nvar argv = require('yargs').argv;\n\nargv._         // [ ... ]\nargv.$0        // \"node bin/mybin\"\nargv.verbose   // --verbose\n```\n\n### Help and version\n\n```js\nvar argv = require('yargs')\n\n  // version\n  .alias('v', 'version')\n  .version(function() { return require('../package').version; })\n  .describe('v', 'show version information')\n\n  // help text\n  .alias('h', 'help')\n  .help('help')\n  .usage('Usage: $0 -x [num]')\n  .showHelpOnFail(false, \"Specify --help for available options\")\n```\n\n### Options\n\n```js\n  .option('f', {\n      alias : 'file',\n      describe: 'x marks the spot',\n      type: 'string', /* array | boolean | string */\n      nargs: 1,\n      demand: true,\n      demand: 'file is required',\n      default: '/etc/passwd'\n      // also: count:true, requiresArg:true\n  })\n\n  .options({\n    f: { ... }\n  })\n```\n\n### Examples and more help stuff\n\n```js\n  // more help\n  .example('...')\n  .epilog('copyright 2015')\n  .command('start', 'start a server')\n```\n\n### Stacking\n\n```js\n  .count('verbose')\n\nargv.verbose // -vvv => 3\n```\n\n### Reject non explicits\n\n```js\n  .strict()\n```\n\n### Methods\n\n```\nyargs.showHelp()\nyargs.help() //=>string\n```\n"
  },
  {
    "path": "yarn.md",
    "content": "---\ntitle: Yarn\ncategory: JavaScript libraries\nweight: -3\nupdated: 2019-09-30\nprism_languages: [json, bash]\ntags: [Featurable]\n---\n\n### npm equivalents\n\n| npm | yarn |\n| --- | ---- |\n| `npm init` | `yarn init` |\n| `npm install` | `yarn` |\n| `npm install gulp --save` | `yarn add gulp` |\n| `npm install gulp --save-dev --save-exact` | `yarn add gulp --dev --exact` |\n| `npm install -g gulp` | `yarn global add gulp` |\n| `npm update` | `yarn upgrade` |\n| `./node_modules/.bin/gulp` | `yarn run gulp` |\n{: .-left-align.-headers}\n\n### yarn install\n\n```\n--no-lockfile\n--pure-lockfile\n--frozen-lockfile\n--silent\n--offline\n--update-checksums\n--check-files\n--flat\n--force\n--ignore-scripts\n--modules-folder <path>\n--production[=true|false]\n```\n\nThese options are available for `yarn install`.\n\n### yarn add\n\n```\n--dev\n--peer\n--optional\n--exact\n--tilde\n```\n\nThese options are available for `yarn add`.\n\n### Workspaces\n\nIn `package.json`:\n{: .-setup}\n\n```json\n\"workspaces\": [\n  \"packages/*\"\n]\n```\n\n```\njest/\n├─ package.json\n└─ packages/\n   ├─ jest-matcher-utils/\n   │  └─ package.json\n   └─ jest-diff/\n      └─ package.json\n```\n{: .-box-chars}\n\n(New in 1.0) Allows monorepos to share packages with each other. See: [Introducing workspaces](https://yarnpkg.com/blog/2017/08/02/introducing-workspaces/)\n\n### Selective version resolution\n\nIn `package.json`:\n{: .-setup}\n\n```json\n\"resolutions\": {\n  \"**/sass-brunch/node-sass\": \"4.5.2\"\n}\n```\n\n(New in 1.0) Allows you to specify versions for sub-dependencies. See: [Selective version resolutions](https://github.com/yarnpkg/yarn/pull/4105)\n\n### Create\n\n```bash\nyarn create react-app hello\n```\n\nInstall `create-react-app` and runs it. See: [yarn create](https://github.com/yarnpkg/rfcs/blob/master/implemented/0000-yarn-create.md)\n"
  },
  {
    "path": "yum.md",
    "content": "---\ntitle: YUM\ncategory: CLI\nupdated: 2024-02-07\n---\n\n## Commands\n\n### Help and lists\n\n```bash\nyum help                     # Display yum commands and options\nyum list available           # List all available packages\nyum list installed           # List all installed packages\nyum list kernel              # List installed and available kernel packages\nyum info vsftpd              # List info about vsftpd package\n```\n\n### Searching and dependencies\n\n```bash\nyum deplist nfs-utils        # List dependencies for nfs-utils\nyum provides \"*bin/top\"      # Show package containing top command\nyum search samba             # Find packages with samba in name or description\n```\n\n### Updating and security\n\n```bash\nyum updateinfo security      # Get info on available security updates\nyum update --security        # Apply security-related package updates\n```\n\n### Managing repositories\n\n```bash\nyum repolist                     # Display enabled software repositories\nyum repoinfo rhel-7-server-rpms  # See info on specific repo\nyum repo-pkgs my-rpms list       # List packages from a specific repo\n```\n\n### Installation and upgrades\n\n```bash\nyum install vsftpd           # Install the vsftpd package\nyum update                   # Update all packages\nyum downgrade abc            # Downgrade the abc package to an earlier version\nyum autoremove httpd         # Remove httpd and unneeded packages\n```\n\n### Package groups\n\n```bash\nyum groupinstall \"Web server\"    # Install Web Server packages\n```\n\n### Troubleshooting\n\n```bash\nyum history list             # List all yum transactions\nyum clean packages           # Delete packages saved in cache\n```\n\n### Popular options\n\n```bash\n-y                           # Assume yes if prompted\n--disablerepo=epel           # Disable a specific repo for a command\n--downloadonly               # Download package to cache but don't install\n```\n"
  },
  {
    "path": "znc.md",
    "content": "---\ntitle: ZNC bouncer\nintro: |\n  A quick reference to the [ZNC](https://znc.bg) IRC bouncer's common commands.\n---\n\n## Start\n\n```\n/msg *status addserver irc.undernet.org [6667]\n/msg *status connect\n\n/msg *status loadmod webadmin\n/msg *status loadmod admin\n/msg *status loadmod away\n/msg *status loadmod awaynick\n/msg *status loadmod clientnotify    # Notifies when another client logs\n/msg *status loadmod keepnick\n/msg *status loadmod kickrejoin\n```\n\n## Away\n\n```\n/msg *status loadmod away\n/msg *away away\n/msg *away back\n/msg *away show   #=> Show messages\n/msg *away delete all\n```\n\n## Watch\n\n```\n/msg *status loadmod watch\n/msg *watch list\n/msg *watch add * *watch *rico*\n/msg *watch add * *watch *%nick%*\n```\n"
  },
  {
    "path": "zombie.md",
    "content": "---\ntitle: Zombie\ncategory: JavaScript libraries\nintro: |\n  [Zombie](http://zombie.js.org/) is a full-stack testing solution for Node.js.\n---\n\n## Zombie\n\n### Examples\n\n```js\nbrowser\n  .visit(\"http://.../\", ->)\n  .fill(\"email\", \"zombie@underworld.dead\")\n  .fill(\"password\", \"eat-the-living\")\n  .select(\"Born\", \"1985\")\n  .uncheck(\"Send newsletter\")\n  .clickLink(\"Link name\")\n  .pressButton(\"Sign\", () => { ... })\n  .text(\"H1\")\n```\n\n### Expectations\n\n```js\nexpect(browser.query(\"#brains\"))\n\nexpect(browser.body.queryAll(\".hand\")).length 2\n\nconsole.log(browser.html())\nconsole.log(browser.html(\"table.parts\"))\n\nexpect(Browser.text(\".card-nopad small\"), \"A better way to get around!\")\n```\n"
  },
  {
    "path": "zsh.md",
    "content": "---\ntitle: zsh\ncategory: CLI\n---\n\n### Expressions\n\n| Expression        | Example             | Description\n| ---               | ---                 | ---\n| `!!`              | `sudo !!`           | Last command (`sudo !!`)\n| ---               | ---                 | ---\n| `!*`              | `vim !*`            | Last command's parameters (`vim !*`)\n| `!^`              |                     | Last command's first parameter\n| `!$`              |                     | Last command's last parameter\n| ---               | ---                 | ---\n| `!?ls` `<tab>`    | `sudo !?mv` `<tab>` | Command and params of last `ls` command\n| `!?ls?:*` `<tab>` |                     | Params of last `ls` command\n| ---               | ---                 | ---\n| `*(m0)`           | `rm *(m0)`          | Last modified today\n| `*(m-4)`          |                     | Last modified <4 days ago\n{: .-headers}\n\n### Change default shell\n\n```bash\nchsh -s `which zsh`\n```\n\n### Process Substitution\n\n| Expression        | Example                                               | Description\n| ---               | ---                                                   | ---\n| `<(COMMAND)`      | `grep \"needle\" <(curl \"https://haystack.io\")`         | Replace argument with _named pipe/FIFO_ (read-only) with command output\n| `=(COMMAND)`      | `vim =(curl \"https://haystack.io\")`                   | Replace argument with _file_ (writable) containing command output\n{: .-headers}\n\n### Also see\n\n- [Bash cheatsheet](./bash)\n\nZsh is mostly compatible with Bash, so most everything in Bash's cheatsheet also applies.\n"
  }
]