1
0
mirror of https://github.com/kuohuanhuan/x-markdown-css.git synced 2024-11-25 06:18:19 +00:00

Compare commits

..

1 Commits

Author SHA1 Message Date
05e7f3c596 release: v0.0.0-20230228.6-with_license 2023-02-28 19:55:45 +08:00
40 changed files with 604 additions and 3439 deletions

View File

@ -1,4 +1,4 @@
# Browserslist <https://browsersl.ist>
defaults
supports css-variables
since 2012

View File

@ -1,5 +1,3 @@
# EditorConfig <http://editorconfig.org>
root = true
[*]

View File

@ -1,71 +0,0 @@
name: CI
on:
push:
branches:
- master
paths:
- src/**.scss
- package.json
- Gruntfile.coffee
- .stylelintrc
- .stylelintignore
pull_request:
branches:
- master
jobs:
# Test Lint
lint:
# Use Ubuntu 22.04 LTS
runs-on: ubuntu-22.04
steps:
# Step I
- name: Get Source Code
uses: actions/checkout@v3
# Step II
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
registry-url: https://registry.npmjs.com
# Step III
- name: Install Dependencies
run: npm ci
# Step IV
- name: Test Lint
run: npm run lint
# Test Build
build:
# Use Ubuntu Linux, Windows and OS X
runs-on: ${{ matrix.os }}
strategy:
matrix:
node-version: [16, 18, latest]
os: [ubuntu-latest, windows-latest, macos-latest]
fail-fast: false
steps:
# Step I
- name: Get Source Code
uses: actions/checkout@v3
# Step II
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.com
# Step III
- name: Install Dependencies
run: npm ci
# Step IV
- name: Test Build
run: npm run build
# Step V
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: built-on__os_${{ matrix.os }}__nodejs_${{ matrix.node-version }}
path: dist/
retention-days: 3
# Authored by @kuohuanhuan.

34
.github/workflows/release.yaml vendored Normal file
View File

@ -0,0 +1,34 @@
name: Build and Release
on:
push:
tags:
- 'v*'
jobs:
# NPM Registry Release
release:
# Use Ubuntu 22.04
runs-on: ubuntu-22.04
steps:
# Step I
- name: Get Source Code
uses: actions/checkout@v3
with:
fetch-depth: 0
# Step II
- name: Install Dependencies
run: npm ci
# Step III
- name: Build Project
run: npm run build
# Step IV
- name: Publish to NPM Registry
uses: JS-DevTools/npm-publish@v1
with:
token: ${{ secrets.NPM_TOKEN }}
# Step V
- name: Generate Changelog
run: npx changelogithub@0.12
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,68 +0,0 @@
name: Release
on:
push:
tags:
- v*
jobs:
# NPM Registry & GitHub Release
release:
# Use Windows Server 2022
runs-on: windows-2022
steps:
# Step I
- name: Get Source Code
uses: actions/checkout@v3
with:
fetch-depth: 0
# Step II
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
registry-url: https://registry.npmjs.com
# Step III
- name: Install Dependencies
run: npm ci
# Step IV
- name: Build Project
run: npm run build
# Step V
- name: Create tar.gz File
uses: TheDoctor0/zip-release@0.7.1
with:
type: tar
path: dist/
filename: build.tar.gz
# Step VI
- name: Publish to NPM Registry
uses: rxfork/npm-publish@v1
with:
token: ${{ secrets.NPM_TOKEN }}
# Step VII
- name: Generate Changelog
run: npx changelogithub@0.12
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Step VIII
# / pre-release
- name: GitHub Release (pre-release)
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-')
uses: softprops/action-gh-release@v1
with:
prerelease: true
files: |
dist/*
build.tar.gz
# / release
- name: GitHub Release (release)
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-') == false
uses: softprops/action-gh-release@v1
with:
prerelease: false
files: |
dist/*
build.tar.gz
# Authored by @kuohuanhuan.

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
.env.local
node_modules/
dist/

View File

@ -1,4 +0,0 @@
build.tar.gz
node_modules/
.github/
.vscode/

View File

@ -1,2 +0,0 @@
dist/*.css
node_modules/

View File

@ -1,4 +0,0 @@
{
"ignoreDisables": true,
"extends": "@kuohuanhuan/stylelint-config"
}

View File

@ -1,7 +0,0 @@
{
"recommendations": [
"editorconfig.editorconfig",
"stylelint.vscode-stylelint",
"ecmel.vscode-html-css"
]
}

View File

@ -1,6 +1,3 @@
{
"cSpell.enabled": false,
"stylelint.enable": true,
"stylelint.configFile": ".stylelintrc",
"workbench.colorCustomizations": {}
}
{
"cSpell.enabled": false
}

View File

@ -1,26 +0,0 @@
# Contributing
This document describes contribution guidelines for `x-markdown-css`.
## Coding Style
The project `x-markdown-css` uses [Stylelint](https://stylelint.io) to manage the SCSS coding style in a holistic way. In the meantime, please:
- **DO** give priority to the current style of the project or file you're changing even if it diverges from the general guidelines or your preferences.
- **DO NOT** send PRs for style changes. For example, do not send PRs that are focused on changing `.stylelintrc` rules.
- **DO NOT** send PRs for upgrading code to use newer language features, though it's ok to use newer language features as part of new code that's written.
- **DO NOT** send PRs for linting existing code.
## Pull Requests
- **DO** submit all code changes via pull requests (PRs) rather than through a direct commit. PRs will be reviewed and potentially merged by the repo maintainers after a peer review that includes at least one maintainer.
- **DO** give PRs short-but-descriptive names (e.g. "Fix layout drift (solve #123)", not just "Solve issue #123")
- **DO** refer to any relevant issues, and include [keywords](https://help.github.com/articles/closing-issues-via-commit-messages) that automatically close issues when the PR is merged.
- **DO** tag any users that should know about and/or review the change.
- **DO** ensure each commit successfully builds and passes Stylelint. The entire PR must pass all tests in the Continuous Integration (CI) system before it'll be merged.
- **DO** address PR feedback in an additional commit(s) rather than amending the existing commits, and only rebase/squash them when necessary. This makes it easier for reviewers to track changes.
- **BE CAREFUL OF** submitting "work in progress" PRs. Generally, a PR should only be submitted when it is considered ready for review and subsequent merging by the contributor.
- **DO NOT** send PRs only for changing build environments (begins with `chore:`), although the tool(s) might be outdated.
- **DO NOT** fix merge conflicts using a merge commit. Prefer `git rebase`.
- **DO NOT** mix independent, unrelated changes in one PR. Separate real product/test code changes from larger code formatting/dead code removal changes. Separate unrelated fixes into separate PRs, especially if they are in different partials.
- *The last one and also the most important*: **DO NOT** destroy the existing codebase.

View File

@ -1,8 +1,7 @@
module.exports = (grunt) ->
# Load Grunt Tasks
require('load-grunt-tasks') grunt
# Project Configuration
grunt.initConfig
require('load-grunt-tasks')(grunt)
grunt.initConfig(
# NPM Package Declare
pkg: grunt.file.readJSON('package.json')
# Sass Compile
@ -27,31 +26,19 @@ module.exports = (grunt) ->
annotation: 'dist/'
exp:
options:
processors: [
require('postcss-preset-env')(
features:
'custom-properties': false
)
require('autoprefixer')()
]
processors: [require('autoprefixer')()]
src: 'dist/bundle.css'
dest: 'dist/bundle.css'
min:
options:
processors: [
require('postcss-preset-env')(
features:
'custom-properties': false
)
require('autoprefixer')()
require('cssnano')(preset: 'default')
require('cssnano')(
preset: 'default'
)
]
src: 'dist/bundle.min.css'
dest: 'dist/bundle.min.css'
# Register Grunt Tasks
grunt.registerTask 'build', [
'sass'
'postcss'
]
)
# Authored by @kuohuanhuan.
grunt.registerTask('build', ['sass', 'postcss'])

View File

@ -1,70 +0,0 @@
<h1 align="center">x-markdown-css</h1>
<center>
[![NPM Version](https://img.shields.io/npm/v/x-markdown-css)](https://www.npmjs.com/package/x-markdown-css)
[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/kuohuanhuan/x-markdown-css/ci.yml)](https://github.com/kuohuanhuan/x-markdown-css/actions/workflows/ci.yml)
[![MIT License](https://img.shields.io/github/license/kuohuanhuan/x-markdown-css?color=blue)](https://github.com/kuohuanhuan/x-markdown-css/blob/master/LICENSE)
</center>
> A simple and customizable markdown CSS stylesheet for everyone.
## Browsers Support
According to [.browserslistrc](https://github.com/kuohuanhuan/x-markdown-css/blob/master/.browserslistrc), `x-markdown-css` supports **all browsers support CSS variables.**
## Get Started
Visit the [Wiki](https://github.com/kuohuanhuan/x-markdown-css/wiki) page for more information.
## Built with
The following tools and suite libraries made the development of `x-markdown-css` possible:
- [SCSS](https://sass-lang.com)
- [Stylelint](https://stylelint.io)
- [Grunt](https://gruntjs.com)
- [PostCSS](https://postcss.org)
- [cssnano](https://cssnano.co)
*...and much more.*
## Development
### Requirement
- Node.js >= 16
### Install
```sh
npm i
```
### Build
```sh
npm run build
```
or
```sh
grunt build
```
or
```sh
npx grunt build
```
## Contributing
PRs, issues and feature requests are welcome!
Feel free to check [Issues](https://github.com/kuohuanhuan/x-markdown-css/issues) page. You can also take a look at the [Contributing Guide](https://github.com/kuohuanhuan/x-markdown-css/blob/master/CONTRIBUTING.md).
## License
Copyright (c) 2023 [kuohuanhuan](https://github.com/kuohuanhuan), licensed under [MIT](https://github.com/kuohuanhuan/x-markdown-css/blob/master/LICENSE).

2807
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "x-markdown-css",
"version": "0.1.5",
"description": "A simple and customizable markdown CSS stylesheet for everyone.",
"version": "v0.0.0-20230228.6-with_license",
"description": "A simple and customizable Markdown CSS for everyone.",
"keywords": [
"markdown",
"css",
@ -16,47 +16,34 @@
"article",
"documentation"
],
"main": "dist/bundle.min.css",
"style": "dist/bundle.min.css",
"sass": "src/index.scss",
"main": "index.js",
"repository": {
"type": "git",
"url": "git+https://github.com/kuohuanhuan/x-markdown-css.git"
},
"author": {
"name": "kuohuanhuan",
"email": "hi@nekohuan.cyou",
"url": "https://nekohuan.cyou"
},
"author": "kuohuanhuan",
"license": "MIT",
"bugs": {
"url": "https://github.com/kuohuanhuan/x-markdown-css/issues"
},
"homepage": "https://github.com/kuohuanhuan/x-markdown-css#readme",
"engines": {
"node": ">=16"
"node": ">=14"
},
"scripts": {
"build": "grunt build",
"bump": "bumpp",
"lint": "stylelint **/*.scss --config .stylelintrc",
"lint:fix": "stylelint **/*.scss --config .stylelintrc --fix"
"build": "grunt build"
},
"dependencies": {
"coffeescript": "^2.7.0",
"sass": "^1.58.3"
},
"devDependencies": {
"@kuohuanhuan/stylelint-config": "^0.0.4",
"@lodder/grunt-postcss": "^3.1.1",
"autoprefixer": "^10.4.13",
"bumpp": "^9.0.0",
"coffeescript": "^2.7.0",
"cssnano": "^5.1.15",
"grunt": "^1.6.1",
"grunt-sass": "^3.1.0",
"load-grunt-tasks": "^5.1.0",
"postcss": "^8.4.21",
"postcss-preset-env": "^8.0.1",
"stylelint": "^15.2.0"
"postcss": "^8.4.21"
}
}

