nibula 2.3.0 → 2.4.1

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.
package/.eleventy.js CHANGED
@@ -47,6 +47,23 @@ module.exports = function (eleventyConfig) {
47
47
  });
48
48
 
49
49
  eleventyConfig.amendLibrary("md", (markdownLibrary) => {
50
+ markdownLibrary.renderer.rules.link_open = function (
51
+ tokens,
52
+ idx,
53
+ options,
54
+ env,
55
+ self,
56
+ ) {
57
+ const href = tokens[idx].attrGet("href");
58
+
59
+ if (href && (href.startsWith("http://") || href.startsWith("https://"))) {
60
+ tokens[idx].attrSet("target", "_blank");
61
+ tokens[idx].attrSet("rel", "noopener noreferrer");
62
+ }
63
+
64
+ return self.renderToken(tokens, idx, options);
65
+ };
66
+
50
67
  markdownLibrary
51
68
  .use(markdownItAnchor, {
52
69
  level: ANCHOR_LEVELS,
@@ -70,6 +87,16 @@ module.exports = function (eleventyConfig) {
70
87
  // Passthrough copy
71
88
  // ---------------------------------------------------------------------------
72
89
 
90
+ eleventyConfig.addPassthroughCopy({
91
+ // Prism syntax highlighting theme
92
+ "node_modules/prismjs/themes/prism-tomorrow.css": "css/prism.css",
93
+
94
+ // Bootstrap
95
+ "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js":
96
+ "js/bootstrap.bundle.min.js",
97
+ "node_modules/bootstrap-icons/font/fonts": "css/fonts",
98
+ });
99
+
73
100
  // Project assets
74
101
  eleventyConfig.addPassthroughCopy("src/frontend/assets");
75
102
  eleventyConfig.addPassthroughCopy("src/frontend/robots.txt");
@@ -80,12 +107,7 @@ module.exports = function (eleventyConfig) {
80
107
  "src/frontend/hosting/web.config": "web.config",
81
108
  });
82
109
 
83
- // Prism syntax highlighting theme
84
- eleventyConfig.addPassthroughCopy({
85
- "node_modules/prismjs/themes/prism-tomorrow.css": "css/prism.css",
86
- });
87
-
88
- // CSS frameworks — uncomment the one you are using
110
+ // node_modules dependencies
89
111
  eleventyConfig.addPassthroughCopy({
90
112
  // Bootstrap
91
113
  "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js":
@@ -107,7 +129,7 @@ module.exports = function (eleventyConfig) {
107
129
  // ---------------------------------------------------------------------------
108
130
 
109
131
  eleventyConfig.addFilter(
110
- "markdownPath",
132
+ "componentsPath",
111
133
  (name) => `${MARKDOWN_BASE_PATH}${name}`,
112
134
  );
113
135
 
@@ -145,7 +167,6 @@ module.exports = function (eleventyConfig) {
145
167
  // ---------------------------------------------------------------------------
146
168
 
147
169
  return {
148
- markdownTemplateEngine: TEMPLATE_ENGINE,
149
170
  htmlTemplateEngine: TEMPLATE_ENGINE,
150
171
 
151
172
  dir: {
package/CHANGELOG.md CHANGED
@@ -5,6 +5,31 @@ All notable changes to Nibula are documented here.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.4.1] 2026-08-24
9
+
10
+ ### Changed
11
+ - Changed template.njk snippets for renderFile
12
+ - markdown files used as components will now require {class="class"} or {id="id"} instead of {#id} or {.class}
13
+
14
+ ### Fixed
15
+ - Fixed json data files passed in renderfile to markdown files not rendering
16
+
17
+ ## [2.4.0] - 2026-08-23
18
+
19
+ ### Added
20
+ - `ignoreMissing` on header and footer includes in `base.njk`, so a project without those components still builds
21
+
22
+ ### Changed
23
+ - Copyright notice centered below a rule in the footer
24
+ - Removed `_animations.scss` and `_mobile.scss` from the default SCSS modules — responsive rules now live in the module they belong to
25
+ - Reviewed commented snippets across SCSS, JS and TS templates
26
+ - Raised scaffold dependency floors: `esbuild` to `^0.28.2` and `@11ty/eleventy-img` to `^7.0.0` close known advisories; `@11ty/eleventy`, `sass`, `uikit` and `concurrently` aligned to current releases
27
+ - In new pages.njk files, renderfiel will be inside a div and not in an article tag
28
+
29
+ ### Fixed
30
+ - Removing a page with the CLI no longer deletes its build output — the output directory is a build artifact and may be live in production
31
+ - Corrected the local CLI version label
32
+
8
33
  ## [2.3.0] - 2026-08-19
9
34
 
10
35
  ### Added
package/bin/create.js CHANGED
@@ -156,8 +156,8 @@ const PROJECT_PACKAGE = {
156
156
  "assistant": "nib cli"
157
157
  },
158
158
  dependencies: {
159
- '@11ty/eleventy': '^3.1.2',
160
- '@11ty/eleventy-img': '^6.0.4',
159
+ '@11ty/eleventy': '^3.1.6',
160
+ '@11ty/eleventy-img': '^7.0.0',
161
161
  '@11ty/eleventy-plugin-syntaxhighlight': '^5.0.2',
162
162
  'bootstrap': '^5.3.8',
163
163
  'bootstrap-icons': '^1.13.1',
@@ -166,13 +166,13 @@ const PROJECT_PACKAGE = {
166
166
  'glob': '^13.0.6',
167
167
  'markdown-it-anchor': '^9.2.1',
168
168
  'markdown-it-attrs': '^5.0.1',
169
- 'uikit': '^3.25.13',
169
+ 'uikit': '^3.25.21',
170
170
  },
171
171
  devDependencies: {
172
172
  'nibula': `^${SELF_VERSION}`,
173
- 'concurrently': '^9.2.1',
174
- 'esbuild': '^0.27.3',
175
- 'sass': '^1.77.0',
173
+ 'concurrently': '^9.2.4',
174
+ 'esbuild': '^0.28.2',
175
+ 'sass': '^1.103.1',
176
176
  },
177
177
  };
178
178
 
package/bin/delegate.js CHANGED
@@ -1,8 +1,6 @@
1
1
  const fs = require('fs');
2
2
  const path = require('path');
3
3
  const { spawnSync } = require('child_process');
4
- const { color } = require('../tools/lib/colors');
5
- const { message } = require('../tools/lib/logger');
6
4
 
7
5
  const PACKAGE_NAME = 'nibula';
8
6
  const NODE_MODULES = 'node_modules';
@@ -22,14 +20,6 @@ function realPath(target) {
22
20
  }
23
21
  }
24
22
 
25
- function readVersion(packageRoot) {
26
- try {
27
- return JSON.parse(fs.readFileSync(path.join(packageRoot, PACKAGE_FILE), 'utf8')).version;
28
- } catch {
29
- return null;
30
- }
31
- }
32
-
33
23
  function delegateToLocal(projectRoot) {
34
24
  if (process.env[LOCAL_FLAG] === LOCAL_FLAG_VALUE) return;
35
25
 
@@ -41,12 +31,6 @@ function delegateToLocal(projectRoot) {
41
31
  const localEntry = path.join(localRoot, ENTRY_FILE);
42
32
  if (!fs.existsSync(localEntry)) return;
43
33
 
44
- const localVersion = readVersion(localRoot);
45
-
46
- if (localVersion && localVersion !== globalVersion) {
47
- console.log(`${color.dim}${message('cli.usingLocalVersion', { local: localVersion, global: globalVersion })}${color.reset}`);
48
- }
49
-
50
34
  const result = spawnSync(process.execPath, [localEntry, ...process.argv.slice(2)], {
51
35
  stdio: 'inherit',
52
36
  cwd: process.cwd(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nibula",
3
- "version": "2.3.0",
3
+ "version": "2.4.1",
4
4
  "description": "A beginner-friendly static site generator built on Eleventy that stays close to vanilla HTML, CSS and JS — with a page-management CLI, an optional PHP backend, and SEO files generated for you.",
5
5
  "keywords": [
6
6
  "11ty",
@@ -5,21 +5,18 @@
5
5
  </div>
6
6
  <div>
7
7
  <h6>Legal</h6>
8
- <small>
9
8
  <ul>
10
9
  <li><a href="{{ site.legal.privacy }}">Privacy Policy</a></li>
11
10
  <li><a href="{{ site.legal.cookie }}">Cookie Policy</a></li>
12
11
  <li><a href="{{ site.legal.terms }}">Terms and conditions</a></li>
13
12
  </ul>
14
- </small>
15
13
  </div>
16
- <div>
17
- <h6>
18
- &copy; {{ site.legal.copyright.year }}
19
- {{ site.site_name }}
20
- </h6>
21
- <h6>
22
- {{ site.legal.copyright.text }}
23
- </h6>
14
+
15
+ <hr />
16
+
17
+ <div class="copyright">
18
+ <p>
19
+ &copy; {{ site.legal.copyright.year }} {{ site.site_name }} - {{ site.legal.copyright.text }}
20
+ </p>
24
21
  </div>
25
- </footer>
22
+ </footer>
@@ -1,7 +1,7 @@
1
1
  <header>
2
2
  <nav>
3
3
  <a class="logo" href="/">
4
- <img src="{{ site.logo }}" alt="{{ site.title }}" height="40">
4
+ <img src="{{ site.logo }}"> {{ site.site_name }}
5
5
  </a>
6
6
  </nav>
7
7
  </header>
@@ -1,4 +1,4 @@
1
- <div class="fade-in not-found">
1
+ <div class="not-found">
2
2
  <h1>Oops! Page not found</h1>
3
3
  <a href="/">Return to homepage</a>
4
4
  </div>
@@ -10,9 +10,9 @@
10
10
  "theme": "dark",
11
11
  "logo": "/assets/brand/logo.svg",
12
12
  "legal": {
13
- "privacy": "",
14
- "cookie": "",
15
- "terms": "",
13
+ "privacy": "/privacy/",
14
+ "cookie": "/cookies/",
15
+ "terms": "/terms/",
16
16
  "copyright": {
17
17
  "year": "2026",
18
18
  "text": "All rights reserved."
@@ -1,3 +1,4 @@
1
1
  export function initExampleModule() {
2
2
  // Module logic here
3
+ alert("Example module is working!");
3
4
  }
@@ -99,13 +99,13 @@
99
99
 
100
100
  <body>
101
101
 
102
- {% include "global/header.njk" %}
102
+ {% include "global/header.njk" ignore missing %}
103
103
 
104
104
  <main>
105
105
  {{ content | safe }}
106
106
  </main>
107
107
 
108
- {% include "global/footer.njk" %}
108
+ {% include "global/footer.njk" ignore missing %}
109
109
 
110
110
  {#╔══════════════════╗
111
111
  ║ SCRIPTS ║
@@ -9,7 +9,7 @@ layout: base.njk
9
9
 
10
10
  {# Markdown files live in components/ too. Pass the data the file needs #}
11
11
  {#
12
- <article class="markdown-body">
13
- {% renderFile "your-file.md" | markdownPath, { site: site }, "md" %}
14
- </article>
12
+ <div class="markdown-body">
13
+ {% renderFile "your-file.md" | componentsPath, { alias: fileName }, "njk,md" %}
14
+ </div>
15
15
  #}
@@ -9,7 +9,7 @@ layout: base.njk
9
9
 
10
10
  {# Markdown files live in components/ too. Pass the data the file needs #}
11
11
  {#
12
- <article class="markdown-body">
13
- {% renderFile "your-file.md" | markdownPath, { site: site }, "md" %}
14
- </article>
12
+ <div class="markdown-body">
13
+ {% renderFile "your-file.md" | componentsPath, { alias: fileName }, "njk,md" %}
14
+ </div>
15
15
  #}
@@ -1,9 +1,5 @@
1
- //==========================
2
- // CSS RULES FOR THE ENTIRE SITE
3
- //==========================
4
-
5
1
  // Getting root rules from _root.scss
6
- @use 'root' as root;
2
+ @use 'root' as root; // Usage: root.$value-name
7
3
 
8
4
  // Frameworks imports
9
5
  @import "modules/frameworks/bootstrap";
@@ -20,13 +16,6 @@
20
16
  @import "modules/header";
21
17
  @import "modules/footer";
22
18
 
23
- @import "modules/animations";
24
- @import "modules/mobile";
25
-
26
- //==========================
27
- // Global css rules for the entire site
28
- //==========================
29
-
30
19
  *,
31
20
  *::before,
32
21
  *::after {
@@ -43,8 +32,4 @@ body {
43
32
 
44
33
  main {
45
34
  flex: 1;
46
- }
47
-
48
- a {
49
- text-decoration: none !important;
50
35
  }
@@ -3,12 +3,8 @@
3
3
  // overwritten by other imported files with the same variable names.
4
4
  // Use @use 'root' as root; to avoid namespace collisions.
5
5
 
6
-
7
- //==========================
8
- // STRUCTURE
9
- //==========================
10
6
  $header-height: 10vh;
11
7
  $header-padding-y: 15px;
12
8
  $header-padding-x: 15px;
13
9
 
14
- $primary-color: rgba(0, 0, 0, 0.5);
10
+ $header-footer-color: #11474b;
@@ -1,16 +1,13 @@
1
- //==========================
2
- // CSS RULES FOR FOOTER
3
- //==========================
4
-
5
1
  // Getting root rules from _root.scss
6
- @use "../root" as root;
2
+ @use "../root" as root; // Usage: root.$value-name
7
3
 
8
4
  footer {
9
5
  display: flex;
6
+ flex-wrap: wrap;
10
7
  justify-content: space-around;
11
8
  width: 100%;
12
9
  padding: root.$header-padding-y root.$header-padding-x;
13
- background-color: #2e7253;
10
+ background-color: root.$header-footer-color;
14
11
 
15
12
  h6 {
16
13
  margin-bottom: 0.75rem;
@@ -22,8 +19,19 @@ footer {
22
19
  margin: 0;
23
20
  }
24
21
 
25
- small {
26
- display: flex;
27
- gap: 1rem;
22
+ hr {
23
+ width: 100%;
24
+ border: 0;
25
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
26
+ margin: 1.5rem 0 1rem 0;
27
+ }
28
+
29
+ .copyright {
30
+ flex-basis: 100%;
31
+ text-align: center;
32
+
33
+ p {
34
+ margin: 0;
35
+ }
28
36
  }
29
37
  }
@@ -1,27 +1,30 @@
1
- //==========================
2
- // CSS RULES FOR HEADER
3
- //==========================
4
-
5
1
  // Getting root rules from _root.scss
6
- @use "../root" as root;
2
+ @use "../root" as root; // Usage: root.$value-name
7
3
 
8
4
  header {
9
- height: root.$header-height;
10
- width: 100%;
11
- display: flex;
12
- justify-content: center;
13
- align-items: center;
14
- padding: root.$header-padding-y root.$header-padding-x;
15
- background-color: #2e7253;
5
+ height: root.$header-height;
6
+ width: 100%;
7
+ display: flex;
8
+ justify-content: center;
9
+ align-items: center;
10
+ padding: root.$header-padding-y root.$header-padding-x;
11
+ background-color: root.$header-footer-color;
16
12
  }
17
13
 
18
14
  nav {
19
- display: flex;
20
- justify-content: space-between;
21
- align-items: center;
22
- width: 100%;
23
- }
15
+ display: flex;
16
+ justify-content: space-between;
17
+ align-items: center;
18
+ width: 100%;
24
19
 
25
- nav .logo {
26
- padding: 10px;
27
- }
20
+ .logo {
21
+ max-height: root.$header-height;
22
+ width: auto;
23
+ text-decoration: none !important;
24
+
25
+ img {
26
+ height: 50px;
27
+ width: auto;
28
+ }
29
+ }
30
+ }
@@ -1,9 +1,5 @@
1
- //==========================
2
- // CSS RULES FOR TYPOGRAPHY
3
- //==========================
4
-
5
1
  // Getting root rules from _root.scss
6
- @use "../root" as root;
2
+ @use "../root" as root; // Usage: root.$value-name
7
3
 
8
4
  html {
9
5
  font-size: 16px;
@@ -12,8 +8,4 @@ html {
12
8
 
13
9
  body {
14
10
  font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
15
- }
16
-
17
- a {
18
- text-decoration: none;
19
11
  }
@@ -1,10 +1,5 @@
1
- //==========================
2
- // CSS MODULES IMPORTS
3
- //==========================
4
-
5
- // Use @use with a namespace to avoid framework variable conflicts:
6
- // Example: root.$primary
7
- @use "../root" as root;
1
+ // Getting root rules from _root.scss
2
+ @use "../root" as root; // Usage: root.$value-name
8
3
 
9
4
  // This global module contains the import framework, necessary modules for each page and any other common styles
10
5
  @import "../global";
@@ -12,12 +7,7 @@
12
7
  // Import any other module you need by import down here
13
8
  // @import "../modules/moduleName";
14
9
 
15
- //==========================
16
- // PAGE CUSTOM CSS RULES
17
- //==========================
18
-
19
- // Add any custom rule specific to this page below
20
- // These rules override the framework and module styles
10
+ // Add any custom rule specific to this page below:
21
11
  // body {
22
12
  // background-color: root.$primary;
23
- // }
13
+ // }
@@ -1,4 +1,4 @@
1
- // import { initExampleModule } from "./modules/exampleModule"
1
+ // import { initExampleModule } from "./modules/exampleModule";
2
2
 
3
3
  document.addEventListener('DOMContentLoaded', () => {
4
4
  // initExampleModule();
@@ -1,3 +1,4 @@
1
1
  export function initExampleModule(): void {
2
2
  // Module logic here
3
+ alert("Example module is working!");
3
4
  }
package/tools/cli/ui.js CHANGED
@@ -22,7 +22,7 @@ const LOCAL_VERSION = require('../../package.json').version;
22
22
  const GLOBAL_VERSION = process.env[GLOBAL_VERSION_FLAG];
23
23
 
24
24
  const TITLE_SUFFIX = GLOBAL_VERSION && GLOBAL_VERSION !== LOCAL_VERSION
25
- ? ` (local v${LOCAL_VERSION})`
25
+ ? ` v${LOCAL_VERSION}`
26
26
  : '';
27
27
 
28
28
  const PLAIN_TITLE = `${BOX_TITLE}${TITLE_SUFFIX}`;
@@ -61,7 +61,6 @@
61
61
  "nothingToClean": "(i) nothing to clean \u2192 {path}"
62
62
  },
63
63
  "cli": {
64
- "usingLocalVersion": "Nibula cli local version ({local})",
65
64
  "createPrompt": "Name of the new page: ",
66
65
  "removePrompt": "Name of the page to remove: ",
67
66
  "renameFromPrompt": "Page to rename: ",
@@ -70,7 +69,7 @@
70
69
  "menuPrompt": "Choose an option: ",
71
70
  "layoutPrompt": "Select a layout (arrow keys, Enter to confirm):",
72
71
  "currentOutputPath": "Current path: \"{path}\"",
73
- "confirmRemove": "This permanently deletes all files for \"{name}\".",
72
+ "confirmRemove": "This permanently deletes the source files for \"{name}\". Rebuild to update the output.",
74
73
  "cancelled": "Cancelled.",
75
74
  "pageNotFound": "Page \"{name}\" does not exist.",
76
75
  "sameName": "Old and new name are the same.",
@@ -71,20 +71,10 @@
71
71
  "styleTemplate": "template.scss",
72
72
  "routeTemplate": "template.njk",
73
73
  "layoutExtension": "njk",
74
- "outputFiles": [
75
- "js/pages/{camelName}.js",
76
- "css/pages/{camelName}.css",
77
- "{pageName}.html",
78
- "pages/{pageName}.html"
79
- ],
80
- "outputDirectories": [
81
- "{pageName}",
82
- "pages/{pageName}"
83
- ],
84
74
  "defaultData": {
85
75
  "seo": {
86
76
  "title": "{title}",
87
- "description": "description",
77
+ "description": "Description",
88
78
  "keywords": "",
89
79
  "noindex": false,
90
80
  "canonical": ""
@@ -1,7 +1,7 @@
1
1
  const path = require('path');
2
2
  const settings = require('../config/settings.json');
3
3
  const { PATHS } = require('./paths');
4
- const { exists, readText, writeText, copyFile, moveFile, removeFile, removeDirectory, removeDirectoryIfEmpty } = require('./files');
4
+ const { exists, readText, writeText, copyFile, moveFile, removeFile, removeDirectoryIfEmpty } = require('./files');
5
5
  const { log } = require('./logger');
6
6
  const { formatText } = require('./text');
7
7
  const { languageSettings } = require('./project');
@@ -120,8 +120,8 @@ function removePage(pageName) {
120
120
  }
121
121
  if (!readPagesData()) return;
122
122
 
123
- const { source, output } = getPageArtifacts(pageName);
124
- const files = [source.style, source.script, source.route, ...output.files];
123
+ const { source } = getPageArtifacts(pageName);
124
+ const files = [source.style, source.script, source.route];
125
125
 
126
126
  for (const file of files) {
127
127
  try {
@@ -131,14 +131,6 @@ function removePage(pageName) {
131
131
  }
132
132
  }
133
133
 
134
- for (const directory of output.directories) {
135
- try {
136
- if (removeDirectory(directory)) log('page.fileDeleted', { path: directory });
137
- } catch (error) {
138
- log('page.deleteFailed', { path: directory, error: error.message });
139
- }
140
- }
141
-
142
134
  removePageData(pageName);
143
135
 
144
136
  const sourceDirectories = [source.style, source.script, source.route].map(file => path.dirname(file));
@@ -3,18 +3,7 @@ const settings = require('../config/settings.json');
3
3
  const { PATHS } = require('./paths');
4
4
  const { exists } = require('./files');
5
5
  const { languageSettings, scriptPagesDirectory } = require('./project');
6
- const { getCurrentOutputPath } = require('./outputPath');
7
- const { toCamelCase, formatText } = require('./text');
8
-
9
- const PATH_SEPARATOR = '/';
10
-
11
- function outputRoot() {
12
- return path.join(PATHS.root, getCurrentOutputPath() || settings.project.defaultOutputDirectory);
13
- }
14
-
15
- function resolveOutput(root, template, values) {
16
- return path.join(root, ...formatText(template, values).split(PATH_SEPARATOR));
17
- }
6
+ const { toCamelCase } = require('./text');
18
7
 
19
8
  function routeFile(pageName) {
20
9
  return path.join(PATHS.routes, `${pageName}.${settings.page.routeExtension}`);
@@ -26,8 +15,6 @@ function pageExists(pageName) {
26
15
 
27
16
  function getPageArtifacts(pageName) {
28
17
  const camelName = toCamelCase(pageName);
29
- const values = { camelName, pageName };
30
- const root = outputRoot();
31
18
 
32
19
  return {
33
20
  camelName,
@@ -36,11 +23,7 @@ function getPageArtifacts(pageName) {
36
23
  script: path.join(scriptPagesDirectory(), `${camelName}.${languageSettings().extension}`),
37
24
  route: routeFile(pageName),
38
25
  },
39
- output: {
40
- files: settings.page.outputFiles.map((template) => resolveOutput(root, template, values)),
41
- directories: settings.page.outputDirectories.map((template) => resolveOutput(root, template, values)),
42
- },
43
26
  };
44
27
  }
45
28
 
46
- module.exports = { getPageArtifacts, pageExists };
29
+ module.exports = { getPageArtifacts, pageExists };
@@ -9,7 +9,7 @@ layout: base.njk
9
9
 
10
10
  {# Markdown files live in components/ too. Pass the data the file needs #}
11
11
  {#
12
- <article class="markdown-body">
13
- {% renderFile "your-file.md" | markdownPath, { site: site }, "md" %}
14
- </article>
12
+ <div class="markdown-body">
13
+ {% renderFile "your-file.md" | componentsPath, { alias: fileName }, "njk,md" %}
14
+ </div>
15
15
  #}
@@ -1,10 +1,5 @@
1
- //==========================
2
- // CSS MODULES IMPORTS
3
- //==========================
4
-
5
- // Use @use with a namespace to avoid framework variable conflicts:
6
- // Example: root.$primary
7
- @use "../root" as root;
1
+ // Getting root rules from _root.scss
2
+ @use "../root" as root; // Usage: root.$value-name
8
3
 
9
4
  // This global module contains the import framework, necessary modules for each page and any other common styles
10
5
  @import "../global";
@@ -12,12 +7,7 @@
12
7
  // Import any other module you need by import down here
13
8
  // @import "../modules/moduleName";
14
9
 
15
- //==========================
16
- // PAGE CUSTOM CSS RULES
17
- //==========================
18
-
19
- // Add any custom rule specific to this page below
20
- // These rules override the framework and module styles
10
+ // Add any custom rule specific to this page below:
21
11
  // body {
22
- // background-color: root.$primary-color;
23
- // }
12
+ // background-color: root.$primary;
13
+ // }
@@ -1,25 +0,0 @@
1
- //==========================
2
- // CSS RULES FOR ANIMATIONS
3
- //==========================
4
-
5
- // Getting root rules from _root.scss
6
- @use "../root" as root;
7
-
8
- .fade-in {
9
- animation: fadeIn 1s;
10
- }
11
-
12
- @keyframes fadeIn {
13
- from {
14
- opacity: 0;
15
- }
16
-
17
- to {
18
- opacity: 1;
19
- }
20
- }
21
-
22
- @keyframes spin {
23
- from { transform: rotate(0deg); }
24
- to { transform: rotate(360deg); }
25
- }
@@ -1,30 +0,0 @@
1
- //==========================
2
- // CSS RULES FOR RESPONSIVE
3
- //==========================
4
-
5
- // Getting root rules from _root.scss
6
- @use "../root" as root;
7
-
8
- //==========================
9
- // MEDIA QUERIES
10
- //==========================
11
-
12
- @media (max-width: 1400px) {
13
-
14
- }
15
-
16
- @media (max-width: 1200px) {
17
-
18
- }
19
-
20
- @media (max-width: 992px) {
21
-
22
- }
23
-
24
- @media (max-width: 768px) {
25
-
26
- }
27
-
28
- @media (max-width: 576px) {
29
-
30
- }