分类: 代码如诗

  • Nextcloud配置和优化

    Nextcloud配置和优化

    Nextcloud配置和优化


    Nextcloud数据库索引修复

    当Nextcloud数据库丢失索引时,可以通过命令行手动修复。请在Nextcloud安装根目录执行以下命令:

     sudo -u www php occ db:add-missing-indices

    例如,修复丢失的索引“mail_messages_msgid_idx”:

     sudo -u www php occ db:add-missing-indices

    修复后可以显著提高查询速度。

    Nextcloud配置文件(config.php)

     <?php
    $CONFIG = array(
      'objectstore' => array(
        'class' => '\\OC\\Files\\ObjectStore\\S3',
        'arguments' => array(
          'bucket' => 'nextcloud-*******', // 存储桶名称(空间名称)
          'autocreate' => false,
          'key'  => 'AKID***********', // 替换为用户的 SecretId
          'secret' => '**********', // 替换为用户的 SecretKey
          'hostname' => 'cos.<Region>.myqcloud.com', // 将 <Region> 修改为所属地域,如 ap-shanghai
          'use_ssl' => true,
        ),
      ),
      'instanceid' => 'oc82tpo2f',
      'passwordsalt' => '2GdQCVNsIVYF1KLP3fT3woH69X',
      'secret' => 'VSy0Y+/2wV7g4kvbiKSE0dSa2Yp1ajtvvZpgdV14Lsc',
      'trusted_domains' => array(
        0 => 'nextcloud.***.***',
      ), // nextcloud域名
      'datadirectory' => '/www/nextcloud/data', // data路径,请根据实际情况修改
      'dbtype' => 'mysql',
      'version' => '27.1.5.1',
      'overwrite.cli.url' => 'https://nextcloud.***.***/nextcloud',
      'dbname' => 'nextcloud',
      'dbhost' => 'localhost',
      'dbport' => '',
      'dbtableprefix' => 'oc_',
      'mysql.utf8mb4' => true,
      'dbuser' => 'nextcloud', // 数据库用户名
      'dbpassword' => '******', // 数据库密码
      'installed' => true,
      'maintenance' => false,
      'updater.secret' => '\$2y\$10\$0eTb6aJ4u3NAWwlQk2qkUOTlI3.0O6TGLwAQOCyUtH/wmCpC',
      'theme' => '',
      'loglevel' => 2,
      'filelocking.enabled' => true,
      'memcache.local' => '\\OC\\Memcache\\Redis',
      'memcache.locking' => '\\OC\\Memcache\\Redis',
      'redis' => array(
        'host' => '127.0.0.1',
        'port' => 6379,
        'timeout' => 0.0,
        'password' => '', // redis密码
      ),
      'mail_smtpmode' => 'smtp',
      'mail_sendmailmode' => 'smtp',
      'mail_from_address' => '****', // 请根据实际情况修改
      'mail_domain' => 'outlook.com', // 请根据实际情况修改
      'mail_smtpauth' => 1,
      'mail_smtphost' => 'smtp-mail.outlook.com', // 请根据实际情况修改
      'mail_smtpport' => '587', // 请根据实际情况修改
      'mail_smtpname' => '*****', // 请根据实际情况修改
      'mail_smtppassword' => '****', // 请根据实际情况修改
      'enabledPreviewProviders' => [
        'OC\Preview\MP3',
        'OC\Preview\TXT',
        'OC\Preview\MarkDown',
        'OC\Preview\OpenDocument',
        'OC\Preview\Krita',
        'OC\Preview\Imaginary',
      ],
      'preview_imaginary_url' => 'http://<url of imaginary>',
    );

    Nextcloud性能优化

    后台任务

    设置cron.php每5分钟运行一次,cron.php的具体路径在nextcloud安装的根目录下。

     crontab -u www -e
    */5 * * * * php -f /PathToNextcloud/cron.php

    PHP配置优化

    1. 注释掉php.ini中的output_buffering设置:
     ; output_buffering = 4096
    1. 启用OPcache以提高性能:
    opcache.enable=1
    opcache.enable_cli=1
    opcache.interned_strings_buffer=32
    opcache.max_accelerated_files=80000
    opcache.memory_consumption=128
    opcache.save_comments=1
    opcache.revalidate_freq=3
    1. 设置HSTS以提高安全性,在apache的配置文件中加入:
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>

    完整性检查

    如果Nextcloud文件完整性检查发现问题,可以根据文档中的指导进行修复。例如,.user.ini文件缺失可以创建该文件并设置适当的open_basedir,或者在宝塔面板中开启放跨站。

    完整config.php设置

    <?php
    $CONFIG = array(
      'instanceid' => 'xxxxxxxxxxx',
      'passwordsalt' => 'xxxxxxxxxxxxxxxxxx',
      'secret' => 'TNFR/+xxxxxxxxxxxxxxxxxxx/',
      'trusted_domains' => 
      array (
        0 => 'nextcloud.guohao.asia',
      ),
      'datadirectory' => '/www/wwwroot/nextcloud/data',
      'dbtype' => 'mysql',
      'version' => '24.0.5.1',
      'overwrite.cli.url' => 'https://nextcloud.guohao.asia', 
      'dbname' => 'xxxxxxxxxxxx',
      'dbhost' => 'localhost',
      'dbport' => '',
      'dbtableprefix' => 'oc_',
      'mysql.utf8mb4' => true,
      'dbuser' => 'xxxxxxxxxx',
      'dbpassword' => 'xxxxxxxxx',
      'installed' => true,
      'app_install_overwrite' => 
      array (
        0 => 'tencentcloudcosconfig',
        1 => 'files_external_onedrive',
      ),  
      // 缓存设置
      'memcache.local' => 'OC\\Memcache\\Redis',        
      'memcache.distributed' => 'OC\\Memcache\\Memcached',
      'redis' => [        #Redis
        'host' => 'localhost', #Redis 服务器
        'port' => 6379,     #Redis 端口
        'timeout' => 0.0,       #Redis 超时设定
        'password' => 'XXXXXXXXXXX',        #Redis 密码
        'dbindex' => 1,     #Redis 数据库选择
      ],
      'memcached_servers' => array(        #Memcached 服务器
        array('localhost', 11211),
      ),
      'memcached_options' => array(        #Memcached 选项
        \Memcached::OPT_CONNECT_TIMEOUT => 50,
        \Memcached::OPT_RETRY_TIMEOUT =>   50,
        \Memcached::OPT_SEND_TIMEOUT =>    50,
        \Memcached::OPT_RECV_TIMEOUT =>    50,
        \Memcached::OPT_POLL_TIMEOUT =>    50,
        \Memcached::OPT_COMPRESSION =>          true,
        \Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
        \Memcached::OPT_BINARY_PROTOCOL =>      true,
      ),
      'cache_path' => '/www/wwwroot/nextcloud/cache',        #缓存目录
      'cache_chunk_gc_ttl' => 60*60*24,        #缓存删除时间
      // 腾讯云COS  
      'objectstore' => 
      array (
        'class' => '\\OC\\Files\\ObjectStore\\S3',
        'arguments' => 
        array (
          'key' => 'XXXXXXXXXXXXXXXXXXXXXXXX',
          'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXX',
          'bucket' => 'nextcloud-000000000',
          'hostname' => 'cos.ap-beijing.myqcloud.com',
          'use_ssl' => true,
          'autocreate' => false,
        ),
      ),
      // 电话区号
      'default_phone_region' => 'CN',
    );

    解决Nextcloud无法更新应用

    config.php中添加以下内容以启用应用商店:

     'appstoreenabled' => true,
     'appstoreurl' => 'https://www.orcy.net/ncapps/v1/',

    更换为国内源(更新进度较官方略慢)。

    退出维护模式

  • 调整宝塔面板PHP8.2的APCu扩展性能

    调整宝塔面板PHP8.2的APCu扩展性能

    调整宝塔面板PHP8.2的APCu扩展性能

    image-20241116073836145

    在PHP8.2的配置文件中搜索APCu,找到如下内容:

    extension = /www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/apcu.so

    在其下方添加:

    ; APCu Extension Configuration
    ; 加载APCu扩展
    extension = /www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/apcu.so
    ; 设置共享内存大小,单位为字节,这里设置为64MB
    apc.shm_size = "64M"
    ; 设置缓存条目的默认生存时间,单位为秒,这里设置为7200秒(2小时)
    apc.ttl = 7200
    ; 设置垃圾回收的最大生存时间,单位为秒,这里设置为3600秒(1小时)
    apc.gc_ttl = 3600
    ; 禁用文件存储缓存,减少磁盘I/O
    apc.enable_file_store = 0
    ; 允许在CLI模式下使用APCu
    apc.enable_cli = 1
    ; 设置缓存压缩比率,只有当压缩后的数据大小是原始大小的20%时,数据才会被压缩
    apc.compress_rratio = 0.2
    ; 提供关于预期缓存文件和用户缓存数量的提示,以帮助APCu更好地分配内存
    apc.num_files_hint = 1000
    apc.user_entries_hint = 1000
    ; 禁用文件锁,可能会提高性能,但在某些情况下可能会导致数据不一致
    apc.file_update_protection = 0
    ; 在APCu扩展导致核心转储时,帮助调试
    ;apc.coredump_unmap = 1

    然后重启PHP服务。

  • MediaWiki使用手记

    MediaWiki使用手记

    MediaWiki使用手记

    删除历史修订记录

    php maintenance/deleteOldRevisions.php --delete

    插入视频并控制视频尺寸

    EmbedVideo

    1. 安装==EmbedVideo==插件

    下载文件并将文件放入你的extensions/文件夹中名为EmbedVideo的目录下。
    在你的LocalSettings.php文件底部添加以下代码:

    wfLoadExtension( 'EmbedVideo' );

    完成——转到你的维基的Special:Version页面,以验证扩展是否已成功安装。

    1. 在B站上传视频(当然,服务器允许也可以直接添加到服务器)
    2. 获取视频的ID,https://www.bilibili.com/video/BV1bJUVY7EBi/ 连接中的BV1bJUVY7EBi即为视频ID.
    3. 在MediaWiki的内容中插入以下代码:
    {{#ev:bilibili|BV1bJUVY7EBi|width=800|autoresize=true}}

    即可插入来自B站的对应视频,并将视频的宽度设置为800px

    1. 为确保手机端的播放效果,可以在MediaWiki:Common.css页面加入以下代码:
    @media only screen and (max-width: 600px) {
      /* 针对手机的样式 */
      .ev-video {
        width: 100%;
        height: auto;
      }
    }
    image-20241114161813121

    启用MediaWiki缓存:

    # 以下为未登陆用户启用缓存-2024年11月18日
    $wgUseFileCache = true; // default: false
    $wgFileCacheDirectory = "$IP/images/cache"; // default: "{$wgUploadDirectory}/cache" which equals to "$IP/images/cache"
    
    # 启用EMCACHED缓存-2024年11月18日
    $wgMainCacheType = CACHE_MEMCACHED;
    $wgParserCacheType = CACHE_MEMCACHED; // optional
    $wgMessageCacheType = CACHE_MEMCACHED; // optional
    $wgMemCachedServers = [ '127.0.0.1:11211' ];
    $wgSessionsInObjectCache = true; // optional -- removed in 1.33+
    $wgSessionCacheType = CACHE_MEMCACHED; // optional

  • 曲线救国,实现在MediaWiKi中插入外链视频

    曲线救国,实现在MediaWiKi中插入外链视频

    曲线救国,实现在MediaWiKi中插入外链视频

    MediaWiKi出于安全考虑是禁止插入外链媒体的,外链图片尚可通过css配置解决,但视频反复尝试都无法实现。

    在腾讯云的对象存储中,发现了一段视频播放器的代码,想到一个曲线救国的方式。也就是将视频上传到COS中,然后在服务器上建一个HTML文件,将以下播放器代码复制进去。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      <meta
        name="viewport"
        content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,shrink-to-fit=no"
      >
      <title>播放器</title>
      <link
        href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.1/tcplayer.min.css"
        rel="stylesheet"
      >
      <script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.2/libs/flv.min.1.6.2.js">
      </script>
      <script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.1/libs/hls.min.0.13.2m.js">
      </script>
      <script src="https://video-public-1259789488.cos.ap-guangzhou.myqcloud.com/lib/dash.all.min.js">
      </script>
      <script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.0/tcplayer.v4.5.0.min.js">
      </script>
      <style>
        html,body{
          margin: 0;
          padding: 0;
          overflow: hidden;
          height: 100%;
        }
        .tcplayer {
          margin: 0 auto;
          width: 100%;
          height: 100%;
        }
      </style>
    </head>
    <body>
    <video
      id="player-container-id"
      preload="auto" width="100%"
      height="100%"
      playsinline
      webkit-playsinline
    ></video>
    <script>
      var tcplayer = TCPlayer("player-container-id", {
        reportable: false,
      });
      tcplayer.src('https://www.guohao.asia/picgo/202411121424692.mp4')
    </script>
    </body>
    </html>

    在MediaWiKi编辑过程中,插入以下代码,以<iframe>方式插入外链视频。

    <html>
    <head>
        <title>播放器</title>
        <style>
            .responsive-iframe {
                width: 100%; /* 宽度自适应 */
                height: 100vh; /* 高度自适应 */
                border: none;
            }
        </style>
    </head>
    <body>
        <iframe class="responsive-iframe" src="https://docs.guohao.asia/video/shr/1.html" frameborder="0" allowfullscreen></iframe>
    </body>
    </html>
  • 在VM Virtualbox 的ubuntu设置共享文件夹

    在VM Virtualbox 的ubuntu设置共享文件夹

    在VM Virtualbox 的ubuntu设置共享文件夹

    VM Virtualbox 不同于VMware,无法直接通过复制粘贴方式将宿主机上的文件传输到虚拟机内,所以只能用【共享文件夹】的方式解决。

    1. 在宿主机上新建一个文件夹,这里我将文件夹命名为ubuntu
    2. 在VM Virtualbox 中依次点击【设置】-【共享文件夹】–【文件夹】-【新增】
    image-20241029161641669
    1. 【共享文件夹路径】选定到刚刚新建的ubuntu文件夹,然后分别设置【共享文件夹名称】和【挂载点】;
    image-20241029161937326

    至此,宿主机的配置结束,接下来转到ubuntu虚拟机中:

    1. 打开【中端】,输入sudo mkdir /ubuntu后回车,新建一个同名的文件夹;
    image-20241029162232672
    1. 在【中端】中输入sudo mount -t vboxsf ubuntu /ubuntu建立挂载关系。

    之后就可以在共享文件夹中传输文件了。

    image-20241029162432240
  • Excel中通过vlookup与indirect嵌套对数据进行查询汇总

    Excel中通过vlookup与indirect嵌套对数据进行查询汇总

    Excel中通过vlookup与indirect嵌套对数据进行查询汇总

    需求

    image-20241009143042903

    某项目交付后,物管处需对验收问题进行跟进并汇总数据。

    各sheet是以楼栋号为单位的问题表,一共有20余个sheet,需要将所有问题汇总到一个单独的汇总sheet中,同时确保各sheet的数据发生变化时汇总表可以同步提现。

    解决方案

    VLOOKUP($D3,INDIRECT("'"&$C3&"'!D:J"),MATCH(E$2,$D$2:$J$2,0),0)

    1. $D3:这是 VLOOKUP 函数中的查找值,即您想要在目标工作表中查找的数据。
    2. INDIRECT("'" & $C3 & "'!D:J")
      • $C3:这个单元格包含目标工作表的名称。
      • INDIRECT 函数根据文本字符串构建对单元格的引用。这里,它构建了对 $C3 单元格中指定的工作表内的区域 D:J 的引用。
      • 例如,如果 $C3 包含文本 “Sheet1″,则 INDIRECT 函数将返回对 “Sheet1” 工作表中 D:J 区域的引用。
    3. MATCH(E$2, $D$2:$J$2, 0)
      • E$2:这个单元格包含您想要查找的列标题。
      • $D$2:$J$2:这是包含列标题的区域,MATCH 函数在这个区域中查找与 E$2 相匹配的列标题。
      • 0:表示精确匹配。MATCH 函数返回匹配项在 $D$2:$J$2 中的相对位置(列号)。
    4. 0:这是 VLOOKUP 函数的第四个参数,表示查找时需要精确匹配。

    公式的作用:

    • 查找值$D3 是您想要查找的值。
    • 查找范围INDIRECT 函数根据 $C3 单元格中的工作表名称和指定的区域 "D:J" 来确定查找范围。
    • 列索引号MATCH 函数返回 E$2 单元格中指定的标题在 $D$2:$J$2 标题行中的列索引号。
    • 精确匹配VLOOKUP 的最后一个参数设置为 0,表示查找时需要精确匹配。
  • VBA处理excel工作表中的注释信息

    VBA处理excel工作表中的注释信息

    以下代码可实现:

    将当前工作表中的所有注释内容复制到新工作表的单元格中,复制后的内容在同一列由上向下排列

    Attribute VB_Name = "当前工作表内所有注释复制到新工作表"
    Sub CopyCellCommentsToNewSheet()
        Dim wsSource As Worksheet
        Dim wsTarget As Worksheet
        Dim i As Long
        Dim r As Range
        Dim lastRow As Long
    
        ' 设置源工作表为当前活动工作表
        Set wsSource = ActiveSheet
    
        ' 创建新工作表并设置为目标工作表
        Set wsTarget = Sheets.Add(After:=Sheets(Sheets.Count))
        wsTarget.Name = "Comments"
    
        ' 遍历源工作表中的所有单元格
        i = 1
        For Each r In wsSource.UsedRange
            If Not r.comment Is Nothing Then
                ' 如果单元格有注释,将其内容复制到新工作表的A列
                wsTarget.Cells(i, 1).Value = r.comment.Text
                ' 更新i以指向新行
                i = i + 1
            End If
        Next r
    
        ' 计算新工作表中最后一个非空单元格的行号
        lastRow = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row
    
        ' 可选:自动调整列宽以适应内容
        wsTarget.Columns("A").AutoFit
    
        ' 可选:清除新工作表中的空白单元格
        If lastRow < wsTarget.Rows.Count Then
            wsTarget.Range(wsTarget.Cells(lastRow + 1, 1), wsTarget.Cells(wsTarget.Rows.Count, 1)).ClearContents
        End If
    
        ' 可选:提示用户完成操作
        MsgBox "所有注释已成功复制到新工作表。", vbInformation, "完成"
    End Sub

    线程式批注和注释之间的区别 – Microsoft 支持

  • 分享几个比较有用的AI

    分享几个比较有用的AI

    ARC Lab

    腾讯ARC实验室推出的AI人像修复小工具

    ARC官网-腾讯 (tencent.com)

    image-20231030142537481

    修复人像、人物照片去背景(抠图),暂未开放API

    Claude

    App unavailable \ Anthropic

    Slack中的一个小工具,功能比肩Chat-GPT,未开放API

    image-20231030143325722

    需要注意的是已经停止了简中地区的注册,不过终归还是可以有办法使用的。

    image-20231030143352001

    腾讯智影

    腾讯智影-在线智能视频创作平台 (qq.com)

    image-20231030144600427

    一个影音类的AI,可以快速生成各类短视频、宣传视频等等。

    需要登陆,有5分钟的免费时长可用于测试效果,暂未开放API。

  • 修改Typora主题使用“霞骛文楷”字体

    修改Typora主题使用“霞骛文楷”字体

    之前分享了一份使用霞骛文楷字体的Typora主题,但和日常习惯使用的主题差异比较大,美观度欠佳。

    @include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);
    
    /* open-sans-regular - latin-ext_latin */
    @font-face {
        font-family: '霞鹜文楷';
        font-style: normal;
        font-weight: normal;
        /* src: local('霞鹜文楷'), local('霞鹜文楷'), url('./github/open-sans-v17-latin-ext_latin-regular.woff2') format('woff2'); */
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
      }
      /* open-sans-italic - latin-ext_latin */
      @font-face {
        font-family: '霞鹜文楷';
        font-style: italic;
        font-weight: normal;
        /* src: local('霞鹜文楷'), local('霞鹜文楷'), url('./github/open-sans-v17-latin-ext_latin-italic.woff2') format('woff2'); */
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
      }
      /* open-sans-700 - latin-ext_latin */
      @font-face {
        font-family: '霞鹜文楷';
        font-style: normal;
        font-weight: bold;
        /* src: local('霞鹜文楷'), local('霞鹜文楷'), url('./github/open-sans-v17-latin-ext_latin-700.woff2') format('woff2');  */
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
      }
      /* open-sans-700italic - latin-ext_latin */
      @font-face {
        font-family: '霞鹜文楷';
        font-style: italic;
        font-weight: bold;
        /* src: local('霞鹜文楷'), local('霞鹜文楷'), url('./github/open-sans-v17-latin-ext_latin-700italic.woff2') format('woff2'); */
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
      }
    
    html {
        font-size: 16px;
    }
    
    body {
        font-family: "霞鹜文楷","Hannotate SC","Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
        color: rgb(51, 51, 51);
        line-height: 1.6;
    }

    可以将以上代码替换到正在使用的主题CSS文件对应的位置,然后重启Typora实现更换字体。

  • 在Typora中使用“霞骛文楷”字体

    在Typora中使用“霞骛文楷”字体

    一直非常喜欢霞骛文楷的字体,这个站点为了使用这个字体甚至不惜牺牲了加载速度。现在终于找到了在Typora中使用这个字体的方法。

    步骤如下:

    • 在Typora的主题文件夹中新建一个==xiawu.css==文件;
    • 将以下代码复制到文件中保存;
    • 主题选择==xiawu==
    :root {
      /* dark color for background*/
      /* default color */
      --bg-color1: hsl(220, 13%, 18%);
      /* for most panel, context, header, etc */
      --bg-color2: rgb(33, 37, 43);
      /* for toc and table edit panel */
      --bg-color3: rgba(16, 17, 20, 0.5);
      /* for tips */
      --bg-color4: black;
      /* for blockquote, codeblock, input, etc */
      --bg-color5: rgb(29, 31, 35);
      /* light color for text and icon*/
      /* default color */
      --text-color1: hsl(220, 6%, 71%);
      /* for text on panel */
      --text-color2: rgb(220, 220, 220);
      /* for checkbox and radio */
      --text-color3: hsl(192, 6%, 40%);
      /* for tips */
      --text-color4: white;
      /* for focus mode */
      --text-color5: rgba(170, 178, 180, 0.5);
      /* link color */
      --link-color: rgb(197, 202, 210);
      /* table color */
      --table-border-color: rgb(100, 104, 116);
      --table-thead-color: rgb(31, 35, 40);
      --table-bg-color: rgb(40, 44, 52);
      --table-bg-darker-color: rgb(35, 40, 46);
      /* hover color */
      /* default hover background color */
      --hover-bg-color1: rgb(62, 66, 73);
      /* for input item */
      --hover-bg-color2: hsl(220, 9%, 14%);
      /* for button on toc and table edit panel */
      --hover-bg-color3: rgba(62, 66, 73, 0.8);
      /* default hover text color */
      --hover-text-color: white;
      /* active color */
      --active-color: var(--hover-bg-color1);
      /* input color */
      --input-color: rgb(29, 31, 35);
      /* menu divider color */
      /*   --menu-divider-color: rgb(95, 97, 101); */
      --menu-divider-color: hsl(220, 5%, 40%);
      /* scrollbar color */
      --scrollbar-thumb-color: var(--menu-divider-color);
      --scrollbar-track-color: rgba(95, 97, 101, 0.3);
      /* theme select color */
      --theme-select-color: rgba(255, 255, 255, 0.5);
      --button-color: rgb(62, 66, 73);
      --select-color: rgb(33, 37, 43);
      /* focus color */
      --focus-color: rgba(100, 100, 100, 0.8);
      --focus-ring-color: var(--focus-color);
      /* codeblock color */
      --code-red-color: hsl(355, 65%, 65%);
      --code-yellow-color: hsl(39, 67%, 69%);
      --code-cyan-color: hsl(187, 47%, 55%);
      --code-blue-color: hsl(207, 82%, 66%);
      --code-purple-color: hsl(286, 60%, 67%);
      --code-orange-color: hsl(29, 54%, 61%);
      --code-green-color: hsl(95, 38%, 62%);
      --code-grey-color: hsl(220, 9%, 55%);
    
      --code-select-bg-color: rgb(59,68,84);
      --code-cursor-color: hsl(220, 100%, 66%);
      /* implicit selecttion text bg color */
      --select-text-bg-color: rgb(64,72,89);
      /* implicit button color */
      --primary-color: var(--button-color);
      --primary-btn-border-color: transparent;
      --primary-btn-text-color: var(--text-color2);
      /* implicit sidebar color */
      --side-bar-bg-color: var(--bg-color2);
      --control-text-color: var(--text-color2);
      /* implicit text color */
      --text-color: var(--text-color1);
      /* implicit background color for setting menu */
      --bg-color: var(--bg-color1);
      /* implicit hover color */
      --item-hover-bg-color: var(--hover-bg-color1);
      --item-hover-text-color: var(--hover-text-color);
      /* implicit active color */
      --active-file-bg-color: var(--hover-bg-color);
      /* implicit mathjax edit panel background color */
      --rawblock-edit-panel-bd: var(--bg-color5);
      /* implicit focus mode color */
      --blur-text-color: var(--text-color5);
      /* implicit search result select color */
      --search-select-bg-color: rgb(56, 71, 95);
    
      --control-text-hover-color: var(--hover-text-color);
      /* implicit active file color in sidebar file menu treeview */
      --active-file-text-color: var(--hover-text-color);
      --active-file-border-color: var(--hover-text-color);
    
      --node-border: var(--menu-divider-color);
      --node-fill: var(--bg-color2);
      /* implicit border color in export menu of setting */
      --border-color: var(--menu-divider-color);
    }
    
    /* font */
    @font-face {
      font-family: "霞骛文楷","LXGW WenKai GB Screen", sans-serif;;
      font-style: normal;
      font-weight: normal;
      src: local("Open Sans Regular"), url("./onedark/400.woff") format("woff");
    }
    
    @font-face {
      font-family: "霞骛文楷","LXGW WenKai GB Screen", sans-serif;;
      font-style: italic;
      font-weight: normal;
      src: local("Open Sans Italic"), url("./onedark/400i.woff") format("woff");
    }
    
    @font-face {
      font-family: "霞骛文楷","LXGW WenKai GB Screen", sans-serif;;
      font-style: normal;
      font-weight: bold;
      src: local("Open Sans Bold"), url("./onedark/700.woff") format("woff");
    }
    
    @font-face {
      font-family: "霞骛文楷","LXGW WenKai GB Screen", sans-serif;;
      font-style: italic;
      font-weight: bold;
      src: local("Open Sans Bold Italic"), url("./onedark/700i.woff") format("woff");
    }
    
    /* basic style */
    html {
      font-size: 16px;
    }
    
    body {
      font-family: "霞骛文楷","LXGW WenKai GB Screen", sans-serif;, "Clear Sans", "Helvetica Neue", Helvetica, Arial,
        sans-serif;
      color: var(--text-color1);
      background: var(--bg-color1);
      line-height: 1.6;
    }
    
    /* text selection background color */
    .in-text-selection {
      background-color: --select-text-bg-color;
    }
    
    /* link */
    #write a:not([role="menuitem"]) {
      color: var(--link-color) !important;
    }
    
    #write a:not([role="menuitem"]):hover {
      color: var(--hover-text-color) !important;
    }
    
    /* h1-h6 */
    #write h1,
    #write h2,
    #write h3,
    #write h4,
    #write h5,
    #write h6 {
      margin-top: 0.5em;
      margin-bottom: 0em;
      line-height: 1em;
      text-shadow: 0px 0px 10px rgba(0, 0, 0, 0.8);
      padding-top: 0.3em;
    }
    
    #write h1 {
      font-size: 2.5em;
      padding-bottom: 0.5em;
      border-bottom: 3px double var(--text-color5);
    
    }
    
    /* #write h1:before {
      content: "\00A7  ";
    }
     */
    #write h2 {
      font-size: 2em;
      padding-bottom: 0.5em;
      border-bottom: 3px double var(--text-color5);
    }
    
    /* #write h2:before {
      content: "\00A7  ";
    }
     */
    #write h3 {
      font-size: 1.75em;
      padding-bottom: 0.5em;
      border-bottom: 1px solid var(--text-color5);
    }
    
    #write h4 {
      font-size: 1.55em;
    }
    
    #write h5 {
      font-size: 1.35em;
    }
    
    #write h6 {
      font-size: 1.2em;
    }
    
    /* horizontal divider */
    hr {
      height: 1px;
      background-color: var(--text-color5);
      border: 0px;
    }
    
    /* list */
    ul,
    ol {
      padding-left: 30px;
    }
    
    /* blockquote */
    blockquote {
      border-left: 4px solid var(--text-color1);
      padding: 4px 15px;
      color: var(--text-color1);
      background-color: var(--bg-color5);
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    blockquote blockquote {
      padding-right: 0em;
    }
    
    /* table */
    .md-rawblock > .md-rawblock-container table,
    .md-table-fig,
    .md-table-fig:active {
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    table thead tr {
      background-color: var(--table-thead-color);
    }
    
    table tr th {
      font-weight: bold;
      border-left: 1px solid var(--table-border-color);
      border-right: 1px solid var(--table-border-color);
      text-align: left;
      margin: 0;
      padding: 6px 13px;
    }
    
    table tbody tr {
      border-top: 1px solid var(--table-border-color);
      margin: 0;
      padding: 0;
    }
    
    table tbody tr:nth-child(2n) {
      background-color: var(--table-bg-darker-color);
    }
    
    table tbody tr:nth-child(2n + 1) {
      background-color: var(--table-bg-color);
    }
    
    table tr td {
      border-left: 1px solid var(--table-border-color);
      border-right: 1px solid var(--table-border-color);
      text-align: left;
      margin: 0;
      padding: 6px 13px;
    }
    
    table tr th:first-child,
    table tr td:first-child {
      border-left-width: 0px;
    }
    
    table tr th:last-child,
    table tr td:last-child {
      border-right-width: 0px;
    }
    
    /* table edit panel */
    .ty-table-edit {
      background-color: var(--bg-color3);
      border: 0px;
      border-radius: 6px;
      padding-top: 2px;
      padding-bottom: 2px;
      padding-left: 6px;
      padding-right: 6px;
      margin-top: -29px !important;
    }
    
    /* button on table edit panel */
    .ty-table-edit button {
      background-color: transparent;
      color: var(--text-color2);
      border: 0px;
      margin-left: 0px !important;
    }
    
    /* button hover on table edit panel */
    .ty-table-edit button:hover {
      background-color: var(--hover-bg-color3);
      color: var(--hover-text-color);
    }
    
    /* adjusting table panel */
    .popover {
      background-color: var(--bg-color2);
      box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
    }
    
    /* arrow of adjusting table panel */
    .popover.bottom > .arrow:after {
      border-bottom-color: var(--bg-color2);
    }
    
    /* divider in adjust table panel */
    .md-grid-board-wrap .popover-title {
      border-top-color: var(--menu-divider-color);
    }
    
    /* grid size */
    .md-grid-board a {
      width: 15px;
      height: 15px;
    }
    
    /* existing thread grid */
    .md-grid-board tr[row="1"] .md-grid-ext {
      background-color: rgb(60, 60, 60);
    }
    
    /* not existing thread grid */
    .md-grid-board tr[row="1"] {
      background-color: rgb(220, 220, 220);
    }
    
    /* existing grid */
    .md-grid-board .md-grid-ext {
      background-color: rgb(120, 120, 120);
    }
    
    /* selected thread grid */
    .md-grid-board tr[row="1"] a.md-active,
    .md-grid-board tr[row="1"] a:hover {
      background-color: rgb(60, 60, 60);
    }
    
    /* selected grid */
    .md-grid-board a.md-active,
    .md-grid-board a:hover {
      border-color: var(--menu-divider-color);
      background-color: rgb(120, 120, 120);
    }
    
    /* task */
    .md-task-list-item > input {
      margin-left: -1.3em;
    }
    
    /* footnote */
    sup.md-footnote {
      color: var(--text-color1);
      background-color: var(--bg-color2);
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* mathjax */
    /* .mathjax-block>.code-tooltip {
        bottom: .375rem;
    }
    .md-mathjax-midline {
        background: #fafafa;
    } */
    .md-inline-math script {
      color: var(--text-color1);
    }
    
    .on-focus-mode #write svg {
      opacity: 1;
    }
    
    .md-rawblock > .md-rawblock-container {
      transition: 0.5s;
    }
    
    .md-rawblock > .md-rawblock-tooltip {
      transition: 0.5s;
      display: block;
      visibility: hidden;
      opacity: 0;
    }
    
    .md-rawblock:hover > .md-rawblock-tooltip {
      transition: 0.5s;
      visibility: visible;
      opacity: 1;
      animation: none;
    }
    
    /* meta information of image */
    .md-image > .md-meta {
      border: 0px;
      padding: 2px 0px 0px 4px;
      font-size: 0.9em;
      color: var(--text-color1);
    }
    
    /* input */
    input {
      background-color: var(--input-color) !important;
      border: 0px !important;
      border-radius: 6px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* input hover */
    /* input:hover {
        background-color: var(--hover-bg-color2) !important;
    } */
    /* checkbox */
    input[type="checkbox"]:before {
      content: "";
      display: inline-block;
      width: 1.2rem;
      height: 1.2rem;
      vertical-align: middle;
      text-align: center;
      border: 0px;
      border-radius: 3px;
      background-color: var(--input-color);
      margin-top: -0.5rem;
      margin-left: -0.2rem;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* checkbox hover */
    input[type="checkbox"]:not([disabled]):not(:checked):hover:before {
      content: "\2713";
      font-size: 0.9rem;
      line-height: 1.2rem;
      color: var(--text-color3);
    }
    
    /* checkbox checked*/
    input[type="checkbox"]:checked:before {
      content: "\2713";
      font-size: 0.9rem;
      line-height: 1.2rem;
      color: var(--text-color2);
    }
    
    /* checkbox checked hover*/
    input[type="checkbox"]:checked:hover:before {
      content: "\2713";
      font-size: 0.9rem;
      line-height: 1.2rem;
      color: var(--hover-text-color);
    }
    
    /* radio */
    input[type="radio"]:before {
      content: "";
      display: inline-block;
      width: 1.2rem;
      height: 1.2rem;
      vertical-align: middle;
      text-align: center;
      border: 0px;
      border-radius: 0.55rem;
      background-color: var(--input-color);
      margin-top: -0.4rem;
      margin-left: -0.1rem;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* radio hover */
    input[type="radio"]:not([disabled]):not(:checked):hover:before {
      content: "\25CF";
      font-size: 1rem;
      line-height: 1rem;
      color: var(--text-color3);
    }
    
    /* radio checked */
    input[type="radio"]:checked:before {
      content: "\25CF";
      font-size: 1rem;
      line-height: 1rem;
      color: var(--text-color2);
    }
    
    /* radio checked hover*/
    input[type="radio"]:checked:before {
      content: "\25CF";
      font-size: 1rem;
      line-height: 1rem;
      color: var(--hover-text-color);
    }
    
    /* default focus style */
    :focus {
      outline-color: var(--focus-color);
    }
    
    /* exit source view button */
    .typora-sourceview-on #toggle-sourceview-btn {
      background-color: var(--bg-color2);
    }
    
    .typora-sourceview-on #toggle-sourceview-btn:hover {
      background-color: var(--hover-bg-color1);
    }
    
    /* shadow for image item*/
    .md-image img {
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* toc */
    .md-toc {
      background-color: var(--bg-color3);
      border-radius: 6px;
      padding: 0px 0px 0px 0px;
      margin: 0px 0px 0px 0px;
      border: 0px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* toc content */
    .md-toc-content {
      padding-top: 5px;
      padding-bottom: 8px;
      margin-top: 15px;
      margin-bottom: 0px;
    }
    
    /* remove outline when toc is selected */
    .md-toc:focus .md-toc-content {
      border: 0px;
      margin: 0px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* toc item */
    .md-toc-item {
      margin: 2px;
    }
    
    /* toc edit panel */
    #write div.md-toc-tooltip {
      border: 0px;
      padding-left: 10px;
      padding-right: 10px;
      background-color: var(--bg-color3);
      border-top-left-radius: 6px;
      border-top-right-radius: 6px;
      opacity: 0;
      visibility: hidden;
      display: block !important;
      transition: 0.3s;
    }
    
    #write .md-toc:focus div.md-toc-tooltip {
      visibility: visible;
      opacity: 1;
    }
    
    #write .md-toc:focus {
      border-top-left-radius: 0px;
      border-top-right-radius: 0px;
    }
    
    /* toc delete button */
    .md-delete-toc {
      background-color: transparent;
    }
    
    /* html block */
    .md-htmlblock:hover .md-htmlblock-container {
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
      border-radius: 6px;
      border-top-right-radius: 0px;
    }
    
    /* search panel */
    #md-searchpanel {
      background-color: var(--bg-color2);
      color: var(--text-color2);
      box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.5);
    }
    
    /* ignore case button and find whole word button */
    .searchpanel-search-option-btn {
      border: 0px;
    }
    
    /* button on search panel */
    #md-searchpanel .btn:hover {
      color: var(--hover-text-color);
      background-color: var(--hover-bg-color1) !important;
    }
    
    /* remove shadow around input in search panel*/
    #md-searchpanel input {
      box-shadow: none;
    }
    
    /* search option button hover */
    .searchpanel-search-option-btn:not(.active):hover {
      color: var(--hover-text-color);
      background-color: var(--hover-bg-color1);
    }
    
    /* close button in search panel */
    #md-searchpanel .input-group-addon.close-btn {
      padding-left: 16px;
      padding-right: 16px;
    }
    
    /* replaceall button */
    .ty-replace-panel-row #search-panel-replaceall-btn {
      padding-left: 8px;
      padding-right: 6px !important;
    }
    
    /* replace button */
    .ty-replace-panel-row #search-panel-replace-btn {
      padding-left: 16px;
      padding-right: 16px;
    }
    
    /* sidebar */
    .sidebar-menu {
      color: var(--text-color2);
    }
    
    /* sidebar shadow */
    #typora-sidebar,
    .typora-node #typora-sidebar {
      box-shadow: 3px 0px 10px rgba(0, 0, 0, 0.5);
    }
    
    /* divider between file item and search */
    .ty-sidebar-search-panel {
      border-color: var(--menu-divider-color);
    }
    
    /* file item in sidebar */
    #file-library .file-list-item {
      border-bottom: 0px;
      opacity: 1;
      border-left: 4px solid;
      border-color: var(--bg-color2);
    }
    
    /* file item hover */
    #file-library .file-list-item:hover {
      background-color: var(--hover-bg-color1);
      color: var(--hover-text-color);
      border-color: var(--hover-bg-color1);
    }
    
    /* file item active */
    #file-library .file-list-item.active {
      background-color: var(--hover-bg-color1);
      color: var(--hover-text-color);
      border-color: var(--hover-text-color);
    }
    
    /* suffix of file item*/
    .file-list-item-file-ext-part {
      opacity: 0.8;
    }
    
    /* sidebar file menu */
    #sidebar-files-menu {
      border: 0px;
      box-shadow: -2px -2px 10px rgba(0, 0, 0, 0.5);
    }
    
    /* sidebar file menu item */
    .dropdown-menu > li > a {
      color: var(--text-color2);
    }
    
    .dropdown-menu > li > a:hover {
      color: var(--hover-text-color);
    }
    
    /* sidebar file menu close button */
    #close-sidebar-menu-btn:hover {
      color: var(--hover-text-color);
    }
    
    /* sidebar file nemu divider */
    #sidebar-files-menu > .show + .menuitem-group-label.show {
      border-color: var(--menu-divider-color);
    }
    
    /* sidebar osx tab */
    .html-for-mac .sidebar-osx-tab > .sidebar-tabs {
      border: 0px;
      box-shadow: 0 4px 10px -5px rgba(0, 0, 0, 0.5);
    }
    
    .html-for-mac .sidebar-content {
      z-index: -1; /* so that the background doesn't overlap with the shadow */
    }
    
    /* sidebar footer */
    .sidebar-footer {
      border: 0px;
      box-shadow: 0 -4px 10px -5px rgba(0, 0, 0, 0.5);
    }
    
    /* remove outline when file item in treeview is selected*/
    .file-library-node:not(.file-node-root):focus > .file-node-content {
      outline: none;
    }
    
    /* sort button on sidebar file menu */
    .ty-side-sort-btn.active,
    .ty-side-sort-btn:hover {
      color: var(--hover-text-color);
    }
    
    /* setting */
    /* header in setting */
    .window-header {
      box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.5) !important;
    }
    
    /* sidebar in setting */
    .sidebar {
      background-color: var(--bg-color2) !important;
      box-shadow: 3px 0px 10px rgba(0, 0, 0, 0.5);
    }
    
    .list-group-content {
      margin-left: 10px !important;
    }
    
    /* sidebar button in setting menu */
    .nav-group-item {
      color: var(--text-color2) !important;
      border-top-left-radius: 6px !important;
      border-bottom-left-radius: 6px !important;
      border-top-right-radius: 0px !important;
      border-bottom-right-radius: 0px !important;
    }
    
    /* sidebar button hover in setting menu */
    .nav-group-item:hover,
    .nav-group-item:active,
    .nav-group-item.active {
      background-color: var(--hover-bg-color1) !important;
      color: var(--hover-text-color) !important;
    }
    
    /* remove up and down button from number type input*/
    input[type="number"]::-webkit-outer-spin-button,
    input[type="number"]::-webkit-inner-spin-button {
      -webkit-appearance: none !important;
    }
    
    /* the indent example in setting.editor */
    div[data-index="2"] .label-input-group td:last-child div {
      border: 0px !important;
      border-radius: 6px;
      background-color: var(--bg-color5);
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
      margin: 10px !important;
    }
    
    /* button in setting menu */
    .ty-preferences button.btn-default {
      border: 0px;
      background-color: var(--bg-color5);
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
      border-radius: 6px;
    }
    
    /* button hover in setting menu */
    .ty-preferences .btn-default:not([disabled]):hover {
      background-color: var(--hover-bg-color1) !important;
    }
    
    /* return button in setting menu */
    .window-header button:hover {
      color: var(--text-color2) !important;
    }
    
    /* search input in setting menu */
    .search-input {
      border-top-left-radius: 6px !important;
      border-bottom-left-radius: 6px !important;
      border-top-right-radius: 0px !important;
      border-bottom-right-radius: 0px !important;
      margin-top: 10px !important;
      margin-bottom: 10px !important;
      margin-left: 10px !important;
    }
    
    .search-input:focus {
      border: none !important;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2) !important;
    }
    
    /* select item (mostly in setting menu) */
    select {
      border: 0px;
      border-radius: 6px;
      background-color: var(--input-color) !important;
      padding-top: 5px !important;
      padding-bottom: 5px !important;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* enabled select item hover */
    select:not([disabled]):hover {
      color: var(--text-color2);
      opacity: 1;
    }
    
    /* disabled select item hover */
    select[disabled]:hover {
      opacity: 0.5;
    }
    
    /* mega menu */
    .megamenu-content,
    .megamenu-opened header {
      background: var(--bg-color1);
    }
    
    .megamenu-content {
      display: block;
      visibility: hidden;
      opacity: 0;
      transition: 0.3s;
    }
    
    .megamenu-opened .megamenu-content {
      visibility: visible;
      opacity: 1;
      animation: none;
    }
    
    /* mega menu sidebar*/
    .megamenu-menu {
      background-color: var(--bg-color2);
      box-shadow: 3px 0px 10px rgba(0, 0, 0, 0.5);
    }
    
    /* return button in mega menu */
    #megamenu-menu-sidebar .menu-style-btn {
      border: 0px;
    }
    
    /* remove divider in mega menu */
    .megamenu-menu-header {
      border-color: var(--menu-divider-color);
    }
    
    /* return button color in mega menu */
    .megamenu-menu-header #megamenu-menu-header-title {
      color: var(--text-color2);
    }
    
    /* return button hover in mega menu */
    .megamenu-menu-header:hover {
      background-color: var(--hover-bg-color1);
    }
    
    /* return button hover in mega menu */
    .megamenu-menu-header:hover #megamenu-menu-header-title {
      color: var(--hover-text-color);
    }
    
    /* long button in mega menu */
    .long-btn {
      border: 0px;
      background-color: var(--bg-color5);
      color: var(--text-color1);
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
      margin-bottom: 10px;
      margin-left: 10px;
    }
    
    /* recent file in mega menu */
    #recent-file-panel {
      padding: 10px;
    }
    
    #recent-document-table {
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    #recent-file-panel-action-btn {
      background: var(--bg-color5);
      border: 0px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    #recent-file-panel thead tr {
      background-color: var(--table-thead-color);
    }
    
    #recent-file-panel tbody tr:nth-child(2n) {
      background-color: var(--table-bg-darker-color);
    }
    
    #recent-file-panel tbody tr:nth-child(2n + 1) {
      background-color: var(--table-bg-color);
    }
    
    #recent-file-panel-action-btn:hover {
      background-color: var(--hover-bg-color1);
      color: var(--text-color2);
    }
    
    /* theme preview */
    .theme-preview-div {
      box-shadow: 10px 0px 10px rgba(0, 0, 0, 0.8);
    }
    
    /* theme preview hover */
    .theme-preview-div:hover {
      border-color: var(--theme-select-color);
    }
    
    /* context menu and spell check panel */
    .dropdown-menu:not(.megamenu-menu-list) {
      background-color: var(--bg-color2);
      color: var(--text-color2);
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);
    }
    
    /* divider in context menu and spell check panel */
    .dropdown-menu .divider {
      border-color: var(--menu-divider-color);
    }
    
    /* remove divider outline */
    .dropdown-menu {
      border: 0px;
    }
    
    /* footer */
    footer.ty-footer {
      border-top: 0px !important;
      background-color: var(--bg-color2) !important;
      /*     color: var(--text-color2); */
      box-shadow: 0px -2px 10px rgba(0, 0, 0, 0.5);
    }
    
    /* footer item */
    .footer-item,
    #outline-btn,
    #footer-word-count {
      color: var(--text-color2);
      opacity: 1;
    }
    
    /* footer item hover */
    .footer-item:hover,
    #outline-btn:hover {
      background-color: var(--hover-bg-color1);
      color: var(--hover-text-color);
    }
    
    /* button on some panel */
    .btn {
      border: 0px;
      outline-width: 0px !important;
    }
    
    .btn:hover {
      background-color: var(--hover-bg-color1);
      color: var(--hover-text-color);
    }
    
    /* traffic button hover */
    #top-titlebar .toolbar-icon.btn:hover {
      color: var(--text-color2);
      background-color: var(--hover-bg-color1);
    }
    
    /* traffic button hover */
    #top-titlebar #w-close:hover {
      background-color: #e81123 !important;
    }
    
    /* adjust maxmize restore button height */
    .typora-maxmized #w-restore {
      height: 24px;
    }
    
    /* left upper button hover */
    .ty-menu-btn-area:hover .ty-menu-btn-area-sub {
      color: var(--text-color2) !important;
    }
    
    /* scrollbar */
    ::-webkit-scrollbar {
      width: 8px;
      padding-right: 10px;
      background-color: rgba(0, 0, 0, 0);
    }
    
    /* scrollbar track */
    ::-webkit-scrollbar-track:hover {
      background-color: var(--scrollbar-track-color) !important;
      border-radius: 4px;
    }
    
    /* scrollbar thumb */
    ::-webkit-scrollbar-thumb,
    ::-webkit-scrollbar-thumb:active {
      background-color: var(--scrollbar-thumb-color) !important;
      border-radius: 4px;
    }
    
    /* tip when hover on a button */
    #ty-tooltip {
      background-color: var(--bg-color4);
      color: var(--text-color4);
    }
    
    /* item container hover in context menu */
    .menu-item-container:hover {
      background-color: var(--bg-color2);
    }
    
    /* item in context menu */
    .menu-item-container .menu-style-btn {
      border-color: var(--menu-divider-color);
    }
    
    /* mathjax edit panel*/
    .md-rawblock-before {
      border-top-left-radius: 6px;
    }
    
    .md-rawblock-after {
      border-bottom-left-radius: 6px;
      border-bottom-right-radius: 6px;
    }
    
    /* mathjax focus */
    .MathJax_SVG:focus {
      outline: none;
      background-color: transparent;
    }
    
    /* notification panel */
    #md-notification {
      background-color: var(--bg-color2) !important;
      color: var(--text-color2);
      box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.5);
    }
    
    #ty-surpress-mode-warning-close-btn {
      float: unset !important;
      margin: 0px !important;
    }
    
    .unibody-window #md-notification p {
      bottom: -4px !important;
    }
    
    /* inline codeblock */
    code {
      font-size: 0.9em;
      background-color: var(--bg-color5);
      border-radius: 6px;
      padding: 4px 4px 4px 4px;
      margin: 0px 0px 0px 0px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* codeblock */
    .md-fences,
    .md-fences:active {
      background-color: var(--bg-color5);
      border-radius: 6px;
      padding: 8px 4px 8px 4px !important;
      margin-top: 15px;
      margin-bottom: 15px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    .md-fences .code-tooltip {
      display: block !important;
      visibility: hidden;
      opacity: 0;
      transition: 0.3s;
      background-color: var(--bg-color3);
    }
    
    .md-fences.md-focus .code-tooltip {
      opacity: 1;
      visibility: visible;
    }
    
    .CodeMirror-lines {
      padding-left: 4px;
    }
    
    /* selected text and cursor */
    .CodeMirror-selected,
    .CodeMirror-selectedtext {
      background: var(--code-select-bg-color) !important;
    }
    
    .CodeMirror div.CodeMirror-cursor {
      border-left: 2px solid var(--code-cursor-color);
      z-index: 3;
    }
    
    .CodeMirror.cm-s-typora-default div.CodeMirror-cursor {
      border-left: 3px solid var(--code-cursor-color);
    }
    
    /* highlight */
    .cm-s-inner .cm-property {
      color: var(--code-blue-color) !important;
    }
    
    .cm-s-inner .cm-operator {
      color: var(--code-cyan-color) !important;
    }
    
    .cm-s-inner .cm-keyword {
      color: var(--code-purple-color) !important;
    }
    
    .cm-s-inner .cm-tag {
      color: var(--code-red-color) !important;
    }
    
    .cm-s-inner .cm-attribute {
      color: var(--code-orange-color) !important;
    }
    
    .cm-s-inner .cm-string {
      color: var(--code-green-color) !important;
    }
    
    .cm-s-inner .cm-comment,
    .cm-s-inner.cm-comment {
      /*     color: var(--code-orange-color) !important; */
      color: var(--code-grey-color) !important;
      font-style: italic;
    }
    
    .cm-s-inner .cm-header,
    .cm-s-inner .cm-def,
    .cm-s-inner.cm-header,
    .cm-s-inner.cm-def {
      /*     color: var(--code-red-color) !important; */
      color: var(--code-blue-color) !important;
    }
    
    .cm-s-inner .cm-meta,
    .cm-s-inner .cm-qualifier {
      color: var(--code-red-color) !important;
    }
    
    .cm-s-inner .cm-builtin {
      /*     color: var(--code-blue-color) !important; */
      color: var(--code-cyan-color) !important;
    }
    
    .cm-s-inner .cm-bracket {
      color: var(--text-color1) !important;
    }
    
    .cm-s-inner .cm-number {
      color: var(--code-orange-color) !important;
    }
    
    .cm-s-inner .cm-variable {
      color: var(--text-color1) !important;
    }
    
    .cm-s-inner .cm-variable-2 {
      /*     color: var(--code-blue-color) !important; */
      color: var(--code-yellow-color) !important;
    }
    
    .cm-s-typora-default .cm-header,
    .cm-s-typora-default .cm-property {
      color: var(--code-red-color) !important;
    }
    
    .cm-s-typora-default .cm-string {
      /*     color: var(--code-blue-color); */
      color: var(--code-purple-color);
    }
    
    .cm-s-typora-default .cm-atom {
      color: var(--code-grey-color);
      font-style: italic;
    }
    
    .cm-s-typora-default .cm-number {
      color: var(--code-orange-color);
      font-style: normal !important;
    }
    
    .cm-s-typora-default .cm-link {
      color: var(--code-blue-color);
    }
    
    .cm-s-typora-default .CodeMirror-activeline-background {
      background: var(--hover-bg-color1);
    }
    
    .cm-s-typora-default .cm-comment,
    .cm-s-typora-default .cm-code {
      color: var(--code-purple-color);
    }
    
    .cm-s-typora-default .cm-tag {
      /*     color: var(--code-red-color); */
      color: var(--code-blue-color);
    }
    
    .cm-s-typora-default .cm-strong,
    .cm-s-typora-default .cm-em,
    .cm-s-typora-default .cm-del {
      /*     color: var(--code-green-color); */
      color: var(--code-orange-color);
    }
    
    .cm-s-typora-default .cm-block-start.cm-variable-2 {
      /*     color: var(--code-orange-color); */
      color: var(--code-red-color);
    }
    
    .cm-formatting-task .cm-formatting-task {
      color: var(--code-red-color);
    }
    
    /* math formula tag */
    .cm-s-inner .cm-atom,
    .cm-s-inner.cm-atom {
      color: var(--code-blue-color);
    }
    
    /* inline codeblock in source mode */
    .cm-s-typora-default .cm-comment {
      color: var(--code-green-color);
    }
    
    /* horizontal divider when language is markdown */
    .cm-s-inner .cm-hr {
      color: var(--text-color1);
    }
    
    /* variable type when language is c/cpp */
    .cm-s-inner .cm-variable-3 {
      color: var(--code-purple-color);
    }
    
    /* in pie chart and flowchart */
    .cm-s-inner .cm-quote,
    .cm-s-inner.cm-quote {
      color: var(--code-green-color);
    }
    
    /* unknown highlight keyword */
    .cm-s-inner .cm-link {
      color: var(--code-blue-color);
    }
    
    .cm-s-inner .cm-negative {
      color: #d95050;
    }
    
    .cm-s-inner .cm-positive {
      color: #50e650;
    }
    
    .cm-s-inner .cm-string-2 {
      color: #f50;
    }
    
    .CodeMirror-gutters {
      border-right: none;
    }
    
    /* focus mode */
    .on-focus-mode .md-end-block:not(.md-focus) .md-toc-item {
      opacity: 0.5;
    }
    
    .on-focus-mode #write h1:not(.md-focus):before {
      opacity: 0.5;
    }
    
    .on-focus-mode #write h2:not(.md-focus):before {
      opacity: 0.5;
    }
    
    .on-focus-mode #write h1:not(.md-focus) {
      border-color: var(--text-color5);
    }
    
    .on-focus-mode #write h2:not(.md-focus) {
      border-color: var(--text-color5);
    }
    
    .on-focus-mode #write h3:not(.md-focus) {
      border-color: var(--text-color5);
    }
    
    /* YAML block */
    pre.md-meta-block,
    pre.md-meta-block:active {
      background-color: var(--bg-color5);
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
      border-radius: 6px;
      padding: 10px;
      padding-left: 20px;
      padding-right: 20px;
    }
    
    /* switch between different mode */
    #typora-source {
      display: block !important;
      visibility: hidden;
      opacity: 0;
      transition: 0.3s;
    }
    
    .typora-sourceview-on #typora-source {
      visibility: visible;
      opacity: 1;
    }
    
    #typora-source .CodeMirror-lines {
      max-width: 1200px;
      padding-left: 70px;
      padding-right: 70px;
    }
    
    #write {
      display: block !important;
      visibility: visible;
      opacity: 1;
      transition: 0.3s;
      max-width: 1200px;
      padding-left: 70px;
      padding-right: 70px;
    }
    
    .typora-sourceview-on #write {
      visibility: hidden;
      opacity: 0;
    }
    
    /* #md-searchpanel {
        visibility: hidden;
        opacity: 0;
        transition: 0.3s !important;
    }
    
    .on-search-panel-open #md-searchpanel {
        visibility: visible;
        opacity: 1;
    } */
    
    .uni-preference-panel {
      display: block;
      visibility: hidden;
      opacity: 0;
      transition: 0.3s;
    }
    
    .show-preference-panel .uni-preference-panel {
      visibility: visible;
      opacity: 1;
    }
    
    /* quick open menu */
    .typora-quick-open-item:hover {
      background-color: var(--hover-bg-color1);
      color: var(--hover-text-color);
    }
    
    /* insert table panel */
    .modal-content {
      border: 0px !important;
      border-radius: 6px !important;
    }
    
    .modal-content .btn-primary {
      background-color: transparent;
      color: var(--text-color1);
      outline-width: 0px;
      border: none;
      border-radius: 3px;
    }
    
    .modal-content .btn-default {
      background-color: var(--hover-bg-color1);
      border: none;
      border-radius: 3px;
    }
    
    .modal-content .btn-primary:hover {
      color: var(--hover-text-color);
      background-color: var(--hover-bg-color1);
    }
    
    .modal-content .form-control,
    .modal-content .form-control:focus {
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    /* zoom  */
    #zoom-hint #zoom-hint-reset {
      color: var(--text-color1);
    }
    
    #zoom-hint .zoom-hint-button:hover {
      color: var(--hover-text-color) !important;
    }
    
    /* word count */
    #footer-word-count-info {
      display: block;
      visibility: hidden;
      opacity: 0;
      transition: 0.3s;
    }
    
    .ty-show-word-count #footer-word-count-info {
      visibility: visible;
      opacity: 1;
    }
    
    /* spell check */
    #spell-check-panel {
      display: block;
      visibility: hidden;
      opacity: 0;
      transition: 0.3s;
    }
    
    .ty-show-spell-check #spell-check-panel {
      visibility: visible;
      opacity: 1;
    }
    
    /* search result */
    .md-search-select {
      border: 2px solid rgb(69, 125, 255);
      box-sizing: content-box;
      color: var(--text-color1) !important;
    }
    
    .md-search-hit {
      background-color: var(--search-select-bg-color);
    }
    
    /* search panel message */
    #searchpanel-msg {
      background-color: var(--bg-color2);
      color: var(--text-color2);
    }
    
    .searchpanel-msg-btn:hover {
      background-color: var(--hover-bg-color1);
      color: var(--hover-text-color);
    }
    
    /* language selection for codeblock */
    .auto-suggest-container {
      border: 0px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
      background-color: var(--bg-color2);
    }
    
    /* sidebar outline item hover and active */
    .outline-item:hover {
      color: var(--hover-text-color);
    }
    
    .outline-label:hover {
      text-decoration: none;
    }
    
    .pin-outline .outline-active {
      color: var(--hover-text-color);
    }
    
    /* sidebar title hover */
    .info-panel-tab:hover {
      color: var(--hover-text-color) !important;
    }
    
    /* active file in sidebar file menu treeview */
    .file-tree-node.active > .file-node-background {
      background-color: var(--hover-bg-color1);
    }
    
    /* hover file in sidebar file menu treeview */
    .file-node-content:hover {
      cursor: pointer;
    }
    
    /* saved button in megamenu */
    #m-saved:hover {
      background-color: var(--bg-color2);
      color: var(--text-color2);
      cursor: default;
    }
    
    /* mermaid flowchart */
    .node rect,
    .node circle,
    .node ellipse,
    .node polygon,
    .node path {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .edgePath .path {
      stroke: var(--menu-divider-color) !important;
    }
    
    .edgePath .arrowheadPath {
      fill: var(--menu-divider-color) !important;
    }
    
    .label {
      color: var(--text-color1) !important;
    }
    
    .edgeLabel rect {
      fill: transparent !important;
    }
    
    .cluster rect {
      fill: var(--bg-color5) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    /* mermaid sequence*/
    rect.actor {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    text.actor tspan {
      fill: var(--text-color1) !important;
    }
    
    #crosshead path{
      fill: var(--menu-divider-color) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    #arrowhead path{
      fill: var(--menu-divider-color) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .messageLine0,
    .messageLine1 {
      stroke: var(--menu-divider-color) !important;
    }
    
    .messageText {
      fill: var(--text-color1) !important;
    }
    
    rect[class*="activation"] {
      fill: var(--bg-color2) !important;
    }
    
    .actor-line {
      stroke-width: 1px !important;
    }
    
    .labelBox {
      fill: var(--bg-color2) !important;
      stroke: rgb(150, 150, 150) !important;
    }
    
    .labelText {
      fill: var(--text-color1) !important;
    }
    
    .loopText,
    .loopText tspan
    {
      fill: var(--text-color1) !important;
    }
    
    .loopLine {
      stroke: rgb(180, 180, 180) !important;
    }
    
    .note {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .noteText tspan {
      fill: var(--text-color1) !important;
    }
    
    rect.rect {
      fill: var(--bg-color3);
    }
    
    /* mermaid class */
    g.classGroup text {
      fill: var(--text-color1) !important;
    }
    
    g.classGroup rect {
      stroke: var(--menu-divider-color) !important;
      fill: var(--bg-color2) !important;
    }
    
    g.classGroup line {
      stroke: var(--menu-divider-color) !important;
    }
    
    .classLabel .label {
      fill: var(--text-color1) !important;
    }
    
    .relation {
      stroke: var(--menu-divider-color) !important;
    }
    
    #compositionStart path,
    #compositionEnd path,
    #aggregationStart path,
    #aggregationEnd path,
    #dependencyStart path,
    #dependencyStart path,
    #extensionStart path,
    #extensionEnd path{
      fill: var(--menu-divider-color) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .cardinality text {
      fill: var(--text-color1) !important;
    }
    
    .classLabel rect {
      fill: var(--bg-color3) !important;
    }
    
    /* mermaid state v1 */
    .stateGroup rect,
    .stateGroup line {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .stateGroup text {
      fill: var(--text-color1) !important;
    }
    
    .stateGroup circle {
      fill: var(--bg-color4) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .stateGroup .composit {
      /*   fill: rgb(36,40,47) !important; */
      fill: hsl(218, 13%, 17%) !important;
    }
    
    .stateGroup .alt-composit {
      /*   fill: rgb(36,40,47) !important; */
      fill: hsl(218, 13%, 16.5%) !important;
    }
    
    .state-note rect {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .state-note text {
      fill: var(--text-color1) !important;
    }
    
    .stateLabel text {
      fill: var(--text-color1) !important;
    }
    
    .stateLabel rect {
      fill: var(--bg-color3) !important;
    }
    
    #dependencyEnd {
      fill: var(--menu-divider-color) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    /* mermaid state v2 */
    circle.state-start {
      fill: var(--bg-color4) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    circle.state-end {
      stroke: var(--menu-divider-color) !important;
      fill: var(--bg-color4) !important;
    }
    
    .divider {
      stroke: var(--menu-divider-color) !important;
      fill: var(--bg-color5) !important;
      fill: hsl(218, 13%, 13.5%) !important;
    }
    
    rect.fork-join {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .title-state {
      fill: var(--bg-color2) !important;
    }
    
    .statediagram-cluster .outer {
      fill: var(--bg-color3) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .cluster-label span {
      color: var(--text-color1);
    }
    
    .statediagram-cluster .inner {
      /*   fill: var(--bg-color2) !important; */
      fill: hsl(218, 13%, 16.5%) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .statediagram-cluster-alt .inner {
      /*   fill: var(--bg-color5) !important; */
      fill: hsl(218, 13%, 16%) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .transition {
      stroke: var(--menu-divider-color) !important;
    }
    
    #statediagram-barbEnd {
      fill: var(--menu-divider-color) !important;
    }
    
    /* mermaid erDiagram */
    rect.er.entityBox {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    text.er.entityLabel {
      fill: var(--text-color1) !important;
    }
    
    #ONLY_ONE_START path,
    #ONLY_ONE_END path,
    #ZERO_OR_ONE_START path,
    #ZERO_OR_ONE_END path,
    #ONE_OR_MORE_START path,
    #ONE_OR_MORE_END path,
    #ZERO_OR_MORE_START path,
    #ZERO_OR_MORE_END path {
      stroke: var(--menu-divider-color) !important;
    }
    
    #ZERO_OR_ONE_START circle,
    #ZERO_OR_ONE_END circle,
    #ZERO_OR_MORE_START circle,
    #ZERO_OR_MORE_END circle {
      fill: var(--bg-color) !important;
    }
    
    path.er.relationshipLine {
      stroke: var(--menu-divider-color) !important;
    }
    
    rect.er.relationshipLabelBox {
      fill: var(--bg-color3) !important;
    }
    
    text.er.relationshipLabel {
      fill: var(--text-color1) !important;
    }
    
    /* mermaid journey */
    .journey-section {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
    }
    
    .task {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
      stroke-width: 1px !important;
    }
    
    #arrowhead {
      fill: var(--menu-divider-color) !important;
      stroke: var(--menu-divider-color) !important;
      stroke-width: 0.3px !important;
    }
    
    text.legend {
      fill: var(--text-color1) !important;
    }
    
    pre[mermaid-type="journey"] svg > line {
      stroke: var(--menu-divider-color) !important;
      stroke-width: 2px !important;
    }
    
    pre[mermaid-type="journey"] svg > text {
      fill: var(--text-color1) !important;
    }
    
    .task-line {
      stroke: var(--menu-divider-color) !important;
    }
    
    circle.face {
      fill: var(--bg-color1) !important;
      stroke: var(--text-color1) !important;
    }
    
    circle.face + g > circle {
      fill: var(--text-color1) !important;
      stroke: var(--text-color1) !important;
    }
    
    path.mouth,
    line.mouth {
      stroke: var(--text-color1) !important;
    }
    
    /* mermaid gantt */
    text.sectionTitle tspan{
      fill: var(--text-color1) !important;
    }
    
    .section0,
    .section2 {
      fill: var(--bg-color4) !important;
    }
    
    .section1,
    .section3 {
      fill: var(--table-bg-color) !important;
    }
    
    .task0,
    .task1,
    .task2,
    .task3 {
      fill: rgb(80, 84, 90) !important;
      stroke: rgb(80, 84, 90) !important;
    }
    
    taskText0,
    .taskText1,
    .taskText2,
    .taskText3 {
      fill: var(--text-color2) !important;
    }
    
    .active0,
    .active1,
    .active2,
    .active3 {
      fill: rgb(100, 104, 110) !important;
      stroke: rgb(100, 104, 110) !important;
    }
    
    .activeText0,
    .activeText1,
    .activeText2,
    .activeText3 {
      fill: var(--text-color2) !important;
    }
    
    .done0,
    .done1,
    .done2,
    .done3 {
      fill: rgb(48, 51, 58) !important;
      stroke: rgb(48, 51, 58) !important;
    }
    
    .crit0,
    .crit1,
    .crit2,
    .crit3 {
      fill: rgb(150, 150, 150) !important;
      stroke: var(--text-color1) !important;
    }
    
    .activeCrit0,
    .activeCrit1,
    .activeCrit2,
    .activeCrit3 {
      fill: rgb(100, 104, 110) !important;
      stroke: var(--text-color1) !important;
    }
    
    .doneCrit0,
    .doneCrit1,
    .doneCrit2,
    .doneCrit3 {
      fill: rgb(48, 51, 58) !important;
      stroke: var(--text-color1) !important;
    }
    
    .taskTextOutside0,
    .taskTextOutside1,
    .taskTextOutside2,
    .taskTextOutside3 {
      fill: var(--text-color1) !important;
    }
    
    .grid text {
      fill: var(--text-color1) !important;
    }
    
    .today {
      stroke: var(--text-color1) !important;
    }
    
    /* mermaid pie chart */
    .pieTitleText {
      fill: var(--text-color1) !important;
    }
    
    
    g.legend > text {
      fill: var(--text-color1) !important;
    }
    
    g.legend > rect {
      stroke: var(--bg-color) !important;
    }
    
    g > path {
      stroke: var(--bg-color) !important;
    }
    
    g > text.slice {
      fill: var(--bg-color) !important;
    }
    
    /* flow diagram */
    .md-fences[lang="flow"] .md-diagram-panel-preview rect {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
      stroke-width: 1.2 !important;
    }
    
    .md-fences[lang="flow"] .md-diagram-panel-preview path {
      stroke: var(--menu-divider-color) !important;
      stroke-width: 1.2 !important;
    }
    
    .md-fences[lang="flow"] #cond {
      fill: var(--bg-color2) !important;
    }
    
    /* sequence diagram */
    .md-fences[lang="sequence"] .md-diagram-panel-preview rect:not([fill="none"]) {
      fill: var(--bg-color2) !important;
      stroke: var(--menu-divider-color) !important;
      stroke-width: 1.2 !important;
    }
    
    .md-fences[lang="sequence"] .md-diagram-panel-preview path {
      fill: var(--menu-divider-color) !important;
      stroke: var(--menu-divider-color) !important;
      stroke-width: 1.2 !important;
    }
    
    .md-fences[lang="sequence"] text,
    .md-fences[lang="flow"] text {
      font-family: "Consolas" !important;
    }
    
    /* remove box shadow when not edit graph */
    .md-fences[lang="sequence"]:not(.md-focus),
    .md-fences[lang="mermaid"]:not(.md-focus),
    .md-fences[lang="flow"]:not(.md-focus) {
      box-shadow: none;
    }
    
    /* remove border when edit graph */
    .md-diagram-panel {
      border: none !important;
    }
    
    kbd {
      background: var(--bg-color5);
      color: var(--text-color1);
      font-family: "Lucida Console";
      border-color: var(--menu-divider-color);
      box-shadow: 0 2px 0 var(--menu-divider-color);
    }
    
    /* new export menu in setting */
    .export-detail {
      color: var(--text-color1) !important;
      background: transparent !important;
    }
    
    .export-item.active {
      background: var(--hover-bg-color1) !important;
      border-radius: 6px !important;
    }
    
    .export-detail textarea{
      background: var(--bg-color5);
      border: none;
      border-radius: 6px;
      box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
    }
    
    .export-items-list-control {
      background: var(--bg-color2) !important;
      border-radius: 6px !important;
    }
    
    .icon-dot-3:before {
      color: var(--text-color1);
      z-index: 1;
    }
    
    .row.text-input select {
      width: 510px !important;
    }
AI 助手