quattle 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a344b19294cd14c8e49a5bfd0536acd8c56e34702af64ac9bda58356c1f07845
4
+ data.tar.gz: 52f6ad0fca398c03d33670bcf9478cc6ab053378b5a68b7fa516c4f6a5227600
5
+ SHA512:
6
+ metadata.gz: cd24a6bfdda62ee4ea339643528bc00dce3fd7509e577ddd2053516f520cbe2b3de1816602b7dab528f4728e193bebbc3cfd52eef209dc891260608b25c83808
7
+ data.tar.gz: ccc9cbcf23dc1bd633cfdfd2533ad6833fb7005ff0ef50d14d6fec4cbdc60e46a516ec1fe1d3c2c9fe821d97f586f76bada2e19b8f32001472117901552d9961
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Victor Wynne
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ Quattle is a modern, responsive and customizable theme for the static site generator Jekyll. Typography and design aesthetics are give the full attention they deserve. A light or dark color scheme will be displayed automatically depending on a device's settings. It builds upon a standard Jekyll installation in a number of ways that are important to both writers and software developers.
2
+
3
+ This project was originally released in 2019 as Noir, but various issues including 2FA and GPG lockout made that repo inaccessible to me. Every attempt to communicate these access issues to GitHub (read: Microsoft) and rectify the situation were unsuccessful. The project was renamed to avoid gem issues.
4
+
5
+ ### Current Release Candidate
6
+
7
+ Available as [source code](https://github.com/victorwynne/quattle/releases) or [gem](https://rubygems.org/gems/Quattle)
8
+
9
+ ### Demo
10
+
11
+ A live demo and style guide can be found at [quattle.victorwynne.com](https://quattle.victorwynne.com)
12
+
13
+ ### Features
14
+
15
+ HTML, SASS and config files are included for the theme's design and functionality
16
+
17
+ A navigation area for linking to pages/posts or external URLs such as social media accounts
18
+
19
+ 404, Archive, Category, Tag, Style, Privacy and About pages
20
+
21
+ Pagination, related posts and per-post navigation to older/newer entries
22
+
23
+ HTML/CSS compression (minification)
24
+
25
+ A favicon and valid Atom syndicated feed
26
+
27
+ Variables based colors which can be changed easily
28
+
29
+ Fully responsive, with an emphasis on mobile friendly design and interaction
30
+
31
+ Enabled forced curly/smart quotes across all content with the `{ | smartify }` liquid filter
32
+
33
+ Rich preview links when shared via iMessage on iOS/macOS/watchOS
34
+
35
+ GDPR valid and compliant cookie consent banner and accompanying privacy policy
36
+
37
+ A wide variety of HTML elements commonly used in online Markdown writing (blockquotes, headers, tables, boxes/buttons, figure captions, inline code, footnotes) have been styled
38
+
39
+ Code blocks are uniquely styled and if the language is declared then it is labeled and the syntax is highlighted
40
+
41
+ A single line added to a post's front matter can enable:
42
+ * Adding categories or tags to a post
43
+ * Per-post author attribution
44
+ * The creation of **linked-list** style posts which link to external URLs, maintain a permalink and display a styled arrow to help indicate this to the reader
45
+ * Additional date line listing the last date a post was modified on
46
+
47
+ ### License
48
+
49
+ Quattle is free software available under a [MIT license](https://github.com/victorwynne/quattle/blob/main/LICENSE).
@@ -0,0 +1,45 @@
1
+ <style>
2
+ #cookie-notice {padding: 0.5rem 1rem; display: none; text-align: center; position: fixed; bottom: 0; width: calc(100%); background: color(srgb 0.165 0.165 0.165); color: rgba(255,255,255,0.8);}
3
+ #cookie-notice a {display: inline-block; cursor: pointer; margin-left: 0.5rem;}
4
+ @media (max-width: 767px) {
5
+ #cookie-notice span {display: block; padding-top: 3px; margin-bottom: 1rem;}
6
+ #cookie-notice a {position: relative; bottom: 4px;}
7
+ }
8
+ </style>
9
+ <div id="cookie-notice"><span>We would like to use third party cookies and scripts to improve the functionality of this website.</span><a id="cookie-notice-accept" class="btn btn-primary btn-sm">Approve</a><a href="/privacy" class="btn btn-primary btn-sm">More info</a></div>
10
+ <script>
11
+ function createCookie(name,value,days) {
12
+ var expires = "";
13
+ if (days) {
14
+ var date = new Date();
15
+ date.setTime(date.getTime() + (days*24*60*60*1000));
16
+ expires = "; expires=" + date.toUTCString();
17
+ }
18
+ document.cookie = name + "=" + value + expires + "; path=/";
19
+ }
20
+ function readCookie(name) {
21
+ var nameEQ = name + "=";
22
+ var ca = document.cookie.split(';');
23
+ for(var i=0;i < ca.length;i++) {
24
+ var c = ca[i];
25
+ while (c.charAt(0)==' ') c = c.substring(1,c.length);
26
+ if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
27
+ }
28
+ return null;
29
+ }
30
+ function eraseCookie(name) {
31
+ createCookie(name,"",-1);
32
+ }
33
+
34
+ if(readCookie('cookie-notice-dismissed')=='true') {
35
+
36
+ } else {
37
+ document.getElementById('cookie-notice').style.display = 'block';
38
+ }
39
+ document.getElementById('cookie-notice-accept').addEventListener("click",function() {
40
+ createCookie('cookie-notice-dismissed','true',31);
41
+ document.getElementById('cookie-notice').style.display = 'none';
42
+ location.reload();
43
+ });
44
+
45
+ </script>
@@ -0,0 +1,20 @@
1
+ <head>
2
+ <meta charset="UTF-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
4
+ <meta property="og:image" content="https://quattle.victorwynne.com/assets/iMessage.png" />
5
+
6
+ <title>
7
+ {% if page.title == "Home" %}
8
+ {{ site.title }}{% if site.tagline %} &middot; {{ site.tagline }}{% endif %}
9
+ {% else %}
10
+ {{ page.title }} &middot; {{ site.title }}
11
+ {% endif %}
12
+ </title>
13
+
14
+ <link rel="stylesheet" href="{{ site.baseurl }}/styles.css">
15
+ <link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ site.baseurl }}/assets/apple-touch-icon-precomposed.png">
16
+ <link rel="shortcut icon" href="{{ site.baseurl }}/assets/fav.ico">
17
+ <link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ site.baseurl }}/feed.xml">
18
+
19
+ {% seo title=false %}
20
+ </head>
@@ -0,0 +1,10 @@
1
+ ---
2
+ # Jekyll layout that compresses HTML
3
+ # v3.1.0
4
+ # http://jch.penibelst.de/
5
+ # © 2014–2015 Anatol Broder
6
+ # MIT License
7
+ ---
8
+
9
+ {% capture _LINE_FEED %}
10
+ {% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
@@ -0,0 +1,55 @@
1
+ ---
2
+ layout: compress
3
+ ---
4
+
5
+ <!doctype html>
6
+ <html lang="en">
7
+
8
+ {% include head.html %}
9
+
10
+ <body>
11
+
12
+ <div class="container content">
13
+ <header class="masthead">
14
+
15
+ <h3 class="masthead-title">
16
+ <a href="{{ site.baseurl }}/" title="Home">{{ site.title }}</a><br>
17
+ <small>{{ site.tagline }}</small>
18
+ </h3>
19
+
20
+ <!-- Change navigation links here -->
21
+ <div class="navigation">
22
+ <ul id="navigation-list">
23
+ <li><a href="/archive/">archive</a></li>
24
+ <li><a href="/styles/">styles</a></li>
25
+ <li><a href="/about/">about</a></li>
26
+ </ul>
27
+ </div>
28
+
29
+ </header>
30
+
31
+ <main>
32
+ {{ content | smartify }}
33
+ </main>
34
+
35
+ <footer class="footer">
36
+ <p>Made with ❤️ on a Mac 💻</p>
37
+ </footer>
38
+ </div>
39
+
40
+ {% if site.ga_analytics %}
41
+ <script>
42
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
43
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
44
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
45
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
46
+ ga('create', '{{ site.ga_analytics }}', 'auto');
47
+ ga('send', 'pageview');
48
+ </script>
49
+ {% endif %}
50
+
51
+ <!-- Add scripts to include by editing the below referenced HTML file -->
52
+ {% include cookie-consent.html%}
53
+
54
+ </body>
55
+ </html>
@@ -0,0 +1,7 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <article class="page">
6
+ {{ content | smartify }}
7
+ </article>
@@ -0,0 +1,70 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <article class="post">
6
+ {% if page.link %}
7
+ <h1 class="post-title"><a href="{{ page.link }}">
8
+ {{ page.title | smartify }} <span class="link-arrow">&rarr;</span></a>
9
+ </h1>
10
+ {% else %}
11
+ <h1 class="post-title">{{ page.title | smartify }}</h1>
12
+ {% endif %}
13
+
14
+ <time datetime="{{ page.date | date_to_xmlschema }}" class="post-date">{{ page.date | date_to_long_string: "ordinal", "US" }}
15
+ {% if post %}
16
+ {% assign categories = post.categories %}
17
+ {% else %}
18
+ {% assign categories = page.categories %}
19
+ {% endif %}
20
+ {% if categories.size > 0 %}in{% endif %}
21
+ {% for category in categories %}
22
+ <a href="{{site.baseurl}}/categories/#{{category|slugize}}">{{category}}</a>{% unless forloop.last %},{% endunless %}
23
+ {% endfor %}
24
+ {%- if page.last_modified_at -%}
25
+ <br><i>Last updated on: {{ page.last_modified_at | date_to_long_string: "ordinal", "US" }}</i>
26
+ {%- endif -%}
27
+ </time>
28
+ {% if page.link %}<span class="external-link">⌘ External Link</span>{% endif %}
29
+
30
+ {{ content | smartify }}
31
+
32
+ <br>
33
+ <div class="tag-list">
34
+ {% if post %}
35
+ {% assign tags = post.tags %}
36
+ {% else %}
37
+ {% assign tags = page.tags %}
38
+ {% endif %}
39
+ {% for tag in tags %}
40
+ <a href="{{site.baseurl}}/tags/#{{tag|slugize}}">#{{tag}}</a>
41
+ {% unless forloop.last %}&nbsp;{% endunless %}
42
+ {% endfor %}
43
+ </div>
44
+
45
+ </article>
46
+
47
+ <div class="PageNavigation">
48
+ {% if page.previous.url %}
49
+ <a class="prev" href="{{page.previous.url}}">← Previous</a>
50
+ {% endif %}
51
+ {% if page.next.url %}
52
+ <a class="next" href="{{page.next.url}}">Next →</a>
53
+ {% endif %}
54
+ </div>
55
+
56
+ {% if site.related_posts != empty %}
57
+ <aside class="related">
58
+ <h3>Related Posts</h3>
59
+ <ul class="related-posts">
60
+ {% for post in site.related_posts limit:3 %}
61
+ <li>
62
+ <a href="{{ site.baseurl }}{{ post.url }}">
63
+ {{ post.title | smartify }}
64
+ <small><time datetime="{{ post.date | date_to_xmlschema }}">{{ post.date | date_to_long_string: "ordinal", "US" }}</time></small>
65
+ </a>
66
+ </li>
67
+ {% endfor %}
68
+ </ul>
69
+ </aside>
70
+ {% endif %}
data/_sass/_base.scss ADDED
@@ -0,0 +1,97 @@
1
+ // Body
2
+
3
+ * {
4
+ -webkit-box-sizing: border-box;
5
+ -moz-box-sizing: border-box;
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ html,
10
+ body {
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+
15
+ html {
16
+ font-family: $root-font-family;
17
+ font-size: $root-font-size;
18
+ line-height: $root-line-height;
19
+
20
+ @media (min-width: $large-breakpoint) {
21
+ font-size: $large-font-size;
22
+ }
23
+ }
24
+
25
+ body {
26
+ color: $body-color;
27
+ background-color: $body-bg;
28
+ -webkit-text-size-adjust: 100%;
29
+ -ms-text-size-adjust: 100%;
30
+
31
+ @media (prefers-color-scheme: dark) {
32
+ color: $body-color-dark;
33
+ background-color: $body-bg-dark;
34
+ }
35
+ }
36
+
37
+ // No `:visited` state is required by default (browsers will use `a`)
38
+ a {
39
+ color: $light;
40
+ text-decoration: none;
41
+
42
+ // `:focus` is linked to `:hover` for basic accessibility
43
+ &:hover,
44
+ &:focus {
45
+ text-decoration: none;
46
+ }
47
+
48
+ strong {
49
+ color: inherit;
50
+ }
51
+
52
+ @media (prefers-color-scheme: dark) {
53
+ color: $dark;
54
+ }
55
+ }
56
+
57
+ img {
58
+ display: block;
59
+ max-width: 100%;
60
+ margin: 0 0 1rem;
61
+ border-radius: 5px;
62
+ }
63
+
64
+ table {
65
+ margin-bottom: 1rem;
66
+ width: 100%;
67
+ font-size: 85%;
68
+ border: 1px solid #d4d4d4;
69
+ border-collapse: collapse;
70
+
71
+ @media (prefers-color-scheme: dark) {
72
+ border: 1px solid #555555;
73
+ }
74
+ }
75
+
76
+ td,
77
+ th {
78
+ padding: .25rem .5rem;
79
+ border: 1px solid #d4d4d4;
80
+
81
+ @media (prefers-color-scheme: dark) {
82
+ border: 1px solid #555555;
83
+ }
84
+ }
85
+
86
+ th {
87
+ text-align: left;
88
+ }
89
+
90
+ tbody tr:nth-child(odd) td,
91
+ tbody tr:nth-child(odd) th {
92
+ background-color: #eee;
93
+
94
+ @media (prefers-color-scheme: dark) {
95
+ background-color: #2d2d2d;
96
+ }
97
+ }
@@ -0,0 +1,56 @@
1
+ // Buttons
2
+
3
+ .added {
4
+ background: #6a28e8;
5
+ color: #fff;
6
+ text-align: center;
7
+ font-variant: small-caps;
8
+ font-weight: bold;
9
+ padding: 1px 8px 3px;
10
+ margin: 0 3px 3px 0;
11
+ border-radius: 6px;
12
+ }
13
+
14
+ .improved {
15
+ background: #0c83e1;
16
+ color: #fff;
17
+ text-align: center;
18
+ font-variant: small-caps;
19
+ font-weight: bold;
20
+ padding: 1px 8px 3px;
21
+ margin: 0 3px 3px 0;
22
+ border-radius: 6px;
23
+ }
24
+
25
+ .fixed {
26
+ background: #00d486;
27
+ color: #fff;
28
+ text-align: center;
29
+ font-variant: small-caps;
30
+ font-weight: bold;
31
+ padding: 1px 8px 3px;
32
+ margin: 0 3px 3px 0;
33
+ border-radius: 6px;
34
+ }
35
+
36
+ .soon {
37
+ background: #ff6600;
38
+ color: #fff;
39
+ text-align: center;
40
+ font-variant: small-caps;
41
+ font-weight: bold;
42
+ padding: 1px 8px 3px;
43
+ margin: 0 3px 3px 0;
44
+ border-radius: 6px;
45
+ }
46
+
47
+ .removed {
48
+ background: #ff0000;
49
+ color: #fff;
50
+ text-align: center;
51
+ font-variant: small-caps;
52
+ font-weight: bold;
53
+ padding: 1px 8px 3px;
54
+ margin: 0 3px 3px 0;
55
+ border-radius: 6px;
56
+ }
data/_sass/_code.scss ADDED
@@ -0,0 +1,236 @@
1
+ // Code blocks and syntax highlighting
2
+
3
+ /* Applies to inline `code blocks` */
4
+ .highlighter-rouge {
5
+ font-family: $root-font-family;
6
+ font-size: 100%;
7
+ padding: 3px 4px;
8
+ background-color: #494949;
9
+ color: $code-light;
10
+ white-space: nowrap;
11
+
12
+ @media (prefers-color-scheme: dark) {
13
+ background-color: #212c2d;
14
+ color: $code-dark;
15
+ }
16
+ }
17
+
18
+ /* Applies to all code */
19
+ pre, code {
20
+ font-size: 14px;
21
+ font-family: $code-font-family;
22
+ font-style: normal;
23
+
24
+ font-feature-settings: "kern" off;
25
+ font-kerning: none;
26
+ font-variant: none;
27
+
28
+ background-color: #eef;
29
+
30
+ ::selection {
31
+ color: $code-bg;
32
+ background: #bdbdb3;
33
+ }
34
+
35
+ ::-moz-selection {
36
+ color: $code-bg;
37
+ background: #bdbdb3;
38
+ }
39
+
40
+ ::-webkit-selection {
41
+ color: $code-bg;
42
+ background: #bdbdb3;
43
+ }
44
+ }
45
+
46
+ /* Inline code, no highlight */
47
+ code {
48
+ padding: 2px 4px;
49
+ border-radius: 3px;
50
+
51
+ white-space: nowrap;
52
+ }
53
+
54
+ blockquote code {
55
+ color: #656565;
56
+ }
57
+
58
+ /* Inline code, highlight */
59
+ code.highlight {
60
+ border-radius: 3px;
61
+
62
+ color: #bdbdb3;
63
+ background-color: $code-bg;
64
+ }
65
+
66
+ /* Block code, no highlight */
67
+ pre {
68
+ border-radius: 5px;
69
+ margin: 30px * 0.75 30px / 2;
70
+ padding: 15px 17px;
71
+ overflow-x: auto;
72
+ background-color: #f1f1ff;
73
+
74
+ code {
75
+ border: 0;
76
+ padding: 0;
77
+
78
+ white-space: pre;
79
+ }
80
+ }
81
+
82
+ /* Block code, highlight */
83
+ figure.highlight, div.highlight {
84
+ position: relative;
85
+
86
+ pre {
87
+ background-color: $code-bg;
88
+ border: 1px solid $code-light;
89
+ border-radius: 15px;
90
+ box-shadow: 0 4px 30px rgba(0,0,0,.4);
91
+
92
+ @media (prefers-color-scheme: dark) {
93
+ border: 1px solid $code-dark;
94
+ }
95
+
96
+ code {
97
+ background-color: $code-bg;
98
+ color: #bdbdb3;
99
+
100
+ counter-reset: code;
101
+ display: block;
102
+ line-height: 1.5;
103
+
104
+ /* Display language name */
105
+ &[data-lang]::before {
106
+ content: attr(data-lang);
107
+ position: absolute;
108
+ right: 20px; // 15 + 5
109
+
110
+ font-size: 16px;
111
+ top: -12px;
112
+ padding: 0px 7px;
113
+ text-transform: uppercase;
114
+ font-weight: bold;
115
+
116
+ border: 1px solid $code-light;
117
+ border-top-left-radius: 15px;
118
+ border-top-right-radius: 15px;
119
+ border-bottom-left-radius: 15px;
120
+ border-bottom-right-radius: 15px;
121
+
122
+ min-width: 30px;
123
+ text-align: center;
124
+
125
+ color: $code-light;
126
+ background-color: $code-bg;
127
+
128
+ @media (prefers-color-scheme: dark) {
129
+ border: 1px solid $code-dark;
130
+ color: $code-dark;
131
+ }
132
+
133
+ @mixin media-query($device) {
134
+ @media screen and (max-width: $device) {
135
+ @content;
136
+ }
137
+ }
138
+
139
+ @include media-query(300px) {
140
+ visibility: hidden;
141
+ }
142
+ }
143
+
144
+ div {
145
+ counter-increment: code;
146
+
147
+ /* Line numbers */
148
+ &::before {
149
+ color: #608079;
150
+ content: counter(code);
151
+
152
+ width: 14px;
153
+ text-align: right;
154
+
155
+ /* Add a nice border */
156
+ display: inline-block;
157
+ padding-right: 30px / 4;
158
+ margin-right: 30px * 0.4;
159
+ border-right: 1px solid #656565;
160
+
161
+ /* For older browsers and Safari */
162
+ -webkit-touch-callout: none;
163
+ -webkit-user-select: none;
164
+ -khtml-user-select: none;
165
+ -moz-user-select: none;
166
+ -ms-user-select: none;
167
+ user-select: none;
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+
174
+ /* Hide language */
175
+ .hide-lang + figure code::before {
176
+ visibility: hidden;
177
+ }
178
+
179
+ /**
180
+ * Language-specific settings
181
+ */
182
+
183
+ .language-liquid {
184
+ .p {
185
+ color: #6aaf50;
186
+ }
187
+ }
188
+
189
+ /**
190
+ * ID-specific overrides
191
+ */
192
+
193
+ #c-example + figure {
194
+ .kt {
195
+ color: #5180b3;
196
+ }
197
+ }
198
+
199
+ #liquid-example + figure {
200
+ .p {
201
+ color: #bdbdb3;
202
+ }
203
+ }
204
+
205
+ #borders-example + figure {
206
+ div {
207
+ &::before {
208
+ padding-left: 0.625em;
209
+ border-left: 1px solid #656565;
210
+ }
211
+
212
+ &:first-of-type::before {
213
+ padding-top: 0.25em;
214
+ border-top: 1px solid #656565;
215
+ border-top-left-radius: 4px;
216
+ border-top-right-radius: 4px;
217
+ }
218
+
219
+ &:last-of-type::before {
220
+ padding-bottom: 0.25em;
221
+ border-bottom: 1px solid #656565;
222
+ border-bottom-left-radius: 4px;
223
+ border-bottom-right-radius: 4px;
224
+ }
225
+ }
226
+ }
227
+
228
+ #yaml-example + figure {
229
+ .na, .s {
230
+ color: #ab75c3;
231
+ }
232
+ }
233
+
234
+ .hl-1 + figure .line-1 {
235
+ background-color: #112b47;
236
+ }