dark-dungeons-theme 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0d6248f617a2624c1bebf746968439123f0308985ba5dfbea0f390c40b97e1ed
4
+ data.tar.gz: cf6ffc5d0c0689e2f6653705d5f8055bd230dc664957b6844b839c19c4634a2c
5
+ SHA512:
6
+ metadata.gz: ea7cb93c94522d8b3d71ca59327d27e851a82919ee6199b82afecf738db191be22b66fde3e5ce514759fdc8250026450dd418d1d99a7b492d0b174894b79cda8
7
+ data.tar.gz: 52e19b30267a78dd7adbda0f143117bf862478bd0456158e1a850ca01af32b8fb83504325f40e940bf2d5b11b04958391c712bb2f9a4afc2ba7ec5767dd143a1
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Dark Dungeons theme contributors
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
13
+ all 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
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # Dark Dungeons Theme
2
+
3
+ A visual overlay gem for [Just the Docs](https://github.com/just-the-docs/just-the-docs). It applies the Dark Dungeons look (dark palette, typography, links, and callout styling) without changing your site title, favicon, navigation content, or pages.
4
+
5
+ Inspired by the [Designing Dungeons Course](https://dungeons.hismajestytheworm.games/).
6
+
7
+ Works with sites created from [just-the-docs-template](https://github.com/just-the-docs/just-the-docs-template).
8
+
9
+ ## Usage
10
+
11
+ In your site's `Gemfile`:
12
+
13
+ ```ruby
14
+ gem "just-the-docs", "0.12.0"
15
+ gem "dark-dungeons-theme", path: "../designing-dungeons-theme"
16
+ # or from git:
17
+ # gem "dark-dungeons-theme", github: "sunflowermans/designing-dungeons-theme"
18
+ ```
19
+
20
+ In `_config.yml`, keep Just the Docs as the theme and load this gem as a plugin:
21
+
22
+ ```yaml
23
+ theme: just-the-docs
24
+
25
+ plugins:
26
+ - dark-dungeons-theme
27
+ ```
28
+
29
+ Then:
30
+
31
+ ```sh
32
+ bundle install
33
+ bundle exec jekyll serve
34
+ ```
35
+
36
+ Loading the plugin sets `color_scheme: dark-dungeons`, defaults
37
+ `callouts_level` to `loud`, and registers a common callout set. Your existing
38
+ pages and site metadata stay the same.
39
+
40
+ ### Callouts
41
+
42
+ These are available without extra config:
43
+
44
+ | Class | Color | Title |
45
+ | --- | --- | --- |
46
+ | `highlight` | yellow | — |
47
+ | `note` | purple | — |
48
+ | `important` | red | Important |
49
+ | `warning` | red | Warning |
50
+ | `new` | green | New |
51
+
52
+ ```markdown
53
+ {: .note }
54
+ A short note for the reader.
55
+ ```
56
+
57
+ Override or add callouts in `_config.yml` (your entries win on name clashes):
58
+
59
+ ```yaml
60
+ callouts:
61
+ important:
62
+ title: Critical
63
+ color: red
64
+ tip:
65
+ title: Tip
66
+ color: blue
67
+ ```
68
+
69
+ ### Opt out
70
+
71
+ ```yaml
72
+ dark_dungeons_theme: false
73
+ ```
74
+
75
+ ## What this gem changes
76
+
77
+ - Dark Dungeons color scheme
78
+ - Heading letter-spacing and `h2` underline
79
+ - Link weight and hover color
80
+ - Sidebar link weight
81
+ - Soft tinted callout backgrounds for the default callout set
82
+ - TOC label hiding in the markdown TOC
83
+
84
+ ## What this gem does not include
85
+
86
+ - Favicons or logos
87
+ - Author-specific callouts (e.g. course sidebars) or icons
88
+
89
+ ## License
90
+
91
+ MIT
@@ -0,0 +1,92 @@
1
+ {%- comment -%}
2
+ Dark Dungeons callout visuals for Just the Docs.
3
+ Soft tinted backgrounds (instead of bordered boxes) and loud-mode accent hues.
4
+ {%- endcomment -%}
5
+
6
+ {%- assign callout_background_hue = "000" -%}
7
+ {%- assign callout_color_hue = "300" -%}
8
+ {%- if site.callouts_level == "loud" or include.color_scheme == "dark" and site.callouts_level != "quiet" -%}
9
+ {%- assign callout_background_hue = "300" -%}
10
+ {%- assign callout_color_hue = "000" -%}
11
+ {%- endif -%}
12
+
13
+ div.opaque {
14
+ background-color: $body-background-color;
15
+ }
16
+
17
+ {%- for callout in site.callouts %}
18
+
19
+ {%- assign callout_opacity = callout[1].opacity | default: site.callouts_opacity | default: 0.2 -%}
20
+
21
+ p.{{ callout[0] }}, blockquote.{{ callout[0] }} {
22
+ background: rgba(${{ callout[1].color }}-{{ callout_background_hue }}, {{ callout_opacity }});
23
+ border-left: $border-radius solid ${{ callout[1].color }}-{{ callout_color_hue }};
24
+ border-radius: $border-radius;
25
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
26
+ padding: .8rem;
27
+ {% if callout[1].title %}
28
+ &::before {
29
+ color: ${{ callout[1].color }}-{{ callout_color_hue }};
30
+ content: "{{ callout[1].title }}";
31
+ display: block;
32
+ font-weight: bold;
33
+ text-transform: uppercase;
34
+ font-size: .75em;
35
+ padding-bottom: .125rem;
36
+ }
37
+ {% endif %}
38
+ > .{{ callout[0] }}-title {
39
+ color: ${{ callout[1].color }}-{{ callout_color_hue }};
40
+ display: block;
41
+ font-weight: bold;
42
+ text-transform: uppercase;
43
+ font-size: .75em;
44
+ padding-bottom: .125rem;
45
+ }
46
+ }
47
+
48
+ p.{{ callout[0] }}-title, blockquote.{{ callout[0] }}-title {
49
+ background: rgba(${{ callout[1].color }}-{{ callout_background_hue }}, {{ callout_opacity }});
50
+ border-left: $border-radius solid ${{ callout[1].color }}-{{ callout_color_hue }};
51
+ border-radius: $border-radius;
52
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
53
+ padding: .8rem;
54
+ > p:first-child {
55
+ margin-top: 0;
56
+ margin-bottom: 0;
57
+ color: ${{ callout[1].color }}-{{ callout_color_hue }};
58
+ display: block;
59
+ font-weight: bold;
60
+ text-transform: uppercase;
61
+ font-size: .75em;
62
+ padding-bottom: .125rem;
63
+ }
64
+ }
65
+
66
+ blockquote.{{ callout[0] }} {
67
+ margin-left: 0;
68
+ margin-right: 0;
69
+
70
+ > p:first-child {
71
+ margin-top: 0;
72
+ }
73
+
74
+ > p:last-child {
75
+ margin-bottom: 0;
76
+ }
77
+ }
78
+
79
+ blockquote.{{ callout[0] }}-title {
80
+ margin-left: 0;
81
+ margin-right: 0;
82
+
83
+ > p:nth-child(2) {
84
+ margin-top: 0;
85
+ }
86
+
87
+ > p:last-child {
88
+ margin-bottom: 0;
89
+ }
90
+ }
91
+
92
+ {% endfor -%}
@@ -0,0 +1,26 @@
1
+ // Dark Dungeons visual scheme for Just the Docs.
2
+ // Based on the dark scheme with contrast-tuned colors and typography.
3
+ @import "./color_schemes/dark";
4
+
5
+ $body-text-color: #b7b0b9;
6
+ // Keep dark scheme $body-heading-color ($grey-lt-000 / #f5f6fa).
7
+ // Original custom-dark set color:#fff on headings, but base.scss overrides
8
+ // that with $body-heading-color — matching that effective result.
9
+
10
+ // Sidebar and general links — lighter for dark backgrounds
11
+ $nav-child-link-color: $grey-lt-000;
12
+ $link-color: $grey-lt-000;
13
+
14
+ // Callout accents — higher contrast on dark surfaces
15
+ $blue-000: #80b3ff;
16
+ $green-000: #98e6a1;
17
+ $yellow-000: #ffe380;
18
+ $red-000: #ff9e9e;
19
+ $purple-000: #d8b3ff;
20
+
21
+ // Callout backgrounds — darker, still distinguishable
22
+ $blue-300: #1a365d;
23
+ $green-300: #1a4731;
24
+ $yellow-300: #644c04;
25
+ $red-300: #dd2e2e;
26
+ $purple-300: #432160;
@@ -0,0 +1,50 @@
1
+ /* Dark Dungeons visual overrides for Just the Docs.
2
+ Loaded after the theme stylesheet.
3
+
4
+ Heading font-weight/color from the original custom-dark scheme are
5
+ intentionally omitted: in Dark Dungeons those rules compile early
6
+ (via the color scheme) and lose to Just the Docs typography/base, so
7
+ h1 stays font-weight 300 / $body-heading-color. Re-applying them here
8
+ would make {: .fs-9 } heroes bold/white instead of matching the original. */
9
+
10
+ .callout,
11
+ .callout p {
12
+ color: #e6e1e8;
13
+ }
14
+
15
+ h1,
16
+ h2,
17
+ h3,
18
+ h4,
19
+ h5,
20
+ h6 {
21
+ letter-spacing: -0.02em;
22
+ }
23
+
24
+ h2 {
25
+ border-bottom: 1px solid #44434d;
26
+ padding-bottom: 0.3em;
27
+ }
28
+
29
+ .site-title {
30
+ font-size: 1.35rem !important;
31
+ white-space: nowrap;
32
+ }
33
+
34
+ a {
35
+ font-weight: 500;
36
+ text-decoration: none;
37
+ }
38
+
39
+ a:hover {
40
+ color: #b8f7ff;
41
+ text-decoration: underline;
42
+ }
43
+
44
+ .nav-list .nav-list-item .nav-list-link {
45
+ font-weight: 500;
46
+ }
47
+
48
+ #markdown-toc .label {
49
+ display: none;
50
+ }
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/dark_dungeons_theme/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "dark-dungeons-theme"
7
+ spec.version = DarkDungeonsTheme::VERSION
8
+ spec.authors = ["Dark Dungeons"]
9
+ spec.email = []
10
+
11
+ spec.summary = "Visual theme overlay for Just the Docs (Dark Dungeons)"
12
+ spec.description = "Applies the Dark Dungeons color scheme, typography, and callout " \
13
+ "styling to a Just the Docs site without changing content or branding."
14
+ spec.homepage = "https://github.com/sunflowermans/dark-dungeons-theme"
15
+ spec.license = "MIT"
16
+ spec.required_ruby_version = ">= 2.7.0"
17
+
18
+ spec.metadata = {
19
+ "homepage_uri" => spec.homepage,
20
+ "source_code_uri" => spec.homepage
21
+ }
22
+
23
+ spec.files = Dir.chdir(__dir__) do
24
+ tracked = `git ls-files -z`.split("\x0")
25
+ tracked = Dir[
26
+ "lib/**/*",
27
+ "_sass/**/*",
28
+ "_includes/**/*",
29
+ "assets/**/*",
30
+ "LICENSE*",
31
+ "README*",
32
+ "*.gemspec"
33
+ ] if tracked.empty?
34
+
35
+ tracked.reject do |f|
36
+ f.start_with?(".", "test/", "spec/", "features/") ||
37
+ File.directory?(f) ||
38
+ %w[Gemfile Gemfile.lock].include?(f)
39
+ end
40
+ end
41
+
42
+ spec.require_paths = ["lib"]
43
+
44
+ spec.add_runtime_dependency "jekyll", ">= 3.8.5", "< 5.0"
45
+ spec.add_development_dependency "bundler", ">= 2.3"
46
+ spec.add_development_dependency "rake", ">= 13.0"
47
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jekyll"
4
+
5
+ require_relative "dark_dungeons_theme/version"
6
+ require_relative "dark_dungeons_theme/hooks"
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DarkDungeonsTheme
4
+ # Common Just the Docs callouts, styled by this gem's palette/backgrounds.
5
+ # Site `_config.yml` entries override or extend these defaults.
6
+ DEFAULT_CALLOUTS = {
7
+ "highlight" => { "color" => "yellow" },
8
+ "note" => { "color" => "purple" },
9
+ "important" => { "title" => "Important", "color" => "red" },
10
+ "warning" => { "title" => "Warning", "color" => "red" },
11
+ "new" => { "title" => "New", "color" => "green" }
12
+ }.freeze
13
+
14
+ module Paths
15
+ module_function
16
+
17
+ def root
18
+ File.expand_path("../..", __dir__)
19
+ end
20
+
21
+ def sass_dir
22
+ File.join(root, "_sass")
23
+ end
24
+
25
+ def includes_dir
26
+ File.join(root, "_includes")
27
+ end
28
+
29
+ def assets_dir
30
+ File.join(root, "assets")
31
+ end
32
+ end
33
+
34
+ class << self
35
+ def enabled?(site)
36
+ site.config["dark_dungeons_theme"] != false
37
+ end
38
+
39
+ def apply_config!(site)
40
+ return unless enabled?(site)
41
+
42
+ site.config["color_scheme"] = "dark-dungeons"
43
+ site.config["callouts_level"] ||= "loud"
44
+ site.config["callouts"] = DEFAULT_CALLOUTS.merge(site.config["callouts"] || {})
45
+ end
46
+
47
+ def configure_sass_load_paths!(site)
48
+ return unless enabled?(site)
49
+
50
+ site.config["sass"] ||= {}
51
+ load_paths = Array(site.config["sass"]["load_paths"]).dup
52
+ load_paths << Paths.sass_dir unless load_paths.include?(Paths.sass_dir)
53
+ site.config["sass"]["load_paths"] = load_paths
54
+ end
55
+
56
+ def configure_includes_load_paths!(site)
57
+ return unless enabled?(site)
58
+
59
+ includes_paths = site.includes_load_paths
60
+ return if includes_paths.include?(Paths.includes_dir)
61
+
62
+ # Prefer site overrides, then this gem, then the active theme.
63
+ insert_at = [includes_paths.length, 1].min
64
+ includes_paths.insert(insert_at, Paths.includes_dir)
65
+ end
66
+
67
+ def register_assets!(site)
68
+ return unless enabled?(site)
69
+
70
+ css_name = "dark-dungeons-theme.css"
71
+ already_registered = site.static_files.any? do |file|
72
+ file.relative_path == "/assets/css/#{css_name}"
73
+ end
74
+ return if already_registered
75
+
76
+ site.static_files << Jekyll::StaticFile.new(
77
+ site,
78
+ Paths.root,
79
+ "assets/css",
80
+ css_name
81
+ )
82
+ end
83
+
84
+ def html_output?(doc)
85
+ return false if doc.output.nil? || doc.output.empty?
86
+ return true if doc.respond_to?(:output_ext) && doc.output_ext == ".html"
87
+
88
+ doc.output.include?("</head>")
89
+ end
90
+
91
+ def inject_stylesheet!(doc)
92
+ return unless html_output?(doc)
93
+ return unless doc.output.include?("</head>")
94
+ return if doc.output.include?("dark-dungeons-theme.css")
95
+
96
+ baseurl = doc.site.config["baseurl"].to_s.chomp("/")
97
+ href = "#{baseurl}/assets/css/dark-dungeons-theme.css"
98
+ tag = %(<link rel="stylesheet" href="#{href}">\n)
99
+ doc.output = doc.output.sub("</head>", "#{tag}</head>")
100
+ end
101
+ end
102
+ end
103
+
104
+ Jekyll::Hooks.register :site, :after_init do |site|
105
+ DarkDungeonsTheme.apply_config!(site)
106
+ DarkDungeonsTheme.configure_sass_load_paths!(site)
107
+ end
108
+
109
+ Jekyll::Hooks.register :site, :post_read do |site|
110
+ DarkDungeonsTheme.configure_includes_load_paths!(site)
111
+ DarkDungeonsTheme.register_assets!(site)
112
+ end
113
+
114
+ %i[pages documents].each do |owner|
115
+ Jekyll::Hooks.register owner, :post_render do |doc|
116
+ next unless DarkDungeonsTheme.enabled?(doc.site)
117
+
118
+ DarkDungeonsTheme.inject_stylesheet!(doc)
119
+ end
120
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DarkDungeonsTheme
4
+ VERSION = "0.1.0"
5
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dark-dungeons-theme
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dark Dungeons
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: jekyll
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 3.8.5
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '5.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 3.8.5
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '5.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: bundler
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '2.3'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '2.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '13.0'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '13.0'
60
+ description: Applies the Dark Dungeons color scheme, typography, and callout styling
61
+ to a Just the Docs site without changing content or branding.
62
+ email: []
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - LICENSE.txt
68
+ - README.md
69
+ - _includes/css/callouts.scss.liquid
70
+ - _sass/color_schemes/dark-dungeons.scss
71
+ - assets/css/dark-dungeons-theme.css
72
+ - dark-dungeons-theme.gemspec
73
+ - lib/dark-dungeons-theme.rb
74
+ - lib/dark_dungeons_theme/hooks.rb
75
+ - lib/dark_dungeons_theme/version.rb
76
+ homepage: https://github.com/sunflowermans/dark-dungeons-theme
77
+ licenses:
78
+ - MIT
79
+ metadata:
80
+ homepage_uri: https://github.com/sunflowermans/dark-dungeons-theme
81
+ source_code_uri: https://github.com/sunflowermans/dark-dungeons-theme
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 2.7.0
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubygems_version: 3.6.9
97
+ specification_version: 4
98
+ summary: Visual theme overlay for Just the Docs (Dark Dungeons)
99
+ test_files: []