Full Code of sinedied/hads for AI

main 065b6bb63081 cached
37 files
578.8 KB
167.4k tokens
60 symbols
1 requests
Download .txt
Showing preview only (599K chars total). Download the full file or copy to clipboard to get everything.
Repository: sinedied/hads
Branch: main
Commit: 065b6bb63081
Files: 37
Total size: 578.8 KB

Directory structure:
gitextract_q9w25szj/

├── .github/
│   └── workflows/
│       ├── build.yml
│       └── release.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── bin/
│   └── hads
├── hads.js
├── lib/
│   ├── helpers.js
│   ├── indexer.js
│   ├── matcher.js
│   └── renderer.js
├── package.json
├── public/
│   ├── css/
│   │   ├── github.css
│   │   └── style.css
│   └── js/
│       └── client.js
├── test/
│   ├── .ignored-folder/
│   │   └── ignored-file.md
│   ├── 001-first folder/
│   │   ├── 3 things.md
│   │   ├── index.md
│   │   └── some doc.md
│   ├── 002-cheatsheet.markdown
│   ├── 003_extras.mdown
│   ├── code.js
│   ├── custom.css
│   ├── example-category/
│   │   ├── a-sub-category/
│   │   │   └── yet-another-doc.md
│   │   ├── another-doc.md
│   │   └── some-doc.md
│   ├── folder with spaces/
│   │   └── dummy.md
│   ├── ignore.txt
│   ├── nom_accentué.md
│   └── readme.md
└── views/
    ├── add.pug
    ├── edit.pug
    ├── file.pug
    ├── footer.pug
    ├── header.pug
    └── layout.pug

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/build.yml
================================================
name: build
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    strategy:
      matrix:
        platform: [ubuntu-latest, macos-latest, windows-latest]
        node-version: ['10', '>=14']

    name: ${{ matrix.platform }} / Node.js v${{ matrix.node-version }}
    runs-on: ${{ matrix.platform }}
    steps:
    - run: git config --global core.autocrlf false  # Preserve line endings
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - name: Install dependencies and test
      run: |
        npm ci
        npm test
      env:
        CI: true

  build_all:
    if: always()
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Check build matrix status
        if: ${{ needs.build.result != 'success' }}
        run: exit 1


================================================
FILE: .github/workflows/release.yml
================================================
name: release
on:
  workflow_dispatch:
  repository_dispatch:
    types: [release]

jobs:
  release:
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
    - uses: actions/checkout@v2
      with:
        persist-credentials: false
    - uses: actions/setup-node@v1
      with:
        node-version: 14
    - run: npm ci
      env:
        CI: true
    - run: npx semantic-release
      if: success()
      env:
        GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
        NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        # Need owner/admin account to bypass branch protection
        GIT_COMMITTER_NAME: sinedied
        GIT_COMMITTER_EMAIL: noda@free.fr


================================================
FILE: .gitignore
================================================
node_modules/
test/public/
npm-debug.log
.idea/*
!.idea/runConfigurations/
!.idea/codeStyleSettings.xml
.DS_Store
export-test/

================================================
FILE: CHANGELOG.md
================================================
## [3.0.3](https://github.com/sinedied/hads/compare/3.0.2...3.0.3) (2022-05-02)


### Bug Fixes

* display accented characters properly in index (fixes [#73](https://github.com/sinedied/hads/issues/73)) ([8d9c402](https://github.com/sinedied/hads/commit/8d9c402fdb8c2ea27f7eee4f549a3889b3f04fd6))

## [3.0.2](https://github.com/sinedied/hads/compare/3.0.1...3.0.2) (2021-10-15)

## [3.0.1](https://github.com/sinedied/hads/compare/3.0.0...3.0.1) (2021-09-14)


### Bug Fixes

* remove highlight warning ([e9fd47e](https://github.com/sinedied/hads/commit/e9fd47e204aadc54fb4d53a7bdb0e44957ccd8e7))
* use yargs instead of optimist (fixes [#65](https://github.com/sinedied/hads/issues/65)) ([d311d00](https://github.com/sinedied/hads/commit/d311d005d2c20e8fd2cc37cc48ed3f2f56988a06))

# [3.0.0](https://github.com/sinedied/hads/compare/2.1.0...3.0.0) (2021-01-11)


* fix!: update dependencies ([931d23e](https://github.com/sinedied/hads/commit/931d23e0ce46d098f8fb958979176dcaf7d589dd))


### BREAKING CHANGES

* Require Node.js >= 10

# 2.1.0
- Add ordering in [[index]] (#58)
- Fix search links with files containing spaces
- Update dependencies

# 2.0.2
- Update dependencies
- Fix extra \r character on bin file 

# 2.0.1
- Fix export links on Windows
- Update dependencies (fix #51)

# 2.0.0
- Add static HTML export option (PR #45) - by @rhucle
- Replace Bluebird and mkdirp with fs-extra
- Update dependencies
- Fix linter issues

### Breaking changes:
- Bump Node.js requirement to `node >= 8`

# 1.7.3
- Fix crashing on highlighting an unsupported language (PR #43) - by @igorskh
- Fix unescaped characters in TOC links
- Update dependencies

# 1.7.2
- Fix install issue with `highlight.js` package (#41)
- Update dependencies

# 1.7.1
- Fix wrong cursor position in editor (PR #33) - by @jamerson

# 1.7.0
- Update dependencies
- Update `marked` renderer to latest version, rendering may be slightly affected
- Fix "Last updated" text on search page
- Replace `open` module to remove critical vulnerability

# 1.6.1
- Update dependencies

# 1.6.0
- Add read-only mode (PR #26) - by @fabala

# 1.5.1
- Add last modified date (PR #25) - by @fabala

# 1.5.0
- Add support for Mermaid config customization
- Add proper HTTP status codes on error
- Update dropzone dependency

# 1.4.1
- Add link opening in a new tab for images (PR #19) - by @fabala
- Fix link inside link

# 1.4.0
- Add support for Font-Awesome icons in Mermaid graphs (PR #13) - by @thomasleveil
- Add custom.css file support (PR #14) - by @thomasleveil
- Bump Node.js requirement to `node >= 6`
- Fix display on mobile devices (#11)
- Remove neutral theme as it's now integrated in Mermaid directly
- Update dependencies

# 1.3.4
- Fix mermaid loop text color (PR #9)

# 1.3.3
- Add filter for files/folders starting with a dot
- Update Github CSS

# 1.3.2
- Add module export to allow server integration and extension

# 1.3.1
- Add new mermaid neutral theme
- Fix issue with dependencies path when installed as a local module

# 1.3.0
- Add support for github-style markdown links (without extension)

# 1.2.2
- Add image file selector button
- Fix line endings on edited documents for unix platforms
- Fix shape rendering for Mermaid graphs
- Fix unwanted file dialog display
- Remove unwanted uploaded file previews

# 1.2.1
- Fix edition of markdown files containing HTML tags

# 1.2.0
- Add [[toc]] table of contents markdown extension
- Add images drag'n drop support to editor
- Add save (CTRL+S/CMD+S) keyboard shortcut to editor
- Mermaid diagram code is now hidden during processing
- Remov specific rendering for images
- Small fixes and performance improvements

# 1.1.2
- Fix issue on Windows

# 1.1.1
- Add print-friendly styling
- Fix issue when no home page was present

# 1.1.0
- Add mermaid syntax support to generate diagrams
- Fix [[index]] in code blocks
- Fix search extracts

# 1.0.1
- Add new markdown files support
- Rename project to "hads"


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2016-2019 Yohan Lasorsa

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# Hey it's Another Documentation Server! (hads)

[![NPM version](https://img.shields.io/npm/v/hads.svg)](https://www.npmjs.com/package/hads)
[![Build Status](https://github.com/sinedied/hads/workflows/build/badge.svg)](https://github.com/sinedied/hads/actions)
![Node version](https://img.shields.io/node/v/hads.svg)
[![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo)
![Downloads](https://img.shields.io/npm/dm/hads.svg)
[![License](https://img.shields.io/npm/l/hads.svg)](LICENSE)

### *The master of ~~hell~~ docs*

> **Hads** is a fast Node.js based web server allowing to browse, search and edit documentation written in
[Markdown](http://daringfireball.net/projects/markdown/).

![screenshot](https://cloud.githubusercontent.com/assets/593151/24351859/afb0b958-12e7-11e7-8ad4-8655e6b3c1c1.png)

**Features**:

- No configuration needed
- Github-like presentation
- GFM ([Github Flavoured Markdown](https://guides.github.com/features/mastering-markdown/))
- Automatic indexation and search
- In-browser editor
- Table of contents using Markdown extension `[[toc]]`
- Navigation index using Markdown extension `[[index]]`
- Diagrams and flowcharts using [Mermaid](http://knsv.github.io/mermaid/) syntax
- Drag'n drop images
- 100% offline
- Custom CSS style


## Usage

```bash
npm install -g hads
hads -o
```

Your browser will open `http://localhost:4040` and display your project documentation.

### Command-line options

```
Usage: hads [root dir] [options]

Options:
  -p, --port        Port number to listen on       [default: 4040]
  -h, --host        Host address to bind to        [default: "localhost"]
  -i, --images-dir  Directory to store images      [default: "images"]
  -o, --open        Open default browser on start
  -r, --readonly    Read-only mode (no add or edit feature)
  -e, --export      Export static HTML             [default: "./public"]
  --help            Show this help
```

If no root dir is specified, `./` will be used.

## Extras

### Home page

The server will automatically search for a file named `index.md`, `readme.md` or `README.md` on the specified
documentation root and will use it as your home page.

You can customize the CSS style in a file named `custom.css`.

### Table of contents

The special text `[[toc]]` will be replaced by the table of contents of the markdown document, based on headings.

### Navigation index

The special text `[[index]]` will be replaced by the full navigation index of all markdown files found under the
specified *root dir*. File and folder names will be *humanized* for better readability.

It is particularly useful on the home page to provide an overview of the available documentation for your project.

The sorting of each index level is as follows:
1. Any README.md, readme.md, or index.md is always at the top.
2. All files and folders that are prefixed with a number (e.g. `001-abc` and `002 mno` and `003_xyz`) are next, sorted 
by their respective prefix numbers. Note that the prefix numbers are stripped out in the index.
3. All remaining files, sorted by their name.
4. All remaining folders, sorted by their name.  

### Mermaid Diagrams and flowcharts

You can use the [Mermaid](http://knsv.github.io/mermaid/) syntax to insert diagrams and flowcharts directly in your
markdown, but using code blocks with the `mermaid` language specified, like this:

    ```mermaid
    graph TD;
        A-->B;
        A-->C;
        B-->D;
        C-->D;
    ```

Mermaid [configuration](https://mermaidjs.github.io/mermaidAPI.html) can be overridden on a given page using the global variable `MERMAID_CONFIG` in a `<script>` tag, for example:

```html
<script>
MERMAID_CONFIG = { theme: 'forest' };
</script>
```

## Updates

See changelog [here](CHANGELOG.md)

## Variants
- [hads-plantuml](https://www.npmjs.com/package/hads-plantuml): Adds PlantUML support for diagrams


================================================
FILE: bin/hads
================================================
#!/usr/bin/env node

require('../hads');


================================================
FILE: hads.js
================================================
'use strict';

const fs = require('fs-extra');
const path = require('path');
const express = require('express');
const multer = require('multer');
const shortId = require('shortid');
const moment = require('moment');
const pkg = require('./package.json');
const pug = require('pug');
const globby = require('globby');
const Matcher = require('./lib/matcher.js');
const Renderer = require('./lib/renderer.js');
const Helpers = require('./lib/helpers.js');
const Indexer = require('./lib/indexer.js');

const yargs = require('yargs/yargs')(process.argv.slice(2))
  .usage(`\n${pkg.name} ${pkg.version}\nUsage: $0 [root dir] [options]`)
  .version(false)
  .option('port', {
    alias: 'p',
    describe: 'Port number to listen on',
    default: 4040
  })
  .option('host', {
    alias: 'h',
    describe: 'Host address to bind to',
    default: 'localhost'
  })
  .option('images-dir', {
    alias: 'i',
    describe: 'Directory to store images',
    default: 'images'
  })
  .option('open', {
    alias: 'o',
    describe: 'Open default browser on start'
  })
  .option('readonly', {
    alias: 'r',
    describe: 'Read-only mode (no add or edit feature)'
  })
  .option('export', {
    alias: 'e',
    describe: 'Export static html'
  })
  .help(false) // Needed to avoid extra [boolean] type
  .option('help', {describe: 'Show this help'});

const args = yargs.argv;

if (args.help || args._.length > 1) {
  yargs.showHelp(console.log);
  process.exit();
}

const INDEXES = [
  'index.md',
  'README.md',
  'readme.md'
];
const ICONS = {
  alert: 'octicon-alert',
  file: 'octicon-file',
  search: 'octicon-search',
  fileCode: 'octicon-file-code'
};
const STYLESHEET = 'custom.css';
const PATHS = {
  documentation: args._[0] || './',
  public: path.join(__dirname, 'public'),
  views: path.join(__dirname, 'views'),
  /* eslint-disable no-return-assign */
  get code() {
    delete this.code;
    return this.code = path.join(this.root, '**', `*.{${Matcher.getCode().join(',')}}`);
  },
  get customStylesheet() {
    delete this.customStylesheet;
    return this.customStylesheet = path.join(this.root, STYLESHEET);
  },
  get export() {
    delete this.export;
    return this.export = path.join(process.cwd(), args.export === true ? 'public' : args.export);
  },
  get hads() {
    delete this.hads;
    return this.hads = path.join(this.export, '_hads');
  },
  get images() {
    delete this.images;
    return this.images = path.join(this.root, Helpers.sanitizePath(args.i));
  },
  get root() {
    delete this.root;
    return this.root = path.resolve(this.documentation);
  }
  /* eslint-enable no-return-assign */
};
const SCRIPTS = [
  '/ace/ace.js',
  '/mermaid/mermaid.min.js',
  '/dropzone/dropzone.min.js',
  '/js/client.js'
];
const STYLESHEETS = [
  '/highlight/github.css',
  '/octicons/octicons.css',
  '/css/github.css',
  '/css/style.css',
  '/font-awesome/css/font-awesome.css'
].concat(fs.existsSync(PATHS.customStylesheet) ? [`/${STYLESHEET}`] : []);

const indexer = new Indexer(PATHS.root);
const renderer = new Renderer(indexer, {
  isExport: args.export
});

if (args.export) {
  args.export = args.export === true ? './public' : args.export;

  (async () => {
    await fs.emptyDir(PATHS.export);

    globby(path.join(PATHS.root, '**', `*.{${Matcher.getImages().join(',')}}`))
      .then(images => {
        images.map(file => {
          const dest = file.replace(PATHS.root, '');
          return fs.copy(file, path.join(PATHS.export, dest));
        });
      });

    const [documentation, code] = await Promise.all([
      indexer.indexFiles().then(files => files.map(file => file.file)),
      globby(PATHS.code).then(paths => paths.map(path => path.replace(PATHS.root, '')))
    ]);

    documentation
      .concat(code)
      .forEach(async file => {
        const dir = path.dirname(file);
        const ext = path.extname(file);
        const base = path.basename(file, ext);
        const src = path.join(PATHS.documentation, file);
        const content = Matcher.isMarkdown(file) ?
          await renderer.renderFile(src) :
          await renderer.renderCode(src);
        const template = path.join(PATHS.views, 'file.pug');
        const html = pug.renderFile(template, {
          content,
          pkg,
          route: Helpers.extractRoute(file),
          icon: ICONS.file,
          readonly: true,
          scripts: SCRIPTS,
          static: true,
          styles: STYLESHEETS,
          title: path.basename(src)
        });
        const buffer = Buffer.from(html);
        const array = new Uint8Array(buffer);
        const dest = path.join(dir, `${base}.html`);
        const isIndex = INDEXES.find(filename => filename.startsWith(base));
        await fs.mkdirp(path.join(PATHS.export, dir));
        fs.writeFile(path.join(PATHS.export, dest), array);

        if (isIndex) {
          const dest = path.join(dir, 'index.html');
          fs.writeFile(path.join(PATHS.export, dest), array);
        }
      });

    // We `await` because we'll get EEXIST if this and the copy to
    // the same directory in Helpers.processPackages are unresolved.
    await fs.copy(PATHS.public, PATHS.hads);

    if (await fs.exists(PATHS.customStylesheet)) {
      fs.copy(path.join(PATHS.root, STYLESHEET), path.join(PATHS.hads, STYLESHEET));
    }

    Helpers.processPackages((alias, path$) => {
      const dest = path.join(PATHS.hads, alias);
      fs.copy(path$, dest);
    });
  })();

  return;
}

const app = express();
app.set('views', PATHS.views);
app.set('view engine', 'pug');
app.use(express.json());
app.use(express.urlencoded({
  extended: true
}));
app.use('/_hads/', express.static(path.join(__dirname, '/public')));

Helpers.processPackages((alias, path$) => {
  app.use('/_hads/' + alias + '/', express.static(path$));
});

if (fs.existsSync(PATHS.customStylesheet)) {
  app.use(`/_hads/${STYLESHEET}`, express.static(PATHS.customStylesheet));
}

app.get('*', (req, res, next) => {
  let route = Helpers.extractRoute(req.path);
  const query = req.query || {};
  let rootIndex = -1;
  let mdIndex = -1;
  const create = Helpers.hasQueryOption(query, 'create');
  let edit = Helpers.hasQueryOption(query, 'edit') || create;
  let statusCode = 200;
  let lastModified = '';
  let filePath, icon, search, error, title, contentPromise;

  function renderPage() {
    if (error) {
      edit = false;
      contentPromise = Promise.resolve(renderer.renderMarkdown(error));
      icon = ICONS.alert;
    } else if (search) {
      contentPromise = renderer.renderSearch(query.search);
      icon = ICONS.search;
    } else if (Helpers.hasQueryOption(query, 'raw') || Matcher.isImage(filePath)) {
      return res.sendFile(filePath);
    } else if (Matcher.isMarkdown(filePath)) {
      contentPromise = edit ? renderer.renderRaw(filePath) : renderer.renderFile(filePath);
      icon = ICONS.file;
    } else if (Matcher.isCode(filePath)) {
      contentPromise = renderer.renderCode(filePath);
      icon = ICONS.fileCode;
    }

    if (!title) {
      title = search ? renderer.searchResults : path.basename(filePath);
    }

    if (contentPromise) {
      return fs.stat(filePath)
        .then(stat => {
          if (stat.isFile()) {
            lastModified = moment(stat.mtime).fromNow();
          }

          return contentPromise;
        })
        .then(content => {
          res.status(statusCode);
          res.render(edit ? 'edit' : 'file', {
            title,
            lastModified,
            readonly: args.readonly,
            route,
            icon,
            search,
            content,
            styles: STYLESHEETS,
            scripts: SCRIPTS,
            pkg
          });
        })
        .catch(err => {
          console.error(`Error while retrieving file stats: ${err.code}`);
          next();
        });
    }

    return next();
  }

  function tryProcessFile() {
    contentPromise = null;
    filePath = path.join(PATHS.root, route);

    return fs.stat(filePath)
      .then(stat => {
        search = query.search && query.search.length > 0 ? query.search.trim() : null;

        if (stat.isDirectory() && !search && !error) {
          if (!create) {
            // Try to find a root file
            route = path.join(route, INDEXES[++rootIndex]);
            return tryProcessFile();
          }

          route = '/';
          title = 'Error';
          error = `Cannot create file \`${filePath}\``;
          statusCode = 400;
        }

        return renderPage();
      })
      .catch(() => {
        if (create) {
          const fixedRoute = Helpers.ensureMarkdownExtension(route);
          if (fixedRoute !== route) {
            return res.redirect(fixedRoute + '?create=1');
          }

          return fs.mkdirp(path.dirname(filePath))
            .then(() => fs.writeFile(filePath, ''))
            .then(() => indexer.updateIndexForFile(filePath))
            .then(tryProcessFile)
            .catch(e => {
              console.error(e);
              title = 'Error';
              error = `Cannot create file \`${filePath}\``;
              route = '/';
              statusCode = 400;
              return renderPage();
            });
        }

        if (rootIndex !== -1 && rootIndex < INDEXES.length - 1) {
          route = path.join(path.dirname(route), INDEXES[++rootIndex]);
          return tryProcessFile();
        }

        if (rootIndex === -1 && path.basename(route) !== '' && (path.extname(route) === '' || mdIndex > -1) &&
            mdIndex < Matcher.MARKDOWN_EXTENSIONS.length - 1) {
          // Maybe it's a github-style link without extension, let's try adding one
          const extension = Matcher.MARKDOWN_EXTENSIONS[++mdIndex];
          route = path.join(path.dirname(route), `${path.basename(route, path.extname(route))}.${extension}`);
          return tryProcessFile();
        }

        if (path.dirname(route) === path.sep && rootIndex === INDEXES.length - 1) {
          error = '## No home page (╥﹏╥)\nDo you want to create an [index.md](/index.md?create=1) or ' +
              '[readme.md](/readme.md?create=1) file perhaps?';
        } else {
          error = '## File not found ¯\\\\\\_(◕\\_\\_◕)_/¯\n> *There\'s a glitch in the matrix...*';
        }

        title = '404 Error';
        route = '/';
        statusCode = 404;

        return renderPage();
      });
  }

  tryProcessFile();
});