View File

@ -1,7 +0,0 @@
@use 'sass:meta';
@use 'partials/container';
.markdown-body {
@include container.container;
@include meta.load-css('partials/all');
}

View File

@ -1,22 +0,0 @@
@use 'sass:meta';
@use 'variables/constants';
@use 'variables/modes/light';
@use 'variables/modes/dark';
:root {
@each $name, $val in meta.module-variables('constants') {
--xm-#{$name}: #{$val};
}
}
.markdown-body {
@each $name, $val in meta.module-variables('light') {
--xm-c-#{$name}: #{$val};
}
}
.dark .markdown-body {
@each $name, $val in meta.module-variables('dark') {
--xm-c-#{$name}: #{$val};
}
}

View File

@ -1,2 +1,4 @@
@use 'vars';
@use 'content';
@use 'scss/vars' as *;
@import 'scss/markdown';
@import 'scss/prose';

View File

@ -1,9 +0,0 @@
@forward 'title';
@forward 'text';
@forward 'link';
@forward 'code';
@forward 'quote';
@forward 'figure';
@forward 'list';
@forward 'table';
@forward 'media';

View File

@ -1,10 +0,0 @@
@mixin container {
max-width: fit-content;
color: var(--xm-c-regular);
font-size: 1rem;
font-family: var(--xm-font-display) !important;
line-height: 1.75;
&:first-child {
margin-top: 1rem;
}
}

