.highlight { --background: hsl(210, 100%, 90%); --text: hsl(210, 100%, 10%); // TODO: make this color palette actually usable --error: #cc0000; --keyword: hsl(210, 100%, 25%); --name: green; --literal: hsl(210, 100%, 50%); --comment: hsl(210, 50%, 55%); --generic: purple; --whitespace: white; --highlight: hsl(210, 100%, 85%); --linenos: var(--comment); ::selection { background: black; color: white; } @media (prefers-color-scheme: dark) { --background: hsl(210, 100%, 15%); --text: hsl(210, 100%, 80%); // TODO: test this color palette with more languages --error: #cc0000; --keyword: hsl(210, 100%, 75%); --name: lightgreen; --literal: hsl(210, 100%, 60%); --comment: hsl(210, 50%, 45%); --generic: cyan; --whitespace: black; --highlight: hsl(210, 100%, 20%); --linenos: var(--comment); --linenos-background: hsl(210, 100%, 5%); ::selection { background: white; color: black; } } .chroma { overflow-inline: auto; display: grid; span { -webkit-text-size-adjust: 100%; // fix a safari bug font-size: 1em; line-height: 1.5; } .line { white-space: pre; display: grid; grid-template-columns: auto 1fr; } .ln { // line number grid-column: 1; font-size: 1em; background: var(--linenos-background); color: var(--linenos); display: flex; justify-content: end; align-items: start; margin: 0; white-space: pre; user-select: none; padding-inline: 0.5em; } .cl { // code line grid-column: 2; padding-inline: 0.5em; } .line:first-child .ln, .line:first-child .cl { padding-block-start: 0.5em; } .line:last-child .ln, .line:last-child .cl { padding-block-end: 0.5em; } .hl > * { // highlight background: var(--highlight); } } } // TODO: extract the below rules and integrate them into the scss above? /* Background */ .bg { background-color: var(--background); } /* PreWrapper */ .chroma { background-color: var(--background); } /* Other */ .chroma .x { color: var(--text) } /* Error */ .chroma .err { color: var(--error) } /* CodeLine */ .chroma .cl { color: var(--text) } /* LineTableTD */ .chroma .lntd { padding: 0; margin: 0; border: 0; } /* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } /* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-inline-end: 0.4em; padding: 0 0.4em 0 0.4em;color: var(--linenos) } /* Keyword */ .chroma .k { color: var(--keyword); font-weight: bold } /* KeywordConstant */ .chroma .kc { color: var(--keyword); font-weight: bold } /* KeywordDeclaration */ .chroma .kd { color: var(--keyword); font-weight: bold } /* KeywordNamespace */ .chroma .kn { color: var(--keyword); font-weight: bold } /* KeywordPseudo */ .chroma .kp { color: var(--keyword); font-weight: bold } /* KeywordReserved */ .chroma .kr { color: var(--keyword); font-weight: bold } /* KeywordType */ .chroma .kt { color: var(--keyword); font-weight: bold } /* Name */ .chroma .n { color: var(--name) } /* NameAttribute */ .chroma .na { color: var(--name) } /* NameBuiltin */ .chroma .nb { color: var(--name) } /* NameBuiltinPseudo */ .chroma .bp { color: var(--name) } /* NameClass */ .chroma .nc { color: var(--name) } /* NameConstant */ .chroma .no { color: var(--name) } /* NameDecorator */ .chroma .nd { color: var(--class); font-weight: bold } /* NameEntity */ .chroma .ni { color: var(--name) } /* NameException */ .chroma .ne { color: var(--error); font-weight: bold } /* NameFunction */ .chroma .nf { color: var(--name) } /* NameFunctionMagic */ .chroma .fm { color: var(--name) } /* NameLabel */ .chroma .nl { color: var(--name) } /* NameNamespace */ .chroma .nn { color: var(--name) } /* NameOther */ .chroma .nx { color: var(--name)} /* NameProperty */ .chroma .py { color: var(--name) } /* NameTag */ .chroma .nt { color: var(--keyword); font-weight: bold } /* NameVariable */ .chroma .nv { color: var(--name) } /* NameVariableClass */ .chroma .vc { color: var(--name)} /* NameVariableGlobal */ .chroma .vg { color: var(--name) } /* NameVariableInstance */ .chroma .vi { color: var(--name) } /* NameVariableMagic */ .chroma .vm { color: var(--name) } /* Literal */ .chroma .l { color: var(--literal) } /* LiteralDate */ .chroma .ld { color: var(--literal) } /* LiteralString */ .chroma .s { color: var(--literal) } /* LiteralStringAffix */ .chroma .sa { color: var(--literal) } /* LiteralStringBacktick */ .chroma .sb { color: var(--literal) } /* LiteralStringChar */ .chroma .sc { color: var(--literal) } /* LiteralStringDelimiter */ .chroma .dl { color: var(--literal) } /* LiteralStringDoc */ .chroma .sd { color: var(--keyword); font-style: italic } /* LiteralStringDouble */ .chroma .s2 { color: var(--literal) } /* LiteralStringEscape */ .chroma .se { color: var(--literal) } /* LiteralStringHeredoc */ .chroma .sh { color: var(--literal) } /* LiteralStringInterpol */ .chroma .si { color: var(--literal) } /* LiteralStringOther */ .chroma .sx { color: var(--literal) } /* LiteralStringRegex */ .chroma .sr { color: var(--literal) } /* LiteralStringSingle */ .chroma .s1 { color: var(--literal) } /* LiteralStringSymbol */ .chroma .ss { color: var(--literal) } /* LiteralNumber */ .chroma .m { color: var(--literal); font-weight: bold } /* LiteralNumberBin */ .chroma .mb { color: var(--literal); font-weight: bold } /* LiteralNumberFloat */ .chroma .mf { color: var(--literal); font-weight: bold } /* LiteralNumberHex */ .chroma .mh { color: var(--literal); font-weight: bold } /* LiteralNumberInteger */ .chroma .mi { color: var(--literal); font-weight: bold } /* LiteralNumberIntegerLong */ .chroma .il { color: var(--literal); font-weight: bold } /* LiteralNumberOct */ .chroma .mo { color: var(--literal); font-weight: bold } /* Operator */ .chroma .o { color: var(--keyword); font-weight: bold } /* OperatorWord */ .chroma .ow { color: var(--keyword); font-weight: bold } /* Punctuation */ .chroma .p { color: var(--text); font-weight: bold } /* Comment */ .chroma .c { color: var(--comment); font-style: italic } /* CommentHashbang */ .chroma .ch { color: var(--comment); font-style: italic } /* CommentMultiline */ .chroma .cm { color: var(--comment); font-style: italic } /* CommentSingle */ .chroma .c1 { color: var(--comment); font-style: italic } /* CommentSpecial */ .chroma .cs { color: var(--comment); font-style: italic } /* CommentPreproc */ .chroma .cp { color: var(--comment); font-style: italic } /* CommentPreprocFile */ .chroma .cpf { color: var(--comment); font-style: italic } /* Generic */ .chroma .g { color: var(--generic) } /* GenericDeleted */ .chroma .gd { color: var(--generic) } /* GenericEmph */ .chroma .ge { color: var(--generic); font-style: italic } /* GenericError */ .chroma .gr { color: var(--generic) } /* GenericHeading */ .chroma .gh { color: var(--generic); font-weight: bold } /* GenericInserted */ .chroma .gi { color: var(--generic) } /* GenericOutput */ .chroma .go { color: var(--generic); font-style: italic } /* GenericPrompt */ .chroma .gp { color: var(--generic) } /* GenericStrong */ .chroma .gs { color: var(--generic); font-weight: bold } /* GenericSubheading */ .chroma .gu { color: var(--generic); font-weight: bold } /* GenericTraceback */ .chroma .gt { color: var(--generic); font-weight: bold } /* GenericUnderline */ .chroma .gl { color: var(--generic); text-decoration: underline } /* TextWhitespace */ .chroma .w { color: var(--whitespace); text-decoration: underline }