if (!args.readonly) {
  app.post('*', (req, res, next) => {
    const route = Helpers.extractRoute(req.path);
    const filePath = path.join(PATHS.root, route);
    let lastModified = '';

    fs.stat(filePath)
      .then(stat => {
        let fileContent = req.body.content;
        if (stat.isFile() && fileContent) {
          lastModified = moment(stat.mtime).fromNow();
          if (process.platform !== 'win32') {
            // Www-form-urlencoded data always use CRLF line endings, so this is a quick fix
            fileContent = fileContent.replace(/\r\n/g, '\n');
          }

          return fs.writeFile(filePath, fileContent);
        }

        return null;
      })
      .then(() => {
        indexer.updateIndexForFile(filePath);
        return renderer.renderFile(filePath);
      })
      .then(content => res.render('file', {
        title: path.basename(filePath),
        lastModified,
        readonly: args.readonly,
        route,
        icon: 'octicon-file',
        content,
        styles: STYLESHEETS,
        scripts: SCRIPTS,
        pkg
      }))
      .catch(() => {
        next();
      });
  });

  app.post('/_hads/upload', [multer({
    storage: multer.diskStorage({
      destination: (req, file, cb) => {
        cb(null, PATHS.images);
      },
      filename: (req, file, cb) => {
        fs.mkdirp(PATHS.images).then(() => {
          cb(null, shortId.generate() + path.extname(file.originalname));
        });
      }
    }),
    onFileUploadStart: file => !file.mimetype.match(/^image\//),
    limits: {
      fileSize: 1024 * 1024 * 10   // 10 MB
    }
  }).single('file'), (req, res) => {
    res.json(path.sep + path.relative(PATHS.root, req.file.path));
  }]);
}

indexer.indexFiles().then(() => {
  app.listen(args.port, args.host, () => {
    const serverUrl = `http://${args.host}:${args.port}`;
    console.log(`${pkg.name} ${pkg.version} serving at ${serverUrl} (press CTRL+C to exit)`);

    if (args.open) {
      require('open')(serverUrl, {url: true});
    }
  });
});

module.exports = app;


================================================
FILE: lib/helpers.js
================================================
'use strict';

const path = require('path');
const Matcher = require('./matcher');

class Helpers {
  static extractRoute(requestPath) {
    return Helpers.sanitizePath(path.normalize(decodeURI(requestPath)));
  }

  static sanitizePath(path) {
    return path.replace(/^(\.\.[/\\])+/, '');
  }

  static hasQueryOption(query, option) {
    return query[option] && JSON.parse(query[option]);
  }

  static processPackages(callback) {
    return Object.entries({
      highlight: ['highlight.js', 'styles'],
      octicons: ['octicons', 'build/font'],
      'font-awesome': ['font-awesome', ''],
      ace: ['ace-builds', 'src-min'],
      mermaid: ['mermaid', 'dist'],
      dropzone: ['dropzone', 'dist/min']
    }).map(([alias, [pkg, sub]]) => {
      const one = require.resolve(`${pkg}/package.json`);
      const two = path.dirname(one);
      const three = path.join(two, sub);
      return callback(alias, three);
    });
  }

  static ensureMarkdownExtension(file) {
    if (file.endsWith(path.sep)) {
      file = file.slice(0, -1);
    }

    if (!Matcher.isMarkdown(file)) {
      file += '.md';
    }

    return file;
  }

  static async readCode() {
    return Matcher.getCode();
  }
}

module.exports = Helpers;


================================================
FILE: lib/indexer.js
================================================
'use strict';

const {
  promisify
} = require('util');
const path = require('path');
const fs = require('fs-extra');
const recReadDir = promisify(require('recursive-readdir'));
const elasticlunr = require('elasticlunr');
const Matcher = require('./matcher');

const EXCLUSIONS = ['node_modules'];

class Indexer {
  constructor(basePath) {
    this.basePath = basePath;
    this.index = elasticlunr(function () {
      this.setRef('file');
      this.addField('filename');
      this.addField('content');
    });
    this.files = [];
  }

  indexFiles() {
    return recReadDir(this.basePath, EXCLUSIONS).then(files => {
      files = files.filter(file => Matcher.isMarkdown(file));
      files = files.filter(file => {
        // Filter files/folder starting with a "."
        file = path.relative(this.basePath, file);
        const pathComponents = file.split(path.sep);
        return !pathComponents.some(c => c.length && c[0] === '.');
      });
      return Promise.all(files.map(this.updateIndexForFile.bind(this)));
    });
  }

  updateIndexForFile(file) {
    const filePath = path.relative(this.basePath, file);
    this.files.push(filePath);

    return fs.readFile(path.join(this.basePath, filePath), 'utf8')
      .then(content => {
        const doc = {
          file: filePath,
          filename: path.basename(filePath, path.extname(filePath)),
          content
        };
        this.index[this.index.documentStore.hasDoc(filePath) ? 'updateDoc' : 'addDoc'](doc);
        return doc;
      });
  }

  getContent(file) {
    return this.index.documentStore.getDoc(file).content;
  }

  getFiles() {
    return this.files;
  }

  search(string) {
    return this.index.search(string, {
      expand: true
    });
  }
}

module.exports = Indexer;


================================================
FILE: lib/matcher.js
================================================
'use strict';

const path = require('path');
const _ = require('lodash');

const MARKDOWN_EXTENSIONS = ['md', 'mkdn', 'mdown', 'markdown'];
const IMAGES_EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'];
const CODE_EXTENSIONS = [
  'js',
  'json',
  'ts',
  'coffee',
  'css',
  'scss',
  'sass',
  'less',
  'stylus',
  'html',
  'jade',
  'pug',
  'sh',
  'txt'
];

class Matcher {
  static isMarkdown(file) {
    return Matcher.hasExtension(file, MARKDOWN_EXTENSIONS);
  }

  static isImage(file) {
    return Matcher.hasExtension(file, IMAGES_EXTENSIONS);
  }

  static getImages() {
    return IMAGES_EXTENSIONS;
  }

  static isCode(file) {
    return Matcher.hasExtension(file, CODE_EXTENSIONS);
  }

  static getCode() {
    return CODE_EXTENSIONS;
  }

  static hasExtension(file, extensions) {
    return _.includes(extensions, path.extname(file).replace('.', ''));
  }
}

Matcher.MARKDOWN_EXTENSIONS = MARKDOWN_EXTENSIONS;

module.exports = Matcher;


================================================
FILE: lib/renderer.js
================================================
'use strict';

const path = require('path');
const fs = require('fs-extra');
const normalizePath = require('normalize-path');
const {marked} = require('marked');
const {highlight} = require('highlight.js');
const removeMd = require('remove-markdown');
const humanize = require('humanize-string');

const SEARCH_EXTRACT_LENGTH = 400;
const SEARCH_RESULTS_MAX = 10;

const ROOT_FILES_INDEX = {
  'index.md': true,
  'README.md': true,
  'readme.md': true
};

const NUMBER_SEPARATORS = /[-_]/g;

class Renderer {
  constructor(indexer, options) {
    this.indexer = indexer;
    this.searchResults = null;
    this.options = options;
  }

  renderRaw(file) {
    return fs.readFile(file, 'utf8');
  }

  renderFile(file) {
    return this.renderRaw(file).then(content => this.renderMarkdown(content));
  }

  renderCode(file) {
    const lang = path.extname(file).replace('.', '');
    return this.renderRaw(file).then(content => this.renderMarkdown(`\`\`\`${lang}\n${content}\n\`\`\``));
  }

  renderSearch(search) {
    const results = this.indexer.search(search);
    const total = results.length;
    let content = total ? '' : 'No results.';

    this.searchResults = 'Search results (';

    if (total > SEARCH_RESULTS_MAX) {
      results.splice(SEARCH_RESULTS_MAX);
      this.searchResults += `first ${SEARCH_RESULTS_MAX} of `;
    }

    this.searchResults += `${total})`;

    results.forEach(result => {
      let extract = removeMd(this.indexer.getContent(result.ref));
      extract = extract.replace(/\s/g, ' ').replace(/`/g, '');
      extract = extract.replace(/\[\[index]]/g, '&#91;&#91;index]]');

      if (extract.length > SEARCH_EXTRACT_LENGTH) {
        extract = extract.substr(0, SEARCH_EXTRACT_LENGTH) + ' [...]';
      }

      content += `[${result.ref}](${Renderer.encodeFileLink(result.ref)})\n> ${extract}\n\n`;
    });

    return Promise.resolve(this.renderMarkdown(content));
  }

  renderIndex() {
    const files = this.indexer.getFiles();
    const nav = {};

    files.forEach(file => {
      file = normalizePath(file);
      const dir = path.dirname(file);
      const components = dir.split(path.sep);
      const name = path.basename(file);
      let parent = nav;

      if (components[0] === '.') {
        components.splice(0, 1);
      }

      components.forEach(component => {
        const current = parent[component] || {};
        parent[component] = current;
        parent = current;
      });

      parent[name] = file;
    });

    const content = Renderer.renderIndexLevel(nav, 0);
    return this.renderMarkdown(content);
  }

  renderTableOfContents(content) {
    let toc = '';
    const renderer = new marked.Renderer();
    renderer.heading = (text, level, raw) => {
      text = Renderer.removeLinks(text);
      const slug = raw.toLowerCase().replace(/[^\w]+/g, '-');
      toc += '  '.repeat(level) + `- [${text}](#${slug})\n`;
    };

    marked(content, {
      renderer
    });
    return this.renderMarkdown(toc);
  }

  renderMarkdown(content) {
    const renderer = new marked.Renderer();

    renderer.code = (code, language) => {
      if (language === 'mermaid') {
        return `<p class="mermaid">${code}</p>`;
      }

      return marked.Renderer.prototype.code.call(renderer, code, language);
    };

    renderer.paragraph = text => {
      text = text.replace(/^\[\[toc]]/img, () => this.renderTableOfContents(content));
      text = text.replace(/^\[\[index]]/img, () => this.renderIndex());
      return marked.Renderer.prototype.paragraph.call(renderer, text);
    };

    renderer.link = (href, title, text) => {
      text = Renderer.removeLinks(text);
      href = Renderer.formatHref(href, this.options.isExport);
      return marked.Renderer.prototype.link.call(renderer, href, title, text);
    };

    renderer.image = (href, title, text) => {
      let out = marked.Renderer.prototype.image.call(renderer, href, title, text);
      out = `<a href="${href}" target="_new">${out}</a>`;
      return out;
    };

    return marked(content, {
      renderer,
      gfm: true,
      smartLists: true,
      breaks: false,
      smartypants: true,
      highlight: (code, language) => {
        try {
          code = language && language !== 'no-highlight' ?
            highlight(code, {language, ignoreIllegals: true}).value : code;
        } catch (_) {
          console.error(`Unsupported language for highlighting: ${language}`);
        }

        return code;
      }
    });
  }

  static removeLinks(text) {
    return text.replace(/<a\b[^>]*>/gi, '')
      .replace(/<\/a>/gi, '');
  }

  static formatHref(href, isExport) {
    const isExternal = !href.startsWith('/') && path.dirname(href) !== '.';
    const isHash = href.startsWith('#');

    if (!isExport || isExternal || isHash) {
      return href;
    }

    const ext = path.extname(href);
    const dir = path.dirname(href);
    const base = path.basename(href, ext);
    return normalizePath(path.join(dir, `${base}.html`));
  }

  static renderIndexLevel(index, level) {
    let content = '';
    const indent = '  '.repeat(level);
    const keys = Object.keys(index).sort((a, b) => {
      const aType = typeof index[a];
      const bType = typeof index[b];
      const aNumPrefix = Renderer.getNumberPrefix(a);
      const bNumPrefix = Renderer.getNumberPrefix(b);

      if (ROOT_FILES_INDEX[a]) {
        return -1;
      }

      if (ROOT_FILES_INDEX[b]) {
        return 1;
      }

      if (Number.isFinite(aNumPrefix) && Number.isFinite(bNumPrefix)) {
        return aNumPrefix - bNumPrefix;
      }

      if (Number.isFinite(aNumPrefix)) {
        return -1;
      }

      if (Number.isFinite(bNumPrefix)) {
        return 1;
      }

      if (aType === bType) {
        return a.localeCompare(b);
      }

      if (aType === 'string') {
        // Display files before folders
        return -1;
      }

      return 1;
    });

    keys.forEach(key => {
      // Only render index files at level 0,
      // they're linked to the folder name for index > 0
      if (ROOT_FILES_INDEX[key] && level > 0) {
        return;
      }

      const value = index[key];
      content += indent;

      if (typeof value === 'string') {
        const link = Renderer.encodeFileLink(value);
        key = path.basename(key, path.extname(key));
        content += `- [${humanize(Renderer.trimNumberPrefix(key))}](/${link})\n`;
      } else {
        const valueKeys = Object.keys(value);
        const indexFile = valueKeys.find(key => ROOT_FILES_INDEX[key]);

        if (indexFile) {
          const indexFilePath = value[indexFile];
          const link = Renderer.encodeFileLink(indexFilePath);
          content += `- [${humanize(Renderer.trimNumberPrefix(key))}](/${link})\n`;
        } else {
          content += `- ${humanize(Renderer.trimNumberPrefix(key))}\n`;
        }

        content += Renderer.renderIndexLevel(value, level + 1);
      }
    });

    return content;
  }

  static encodeFileLink(link) {
    return link.split('/')
      .map(part => encodeURIComponent(part))
      .join('/');
  }

  /**
   * Removes the numbered prefix like the 000 in 000-xyz.
   *
   * @param key
   */
  static trimNumberPrefix(key) {
    const split = key.split(NUMBER_SEPARATORS);
    if (split && split.length > 1) { // First item is a number prefix, second+ item is the name.
      const num = parseInt(split[0], 10);
      if (Number.isFinite(num)) {
        return key.substring(key.indexOf(split[1]));
      }
    }

    return key;
  }

  /**
   * Whether the key has a number prefix like 000-xyz.
   *
   * @param key
   * @returns {number}
   */
  static getNumberPrefix(key) {
    const split = key.split(NUMBER_SEPARATORS);
    if (split && split.length > 1) { // First item is a number prefix, second+ item is the name.
      const num = parseInt(split[0], 10);
      if (Number.isFinite(num)) {
        return num;
      }
    }

    return NaN;
  }
}

module.exports = Renderer;


================================================
FILE: package.json
================================================
{
  "name": "hads",
  "version": "3.0.3",
  "description": "Fast web server allowing to browse, search and edit project documentation written in Markdown",
  "repository": {
    "type": "git",
    "url": "https://github.com/sinedied/hads.git"
  },
  "keywords": [
    "markdown",
    "gfm",
    "server",
    "local",
    "offline",
    "search",
    "edit",
    "doc",
    "documentation",
    "knowledgebase",
    "wiki",
    "search",
    "mermaid",
    "nodejs"
  ],
  "author": {
    "name": "Yohan Lasorsa",
    "url": "https://twitter.com/sinedied"
  },
  "license": "MIT",
  "homepage": "https://github.com/sinedied/hads",
  "bugs": {
    "url": "https://github.com/sinedied/hads/issues"
  },
  "main": "hads.js",
  "scripts": {
    "start": "node hads.js ./test -o",
    "export": "node hads.js ./test -e export-test && npx http-server export-test",
    "test": "eslint *.js lib/*.js",
    "release:check": "semantic-release --dry-run"
  },
  "bin": {
    "hads": "./bin/hads"
  },
  "engines": {
    "node": ">=12.0.0"
  },
  "dependencies": {
    "ace-builds": "^1.4.11",
    "dropzone": "^5.7.0",
    "elasticlunr": "^0.9.5",
    "express": "^4.17.1",
    "font-awesome": "^4.7.0",
    "fs-extra": "^10.0.0",
    "globby": "^11.0.0",
    "highlight.js": "^11.2.0",
    "humanize-string": "^2.1.0",
    "lodash": "^4.17.15",
    "marked": "^4.0.15",
    "mermaid": "^9.0.1",
    "moment": "^2.24.0",
    "multer": "^1.4.2",
    "normalize-path": "^3.0.0",
    "octicons": "^4.4.0",
    "open": "^8.2.1",
    "pug": "^3.0.0",
    "recursive-readdir": "^2.2.2",
    "remove-markdown": "^0.5.0",
    "shortid": "^2.2.15",
    "yargs": "^17.1.1"
  },
  "devDependencies": {
    "eslint": "^7.32.0",
    "eslint-config-xo-space": "^0.24.0",
    "semantic-release": "^19.0.2",
    "semantic-release-npm-github": "^3.0.0"
  },
  "eslintConfig": {
    "extends": "xo-space/esnext",
    "parserOptions": {
      "sourceType": "script"
    },
    "rules": {
      "no-multi-spaces": [
        "error",
        {
          "ignoreEOLComments": true
        }
      ],
      "one-var": [
        "error",
        {
          "initialized": "never"
        }
      ]
    }
  },
  "release": {
    "extends": "semantic-release-npm-github",
    "branches": "main"
  },
  "files": [
    "hads.js",
    "bin",
    "lib",
    "public",
    "views"
  ]
}


================================================
FILE: public/css/github.css
================================================
/*!
 * GitHub Light v0.3.0
 * Copyright (c) 2012 - 2016 GitHub, Inc.
 * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE)
 */.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-smi,.pl-s .pl-s1{color:#333}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-s,.pl-pds,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sre,.pl-sr .pl-sra{color:#183691}.pl-v,.pl-smw{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2{color:#f8f8f8;background-color:#b52a1d}.pl-c2::before{content:"^M"}.pl-sr .pl-cce{font-weight:bold;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:bold;color:#1d3e81}.pl-mq{color:#008080}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:bold;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:#808080}.pl-mdr{font-weight:bold;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:#c0c0c0}.pl-corl{text-decoration:underline;color:#183691}.CodeMirror{font-family:monospace;height:300px;color:black}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-webkit-keyframes blink{0%{}50%{background-color:transparent}100%{}}@keyframes blink{0%{}50%{background-color:transparent}100%{}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:#f00}.cm-invalidchar{color:#f00}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:none;background:transparent;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}.CodeMirror-merge{position:relative;border:1px solid #ddd;white-space:pre}.CodeMirror-merge,.CodeMirror-merge .CodeMirror{height:350px}.CodeMirror-merge-2pane .CodeMirror-merge-pane{width:47%}.CodeMirror-merge-2pane .CodeMirror-merge-gap{width:6%}.CodeMirror-merge-3pane .CodeMirror-merge-pane{width:31%}.CodeMirror-merge-3pane .CodeMirror-merge-gap{width:3.5%}.CodeMirror-merge-pane{display:inline-block;white-space:normal;vertical-align:top}.CodeMirror-merge-pane-rightmost{position:absolute;right:0px;z-index:1}.CodeMirror-merge-gap{z-index:2;display:inline-block;height:100%;box-sizing:border-box;overflow:hidden;border-left:1px solid #ddd;border-right:1px solid #ddd;position:relative;background:#f8f8f8}.CodeMirror-merge-scrolllock-wrap{position:absolute;bottom:0;left:50%}.CodeMirror-merge-scrolllock{position:relative;left:-50%;cursor:pointer;color:#555;line-height:1}.CodeMirror-merge-copybuttons-left,.CodeMirror-merge-copybuttons-right{position:absolute;left:0;top:0;right:0;bottom:0;line-height:1}.CodeMirror-merge-copy{position:absolute;cursor:pointer;color:#44c;z-index:3}.CodeMirror-merge-copy-reverse{position:absolute;cursor:pointer;color:#44c}.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy{left:2px}.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy{right:2px}.CodeMirror-merge-r-inserted,.CodeMirror-merge-l-inserted{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x}.CodeMirror-merge-r-deleted,.CodeMirror-merge-l-deleted{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x}.CodeMirror-merge-r-chunk{background:#ffffe0}.CodeMirror-merge-r-chunk-start{border-top:1px solid #ee8}.CodeMirror-merge-r-chunk-end{border-bottom:1px solid #ee8}.CodeMirror-merge-r-connect{fill:#ffffe0;stroke:#ee8;stroke-width:1px}.CodeMirror-merge-l-chunk{background:#eef}.CodeMirror-merge-l-chunk-start{border-top:1px solid #88e}.CodeMirror-merge-l-chunk-end{border-bottom:1px solid #88e}.CodeMirror-merge-l-connect{fill:#eef;stroke:#88e;stroke-width:1px}.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk{background:#dfd}.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start{border-top:1px solid #4e4}.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end{border-bottom:1px solid #4e4}.CodeMirror-merge-collapsed-widget:before{content:"(...)"}.CodeMirror-merge-collapsed-widget{cursor:pointer;color:#88b;background:#eef;border:1px solid #ddf;font-size:90%;padding:0 3px;border-radius:4px}.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt{display:none}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}body.chrome-mouse button:focus{outline:none}.CodeMirror{height:calc(100vh - 1px)}.file-editor-textarea{width:100%;padding:5px 4px;font:12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;resize:vertical;border:0;border-radius:0;outline:none}.container-preview .tabnav-tabs{margin:-6px 0 -6px -11px}.container-preview .tabnav-tabs .tabnav-tab{padding:12px 15px;border-radius:0}.container-preview .tabnav-tabs>.selected:first-child{border-top-left-radius:3px}.container-preview .tabnav-tabs .selected{font-weight:600}.container-preview.show-code .commit-create,.container-preview.show-code .actions{display:block}.container-preview.show-code .commit-preview,.container-preview.show-code .loading-preview-msg,.container-preview.show-code .no-changes-preview-msg,.container-preview.show-code .error-preview-msg{display:none}.container-preview:not(.show-code) .commit-create,.container-preview:not(.show-code) .actions{display:none}.container-preview.loading-preview .loading-preview-msg{display:block}.container-preview.loading-preview .no-changes-preview-msg,.container-preview.loading-preview .error-preview-msg,.container-preview.loading-preview .commit-preview{display:none}.container-preview.show-preview .commit-preview{display:block}.container-preview.show-preview .loading-preview-msg,.container-preview.show-preview .no-changes-preview-msg,.container-preview.show-preview .error-preview-msg{display:none}.container-preview.no-changes-preview .no-changes-preview-msg{display:block}.container-preview.no-changes-preview .loading-preview-msg,.container-preview.no-changes-preview .error-preview-msg,.container-preview.no-changes-preview .commit-preview{display:none}.container-preview.error-preview .error-preview-msg{display:block}.container-preview.error-preview .loading-preview-msg,.container-preview.error-preview .no-changes-preview-msg,.container-preview.error-preview .commit-preview{display:none}.container-preview p.preview-msg{padding:30px;font-size:16px}.cm-s-github{font-family:inherit}.cm-s-github .CodeMirror-lines{font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px;line-height:18px;background:#fff}.cm-s-github .CodeMirror-gutters{background:#fff;border-right-width:0}.cm-s-github .CodeMirror-gutter-background{border-right:1px solid #ddd}.cm-s-github .CodeMirror-linenumber{padding:0 13px 0 19px}.cm-s-github .CodeMirror-cursor{color:#000}.cm-s-github .CodeMirror-activeline-background{background:#f5f5f5 !important}.cm-s-github .CodeMirror-selected{background:#c8c8fa}.cm-s-github .cm-comment{color:#969896}.cm-s-github .cm-string{color:#183691}.cm-s-github .cm-string-2{color:#0086b3}.cm-s-github .cm-tag{color:#63a35c}.cm-s-github .cm-keyword{color:#a71d5d}.cm-s-github .cm-error,.cm-s-github .cm-invalidchar{font-style:italic;font-weight:600;color:#d73a49;text-decoration:underline}.cm-s-github .cm-conflict-marker{font-style:normal !important;font-weight:normal !important;color:#d73a49 !important;text-decoration:none !important}.cm-s-github .CodeMirror-linebackground.conflict-background{background-color:#fffbdd}.cm-s-github .cm-variable{color:#ed6a43}.cm-s-github .cm-variable-2{color:#795da3}.CodeMirror-merge-header{height:30px}.CodeMirror-merge-header .CodeMirror-merge-pane{height:30px;line-height:30px}.cm-s-github .merge-gutter{width:14px}.conflict-background+.CodeMirror-gutter-wrapper .CodeMirror-linenumber{background-color:#fffbdd}.conflict-gutter-marker{background-color:#fffbdd}.conflict-gutter-marker::after,.conflict-gutter-marker::before{position:absolute;left:-1px;content:"";background-color:#d73a49}.conflict-gutter-marker-start::after,.conflict-gutter-marker-end::after{width:1px;height:10px}.conflict-gutter-marker-start::before,.conflict-gutter-marker-middle::before,.conflict-gutter-marker-end::before{width:10px;height:1px}.conflict-gutter-marker-start::after{bottom:0}.conflict-gutter-marker-end::after{top:0}.conflict-gutter-marker-start::before{top:7px}.conflict-gutter-marker-end::before{bottom:7px}.conflict-gutter-marker-line::after,.conflict-gutter-marker-middle::after{width:1px;height:18px}.conflict-gutter-marker-middle::before{top:9px}.date-selector{z-index:9;display:none;width:225px;text-align:left;text-decoration:none}.date-selector .month-nav,.date-selector .year-nav{position:relative;display:block;padding:0;margin-top:5px;margin-bottom:5px;line-height:20px;text-align:center}.date-selector .month-nav{float:left;width:55%}.date-selector .year-nav{float:right;width:35%}.date-selector .date-button{position:absolute;top:0;width:18px;height:18px;padding:4px;font-size:12px;line-height:12px;color:#0366d6;cursor:pointer}.date-selector .prev{left:0}.date-selector .next{right:0}.date-selector table{width:100%;clear:both}.date-selector tr{font-size:0}.date-selector th,.date-selector td{display:inline-block;width:32px;height:32px;padding:0;margin-top:-1px;margin-left:-1px;font-size:12px;font-weight:normal;line-height:28px;text-align:center}.date-selector td{color:#0366d6;cursor:default;background:#fff;border:1px solid #ccc}.date-selector td.today{background:#eee}.date-selector td.selected,.date-selector td.selectable-day:hover{position:relative;z-index:10;color:#fff;cursor:pointer;background:#0366d6;border-color:#024ea4}.date-selector td.unselected-month{color:#ccc}.jcrop-holder{text-align:left;direction:ltr;touch-action:none}.jcrop-vline,.jcrop-hline{position:absolute;font-size:0;background:#fff url("/images/spinners/Jcrop.gif")}.jcrop-vline{width:1px !important;height:100%}.jcrop-vline.right{right:0}.jcrop-hline{width:100%;height:1px !important}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.jcrop-handle{width:7px;height:7px;font-size:1px;background-color:#333;border:1px #eee solid}.jcrop-handle.ord-n{top:0;left:50%;margin-top:-4px;margin-left:-4px}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{top:50%;right:0;margin-top:-4px;margin-right:-4px}.jcrop-handle.ord-w{top:50%;left:0;margin-top:-4px;margin-left:-4px}.jcrop-handle.ord-nw{top:0;left:0;margin-top:-4px;margin-left:-4px}.jcrop-handle.ord-ne{top:0;right:0;margin-top:-4px;margin-right:-4px}.jcrop-handle.ord-se{right:0;bottom:0;margin-right:-4px;margin-bottom:-4px}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{width:100%;height:7px}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{width:7px;height:100%}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{right:0;margin-right:-4px}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline{background:#fff;opacity:0.7 !important}.jcrop-light .jcrop-handle{background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-vline,.jcrop-dark .jcrop-hline{background:#000;opacity:0.7 !important}.jcrop-dark .jcrop-handle{background-color:#fff;border-color:#000;border-radius:3px}.jcrop-holder img,img.jcrop-preview{max-width:none}.user-select-contain{-ms-user-select:element;-webkit-user-select:contain;-moz-user-select:contain;user-select:contain}.zeroclipboard-link{padding:0;margin:0;color:#0366d6;cursor:pointer;background:none;border:0}.zeroclipboard-link .octicon{display:block}/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:0.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}*{box-sizing:border-box}input,select,textarea,button{font-family:inherit;font-size:inherit;line-height:inherit}body{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:14px;line-height:1.5;color:#24292e;background-color:#fff}a{color:#0366d6;text-decoration:none}a:hover{text-decoration:underline}strong{font-weight:600}hr,.rule{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #dfe2e5}hr::before,.rule::before{display:table;content:""}hr::after,.rule::after{display:table;clear:both;content:""}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}button{cursor:pointer}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0}h1{font-size:32px;font-weight:600}h2{font-size:24px;font-weight:600}h3{font-size:20px;font-weight:600}h4{font-size:16px;font-weight:600}h5{font-size:14px;font-weight:600}h6{font-size:12px;font-weight:600}p{margin-top:0;margin-bottom:10px}small{font-size:90%}blockquote{margin:0}ul,ol{padding-left:0;margin-top:0;margin-bottom:0}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}dd{margin-left:0}tt,code{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px}pre{margin-top:0;margin-bottom:0;font:12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace}.octicon{vertical-align:text-bottom}.Box{background-color:#fff;border:1px solid #d1d5da;border-radius:3px}.Box--condensed{line-height:1.25}.Box--condensed .Box-header{padding:8px 16px}.Box--condensed .Box-body{padding:8px 16px}.Box--condensed .Box-footer{padding:8px 16px}.Box--condensed .Box-btn-octicon.btn-octicon{padding:8px 16px;margin:-8px -16px;line-height:1.25}.Box--condensed .Box-row{padding:8px 16px}.Box--spacious .Box-header{padding:24px;line-height:1.25}.Box--spacious .Box-title{font-size:20px}.Box--spacious .Box-body{padding:24px}.Box--spacious .Box-footer{padding:24px}.Box--spacious .Box-btn-octicon.btn-octicon{padding:24px;margin:-24px -24px}.Box--spacious .Box-row{padding:24px}.Box-header{padding:16px;margin:-1px -1px 0 -1px;background-color:#f6f8fa;border-color:#d1d5da;border-style:solid;border-width:1px;border-top-left-radius:3px;border-top-right-radius:3px}.Box-title{font-size:14px;font-weight:600}.Box-body{padding:16px;border-bottom:1px solid #e1e4e8}.Box-body:last-of-type{margin-bottom:-1px;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.Box-row{padding:16px;margin-top:-1px;list-style-type:none;border-top:1px solid #e1e4e8}.Box-row:first-of-type{border-top-color:transparent;border-top-left-radius:2px;border-top-right-radius:2px}.Box-row:last-of-type{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.Box-row.Box-row--unread,.Box-row.unread{box-shadow:2px 0 0 #0366d6 inset}.Box-row.navigation-focus .Box-row--drag-button{color:#0366d6;cursor:-webkit-grab;cursor:grab;opacity:100}.Box-row.navigation-focus.is-dragging .Box-row--drag-button{cursor:-webkit-grabbing;cursor:grabbing}.Box-row.navigation-focus.sortable-chosen{background-color:#fafbfc}.Box-row.navigation-focus.sortable-ghost{background-color:#f6f8fa}.Box-row.navigation-focus.sortable-ghost .Box-row--drag-hide{opacity:0}.Box-row--focus-gray.navigation-focus{background-color:#f6f8fa}.Box-row--focus-blue.navigation-focus{background-color:#f1f8ff}.Box-row--hover-gray:hover{background-color:#f6f8fa}.Box-row--hover-blue:hover{background-color:#f1f8ff}@media (min-width: 768px){.Box-row-link{color:#24292e;text-decoration:none}.Box-row-link:hover{color:#0366d6;text-decoration:none}}.Box-row--drag-button{opacity:0}.Box-footer{padding:16px;margin-top:-1px;border-top:1px solid #e1e4e8}.Box--scrollable{max-height:324px;overflow:scroll}.Box--blue{border-color:#c8e1ff}.Box--blue .Box-header{background-color:#f1f8ff;border-color:#c8e1ff}.Box--blue .Box-body{border-color:#c8e1ff}.Box--blue .Box-row{border-color:#c8e1ff}.Box--blue .Box-footer{border-color:#c8e1ff}.Box--danger{border-color:#d73a49}.Box--danger .Box-row:first-of-type{border-color:#d73a49}.Box--danger .Box-body:last-of-type{border-color:#d73a49}.Box-header--blue{background-color:#f1f8ff;border-color:#c8e1ff}.Box-row--yellow{background-color:#fffbdd}.Box-row--blue{background-color:#f1f8ff}.Box-row--gray{background-color:#f6f8fa}.Box-btn-octicon.btn-octicon{padding:16px 16px;margin:-16px -16px;line-height:1.5}.btn{position:relative;display:inline-block;padding:6px 12px;font-size:14px;font-weight:600;line-height:20px;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid rgba(27,31,35,0.2);border-radius:0.25em;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn i{font-style:normal;font-weight:500;opacity:0.6}.btn .octicon{vertical-align:text-top}.btn .counter{color:#586069;text-shadow:none;background-color:rgba(27,31,35,0.1)}.btn:hover{text-decoration:none;background-repeat:repeat-x}.btn:focus{outline:0}.btn:disabled,.btn.disabled{cursor:default;background-position:0 0}.btn:active,.btn.selected{background-image:none}.btn{color:#24292e;background-color:#eff3f6;background-image:-webkit-linear-gradient(270deg, #fafbfc 0%, #eff3f6 90%);background-image:linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%)}.btn:focus,.btn.focus{box-shadow:0 0 0 0.2em rgba(3,102,214,0.3)}.btn:hover,.btn.hover{background-color:#e6ebf1;background-image:-webkit-linear-gradient(270deg, #f0f3f6 0%, #e6ebf1 90%);background-image:linear-gradient(-180deg, #f0f3f6 0%, #e6ebf1 90%);background-position:0 -0.5em;border-color:rgba(27,31,35,0.35)}.btn:active,.btn.selected{background-color:#e9ecef;background-image:none;border-color:rgba(27,31,35,0.35);box-shadow:inset 0 0.15em 0.3em rgba(27,31,35,0.15)}.btn:disabled,.btn.disabled{color:rgba(36,41,46,0.4);background-color:#eff3f6;background-image:none;border-color:rgba(27,31,35,0.2);box-shadow:none}.btn-primary{color:#fff;background-color:#28a745;background-image:-webkit-linear-gradient(270deg, #34d058 0%, #28a745 90%);background-image:linear-gradient(-180deg, #34d058 0%, #28a745 90%)}.btn-primary:focus,.btn-primary.focus{box-shadow:0 0 0 0.2em rgba(52,208,88,0.3)}.btn-primary:hover,.btn-primary.hover{background-color:#269f42;background-image:-webkit-linear-gradient(270deg, #2fcb53 0%, #269f42 90%);background-image:linear-gradient(-180deg, #2fcb53 0%, #269f42 90%);background-position:0 -0.5em;border-color:rgba(27,31,35,0.5)}.btn-primary:active,.btn-primary.selected{background-color:#279f43;background-image:none;border-color:rgba(27,31,35,0.5);box-shadow:inset 0 0.15em 0.3em rgba(27,31,35,0.15)}.btn-primary:disabled,.btn-primary.disabled{color:rgba(255,255,255,0.75);background-color:#94d3a2;background-image:none;border-color:rgba(27,31,35,0.2);box-shadow:none}.btn-primary .counter{color:#29b249;background-color:#fff}.btn-purple{color:#fff;background-color:#643ab0;background-image:-webkit-linear-gradient(270deg, #7e55c7 0%, #643ab0 90%);background-image:linear-gradient(-180deg, #7e55c7 0%, #643ab0 90%)}.btn-purple:focus,.btn-purple.focus{box-shadow:0 0 0 0.2em rgba(126,85,199,0.3)}.btn-purple:hover,.btn-purple.hover{background-color:#5f37a8;background-image:-webkit-linear-gradient(270deg, #784ec5 0%, #5f37a8 90%);background-image:linear-gradient(-180deg, #784ec5 0%, #5f37a8 90%);background-position:0 -0.5em;border-color:rgba(27,31,35,0.5)}.btn-purple:active,.btn-purple.selected{background-color:#613ca4;background-image:none;border-color:rgba(27,31,35,0.5);box-shadow:inset 0 0.15em 0.3em rgba(27,31,35,0.15)}.btn-purple:disabled,.btn-purple.disabled{color:rgba(255,255,255,0.75);background-color:#b19cd7;background-image:none;border-color:rgba(27,31,35,0.2);box-shadow:none}.btn-purple .counter{color:#683cb8;background-color:#fff}.btn-blue{color:#fff;background-color:#0361cc;background-image:-webkit-linear-gradient(270deg, #0679fc 0%, #0361cc 90%);background-image:linear-gradient(-180deg, #0679fc 0%, #0361cc 90%)}.btn-blue:focus,.btn-blue.focus{box-shadow:0 0 0 0.2em rgba(6,121,252,0.3)}.btn-blue:hover,.btn-blue.hover{background-color:#035cc2;background-image:-webkit-linear-gradient(270deg, #0374f4 0%, #035cc2 90%);background-image:linear-gradient(-180deg, #0374f4 0%, #035cc2 90%);background-position:0 -0.5em;border-color:rgba(27,31,35,0.5)}.btn-blue:active,.btn-blue.selected{background-color:#045cc1;background-image:none;border-color:rgba(27,31,35,0.5);box-shadow:inset 0 0.15em 0.3em rgba(27,31,35,0.15)}.btn-blue:disabled,.btn-blue.disabled{color:rgba(255,255,255,0.75);background-color:#81b0e5;background-image:none;border-color:rgba(27,31,35,0.2);box-shadow:none}.btn-blue .counter{color:#0366d6;background-color:#fff}.btn-danger{color:#cb2431;background-color:#fafbfc;background-image:-webkit-linear-gradient(270deg, #fafbfc 0%, #eff3f6 90%);background-image:linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%)}.btn-danger:focus{box-shadow:0 0 0 0.2em rgba(203,36,49,0.3)}.btn-danger:hover{color:#fff;background-color:#cb2431;background-image:-webkit-linear-gradient(270deg, #de4450 0%, #cb2431 90%);background-image:linear-gradient(-180deg, #de4450 0%, #cb2431 90%);border-color:rgba(27,31,35,0.5)}.btn-danger:hover .counter{color:#fff}.btn-danger:active,.btn-danger.selected{color:#fff;background-color:#b5202c;background-image:none;border-color:rgba(27,31,35,0.5);box-shadow:inset 0 0.15em 0.3em rgba(27,31,35,0.15)}.btn-danger:disabled,.btn-danger.disabled{color:rgba(203,36,49,0.4);background-color:#eff3f6;background-image:none;border-color:rgba(27,31,35,0.2);box-shadow:none}.btn-outline{color:#0366d6;background-color:#fff;background-image:none}.btn-outline .counter{background-color:rgba(0,0,0,0.07)}.btn-outline:hover,.btn-outline:active,.btn-outline.selected{color:#fff;background-color:#0366d6;background-image:none;border-color:#0366d6}.btn-outline:hover .counter,.btn-outline:active .counter,.btn-outline.selected .counter{color:#0366d6;background-color:#fff}.btn-outline:focus{border-color:#0366d6;box-shadow:0 0 0 0.2em rgba(3,102,214,0.3)}.btn-outline:disabled,.btn-outline.disabled{color:rgba(27,31,35,0.3);background-color:#fff;border-color:rgba(0,0,0,0.15);box-shadow:none}.btn-with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.btn-sm{padding:3px 10px;font-size:12px;line-height:20px}.btn-large{padding:0.75em 1.25em;font-size:inherit;border-radius:6px}.hidden-text-expander{display:block}.hidden-text-expander.inline{position:relative;top:-1px;display:inline-block;margin-left:5px;line-height:0}.hidden-text-expander a,.ellipsis-expander{display:inline-block;height:12px;padding:0 5px 5px;font-size:12px;font-weight:600;line-height:6px;color:#444d56;text-decoration:none;vertical-align:middle;background:#dfe2e5;border:0;border-radius:1px}.hidden-text-expander a:hover,.ellipsis-expander:hover{text-decoration:none;background-color:#c6cbd1}.hidden-text-expander a:active,.ellipsis-expander:active{color:#fff;background-color:#2188ff}.social-count{float:left;padding:3px 10px;font-size:12px;font-weight:600;line-height:20px;color:#24292e;vertical-align:middle;background-color:#fff;border:1px solid rgba(27,31,35,0.2);border-left:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.social-count:hover,.social-count:active{text-decoration:none}.social-count:hover{color:#0366d6;cursor:pointer}.btn-block{display:block;width:100%;text-align:center}.btn-link{display:inline-block;padding:0;font-size:inherit;color:#0366d6;text-decoration:none;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn-link:hover{text-decoration:underline}.btn-link:disabled,.btn-link:disabled:hover{color:rgba(88,96,105,0.5);cursor:default}.BtnGroup{display:inline-block;vertical-align:middle}.BtnGroup::before{display:table;content:""}.BtnGroup::after{display:table;clear:both;content:""}.BtnGroup+.BtnGroup,.BtnGroup+.btn{margin-left:5px}.BtnGroup-item{position:relative;float:left;border-right-width:0;border-radius:0}.BtnGroup-item:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.BtnGroup-item:last-child{border-right-width:1px;border-top-right-radius:3px;border-bottom-right-radius:3px}.BtnGroup-item.selected,.BtnGroup-item:focus,.BtnGroup-item:active,.BtnGroup-item:hover{border-right-width:1px}.BtnGroup-item.selected+.BtnGroup-item,.BtnGroup-item.selected+.BtnGroup-form .BtnGroup-item,.BtnGroup-item:focus+.BtnGroup-item,.BtnGroup-item:focus+.BtnGroup-form .BtnGroup-item,.BtnGroup-item:active+.BtnGroup-item,.BtnGroup-item:active+.BtnGroup-form .BtnGroup-item,.BtnGroup-item:hover+.BtnGroup-item,.BtnGroup-item:hover+.BtnGroup-form .BtnGroup-item{border-left-width:0}.BtnGroup-form{float:left}.BtnGroup-form:first-child .BtnGroup-item{border-top-left-radius:3px;border-bottom-left-radius:3px}.BtnGroup-form:last-child .BtnGroup-item{border-right-width:1px;border-top-right-radius:3px;border-bottom-right-radius:3px}.BtnGroup-form .BtnGroup-item{border-right-width:0;border-radius:0}.BtnGroup-form.selected .BtnGroup-item,.BtnGroup-form:focus .BtnGroup-item,.BtnGroup-form:active .BtnGroup-item,.BtnGroup-form:hover .BtnGroup-item{border-right-width:1px}.BtnGroup-form.selected+.BtnGroup-item,.BtnGroup-form.selected+.BtnGroup-form .BtnGroup-item,.BtnGroup-form:focus+.BtnGroup-item,.BtnGroup-form:focus+.BtnGroup-form .BtnGroup-item,.BtnGroup-form:active+.BtnGroup-item,.BtnGroup-form:active+.BtnGroup-form .BtnGroup-item,.BtnGroup-form:hover+.BtnGroup-item,.BtnGroup-form:hover+.BtnGroup-form .BtnGroup-item{border-left-width:0}.TableObject{display:table}.TableObject-item{display:table-cell;width:1%;white-space:nowrap;vertical-align:middle}.TableObject-item--primary{width:99%}fieldset{padding:0;margin:0;border:0}label{font-weight:600}.form-control,.form-select{min-height:34px;padding:6px 8px;font-size:14px;line-height:20px;color:#24292e;vertical-align:middle;background-color:#fff;background-repeat:no-repeat;background-position:right 8px center;border:1px solid #d1d5da;border-radius:3px;outline:none;box-shadow:inset 0 1px 2px rgba(27,31,35,0.075)}.form-control.focus,.form-control:focus,.form-select.focus,.form-select:focus{border-color:#2188ff;outline:none;box-shadow:inset 0 1px 2px rgba(27,31,35,0.075),0 0 0 0.2em rgba(3,102,214,0.3)}.input-contrast{background-color:#fafbfc}.input-contrast:focus{background-color:#fff}::-webkit-input-placeholder{color:#6a737d}::-moz-placeholder{color:#6a737d}:-ms-input-placeholder{color:#6a737d}::placeholder{color:#6a737d}.input-sm{min-height:28px;padding-top:3px;padding-bottom:3px;font-size:12px;line-height:20px}.input-lg{padding:4px 10px;font-size:16px}.input-block{display:block;width:100%}.input-monospace{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace}.input-hide-webkit-autofill::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none !important;pointer-events:none;visibility:hidden}.form-checkbox{padding-left:20px;margin:15px 0;vertical-align:middle}.form-checkbox label em.highlight{position:relative;left:-4px;padding:2px 4px;font-style:normal;background:#fffbdd;border-radius:3px}.form-checkbox input[type=checkbox],.form-checkbox input[type=radio]{float:left;margin:5px 0 0 -20px;vertical-align:middle}.form-checkbox .note{display:block;margin:0;font-size:12px;font-weight:normal;color:#586069}.form-checkbox-details{display:none}.form-checkbox-details-trigger:checked ~ * .form-checkbox-details,.form-checkbox-details-trigger:checked ~ .form-checkbox-details{display:block}.hfields{margin:15px 0}.hfields::before{display:table;content:""}.hfields::after{display:table;clear:both;content:""}.hfields .form-group{float:left;margin:0 30px 0 0}.hfields .form-group dt label{display:inline-block;margin:5px 0 0;color:#586069}.hfields .form-group dt img{position:relative;top:-2px}.hfields .btn{float:left;margin:28px 25px 0 -20px}.hfields .form-select{margin-top:5px}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none;appearance:none}.form-actions::before{display:table;content:""}.form-actions::after{display:table;clear:both;content:""}.form-actions .btn{float:right}.form-actions .btn+.btn{margin-right:5px}.form-warning{padding:8px 10px;margin:10px 0;font-size:14px;color:#735c0f;background:#fffbdd;border:1px solid #d9d0a5;border-radius:3px}.form-warning p{margin:0;line-height:1.5}.form-warning a{font-weight:600}.form-select{display:inline-block;max-width:100%;height:34px;padding-right:24px;padding-right:8px \9;background:#fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC") no-repeat right 8px center;background-image:none \9;background-size:8px 10px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select::-ms-expand{opacity:0}.form-select[multiple]{height:auto}.select-sm{height:28px;min-height:28px;padding-top:3px;padding-bottom:3px;font-size:12px}.select-sm[multiple]{height:auto;min-height:0}.form-group{margin:15px 0}.form-group .form-control{width:440px;max-width:100%;margin-right:5px;background-color:#fafbfc}.form-group .form-control:focus{background-color:#fff}.form-group .form-control.shorter{width:130px}.form-group .form-control.short{width:250px}.form-group .form-control.long{width:100%}.form-group textarea.form-control{width:100%;height:200px;min-height:200px}.form-group textarea.form-control.short{height:50px;min-height:50px}.form-group dt{margin:0 0 6px}.form-group label{position:relative}.form-group.flattened dt{float:left;margin:0;line-height:32px}.form-group.flattened dd{line-height:32px}.form-group dd h4{margin:4px 0 0}.form-group dd h4.is-error{color:#cb2431}.form-group dd h4.is-success{color:#28a745}.form-group dd h4+.note{margin-top:0}.form-group.required dt label::after{padding-left:5px;color:#cb2431;content:"*"}.form-group .success,.form-group .error,.form-group .indicator{display:none;font-size:12px;font-weight:600}.form-group.loading{opacity:0.5}.form-group.loading .indicator{display:inline}.form-group.loading .spinner{display:inline-block;vertical-align:middle}.form-group.successful .success{display:inline;color:#28a745}.form-group.warn .warning,.form-group.warn .error,.form-group.errored .warning,.form-group.errored .error{position:absolute;z-index:10;display:block;max-width:450px;padding:5px 8px;margin:4px 0 0;font-size:13px;font-weight:normal;border-style:solid;border-width:1px;border-radius:3px}.form-group.warn .warning::after,.form-group.warn .warning::before,.form-group.warn .error::after,.form-group.warn .error::before,.form-group.errored .warning::after,.form-group.errored .warning::before,.form-group.errored .error::after,.form-group.errored .error::before{position:absolute;bottom:100%;left:10px;z-index:15;width:0;height:0;pointer-events:none;content:" ";border:solid transparent}.form-group.warn .warning::after,.form-group.warn .error::after,.form-group.errored .warning::after,.form-group.errored .error::after{border-width:5px}.form-group.warn .warning::before,.form-group.warn .error::before,.form-group.errored .warning::before,.form-group.errored .error::before{margin-left:-1px;border-width:6px}.form-group.warn .warning{color:#735c0f;background-color:#fffbdd;border-color:#d9d0a5}.form-group.warn .warning::after{border-bottom-color:#fffbdd}.form-group.warn .warning::before{border-bottom-color:#d9d0a5}.form-group.errored label{color:#cb2431}.form-group.errored .error{color:#86181d;background-color:#ffdce0;border-color:#cea0a5}.form-group.errored .error::after{border-bottom-color:#ffdce0}.form-group.errored .error::before{border-bottom-color:#cea0a5}.note{min-height:17px;margin:4px 0 2px;font-size:12px;color:#586069}.note .spinner{margin-right:3px;vertical-align:middle}dl.form-group>dd .form-control.is-autocheck-loading,dl.form-group>dd .form-control.is-autocheck-successful,dl.form-group>dd .form-control.is-autocheck-errored{padding-right:30px}dl.form-group>dd .form-control.is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-16px.gif")}dl.form-group>dd .form-control.is-autocheck-successful{background-image:url("/images/modules/ajax/success.png")}dl.form-group>dd .form-control.is-autocheck-errored{background-image:url("/images/modules/ajax/error.png")}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){dl.form-group>dd .form-control.is-autocheck-loading,dl.form-group>dd .form-control.is-autocheck-successful,dl.form-group>dd .form-control.is-autocheck-errored{background-size:16px 16px}dl.form-group>dd .form-control.is-autocheck-loading{background-image:url("/images/spinners/octocat-spinner-32.gif")}dl.form-group>dd .form-control.is-autocheck-successful{background-image:url("/images/modules/ajax/success@2x.png")}dl.form-group>dd .form-control.is-autocheck-errored{background-image:url("/images/modules/ajax/error@2x.png")}}.form-cards{height:31px;margin:0 0 15px}.form-cards .card{float:left;width:47px;height:31px;text-indent:-9999px;background-image:url("/images/modules/pricing/credit-cards-@1x.png");background-position:0 0;opacity:0.6}.form-cards .card.visa{background-position:0 0}.form-cards .card.amex{background-position:-50px 0}.form-cards .card.mastercard{background-position:-100px 0}.form-cards .card.discover{background-position:-150px 0}.form-cards .card.jcb{background-position:-200px 0}.form-cards .card.dinersclub{background-position:-250px 0}.form-cards .card.enabled{opacity:1}.form-cards .card.disabled{opacity:0.2}.form-cards>.cards{margin:0}.form-cards>.cards>li{float:left;margin:0 4px 0 0;list-style-type:none}.form-cards>.cards>li.text{line-height:31px}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){.form-cards>.cards .card{background-image:url("/images/modules/pricing/credit-cards-@2x.png");background-size:300px 31px}}.status-indicator{display:inline-block;width:16px;height:16px;margin-left:5px}.status-indicator .octicon{display:none}.status-indicator-success::before{content:""}.status-indicator-success .octicon-check{display:inline-block;color:#28a745;fill:#28a745}.status-indicator-success .octicon-x{display:none}.status-indicator-failed::before{content:""}.status-indicator-failed .octicon-check{display:none}.status-indicator-failed .octicon-x{display:inline-block;color:#cb2431;fill:#d73a49}.status-indicator-loading{width:16px;background:url("/images/spinners/octocat-spinner-32-EAF2F5.gif") 0 0 no-repeat;background-size:16px}.inline-form{display:inline-block}.inline-form .btn-plain{background-color:transparent;border:0}.drag-and-drop{padding:7px 10px;margin:0;font-size:13px;line-height:16px;color:#586069;background-color:#fafbfc;border:1px solid #c3c8cf;border-top:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.drag-and-drop .default,.drag-and-drop .loading,.drag-and-drop .error{display:none}.drag-and-drop .error{color:#cb2431}.drag-and-drop img{vertical-align:top}.is-default .drag-and-drop .default{display:inline-block}.is-uploading .drag-and-drop .loading{display:inline-block}.is-bad-file .drag-and-drop .bad-file{display:inline-block}.is-duplicate-filename .drag-and-drop .duplicate-filename{display:inline-block}.is-too-big .drag-and-drop .too-big{display:inline-block}.is-hidden-file .drag-and-drop .hidden-file{display:inline-block}.is-empty .drag-and-drop .empty{display:inline-block}.is-bad-permissions .drag-and-drop .bad-permissions{display:inline-block}.is-repository-required .drag-and-drop .repository-required{display:inline-block}.drag-and-drop-error-info{font-weight:normal;color:#586069}.drag-and-drop-error-info a{color:#0366d6}.is-failed .drag-and-drop .failed-request{display:inline-block}.manual-file-chooser{position:absolute;width:240px;padding:5px;margin-left:-80px;cursor:pointer;opacity:0.0001}.manual-file-chooser:hover+.manual-file-chooser-text{text-decoration:underline}.btn .manual-file-chooser{top:0;padding:0;line-height:34px}.upload-enabled textarea{display:block;border-bottom:1px dashed #dfe2e5;border-bottom-right-radius:0;border-bottom-left-radius:0}.upload-enabled.focused{border-radius:3px;box-shadow:inset 0 1px 2px rgba(27,31,35,0.075),0 0 0 0.2em rgba(3,102,214,0.3)}.upload-enabled.focused .form-control{box-shadow:none}.upload-enabled.focused .drag-and-drop{border-color:#4a9eff}.dragover textarea,.dragover .drag-and-drop{box-shadow:#c9ff00 0 0 3px}.write-content{position:relative}.previewable-comment-form{position:relative}.previewable-comment-form .tabnav{position:relative;padding:8px 8px 0}.previewable-comment-form .comment{border:1px solid #c3c8cf}.previewable-comment-form .comment-form-error{margin-bottom:8px}.previewable-comment-form .write-content,.previewable-comment-form .preview-content{display:none;margin:0 8px 8px}.previewable-comment-form.write-selected .write-content,.previewable-comment-form.preview-selected .preview-content{display:block}.previewable-comment-form textarea{display:block;width:100%;min-height:100px;max-height:500px;padding:8px;resize:vertical}.form-action-spacious{margin-top:10px}div.composer{margin-top:0;border:0}.composer .comment-form-textarea{height:200px;min-height:200px}.composer .tabnav{margin:0 0 10px}h2.account{margin:15px 0 0;font-size:18px;font-weight:normal;color:#586069}p.explain{position:relative;font-size:12px;color:#586069}p.explain strong{color:#24292e}p.explain .octicon{margin-right:5px;color:#959da5}p.explain .minibutton{top:-4px;float:right}.form-group label{position:static}.container{width:980px;margin-right:auto;margin-left:auto}.container::before{display:table;content:""}.container::after{display:table;clear:both;content:""}.container-md{max-width:768px;margin-right:auto;margin-left:auto}.container-md::before{display:table;content:""}.container-md::after{display:table;clear:both;content:""}.container-lg{max-width:1012px;margin-right:auto;margin-left:auto}.container-lg::before{display:table;content:""}.container-lg::after{display:table;clear:both;content:""}.container-xl{max-width:1280px;margin-right:auto;margin-left:auto}.container-xl::before{display:table;content:""}.container-xl::after{display:table;clear:both;content:""}.columns{margin-right:-10px;margin-left:-10px}.columns::before{display:table;content:""}.columns::after{display:table;clear:both;content:""}.column{float:left;padding-right:10px;padding-left:10px}.one-third{width:33.333333%}.two-thirds{width:66.666667%}.one-fourth{width:25%}.one-half{width:50%}.three-fourths{width:75%}.one-fifth{width:20%}.four-fifths{width:80%}.single-column{padding-right:10px;padding-left:10px}.table-column{display:table-cell;width:1%;padding-right:10px;padding-left:10px;vertical-align:top}.centered{display:block;float:none;margin-right:auto;margin-left:auto}.col-1{width:8.33333%}.col-2{width:16.66667%}.col-3{width:25%}.col-4{width:33.33333%}.col-5{width:41.66667%}.col-6{width:50%}.col-7{width:58.33333%}.col-8{width:66.66667%}.col-9{width:75%}.col-10{width:83.33333%}.col-11{width:91.66667%}.col-12{width:100%}@media (min-width: 544px){.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}}@media (min-width: 768px){.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}}@media (min-width: 1012px){.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}}@media (min-width: 1280px){.col-xl-1{width:8.33333%}.col-xl-2{width:16.66667%}.col-xl-3{width:25%}.col-xl-4{width:33.33333%}.col-xl-5{width:41.66667%}.col-xl-6{width:50%}.col-xl-7{width:58.33333%}.col-xl-8{width:66.66667%}.col-xl-9{width:75%}.col-xl-10{width:83.33333%}.col-xl-11{width:91.66667%}.col-xl-12{width:100%}}.gut-sm{margin-right:-8px;margin-left:-8px}.gut-sm>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gut-md{margin-right:-16px;margin-left:-16px}.gut-md>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gut-lg{margin-right:-24px;margin-left:-24px}.gut-lg>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 544px){.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 768px){.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 1012px){.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 1280px){.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.counter{display:inline-block;padding:2px 5px;font-size:12px;font-weight:600;line-height:1;color:#586069;background-color:rgba(27,31,35,0.08);border-radius:20px}.Counter--gray-light{color:#24292e;background-color:rgba(27,31,35,0.15)}.Counter--gray{color:#fff;background-color:#6a737d}.menu{margin-bottom:15px;list-style:none;background-color:#fff;border:1px solid #d1d5da;border-radius:3px}.menu-item{position:relative;display:block;padding:8px 10px;border-bottom:1px solid #e1e4e8}.menu-item:first-child{border-top:0;border-top-left-radius:2px;border-top-right-radius:2px}.menu-item:first-child::before{border-top-left-radius:2px}.menu-item:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.menu-item:last-child::before{border-bottom-left-radius:2px}.menu-item:hover{text-decoration:none;background-color:#f6f8fa}.menu-item.selected{font-weight:600;color:#24292e;cursor:default;background-color:#fff}.menu-item.selected::before{position:absolute;top:0;bottom:0;left:0;width:2px;content:"";background-color:#e36209}.menu-item .octicon{width:16px;margin-right:5px;color:#24292e;text-align:center}.menu-item .counter{float:right;margin-left:5px}.menu-item .menu-warning{float:right;color:#86181d}.menu-item .avatar{float:left;margin-right:5px}.menu-item.alert .counter{color:#cb2431}.menu-heading{display:block;padding:8px 10px;margin-top:0;margin-bottom:0;font-size:13px;font-weight:600;line-height:20px;color:#586069;background-color:#f3f5f8;border-bottom:1px solid #e1e4e8}.menu-heading:hover{text-decoration:none}.menu-heading:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.menu-heading:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.tabnav{margin-top:0;margin-bottom:15px;border-bottom:1px solid #d1d5da}.tabnav .counter{margin-left:5px}.tabnav-tabs{margin-bottom:-1px}.tabnav-tab{display:inline-block;padding:8px 12px;font-size:14px;line-height:20px;color:#586069;text-decoration:none;background-color:transparent;border:1px solid transparent;border-bottom:0}.tabnav-tab.selected{color:#24292e;background-color:#fff;border-color:#d1d5da;border-radius:3px 3px 0 0}.tabnav-tab:hover,.tabnav-tab:focus{color:#24292e;text-decoration:none}.tabnav-extra{display:inline-block;padding-top:10px;margin-left:10px;font-size:12px;color:#586069}.tabnav-extra>.octicon{margin-right:2px}a.tabnav-extra:hover{color:#0366d6;text-decoration:none}.tabnav-btn{margin-left:10px}.filter-list{list-style-type:none}.filter-list.small .filter-item{padding:4px 10px;margin:0 0 2px;font-size:12px}.filter-list.pjax-active .filter-item{color:#586069;background-color:transparent}.filter-list.pjax-active .filter-item.pjax-active{color:#fff;background-color:#0366d6}.filter-item{position:relative;display:block;padding:8px 10px;margin-bottom:5px;overflow:hidden;font-size:14px;color:#586069;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-radius:3px}.filter-item:hover{text-decoration:none;background-color:#eaecef}.filter-item.selected{color:#fff;background-color:#0366d6}.filter-item .count{float:right;font-weight:600}.filter-item .bar{position:absolute;top:2px;right:0;bottom:2px;z-index:-1;display:inline-block;background-color:#eff3f6}.subnav{margin-bottom:20px}.subnav::before{display:table;content:""}.subnav::after{display:table;clear:both;content:""}.subnav-bordered{padding-bottom:20px;border-bottom:1px solid #eaecef}.subnav-flush{margin-bottom:0}.subnav-item{position:relative;float:left;padding:6px 14px;font-weight:600;line-height:20px;color:#586069;border:1px solid #e1e4e8}.subnav-item+.subnav-item{margin-left:-1px}.subnav-item:hover,.subnav-item:focus{text-decoration:none;background-color:#f6f8fa}.subnav-item.selected,.subnav-item.selected:hover,.subnav-item.selected:focus{z-index:2;color:#fff;background-color:#0366d6;border-color:#0366d6}.subnav-item:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.subnav-item:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.subnav-search{position:relative;margin-left:10px}.subnav-search-input{width:320px;padding-left:30px;color:#586069}.subnav-search-input-wide{width:500px}.subnav-search-icon{position:absolute;top:9px;left:8px;display:block;color:#c6cbd1;text-align:center;pointer-events:none}.subnav-search-context .btn{color:#444d56;border-top-right-radius:0;border-bottom-right-radius:0}.subnav-search-context .btn:hover,.subnav-search-context .btn:focus,.subnav-search-context .btn:active,.subnav-search-context .btn.selected{z-index:2}.subnav-search-context+.subnav-search{margin-left:-1px}.subnav-search-context+.subnav-search .subnav-search-input{border-top-left-radius:0;border-bottom-left-radius:0}.subnav-search-context .select-menu-modal-holder{z-index:30}.subnav-search-context .select-menu-modal{width:220px}.subnav-search-context .select-menu-item-icon{color:inherit}.subnav-spacer-right{padding-right:10px}.tooltipped{position:relative}.tooltipped::after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font:normal normal 11px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";-webkit-font-smoothing:subpixel-antialiased;color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:rgba(0,0,0,0.8);border-radius:3px;opacity:0}.tooltipped::before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:rgba(0,0,0,0.8);pointer-events:none;content:"";border:5px solid transparent;opacity:0}@-webkit-keyframes tooltip-appear{from{opacity:0}to{opacity:1}}@keyframes tooltip-appear{from{opacity:0}to{opacity:1}}.tooltipped:hover::before,.tooltipped:hover::after,.tooltipped:active::before,.tooltipped:active::after,.tooltipped:focus::before,.tooltipped:focus::after{display:inline-block;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0.4s;animation-delay:0.4s}.tooltipped-no-delay:hover::before,.tooltipped-no-delay:hover::after,.tooltipped-no-delay:active::before,.tooltipped-no-delay:active::after,.tooltipped-no-delay:focus::before,.tooltipped-no-delay:focus::after{opacity:1;-webkit-animation:none;animation:none}.tooltipped-multiline:hover::after,.tooltipped-multiline:active::after,.tooltipped-multiline:focus::after{display:table-cell}.tooltipped-s::after,.tooltipped-se::after,.tooltipped-sw::after{top:100%;right:50%;margin-top:5px}.tooltipped-s::before,.tooltipped-se::before,.tooltipped-sw::before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,0.8)}.tooltipped-se::after{right:auto;left:50%;margin-left:-15px}.tooltipped-sw::after{margin-right:-15px}.tooltipped-n::after,.tooltipped-ne::after,.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:5px}.tooltipped-n::before,.tooltipped-ne::before,.tooltipped-nw::before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,0.8)}.tooltipped-ne::after{right:auto;left:50%;margin-left:-15px}.tooltipped-nw::after{margin-right:-15px}.tooltipped-s::after,.tooltipped-n::after{-webkit-transform:translateX(50%);transform:translateX(50%)}.tooltipped-w::after{right:100%;bottom:50%;margin-right:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-w::before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,0.8)}.tooltipped-e::after{bottom:50%;left:100%;margin-left:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-e::before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,0.8)}.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-break:break-word;word-wrap:normal;white-space:pre-line;border-collapse:separate}.tooltipped-multiline.tooltipped-s::after,.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.tooltipped-multiline.tooltipped-w::after,.tooltipped-multiline.tooltipped-e::after{right:100%}@media screen and (min-width: 0\0){.tooltipped-multiline::after{width:250px}}.tooltipped-sticky::before,.tooltipped-sticky::after{display:inline-block}.tooltipped-sticky.tooltipped-multiline::after{display:table-cell}@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){.tooltipped-w::after{margin-right:4.5px}}.css-truncate.css-truncate-target,.css-truncate .css-truncate-target{display:inline-block;max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.css-truncate.expandable.zeroclipboard-is-hover .css-truncate-target,.css-truncate.expandable.zeroclipboard-is-hover.css-truncate-target,.css-truncate.expandable:hover .css-truncate-target,.css-truncate.expandable:hover.css-truncate-target{max-width:10000px !important}.anim-fade-in{-webkit-animation-name:fade-in;animation-name:fade-in;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.anim-fade-in.fast{-webkit-animation-duration:300ms;animation-duration:300ms}@-webkit-keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}.anim-fade-up{opacity:0;-webkit-animation-name:fade-up;animation-name:fade-up;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-delay:1s;animation-delay:1s}@-webkit-keyframes fade-up{0%{opacity:0.8;-webkit-transform:translateY(100%);transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fade-up{0%{opacity:0.8;-webkit-transform:translateY(100%);transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.anim-fade-down{-webkit-animation-name:fade-down;animation-name:fade-down;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes fade-down{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0.5;-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes fade-down{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0.5;-webkit-transform:translateY(100%);transform:translateY(100%)}}.anim-grow-x{width:0%;-webkit-animation-name:grow-x;animation-name:grow-x;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-delay:0.5s;animation-delay:0.5s}@-webkit-keyframes grow-x{to{width:100%}}@keyframes grow-x{to{width:100%}}.anim-shrink-x{-webkit-animation-name:shrink-x;animation-name:shrink-x;-webkit-animation-duration:0.3s;animation-duration:0.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-delay:0.5s;animation-delay:0.5s}@-webkit-keyframes shrink-x{to{width:0%}}@keyframes shrink-x{to{width:0%}}.anim-scale-in{-webkit-animation-name:scale-in;animation-name:scale-in;-webkit-animation-duration:0.15s;animation-duration:0.15s;-webkit-animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5);animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5)}@-webkit-keyframes scale-in{0%{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes scale-in{0%{opacity:0;-webkit-transform:scale(0.5);transform:scale(0.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.anim-pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes pulse{0%{opacity:0.3}10%{opacity:1}100%{opacity:0.3}}@keyframes pulse{0%{opacity:0.3}10%{opacity:1}100%{opacity:0.3}}.anim-pulse-in{-webkit-animation-name:pulse-in;animation-name:pulse-in;-webkit-animation-duration:0.5s;animation-duration:0.5s}@-webkit-keyframes pulse-in{0%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}100%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes pulse-in{0%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}100%{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.border{border:1px #e1e4e8 solid !important}.border-top{border-top:1px #e1e4e8 solid !important}.border-right{border-right:1px #e1e4e8 solid !important}.border-bottom{border-bottom:1px #e1e4e8 solid !important}.border-left{border-left:1px #e1e4e8 solid !important}.border-y{border-top:1px #e1e4e8 solid !important;border-bottom:1px #e1e4e8 solid !important}.border-dashed{border-style:dashed !important}.border-blue{border-color:#0366d6 !important}.border-blue-light{border-color:#c8e1ff !important}.border-green{border-color:#34d058 !important}.border-green-light{border-color:#a2cbac !important}.border-red{border-color:#d73a49 !important}.border-red-light{border-color:#cea0a5 !important}.border-yellow{border-color:#d9d0a5 !important}.border-gray-light{border-color:#eaecef !important}.border-gray-dark{border-color:#d1d5da !important}.border-black-fade{border-color:rgba(27,31,35,0.15) !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:3px !important}.rounded-2{border-radius:6px !important}.box-shadow{box-shadow:0 1px 1px rgba(0,0,0,0.1) !important}.box-shadow-medium{box-shadow:0 1px 5px rgba(0,0,0,0.15) !important}.box-shadow-large{box-shadow:0 1px 15px rgba(0,0,0,0.15) !important}.box-shadow-extra-large{box-shadow:0 10px 50px rgba(0,0,0,0.05) !important}.box-shadow-none{box-shadow:none !important}.bg-white{background-color:#fff !important}.bg-blue{background-color:#0366d6 !important}.bg-blue-light{background-color:#f1f8ff !important}.bg-gray-dark{background-color:#24292e !important}.bg-gray{background-color:#f6f8fa !important}.bg-gray-light{background-color:#fafbfc !important}.bg-green{background-color:#28a745 !important}.bg-green-light{background-color:#dcffe4 !important}.bg-red{background-color:#d73a49 !important}.bg-red-light{background-color:#ffdce0 !important}.bg-yellow{background-color:#ffd33d !important}.bg-yellow-light{background-color:#fff5b1 !important}.bg-purple{background-color:#6f42c1 !important}.bg-purple-light{background-color:#f5f0ff !important}.bg-shade-gradient{background-image:-webkit-linear-gradient(270deg, rgba(0,0,0,0.065), transparent) !important;background-image:linear-gradient(180deg, rgba(0,0,0,0.065), transparent) !important;background-repeat:no-repeat !important;background-size:100% 200px !important}.text-blue{color:#0366d6 !important}.text-red{color:#cb2431 !important}.text-gray-light{color:#6a737d !important}.text-gray{color:#586069 !important}.text-gray-dark{color:#24292e !important}.text-green{color:#28a745 !important}.text-orange{color:#a04100 !important}.text-orange-light{color:#e36209 !important}.text-purple{color:#6f42c1 !important}.text-white{color:#fff !important}.text-inherit{color:inherit !important}.text-renamed{color:#ffd33d !important}.text-pending{color:#b08800 !important}.bg-pending{color:#dbab09 !important}.link-gray{color:#586069 !important}.link-gray:hover{color:#0366d6 !important}.link-gray-dark{color:#24292e !important}.link-gray-dark:hover{color:#0366d6 !important}.link-hover-blue:hover{color:#0366d6 !important}.muted-link{color:#586069 !important}.muted-link:hover{color:#0366d6 !important;text-decoration:none}.flex-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}@media (min-width: 544px){.flex-sm-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-sm-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-sm-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-sm-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-sm-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-sm-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-sm-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-sm-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-sm-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-sm-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-sm-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-sm-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-sm-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-sm-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-sm-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-sm-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-sm-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-sm-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-sm-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-sm-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-sm-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-sm-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-sm-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-sm-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-sm-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-sm-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-sm-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-sm-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-sm-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-sm-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}@media (min-width: 768px){.flex-md-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-md-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-md-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-md-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-md-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-md-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-md-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-md-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-md-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-md-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-md-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-md-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-md-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-md-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-md-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-md-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-md-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-md-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-md-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-md-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-md-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-md-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-md-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-md-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-md-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-md-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-md-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-md-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-md-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-md-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}@media (min-width: 1012px){.flex-lg-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-lg-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-lg-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-lg-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-lg-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-lg-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-lg-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-lg-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-lg-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-lg-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-lg-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-lg-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-lg-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-lg-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-lg-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-lg-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-lg-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-lg-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-lg-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-lg-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-lg-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-lg-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-lg-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-lg-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-lg-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-lg-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-lg-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-lg-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-lg-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-lg-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}@media (min-width: 1280px){.flex-xl-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-webkit-flex-direction:row !important;flex-direction:row !important}.flex-xl-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-webkit-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-xl-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-webkit-flex-direction:column !important;flex-direction:column !important}.flex-xl-wrap{-webkit-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-xl-nowrap{-webkit-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-xl-justify-start{-webkit-box-pack:start !important;-webkit-justify-content:flex-start !important;justify-content:flex-start !important}.flex-xl-justify-end{-webkit-box-pack:end !important;-webkit-justify-content:flex-end !important;justify-content:flex-end !important}.flex-xl-justify-center{-webkit-box-pack:center !important;-webkit-justify-content:center !important;justify-content:center !important}.flex-xl-justify-between{-webkit-box-pack:justify !important;-webkit-justify-content:space-between !important;justify-content:space-between !important}.flex-xl-justify-around{-webkit-justify-content:space-around !important;justify-content:space-around !important}.flex-xl-items-start{-webkit-box-align:start !important;-webkit-align-items:flex-start !important;align-items:flex-start !important}.flex-xl-items-end{-webkit-box-align:end !important;-webkit-align-items:flex-end !important;align-items:flex-end !important}.flex-xl-items-center{-webkit-box-align:center !important;-webkit-align-items:center !important;align-items:center !important}.flex-xl-items-baseline{-webkit-box-align:baseline !important;-webkit-align-items:baseline !important;align-items:baseline !important}.flex-xl-items-stretch{-webkit-box-align:stretch !important;-webkit-align-items:stretch !important;align-items:stretch !important}.flex-xl-content-start{-webkit-align-content:flex-start !important;align-content:flex-start !important}.flex-xl-content-end{-webkit-align-content:flex-end !important;align-content:flex-end !important}.flex-xl-content-center{-webkit-align-content:center !important;align-content:center !important}.flex-xl-content-between{-webkit-align-content:space-between !important;align-content:space-between !important}.flex-xl-content-around{-webkit-align-content:space-around !important;align-content:space-around !important}.flex-xl-content-stretch{-webkit-align-content:stretch !important;align-content:stretch !important}.flex-xl-auto{-webkit-box-flex:1 !important;-webkit-flex:1 1 auto !important;flex:1 1 auto !important}.flex-xl-shrink-0{-webkit-flex-shrink:0 !important;flex-shrink:0 !important}.flex-xl-self-auto{-webkit-align-self:auto !important;align-self:auto !important}.flex-xl-self-start{-webkit-align-self:flex-start !important;align-self:flex-start !important}.flex-xl-self-end{-webkit-align-self:flex-end !important;align-self:flex-end !important}.flex-xl-self-center{-webkit-align-self:center !important;align-self:center !important}.flex-xl-self-baseline{-webkit-align-self:baseline !important;align-self:baseline !important}.flex-xl-self-stretch{-webkit-align-self:stretch !important;align-self:stretch !important}.flex-xl-item-equal{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:0;flex-basis:0}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.top-0{top:0 !important}.right-0{right:0 !important}.bottom-0{bottom:0 !important}.left-0{left:0 !important}.v-align-middle{vertical-align:middle !important}.v-align-top{vertical-align:top !important}.v-align-bottom{vertical-align:bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-text-bottom{vertical-align:text-bottom !important}.overflow-hidden{overflow:hidden !important}.overflow-scroll{overflow:scroll !important}.overflow-auto{overflow:auto !important}.clearfix::before{display:table;content:""}.clearfix::after{display:table;clear:both;content:""}.float-right{float:right !important}.float-left{float:left !important}.float-none{float:none !important}@media (min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 1012px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1280px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.width-fit{max-width:100% !important}.width-full{width:100% !important}.height-full{height:100% !important}.min-width-0{min-width:0 !important}.direction-rtl{direction:rtl !important}.direction-ltr{direction:ltr !important}@media (min-width: 544px){.direction-sm-rtl{direction:rtl !important}.direction-sm-ltr{direction:ltr !important}}@media (min-width: 768px){.direction-md-rtl{direction:rtl !important}.direction-md-ltr{direction:ltr !important}}@media (min-width: 1012px){.direction-lg-rtl{direction:rtl !important}.direction-lg-ltr{direction:ltr !important}}@media (min-width: 1280px){.direction-xl-rtl{direction:rtl !important}.direction-xl-ltr{direction:ltr !important}}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mt-n0{margin-top:-0 !important}.mr-n0{margin-right:-0 !important}.mb-n0{margin-bottom:-0 !important}.ml-n0{margin-left:-0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:4px !important}.mt-1{margin-top:4px !important}.mr-1{margin-right:4px !important}.mb-1{margin-bottom:4px !important}.ml-1{margin-left:4px !important}.mt-n1{margin-top:-4px !important}.mr-n1{margin-right:-4px !important}.mb-n1{margin-bottom:-4px !important}.ml-n1{margin-left:-4px !important}.mx-1{margin-right:4px !important;margin-left:4px !important}.my-1{margin-top:4px !important;margin-bottom:4px !important}.m-2{margin:8px !important}.mt-2{margin-top:8px !important}.mr-2{margin-right:8px !important}.mb-2{margin-bottom:8px !important}.ml-2{margin-left:8px !important}.mt-n2{margin-top:-8px !important}.mr-n2{margin-right:-8px !important}.mb-n2{margin-bottom:-8px !important}.ml-n2{margin-left:-8px !important}.mx-2{margin-right:8px !important;margin-left:8px !important}.my-2{margin-top:8px !important;margin-bottom:8px !important}.m-3{margin:16px !important}.mt-3{margin-top:16px !important}.mr-3{margin-right:16px !important}.mb-3{margin-bottom:16px !important}.ml-3{margin-left:16px !important}.mt-n3{margin-top:-16px !important}.mr-n3{margin-right:-16px !important}.mb-n3{margin-bottom:-16px !important}.ml-n3{margin-left:-16px !important}.mx-3{margin-right:16px !important;margin-left:16px !important}.my-3{margin-top:16px !important;margin-bottom:16px !important}.m-4{margin:24px !important}.mt-4{margin-top:24px !important}.mr-4{margin-right:24px !important}.mb-4{margin-bottom:24px !important}.ml-4{margin-left:24px !important}.mt-n4{margin-top:-24px !important}.mr-n4{margin-right:-24px !important}.mb-n4{margin-bottom:-24px !important}.ml-n4{margin-left:-24px !important}.mx-4{margin-right:24px !important;margin-left:24px !important}.my-4{margin-top:24px !important;margin-bottom:24px !important}.m-5{margin:32px !important}.mt-5{margin-top:32px !important}.mr-5{margin-right:32px !important}.mb-5{margin-bottom:32px !important}.ml-5{margin-left:32px !important}.mt-n5{margin-top:-32px !important}.mr-n5{margin-right:-32px !important}.mb-n5{margin-bottom:-32px !important}.ml-n5{margin-left:-32px !important}.mx-5{margin-right:32px !important;margin-left:32px !important}.my-5{margin-top:32px !important;margin-bottom:32px !important}.m-6{margin:40px !important}.mt-6{margin-top:40px !important}.mr-6{margin-right:40px !important}.mb-6{margin-bottom:40px !important}.ml-6{margin-left:40px !important}.mt-n6{margin-top:-40px !important}.mr-n6{margin-right:-40px !important}.mb-n6{margin-bottom:-40px !important}.ml-n6{margin-left:-40px !important}.mx-6{margin-right:40px !important;margin-left:40px !important}.my-6{margin-top:40px !important;margin-bottom:40px !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mr-sm-0{margin-right:0 !important}.mb-sm-0{margin-bottom:0 !important}.ml-sm-0{margin-left:0 !important}.mt-sm-n0{margin-top:-0 !important}.mr-sm-n0{margin-right:-0 !important}.mb-sm-n0{margin-bottom:-0 !important}.ml-sm-n0{margin-left:-0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 544px){.m-sm-1{margin:4px !important}.mt-sm-1{margin-top:4px !important}.mr-sm-1{margin-right:4px !important}.mb-sm-1{margin-bottom:4px !important}.ml-sm-1{margin-left:4px !important}.mt-sm-n1{margin-top:-4px !important}.mr-sm-n1{margin-right:-4px !important}.mb-sm-n1{margin-bottom:-4px !important}.ml-sm-n1{margin-left:-4px !important}.mx-sm-1{margin-right:4px !important;margin-left:4px !important}.my-sm-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 544px){.m-sm-2{margin:8px !important}.mt-sm-2{margin-top:8px !important}.mr-sm-2{margin-right:8px !important}.mb-sm-2{margin-bottom:8px !important}.ml-sm-2{margin-left:8px !important}.mt-sm-n2{margin-top:-8px !important}.mr-sm-n2{margin-right:-8px !important}.mb-sm-n2{margin-bottom:-8px !important}.ml-sm-n2{margin-left:-8px !important}.mx-sm-2{margin-right:8px !important;margin-left:8px !important}.my-sm-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 544px){.m-sm-3{margin:16px !important}.mt-sm-3{margin-top:16px !important}.mr-sm-3{margin-right:16px !important}.mb-sm-3{margin-bottom:16px !important}.ml-sm-3{margin-left:16px !important}.mt-sm-n3{margin-top:-16px !important}.mr-sm-n3{margin-right:-16px !important}.mb-sm-n3{margin-bottom:-16px !important}.ml-sm-n3{margin-left:-16px !important}.mx-sm-3{margin-right:16px !important;margin-left:16px !important}.my-sm-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 544px){.m-sm-4{margin:24px !important}.mt-sm-4{margin-top:24px !important}.mr-sm-4{margin-right:24px !important}.mb-sm-4{margin-bottom:24px !important}.ml-sm-4{margin-left:24px !important}.mt-sm-n4{margin-top:-24px !important}.mr-sm-n4{margin-right:-24px !important}.mb-sm-n4{margin-bottom:-24px !important}.ml-sm-n4{margin-left:-24px !important}.mx-sm-4{margin-right:24px !important;margin-left:24px !important}.my-sm-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 544px){.m-sm-5{margin:32px !important}.mt-sm-5{margin-top:32px !important}.mr-sm-5{margin-right:32px !important}.mb-sm-5{margin-bottom:32px !important}.ml-sm-5{margin-left:32px !important}.mt-sm-n5{margin-top:-32px !important}.mr-sm-n5{margin-right:-32px !important}.mb-sm-n5{margin-bottom:-32px !important}.ml-sm-n5{margin-left:-32px !important}.mx-sm-5{margin-right:32px !important;margin-left:32px !important}.my-sm-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 544px){.m-sm-6{margin:40px !important}.mt-sm-6{margin-top:40px !important}.mr-sm-6{margin-right:40px !important}.mb-sm-6{margin-bottom:40px !important}.ml-sm-6{margin-left:40px !important}.mt-sm-n6{margin-top:-40px !important}.mr-sm-n6{margin-right:-40px !important}.mb-sm-n6{margin-bottom:-40px !important}.ml-sm-n6{margin-left:-40px !important}.mx-sm-6{margin-right:40px !important;margin-left:40px !important}.my-sm-6{margin-top:40px !important;margin-bottom:40px !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mr-md-0{margin-right:0 !important}.mb-md-0{margin-bottom:0 !important}.ml-md-0{margin-left:0 !important}.mt-md-n0{margin-top:-0 !important}.mr-md-n0{margin-right:-0 !important}.mb-md-n0{margin-bottom:-0 !important}.ml-md-n0{margin-left:-0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 768px){.m-md-1{margin:4px !important}.mt-md-1{margin-top:4px !important}.mr-md-1{margin-right:4px !important}.mb-md-1{margin-bottom:4px !important}.ml-md-1{margin-left:4px !important}.mt-md-n1{margin-top:-4px !important}.mr-md-n1{margin-right:-4px !important}.mb-md-n1{margin-bottom:-4px !important}.ml-md-n1{margin-left:-4px !important}.mx-md-1{margin-right:4px !important;margin-left:4px !important}.my-md-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 768px){.m-md-2{margin:8px !important}.mt-md-2{margin-top:8px !important}.mr-md-2{margin-right:8px !important}.mb-md-2{margin-bottom:8px !important}.ml-md-2{margin-left:8px !important}.mt-md-n2{margin-top:-8px !important}.mr-md-n2{margin-right:-8px !important}.mb-md-n2{margin-bottom:-8px !important}.ml-md-n2{margin-left:-8px !important}.mx-md-2{margin-right:8px !important;margin-left:8px !important}.my-md-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 768px){.m-md-3{margin:16px !important}.mt-md-3{margin-top:16px !important}.mr-md-3{margin-right:16px !important}.mb-md-3{margin-bottom:16px !important}.ml-md-3{margin-left:16px !important}.mt-md-n3{margin-top:-16px !important}.mr-md-n3{margin-right:-16px !important}.mb-md-n3{margin-bottom:-16px !important}.ml-md-n3{margin-left:-16px !important}.mx-md-3{margin-right:16px !important;margin-left:16px !important}.my-md-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 768px){.m-md-4{margin:24px !important}.mt-md-4{margin-top:24px !important}.mr-md-4{margin-right:24px !important}.mb-md-4{margin-bottom:24px !important}.ml-md-4{margin-left:24px !important}.mt-md-n4{margin-top:-24px !important}.mr-md-n4{margin-right:-24px !important}.mb-md-n4{margin-bottom:-24px !important}.ml-md-n4{margin-left:-24px !important}.mx-md-4{margin-right:24px !important;margin-left:24px !important}.my-md-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 768px){.m-md-5{margin:32px !important}.mt-md-5{margin-top:32px !important}.mr-md-5{margin-right:32px !important}.mb-md-5{margin-bottom:32px !important}.ml-md-5{margin-left:32px !important}.mt-md-n5{margin-top:-32px !important}.mr-md-n5{margin-right:-32px !important}.mb-md-n5{margin-bottom:-32px !important}.ml-md-n5{margin-left:-32px !important}.mx-md-5{margin-right:32px !important;margin-left:32px !important}.my-md-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 768px){.m-md-6{margin:40px !important}.mt-md-6{margin-top:40px !important}.mr-md-6{margin-right:40px !important}.mb-md-6{margin-bottom:40px !important}.ml-md-6{margin-left:40px !important}.mt-md-n6{margin-top:-40px !important}.mr-md-n6{margin-right:-40px !important}.mb-md-n6{margin-bottom:-40px !important}.ml-md-n6{margin-left:-40px !important}.mx-md-6{margin-right:40px !important;margin-left:40px !important}.my-md-6{margin-top:40px !important;margin-bottom:40px !important}}@media (min-width: 1012px){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mr-lg-0{margin-right:0 !important}.mb-lg-0{margin-bottom:0 !important}.ml-lg-0{margin-left:0 !important}.mt-lg-n0{margin-top:-0 !important}.mr-lg-n0{margin-right:-0 !important}.mb-lg-n0{margin-bottom:-0 !important}.ml-lg-n0{margin-left:-0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 1012px){.m-lg-1{margin:4px !important}.mt-lg-1{margin-top:4px !important}.mr-lg-1{margin-right:4px !important}.mb-lg-1{margin-bottom:4px !important}.ml-lg-1{margin-left:4px !important}.mt-lg-n1{margin-top:-4px !important}.mr-lg-n1{margin-right:-4px !important}.mb-lg-n1{margin-bottom:-4px !important}.ml-lg-n1{margin-left:-4px !important}.mx-lg-1{margin-right:4px !important;margin-left:4px !important}.my-lg-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 1012px){.m-lg-2{margin:8px !important}.mt-lg-2{margin-top:8px !important}.mr-lg-2{margin-right:8px !important}.mb-lg-2{margin-bottom:8px !important}.ml-lg-2{margin-left:8px !important}.mt-lg-n2{margin-top:-8px !important}.mr-lg-n2{margin-right:-8px !important}.mb-lg-n2{margin-bottom:-8px !important}.ml-lg-n2{margin-left:-8px !important}.mx-lg-2{margin-right:8px !important;margin-left:8px !important}.my-lg-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 1012px){.m-lg-3{margin:16px !important}.mt-lg-3{margin-top:16px !important}.mr-lg-3{margin-right:16px !important}.mb-lg-3{margin-bottom:16px !important}.ml-lg-3{margin-left:16px !important}.mt-lg-n3{margin-top:-16px !important}.mr-lg-n3{margin-right:-16px !important}.mb-lg-n3{margin-bottom:-16px !important}.ml-lg-n3{margin-left:-16px !important}.mx-lg-3{margin-right:16px !important;margin-left:16px !important}.my-lg-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 1012px){.m-lg-4{margin:24px !important}.mt-lg-4{margin-top:24px !important}.mr-lg-4{margin-right:24px !important}.mb-lg-4{margin-bottom:24px !important}.ml-lg-4{margin-left:24px !important}.mt-lg-n4{margin-top:-24px !important}.mr-lg-n4{margin-right:-24px !important}.mb-lg-n4{margin-bottom:-24px !important}.ml-lg-n4{margin-left:-24px !important}.mx-lg-4{margin-right:24px !important;margin-left:24px !important}.my-lg-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 1012px){.m-lg-5{margin:32px !important}.mt-lg-5{margin-top:32px !important}.mr-lg-5{margin-right:32px !important}.mb-lg-5{margin-bottom:32px !important}.ml-lg-5{margin-left:32px !important}.mt-lg-n5{margin-top:-32px !important}.mr-lg-n5{margin-right:-32px !important}.mb-lg-n5{margin-bottom:-32px !important}.ml-lg-n5{margin-left:-32px !important}.mx-lg-5{margin-right:32px !important;margin-left:32px !important}.my-lg-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 1012px){.m-lg-6{margin:40px !important}.mt-lg-6{margin-top:40px !important}.mr-lg-6{margin-right:40px !important}.mb-lg-6{margin-bottom:40px !important}.ml-lg-6{margin-left:40px !important}.mt-lg-n6{margin-top:-40px !important}.mr-lg-n6{margin-right:-40px !important}.mb-lg-n6{margin-bottom:-40px !important}.ml-lg-n6{margin-left:-40px !important}.mx-lg-6{margin-right:40px !important;margin-left:40px !important}.my-lg-6{margin-top:40px !important;margin-bottom:40px !important}}@media (min-width: 1280px){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mr-xl-0{margin-right:0 !important}.mb-xl-0{margin-bottom:0 !important}.ml-xl-0{margin-left:0 !important}.mt-xl-n0{margin-top:-0 !important}.mr-xl-n0{margin-right:-0 !important}.mb-xl-n0{margin-bottom:-0 !important}.ml-xl-n0{margin-left:-0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}}@media (min-width: 1280px){.m-xl-1{margin:4px !important}.mt-xl-1{margin-top:4px !important}.mr-xl-1{margin-right:4px !important}.mb-xl-1{margin-bottom:4px !important}.ml-xl-1{margin-left:4px !important}.mt-xl-n1{margin-top:-4px !important}.mr-xl-n1{margin-right:-4px !important}.mb-xl-n1{margin-bottom:-4px !important}.ml-xl-n1{margin-left:-4px !important}.mx-xl-1{margin-right:4px !important;margin-left:4px !important}.my-xl-1{margin-top:4px !important;margin-bottom:4px !important}}@media (min-width: 1280px){.m-xl-2{margin:8px !important}.mt-xl-2{margin-top:8px !important}.mr-xl-2{margin-right:8px !important}.mb-xl-2{margin-bottom:8px !important}.ml-xl-2{margin-left:8px !important}.mt-xl-n2{margin-top:-8px !important}.mr-xl-n2{margin-right:-8px !important}.mb-xl-n2{margin-bottom:-8px !important}.ml-xl-n2{margin-left:-8px !important}.mx-xl-2{margin-right:8px !important;margin-left:8px !important}.my-xl-2{margin-top:8px !important;margin-bottom:8px !important}}@media (min-width: 1280px){.m-xl-3{margin:16px !important}.mt-xl-3{margin-top:16px !important}.mr-xl-3{margin-right:16px !important}.mb-xl-3{margin-bottom:16px !important}.ml-xl-3{margin-left:16px !important}.mt-xl-n3{margin-top:-16px !important}.mr-xl-n3{margin-right:-16px !important}.mb-xl-n3{margin-bottom:-16px !important}.ml-xl-n3{margin-left:-16px !important}.mx-xl-3{margin-right:16px !important;margin-left:16px !important}.my-xl-3{margin-top:16px !important;margin-bottom:16px !important}}@media (min-width: 1280px){.m-xl-4{margin:24px !important}.mt-xl-4{margin-top:24px !important}.mr-xl-4{margin-right:24px !important}.mb-xl-4{margin-bottom:24px !important}.ml-xl-4{margin-left:24px !important}.mt-xl-n4{margin-top:-24px !important}.mr-xl-n4{margin-right:-24px !important}.mb-xl-n4{margin-bottom:-24px !important}.ml-xl-n4{margin-left:-24px !important}.mx-xl-4{margin-right:24px !important;margin-left:24px !important}.my-xl-4{margin-top:24px !important;margin-bottom:24px !important}}@media (min-width: 1280px){.m-xl-5{margin:32px !important}.mt-xl-5{margin-top:32px !important}.mr-xl-5{margin-right:32px !important}.mb-xl-5{margin-bottom:32px !important}.ml-xl-5{margin-left:32px !important}.mt-xl-n5{margin-top:-32px !important}.mr-xl-n5{margin-right:-32px !important}.mb-xl-n5{margin-bottom:-32px !important}.ml-xl-n5{margin-left:-32px !important}.mx-xl-5{margin-right:32px !important;margin-left:32px !important}.my-xl-5{margin-top:32px !important;margin-bottom:32px !important}}@media (min-width: 1280px){.m-xl-6{margin:40px !important}.mt-xl-6{margin-top:40px !important}.mr-xl-6{margin-right:40px !important}.mb-xl-6{margin-bottom:40px !important}.ml-xl-6{margin-left:40px !important}.mt-xl-n6{margin-top:-40px !important}.mr-xl-n6{margin-right:-40px !important}.mb-xl-n6{margin-bottom:-40px !important}.ml-xl-n6{margin-left:-40px !important}.mx-xl-6{margin-right:40px !important;margin-left:40px !important}.my-xl-6{margin-top:40px !important;margin-bottom:40px !important}}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:4px !important}.pt-1{padding-top:4px !important}.pr-1{padding-right:4px !important}.pb-1{padding-bottom:4px !important}.pl-1{padding-left:4px !important}.px-1{padding-right:4px !important;padding-left:4px !important}.py-1{padding-top:4px !important;padding-bottom:4px !important}.p-2{padding:8px !important}.pt-2{padding-top:8px !important}.pr-2{padding-right:8px !important}.pb-2{padding-bottom:8px !important}.pl-2{padding-left:8px !important}.px-2{padding-right:8px !important;padding-left:8px !important}.py-2{padding-top:8px !important;padding-bottom:8px !important}.p-3{padding:16px !important}.pt-3{padding-top:16px !important}.pr-3{padding-right:16px !important}.pb-3{padding-bottom:16px !important}.pl-3{padding-left:16px !important}.px-3{padding-right:16px !important;padding-left:16px !important}.py-3{padding-top:16px !important;padding-bottom:16px !important}.p-4{padding:24px !important}.pt-4{padding-top:24px !important}.pr-4{padding-right:24px !important}.pb-4{padding-bottom:24px !important}.pl-4{padding-left:24px !important}.px-4{padding-right:24px !important;padding-left:24px !important}.py-4{padding-top:24px !important;padding-bottom:24px !important}.p-5{padding:32px !important}.pt-5{padding-top:32px !important}.pr-5{padding-right:32px !important}.pb-5{padding-bottom:32px !important}.pl-5{padding-left:32px !important}.px-5{padding-right:32px !important;padding-left:32px !important}.py-5{padding-top:32px !important;padding-bottom:32px !important}.p-6{padding:40px !important}.pt-6{padding-top:40px !important}.pr-6{padding-right:40px !important}.pb-6{padding-bottom:40px !important}.pl-6{padding-left:40px !important}.px-6{padding-right:40px !important;padding-left:40px !important}.py-6{padding-top:40px !important;padding-bottom:40px !important}@media (min-width: 544px){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 544px){.p-sm-1{padding:4px !important}.pt-sm-1{padding-top:4px !important}.pr-sm-1{padding-right:4px !important}.pb-sm-1{padding-bottom:4px !important}.pl-sm-1{padding-left:4px !important}.px-sm-1{padding-right:4px !important;padding-left:4px !important}.py-sm-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 544px){.p-sm-2{padding:8px !important}.pt-sm-2{padding-top:8px !important}.pr-sm-2{padding-right:8px !important}.pb-sm-2{padding-bottom:8px !important}.pl-sm-2{padding-left:8px !important}.px-sm-2{padding-right:8px !important;padding-left:8px !important}.py-sm-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 544px){.p-sm-3{padding:16px !important}.pt-sm-3{padding-top:16px !important}.pr-sm-3{padding-right:16px !important}.pb-sm-3{padding-bottom:16px !important}.pl-sm-3{padding-left:16px !important}.px-sm-3{padding-right:16px !important;padding-left:16px !important}.py-sm-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 544px){.p-sm-4{padding:24px !important}.pt-sm-4{padding-top:24px !important}.pr-sm-4{padding-right:24px !important}.pb-sm-4{padding-bottom:24px !important}.pl-sm-4{padding-left:24px !important}.px-sm-4{padding-right:24px !important;padding-left:24px !important}.py-sm-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 544px){.p-sm-5{padding:32px !important}.pt-sm-5{padding-top:32px !important}.pr-sm-5{padding-right:32px !important}.pb-sm-5{padding-bottom:32px !important}.pl-sm-5{padding-left:32px !important}.px-sm-5{padding-right:32px !important;padding-left:32px !important}.py-sm-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 544px){.p-sm-6{padding:40px !important}.pt-sm-6{padding-top:40px !important}.pr-sm-6{padding-right:40px !important}.pb-sm-6{padding-bottom:40px !important}.pl-sm-6{padding-left:40px !important}.px-sm-6{padding-right:40px !important;padding-left:40px !important}.py-sm-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 768px){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 768px){.p-md-1{padding:4px !important}.pt-md-1{padding-top:4px !important}.pr-md-1{padding-right:4px !important}.pb-md-1{padding-bottom:4px !important}.pl-md-1{padding-left:4px !important}.px-md-1{padding-right:4px !important;padding-left:4px !important}.py-md-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 768px){.p-md-2{padding:8px !important}.pt-md-2{padding-top:8px !important}.pr-md-2{padding-right:8px !important}.pb-md-2{padding-bottom:8px !important}.pl-md-2{padding-left:8px !important}.px-md-2{padding-right:8px !important;padding-left:8px !important}.py-md-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 768px){.p-md-3{padding:16px !important}.pt-md-3{padding-top:16px !important}.pr-md-3{padding-right:16px !important}.pb-md-3{padding-bottom:16px !important}.pl-md-3{padding-left:16px !important}.px-md-3{padding-right:16px !important;padding-left:16px !important}.py-md-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 768px){.p-md-4{padding:24px !important}.pt-md-4{padding-top:24px !important}.pr-md-4{padding-right:24px !important}.pb-md-4{padding-bottom:24px !important}.pl-md-4{padding-left:24px !important}.px-md-4{padding-right:24px !important;padding-left:24px !important}.py-md-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 768px){.p-md-5{padding:32px !important}.pt-md-5{padding-top:32px !important}.pr-md-5{padding-right:32px !important}.pb-md-5{padding-bottom:32px !important}.pl-md-5{padding-left:32px !important}.px-md-5{padding-right:32px !important;padding-left:32px !important}.py-md-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 768px){.p-md-6{padding:40px !important}.pt-md-6{padding-top:40px !important}.pr-md-6{padding-right:40px !important}.pb-md-6{padding-bottom:40px !important}.pl-md-6{padding-left:40px !important}.px-md-6{padding-right:40px !important;padding-left:40px !important}.py-md-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1012px){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 1012px){.p-lg-1{padding:4px !important}.pt-lg-1{padding-top:4px !important}.pr-lg-1{padding-right:4px !important}.pb-lg-1{padding-bottom:4px !important}.pl-lg-1{padding-left:4px !important}.px-lg-1{padding-right:4px !important;padding-left:4px !important}.py-lg-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 1012px){.p-lg-2{padding:8px !important}.pt-lg-2{padding-top:8px !important}.pr-lg-2{padding-right:8px !important}.pb-lg-2{padding-bottom:8px !important}.pl-lg-2{padding-left:8px !important}.px-lg-2{padding-right:8px !important;padding-left:8px !important}.py-lg-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 1012px){.p-lg-3{padding:16px !important}.pt-lg-3{padding-top:16px !important}.pr-lg-3{padding-right:16px !important}.pb-lg-3{padding-bottom:16px !important}.pl-lg-3{padding-left:16px !important}.px-lg-3{padding-right:16px !important;padding-left:16px !important}.py-lg-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 1012px){.p-lg-4{padding:24px !important}.pt-lg-4{padding-top:24px !important}.pr-lg-4{padding-right:24px !important}.pb-lg-4{padding-bottom:24px !important}.pl-lg-4{padding-left:24px !important}.px-lg-4{padding-right:24px !important;padding-left:24px !important}.py-lg-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 1012px){.p-lg-5{padding:32px !important}.pt-lg-5{padding-top:32px !important}.pr-lg-5{padding-right:32px !important}.pb-lg-5{padding-bottom:32px !important}.pl-lg-5{padding-left:32px !important}.px-lg-5{padding-right:32px !important;padding-left:32px !important}.py-lg-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 1012px){.p-lg-6{padding:40px !important}.pt-lg-6{padding-top:40px !important}.pr-lg-6{padding-right:40px !important}.pb-lg-6{padding-bottom:40px !important}.pl-lg-6{padding-left:40px !important}.px-lg-6{padding-right:40px !important;padding-left:40px !important}.py-lg-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1280px){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}}@media (min-width: 1280px){.p-xl-1{padding:4px !important}.pt-xl-1{padding-top:4px !important}.pr-xl-1{padding-right:4px !important}.pb-xl-1{padding-bottom:4px !important}.pl-xl-1{padding-left:4px !important}.px-xl-1{padding-right:4px !important;padding-left:4px !important}.py-xl-1{padding-top:4px !important;padding-bottom:4px !important}}@media (min-width: 1280px){.p-xl-2{padding:8px !important}.pt-xl-2{padding-top:8px !important}.pr-xl-2{padding-right:8px !important}.pb-xl-2{padding-bottom:8px !important}.pl-xl-2{padding-left:8px !important}.px-xl-2{padding-right:8px !important;padding-left:8px !important}.py-xl-2{padding-top:8px !important;padding-bottom:8px !important}}@media (min-width: 1280px){.p-xl-3{padding:16px !important}.pt-xl-3{padding-top:16px !important}.pr-xl-3{padding-right:16px !important}.pb-xl-3{padding-bottom:16px !important}.pl-xl-3{padding-left:16px !important}.px-xl-3{padding-right:16px !important;padding-left:16px !important}.py-xl-3{padding-top:16px !important;padding-bottom:16px !important}}@media (min-width: 1280px){.p-xl-4{padding:24px !important}.pt-xl-4{padding-top:24px !important}.pr-xl-4{padding-right:24px !important}.pb-xl-4{padding-bottom:24px !important}.pl-xl-4{padding-left:24px !important}.px-xl-4{padding-right:24px !important;padding-left:24px !important}.py-xl-4{padding-top:24px !important;padding-bottom:24px !important}}@media (min-width: 1280px){.p-xl-5{padding:32px !important}.pt-xl-5{padding-top:32px !important}.pr-xl-5{padding-right:32px !important}.pb-xl-5{padding-bottom:32px !important}.pl-xl-5{padding-left:32px !important}.px-xl-5{padding-right:32px !important;padding-left:32px !important}.py-xl-5{padding-top:32px !important;padding-bottom:32px !important}}@media (min-width: 1280px){.p-xl-6{padding:40px !important}.pt-xl-6{padding-top:40px !important}.pr-xl-6{padding-right:40px !important}.pb-xl-6{padding-bottom:40px !important}.pl-xl-6{padding-left:40px !important}.px-xl-6{padding-right:40px !important;padding-left:40px !important}.py-xl-6{padding-top:40px !important;padding-bottom:40px !important}}.h1{font-size:26px !important}@media (min-width: 768px){.h1{font-size:32px !important}}.h2{font-size:22px !important}@media (min-width: 768px){.h2{font-size:24px !important}}.h3{font-size:18px !important}@media (min-width: 768px){.h3{font-size:20px !important}}.h4{font-size:16px !important}@media (min-width: 768px){.h4{font-size:16px !important}}.h5{font-size:14px !important}.h6{font-size:12px !important}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:600 !important}.f1{font-size:26px !important}@media (min-width: 768px){.f1{font-size:32px !important}}.f2{font-size:22px !important}@media (min-width: 768px){.f2{font-size:24px !important}}.f3{font-size:18px !important}@media (min-width: 768px){.f3{font-size:20px !important}}.f4{font-size:16px !important}@media (min-width: 768px){.f4{font-size:16px !important}}.f5{font-size:14px !important}.f6{font-size:12px !important}.f00-light{font-size:40px !important;font-weight:300 !important}@media (min-width: 768px){.f00-light{font-size:48px !important}}.f0-light{font-size:32px !important;font-weight:300 !important}@media (min-width: 768px){.f0-light{font-size:40px !important}}.f1-light{font-size:26px !important;font-weight:300 !important}@media (min-width: 768px){.f1-light{font-size:32px !important}}.f2-light{font-size:22px !important;font-weight:300 !important}@media (min-width: 768px){.f2-light{font-size:24px !important}}.f3-light{font-size:18px !important;font-weight:300 !important}@media (min-width: 768px){.f3-light{font-size:20px !important}}.text-small{font-size:12px !important}.lead{margin-bottom:30px;font-size:20px;font-weight:300;color:#555}.lh-condensed-ultra{line-height:1 !important}.lh-condensed{line-height:1.25 !important}.lh-default{line-height:1.5 !important}.text-right{text-align:right !important}.text-left{text-align:left !important}.text-center{text-align:center !important}@media (min-width: 544px){.text-sm-right{text-align:right !important}.text-sm-left{text-align:left !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-right{text-align:right !important}.text-md-left{text-align:left !important}.text-md-center{text-align:center !important}}@media (min-width: 1012px){.text-lg-right{text-align:right !important}.text-lg-left{text-align:left !important}.text-lg-center{text-align:center !important}}@media (min-width: 1280px){.text-xl-right{text-align:right !important}.text-xl-left{text-align:left !important}.text-xl-center{text-align:center !important}}.text-normal{font-weight:normal !important}.text-bold{font-weight:600 !important}.text-italic{font-style:italic !important}.text-uppercase{text-transform:uppercase !important}.no-underline{text-decoration:none !important}.no-wrap{white-space:nowrap !important}.wb-break-all{word-break:break-all !important}.text-emphasized{font-weight:600;color:#24292e}.list-style-none{list-style:none !important}.text-shadow-dark{text-shadow:0 1px 1px rgba(0,0,0,0.25),0 1px 25px rgba(0,0,0,0.75)}.text-shadow-light{text-shadow:0 1px 0 rgba(255,255,255,0.5)}.v-hidden{visibility:hidden !important}.v-visible{visibility:visible !important}.d-table{display:table !important}.d-table-cell{display:table-cell !important}.table-fixed{table-layout:fixed !important}.d-block{display:block !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-none{display:none !important}@media (min-width: 544px){.d-sm-table{display:table !important}.d-sm-table-cell{display:table-cell !important}.d-sm-block{display:block !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-sm-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-sm-none{display:none !important}}@media (min-width: 768px){.d-md-table{display:table !important}.d-md-table-cell{display:table-cell !important}.d-md-block{display:block !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-md-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-md-none{display:none !important}}@media (min-width: 1012px){.d-lg-table{display:table !important}.d-lg-table-cell{display:table-cell !important}.d-lg-block{display:block !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-lg-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-lg-none{display:none !important}}@media (min-width: 1280px){.d-xl-table{display:table !important}.d-xl-table-cell{display:table-cell !important}.d-xl-block{display:block !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-flex{display:-webkit-box !important;display:-webkit-flex !important;display:flex !important}.d-xl-inline-flex{display:-webkit-inline-box !important;display:-webkit-inline-flex !important;display:inline-flex !important}.d-xl-none{display:none !important}}@media (max-width: 544px){.hide-sm{display:none !important}}@media (min-width: 544px) and (max-width: 768px){.hide-md{display:none !important}}@media (min-width: 768px) and (max-width: 1012px){.hide-lg{display:none !important}}@media (min-width: 1012px){.hide-xl{display:none !important}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);word-wrap:normal;border:0}.Details--on .Details-content--shown{display:none !important}.Details:not(.Details--on) .Details-content--hidden{display:none !important}
.flash{position:relative;padding:16px;color:#032f62;background-color:#dbedff;border:1px solid rgba(27,31,35,0.15);border-radius:3px}.flash p:last-child{margin-bottom:0}.flash-messages{margin-bottom:24px}.flash-close{float:right;padding:16px;margin:-16px;color:inherit;text-align:center;cursor:pointer;background:none;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0.6}.flash-close:hover{opacity:1}.flash-action{float:right;margin-top:-3px;margin-left:24px}.flash-warn{color:#735c0f;background-color:#fffbdd;border-color:rgba(27,31,35,0.15)}.flash-error{color:#86181d;background-color:#ffdce0;border-color:rgba(27,31,35,0.15)}.flash-success{color:#165c26;background-color:#dcffe4;border-color:rgba(27,31,35,0.15)}.flash-full{margin-top:-1px;border-width:1px 0;border-radius:0}.warning{padding:0.5em;margin-bottom:0.8em;font-weight:600;background-color:#fffbdd}.avatar{display:inline-block;overflow:hidden;line-height:1;vertical-align:middle;border-radius:3px}.avatar-small{border-radius:2px}.avatar-link{float:left;line-height:1}.avatar-group-item{display:inline-block;margin-bottom:3px}.avatar-parent-child{position:relative}.avatar-child{position:absolute;right:-15%;bottom:-9%;background-color:#fff;border-radius:2px;box-shadow:-2px -2px 0 rgba(255,255,255,0.8)}.avatar-stack{display:inline-block;white-space:nowrap}.avatar-stack .avatar{position:relative;z-index:2;display:inline-block;width:20px;height:20px;box-sizing:content-box;margin-right:-15px;background-color:#fff;border-right:1px solid #fff;border-radius:2px;-webkit-transition:margin 0.1s ease-in-out;transition:margin 0.1s ease-in-out}.avatar-stack .avatar:only-child{background-color:transparent}.avatar-stack .avatar:first-child{z-index:3}.avatar-stack .avatar:last-child{z-index:1;margin-right:0;border-right:0}.avatar-stack:hover .avatar{margin-right:3px}.avatar-stack:hover .avatar:last-child{margin-right:0}.CircleBadge{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;background-color:#fff;border-radius:50%;box-shadow:0 1px 5px rgba(0,0,0,0.15)}.CircleBadge-icon{max-width:60% !important;height:auto !important;max-height:55% !important}.CircleBadge--small{width:56px;height:56px}.CircleBadge--medium{width:96px;height:96px}.CircleBadge--large{width:128px;height:128px}.DashedConnection{position:relative}.DashedConnection::before{position:absolute;top:50%;left:0;width:100%;content:"";border-bottom:2px dashed #e1e4e8}.DashedConnection .CircleBadge{position:relative}.blankslate{position:relative;padding:32px;text-align:center;background-color:#fafbfc;border:1px solid #e1e4e8;border-radius:3px;box-shadow:inset 0 0 10px rgba(27,31,35,0.05)}.blankslate code{padding:2px 5px 3px;font-size:14px;background:#fff;border:1px solid #eaecef;border-radius:3px}.blankslate-icon{margin-right:4px;margin-bottom:8px;margin-left:4px;color:#a3aab1}.blankslate-capped{border-radius:0 0 3px 3px}.blankslate-spacious{padding:80px 40px}.blankslate-narrow{width:485px;margin:0 auto}.blankslate-large h3{margin:16px 0;font-size:20px}.blankslate-large p{font-size:16px}.blankslate-clean-background{background:none;border:0;box-shadow:none}.markdown-body{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0 !important}.markdown-body>*:last-child{margin-bottom:0 !important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#cb2431}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre{margin-top:0;margin-bottom:16px}.markdown-body hr{height:0.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:0.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{font-size:inherit}.markdown-body h1{padding-bottom:0.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:0.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:0.875em}.markdown-body h6{font-size:0.85em;color:#6a737d}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:0.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body table img{background-color:transparent}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #dfe2e5}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#24292e}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0;padding-top:0.2em;padding-bottom:0.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,0.05);border-radius:3px}.markdown-body code::before,.markdown-body code::after,.markdown-body tt::before,.markdown-body tt::after{letter-spacing:-0.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code::before,.markdown-body pre code::after,.markdown-body pre tt::before,.markdown-body pre tt::after{content:normal}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:600;background:#f6f8fa;border-top:0}.state{display:inline-block;padding:4px 8px;font-weight:600;line-height:20px;color:#fff;text-align:center;background-color:#959da5;border-radius:3px}.state-open,.state-proposed,.state-reopened{background-color:#2cbe4e}.state-merged{background-color:#6f42c1}.state-closed{background-color:#cb2431}.state-renamed{background-color:#ffd33d}.table-list{display:table;width:100%;color:#6a737d;table-layout:fixed;border-bottom:1px solid #d1d5da}.table-list ol{list-style-type:decimal}.table-list-bordered{border-bottom-color:#eaecef}.table-list-bordered .table-list-cell:first-child{border-left:1px solid #eaecef}.table-list-bordered .table-list-cell:last-child{border-right:1px solid #eaecef}.table-list-item{position:relative;display:table-row;list-style:none}.table-list-item.unread .table-list-cell:first-child{box-shadow:2px 0 0 #0366d6 inset}.table-list-cell{position:relative;display:table-cell;padding:8px 10px;font-size:12px;vertical-align:top;border-top:1px solid #eaecef}.table-list-cell.flush-left{padding-left:0}.table-list-cell.flush-right{padding-right:0}.table-list-cell-checkbox{width:30px;padding-right:0;padding-left:0;text-align:center}.table-list-header{position:relative;margin-top:20px;background-color:#f6f8fa;border:1px solid #e1e4e8;border-radius:3px 3px 0 0}.table-list-header::before{display:table;content:""}.table-list-header::after{display:table;clear:both;content:""}.table-list-header .btn-link{position:relative;display:inline-block;padding-top:13px;padding-bottom:13px;font-weight:normal}.table-list-heading{margin-left:10px}.table-list-header-select-all{float:left;width:30px;padding:12px 10px;margin-right:5px;margin-left:-1px;text-align:center}.table-list-header-meta{display:inline-block;padding-top:13px;padding-bottom:13px;color:#586069}.table-list-header-toggle h4{padding:12px 0}.table-list-filters:first-child .table-list-header-toggle:first-child{padding-left:16px}.table-list-header-toggle.states .selected{font-weight:600}.table-list-header-toggle .btn-link{color:#586069}.table-list-header-toggle .btn-link .octicon{margin-right:2px}.table-list-header-toggle .btn-link:hover{color:#222;text-decoration:none}.table-list-header-toggle .btn-link.selected,.table-list-header-toggle .btn-link.selected:hover{color:#222}.table-list-header-toggle .btn-link+.btn-link{margin-left:10px}.table-list-header-toggle .btn-link:disabled,.table-list-header-toggle .btn-link.disabled{pointer-events:none;opacity:0.5}.table-list-header-toggle .select-menu{position:relative}.table-list-header-toggle .select-menu-item.selected{font-weight:600}.table-list-header-toggle .select-menu-button{padding-right:15px;padding-left:15px}.table-list-header-toggle .select-menu-button:hover,.table-list-header-toggle .select-menu-button.selected,.table-list-header-toggle .select-menu-button.selected:hover{color:#222}.table-list-header-toggle .select-menu-modal-holder{right:10px}.table-list-header-toggle .select-menu-modal-holder .select-menu-modal{margin-top:-1px}.table-list-header-next{margin-top:20px;margin-bottom:-1px}.table-list-header-next .table-list-header-select-all{padding-left:14px}.table-list-header-next .select-all-dropdown{padding-top:10px;padding-bottom:10px}.bulk-actions-header{position:-webkit-sticky;position:sticky;top:0;z-index:32;height:50px}.bulk-actions-header.is-stuck{background-color:#fff;border-color:transparent}.bulk-actions-header.is-stuck::after{position:fixed;top:0;right:0;left:0;z-index:-1;display:block;height:50px;content:"";border-bottom:1px solid rgba(27,31,35,0.1);box-shadow:0 1px 2px rgba(27,31,35,0.075)}.table-list-triage{display:none}.triage-mode .table-list-filters{display:none}.triage-mode .table-list-triage{display:block}.autocomplete-results{position:absolute;z-index:99;display:none;max-height:20em;overflow-y:auto;font-size:13px;list-style:none;background:#fff;border-radius:3px;box-shadow:0 0 5px rgba(27,31,35,0.3)}.autocomplete-results .no-results{display:none}.autocomplete-group{width:100%;overflow:hidden}.autocomplete-item{display:block;padding:5px;overflow:hidden;font-weight:600;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.autocomplete-item.selected,.autocomplete-item.navigation-focus{color:#fff;text-decoration:none;background-color:#0366d6}.autocomplete-item.selected .organization-member,.autocomplete-item.selected .ldap-group-dn,.autocomplete-item.navigation-focus .organization-member,.autocomplete-item.navigation-focus .ldap-group-dn{color:#f2f2f2}.autocomplete-item .secondary-label{font-weight:normal}.autocomplete-item .organization-member{float:right;padding-top:1px;color:#808080}.suggester-container{position:absolute;top:0;left:0;z-index:30;-webkit-transform:translateZ(0);transform:translateZ(0)}.suggester{position:relative;top:0;left:0;display:none;min-width:180px;margin-top:20px;background:#fff;border:1px solid #dfe2e5;border-radius:3px;box-shadow:0 0 5px rgba(27,31,35,0.1)}.suggester.active{display:block}.suggester ul{padding:0;margin:0;list-style:none}.suggester li{display:block;padding:5px 10px;font-weight:600;border-bottom:1px solid #dfe2e5}.suggester li small{font-weight:normal;color:#586069}.suggester li:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.suggester li:first-child a{border-top-left-radius:3px;border-top-right-radius:3px}.suggester li.navigation-focus{color:#fff;text-decoration:none;background:#0366d6}.suggester li.navigation-focus small{color:#fff}.boxed-group{position:relative;margin-bottom:30px;border-radius:3px}.boxed-group .counter{color:#fff;background-color:rgba(47,54,61,0.5)}.boxed-group.flush .boxed-group-inner{padding:0}.boxed-group.condensed .boxed-group-inner{padding:0;font-size:12px}.boxed-group>h3,.boxed-group .heading{display:block;padding:9px 10px 10px;margin:0;font-size:14px;line-height:17px;background-color:#f6f8fa;border:1px solid rgba(27,31,35,0.15);border-bottom:0;border-radius:3px 3px 0 0}.boxed-group>h3 a,.boxed-group .heading a{color:inherit}.boxed-group>h3 a.boxed-group-breadcrumb,.boxed-group .heading a.boxed-group-breadcrumb{font-weight:normal;color:#586069;text-decoration:none}.boxed-group>h3 .avatar,.boxed-group .heading .avatar{margin-top:-4px}.boxed-group .tabnav.heading{padding:0}.boxed-group .tabnav.heading .tabnav-tab.selected{border-top:0}.boxed-group .tabnav.heading li:first-child .selected{border-left-color:#fff;border-top-left-radius:3px}.boxed-group .tabnav-tab{border-top:0;border-radius:0}.boxed-group code.heading{font-size:12px}.boxed-group.dangerzone>h3{color:#fff;background-color:#d73a49;border:1px solid #9e1c23}.boxed-group.dangerzone .boxed-group-inner{border-top:0}.boxed-group.condensed>h3{padding:6px 6px 7px;font-size:12px}.boxed-group.condensed>h3 .octicon{padding:0 6px 0 2px}.one-half .boxed-group,.dashboard-sidebar .boxed-group{margin-bottom:20px}.boxed-group .bleed-flush{width:100%;padding:0 10px;margin-left:-10px}.boxed-group .compact{margin-top:10px;margin-bottom:10px}.boxed-group-inner{padding:10px;color:#586069;background:#fff;border:1px solid #d1d5da;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.boxed-group-inner .markdown-body{padding:20px 10px 10px;font-size:13px}.boxed-group-inner.markdown-body{padding-top:10px;padding-bottom:10px}.boxed-group-inner.inline-error{padding-top:40px;padding-bottom:40px;text-align:center}.boxed-group-inner.seamless{padding:0}.boxed-group-inner .tabnav{padding-right:10px;padding-left:10px;margin-right:-10px;margin-left:-10px}.boxed-group-inner .tabnav-tab.selected{border-top:1px solid #dfe2e5}.boxed-group-inner .help{padding:1em 10px 1em 35px;margin:1em -10px -10px;clear:both;color:#586069;border-top:1px solid #dfe2e5}.boxed-group-inner .help .octicon{margin-right:5px;margin-left:-25px}.boxed-group-inner .boxed-group-list+.help{margin-top:0}.boxed-action{float:right;margin-left:10px}.boxed-group-action{position:relative;z-index:2;float:right;margin:5px 10px 0 0}.boxed-group-action.flush{margin-top:0;margin-right:0}.field-with-errors{display:inline}.compact-options{margin:-6px 0 13px}.compact-options>li{display:inline-block;margin:0 12px 0 0;font-weight:600;list-style-type:none}.compact-options>li label{float:left}.compact-options>li .spinner{display:block;float:left;width:16px;height:16px;margin-left:5px}.boxed-group-list{margin:0;list-style:none}.boxed-group-list:first-child>li:first-child{border-top:0}.boxed-group-list>li{display:block;padding:5px 10px;margin-right:-10px;margin-left:-10px;line-height:23px;border-bottom:1px solid #e1e4e8}.boxed-group-list>li:first-child{border-top:1px solid #dfe2e5}.boxed-group-list>li:last-of-type{border-bottom:0}.boxed-group-list>li.selected{background:#dcffe4}.boxed-group-list>li.approved .btn-sm,.boxed-group-list>li.rejected .btn-sm{display:none}.boxed-group-list>li.rejected a{text-decoration:line-through}.boxed-group-list>li .avatar{margin-top:-2px;margin-right:4px}.boxed-group-list>li .octicon{width:24px;margin-right:4px}.boxed-group-list>li .btn-sm{float:right;margin:-1px 0 0 10px}.boxed-group-list>li .BtnGroup{float:right}.boxed-group-list>li .BtnGroup .btn-sm{float:left}.boxed-group.flush .boxed-group-list li{width:auto;padding-right:0;padding-left:0;margin-left:0}.boxed-group-list.standalone{margin-top:-1px}.boxed-group-list.standalone>li:first-child{border-top:0}.boxed-group-standalone{margin-top:-10px;margin-bottom:-10px}.boxed-group-standalone>li:last-child{border-radius:0 0 2px 2px}.boxed-group-table{width:100%;text-align:left}.boxed-group-table tr:last-child td{border-bottom:0}.boxed-group-table th{padding:9px;background-color:#fafbfc;border-bottom:1px solid #eaecef}.boxed-group-table td{padding:9px;vertical-align:top;border-bottom:1px solid #eaecef}.ajax-error-message{position:fixed;top:-200px;left:50%;z-index:9999;display:none;width:974px;margin:0 3px;margin-left:-487px;-webkit-transition:top 0.5s ease-in-out;transition:top 0.5s ease-in-out}.ajax-error-message.visible{top:0;display:block}.ajax-error-message>.octicon-alert{vertical-align:text-top}.boxed-group-success,.boxed-group-warning,.boxed-group-info{padding:10px 15px;margin:-10px -10px 10px;border-style:solid;border-width:1px 0}.boxed-group-success .btn-sm,.boxed-group-warning .btn-sm,.boxed-group-info .btn-sm{margin:-5px 0}.boxed-group-success:first-child,.boxed-group-warning:first-child,.boxed-group-info:first-child{border-top:0}.boxed-group-success{color:#165c26;background-color:#dcffe4;border-color:rgba(27,31,35,0.15)}.boxed-group-warning{color:rgba(27,31,35,0.85);background-color:#fffbdd;border-color:rgba(27,31,35,0.15)}.boxed-group-info{color:inherit;border-color:inherit}.branch-name{display:inline-block;padding:2px 6px;font:12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;color:rgba(27,31,35,0.6);background-color:#eaf5ff;border-radius:3px}.branch-name .octicon{margin:1px -2px 0 0;color:#a8bbd0}a.branch-name{color:#0366d6}.breadcrumb{margin-bottom:10px;font-size:18px;color:#586069}.breadcrumb .separator::before,.breadcrumb .separator::after{content:" "}.breadcrumb strong.final-path{color:#24292e}.breadcrumb .zeroclipboard-button{display:inline-block;margin-left:5px}.breadcrumb .repo-root{font-weight:600}.breadcrumb .octicon{vertical-align:-2px}.editor-license-template,.editor-code-of-conduct-template,.editor-gitignore-template{position:relative;top:3px;display:none;float:right;font-size:14px}.editor-license-template.is-visible,.editor-code-of-conduct-template.is-visible,.editor-gitignore-template.is-visible{display:block}.editor-license-template .select-menu-git-ignore,.editor-license-template .select-menu-license-picker,.editor-code-of-conduct-template .select-menu-git-ignore,.editor-code-of-conduct-template .select-menu-license-picker,.editor-gitignore-template .select-menu-git-ignore,.editor-gitignore-template .select-menu-license-picker{right:0}.starring-container .unstarred,.starring-container.on .starred{display:block}.starring-container.on .unstarred,.starring-container .starred{display:none}.starring-container.loading{opacity:0.5}.user-following-container .follow,.user-following-container.on .unfollow{display:inline-block}.user-following-container.on .follow,.user-following-container .unfollow{display:none}.user-following-container.loading{opacity:0.5}.members .user-following-container{float:right}.close-button{padding:0;background:transparent;border:0;outline:none}.btn-invisible{color:#0366d6;background-color:#fff;background-image:none;border:0}.btn-invisible:hover,.btn-invisible:active,.btn-invisible:focus,.btn-invisible.selected,.btn-invisible.zeroclipboard-is-hover,.btn-invisible.zeroclipboard-is-active{color:#0366d6;background:none;outline:none;box-shadow:none}.btn-octicon{display:inline-block;padding:5px;margin-left:5px;line-height:1;color:#586069;vertical-align:middle;background:transparent;border:0}.btn-octicon:hover{color:#0366d6}.btn-octicon.disabled{color:#959da5;cursor:default}.btn-octicon.disabled:hover{color:#959da5}.btn-octicon-danger:hover{color:#cb2431}.commit-ref{position:relative;display:inline-block;padding:0 5px;font:0.75em/2 "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;color:#274466;white-space:nowrap;background-color:#eff7ff;border-radius:3px}.commit-ref .user{color:#044289}a.commit-ref:hover{text-decoration:none;text-shadow:-1px -1px 0 rgba(27,31,35,0.2);background-image:-webkit-linear-gradient(#74a4d4, #2a5177);background-image:linear-gradient(#74a4d4, #2a5177);border-color:#2a5177}.capped-cards{list-style:none}.capped-cards .capped-card{float:left;width:450px}.capped-card{margin:10px;list-style:none;border:1px solid #dfe2e5;border-radius:2px}.capped-card::before{display:table;content:""}.capped-card::after{display:table;clear:both;content:""}.capped-card:nth-child(odd){margin-left:0}.capped-card:nth-child(even){margin-right:0}.capped-card h3{padding:10px;margin:0;line-height:100%;border-bottom:1px solid #eaecef}.capped-card>p{display:block;padding:0 10px 10px;margin:0;font-size:15px;line-height:100%;color:#586069;border-bottom:1px solid #eaecef}.capped-card-content{display:block;background:#f6f8fa}.capped-card-content::before{display:table;content:""}.capped-card-content::after{display:table;clear:both;content:""}.details-collapse .collapse{position:relative;display:none;height:0;overflow:hidden;-webkit-transition:height 0.35s ease-in-out;transition:height 0.35s ease-in-out}.details-collapse.open .collapse{display:block;height:auto;overflow:visible}.comment .email-format{line-height:1.5}.previewable-edit .previewable-comment-form{display:none}.previewable-edit .previewable-comment-form::before{display:table;content:""}.previewable-edit .previewable-comment-form::after{display:table;clear:both;content:""}.previewable-edit .previewable-comment-form .tabnav-tabs{display:inline-block}.previewable-edit .previewable-comment-form .form-actions{float:right;margin-right:10px;margin-bottom:10px}.previewable-edit.is-comment-editing .timeline-comment-header{display:none}.is-comment-editing .previewable-comment-form{display:block}.is-comment-editing .timeline-comment-actions,.is-comment-editing .edit-comment-hide{display:none}.is-comment-loading .previewable-comment-form{opacity:0.5}.is-comment-stale .comment-form-stale{display:block}.comment-body{width:100%;padding:15px;overflow:visible;font-size:14px}.comment-body .highlight{overflow:visible !important;background-color:transparent}.comment-form-textarea{width:100%;max-width:100%;height:100px;min-height:100px;margin:0;font-size:14px;line-height:1.6}.comment-form-textarea.dragover{border:solid 1px #0366d6}.discussion-topic-header{position:relative;padding:10px;word-wrap:break-word}.comment-form-error,.comment-form-stale{display:none;padding:15px 10px;margin:10px;color:#900;background-color:#fcdede;border:1px solid #d2b2b2;border-radius:3px}.comment-form-error.comment-form-bottom,.comment-form-stale.comment-form-bottom{margin-bottom:10px}.email-format{line-height:1.5em !important}.email-format div{white-space:pre-wrap}.email-format .email-hidden-reply{display:none;white-space:pre-wrap}.email-format .email-hidden-reply.expanded{display:block}.email-format .email-quoted-reply,.email-format .email-signature-reply{padding:0 15px;margin:15px 0;color:#586069;border-left:4px solid #dfe2e5}.email-format .email-hidden-toggle a{display:inline-block;height:12px;padding:0 9px;font-size:12px;font-weight:600;line-height:6px;color:#444d56;text-decoration:none;vertical-align:middle;background:#dfe2e5;border-radius:1px}.email-format .email-hidden-toggle a:hover{background-color:#c6cbd1}.email-format .email-hidden-toggle a:active{color:#fff;background-color:#0366d6}.comment-email-format div{white-space:normal}.comment-email-format .email-hidden-reply{display:none;white-space:normal}.comment-email-format .email-hidden-reply.expanded{display:block}.comment-email-format blockquote,.comment-email-format p{margin:0}.blankslate.conversation-limited{padding:20px 0 10px;margin:15px}.locked-conversation .write-tab,.locked-conversation .preview-tab{color:#c6cbd1}.commit-form{position:relative;padding:15px;border:1px solid #dfe2e5;border-radius:3px}.commit-form::after,.commit-form::before{position:absolute;top:11px;right:100%;left:-16px;display:block;width:0;height:0;pointer-events:none;content:" ";border-color:transparent;border-style:solid solid outset}.commit-form::after{margin-top:1px;margin-left:2px;border-width:7px;border-right-color:#fff}.commit-form::before{border-width:8px;border-right-color:#dfe2e5}.commit-form .input-block{margin-top:10px;margin-bottom:10px}.commit-form-avatar{float:left;margin-left:-64px;border-radius:3px}.commit-form-actions::before{display:table;content:""}.commit-form-actions::after{display:table;clear:both;content:""}.commit-form-actions .BtnGroup{margin-right:5px}.commit-form-actions .check-for-fork{line-height:34px}.merge-commit-message{resize:vertical}.commit-sha{padding:0.2em 0.4em;font-size:90%;font-weight:normal;background-color:#f6f8fa;border:1px solid #eaecef;border-radius:0.2em}.commit-partial-notice{margin-top:20px;margin-bottom:20px}.commit-paginate-container{float:right;margin:-5px 0 0;text-align:inherit}.commit .commit-title,.commit .commit-title a{color:#444d56}.commit .commit-title.blank,.commit .commit-title.blank a{color:rgba(27,31,35,0.3)}.commit .commit-title .issue-link{font-weight:600;color:#0366d6}.commit .sha-block,.commit .sha{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:12px}.commit.open .commit-desc{display:block}.commit-link{font-weight:normal;color:#0366d6}.commit-email-flash{display:inline}.commit-desc{display:none}.commit-desc pre{max-width:700px;margin-top:10px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:11px;line-height:1.45;color:#444d56;white-space:pre-wrap}.commit-desc+.commit-branches{padding-top:8px;margin-top:2px;border-top:solid 1px rgba(27,31,35,0.15)}.commit-author-section{color:#24292e}.commit-author-section span.user-mention{font-weight:normal}.commit-tease{position:relative;padding:10px;margin-bottom:-1px;font-size:13px;line-height:20px;color:#586069;background-color:#f1f8ff;border:1px solid #c8e1ff;border-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0}.commit-tease .muted-link{color:inherit}.commit-tease .loader{float:left;margin:2px 5px 0 2px}.commit-tease .message{color:inherit}.commit-tease .avatar{margin-top:-1px}.commit-tease.open .commit-desc{display:block}.branch-infobar+.commit-tease{border-top-left-radius:0;border-top-right-radius:0}.commit-tease-comments{margin-right:15px}.commit-tease-sha{display:inline-block;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:90%;color:#444d56}.commit-tease-contributors{padding:5px 10px;margin:10px -10px -10px;background-color:#fff;border-top:1px solid #bedfff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.commit-tease-contributors::before{display:table;content:""}.commit-tease-contributors::after{display:table;clear:both;content:""}.commit-tease-contributors .contributors-toggle{float:left;margin-right:10px}.commit-tease-contributors .avatar-link{float:left;margin-right:3px}.commit-tease-contributors .loader-loading{margin:2px 5px 2px 0}.commit-tease-contributors.error .loader-loading{display:none}.commit-tease-contributors.error .loader-error{display:block}.commits-listing{position:relative;padding-bottom:20px;margin-bottom:15px}.commits-listing::before{position:absolute;top:0;bottom:0;left:14px;z-index:-1;display:block;width:2px;content:"";background-color:#eff1f3}.commits-listing .discussion-item-icon{margin-right:5px;margin-left:-1px}.commits-listing .timeline-commits{padding-left:8px;margin-bottom:20px}.commits-listing .timeline-commits:last-child{margin-bottom:0}.commits-listing-padded{padding-left:39px}.commit-group{margin-top:10px;list-style-type:none}.commit-group-title{margin-top:15px;margin-left:-31px;color:#586069}.commit-group-title .octicon-git-commit{margin-right:17px;color:#c6cbd1;background:#fff}.commits-list-item.navigation-focus{background:#f6fbff}.commits-list-item .commit-title{margin:0;font-size:15px;font-weight:600;color:#24292e}.commits-list-item .commit-meta{margin-top:1px;font-weight:normal;color:#586069}.commits-list-item .status .octicon{height:14px;line-height:14px}.commits-list-item .commit-author{color:#586069}.commits-list-item .octicon-arrow-right{margin:0 3px}.commits-list-item .btn-outline{margin-top:2px}.commits-list-item .commit-desc pre{margin-top:5px;margin-bottom:10px;color:#586069}.commits-list-item .commit-desc pre a{word-break:break-word}.commits-list-item em{padding:3px;font-style:normal;font-weight:600;background-color:rgba(255,247,140,0.5);border-radius:3px}.commit-avatar-cell{width:47px}.commit-avatar-cell.table-list-cell{padding-right:0}.commit-indicator{margin-left:5px}.commit-links-cell{width:335px;text-align:right}.commit-links-group{margin-right:5px}.commits-list-item+.commits-list-item{border-top:1px solid #e1e4e8}.timeline-commits{width:100%;margin-top:5px;border-collapse:separate}.timeline-commits+.timeline-commits{margin-top:15px}.timeline-commits td{padding-top:4px;padding-right:8px;padding-bottom:4px;font-size:12px;line-height:16px;vertical-align:top;background-color:transparent}.discussion-item .timeline-commits .commit-author{display:none}.timeline-commits .commit-gravatar{width:16px;padding-left:10px}.timeline-commits .commit-author{width:200px;padding-right:20px;white-space:nowrap}.timeline-commits .author{font-weight:600;color:#444d56}.timeline-commits .commit-message{max-width:550px;min-height:0}.timeline-commits .commit-message>code a{color:#444d56}.timeline-commits .commit-message>code a:hover{color:#0366d6}.timeline-commits .commit-desc pre{overflow:visible;color:#586069}.timeline-commits .hidden-text-expander{margin-top:3px;margin-left:0;vertical-align:top}.timeline-commits .hidden-text-expander .ellipsis-expander{height:13px;background-color:#eaecef}.timeline-commits .hidden-text-expander .ellipsis-expander:hover{color:#fff;background-color:#0366d6}.timeline-commits .commit-sig-status{width:60px;padding-right:4px;text-align:right}.timeline-commits .commit-ci-status{width:16px;padding-right:4px}.timeline-commits .commit-ci-status .octicon{margin-right:1px;margin-left:1px;vertical-align:bottom}.timeline-commits .commit-ci-status .octicon-primitive-dot{width:9px;margin-right:3px;margin-left:2px}.timeline-commits .commit-meta{width:50px;text-align:right}.commit-icon{display:table-cell;width:16px;color:#d1d5da}.commit-icon .octicon{background-color:#fff}.commit-id{color:#959da5}.commit-id:hover{color:#0366d6}.full-commit{padding:8px 8px 0;margin:10px 0;font-size:14px;background:#eaf5ff;border:1px solid rgba(27,31,35,0.15);border-radius:3px}.full-commit:first-child{margin-top:0}.full-commit .btn-outline,.full-commit .btn-outline:disabled{background-color:transparent;border-color:rgba(27,31,35,0.15)}.full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.full-commit p.commit-title{margin:0 0 8px;font-size:18px;font-weight:600;color:#05264c}.full-commit .branches-list{display:inline;margin-right:10px;margin-left:2px;vertical-align:middle;list-style:none}.full-commit .branches-list li{display:inline-block;padding-left:3px;font-weight:600;color:#444d56}.full-commit .branches-list li::before{padding-right:6px;font-weight:normal;content:"+"}.full-commit .branches-list li:first-child{padding-left:0}.full-commit .branches-list li:first-child::before{padding-right:0;content:""}.full-commit .branches-list li.loading{font-weight:normal;color:#6a737d}.full-commit .branches-list li.pull-request{font-weight:normal;color:#6a737d}.full-commit .branches-list li.pull-request::before{margin-left:-8px;content:""}.full-commit .branches-list li.pull-request-error{margin-bottom:-1px}.full-commit .branches-list li a{color:inherit}.full-commit .commit-meta{padding:8px;margin-right:-8px;margin-left:-8px;background:#fff;border-top:1px solid rgba(27,31,35,0.15);border-bottom-right-radius:3px;border-bottom-left-radius:3px}.full-commit .sha-block{margin-left:15px;font-size:12px;line-height:24px;color:#586069}.full-commit .sha-block>.sha{color:#444d56}.full-commit .sha-block>a{color:#444d56;text-decoration:none;border-bottom:1px dotted #c6cbd1}.full-commit .sha-block>a:hover{border-bottom:1px solid #444d56}.full-commit .commit-desc{display:block;margin:-5px 0 10px}.full-commit .commit-desc pre{max-width:100%;overflow:visible;font-size:13px;word-wrap:break-word}.branches-tag-list{display:inline;margin-right:10px;margin-left:2px;vertical-align:middle;list-style:none}.branches-tag-list .more-commit-details,.branches-tag-list.open .hidden-text-expander{display:none}.branches-tag-list.open .more-commit-details{display:inline-block}.branches-tag-list li{display:inline-block;padding-left:3px}.branches-tag-list li:first-child{padding-left:0;font-weight:600;color:#444d56}.branches-tag-list li.loading{font-weight:normal;color:#6a737d}.branches-tag-list li.abbrev-tags{cursor:pointer}.branches-tag-list li a,.branches-tag-list li .ellipsis-expander{color:inherit}.branches-tag-list li .ellipsis-expander{background-color:#d3e2f4}.branches-tag-list li .ellipsis-expander:hover{background-color:#d6e2f1}.commit-branches{min-height:18px;margin-top:-6px;margin-bottom:8px;font-size:12px;color:#6a737d;vertical-align:middle}.commit-branches .octicon{vertical-align:middle}.commit-loader .loader-error{display:none;margin:0;font-size:12px;font-weight:600;color:#cb2431}.commit-loader.error .loader-loading{display:none}.commit-loader.error .loader-error{display:block}.historical-banner{padding:15px 20px 15px 130px;margin-bottom:20px;overflow:hidden;color:#24292e;background:#fff;border:1px solid #e1e4e8;border-radius:5px}.historical-banner h2{margin:0 0 5px}.historical-banner p{margin:0}.historical-banner .illustration{position:absolute;top:12px;left:20px;color:rgba(27,31,35,0.1)}.roses-divider{margin-bottom:20px;text-align:center}.commit-comments-heading{max-width:780px;margin-bottom:15px}.commit-comment-count{display:inline-block;margin-right:15px;margin-bottom:0}.commit-build-statuses{position:relative;display:inline-block;text-align:left}.commit-build-statuses .octicon-primitive-dot{width:10px}.commit-build-statuses.active .dropdown-menu-content{display:block}.commit-build-statuses.active .tooltipped::before,.commit-build-statuses.active .tooltipped::after{display:none}.commit-build-statuses .dropdown-menu{min-width:400px;max-width:500px;padding-top:0;padding-bottom:0}.commit-build-statuses .dropdown-menu .merge-status-list{max-height:170px;border-bottom:0}.commit-build-statuses .dropdown-menu-w,.commit-build-statuses .dropdown-menu-e{top:-11px}.commit-build-statuses .merge-status-item:last-child{border-radius:0 0 2px 2px}.dropdown-signed-commit{display:inline-block}.dropdown-signed-commit .dropdown-menu{width:260px;padding-top:0;padding-bottom:0;margin-top:7px;font-size:13px;line-height:1.4;color:#24292e;text-align:left}.dropdown-signed-commit .dropdown-menu::after{border-bottom-color:#f6f8fa}.dropdown-signed-commit .dropdown-menu-w{top:-28px;margin-top:0}.dropdown-signed-commit .dropdown-menu-w::after{border-bottom-color:transparent;border-left-color:#f6f8fa}.signed-commit-header{padding:12px;line-height:1.3;white-space:normal;border-collapse:separate;background-color:#f6f8fa;border-bottom:solid 1px #e1e4e8;border-top-left-radius:3px;border-top-right-radius:3px}.signed-commit-header .octicon-verified{color:#28a745}.signed-commit-header .octicon-unverified{color:#959da5}.signed-commit-signer{padding-right:12px;padding-left:12px;margin-top:12px;border-collapse:separate}.signed-commit-footer{padding:12px;font-size:12px;line-height:1.5}.signed-commit-cert-info{margin-bottom:6px}.signed-commit-cert-info td{vertical-align:top}.signed-commit-cert-info td:first-child{width:44px;padding-right:12px}.signed-commit-badge{display:inline-block;padding:1px 4px;font-size:10px;color:#586069;vertical-align:middle;background:none;border:solid 1px #e1e4e8;border-radius:2px}.signed-commit-badge:hover{text-decoration:none;border-color:#c6cbd1}.signed-commit-badge:focus{outline:none}.signed-commit-badge.verified{color:#22863a}.signed-commit-badge.verified:hover{border-color:#28a745}.signed-commit-badge-small{margin-top:-2px;margin-right:3px}.signed-commit-b
Download .txt
gitextract_q9w25szj/

├── .github/
│   └── workflows/
│       ├── build.yml
│       └── release.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── bin/
│   └── hads
├── hads.js
├── lib/
│   ├── helpers.js
│   ├── indexer.js
│   ├── matcher.js
│   └── renderer.js
├── package.json
├── public/
│   ├── css/
│   │   ├── github.css
│   │   └── style.css
│   └── js/
│       └── client.js
├── test/
│   ├── .ignored-folder/
│   │   └── ignored-file.md
│   ├── 001-first folder/
│   │   ├── 3 things.md
│   │   ├── index.md
│   │   └── some doc.md
│   ├── 002-cheatsheet.markdown
│   ├── 003_extras.mdown
│   ├── code.js
│   ├── custom.css
│   ├── example-category/
│   │   ├── a-sub-category/
│   │   │   └── yet-another-doc.md
│   │   ├── another-doc.md
│   │   └── some-doc.md
│   ├── folder with spaces/
│   │   └── dummy.md
│   ├── ignore.txt
│   ├── nom_accentué.md
│   └── readme.md
└── views/
    ├── add.pug
    ├── edit.pug
    ├── file.pug
    ├── footer.pug
    ├── header.pug
    └── layout.pug
Download .txt
SYMBOL INDEX (60 symbols across 7 files)

FILE: hads.js
  constant INDEXES (line 57) | const INDEXES = [
  constant ICONS (line 62) | const ICONS = {
  constant STYLESHEET (line 68) | const STYLESHEET = 'custom.css';
  constant PATHS (line 69) | const PATHS = {
  method code (line 74) | get code() {
  method customStylesheet (line 78) | get customStylesheet() {
  method export (line 82) | get export() {
  method hads (line 86) | get hads() {
  method images (line 90) | get images() {
  method root (line 94) | get root() {
  constant SCRIPTS (line 100) | const SCRIPTS = [
  constant STYLESHEETS (line 106) | const STYLESHEETS = [
  function renderPage (line 218) | function renderPage() {
  function tryProcessFile (line 273) | function tryProcessFile() {

FILE: lib/helpers.js
  class Helpers (line 6) | class Helpers {
    method extractRoute (line 7) | static extractRoute(requestPath) {
    method sanitizePath (line 11) | static sanitizePath(path) {
    method hasQueryOption (line 15) | static hasQueryOption(query, option) {
    method processPackages (line 19) | static processPackages(callback) {
    method ensureMarkdownExtension (line 35) | static ensureMarkdownExtension(file) {
    method readCode (line 47) | static async readCode() {

FILE: lib/indexer.js
  constant EXCLUSIONS (line 12) | const EXCLUSIONS = ['node_modules'];
  class Indexer (line 14) | class Indexer {
    method constructor (line 15) | constructor(basePath) {
    method indexFiles (line 25) | indexFiles() {
    method updateIndexForFile (line 38) | updateIndexForFile(file) {
    method getContent (line 54) | getContent(file) {
    method getFiles (line 58) | getFiles() {
    method search (line 62) | search(string) {

FILE: lib/matcher.js
  constant MARKDOWN_EXTENSIONS (line 6) | const MARKDOWN_EXTENSIONS = ['md', 'mkdn', 'mdown', 'markdown'];
  constant IMAGES_EXTENSIONS (line 7) | const IMAGES_EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'];
  constant CODE_EXTENSIONS (line 8) | const CODE_EXTENSIONS = [
  class Matcher (line 25) | class Matcher {
    method isMarkdown (line 26) | static isMarkdown(file) {
    method isImage (line 30) | static isImage(file) {
    method getImages (line 34) | static getImages() {
    method isCode (line 38) | static isCode(file) {
    method getCode (line 42) | static getCode() {
    method hasExtension (line 46) | static hasExtension(file, extensions) {

FILE: lib/renderer.js
  constant SEARCH_EXTRACT_LENGTH (line 11) | const SEARCH_EXTRACT_LENGTH = 400;
  constant SEARCH_RESULTS_MAX (line 12) | const SEARCH_RESULTS_MAX = 10;
  constant ROOT_FILES_INDEX (line 14) | const ROOT_FILES_INDEX = {
  constant NUMBER_SEPARATORS (line 20) | const NUMBER_SEPARATORS = /[-_]/g;
  class Renderer (line 22) | class Renderer {
    method constructor (line 23) | constructor(indexer, options) {
    method renderRaw (line 29) | renderRaw(file) {
    method renderFile (line 33) | renderFile(file) {
    method renderCode (line 37) | renderCode(file) {
    method renderSearch (line 42) | renderSearch(search) {
    method renderIndex (line 71) | renderIndex() {
    method renderTableOfContents (line 99) | renderTableOfContents(content) {
    method renderMarkdown (line 114) | renderMarkdown(content) {
    method removeLinks (line 162) | static removeLinks(text) {
    method formatHref (line 167) | static formatHref(href, isExport) {
    method renderIndexLevel (line 181) | static renderIndexLevel(index, level) {
    method encodeFileLink (line 255) | static encodeFileLink(link) {
    method trimNumberPrefix (line 266) | static trimNumberPrefix(key) {
    method getNumberPrefix (line 284) | static getNumberPrefix(key) {

FILE: public/js/client.js
  function getUploadMessage (line 29) | function getUploadMessage(file) {

FILE: test/code.js
  function hello (line 1) | function hello(name) {
Condensed preview — 37 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (598K chars).
[
  {
    "path": ".github/workflows/build.yml",
    "chars": 873,
    "preview": "name: build\non:\n  push:\n    branches:\n      - main\n  pull_request:\n    branches:\n      - main\n\njobs:\n  build:\n    strate"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 670,
    "preview": "name: release\non:\n  workflow_dispatch:\n  repository_dispatch:\n    types: [release]\n\njobs:\n  release:\n    runs-on: ubuntu"
  },
  {
    "path": ".gitignore",
    "chars": 126,
    "preview": "node_modules/\ntest/public/\nnpm-debug.log\n.idea/*\n!.idea/runConfigurations/\n!.idea/codeStyleSettings.xml\n.DS_Store\nexport"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 3941,
    "preview": "## [3.0.3](https://github.com/sinedied/hads/compare/3.0.2...3.0.3) (2022-05-02)\n\n\n### Bug Fixes\n\n* display accented char"
  },
  {
    "path": "LICENSE",
    "chars": 1085,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016-2019 Yohan Lasorsa\n\nPermission is hereby granted, free of charge, to any perso"
  },
  {
    "path": "README.md",
    "chars": 3917,
    "preview": "# Hey it's Another Documentation Server! (hads)\n\n[![NPM version](https://img.shields.io/npm/v/hads.svg)](https://www.npm"
  },
  {
    "path": "bin/hads",
    "chars": 41,
    "preview": "#!/usr/bin/env node\n\nrequire('../hads');\n"
  },
  {
    "path": "hads.js",
    "chars": 12452,
    "preview": "'use strict';\n\nconst fs = require('fs-extra');\nconst path = require('path');\nconst express = require('express');\nconst m"
  },
  {
    "path": "lib/helpers.js",
    "chars": 1227,
    "preview": "'use strict';\n\nconst path = require('path');\nconst Matcher = require('./matcher');\n\nclass Helpers {\n  static extractRout"
  },
  {
    "path": "lib/indexer.js",
    "chars": 1769,
    "preview": "'use strict';\n\nconst {\n  promisify\n} = require('util');\nconst path = require('path');\nconst fs = require('fs-extra');\nco"
  },
  {
    "path": "lib/matcher.js",
    "chars": 969,
    "preview": "'use strict';\n\nconst path = require('path');\nconst _ = require('lodash');\n\nconst MARKDOWN_EXTENSIONS = ['md', 'mkdn', 'm"
  },
  {
    "path": "lib/renderer.js",
    "chars": 7963,
    "preview": "'use strict';\n\nconst path = require('path');\nconst fs = require('fs-extra');\nconst normalizePath = require('normalize-pa"
  },
  {
    "path": "package.json",
    "chars": 2347,
    "preview": "{\n  \"name\": \"hads\",\n  \"version\": \"3.0.3\",\n  \"description\": \"Fast web server allowing to browse, search and edit project "
  },
  {
    "path": "public/css/github.css",
    "chars": 532635,
    "preview": "/*!\n * GitHub Light v0.3.0\n * Copyright (c) 2012 - 2016 GitHub, Inc.\n * Licensed under MIT (https://github.com/primer/gi"
  },
  {
    "path": "public/css/style.css",
    "chars": 1629,
    "preview": "body {\n  min-width: 0;\n}\n\n.container {\n  width: auto;\n  max-width: 980px;\n}\n\n.boxed-group {\n  margin-top: 20px;\n}\n\n.head"
  },
  {
    "path": "public/js/client.js",
    "chars": 2639,
    "preview": "window.hads = (function () {\n  'use strict';\n\n  var editor = null;\n  var byId = document.getElementById.bind(document);\n"
  },
  {
    "path": "test/.ignored-folder/ignored-file.md",
    "chars": 29,
    "preview": "# This file should be ignored"
  },
  {
    "path": "test/001-first folder/3 things.md",
    "chars": 14,
    "preview": "# 3 Things\nbla"
  },
  {
    "path": "test/001-first folder/index.md",
    "chars": 48,
    "preview": "# Index file for first folder\n\nContent goes here"
  },
  {
    "path": "test/001-first folder/some doc.md",
    "chars": 18,
    "preview": "# Some Doc\n\nHello\n"
  },
  {
    "path": "test/002-cheatsheet.markdown",
    "chars": 11317,
    "preview": "Downloaded from https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet\n\n---\n\nThis is intended as a quick refer"
  },
  {
    "path": "test/003_extras.mdown",
    "chars": 3335,
    "preview": "# Test cases for extra features\n\n## Table of contents\n\nA TOC should be inserted below:\n[[toc]]\n\nBut not here: `[[toc]]`\n"
  },
  {
    "path": "test/code.js",
    "chars": 80,
    "preview": "function hello(name) {\n  console.log('Hello ' + name + '!');\n}\n\nhello('world');\n"
  },
  {
    "path": "test/custom.css",
    "chars": 38,
    "preview": "body {\n  background-color: #B0BBBE;\n}\n"
  },
  {
    "path": "test/example-category/a-sub-category/yet-another-doc.md",
    "chars": 61,
    "preview": "# Yet another project doc\n\nEven more interesting text here..."
  },
  {
    "path": "test/example-category/another-doc.md",
    "chars": 40,
    "preview": "# Another project doc\n\nMore text here..."
  },
  {
    "path": "test/example-category/some-doc.md",
    "chars": 34,
    "preview": "# A project doc\n\nSome text here..."
  },
  {
    "path": "test/folder with spaces/dummy.md",
    "chars": 15,
    "preview": "# Dummy\nContent"
  },
  {
    "path": "test/ignore.txt",
    "chars": 18,
    "preview": "file to be ignored"
  },
  {
    "path": "test/nom_accentué.md",
    "chars": 60,
    "preview": "# Test en Français\n\nPour le support des caractères accentués"
  },
  {
    "path": "test/readme.md",
    "chars": 249,
    "preview": "# Project documentation test\n\nThis is the main page of the doc.\n\nYou can try accessing one of these test links:\n\n- [Mark"
  },
  {
    "path": "views/add.pug",
    "chars": 426,
    "preview": "#add-modal.hidden\n  .boxed-group\n    h3 Add new file\n      button.octicon.octicon-x.float-right.close-button(onclick='ha"
  },
  {
    "path": "views/edit.pug",
    "chars": 697,
    "preview": "extends layout\n\nblock content\n  .container\n    .file\n      .file-header\n        if icon === 'octicon-file'\n          .fi"
  },
  {
    "path": "views/file.pug",
    "chars": 628,
    "preview": "extends layout\n\nblock content\n  .container\n    .file\n      .file-header\n        if icon === 'octicon-file' && !readonly\n"
  },
  {
    "path": "views/footer.pug",
    "chars": 178,
    "preview": ".container\n  .site-footer\n    ul.site-footer-links\n      li\n        span.octicon.octicon-rocket\n        |  Powered by&#3"
  },
  {
    "path": "views/header.pug",
    "chars": 595,
    "preview": "if !static\n  .header\n    .container.clearfix\n      a.header-logo-invertocat(href='/')\n        span.mega-octicon.octicon-"
  },
  {
    "path": "views/layout.pug",
    "chars": 565,
    "preview": "doctype html\nhtml\n  head\n    meta(charset='utf-8')\n    title #{title}\n    meta(name='viewport', content='width=device-wi"
  }
]

About this extraction

This page contains the full source code of the sinedied/hads GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 37 files (578.8 KB), approximately 167.4k tokens, and a symbol index with 60 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!