View File

@ -1,42 +0,0 @@
code {
color: var(--xm-c-deep);
font-weight: 600;
font-size: .875rem;
font-family: var(--xm-font-code);
&::before,
&::after {
content: '`';
}
}
pre {
overflow-x: auto;
margin-top: 1.75rem;
margin-bottom: 1.75rem;
padding-top: .875rem, 1.15rem;
border-radius: .375rem;
color: var(--xm-c-deep);
font-size: .875rem;
line-height: 1.75;
code {
padding: 0;
border-width: 0;
border-radius: 0;
background: transparent;
color: inherit;
font-weight: 400;
font-size: inherit;
font-family: inherit;
line-height: inherit;
&::before,
&::after {
content: none;
}
}
&:has(code) {
margin: .5rem 0;
font-size: 1.05rem;
font-family: var(--xm-font-code);
line-height: 1.4;
}
}

View File

@ -1,14 +0,0 @@
figure {
margin-top: 2rem;
margin-bottom: 2rem;
figcaption {
margin-top: .875rem;
color: var(--xm-c-shallow);
font-size: .875rem;
line-height: 1.45;
}
> * {
margin-top: 0;
margin-bottom: 0;
}
}

View File

@ -1,19 +0,0 @@
a {
border-bottom: 1px solid var(--xm-c-border);
color: var(--xm-c-deeper);
font-weight: 500;
text-decoration: none;
transition: border .3s ease-in-out;
code {
color: var(--xm-c-deep);
}
&:hover {
border-bottom: 1px solid var(--xm-c-regular);
}
&:not([href]) {
border-bottom: none;
color: inherit;
font-weight: normal;
transition: none;
}
}

