jekyll-bonsai 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +674 -0
  3. data/README.md +11 -0
  4. data/_config.yml +155 -0
  5. data/_entries/digital-garden.bonsai.md +36 -0
  6. data/_entries/digital-garden.field-logs.md +10 -0
  7. data/_entries/digital-garden.fork.md +10 -0
  8. data/_entries/digital-garden.md +17 -0
  9. data/_entries/digital-garden.path.md +11 -0
  10. data/_entries/digital-garden.plants.md +12 -0
  11. data/_entries/digital-garden.pollinate.md +10 -0
  12. data/_entries/digital-garden.steps.md +10 -0
  13. data/_entries/digital-garden.stream.md +12 -0
  14. data/_entries/digital-garden.sweep.md +12 -0
  15. data/_entries/digital-garden.weather.md +12 -0
  16. data/_entries/features.md +10 -0
  17. data/_entries/features.notes.hover-preview.md +10 -0
  18. data/_entries/features.notes.md +12 -0
  19. data/_entries/features.notes.note-body.md +12 -0
  20. data/_entries/features.notes.note-body.share.md +10 -0
  21. data/_entries/features.notes.note-body.sidenotes.md +52 -0
  22. data/_entries/features.notes.note-foot.links.md +10 -0
  23. data/_entries/features.notes.note-foot.md +11 -0
  24. data/_entries/features.notes.note-foot.posts.md +10 -0
  25. data/_entries/features.notes.note-foot.webmentions.md +10 -0
  26. data/_entries/features.notes.note-head.md +10 -0
  27. data/_entries/features.pages.field-blogs.md +10 -0
  28. data/_entries/features.pages.md +12 -0
  29. data/_entries/features.pages.recent.md +10 -0
  30. data/_entries/features.pages.status-tags.md +10 -0
  31. data/_entries/features.site-nav.graph.links.md +10 -0
  32. data/_entries/features.site-nav.graph.links.namespacing.md +14 -0
  33. data/_entries/features.site-nav.graph.links.wikilinks.md +25 -0
  34. data/_entries/features.site-nav.graph.md +12 -0
  35. data/_entries/features.site-nav.graph.nodes.current-note.md +10 -0
  36. data/_entries/features.site-nav.graph.nodes.md +12 -0
  37. data/_entries/features.site-nav.graph.nodes.mia.missing-note.md +20 -0
  38. data/_entries/features.site-nav.graph.nodes.visited-status.md +10 -0
  39. data/_entries/features.site-nav.graph.toggle-graph.md +13 -0
  40. data/_entries/features.site-nav.graph.type.md +16 -0
  41. data/_entries/features.site-nav.graph.type.net-web.md +10 -0
  42. data/_entries/features.site-nav.graph.type.tree.md +12 -0
  43. data/_entries/features.site-nav.md +10 -0
  44. data/_entries/features.site-nav.visited.md +14 -0
  45. data/_entries/features.tags.md +13 -0
  46. data/_entries/features.themes.dark.md +12 -0
  47. data/_entries/features.themes.light.md +10 -0
  48. data/_entries/features.themes.md +12 -0
  49. data/_entries/features.visited.delete-data.md +10 -0
  50. data/_entries/features.visited.md +12 -0
  51. data/_entries/features.visitor-preferences.md +27 -0
  52. data/_entries/feedback.md +10 -0
  53. data/_entries/people.creator.md +12 -0
  54. data/_entries/people.md +13 -0
  55. data/_entries/people.visitors.md +12 -0
  56. data/_entries/plugins.jekyll-wikilinks.md +10 -0
  57. data/_entries/plugins.md +10 -0
  58. data/_entries/root.md +26 -0
  59. data/_includes/anchor-headings.html +152 -0
  60. data/_includes/connect.html +44 -0
  61. data/_includes/entry-attrs.html +27 -0
  62. data/_includes/head.html +23 -0
  63. data/_includes/hover-preview.html +84 -0
  64. data/_includes/img/bullet-ancestor.svg +5 -0
  65. data/_includes/img/bullet-net-web.svg +9 -0
  66. data/_includes/img/bullet-tree.svg +9 -0
  67. data/_includes/metrics.html +10 -0
  68. data/_includes/share.html +45 -0
  69. data/_includes/site-nav.html +48 -0
  70. data/_includes/styles.scss.liquid +3 -0
  71. data/_layouts/default.html +39 -0
  72. data/_layouts/entry.html +124 -0
  73. data/_layouts/post.html +29 -0
  74. data/_layouts/state.html +59 -0
  75. data/_layouts/table-wrappers.html +7 -0
  76. data/_layouts/vendor/compress.html +10 -0
  77. data/_pages/about.md +7 -0
  78. data/_pages/posts.html +19 -0
  79. data/_pages/recent.html +48 -0
  80. data/_plugins/doc_filters.rb +44 -0
  81. data/_plugins/prep_entry.rb +43 -0
  82. data/_plugins/sidenote.rb +123 -0
  83. data/_plugins/tags.rb +52 -0
  84. data/_sass/base/_layout.scss +54 -0
  85. data/_sass/base/_main.scss +203 -0
  86. data/_sass/base/_typography.scss +75 -0
  87. data/_sass/base/base.scss +3 -0
  88. data/_sass/color/dark.scss +58 -0
  89. data/_sass/color/light.scss +58 -0
  90. data/_sass/includes/_btn.scss +106 -0
  91. data/_sass/includes/_graph.scss +69 -0
  92. data/_sass/includes/_nav.scss +89 -0
  93. data/_sass/includes/_site_nav.scss +221 -0
  94. data/_sass/includes/_tooltip.scss +29 -0
  95. data/_sass/includes/includes.scss +9 -0
  96. data/_sass/markdown/_code.scss +340 -0
  97. data/_sass/markdown/_content.scss +400 -0
  98. data/_sass/markdown/_tables.scss +60 -0
  99. data/_sass/markdown/markdown.scss +7 -0
  100. data/_sass/modules.scss +14 -0
  101. data/_sass/pages/_index.scss +72 -0
  102. data/_sass/pages/_posts.scss +17 -0
  103. data/_sass/pages/_recent.scss +26 -0
  104. data/_sass/pages/_state.scss +72 -0
  105. data/_sass/pages/pages.scss +4 -0
  106. data/_sass/support/_functions.scss +9 -0
  107. data/_sass/support/_variables.scss +179 -0
  108. data/_sass/support/mixins/_buttons.scss +27 -0
  109. data/_sass/support/mixins/_layout.scss +56 -0
  110. data/_sass/support/mixins/_typography.scss +84 -0
  111. data/_sass/support/mixins/mixins.scss +3 -0
  112. data/_sass/support/support.scss +3 -0
  113. data/_sass/vendor/normalize.scss/README.md +7 -0
  114. data/_sass/vendor/normalize.scss/normalize.scss +349 -0
  115. data/_states/bamboo.md +8 -0
  116. data/_states/berry.md +8 -0
  117. data/_states/bloom.md +8 -0
  118. data/_states/bud.md +6 -0
  119. data/_states/fruit.md +8 -0
  120. data/_states/melon.md +8 -0
  121. data/_states/pot-bamboo.md +8 -0
  122. data/_states/seed.md +8 -0
  123. data/_states/sprout.md +8 -0
  124. data/_states/tags.md +8 -0
  125. data/_states/tea.md +8 -0
  126. data/assets/css/styles-dark.scss +3 -0
  127. data/assets/css/styles-light.scss +3 -0
  128. data/assets/css/styles.scss +8 -0
  129. data/assets/font/Cutive_Mono/CutiveMono-Regular.ttf +0 -0
  130. data/assets/font/Cutive_Mono/OFL.txt +93 -0
  131. data/assets/font/Old_Standard_TT/OFL.txt +93 -0
  132. data/assets/font/Old_Standard_TT/OldStandardTT-Bold.ttf +0 -0
  133. data/assets/font/Old_Standard_TT/OldStandardTT-Italic.ttf +0 -0
  134. data/assets/font/Old_Standard_TT/OldStandardTT-Regular.ttf +0 -0
  135. data/assets/font/exo2/Exo2-Italic-VariableFont_wght.ttf +0 -0
  136. data/assets/font/exo2/Exo2-VariableFont_wght.ttf +0 -0
  137. data/assets/font/exo2/OFL.txt +93 -0
  138. data/assets/font/exo2/README.txt +81 -0
  139. data/assets/font/exo2/static/Exo2-Black.ttf +0 -0
  140. data/assets/font/exo2/static/Exo2-BlackItalic.ttf +0 -0
  141. data/assets/font/exo2/static/Exo2-Bold.ttf +0 -0
  142. data/assets/font/exo2/static/Exo2-BoldItalic.ttf +0 -0
  143. data/assets/font/exo2/static/Exo2-ExtraBold.ttf +0 -0
  144. data/assets/font/exo2/static/Exo2-ExtraBoldItalic.ttf +0 -0
  145. data/assets/font/exo2/static/Exo2-ExtraLight.ttf +0 -0
  146. data/assets/font/exo2/static/Exo2-ExtraLightItalic.ttf +0 -0
  147. data/assets/font/exo2/static/Exo2-Italic.ttf +0 -0
  148. data/assets/font/exo2/static/Exo2-Light.ttf +0 -0
  149. data/assets/font/exo2/static/Exo2-LightItalic.ttf +0 -0
  150. data/assets/font/exo2/static/Exo2-Medium.ttf +0 -0
  151. data/assets/font/exo2/static/Exo2-MediumItalic.ttf +0 -0
  152. data/assets/font/exo2/static/Exo2-Regular.ttf +0 -0
  153. data/assets/font/exo2/static/Exo2-SemiBold.ttf +0 -0
  154. data/assets/font/exo2/static/Exo2-SemiBoldItalic.ttf +0 -0
  155. data/assets/font/exo2/static/Exo2-Thin.ttf +0 -0
  156. data/assets/font/exo2/static/Exo2-ThinItalic.ttf +0 -0
  157. data/assets/img/bonsai-dark.png +0 -0
  158. data/assets/img/bonsai-dark.svg +106 -0
  159. data/assets/img/bonsai-light.png +0 -0
  160. data/assets/img/bonsai-light.svg +81 -0
  161. data/assets/img/favicon-dark.png +0 -0
  162. data/assets/img/favicon-light.png +0 -0
  163. data/assets/img/nav-base-dark.svg +1 -0
  164. data/assets/img/nav-base-light.svg +1 -0
  165. data/assets/img/nav-bonsai-dark.svg +1 -0
  166. data/assets/img/nav-bonsai-light.svg +1 -0
  167. data/assets/img/nav-dot-dark.svg +1 -0
  168. data/assets/img/nav-dot-light.svg +1 -0
  169. data/assets/img/nav-wiki-links-dark.svg +1 -0
  170. data/assets/img/nav-wiki-links-light.svg +1 -0
  171. data/assets/js/entry.js +102 -0
  172. data/assets/js/graph.js +552 -0
  173. data/assets/js/scripts.js +80 -0
  174. data/assets/js/site-nav.js +132 -0
  175. data/assets/js/theme-colors.js +71 -0
  176. data/index.html +82 -0
  177. metadata +360 -0
