# Aspire CTF 2021: Linux Skills

An impressive writeup on the challenges in the `linux skills` category has already been done by my good friend Trevor Saudi!! For this writeup though, i won't do the last three challenges.
<a href="https://trevorsaudi.medium.com/aspire-ctf-2021-linux-skills-networking-1ff73f0685cb">ASPIRE CTF 2021 — Linux Skills & Networking</a>
### **Eighteenth Challenge: Needle in a haystack**
```
Finding exactly what you're looking for in a lot of files is a must have skill. Find the flag in the attached zip file.
```
You can access the file here: <a href="https://ciphercode.dev/files/c86583cfdb392d61b04ed308a6cc7fef/haystack.zip?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6Nn0.YIVluQ.GKuJoVRu1Ae7GGlYaIPUtcsGMcw">Challenge</a>
You're given a zipfile. Unzipping it, you get a folder called haystack with a few files.
```bash!
➜ haystack ls
01_lecture.pdf 03_lecture.pdf aleph.txt Manifesto.pdf pocorgtfo00.pdf
02_lecture.pdf about.png levi2.gif phineas.txt
```
The easiest way to find the flag is to use `rgrep` to recursively search for a specific flag format.
```bash!
➜ haystack rgrep "{.*}"
phineas.txt:intercepting proxy. {seek_and_ye_shall_find}
grep: pocorgtfo00.pdf: binary file matches
grep: 02_lecture.pdf: binary file matches
grep: levi2.gif: binary file matches
grep: about.png: binary file matches
grep: 03_lecture.pdf: binary file matches
grep: 01_lecture.pdf: binary file matches
```
The flag was in phineas.txt.
```bash!
➜ haystack echo "Aspire"`cat phineas.txt| grep -oE "{.*}" | cut -d " " -f 3`""
Aspire{seek_and_ye_shall_find}
```
There's another challenge kinda similar to this one that a friend shared with me some time.
### **Extra 1: Russian Doll**
You can access the file here: <a href="https://cdn.discordapp.com/attachments/828719696572055603/835462552115740673/archive.zip">Challenge</a>
For this challenge, when you unzip the file, you get 661 directories and 3 files.
```bash!
➜ russian_doll tree | tail -n 1
661 directories, 4 files
```
How'd you get to the last file? Easy, grep aaaall the way.
```bash!
➜ you cat $(grep -RiloE "{.*}")
Hero{if_yOu_gOt_HEre_By_clIcKInG_mANnUaLly_YoU_sHOuLd_REalLy_SeE_SoMeOne}
```
Got the flag. You could also use `find`.
```bash!
➜ you find . -exec strings -n 8 {} \; 2>/dev/null | grep -oE "{.*?}"
Hero{if_yOu_gOt_HEre_By_clIcKInG_mANnUaLly_YoU_sHOuLd_REalLy_SeE_SoMeOne}
```
Awesome.
### **Nineteenth Challenge: Yarn**
```
Cool pic but where's the flag?
```
You can access the file here: <a href="https://ciphercode.dev/files/a8ebdd9b9c90df6ce80df91f0855b72e/bean.jpeg?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6N30.YIVtPA.ctFTWTSETpLfOMDg0OE52dHgkeE">Challenge</a>
You're given a jpg file.
Running binwalk and exiftool doesn't give you much although, atleast i know this is a challenge where i don't have to use a tool like `stegseek`. And i know this because such challenges have this kind of output:
```bash!
➜ cover_image binwalk scorpion.jpg
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
```
For this one, it looks like this:
```bash!
➜ yarn binwalk bean.jpeg
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
30 0x1E TIFF image data, big-endian, offset of first image directory: 8
9008 0x2330 Copyright string: "Copyright (c) 1998 Hewlett-Packard Company"
```
I then used binwalk to extract contents from that file. I like using these switches to get the better output:
```bash!
Extraction Options:
-e, --extract Automatically extract known file types
-D, --dd=<type:ext:cmd> Extract <type> signatures, give the files an extension of <ext>, and execute <cmd>
-M, --matryoshka Recursively scan extracted files
```
Got three files.
```bash!
➜ yarn binwalk -q -MDe bean.jpeg
➜ yarn ls
bean.jpeg _bean.jpeg.extracted
➜ yarn cd _bean.jpeg.extracted
➜ _bean.jpeg.extracted ls
0 1E 2330
```
The last file is empty. I then did a find command to check the strings of the files and look for a flag.
```bash!
➜ _bean.jpeg.extracted find . -exec strings {} \; 2>/dev/null | grep -oE "Aspire{.*}"
Aspire{BE4y-Cjjl-30gz-Xbsm}
```
Done.
### **Twentienth Challenge: Commitments**
```
Be careful what you tell the world.
```
You can access the file here: <a href ="https://ciphercode.dev/files/948461ddb82e401cf103e2ec6b5e2762/Commitments.zip?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6OH0.YIVyEw.KqUKIPEHryXx4z91NJIl1bMO0-g">Challenge</a>
You're given a zipfile and when you move into that directory, you'll notice it's a git repo. When i see such challenges, normally i'll cheat a little bit and run rgrep to look for low hanging fruits.
```bash!
➜ Commitments git:(master) rgrep "Aspire{.*}"
.git/logs/HEAD:d5640e81d8e484079dc57a8c81df3a45b61ab315 76ccafdfe2bb48976432cfa0aa09f65157ac3f31 commitments <commitments> 1612784310 +0300 commit: Aspire{ju1cy_1nf0_1n_917_c0mm17_m355493}
.git/logs/refs/heads/master:d5640e81d8e484079dc57a8c81df3a45b61ab315 76ccafdfe2bb48976432cfa0aa09f65157ac3f31 commitments <commitments> 1612784310 +0300 commit: Aspire{ju1cy_1nf0_1n_917_c0mm17_m355493}
```
That was so easy lol.
Short and sweet. I solved two similar challenges in RITSEC ctf the same way. Let's have a look.
### **Extra 2: Blob**
```
Ha. Blob. Did you get the reference?
```
You're given a url that goes to a git repo. Unfortunately the url doesn't work anymore. I pulled the repo to my directory. First thing you find is a fake flag.txt file lol.
```bash!
➜ blob ls -la
total 20
drwxr-xr-x 3 mug3njutsu mug3njutsu 4096 Apr 9 21:24 .
drwxr-xr-x 3 mug3njutsu mug3njutsu 4096 Apr 25 11:22 ..
-rw-r--r-- 1 mug3njutsu mug3njutsu 43 Apr 9 21:24 flag.txt
drwxr-xr-x 8 mug3njutsu mug3njutsu 4096 Apr 9 21:24 .git
-rw-r--r-- 1 mug3njutsu mug3njutsu 59 Apr 9 21:24 README.md
➜ blob cat flag.txt
these aren't the droids you're looking for
```
Moving into the .git directory, went with the classic, ran rgrep.
```bash!
➜ .git rgrep "flag"
hooks/fsmonitor-watchman.sample: # return the fast "everything is dirty" flag to git and do the
grep: index: binary file matches
packed-refs:d0644363aa853a17c9672cefff587580a43cf45e refs/tags/flag
```
Interesting. There's a reference file that points to a flag. I then used `git show` to view it.
```bash!
➜ .git git show refs/tags/flag
RS{refs_can_b3_secret_too}
```
Wasn't that like too easy?
### **Extra 3: 1597**
```
... as in https://xkcd.com/1597/
```
Like before, you're given a link to a git repo. Moving into the .git directory, ran rgrep.
```bash!
➜ .git rgrep "flag"
hooks/fsmonitor-watchman.sample: # return the fast "everything is dirty" flag to git and do the
grep: index: binary file matches
packed-refs:b123f674a07eaf5914eda8845d86b5219fc1de11 refs/remotes/origin/!flag
```
Got an interesting reference file for `\!flag`. Just like before, i'll use `git show` to view it.
```bash!
➜ .git git show refs/remotes/origin/\!flag
commit b123f674a07eaf5914eda8845d86b5219fc1de11 (HEAD, origin/!flag)
Author: knif3 <knif3@mail.rit.edu>
Date: Fri Apr 9 05:49:00 2021 +0000
More flags
diff --git a/README.md b/README.md
index 0ff84f3..99ddfa8 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
# 1597
-A git challenge series? Sounds fun.
+What's worse, basing a CTF challenge off of XKCD, or basing a challenge off of git?
diff --git a/flag.txt b/flag.txt
index 8b13789..013a6dd 100644
--- a/flag.txt
+++ b/flag.txt
@@ -1 +1 @@
-
+RS{git_is_just_a_tre3_with_lots_of_branches}
```
Easy!
### **Twenty-first Challenge: Shape Shifter**
```
Don't judge a PDF by its cover.
```
You can access the file here: <a href="https://ciphercode.dev/files/f2b4786474b0789c64e1b17928cb0138/proceedings.pdf?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6OX0.YIV5vw.eOkby77c7krao5yZ3QntqWbWGWc">Challenge</a>
You're given a PDF file. When you open it, nothing interesting there. I then decided to run binwalk.
```bash=
➜ shape_shifter binwalk proceedings.pdf
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PDF document, version: "1.4"
71 0x47 Zlib compressed data, default compression
717 0x2CD Zlib compressed data, default compression
8356 0x20A4 Zlib compressed data, default compression
10251 0x280B Zip archive data, at least v2.0 to extract, uncompressed size: 27, name: versatile
10452 0x28D4 End of Zip archive, footer length: 22
```
There's an interesting file called versatile that is compressed within a Zip archive. Used binwalk to extract the files.
```bash!
➜ shape_shifter binwalk -q -MDe proceedings.pdf
➜ shape_shifter ls
proceedings.pdf _proceedings.pdf.extracted
➜ shape_shifter cd _proceedings.pdf.extracted
➜ _proceedings.pdf.extracted file *
0: PDF document, version 1.4, 1 pages
20A4: ASCII text
20A4.zlib: zlib compressed data
280B: Zip archive data, at least v2.0 to extract, compression method=deflate
28D4: Zip archive data (empty)
2CD: TrueType Font data, 9 tables, 1st "cmap", 14 names, Macintosh, Original design by Morris Fuller Benton, as appeared in 1923 ATF specimen book. Adapted by Raph
_2CD.extracted: directory
2CD.zlib: zlib compressed data
47: ASCII text, with very long lines (360)
47.zlib: zlib compressed data
```
We can see the Zip archive. Let's extract it.
```bash!
➜ _proceedings.pdf.extracted unzip 280B
Archive: 280B
inflating: versatile
➜ _proceedings.pdf.extracted cat versatile
Aspire{files_are_versatile}
```
Easy enough.
### **Twenty-second Challenge: Broken**
```
Make me whole again
```
You can access the file here: <a href="https://ciphercode.dev/files/e5c98b7c835235abfaacbb2bf0250783/broken.zip?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6MTB9.YIV7rw.2cVhCLsi0NghywZ1w5ZH5tN0m3E">Challenge</a>
You're given a zipfile. Looking at the metadata with binwalk, there are a couple files. Let's extract them.
```bash!
➜ broken mkdir dump
➜ broken 7z x broken.zip -odump >/dev/null
➜ broken cd dump
➜ dump ls
brokenaa brokenad brokenag brokenaj brokenam brokenap brokenas brokenav
brokenab brokenae brokenah brokenak brokenan brokenaq brokenat brokenaw
brokenac brokenaf brokenai brokenal brokenao brokenar brokenau
```
When you run a file command on the files, you notice the first file is a JPEG image and the rest just have junk.
```bash!
➜ dump file brokenaa
brokenaa: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, little-endian, direntries=6, xresolution=86, yresolution=94, resolutionunit=2, software=GIMP 2.10.18, datetime=2021:02:08 19:28:42]
```
If you try to view the image, it throws an error because it isn't whole. The naming of the files can actually give you a hint that the file is subdivided into a couple of files. I then cat all the files into one file and when you view that file it gives you the flag. Made a simple python script for this one that builds an image based off those files and then uses the `pytesseract` library to read the contents of the image.
```python=
#!/usr/bin/env python3
# @author: mug3njutsu
from pytesseract import pytesseract
from PIL import Image
from os import system
system(f'cat broken* >> final.jpg')
img = Image.open("final.jpg").convert("RGB")
text = pytesseract.image_to_string(img)
print(text[:-1].replace(" ", "").strip().split("\n")[0])
```
```bash!
➜ dump python3 a.py
Aspire{_split_}
```
Smooth.
### **Twenty-third Challenge: Matroska**
```
Onions can get you teary!
```
You can access the file here: <a href="https://ciphercode.dev/files/86d858c5a24aed6f405867462d16fa6d/file.zip?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6MTF9.YIV_AQ.PQQkzICA5zbUO6PIkszfeWR98HU">Challenge</a>
You're given a zipfile. Unzipping it, you get a gzip file, unzipping that you get a tar file and so on. Honestly, this challenge was actually easy. If you look for a challenge on Cybertalents called <a href="https://cybertalents.com/challenges/forensics/can-you-find-me">Can You Find Me</a>, that one is the real deal.
Made a simple bash script:
```bash=
#!/usr/bin/bash
# @author: mug3njutsu
7z x file.zip >/dev/null
gunzip file03.tar.gz
tar -xf file03.tar
bzip2 -d file02
mv file02.out file02.xz
unxz file02.xz
mv file02 flag.txt.Z
gunzip flag.txt.Z
mv flag.txt flag.z
uncompress flag.z
cat flag
```
```bash!
➜ matroska ./a.sh
bzip2: Can't guess original name for file02 -- using file02.out
Good job, I bet you now understand the importance of file formats. This is an essential skill in your career path.
The Flag is: Aspire{bb7d3f7c-6422-4878-80d9-b901fe06597f}
```
Nice and easy. If the script errors, try installing the tools.
### **Twenty-fourth Challenge: Back to the future**
```
Those who do not learn from history are doomed to repeat it!
```
You can access the file here: <a href="https://ciphercode.dev/files/6d075b00e247f51554f5b1133f91686c/lincon.zip?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6MTJ9.YIWIDg.2yPyGir1kteTceBue0yVEtiuNy0">Challenge</a>
You're given a zipfile. Unzipping it, you get what seems to be someone's home directory. Used rgrep at this point to look for the flag.
```bash!
➜ lincon rgrep "flag"
.bash_history:nano flag.txt
.bash_history:mv flag.txt flag.sh
.bash_history:chmod +x flag.sh
.bash_history:./flag.sh
.bash_history:cat flag.sh | curl -F 'f:1=<-' ix.io
.bash_history:cat flag.sh | curl -F 'f:1=<-' ix.io > .cache/.url
.vim/pack/plugins/start/vim-tmux-navigator/plugin/tmux_navigator.vim: return s:TmuxCommand("display-message -p '#{window_zoomed_flag}'") == 1
.vim/pack/plugins/start/vim-tmux-navigator/plugin/tmux_navigator.vim: let l:x=&shellcmdflag
.vim/pack/plugins/start/vim-tmux-navigator/plugin/tmux_navigator.vim: let &shellcmdflag='-c'
.vim/pack/plugins/start/vim-tmux-navigator/plugin/tmux_navigator.vim: let &shellcmdflag=l:x
.vim/pack/plugins/start/vim-tmux-navigator/.git/hooks/fsmonitor-watchman.sample: # return the fast "everything is dirty" flag to git and do the
```
There's a very interesting output from the .bash_history file. It seems the flag.txt file was created using nano, renamed to a bash script, given the right permissions and then a request was sent to ix.io which is a command line pastebin and for safekeeping, the url was saved to .cache/.url.
Viewing that file, got this url http://ix.io/2OJy. Visiting that website you get the flag.
```bash!
➜ lincon curl -s $(cat .cache/.url) | grep -oE "Aspire{.*}"
Aspire{e1a66f2f-57ae-44b5-bc35-acda64ba0470}
```
### **Twenty-fifth Challenge: Time Travel**
```
Time travelers exist. Your past will be revealed.
```
You can access the file here: <a href="https://ciphercode.dev/files/862d7c9b42d91033f13bffd9409b8b85/TimeTravel.zip?token=eyJ1c2VyX2lkIjoyOTksInRlYW1faWQiOjIwMiwiZmlsZV9pZCI6MTh9.YIWLSg.aTTqgyniT5XaeYLX8bP0HbyrnLg">Challenge</a>
You're given a zipfile and unzipping it you get a git repo. I tried using rgrep but didn't get anything interesting.
```bash!
➜ TimeTravel git:(master) rgrep "flag"
.git/hooks/fsmonitor-watchman.sample: # return the fast "everything is dirty" flag to git and do the
```
I then used `git log -p` to check the commits and got the flag at the very end.
```bash!
➜ TimeTravel git:(master) git log -p | grep -oE "Aspire{.*}"
Aspire{PR073c7_y0UR_917}
```
Well, that was a tonne of fun!
<style>
.twitter a {
font-family: "Roboto", "Noto Sans", "Open Sans", "sans-serif";
display: inline-flex;
color: #fff;
border-radius: 5px;
background: #1b95e0;
padding: .4em .8em;
text-decoration: none;
font-weight: bold;
text-align: left;
position: absolute;
bottom:138px;
left:15px;
}
</style>
<div class="twitter" style="height: 110px; width: 300px;"><a target="_blank" rel="noopener noreferrer" href="https://twitter.com/mug3njutsu">
<svg height="20px" width="20px" style="margin-right: 5px; fill: #fff;" viewBox="0 0 512 512" preserveAspectRatio="none">
<path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z" /></a></div>
<style>
body[style],
body[style*="background-color: white;"] {
background-color: #1e1e1e !important;
}
body {
color: #abb2bf;
}
.ui-view-area,
.markdown-body,
.ui-content {
background: #1e1e1e;
color: #abb2bf;
}
h1,
h2,
h3,
h4,
h5,
h6,
p {
color: #ddd;
}
/* form */
.form-control {
background: #333;
color: #fff;
border-color: #8e8e8e;
}
.form-control::placeholder,
.form-control::-webkit-input-placeholder,
.form-control:-moz-placeholder,
.form-control::-moz-placeholder,
.form-control:-ms-input-placeholder {
color: #eee;
}
/*--------------- navbar ---------------*/
.header {
background-color: #0e0e0e;
border-color: #0e0e0e;
}
.navbar {
background-color: #0e0e0e;
border-color: #0e0e0e;
}
.navbar a {
color: #eee !important;
}
.navbar .btn-group label {
background-color: #0e0e0e;
color: #eee;
border-color: #555;
}
.navbar .btn-group label.btn-default:focus,
.navbar .btn-group label.btn-default:hover {
background-color: #2a2a2a;
color: #eee;
border-color: #555;
}
.navbar .btn-group label.active {
background-color: #555;
color: #eee;
border-color: #555;
}
.navbar .btn-group label.active:focus,
.navbar .btn-group label.active:hover {
background-color: #555;
color: #eee;
border-color: #555;
}
.navbar-default .btn-link:focus,
.navbar-default .btn-link:hover {
color: #eee;
}
.navbar-default .navbar-nav>.open>a,
.navbar-default .navbar-nav>.open>a:focus,
.navbar-default .navbar-nav>.open>a:hover {
background-color: #555;
}
.dropdown-header {
color: #eee;
}
.dropdown-menu {
background-color: #222;
border: 1px solid #555;
border-top: none;
}
.dropdown-menu>li>a {
color: #eee;
}
.dropdown-menu>li>a:focus,
.dropdown-menu>li>a:hover {
background-color: #555555;
color: #eee;
}
.dropdown-menu .divider {
background-color: #555;
}
.header .open .dropdown-menu {
background-color: #202020;
}
.ui-share-menu .ui-share-copy,
.ui-share-menu .ui-share-preview {
border-color: #6d6d6d !important;
background-color: #333 !important;
color: #FFF !important;
}
.ui-share-menu .ui-share-copy:hover,
.ui-share-menu .ui-share-copy:focus,
.ui-share-menu .ui-share-preview:hover,
.ui-share-menu .ui-share-preview:focus {
background-color: #737373 !important;
color: #FFF !important;
}
.permission-dropdown .ui-more-settings,
.permission-dropdown .sidenav-trigger {
color: #7bf;
}
.public-published-toggle .unpublish:hover {
background-color: #286090;
}
.menuitem-dropdown .menuitem-dropdown-trigger {
border-color: #8e8e8e;
}
.menuitem-dropdown .menuitem-dropdown-trigger:hover,
.menuitem-dropdown .menuitem-dropdown-trigger:focus {
background-color: #3e4045;
}
.navbar .announcement-popover {
background: #4F4F4F;
}
.navbar .announcement-popover .announcement-popover-header {
background: #2e2e2e;
border-bottom: 1px solid #2e2e2e;
}
.navbar .announcement-popover .announcement-popover-body {
background: #4F4F4F;
color: #eee;
}
.navbar .announcement-popover .announcement-popover-footer {
background: #4F4F4F;
}
.navbar .announcement-area .caption.inverse {
color: #eee;
}
.label-warning {
background-color: #ffc107;
color: #212529;
}
/*--------------- history / recent ---------------*/
.list.row-layout li .item {
border-color: #696c7d;
}
.list.row-layout li:nth-last-of-type(1) .item {
border-bottom: none;
}
.list li .item {
background: #1c1c1c;
color: #fff;
}
.list li:hover .item,
.list li:focus .item {
background: #404040;
}
.list li .item h4 {
color: #fff;
}
.list li p {
color: #ccc;
}
.list li p i {
font-style: normal;
}
.list li .item .content .tags span {
background: #555;
}
.list li .item.wide .content .title a,
.list li .item.wide .content .title a:focus,
.list li .item.wide .content .title a:hover {
color: #ddd;
}
.ui-item {
color: #fff;
opacity: 0.7;
}
.ui-item:hover,
.ui-item:focus {
opacity: 1;
color: #fff;
}
.list li .item.wide hr {
border-color: #6d6d6d;
}
.overview-widget-group .btn,
.multi-select-dropdown-menu .ui-dropdown-label,
.multi-select-dropdown-menu .dropdown-options,
.form-control {
border-color: #8e8e8e;
}
.multi-select-dropdown-menu .dropdown-options .ui-option:hover {
background-color: #4d4d4d;
color: #eee;
}
#overview-control-form #overview-keyword-input-container .select2-container {
background-color: #3e4045 !important;
}
#overview-control-form #overview-keyword-input-container .select2-container .select2-choices {
background-color: #3e4045;
}
.search {
background-color: #3e4045;
color: #eee;
}
.btn.btn-gray {
background: #1b1b1b;
}
.btn.btn-gray:hover {
background: #4d4d4d;
color: #eee;
}
.search::placeholder,
.search::-webkit-input-placeholder,
.search:-moz-placeholder,
.search::-moz-placeholder,
.search:-ms-input-placeholder {
color: #eee;
}
.btn.btn-gray {
border-color: #6d6d6d;
background: #333;
color: #eee;
}
.select2-default {
color: #eee !important;
}
.select2-results .select2-highlighted {
background: #4d4d4d;
color: #eee;
}
.select2-container-multi .select2-choices {
background: #3e4045;
}
.select2-container-multi .select2-choices .select2-search-choice {
background: #131313;
color: #eee;
border-color: #555;
box-shadow: none;
}
.btn-default,
.btn-default:focus {
color: #eee;
background-color: #2e2e2e;
border-color: #6a6a6a;
}
.btn-default.active.focus,
.btn-default.active:focus,
.btn-default.active:hover,
.btn-default:active.focus,
.btn-default:active:focus,
.btn-default:active:hover,
.open>.dropdown-toggle.btn-default.focus,
.open>.dropdown-toggle.btn-default:focus,
.open>.dropdown-toggle.btn-default:hover {
background: #737373;
}
.btn-default:hover {
color: #fff;
background-color: #7d7d7d;
border-color: #6a6a6a;
}
.overview-widget-group .btn.active {
background-color: #6a6a6a;
color: #eee;
}
.overview-widget-group .btn:hover {
background-color: #7d7d7d;
color: #eee;
border-color: #636363;
}
.overview-widget-group .slider.round {
border-color: #ccc;
}
.overview-widget-group .slider.round:before {
border-color: #ccc;
}
.overview-widget-group input:checked+.slider {
background-color: #ccc;
}
.ui-category-description-icon a {
color: #eee;
}
.item .ui-history-pin.active {
color: #f00;
}
.ui-history-close {
color: #eee;
opacity: 0.5;
}
.pagination>li>a,
.pagination>li>span {
color: #eee;
background-color: #2e2e2e;
border-color: #6a6a6a;
}
.pagination>li>a:hover {
color: #fff;
background-color: #7d7d7d;
border-color: #6a6a6a;
}
.pagination>.disabled>a,
.pagination>.disabled>a:focus,
.pagination>.disabled>a:hover,
.pagination>.disabled>span,
.pagination>.disabled>span:focus,
.pagination>.disabled>span:hover {
color: #eee;
background-color: #2e2e2e;
border-color: #6a6a6a;
}
.pagination.dark>li>a,
.pagination.dark>li>span {
color: #aaa;
}
/*--------------- new overview ---------------*/
.overview-component .list li .item {
background: #1c1c1c;
color: #fff;
}
.overview-component .list li:hover .item,
.overview-component .list li:focus .item {
background: #404040;
}
.overview-component .list li p {
color: #ccc;
}
.overview-component .list li .item {
color: #888888;
}
.overview-component .ui-overview-pin {
opacity: 1;
}
/*--------------- settings ---------------*/
.section .form-horizontal .form-group .btn-default {
font-size: 16px;
border-color: #6d6d6d;
background-color: #333;
color: #FFF;
}
.section .form-horizontal .form-group .btn-default:hover,
.section .form-horizontal .form-group .btn-default:focus {
background-color: #737373;
color: #FFF;
}
.section .form-horizontal .form-control:focus {
border-color: #bbb;
}
/*--------------- share view ---------------*/
#notificationLabel,
.ui-infobar .btn.ui-edit {
color: #eee;
border-color: #6a6a6a;
}
.ui-infobar__user-info li {
color: #bbb;
}
footer {
background: #101010;
color: #bbb;
border-top: 1px solid #454545;
}
footer a {
color: #bbb;
}
/*--------------- doc view ---------------*/
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6,
#doc>h1 {
color: #ddd;
border-color: #777 !important;
}
.markdown-body hr {
background-color: #7e7e7e;
}
.h1 .small,
.h1 small,
.h2 .small,
.h2 small,
.h3 .small,
.h3 small,
.h4 .small,
.h4 small,
.h5 .small,
.h5 small,
.h6 .small,
.h6 small,
h1 .small,
h1 small,
h2 .small,
h2 small,
h3 .small,
h3 small,
h4 .small,
h4 small,
h5 .small,
h5 small,
h6 .small,
h6 small {
color: #ddd;
}
.markdown-body p {
color: #ddd;
}
.markdown-body a {
color: #7bf;
}
.markdown-body a code {
color: #7bf !important;
}
.markdown-body ul li,
.markdown-body ol li {
color: #ddd;
}
.markdown-body blockquote {
color: #ddd;
border-left-color: #777;
font-size: 16px;
}
.markdown-body code,
code {
color: #dfdfdf !important;
background-color: #424a55;
}
.markdown-body code {
padding: 1px 2px;
}
.markdown-body pre {
background-color: #1e1e1e;
border: 1px solid #555 !important;
color: #dfdfdf;
}
.markdown-body details {
margin-bottom: 16px;
}
blockquote .small,
blockquote footer,
blockquote small {
color: #bbb;
}
.mark,
mark {
background-color: rgba(255, 255, 0, 0.32) !important;
color: #ddd;
margin: .1em;
padding: .1em .2em;
}
/* Todo list */
.task-list-item-checkbox {
margin: 0.18em 0 0.2em -1.3em !important;
}
.task-list-item input[type=checkbox] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
position: relative;
top: -1px;
margin: 0 1rem 0 0;
cursor: pointer;
}
.task-list-item input[type=checkbox]::before {
-webkit-transition: all 0.1s ease-in-out;
-moz-transition: all 0.1s ease-in-out;
transition: all 0.1s ease-in-out;
content: "";
position: absolute;
left: 0;
z-index: 1;
width: 16px;
height: 16px;
border: 2px solid #F44336;
}
.task-list-item input[type=checkbox]:checked::before {
-webkit-transform: rotate(-48deg);
-moz-transform: rotate(-48deg);
-ms-transform: rotate(-48deg);
-o-transform: rotate(-48deg);
transform: rotate(-48deg);
height: 9px;
border-color: #00E676;
border-top-style: none;
border-right-style: none;
}
.task-list-item input[type=checkbox]::after {
content: "";
position: absolute;
top: -0.125rem;
left: 0;
width: 16px;
height: 16px;
background: #333;
cursor: pointer;
}
/* table */
.markdown-body table tr {
background-color: #1e1e1e;
border-color: #626262;
}
.markdown-body table tr:last-child {
border-bottom: 1px solid #626262;
}
.markdown-body table tr:nth-child(2n) {
background-color: #333;
}
.markdown-body table tr th {
color: #64B5F6;
}
.markdown-body table th,
.markdown-body table td {
border: none;
border-color: #626262;
}
.markdown-body table tr td {
color: #ddd;
}
.markdown-body table tr th:first-child,
.markdown-body table tr td:first-child {
border-left: 1px solid #626262;
}
.markdown-body table tr th:last-child,
.markdown-body table tr td:last-child {
border-right: 1px solid #626262;
}
.markdown-body pre.flow-chart,
.markdown-body pre.sequence-diagram,
.markdown-body pre.graphviz,
.markdown-body pre.mermaid,
.markdown-body pre.abc {
background-color: #fff !important;
}
/* alert */
.alert-danger h1,
.alert-danger h2,
.alert-danger h3,
.alert-danger h4,
.alert-danger h5,
.alert-danger h6,
.alert-danger p,
.alert-danger mark,
.alert-danger ul li,
.alert-danger ol li {
color: #721c24;
}
.alert-danger hr {
background-color: #721c24;
}
.alert-warning h1,
.alert-warning h2,
.alert-warning h3,
.alert-warning h4,
.alert-warning h5,
.alert-warning h6,
.alert-warning p,
.alert-warning mark,
.alert-warning ul li,
.alert-warning ol li {
color: #856404;
}
.alert-warning hr {
background-color: #856404;
}
.alert-success h1,
.alert-success h2,
.alert-success h3,
.alert-success h4,
.alert-success h5,
.alert-success h6,
.alert-success p,
.alert-success mark,
.alert-success ul li,
.alert-success ol li {
color: #155724;
}
.alert-success hr {
background-color: #155724;
}
.alert-info h1,
.alert-info h2,
.alert-info h3,
.alert-info h4,
.alert-info h5,
.alert-info h6,
.alert-info p,
.alert-info mark,
.alert-info ul li,
.alert-info ol li {
color: #004085;
}
.alert-info hr {
background-color: #004085;
}
.alert a {
color: #002752;
font-weight: 700;
}
.alert h1:first-child,
.alert h2:first-child,
.alert h3:first-child,
.alert h4:first-child,
.alert h5:first-child,
.alert h6:first-child {
margin-top: 0;
}
.markdown-body .alert>p {
margin-top: 0px;
margin-bottom: 10px;
}
.markdown-body .alert>ul,
.markdown-body .alert>ol {
margin-bottom: 16px;
}
.markdown-body .alert>*:last-child {
margin-bottom: 0;
}
.alert-warning {
background-color: #fff3cd;
border-color: #ffeeba;
}
.alert-danger mark {
background-color: #ffb7b7 !important;
}
.alert-warning mark {
background-color: #ffe966 !important;
}
.alert-success mark {
background-color: #b9e990 !important;
}
.alert-info mark {
background-color: #b1d6ff !important;
}
/* scroll bar */
.ui-edit-area .ui-resizable-handle.ui-resizable-e {
background-color: #303030;
border: 1px solid #303030;
box-shadow: none;
}
/* info bar */
.ui-infobar {
color: #999;
}
/* permission */
.permission-popover-btn-group .btn.focus,
.permission-popover-btn-group .btn:active,
.permission-popover-btn-group .btn:focus,
.permission-popover-btn-group .btn.active {
background-color: #6a6a6a !important;
color: #eee !important;
border-color: #555 !important;
}
.permission-popover-btn-group .btn:hover,
.permission-popover-btn-group .btn.active:hover {
background-color: #7d7d7d !important;
color: #eee !important;
border-color: #636363 !important;
}
.ui-delete-note:hover,
.ui-delete-note:focus,
.ui-delete-note:active {
background-color: #dc3545 !important;
}
.ui-invitee-invite {
border-color: #8e8e8e !important;
}
.ui-invitee-invite:hover,
.ui-invitee-invite:focus {
background-color: #737373;
color: #eee !important;
}
.ui-no-invitee-label {
color: #ccc !important;
}
.select2-container {
background: #202020;
}
.select2-container-multi .select2-choices .select2-search-field input {
color: #eee;
}
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
color: #000;
}
.select2-drop {
background: #202020;
color: #eee;
}
.select2-results .select2-no-results,
.select2-results .select2-searching,
.select2-results .select2-ajax-error,
.select2-results .select2-selection-limit {
background: #202020;
}
/* table of contents block*/
.ui-toc-dropdown {
width: 42vw;
max-height: 90vh;
overflow: auto;
text-align: inherit;
}
/* table of contents text*/
.ui-toc-dropdown .nav>li>a {
font-size: 14px;
font-weight: bold;
color: #ddd;
}
/* table of contents text: active*/
.ui-toc-dropdown .nav>.active:focus>a,
.ui-toc-dropdown .nav>.active:hover>a,
.ui-toc-dropdown .nav>.active>a {
color: #7bf;
border-left-color: #7bf;
}
/* table of contents text: focus, hover*/
.ui-toc-dropdown .nav>li>a:focus,
.ui-toc-dropdown .nav>li>a:hover {
color: #7bf;
border-left-color: #7bf;
}
/* drop down floating table of contents */
.ui-toc-dropdown.dropdown-menu {
background: #333;
}
.toc-menu a {
color: #ddd;
}
.toc-menu a:focus,
.toc-menu a:hover {
color: #7bf;
}
/*--------------- editor ---------------*/
.cm-m-markdown {
color: #ddd;
}
.cm-s-one-dark .cm-header,
.cm-m-xml.cm-attribute {
color: #ffa653;
}
.cm-m-markdown.cm-variable-3 {
color: #ff7e7e;
}
.cm-s-one-dark .cm-string,
.cm-s-one-dark .cm-variable-2,
.cm-s-one-dark .cm-m-markdown.cm-url{
color: #7bf;
}
.cm-s-one-dark .cm-m-markdown.cm-link {
color: #b0ee83;
}
.cm-s-one-dark .CodeMirror-linenumber {
color: #666;
}
.cm-strong {
color: #f4511e;
}
.cm-s-one-dark .cm-comment {
color: #a9a9a9;
}
.cm-matchhighlight {
color: #ffea00;
}
.cm-positive {
color: #11bf64;
}
.cm-negative {
color: #ff3e3e;
}
.dropdown-menu.CodeMirror-other-cursor {
border: 2px solid #4d4d4d;
background-color: #202020;
}
.dropdown-menu.CodeMirror-other-cursor li a {
color: #ececec;
}
/*--------------- book mode ---------------*/
.topbar {
background: #1e1e1e;
}
.btn.focus,
.btn:focus,
.btn:hover {
color: #fff;
background-color: #333;
}
.summary {
background: #1e1e1e;
}
.summary,
.toolbar {
background: #1e1e1e !important;
border-color: #4d4d4d !important;
}
.toolbar i {
color: #fff;
}
.summary h1,
.summary h2,
.summary h3 .summary hr {
color: #ddd;
border-color: #777 !important;
}
.summary .nav>li>a {
color: #7bf;
}
.summary .nav-pills>li.active>a,
.summary .nav-pills>li.active>a:focus,
.summary .nav-pills>li.active>a:hover {
color: #ff9100;
}
.ui-summary-search {
font-size: 16px;
border: 1px solid #6D6D6D;
background-color: #333;
color: #FFF;
}
.summary h1,
.summary h2,
.summary h3,
.summary h4,
.summary h5,
.summary h6 {
border-color: #454545;
}
/* fix body background color to dark */
div[class$=container-mask] {
background: #1e1e1e;
z-index: 1;
display: block;
}
/* notification */
.dropdown.ui-notification .ui-notification-label,
.dropdown.ui-invitee .ui-invitee-label {
color: #eee;
border-color: #6a6a6a;
}
.ui-notification .dropdown-menu {
border-top: 1px solid #555;
}
/*--------------- help ---------------*/
.modal-header {
background-color: #2a2a2a;
}
.panel-default {
border-color: #6d6d6d;
}
.panel-default>.panel-heading {
background-color: #2a2a2a;
color: #eee;
border-color: #6d6d6d;
}
.panel-body {
background: #2e2e2e;
}
.panel-body a {
color: #7bf;
}
.table>tbody>tr>td,
.table>tbody>tr>th,
.table>tfoot>tr>td,
.table>tfoot>tr>th,
.table>thead>tr>td,
.table>thead>tr>th {
border-color: #6d6d6d;
}
/*--------------- comment ---------------*/
.ui-comment-container .ui-comment-header {
background-color: #2a2a2a;
color: #eee;
border-color: #6d6d6d;
}
.ui-comment-container {
background-color: #2e2e2e;
border-color: #6d6d6d;
}
.ui-comment-container .ui-comments-container .ui-comment .comment-author {
color: #eee;
}
.ui-comment-container .ui-comments-container .ui-comment .timestamp {
color: #aaa;
}
.ui-comment-container .ui-comments-container .ui-comment .comment-content {
color: #eee;
}
.ui-comment-container .ui-comments-container .ui-comment .comment-menu {
color: #eee;
}
.ui-comment-container .ui-comments-container .ui-comment .comment-menu .comment-dropdown-menu {
background: #222;
color: #eee;
border-color: #555;
}
.ui-comment-container .ui-comments-container .ui-comment .comment-menu .comment-dropdown-menu>div:hover {
background-color: #555555;
color: #eee;
}
.ui-comment-container .ui-comments-container .ui-comment .comment-menu:hover,
.ui-comment-container .ui-comments-container .ui-comment .comment-menu:active,
.ui-comment-container .ui-comments-container .ui-comment .comment-menu.active {
background-color: #737373;
color: #eee;
}
.ui-comment-container .ui-comment-input-container {
background-color: #3c3c3c;
}
.ui-comment-container textarea {
background-color: #3e4045;
color: #eee;
border: 1px solid #6d6d6d;
}
.ui-comment-container textarea::placeholder,
.ui-comment-container textarea::-webkit-input-placeholder,
.ui-comment-container textarea:-moz-placeholder,
.ui-comment-container textarea::-moz-placeholder,
.ui-comment-container textarea:-ms-input-placeholder {
color: #eee;
}
@keyframes highlight {
0% {
background-color: #3c3c3c;
}
30% {
background-color: #3c3c3c;
}
100% {
background-color: transparent;
}
}
/*--------------- template ---------------*/
.template-content .modal-header {
background: #2a2a2a;
}
.template-content .close {
color: #fff;
}
.template-content .modal-title {
color: #eee;
}
.template-content .ui-templates-container {
border-color: #6d6d6d;
}
.ui-templates-container .ui-create-template-btn {
background: #446fab;
color: #fff;
}
.ui-template-list-filter .ui-template-list-filter-label,
.ui-template-list-filter .ui-template-list-filter-label:hover {
color: #eee;
}
.ui-template-list .list-group-item.active {
background: #4d4d4d;
}
.ui-template-list .list-group-item.active:focus {
background: #4d4d4d !important;
}
.list-group-item.active,
.list-group-item.active:focus,
.list-group-item.active:hover {
color: #eee;
}
.ui-template-list .list-group-item .list-group-item-heading {
color: #eee;
}
.ui-template-list .list-group-item.active .list-group-item-heading {
color: #eee;
}
.ui-template-list .list-group-item:hover {
background: #4d4d4d !important;
}
.ui-template-item-menu {
color: #eee !important;
}
.ui-template-list .list-group-item {
color: #fff;
}
.ui-template-list .list-group-item .dropdown-container.open {
background-color: #2a2a2a;
}
.ui-template-list .list-group-item .dropdown-container:hover {
background-color: #2a2a2a !important;
}
.template-menu .more-template {
border-color: #6d6d6d;
}
.template-menu .more-template:hover {
color: #eee;
border-color: #6d6d6d;
}
/*--------------- code mirror ---------------*/
.modal-content {
background: #1f2226;
}
.modal-header {
border-bottom: 1px solid #46484f;
}
.modal-footer {
border-top: 1px solid #46484f;
}
a.list-group-item {
background: #1f2226;
color: #ddd;
border: 1px solid #46484f;
}
a.list-group-item .list-group-item-heading {
color: #ddd;
}
a.list-group-item:focus,
a.list-group-item:hover {
background: #434651;
color: #ddd;
}
button.close {
color: #ddd;
opacity: .5;
}
.close:focus,
.close:hover {
color: #fff;
opacity: .8;
}
.CodeMirror {
background: #1f2226;
}
.CodeMirror-gutters {
background: #1f2226;
border-right: 1px solid rgba(204, 217, 255, 0.1);
}
.cm-s-default .cm-comment {
color: #888;
}
.cm-s-default .cm-quote {
color: #ddd;
}
.cm-s-default .cm-header {
color: #ffa653;
}
.cm-s-default .cm-link {
color: #b0ee83;
}
.cm-s-default .cm-string,
.cm-s-default .cm-variable-2 {
color: #7bf;
}
.cm-s-default .cm-def {
color: #c678dd;
}
.cm-s-default .cm-number,
.cm-s-default .cm-attribute,
.cm-s-default .cm-qualifier,
.cm-s-default .cm-plus,
.cm-s-default .cm-atom {
color: #eda35e;
}
.cm-s-default .cm-property,
.cm-s-default .cm-variable,
.cm-s-default .cm-variable-3,
.cm-s-default .cm-operator,
.cm-s-default .cm-bracket {
color: #f76e79;
}
.cm-s-default .cm-keyword,
.cm-s-default .cm-builtin,
.cm-s-default .cm-tag {
color: #98c379;
}
.modal-title {
color: #ccc;
}
.modal-body {
color: #ccc !important;
}
div[contenteditable]:empty:not(:focus):before {
color: #aaa;
}
.CodeMirror pre {
color: #ddd;
}
.CodeMirror pre span[style^="background-color: rgb(221, 251, 230)"] {
background-color: #288c27 !important;
}
.CodeMirror pre span[style^="background-color: rgb(249, 215, 220)"] {
background-color: #a52721 !important;
}
/*------- code highlight: Visual Stutdio Code theme for highlight.js -------*/
.hljs {
background: #1E1E1E;
color: #DCDCDC;
}
.hljs-keyword,
.hljs-literal,
.hljs-symbol,
.hljs-name {
color: #569CD6;
}
.hljs-link {
color: #569CD6;
text-decoration: underline;
}
.hljs-built_in,
.hljs-type {
color: #4EC9B0;
}
.hljs-number,
.hljs-class {
color: #B8D7A3;
}
.hljs-string,
.hljs-meta-string {
color: #D69D85;
}
.hljs-regexp,
.hljs-template-tag {
color: #d16969;
}
.hljs-title {
color: #dcdcaa;
}
.hljs-subst,
.hljs-function,
.hljs-formula {
color: #DCDCDC;
}
.hljs-comment,
.hljs-quote {
color: #57A64A;
}
.hljs-doctag {
color: #608B4E;
}
.hljs-meta,
.hljs-meta-keyword,
.hljs-tag {
color: #9B9B9B;
}
.hljs-variable,
.hljs-template-variable {
color: #BD63C5;
}
.hljs-params,
.hljs-attr,
.hljs-attribute,
.hljs-builtin-name {
color: #9CDCFE;
}
.hljs-section {
color: gold;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
/*
.hljs-code {
font-family:'Monospace';
}
*/
.hljs-bullet,
.hljs-selector-tag,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #D7BA7D;
}
.hljs-addition {
background-color: #155a36;
color: #dfdfdf;
display: inline-block;
width: 100%;
}
.hljs-deletion {
background-color: #872e2e;
color: #dfdfdf;
display: inline-block;
width: 100%;
}
/*---------- code highlight: Visual Stutdio Code theme for Prism.js ----------*/
code[class*="language-"],
pre[class*="language-"] {
color: #DCDCDC;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #1E1E1E;
}
.token.comment,
.token.block-comment,
.token.prolog,
.token.cdata {
color: #57A64A;
}
.token.doctype,
.token.punctuation {
color: #9B9B9B;
}
.token.tag,
.token.entity {
color: #569CD6;
}
.token.attr-name,
.token.namespace,
.token.deleted,
.token.property,
.token.builtin {
color: #9CDCFE;
}
.token.function,
.token.function-name {
color: #dcdcaa;
}
.token.boolean,
.token.keyword,
.token.important {
color: #569CD6;
}
.token.number {
color: #B8D7A3;
}
.token.class-name,
.token.constant {
color: #4EC9B0;
}
.token.symbol {
color: #f8c555;
}
.token.rule {
color: #c586c0;
}
.token.selector {
color: #D7BA7D;
}
.token.atrule {
color: #cc99cd;
}
.token.string,
.token.attr-value {
color: #D69D85;
}
.token.char {
color: #7ec699;
}
.token.variable {
color: #BD63C5;
}
.token.regex {
color: #d16969;
}
.token.operator {
color: #DCDCDC;
background: transparent;
}
.token.url {
color: #67cdcc;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
.token.inserted {
color: green;
}
/*---------- code highlight: dark theme for Gist ----------*/
.gist .gist-file {
border: 1px solid #555;
}
.gist .gist-data {
background-color: #1e1e1e;
border-bottom: 1px solid #555;
}
.gist .gist-meta {
background-color: #424a55;
color: #eee;
}
.gist .gist-meta a {
color: #eee;
}
.gist .highlight {
color: #eee;
background-color: #1e1e1e;
}
.gist .blob-num {
color: #afafaf;
}
.gist .blob-code-inner {
color: #dfdfdf;
}
.pl-mb {
color: #fff !important;
}
.pl-c {
color: #57A64A !important;
}
/* comment */
.pl-ent {
color: #569CD6 !important;
}
/* entity */
.pl-e {
color: #9CDCFE !important;
}
.pl-en {
color: #4EC9B0 !important;
}
/* entity attribute */
.pl-smi {
color: #9CDCFE !important;
}
.pl-k {
color: #569cd6 !important;
}
.pl-c1,
.pl-s .pl-v {
color: #4EC9B0 !important;
}
.pl-pds,
.pl-s,
.pl-s .pl-pse .pl-s1,
.pl-sr,
.pl-sr .pl-cce,
.pl-sr .pl-sra,
.pl-sr .pl-sre,
.pl-s .pl-s1 {
color: #D69D85 !important;
}
.pl-s .pl-s1 .pl-pse {
color: #c5dbff !important;
}
/* strings */
.diff-table .pl-c,
.diff-table .pl-ent,
.diff-table .pl-e,
.diff-table .pl-en,
.diff-table .pl-pds,
.diff-table .pl-s,
.diff-table .pl-s .pl-s1,
.diff-table .pl-s .pl-pse .pl-s1,
.diff-table .pl-sr,
.diff-table .pl-sr .pl-cce,
.diff-table .pl-sr .pl-sra,
.diff-table .pl-sr .pl-sre,
.diff-table .pl-k,
.diff-table .pl-smi,
.diff-table .pl-c1,
.diff-table .pl-v {
color: #eee !important;
}
</style>