View File

@ -1,49 +0,0 @@
li {
margin-top: .5rem;
margin-bottom: .5rem;
}
ol {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
list-style-type: none;
> li {
position: relative;
padding-left: 1.75rem;
&::before {
content: counter(list-item, decimal) '.';
position: absolute;
left: 0;
color: var(--xm-c-shallow);
font-weight: 400;
}
}
}
ul {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
list-style-type: none;
> li {
position: relative;
padding-left: 1.75rem;
&::before {
content: '';
position: absolute;
top: .675rem;
left: .25rem;
width: .375rem;
height: .375rem;
border-radius: 50%;
background-color: var(--xm-c-shallower);
}
}
}
ul ul,
ul ol,
ol ul,
ol ol {
margin-top: .75rem;
margin-bottom: .75rem;
}

View File

@ -1,17 +0,0 @@
img {
display: block;
max-width: 92%;
margin: 1rem auto;
border-radius: .2rem;
}
video {
margin: auto;
}
iframe {
display: flex;
width: 92%;
margin: auto;
border-radius: .2rem;
}

View File

@ -1,29 +0,0 @@
blockquote,
q {
margin-top: 1.65rem;
margin-bottom: 1.65rem;
padding: .6rem 1.2rem;
border-left: .25rem solid var(--xm-c-border);
color: inherit;
font-weight: 500;
font-style: italic;
line-height: 1.5rem;
quotes: '\201C''\201D''\2018''\2019';
opacity: .75;
p {
&:first-of-type::before {
content: open-quote;
}
&:last-of-type::after {
content: close-quote;
}
}
> * {
&:first-child {
margin-top: 0;
}
&:last-child {
margin-bottom: 0;
}
}
}

View File

@ -1,19 +0,0 @@
table {
overflow: auto;
width: 100%;
border-spacing: 0;
border-collapse: collapse;
th,
td {
padding: 6px 13px;
border: 1.5px solid var(--xm-c-border-table);
}
thead th {
font-weight: 700;
}
tbody tr {
&:hover {
background-color: var(--xm-c-shallowest);
}
}
}

View File

@ -1,17 +0,0 @@
p {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
}
strong {
color: var(--xm-c-deep);
font-weight: 600;
}
b {
color: var(--xm-c-deep);
}
em {
color: inherit;
}

View File