@@ -0,0 +1,44 @@
1
+ # liquid template to filter for most recently created/edited docs
2
+ require 'time'
3
+
4
+ module Jekyll
5
+ module DocFilters
6
+ def notable(docs)
7
+ return docs.select { |d| d.data.include?('notable') && (d.data['notable'] == true) }
8
+ end
9
+
10
+ # returns most recently created/updated docs up to the defined 'num'ber.
11
+ # adds a 'weather' data attribute to render on the page.
12
+ def recent(docs, num=10)
13
+ return if docs.nil?
14
+ num = self.to_integer(num)
15
+ # sort docs by most recently updated
16
+ recent_docs = docs.sort_by { |d| d.data['updated'] }.reverse[0..(num - 1)]
17
+ # assign weather attribute: if 'created' and 'updated' happened on the same day, presume creation status.
18
+ recent_docs.each do |docs|
19
+ day_created = Time.at(docs.data['created']).to_date
20
+ day_updated = Time.at(docs.data['updated']).to_date
21
+ end
22
+ return recent_docs
23
+ end
24
+
25
+ def weather(doc)
26
+ day_created = Time.at(doc['created']).to_date
27
+ day_updated = Time.at(doc['updated']).to_date
28
+ return day_created === day_updated ? "🌤" : "🌧"
29
+ end
30
+
31
+ # from: https://github.com/Shopify/liquid/blob/eab13a07d9861a38d993d2749ae25f06ff76426b/lib/liquid/utils.rb#L38
32
+ def to_integer(num)
33
+ return num if num.is_a?(Integer)
34
+ num = num.to_s
35
+ begin
36
+ Integer(num)
37
+ rescue ::ArgumentError
38
+ raise ArgumentError, "invalid integer"
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ Liquid::Template.register_filter(Jekyll::DocFilters)
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ require 'nanoid'
3
+ require 'time'
4
+
5
+ class EntryVerificationGenerator < Jekyll::Generator
6
+ safe true
7
+ priority :highest
8
+
9
+ def generate(site)
10
+ #
11
+ # init jekyll vars
12
+ #
13
+ all_entries = site.collections['entries'].docs
14
+ # all_pages = site.pages
15
+ all_docs = all_entries # + all_pages
16
+
17
+ link_extension = site.config["permalink"] != "pretty" ? '.html' : ''
18
+
19
+ all_docs.each do |cur_entry|
20
+ # validation and sanitization
21
+ prep_entries(site, cur_entry, link_extension)
22
+ end
23
+ end
24
+
25
+ # verify all entries end with a "\n" so sidenotes works
26
+ # (sidenotes don't detect the last definition if there is no ending "\n").
27
+ def prep_entries(site, entry, link_extension)
28
+ # make sure ids are proper nano id format
29
+ if !(entry.data['id'] =~ /^[1234567890abcdef]{10}$/)
30
+ entry.data['id'] = Nanoid.generate(size: 10, alphabet: '1234567890abcdef')
31
+ end
32
+ # from: https://stackoverflow.com/questions/16235601/what-are-the-steps-to-getting-this-custom-permalink-scheme-in-jekyll
33
+ # Until Jekyll allows me to use :id, I have to resort to this
34
+ if link_extension.empty?
35
+ entry.data['permalink'] = '/entry/' + entry.data['id'] + '/'
36
+ else
37
+ entry.data['permalink'] = '/entry/' + entry.data['id'] + link_extension
38
+ end
39
+ # sanitize timestamps: remove milliseconds from epoch time
40
+ entry.data['created'] = Time.at(entry.data['created'].to_s[0..-4].to_i)
41
+ entry.data['updated'] = Time.at(entry.data['updated'].to_s[0..-4].to_i)
42
+ end
43
+ end
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class SideNoteGenerator < Generator
5
+ safe true
6
+ attr_accessor :md_docs
7
+
8
+ ##
9
+ # parser constants
10
+ ##
11
+ # constants are taken from kramdown and baseparser.
12
+ # (for easier kramdown integration)
13
+
14
+ # from baseparser: https://github.com/ruby/rexml/blob/master/lib/rexml/parsers/baseparser.rb#L36
15
+ LETTER = '[:alpha:]'
16
+ COMBININGCHAR = '' # TODO
17
+ EXTENDER = '' # TODO
18
+ NCNAME_STR= "[#{LETTER}_][-[:alnum:]._#{COMBININGCHAR}#{EXTENDER}]*"
19
+ UNAME_STR= "(?:#{NCNAME_STR}:)?#{NCNAME_STR}"
20
+
21
+ # from kramdown: https://github.com/gettalong/kramdown
22
+ # from blank_line.rb
23
+ BLANK_LINE = /(?>^\s*\n)+/
24
+ # from eob.rb
25
+ EOB_MARKER = /^\^\s*?\n/
26
+ # from kramdown.rb
27
+ OPT_SPACE = / {0,3}/
28
+ # Regexp for matching indentation (one tab or four spaces)
29
+ INDENT = /^(?:\t| {4})/
30
+ # from extensions.rb
31
+ ALD_ID_CHARS = /[\w-]/
32
+ ALD_ANY_CHARS = /\\\}|[^\}]/
33
+ ALD_ID_NAME = /\w#{ALD_ID_CHARS}*/
34
+ IAL_BLOCK = /\{:(?!:|\/)(#{ALD_ANY_CHARS}+)\}\s*?\n/
35
+ IAL_BLOCK_START = /^#{OPT_SPACE}#{IAL_BLOCK}/
36
+ # from html.rb
37
+ # Some HTML elements like script belong to both categories (i.e. are valid in block and
38
+ # span HTML) and don't appear therefore!
39
+ # script, textarea
40
+ HTML_SPAN_ELEMENTS = %w[a abbr acronym b big bdo br button cite code del dfn em i img input
41
+ ins kbd label mark option q rb rbc rp rt rtc ruby samp select small
42
+ span strong sub sup tt u var]
43
+ # from paragraph.rb
44
+ LAZY_END_HTML_SPAN_ELEMENTS = HTML_SPAN_ELEMENTS + %w[script]
45
+ LAZY_END_HTML_START = /<(?>(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR})/
46
+ LAZY_END_HTML_STOP = /<\/(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR}\s*>/m
47
+ # from markdown.rb
48
+ # CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+)*/
49
+ # because `.gsub(INDENT, '')` in footnote.rb
50
+ # CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:s[ \t]*\S.*\n)+)*/
51
+ # from codeblock.rb
52
+ CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+(?:(?!#{IAL_BLOCK_START}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START})^[ \t]*\S.*\n)*)*/
53
+
54
+ # footnotes (for reference)
55
+ # FOOTNOTE_DEFINITION_START = /^#{OPT_SPACE}\[\^(#{ALD_ID_NAME})\]:\s*?(.*?\n#{CODEBLOCK_MATCH})/
56
+ # FOOTNOTE_MARKER_START = /\[\^(#{ALD_ID_NAME})\]/
57
+ ##
58
+ # constants for local use
59
+ ##
60
+ # right
61
+ RIGHT_SIDENOTE_DEFINITION_START = /^#{OPT_SPACE}\[\>(#{ALD_ID_NAME})\]:\s*?(.*?\n#{CODEBLOCK_MATCH})/
62
+ RIGHT_SIDENOTE_MARKER_START = /\[\>(#{ALD_ID_NAME})\]/
63
+ # left
64
+ LEFT_SIDENOTE_DEFINITION_START = /^#{OPT_SPACE}\[\<(#{ALD_ID_NAME})\]:\s*?(.*?\n#{CODEBLOCK_MATCH})/
65
+ LEFT_SIDENOTE_MARKER_START = /\[\<(#{ALD_ID_NAME})\]/
66
+
67
+ def generate(site)
68
+
69
+ # setup markdown docs
70
+ docs = site.pages + site.docs_to_write
71
+ @md_docs = docs.filter {|doc| site.find_converter_instance(Jekyll::Converters::Markdown).matches(doc.extname) }
72
+
73
+ link_extension = !!site.config["use_html_extension"] ? '.html' : ''
74
+
75
+ @md_docs.each do |cur_doc|
76
+ # check for newlines @ eof.
77
+ # (kramdown can handle footnotes with no newline, but the regex i'm getting requires a newline after the last footnote to find it.)
78
+ if cur_doc.content[-1] != "\n"
79
+ Jekyll.logger.warn "Missing newline at end of file -- this could break sidenotes: ", cur_note.data['title']
80
+ end
81
+ parse_sidenote(cur_doc, "left")
82
+ parse_sidenote(cur_doc, "right")
83
+ end
84
+ end
85
+
86
+ # just get tufte-style sidenotes working for now...
87
+ # if there's time, emulate gwern's method: https://github.com/gwern/gwern.net/blob/9e6893033ec63248b1f0b29df119c40d39a7dcef/css/default.css#L1223
88
+
89
+ # mark -> [<left-sidenote], [>right-sidenote]
90
+ # def -> [<left-sidenote]:, [>right-sidenote]:
91
+ # `side` should be 'right' or 'left'
92
+ def parse_sidenote(doc, side)
93
+ # left v right setup
94
+ if side == "right"
95
+ sidenote_def_regex = RIGHT_SIDENOTE_DEFINITION_START
96
+ # sidenote_mark_regex = RIGHT_SIDENOTE_MARKER_START
97
+ css_class = "rsn"
98
+ sn_regex = /\>/
99
+ elsif side == "left"
100
+ sidenote_def_regex = LEFT_SIDENOTE_DEFINITION_START
101
+ # sidenote_mark_regex = LEFT_SIDENOTE_MARKER_START
102
+ css_class = "lsn"
103
+ sn_regex = /\</
104
+ else
105
+ Jekyll.logger.error "Can't process sidenote that is not either 'right' or 'left'."
106
+ return
107
+ end
108
+ # process sidenotes
109
+ sidenotes = doc.content.scan(sidenote_def_regex)
110
+ doc.content.gsub!(sidenote_def_regex, '') # rm sidenote defs from original note.
111
+ i = 0
112
+ sidenotes.each do |sidenote|
113
+ i += 1
114
+ mark = sidenote[0]
115
+ definition = sidenote[1]
116
+ doc.content = doc.content.gsub(
117
+ /\[#{sn_regex}(#{mark})\]/i,
118
+ "<label for=\"#{css_class}-#{i}\" class=\"sidenote-toggle sidenote-number\"></label><input type=\"checkbox\" id=\"#{css_class}-#{i}\" class=\"sidenote-toggle\"><span class=\"#{css_class}\">#{definition}</span>"
119
+ )
120
+ end
121
+ end
122
+ end
123
+ end
data/_plugins/tags.rb ADDED
@@ -0,0 +1,52 @@
1
+ # liquid template to filter between semantic and status tags
2
+ module Jekyll
3
+ module TagFilters
4
+
5
+ # filter tags
6
+
7
+ def sem_tags(tags)
8
+ return if tags.nil?
9
+ site = @context.registers[:site]
10
+ sem_tags = []
11
+ site.collections['entries'].docs.each do |n|
12
+ tags.each do |t|
13
+ if n['namespace'] == t
14
+ sem_tags << {
15
+ 'tag' => n['title'],
16
+ # 'namespace' => n['namespace'],
17
+ 'url' => n.url
18
+ }
19
+ end
20
+ end
21
+ end
22
+ return sem_tags
23
+ end
24
+
25
+ def stat_tags(tags)
26
+ return if tags.nil?
27
+ site = @context.registers[:site]
28
+ stat_tags = []
29
+ site.collections['states'].docs.each do |st|
30
+ tags.each do |t|
31
+ if st['emoji'] == t
32
+ stat_tags << {
33
+ 'emoji' => st['emoji'],
34
+ 'url' => st.url
35
+ }
36
+ end
37
+ end
38
+ end
39
+ return stat_tags
40
+ end
41
+
42
+ # filter posts
43
+
44
+ def sem_tag_posts(namespace)
45
+ return if namespace.nil?
46
+ site = @context.registers[:site]
47
+ return site.posts.docs.select { |p| p['tags'].include?(namespace) }
48
+ end
49
+ end
50
+ end
51
+
52
+ Liquid::Template.register_filter(Jekyll::TagFilters)
@@ -0,0 +1,54 @@
1
+ //
2
+ // two column layout
3
+ //
4
+
5
+ .side-bar {
6
+ z-index: 1;
7
+ display: flex;
8
+ flex-wrap: wrap;
9
+
10
+ @include mq(md) {
11
+ width: $nav-width-md;
12
+ flex-wrap: nowrap;
13
+ position: fixed;
14
+ height: 100%;
15
+ }
16
+
17
+ @include mq(lg) {
18
+ width: $nav-width-lg;
19
+ }
20
+ }
21
+
22
+ .main {
23
+ height: 100%;
24
+
25
+ @include mq(md) {
26
+ max-width: $content-width;
27
+ margin-left: $nav-width-md;
28
+ }
29
+
30
+ @include mq(lg) {
31
+ margin-left: $nav-width-lg;
32
+ }
33
+ }
34
+
35
+ .main-content-wrap {
36
+ @include container;
37
+
38
+ display: flex;
39
+ flex-direction: column;
40
+
41
+ padding-top: $gutter-spacing-sm;
42
+ padding-bottom: $gutter-spacing-sm;
43
+
44
+ min-height: 100vh;
45
+
46
+ @include mq(md) {
47
+ padding-top: $gutter-spacing;
48
+ padding-bottom: $gutter-spacing;
49
+ }
50
+ }
51
+
52
+ .entry-body {
53
+ padding: $sp-3;
54
+ }
@@ -0,0 +1,203 @@
1
+ //
2
+ // Base element style overrides
3
+ //
4
+ // stylelint-disable selector-no-type, selector-max-type
5
+
6
+ * {
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ ::selection {
11
+ color: $grey-dk-100;
12
+ background: #E6E09E;
13
+ }
14
+
15
+ html {
16
+ @include fs-4;
17
+ scroll-behavior: smooth;
18
+ }
19
+
20
+ body {
21
+ font-family: $body-font-family;
22
+ font-size: inherit;
23
+ line-height: $body-line-height;
24
+ color: $body-text-color;
25
+ background-color: $body-background-color;
26
+ }
27
+
28
+ ol,
29
+ ul,
30
+ dl,
31
+ pre,
32
+ address,
33
+ blockquote,
34
+ table,
35
+ div,
36
+ hr,
37
+ form,
38
+ fieldset,
39
+ noscript .table-wrapper {
40
+ margin-top: 0;
41
+ }
42
+
43
+ h1,
44
+ h2,
45
+ h3,
46
+ h4,
47
+ h5,
48
+ h6 {
49
+ margin-top: 0;
50
+ margin-bottom: 1em;
51
+ font-weight: 500;
52
+ line-height: $body-heading-line-height;
53
+ color: $body-heading-color;
54
+ }
55
+
56
+ p {
57
+ margin-top: 1em;
58
+ margin-bottom: 1em;
59
+ }
60
+
61
+ a {
62
+ color: $link-color;
63
+ text-decoration: none;
64
+ }
65
+
66
+ a:not([class]) {
67
+ text-decoration: none;
68
+ background-image: linear-gradient($border-color 0%, $border-color 100%);
69
+ background-repeat: repeat-x;
70
+ background-position: 0 100%;
71
+ background-size: 1px 1px;
72
+
73
+ &:hover {
74
+ background-image: linear-gradient(
75
+ rgba($link-color, 0.45) 0%,
76
+ rgba($link-color, 0.45) 100%
77
+ );
78
+ background-size: 1px 1px;
79
+ }
80
+ }
81
+
82
+ code {
83
+ font-family: $mono-font-family;
84
+ font-size: 0.75em;
85
+ line-height: $body-line-height;
86
+ }
87
+
88
+ figure,
89
+ pre {
90
+ margin: 0;
91
+ }
92
+
93
+ li {
94
+ margin: 0.25em 0;
95
+ }
96
+
97
+ img {
98
+ max-width: 100%;
99
+ height: auto;
100
+ }
101
+
102
+ hr {
103
+ height: 1px;
104
+ padding: 0;
105
+ margin: $sp-6 0;
106
+ background-color: $border-color;
107
+ border: 0;
108
+ }
109
+
110
+ // wiki-link classes
111
+
112
+ .invalid-wiki-link {
113
+ color: $grey-dk-000;
114
+ background: $invalid-wiki-link-color;
115
+ cursor: help;
116
+ }
117
+
118
+ .wiki-link {
119
+ color: $wiki-link-color;
120
+ }
121
+
122
+ .wiki-link-embed {
123
+ position: relative;
124
+ border: 1px solid $separator-color;
125
+ border-radius: 15px;
126
+ padding: $sp-3;
127
+
128
+ .wiki-link-embed-title {
129
+ @include fs-6;
130
+ padding-top: $sp-3;
131
+ padding-left: $sp-3;
132
+ }
133
+
134
+ .wiki-link-embed-content {
135
+ padding: $sp-3;
136
+ }
137
+
138
+ .wiki-link-embed-link {
139
+ position: absolute;
140
+ top: 1em;
141
+ right: 1em;
142
+
143
+ &::before {
144
+ content: "🥾";
145
+ }
146
+
147
+ &:hover {
148
+ filter: drop-shadow(0 0 0.8mm $drop-shadow-brown);
149
+ }
150
+ }
151
+ }
152
+
153
+ .wiki-link-img {
154
+ width: 50px;
155
+ height: 50px;
156
+ }
157
+
158
+ .sem-tag {
159
+ @include fs-2;
160
+ padding: $sp-2;
161
+ border: 1px solid $separator-color;
162
+ border-radius: 15px;
163
+ color: $wiki-link-color;
164
+
165
+ &:hover {
166
+ background-color: $base-button-color;
167
+ }
168
+ }
169
+
170
+ .stat-tag {
171
+ filter: drop-shadow(0 0 0.2mm $drop-shadow-green);
172
+ }
173
+
174
+ .infobox {
175
+ @include fs-2;
176
+ float: right;
177
+ margin-left: $sp-2;
178
+ margin-right: $sp-2;
179
+ padding-left: $sp-3;
180
+ padding-right: $sp-3;
181
+ padding-top: $sp-3;
182
+ border: 1px solid $separator-color;
183
+ border-radius: 15px;
184
+
185
+ .title {
186
+ text-align: center;
187
+ margin-top: 0;
188
+ }
189
+
190
+ ul {
191
+ padding: 0 !important;
192
+ padding-left: $sp-2 !important;
193
+ padding-right: $sp-2 !important;
194
+
195
+ li {
196
+ list-style-type: none !important;
197
+
198
+ &::before {
199
+ content: "" !important;
200
+ }
201
+ }
202
+ }
203
+ }