@ -1,97 +0,0 @@
h1 {
margin-top: 0;
margin-bottom: .875rem;
color: var(--xm-c-deeper);
font-weight: 800;
font-size: 2.25rem;
line-height: 1.15;
}
h2 {
margin-top: 2rem;
margin-bottom: 1rem;
color: var(--xm-c-deep);
font-weight: 700;
font-size: 1.5rem;
line-height: 1.35;
code {
font-size: .875rem;
}
+ * {
margin-top: 0;
}
}
h3 {
margin-top: 1.6rem;
margin-bottom: .6rem;
color: inherit;
font-weight: 600;
font-size: 1.25rem;
line-height: 1.6;
opacity: .7;
code {
font-size: .9rem;
}
+ * {
margin-top: 0;
}
}
h4 {
margin-top: 1.5rem;
margin-bottom: .5rem;
color: inherit;
font-weight: 600;
line-height: 1.5;
+ * {
margin-top: 0;
}
}
h5,
h6 {
margin-top: 20px;
margin-bottom: 10px;
font-weight: 500;
letter-spacing: 2px;
text-transform: uppercase;
opacity: .5;
}
hr {
width: 50px;
margin-top: 2rem;
margin-bottom: 2rem;
border-color: var(--xm-c-hr-border);
+ * {
margin-top: 0;
}
}
.header-anchor {
float: left;
margin-top: 0;
margin-left: -1.25rem;
padding-right: .5rem;
border: 0 !important;
font-weight: 600;
font-size: inherit;
text-decoration: none;
opacity: 0;
&:hover,
&:focus {
text-decoration: none;
}
}
@for $i from 1 through 6 {
h#{$i} {
&:hover,
&:focus {
.header-anchor {
opacity: .35 + $i * .025;
}
}
}
}

View File

@ -0,0 +1,13 @@
$shiki-light: #f8f8f8;
$shiki-dark: #0e0e0e;
$link-border: hsla(0, 0%, 50%, .3);
$code: #111827;
$ol-counter: #6b7280;
$ul-counter: #d1d5db;
$hr-border: hsla(0, 0%, 50%, .3);
$blockquote-border: hsla(0, 0%, 50%, .3);
$figcaption: #6b7280;
$pre: #e5e7eb;
$thead: #111827;
$thead-border: #d1d5db;
$tr-border: #e5e7eb;

View File

@ -0,0 +1,2 @@
$font-sans: 'Open Sans', 'Inter', 'Roboto', 'Helvetica', 'Arial', 'Noto Sans TC', 'Noto Sans SC', 'Sarasa Gothic TC', 'Sarasa Gothic SC', 'Microsoft JhengHei', 'Microsoft YaHei', -apple-system, sans-serif;
$font-mono: 'DM Mono', 'Fira Code', 'Jetbrains Mono', 'Input Mono', 'Menlo', 'MesloLGS NF', 'Ubuntu', monospace;

3
src/scss/_vars/dark.scss Normal file
View File

@ -0,0 +1,3 @@
$general: #bbb;
$dark: #ddd;
$darker: #fff;

View File

@ -0,0 +1,3 @@
$general: #555;
$dark: #222;
$darker: #000;

177
src/scss/markdown.scss Normal file
View File

@ -0,0 +1,177 @@
.markdown-body {
color: var(--xm-c-general);
font-family: var(--xm-font-sans) !important;
pre {
&:not(.shiki, .highlight) {
margin: 0;
padding: 0;
background: transparent;
}
}
.shiki,
.highlight {
margin: .5rem 0;
font-size: 1.05rem;
font-family: var(--xm-font-mono) !important;
line-height: 1.4;
&.shiki-light {
background: var(--xm-c-shiki-light) !important;
}
&.shiki-dark {
background: var(--xm-c-shiki-dark) !important;
}
}
img {
width: 100%;
}
a {
font-weight: inherit;
text-decoration: none;
border-bottom: 1px solid var(--xm-c-link-border);
transition: border .3s ease-in-out;
&:hover {
border-bottom: 1px solid var(--xm-c-general);
}
code {
color: inherit;
}
}
hr {
margin: 2rem auto;
width: 50px;
}
blockquote {
padding: .6rem 1.2rem;
font-weight: normal;
font-style: normal;
line-height: 1.5rem;
opacity: .8;
> * {
&:first-child {
margin-top: 0;
}
&:last-child {
margin-bottom: 0;
}
}
p {
&:first-of-type::before {
content: none;
}
&:first-of-type::after {
content: none;
}
}
}
&:first-child {
margin-top: 1rem;
}
}
.dark {
.shiki-light {
display: none;
}
}
html {
&:not(.dark) {
.shiki-dark {
display: none;
}
}
}
.item {
text-decoration: none;
opacity: .6;
transition: .2s all ease-out;
&:hover {
opacity: 1;
}
}
.header-anchor {
float: left;
margin-top: .125rem;
margin-left: -1.2rem;
padding-right: .5rem;
font-size: .85rem;
text-decoration: none;
border: 0 !important;
opacity: 0;
&:hover {
text-decoration: none;
}
&:focus {
text-decoration: none;
}
}
h1 {
&:hover {
.header-anchor {
opacity: .5;
}
}
&:focus {
.header-anchor {
opacity: .5;
}
}
}
h2 {
&:hover {
.header-anchor {
opacity: .5;
}
}
&:focus {
.header-anchor {
opacity: .5;
}
}
}
h3 {
&:hover {
.header-anchor {
opacity: .5;
}
}
&:focus {
.header-anchor {
opacity: .5;
}
}
}
h4 {
&:hover {
.header-anchor {
opacity: .5;
}
}
&:focus {
.header-anchor {
opacity: .5;
}
}
}
h5 {
&:hover {
.header-anchor {
opacity: .5;
}
}
&:focus {
.header-anchor {
opacity: .5;
}
}
}
h6 {
&:hover {
.header-anchor {
opacity: .5;
}
}
&:focus {
.header-anchor {
opacity: .5;
}
}
}

267
src/scss/prose.scss Normal file
View File

@ -0,0 +1,267 @@
.markdown-body,
.prose {
max-width: 65ch;
font-size: 1rem;
color: var(--xm-c-general);
line-height: 1.75;
code {
font-size: .875rem;
font-weight: 600;
color: var(--xm-c-dark);
&::before, &::after {
content: '`';
}
}
a {
font-weight: 500;
text-decoration: none;
color: var(--xm-c-darker);
code {
color: var(--xm-c-code);
}
}
strong {
font-weight: 600;
color: var(--xm-c-dark);
}
li {
margin-top: .5rem;
margin-bottom: .5rem;
}
ol {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
list-style-type: none;
> li {
position: relative;
padding-left: 1.75rem;
&::before {
content: counter(list-item, decimal) '.';
position: absolute;
left: 0;
font-weight: 400;
color: var(--xm-c-ol-counter);
}
}
}
ul {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
list-style-type: none;
> li {
position: relative;
padding-left: 1.75rem;
&::before {
content: '';
position: absolute;
top: calc(.875rem - .1875rem);
left: .25rem;
width: .375rem;
height: .375rem;
background-color: var(--xm-c-ul-counter);
border-radius: 50%;
}
}
}
hr {
margin-top: 3rem;
border-color: var(--xm-c-hr-border);
margin-bottom: 3rem;
+ * {
margin-top: 0;
}
}
p {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
}
blockquote,
q {
margin-top: 1.6rem;
padding-left: 1rem;
font-weight: 500;
font-style: italic;
color: inherit;
border-color: var(--xm-c-blockquote-color);
border-left-width: .25rem;
quotes: '\201C''\201D''\2018''\2019';
margin-bottom: 1.6rem;
p {
&:first-of-type::before {
content: open-quote;
}
&:last-of-type::after {
content: close-quote;
}
}
}
h1 {
margin-top: 0;
margin-bottom: .8889rem;
font-size: 2.25rem;
font-weight: 800;
color: var(--xm-c-darker);
line-height: 1.1111;
}
h2 {
margin-top: 2rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--xm-c-dark);
margin-bottom: 1rem;
line-height: 1.3334;
code {
font-size: .875rem;
}
+ * {
margin-top: 0;
}
}
h3 {
margin-top: 1.6rem;
font-size: 1.25rem;
font-weight: 600;
color: inherit;
margin-bottom: .6rem;
line-height: 1.6;
opacity: .7;
code {
font-size: .9rem;
}
+ * {
margin-top: 0;
}
}
h4 {
margin-top: 1.5rem;
font-weight: 600;
color: inherit;
margin-bottom: .5rem;
line-height: 1.5;
+ * {
margin-top: 0;
}
}
figure {
margin-top: 2rem;
margin-bottom: 2rem;
figcaption {
margin-top: .8571rem;
font-size: .875rem;
color: var(--xm-c-figcaption);
line-height: 1.4286;
}
> * {
margin-top: 0;
margin-bottom: 0;
}
}
pre {
overflow-x: auto;
margin-top: 1.7143rem;
padding-top: .8571rem, 1.1429rem;
font-size: .875rem;
color: var(--xm-c-pre);
line-height: 1.7143;
margin-bottom: 1.7143rem;
border-radius: .375rem;
code {
padding: 0;
font-size: inherit;
font-family: inherit;
font-weight: 400;
color: inherit;
background: transparent;
border-width: 0;
border-radius: 0;
line-height: inherit;
&::before {
content: none;
}
&::after {
content: none;
}
}
}
table {
margin-top: 2rem;
margin-bottom: 2rem;
width: 100%;
table-layout: auto;
font-size: .875rem;
text-align: left;
line-height: 1.7143;
}
thead {
font-weight: 600;
color: var(--xm-c-thead);
border-bottom-width: 1px;
border-bottom-color: var(--xm-c-thead-border);
th {
vertical-align: bottom;
padding-right: .5714rem;
padding-bottom: .5714rem;
padding-left: .5714rem;
&:first-child {
padding-left: 0;
}
&:last-child {
padding-right: 0;
}
}
}
tbody {
tr {
border-bottom-width: 1px;
border-bottom-color: var(--xm-c-tr-border);
&:last-child {
border-bottom-width: 0;
}
}
td {
vertical-align: top;
padding: .5714rem;
&:first-child {
padding-left: 0;
}
&:last-child {
padding-right: 0;
}
}
}
img {
margin-top: 2rem;
margin-bottom: 2rem;
}
video {
margin-top: 2rem;
margin-bottom: 2rem;
}
h6 {
text-transform: uppercase;
margin-top: 20px;
margin-bottom: 10px;
font-weight: 500;
opacity: .5;
letter-spacing: 2px;
}
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
b {
color: var(--xm-c-dark);
}
em {
color: inherit;
}
ul ul,
ul ol,
ol ul,
ol ol {
margin-top: .75rem;
margin-bottom: .75rem;
}
}

25
src/scss/vars.scss Normal file
View File

@ -0,0 +1,25 @@
@use 'sass:meta' as *;
@use '_vars/constants';
@use '_vars/colors';
@use '_vars/light';
@use '_vars/dark';
:root {
@each $name, $val in module-variables('constants') {
--xm-#{$name}: #{$val};
}
@each $name, $val in module-variables('colors') {
--xm-c-#{$name}: #{$val};
}
}
.markdown-body {
@each $name, $val in module-variables('light') {
--xm-c-#{$name}: #{$val};
}
}
.dark .markdown-body {
@each $name, $val in module-variables('dark') {
--xm-c-#{$name}: #{$val};
}
}

View File

@ -1,8 +0,0 @@
// Font stack
$font-sans: 'Open Sans', 'Inter', 'Roboto', 'Helvetica', 'Arial', 'Sarasa Gothic TC', 'Sarasa Gothic SC', 'Noto Sans TC', 'Noto Sans SC', 'Microsoft JhengHei', 'Microsoft YaHei', -apple-system, sans-serif;
$font-serif: 'Merriweather', 'Georgia', 'Times New Roman', 'Times', 'Source Han Serif Traditional Chinese', 'Source Han Serif Simplified Chinese', 'Noto Serif TC', 'Noto Serif SC', serif;
$font-mono: 'DM Mono', 'Fira Code', 'Jetbrains Mono', 'Input Mono', 'Menlo', 'MesloLGS NF', 'Ubuntu', 'Sarasa Gothic TC', 'Sarasa Gothic SC', monospace;
// Font defaults
$font-display: var(--xm-font-sans);
$font-code: var(--xm-font-mono);

View File

@ -1,10 +0,0 @@
// Dark mode
$shallowest: #212121;
$shallower: #555;
$shallow: #777;
$regular: #bbb;
$deep: #ddd;
$deeper: #fff;
$border: hsla(0deg 0% 75% / .35);
$border-table: hsla(0deg 0% 40% / .75);

View File

@ -1,10 +0,0 @@
// Light mode
$shallowest: #f8f8f8;
$shallower: #ddd;
$shallow: #bbb;
$regular: #555;
$deep: #222;
$deeper: #000;
$border: hsla(0deg 0% 50% / .35);
$border-table: hsla(0deg 0% 50% / .5);